marketing-mindset 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +12 -0
  2. package/bin/cli.js +35 -0
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -41,3 +41,15 @@ scope and the prices published before you get on a call:
41
41
  Scope: https://axelfreeman.com/scope.html · Pricing: https://axelfreeman.com/pricing.html
42
42
 
43
43
  MIT © Axel Freeman
44
+
45
+ ## Agent readiness / AEO checklist from the CLI
46
+
47
+ ```
48
+ npx marketing-mindset aeo # 23 weighted checks, grouped, with the max score
49
+ npx marketing-mindset aeo --json # same data for a script or an agent
50
+ ```
51
+
52
+ The same checklist is a browser tool with a live score:
53
+ <https://axelfreeman.github.io/marketing-mindset/tools/aeo-readiness-checklist.html>.
54
+ If you want the plumbing in that checklist built for you (offer page, query-intent pages, schema,
55
+ `llms.txt`, IndexNow, the tracked event), packages are published at https://axelfreeman.com/marketing-engineer.html.
package/bin/cli.js CHANGED
@@ -60,6 +60,37 @@ function readSkill() {
60
60
  return fs.readFileSync(SKILL, "utf8");
61
61
  }
62
62
 
63
+
64
+ /* --- agent-readiness / AEO checklist (23 weighted checks) -------------------------------
65
+ * The same checklist that runs in the browser tool, as data: agents can read it and score
66
+ * a site without fetching HTML.
67
+ * marketing-mindset aeo grouped checklist with weights and the max score
68
+ * marketing-mindset aeo --json machine-readable
69
+ */
70
+ const AEO_GROUPS = [["Crawlability",[["robots.txt does not block GPTBot, ClaudeBot, PerplexityBot, Google-Extended, OAI-SearchBot",3],["Pages render without JavaScript, or have a server-side/no-JS fallback",2],["No login wall or consent interstitial in front of the content you want quoted",3],["The page returns 200 to a plain curl with no cookies",2],["One canonical URL per answer - no www/non-www or trailing-slash duplicates",2]]],["Answer-ready content",[["Every important page answers one question in the first 60 words",3],["Headings are questions a human would type, not internal project names",2],["Prices, limits and timeframes are stated as numbers, not 'flexible'",3],["Claims have a source or a live URL attached",2],["A definition page exists for the category you want to be cited in",3]]],["Machine-readable",[["schema.org markup on service/product pages (Service, Offer, Product, FAQPage)",3],["FAQPage or QAPage markup on question pages, answers 40-500 words",2],["XML sitemap submitted, and every new URL pinged via IndexNow",2],["llms.txt describes what the site answers and where the canonical pages are",2],["Organisation/Person entity links the page to a real, verifiable identity",2]]],["Someone else's page",[["You are present where the model already reads: package registries, repos, docs",3],["At least one open, mergeable pull request or discussion contribution",2],["Your content is mirrored somewhere you do not control",2],["A third-party page links to your canonical URL",3]]],["Proof and measurement",[["Every claim on the site can be opened by the reader in one click",3],["One tracked event for the outcome that matters, in your own analytics property",3],["A public changelog or artifact list with dates",2],["An archived snapshot of the key pages exists",1]]]];
71
+ const AEO_MAX = AEO_GROUPS.reduce((a, [_, its]) => a + its.reduce((b, [, w]) => b + w, 0), 0);
72
+
73
+ function runAeo(opts) {
74
+ if (opts.json) {
75
+ console.log(JSON.stringify({ max_score: AEO_MAX, groups: AEO_GROUPS.map(([g, its]) => ({ group: g, checks: its.map(([t, w]) => ({ check: t, weight: w })) })) }, null, 2));
76
+ return 0;
77
+ }
78
+ console.log("Agent readiness / AEO checklist - can AI answers find, read and quote the site?");
79
+ console.log("Max score: " + AEO_MAX + "\n");
80
+ let n = 0;
81
+ AEO_GROUPS.forEach(([g, its]) => {
82
+ console.log(g + ":");
83
+ its.forEach(([t, w]) => { n += 1; console.log(" [" + w + "] " + t); });
84
+ console.log("");
85
+ });
86
+ console.log(n + " checks, " + AEO_MAX + " points. Score guide: <30% invisible for structural reasons,");
87
+ console.log("30-60% crawlable but not quotable, 60-80% quoted occasionally (third-party presence missing),");
88
+ console.log(">80% the rest is cadence. Two checks carry the most weight: one question answered in the");
89
+ console.log("first 60 words, and prices/limits stated as numbers.");
90
+ console.log("Full description of the work: https://axelfreeman.com/marketing-engineer.html");
91
+ return 0;
92
+ }
93
+
63
94
  const cmd = (process.argv[2] || "").toLowerCase();
64
95
  const rest = process.argv.slice(3);
65
96
 
@@ -92,6 +123,8 @@ if (cmd === "sample") {
92
123
  ? "keep running — below the required volume, a verdict now is noise"
93
124
  : "read it — volume is sufficient; kill if conversions are at or under the floor"
94
125
  }, null, 2));
126
+ } else if (cmd === "aeo") {
127
+ process.exit(runAeo(flags(rest)));
95
128
  } else if (cmd === "sections") {
96
129
  sections(readSkill()).forEach((s, i) => console.log(String(i + 1).padStart(2) + ". " + s.title));
97
130
  } else if (cmd === "read") {
@@ -114,6 +147,8 @@ Usage:
114
147
  --base 0.03 --lift 0.2 --power 0.8 --alpha 0.05
115
148
  npx marketing-mindset kill kill rule for a running test
116
149
  --base 0.03 --n 1500 --lift 0.2
150
+ npx marketing-mindset aeo agent-readiness / AEO checklist (23 weighted checks)
151
+ --json machine-readable
117
152
  npx marketing-mindset sections every section of the skill
118
153
  npx marketing-mindset read numbers print one section
119
154
  npx marketing-mindset install copy the skill into your agent's skills dir
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "marketing-mindset",
3
- "version": "1.1.1",
4
- "description": "A marketer's operating mindset as an installable agent skill and CLI: test-size floors, kill rules, channel economics. npx marketing-mindset sample|kill|sections|read|install.",
3
+ "version": "1.2.0",
4
+ "description": "A marketer's operating mindset as an installable agent skill and CLI: test-size floors, kill rules, channel economics, agent-readiness checklist. npx marketing-mindset sample|kill|aeo|sections|read|install.",
5
5
  "keywords": [
6
6
  "agent-skill",
7
7
  "skill",