anymorph 0.2.2 → 0.2.4

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 (36) hide show
  1. package/README.md +5 -0
  2. package/dist/index.js +26 -6
  3. package/dist/skillpacks/geo/skills/brand-owned-diagnosis/SKILL.md +54 -0
  4. package/dist/skillpacks/geo/skills/brand-owned-diagnosis/agents/openai.yaml +4 -0
  5. package/dist/skillpacks/geo/skills/brand-owned-diagnosis/references/diagnosis-contract.md +96 -0
  6. package/dist/skillpacks/geo/skills/brand-owned-diagnosis/references/workflow.md +191 -0
  7. package/dist/skillpacks/geo/skills/geo-generating-actions/SKILL.md +79 -0
  8. package/dist/skillpacks/geo/skills/geo-generating-actions/agents/openai.yaml +4 -0
  9. package/dist/skillpacks/geo/skills/geo-generating-actions/references/orchestrator.workflow.md +274 -0
  10. package/dist/skillpacks/geo/skills/geo-initializing-strategy/SKILL.md +50 -0
  11. package/dist/skillpacks/geo/skills/geo-initializing-strategy/agents/openai.yaml +4 -0
  12. package/dist/skillpacks/geo/skills/geo-initializing-strategy/references/external-authority-diagnosis.md +66 -0
  13. package/dist/skillpacks/geo/skills/geo-initializing-strategy/references/foundation-diagnosis.md +86 -0
  14. package/dist/skillpacks/geo/skills/geo-initializing-strategy/references/memory-contract.md +15 -0
  15. package/dist/skillpacks/geo/skills/geo-initializing-strategy/references/semantic-clusters-diagnosis.md +58 -0
  16. package/dist/skillpacks/geo/skills/geo-initializing-strategy/references/strategy-map-contract.md +26 -0
  17. package/dist/skillpacks/geo/skills/geo-initializing-strategy/references/visibility-diagnosis.md +50 -0
  18. package/dist/skillpacks/geo/skills/geo-pages-diagnosis/SKILL.md +51 -0
  19. package/dist/skillpacks/geo/skills/geo-pages-diagnosis/agents/openai.yaml +4 -0
  20. package/dist/skillpacks/geo/skills/geo-pages-diagnosis/references/diagnosis-contract.md +106 -0
  21. package/dist/skillpacks/geo/skills/geo-pages-diagnosis/references/workflow.md +219 -0
  22. package/dist/skillpacks/geo/skills/geo-writer/SKILL.md +234 -0
  23. package/dist/skillpacks/geo/skills/geo-writer/agents/openai.yaml +4 -0
  24. package/dist/skillpacks/geo/skills/geo-writer/references/content-writer-contract.md +316 -0
  25. package/dist/skillpacks/geo/skills/geo-writer/references/direct-sql.md +187 -0
  26. package/dist/skillpacks/geo/skills/geo-writer/references/seo-geo-insights.md +269 -0
  27. package/dist/skillpacks/geo/skills/social-execution-planning/SKILL.md +53 -0
  28. package/dist/skillpacks/geo/skills/social-execution-planning/agents/openai.yaml +5 -0
  29. package/dist/skillpacks/geo/skills/social-execution-planning/references/execution-contract.md +68 -0
  30. package/dist/skillpacks/geo/skills/social-execution-planning/references/platform-playbooks.md +59 -0
  31. package/dist/skillpacks/geo/skills/social-execution-planning/references/reddit-rules.md +69 -0
  32. package/dist/skillpacks/geo/skills/third-party-diagnosis/SKILL.md +54 -0
  33. package/dist/skillpacks/geo/skills/third-party-diagnosis/agents/openai.yaml +4 -0
  34. package/dist/skillpacks/geo/skills/third-party-diagnosis/references/diagnosis-contract.md +111 -0
  35. package/dist/skillpacks/geo/skills/third-party-diagnosis/references/workflow.md +174 -0
  36. package/package.json +1 -1
@@ -0,0 +1,274 @@
1
+ # Orchestrator Workflow
2
+
3
+ ## Role
4
+
5
+ The orchestrator owns the weekly GEO strategy run.
6
+
7
+ It does four things:
8
+
9
+ 1. Analyze last week's performance.
10
+ 2. Combine performance with tenant strategy into one common run context.
11
+ 3. Run all three channel diagnoses with that common context.
12
+ 4. Judge the returned proposals and write the final action list.
13
+
14
+ The orchestrator is not just a router.
15
+
16
+ It is the final decision-maker for the run.
17
+
18
+ ## Inputs
19
+
20
+ - `agent/runs/{runId}/context.json`
21
+ - `agent/runs/{runId}/manifest.json`
22
+ - `agent/runs/{runId}/intents.json`
23
+ - `agent/BRAND.md`
24
+ - `agent/STRATEGY.md`
25
+ - `agent/LEARNINGS.md`
26
+ - prior `agent/runs/*` summaries when useful
27
+ - `schemaCatalog`
28
+ - `signals`
29
+ - `geo_*` query surface
30
+
31
+ ## Required Views
32
+
33
+ Use these views when available:
34
+
35
+ - `geo_intent_coverage`
36
+ - `geo_recommendation_quadrants`
37
+ - `geo_page_intent_visibility_gaps`
38
+ - `geo_page_performance`
39
+ - `geo_strategy_actions_recent`
40
+ - `geo_pages`
41
+ - `geo_intents`
42
+
43
+ Use these when third-party analysis is enabled:
44
+
45
+ - `geo_intent_citations`
46
+ - `geo_third_party_domains`
47
+ - `geo_competitor_citations`
48
+ - `geo_third_party_sentiment`
49
+
50
+ If a view is unavailable, continue with lower confidence and record the missing view in `rationale.md`.
51
+
52
+ ## Workflow
53
+
54
+ ### 1. Load Stable Tenant Context
55
+
56
+ Read:
57
+
58
+ - `agent/BRAND.md`
59
+ - `agent/STRATEGY.md`
60
+ - `agent/LEARNINGS.md`
61
+ - recent prior run artifacts
62
+
63
+ Extract:
64
+
65
+ - current tenant priorities
66
+ - explicit channel preferences
67
+ - forbidden actions
68
+ - recent bets
69
+ - repeated learnings
70
+ - open questions
71
+
72
+ Do not rewrite tenant memory in this phase.
73
+
74
+ ### 2. Analyze Last Week's Performance
75
+
76
+ Build a concise performance summary for the run.
77
+
78
+ Use:
79
+
80
+ - visibility changes
81
+ - weak intents
82
+ - covered-but-weak intents
83
+ - recommendation quadrant changes
84
+ - page performance changes
85
+ - citation/domain changes
86
+ - prior action outcomes when available
87
+
88
+ The summary should answer:
89
+
90
+ - What improved?
91
+ - What regressed?
92
+ - Which intents remain weak?
93
+ - Which existing pages are underperforming?
94
+ - Which pages or intents look healthy enough to avoid touching?
95
+ - Which prior actions should suppress repeats?
96
+
97
+ ### 3. Build Common Run Context
98
+
99
+ Create one shared context object for all channel diagnoses.
100
+
101
+ It should include:
102
+
103
+ - tenant objective for this run
104
+ - relevant brand constraints
105
+ - strategy priorities from `STRATEGY.md`
106
+ - last-week performance summary
107
+ - recent action exclusion mask
108
+ - candidate intent/page/domain slices
109
+ - evidence budget
110
+ - output schema
111
+
112
+ This context is shared by all three channel diagnoses.
113
+
114
+ Channel diagnoses may receive channel-specific candidate slices, but they should share the same strategic baseline.
115
+
116
+ ### 4. Run Three Channel Diagnoses
117
+
118
+ Apply these channel skills directly:
119
+
120
+ - `brand-owned-diagnosis`
121
+ - `geo-pages-diagnosis`
122
+ - `third-party-diagnosis`
123
+
124
+ Each channel diagnosis returns one compact proposal set to the lead agent.
125
+
126
+ Expected channel diagnosis output:
127
+
128
+ ```json
129
+ {
130
+ "summary": "Short channel-level diagnosis.",
131
+ "proposals": [
132
+ {
133
+ "intentId": "intent_123",
134
+ "candidateType": "page_exists_low_visibility",
135
+ "target": {
136
+ "pageId": "page_123",
137
+ "url": "https://example.com/page"
138
+ },
139
+ "rootCauses": [
140
+ {
141
+ "bucket": "proof_gap",
142
+ "confidence": 0.72,
143
+ "evidence": ["Evidence summary"]
144
+ }
145
+ ],
146
+ "actionFamily": "refresh_existing_page",
147
+ "operations": ["Add proof section"],
148
+ "priority": "high",
149
+ "confidence": "medium",
150
+ "evidence": [
151
+ {
152
+ "type": "signal",
153
+ "ref": "geo_recommendation_quadrants:intent_123",
154
+ "summary": "mentioned_not_recommended_rate is high"
155
+ }
156
+ ],
157
+ "whyNow": "Why this should be considered this week.",
158
+ "risks": ["Possible risk or uncertainty"]
159
+ }
160
+ ],
161
+ "rejected": [
162
+ {
163
+ "ref": "intent_456",
164
+ "reason": "Suppressed by recent action mask"
165
+ }
166
+ ],
167
+ "noActionRationale": "Optional. Use when proposals is empty."
168
+ }
169
+ ```
170
+
171
+ Channel diagnoses must not include `workspaceId`, `runId`, `channel`, final action id, final `assetType`, or final URL.
172
+ The orchestrator derives final action ids, channel-to-asset mapping, and executable action shape.
173
+
174
+ ### 5. Judge Channel Outputs
175
+
176
+ The orchestrator reviews all proposals.
177
+
178
+ It should ask:
179
+
180
+ - Does this proposal match tenant strategy?
181
+ - Is the evidence strong enough?
182
+ - Is it redundant with another channel's proposal?
183
+ - Is it suppressed by recent actions?
184
+ - Is the action executable by the current product surface?
185
+ - Is it more important than competing proposals this week?
186
+
187
+ The orchestrator may:
188
+
189
+ - accept
190
+ - merge
191
+ - downgrade
192
+ - reject
193
+ - move to `rationale.md` only
194
+
195
+ ### 6. Resolve Cross-Channel Conflicts
196
+
197
+ Common conflicts:
198
+
199
+ - `brand_owned` proposes refreshing a page while `geo_pages` proposes creating a new page for the same intent.
200
+ - `geo_pages` proposes iteration while `third_party` argues authority is the bottleneck.
201
+ - `third_party` proposes outreach but owned page coverage is clearly weak.
202
+
203
+ Default resolution:
204
+
205
+ 1. If an existing page clearly owns the intent and content gaps are fixable, prefer updating it.
206
+ 2. If no page exists, prefer GEO page generation unless tenant strategy says customer-site page first.
207
+ 3. If page content is strong but external validation is the bottleneck, keep third-party as a candidate.
208
+ 4. If evidence is weak, do not emit an action; record the uncertainty.
209
+
210
+ ### 7. Build Final Action List
211
+
212
+ Select at most 20 final actions.
213
+
214
+ Prefer:
215
+
216
+ 1. high-confidence fixes for existing important pages
217
+ 2. high-confidence generated GEO page iteration
218
+ 3. high-confidence net-new page generation
219
+ 4. third-party actions only when actionability is clear
220
+
221
+ Low-confidence findings go to `rationale.md`.
222
+
223
+ Guardrail:
224
+
225
+ - `brand_owned` is only for customer-owned discovered pages.
226
+ - Do not send Anymorph-generated, recommended, preview-only, or unpublished GEO pages to Fix.
227
+ - Existing generated page work must stay `assetType: "geo_page"` even when the proposed operation is a technical fix or content iteration.
228
+
229
+ ### 8. Write Artifacts
230
+
231
+ Write:
232
+
233
+ - `agent/runs/{runId}/actions.json`
234
+ - `agent/runs/{runId}/rationale.md`
235
+ - `agent/runs/{runId}/status.json`
236
+
237
+ Optionally archive compact observations in:
238
+
239
+ - `agent/archive/{time5}-{slug}.json`
240
+
241
+ Update stable memory only when the run changes durable tenant strategy.
242
+ On bootstrap runs, also update stable memory when `agent/STRATEGY.md` or
243
+ `agent/LEARNINGS.md` is missing, blank, or still scaffold-only.
244
+
245
+ `agent/BRAND.md` is backend-managed. It is regenerated from the workspace
246
+ brand record whenever the `brandHash` frontmatter drifts, and the agent
247
+ must not edit it. If a brand fact looks wrong, raise it in
248
+ `rationale.md` rather than editing the file.
249
+
250
+ ## Final Action Contract
251
+
252
+ Each final action must include:
253
+
254
+ - `operation`
255
+ - `surface`
256
+ - `assetType`
257
+ - `intentId`
258
+ - `target`
259
+ - `objective`
260
+ - `changeBrief`
261
+ - `reason`
262
+ - `expectedOutcome`
263
+ - `evidence`
264
+ - `priority`
265
+ - `confidence`
266
+
267
+ ## Guardrails
268
+
269
+ - Do not let a channel diagnosis proposal pass through automatically.
270
+ - Do not choose duplicate actions for the same intent unless they are clearly complementary.
271
+ - Do not invent final routes for create actions.
272
+ - Do not treat missing data as proof.
273
+ - Do not diagnose authority from low visibility alone.
274
+ - Do not update tenant memory with generic SEO/GEO advice.
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: geo-initializing-strategy
3
+ description: Use when creating or repairing the initial Strategy Map baseline for an Anymorph workspace before recurring GEO action generation begins.
4
+ ---
5
+
6
+ # GEO Initializing Strategy
7
+
8
+ Use this skill to create the first durable Strategy Map for a tenant.
9
+
10
+ This is a baseline skill, not an action-generation skill. It diagnoses the workspace's owned-site foundation, visibility state, semantic clusters, and external authority so later GEO loops have a stable operating plan.
11
+
12
+ ## Required Inputs
13
+
14
+ - Tenant repository path.
15
+ - `workspaceId` for internal MCP calls.
16
+ - Host-created Strategy Map context and manifest files.
17
+ - Existing tenant memory files when present:
18
+ - `agent/BRAND.md`
19
+ - `agent/STRATEGY.md`
20
+ - `agent/LEARNINGS.md`
21
+
22
+ ## Workflow
23
+
24
+ 1. Read the host context and manifest first.
25
+ 2. Read existing tenant memory before using external evidence.
26
+ 3. Use Strategy Map diagnoses for foundation, visibility, semantic clusters, and external authority.
27
+ 4. Treat diagnosis section JSON files as the source of truth after they are submitted.
28
+ 5. Synthesize a long-term strategy with investment mix, active bets, guardrails, and open strategic questions.
29
+ 6. Rewrite `agent/STRATEGY.md` as the canonical human-readable Strategy Map.
30
+ 7. Submit structured Strategy Map artifacts through the runtime artifact tools; do not write structured JSON artifacts directly.
31
+
32
+ ## Contracts
33
+
34
+ Read these references only when needed:
35
+
36
+ - `references/memory-contract.md` for tenant memory file requirements.
37
+ - `references/strategy-map-contract.md` for output boundaries and quality bar.
38
+ - `references/foundation-diagnosis.md` for owned-site foundation diagnosis.
39
+ - `references/visibility-diagnosis.md` for AI visibility baseline diagnosis.
40
+ - `references/semantic-clusters-diagnosis.md` for semantic cluster diagnosis.
41
+ - `references/external-authority-diagnosis.md` for external authority diagnosis.
42
+
43
+ ## Guardrails
44
+
45
+ - Preserve YAML frontmatter on existing tenant memory files.
46
+ - Never write empty frontmatter.
47
+ - Do not generate weekly actions, page briefs, outreach tasks, or execution steps.
48
+ - Prefer `unknown` or omitted optional fields over invented certainty.
49
+ - Exclude Anymorph-generated GEO pages from owned-site foundation evidence.
50
+ - Do not edit `agent/BRAND.md`; raise brand drift in rationale instead.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "GEO Initializing Strategy"
3
+ short_description: "Create the initial Strategy Map baseline for a workspace."
4
+ default_prompt: "Use $geo-initializing-strategy to create the initial Strategy Map baseline for this workspace."
@@ -0,0 +1,66 @@
1
+ # Strategy Map: External Authority Diagnosis
2
+
3
+ Summarize external authority by surface class:
4
+
5
+ - Reddit
6
+ - YouTube
7
+ - Wikipedia/Wikidata
8
+ - review platforms
9
+ - directories
10
+ - publications
11
+ - forums
12
+ - podcasts
13
+ - newsletters
14
+ - social
15
+ - other
16
+
17
+ Capture tenant presence, competitor presence, relevance, actionability, and strategic implication.
18
+
19
+ Do not include outreach copy, posts, scripts, or tactical execution steps.
20
+
21
+ Use DataForSEO as the primary paid source for backlink and referring-domain evidence. Prefer `mcp__anymorph__dataforseo_research` for:
22
+
23
+ - `/v3/backlinks/summary/live`
24
+ - `/v3/backlinks/referring_domains/live`
25
+ - `/v3/backlinks/backlinks/live`
26
+ - `/v3/dataforseo_labs/google/domain_rank_overview/live`
27
+
28
+ Ahrefs is not required for this section.
29
+
30
+ Keep web research bounded:
31
+
32
+ - Use at most 6 `mcp__anymorph__web_search` calls.
33
+ - Use `mcp__anymorph__summarized_web_scrape` only for the highest-signal pages that change the diagnosis.
34
+ - Prefer citation tools before broad web search.
35
+
36
+ Never emit `null`. Omit optional fields when unknown. Required unknown enum fields must use `unknown`.
37
+
38
+ Submit exactly one section artifact with `mcp__strategy_map_artifacts__submit_strategy_map_section`.
39
+
40
+ ```json
41
+ {
42
+ "section": "externalAuthority",
43
+ "artifact": [
44
+ {
45
+ "id": "auth-short-stable-id",
46
+ "surfaceClass": "reddit | youtube | wikipedia_wikidata | review_platform | directory | publication | forum | podcast | newsletter | social | other",
47
+ "relevance": "high | medium | low | unknown",
48
+ "tenantPresence": "strong | medium | weak | absent | unknown",
49
+ "competitorPresence": "strong | medium | weak | absent | unknown",
50
+ "actionability": "high | medium | low | none | unknown",
51
+ "strategicImplication": "What this authority state means for the roadmap.",
52
+ "evidenceRefs": ["ev-authority-1"]
53
+ }
54
+ ],
55
+ "evidence": [
56
+ {
57
+ "id": "ev-authority-1",
58
+ "type": "signal | workspace | source | research",
59
+ "ref": "tool or source reference",
60
+ "summary": "Specific evidence summary."
61
+ }
62
+ ]
63
+ }
64
+ ```
65
+
66
+ Final response: one short sentence naming the saved section.
@@ -0,0 +1,86 @@
1
+ # Strategy Map: Foundation Diagnosis
2
+
3
+ Diagnose the technical SEO/GEO foundation.
4
+
5
+ Focus only on durable strategic signals:
6
+
7
+ - indexability
8
+ - crawlability
9
+ - schema/content parity
10
+ - AI crawler access
11
+ - internal linking
12
+ - page experience
13
+
14
+ Do not emit page-level fixes, implementation briefs, or action lists.
15
+
16
+ Use `mcp__anymorph__dataforseo_onpage` as the primary owned-site crawl and internal-link evidence source.
17
+
18
+ Baseline rule:
19
+
20
+ - Foundation is the existing brand-owned site baseline.
21
+ - Exclude Anymorph-generated GEO pages from owned-page, internal-link hub, inbound-link, orphan-page, and crawl-state judgments.
22
+ - Pass `workspaceId` to `dataforseo_onpage`; backend will remove generated GEO pages from DFS pages/links results.
23
+ - Generated GEO pages may be mentioned only as strategy execution surfaces in semantic/visibility synthesis, not as Foundation evidence.
24
+
25
+ Expected DataForSEO On-Page flow:
26
+
27
+ 1. `action=start_crawl`, `target=<workspace domain>`, `workspaceId=<workspace id>`, `maxCrawlPages` around 100.
28
+ 2. `action=summary` with the returned `taskId`, `workspaceId=<workspace id>`.
29
+ 3. If the crawl is finished, call `action=pages` ordered by `meta.inbound_links_count,desc`, with `workspaceId=<workspace id>`.
30
+ 4. Call `action=links` with `direction=internal`, `dofollowOnly=true`, `workspaceId=<workspace id>`.
31
+
32
+ Use these DFS fields:
33
+
34
+ - `status_code` and `page_to_status_code` for crawl/indexability evidence.
35
+ - `meta.internal_links_count`, `meta.inbound_links_count`, and `checks.is_orphan_page` for internal-link topology.
36
+ - `page_from`, `page_to`, `link_from`, `link_to`, and `dofollow` for edge evidence.
37
+
38
+ Do not use DataForSEO Backlinks API as a substitute for owned-site internal-link evidence. Use DataForSEO On-Page only.
39
+
40
+ Do not claim a page is an in-content hub from DFS alone. DFS On-Page can show internal edges and target status, but not guaranteed nav/footer/content placement. For true in-content hub claims, corroborate with CMS source or page HTML via `get_page_source_code`, `get_page_content`, or summarized scrape.
41
+
42
+ Use Ahrefs only as optional enrichment for crawl and in-content internal-link evidence. For internal-link hubs, filter to in-content, dofollow links when the endpoint supports it. If Ahrefs returns "API units limit reached", times out, fails auth, or is unavailable, stop calling Ahrefs and continue with DataForSEO On-Page + owned-source evidence.
43
+
44
+ Use `mcp__anymorph__summarized_web_scrape` by its full tool name. Do not call a bare `mcp__summarized_web_scrape`.
45
+
46
+ Never emit `null`. Omit optional fields when unknown. Required unknown enum fields must use `unknown`.
47
+
48
+ Submit exactly one section artifact with `mcp__strategy_map_artifacts__submit_strategy_map_section`.
49
+
50
+ ```json
51
+ {
52
+ "section": "foundation",
53
+ "artifact": {
54
+ "status": "strong | medium | weak | unknown",
55
+ "signals": {
56
+ "indexability": "strong | medium | weak | unknown",
57
+ "crawlability": "strong | medium | weak | unknown",
58
+ "schemaParity": "strong | medium | weak | unknown",
59
+ "aiCrawlerAccess": "strong | medium | weak | unknown",
60
+ "internalLinking": "strong | medium | weak | unknown",
61
+ "pageExperience": "strong | medium | weak | unknown"
62
+ },
63
+ "blockers": [
64
+ {
65
+ "id": "blk-short-stable-id",
66
+ "type": "indexability | crawlability | schema_parity | ai_crawler_access | internal_linking | page_experience | faceted_navigation | duplicate_content | rendering | other",
67
+ "severity": "high | medium | low",
68
+ "summary": "Strategic blocker, not a page-level fix brief.",
69
+ "evidenceRefs": ["ev-foundation-1"]
70
+ }
71
+ ],
72
+ "strategicImplication": "What this foundation state means for long-term investment mix.",
73
+ "evidenceRefs": ["ev-foundation-1"]
74
+ },
75
+ "evidence": [
76
+ {
77
+ "id": "ev-foundation-1",
78
+ "type": "signal | workspace | source | research",
79
+ "ref": "tool or source reference",
80
+ "summary": "Specific evidence summary."
81
+ }
82
+ ]
83
+ }
84
+ ```
85
+
86
+ Final response: one short sentence naming the saved section.
@@ -0,0 +1,15 @@
1
+ # Tenant Memory Contract
2
+
3
+ Durable tenant memory lives in the tenant repository.
4
+
5
+ - `agent/BRAND.md`: brand facts regenerated by backend; read-only during Strategy Map runs.
6
+ - `agent/STRATEGY.md`: canonical human-readable Strategy Map.
7
+ - `agent/LEARNINGS.md`: stable repeated observations only.
8
+
9
+ Rules:
10
+
11
+ - Keep frontmatter present and non-empty.
12
+ - Preserve existing frontmatter keys unless the run has explicit reason to update them.
13
+ - Keep memory concise.
14
+ - Do not paste raw evidence, generic SEO advice, or long research transcripts.
15
+ - Put run-specific details under `agent/strategy-map/runs/{runId}/`.
@@ -0,0 +1,58 @@
1
+ # Strategy Map: Semantic Clusters Diagnosis
2
+
3
+ Map the brand's long-term opportunity space into semantic clusters.
4
+
5
+ Each cluster should describe:
6
+
7
+ - intent
8
+ - AI decision criteria
9
+ - current coverage state
10
+ - missing surface types
11
+ - known overlap or cannibalization risk
12
+ - confidence
13
+
14
+ Do not include recommended actions, briefs, or page creation instructions. The orchestrator will turn cluster diagnosis into long-term strategy.
15
+
16
+ Use DataForSEO-backed tools first for keyword demand, SERP shape, ranked-keyword gaps, and competitor content gaps:
17
+
18
+ - `mcp__anymorph__search_keywords`
19
+ - `mcp__anymorph__serp_snapshot`
20
+ - `mcp__anymorph__dataforseo_research`
21
+ - `mcp__anymorph__get_competitor_gap`
22
+
23
+ Use Ahrefs only when available for in-content internal-link hub evidence. If Ahrefs returns "API units limit reached", times out, fails auth, or is unavailable, stop calling Ahrefs and omit `hubSurfaceId` unless a real non-Ahrefs surface id is known.
24
+
25
+ Never emit `null`. Omit optional fields like `hubSurfaceId` and `overlaps` when unknown. Required unknown enum fields must use `unknown`.
26
+
27
+ Submit exactly one section artifact with `mcp__strategy_map_artifacts__submit_strategy_map_section`.
28
+
29
+ ```json
30
+ {
31
+ "section": "semanticClusters",
32
+ "artifact": [
33
+ {
34
+ "id": "cl-short-stable-id",
35
+ "name": "Cluster name",
36
+ "intent": "User intent this cluster captures",
37
+ "aiDecisionCriteria": ["Criteria AI answers compare"],
38
+ "priority": "high | medium | low",
39
+ "coverageState": "covered | gap | weak | overlap | monitor | unknown",
40
+ "hubSurfaceId": "optional existing hub surface id",
41
+ "missingSurfaceTypes": ["proof_surface", "comparison_page"],
42
+ "overlaps": ["optional overlapping cluster ids"],
43
+ "confidence": "high | medium | low",
44
+ "evidenceRefs": ["ev-semantic-1"]
45
+ }
46
+ ],
47
+ "evidence": [
48
+ {
49
+ "id": "ev-semantic-1",
50
+ "type": "signal | workspace | source | research",
51
+ "ref": "tool or source reference",
52
+ "summary": "Specific evidence summary."
53
+ }
54
+ ]
55
+ }
56
+ ```
57
+
58
+ Final response: one short sentence naming the saved section.
@@ -0,0 +1,26 @@
1
+ # Strategy Map Contract
2
+
3
+ The Strategy Map is a diagnosis artifact, not an execution plan.
4
+
5
+ Include:
6
+
7
+ - Owned-site foundation status and blockers.
8
+ - Current AI visibility posture.
9
+ - Semantic clusters with priority and coverage state.
10
+ - External authority gaps.
11
+ - Long-term investment mix and guardrails.
12
+
13
+ Do not include:
14
+
15
+ - Recommended page actions.
16
+ - Outreach copy.
17
+ - Concrete prompt panels.
18
+ - Measurement targets.
19
+ - Weekly success criteria.
20
+
21
+ Evidence rules:
22
+
23
+ - Use DataForSEO On-Page as the primary owned-site crawl and internal-link source.
24
+ - Use Ahrefs only as optional enrichment for in-content internal-link and crawl evidence.
25
+ - Use workspace MCP tools before freeform research.
26
+ - Mark missing evidence as `unknown`; do not infer certainty from absence.
@@ -0,0 +1,50 @@
1
+ # Strategy Map: Visibility Diagnosis
2
+
3
+ Summarize current AI visibility.
4
+
5
+ Classify durable patterns by cluster or engine:
6
+
7
+ - `absent`
8
+ - `cited_not_mentioned`
9
+ - `mentioned_not_recommended`
10
+ - `cited_not_recommended`
11
+ - `recommended`
12
+ - `declining`
13
+ - `unknown`
14
+
15
+ Do not paste raw AI answers. Do not propose weekly actions.
16
+
17
+ Never emit `null`. Omit optional fields like `clusterId` and `engine` when unknown. Required unknown enum fields must use `unknown`.
18
+
19
+ Submit exactly one section artifact with `mcp__strategy_map_artifacts__submit_strategy_map_section`.
20
+
21
+ ```json
22
+ {
23
+ "section": "visibility",
24
+ "artifact": {
25
+ "overall": "strong | medium | weak | unknown",
26
+ "patterns": [
27
+ {
28
+ "id": "vis-short-stable-id",
29
+ "clusterId": "optional-cluster-id",
30
+ "engine": "optional engine name",
31
+ "state": "absent | cited_not_mentioned | mentioned_not_recommended | cited_not_recommended | recommended | declining | unknown",
32
+ "summary": "Cluster- or engine-level visibility pattern.",
33
+ "competitors": ["Competitor names"],
34
+ "evidenceRefs": ["ev-visibility-1"]
35
+ }
36
+ ],
37
+ "evidenceRefs": ["ev-visibility-1"]
38
+ },
39
+ "evidence": [
40
+ {
41
+ "id": "ev-visibility-1",
42
+ "type": "signal | workspace | source | research",
43
+ "ref": "tool or source reference",
44
+ "summary": "Specific evidence summary."
45
+ }
46
+ ]
47
+ }
48
+ ```
49
+
50
+ Final response: one short sentence naming the saved section.
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: geo-pages-diagnosis
3
+ description: Use when diagnosing Anymorph-generated GEO pages, generated-page iteration opportunities, regeneration candidates, or GEO page creation gaps.
4
+ ---
5
+
6
+ # GEO Pages Diagnosis
7
+
8
+ Use this skill for Anymorph-generated or Anymorph-managed GEO page surfaces.
9
+
10
+ The output is a compact diagnosis plus action candidates for `assetType="geo_page"`.
11
+
12
+ ## Scope
13
+
14
+ Diagnose:
15
+
16
+ - Existing generated page performance.
17
+ - Missing generated pages for weak or uncovered intents.
18
+ - GEO page refresh, regeneration, and technical fix candidates.
19
+ - Commerce product fit for product-linked page creation.
20
+
21
+ Do not propose:
22
+
23
+ - Customer-owned page fixes as `geo_page`.
24
+ - Third-party outreach or external profile work.
25
+ - Product-linked create actions without product evidence.
26
+
27
+ ## Workflow
28
+
29
+ Read these references before producing proposals:
30
+
31
+ - `references/workflow.md` for the full generated-page product workflow, candidate rules, commerce product-fit rules, root causes, action families, and no-action cases.
32
+ - `references/diagnosis-contract.md` for the exact runtime diagnosis contract and artifact submission shape.
33
+
34
+ 1. Read shared run context and the GEO page candidate slice.
35
+ 2. Use `list_geo_strategy_candidates` before broad SQL.
36
+ 3. Use `get_geo_intent_diagnostic` for weak intents and generated-page gaps.
37
+ 4. Use page visibility, page insights, content, source, and products only when needed.
38
+ 5. For commerce create actions, use product evidence before proposing product-linked pages.
39
+ 6. Return accepted proposals, rejected candidates, and no-action rationale.
40
+
41
+ ## Output Contract
42
+
43
+ Each proposal should include:
44
+
45
+ - intent id or proposed intent.
46
+ - existing page id or URL for update actions.
47
+ - suggested slug only as a non-binding hint for create actions.
48
+ - target product ids when product-linked evidence is present.
49
+ - root cause, action family, priority, confidence, and evidence.
50
+
51
+ Never invent a final route or URL for create actions.