agent-bober 0.18.0 → 0.19.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.
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +11 -0
- package/README.md +245 -6
- package/agents/bober-art-director.md +100 -0
- package/agents/bober-design-critic.md +114 -0
- package/agents/bober-frontend-builder.md +101 -0
- package/agents/bober-security-auditor.md +193 -0
- package/agents/bober-security-verifier.md +104 -0
- package/agents/bober-seo-strategist.md +144 -0
- package/agents/bober-seo-verifier.md +103 -0
- package/dist/calendar/calendar-egress.d.ts +26 -0
- package/dist/calendar/calendar-egress.d.ts.map +1 -0
- package/dist/calendar/calendar-egress.js +35 -0
- package/dist/calendar/calendar-egress.js.map +1 -0
- package/dist/calendar/calendar-token.d.ts +34 -0
- package/dist/calendar/calendar-token.d.ts.map +1 -0
- package/dist/calendar/calendar-token.js +56 -0
- package/dist/calendar/calendar-token.js.map +1 -0
- package/dist/calendar/connector.d.ts +22 -0
- package/dist/calendar/connector.d.ts.map +1 -0
- package/dist/calendar/connector.js +3 -0
- package/dist/calendar/connector.js.map +1 -0
- package/dist/calendar/finding-source.d.ts +20 -0
- package/dist/calendar/finding-source.d.ts.map +1 -0
- package/dist/calendar/finding-source.js +35 -0
- package/dist/calendar/finding-source.js.map +1 -0
- package/dist/calendar/google-connector.d.ts +65 -0
- package/dist/calendar/google-connector.d.ts.map +1 -0
- package/dist/calendar/google-connector.js +129 -0
- package/dist/calendar/google-connector.js.map +1 -0
- package/dist/calendar/ics-connector.d.ts +12 -0
- package/dist/calendar/ics-connector.d.ts.map +1 -0
- package/dist/calendar/ics-connector.js +48 -0
- package/dist/calendar/ics-connector.js.map +1 -0
- package/dist/calendar/proposal-gate.d.ts +84 -0
- package/dist/calendar/proposal-gate.d.ts.map +1 -0
- package/dist/calendar/proposal-gate.js +126 -0
- package/dist/calendar/proposal-gate.js.map +1 -0
- package/dist/calendar/slotter.d.ts +34 -0
- package/dist/calendar/slotter.d.ts.map +1 -0
- package/dist/calendar/slotter.js +196 -0
- package/dist/calendar/slotter.js.map +1 -0
- package/dist/calendar/types.d.ts +162 -0
- package/dist/calendar/types.d.ts.map +1 -0
- package/dist/calendar/types.js +28 -0
- package/dist/calendar/types.js.map +1 -0
- package/dist/chat/chat-session.d.ts +27 -0
- package/dist/chat/chat-session.d.ts.map +1 -1
- package/dist/chat/chat-session.js +101 -1
- package/dist/chat/chat-session.js.map +1 -1
- package/dist/chat/slash-commands.d.ts +6 -2
- package/dist/chat/slash-commands.d.ts.map +1 -1
- package/dist/chat/slash-commands.js +22 -2
- package/dist/chat/slash-commands.js.map +1 -1
- package/dist/chat/turn-classifier.d.ts +3 -0
- package/dist/chat/turn-classifier.d.ts.map +1 -1
- package/dist/chat/turn-classifier.js +7 -0
- package/dist/chat/turn-classifier.js.map +1 -1
- package/dist/cli/commands/calendar.d.ts +75 -0
- package/dist/cli/commands/calendar.d.ts.map +1 -0
- package/dist/cli/commands/calendar.js +203 -0
- package/dist/cli/commands/calendar.js.map +1 -0
- package/dist/cli/commands/do.d.ts +52 -0
- package/dist/cli/commands/do.d.ts.map +1 -0
- package/dist/cli/commands/do.js +216 -0
- package/dist/cli/commands/do.js.map +1 -0
- package/dist/cli/commands/hub.d.ts +29 -0
- package/dist/cli/commands/hub.d.ts.map +1 -0
- package/dist/cli/commands/hub.js +233 -0
- package/dist/cli/commands/hub.js.map +1 -0
- package/dist/cli/commands/medical.d.ts +25 -0
- package/dist/cli/commands/medical.d.ts.map +1 -1
- package/dist/cli/commands/medical.js +233 -0
- package/dist/cli/commands/medical.js.map +1 -1
- package/dist/cli/commands/research.d.ts +41 -0
- package/dist/cli/commands/research.d.ts.map +1 -0
- package/dist/cli/commands/research.js +313 -0
- package/dist/cli/commands/research.js.map +1 -0
- package/dist/cli/commands/security-audit.d.ts +89 -0
- package/dist/cli/commands/security-audit.d.ts.map +1 -0
- package/dist/cli/commands/security-audit.js +238 -0
- package/dist/cli/commands/security-audit.js.map +1 -0
- package/dist/cli/commands/task.d.ts +64 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +422 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/telegram.d.ts +10 -0
- package/dist/cli/commands/telegram.d.ts.map +1 -0
- package/dist/cli/commands/telegram.js +44 -0
- package/dist/cli/commands/telegram.js.map +1 -0
- package/dist/cli/commands/vault.d.ts +40 -0
- package/dist/cli/commands/vault.d.ts.map +1 -0
- package/dist/cli/commands/vault.js +122 -0
- package/dist/cli/commands/vault.js.map +1 -0
- package/dist/cli/index.js +33 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/role-providers.d.ts +15 -0
- package/dist/config/role-providers.d.ts.map +1 -1
- package/dist/config/role-providers.js +8 -1
- package/dist/config/role-providers.js.map +1 -1
- package/dist/config/schema.d.ts +3522 -171
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +405 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/do-bridge/coding-promoter.d.ts +19 -0
- package/dist/do-bridge/coding-promoter.d.ts.map +1 -0
- package/dist/do-bridge/coding-promoter.js +43 -0
- package/dist/do-bridge/coding-promoter.js.map +1 -0
- package/dist/do-bridge/finding-port.d.ts +88 -0
- package/dist/do-bridge/finding-port.d.ts.map +1 -0
- package/dist/do-bridge/finding-port.js +95 -0
- package/dist/do-bridge/finding-port.js.map +1 -0
- package/dist/do-bridge/launcher.d.ts +55 -0
- package/dist/do-bridge/launcher.d.ts.map +1 -0
- package/dist/do-bridge/launcher.js +37 -0
- package/dist/do-bridge/launcher.js.map +1 -0
- package/dist/do-bridge/promote.d.ts +50 -0
- package/dist/do-bridge/promote.d.ts.map +1 -0
- package/dist/do-bridge/promote.js +116 -0
- package/dist/do-bridge/promote.js.map +1 -0
- package/dist/do-bridge/reconcile.d.ts +50 -0
- package/dist/do-bridge/reconcile.d.ts.map +1 -0
- package/dist/do-bridge/reconcile.js +70 -0
- package/dist/do-bridge/reconcile.js.map +1 -0
- package/dist/do-bridge/registry.d.ts +23 -0
- package/dist/do-bridge/registry.d.ts.map +1 -0
- package/dist/do-bridge/registry.js +42 -0
- package/dist/do-bridge/registry.js.map +1 -0
- package/dist/do-bridge/types.d.ts +50 -0
- package/dist/do-bridge/types.d.ts.map +1 -0
- package/dist/do-bridge/types.js +17 -0
- package/dist/do-bridge/types.js.map +1 -0
- package/dist/fleet/child-config.d.ts.map +1 -1
- package/dist/fleet/child-config.js +7 -0
- package/dist/fleet/child-config.js.map +1 -1
- package/dist/fleet/coordinator.d.ts +27 -1
- package/dist/fleet/coordinator.d.ts.map +1 -1
- package/dist/fleet/coordinator.js +70 -0
- package/dist/fleet/coordinator.js.map +1 -1
- package/dist/fleet/critic-deep.d.ts +9 -1
- package/dist/fleet/critic-deep.d.ts.map +1 -1
- package/dist/fleet/critic-deep.js +5 -2
- package/dist/fleet/critic-deep.js.map +1 -1
- package/dist/fleet/decomposer-deep.d.ts +4 -11
- package/dist/fleet/decomposer-deep.d.ts.map +1 -1
- package/dist/fleet/decomposer-deep.js +5 -5
- package/dist/fleet/decomposer-deep.js.map +1 -1
- package/dist/fleet/index.d.ts +9 -0
- package/dist/fleet/index.d.ts.map +1 -1
- package/dist/fleet/index.js +87 -8
- package/dist/fleet/index.js.map +1 -1
- package/dist/fleet/manifest.d.ts +26 -0
- package/dist/fleet/manifest.d.ts.map +1 -1
- package/dist/fleet/manifest.js +8 -0
- package/dist/fleet/manifest.js.map +1 -1
- package/dist/fleet/reporter.d.ts +4 -1
- package/dist/fleet/reporter.d.ts.map +1 -1
- package/dist/fleet/reporter.js +2 -1
- package/dist/fleet/reporter.js.map +1 -1
- package/dist/fleet/scaffolder.d.ts +5 -1
- package/dist/fleet/scaffolder.d.ts.map +1 -1
- package/dist/fleet/scaffolder.js +11 -2
- package/dist/fleet/scaffolder.js.map +1 -1
- package/dist/graph/client.d.ts.map +1 -1
- package/dist/graph/client.js +115 -23
- package/dist/graph/client.js.map +1 -1
- package/dist/graph/mcp-client.d.ts +1 -0
- package/dist/graph/mcp-client.d.ts.map +1 -1
- package/dist/graph/mcp-client.js +58 -7
- package/dist/graph/mcp-client.js.map +1 -1
- package/dist/hub/collector.d.ts +12 -0
- package/dist/hub/collector.d.ts.map +1 -0
- package/dist/hub/collector.js +36 -0
- package/dist/hub/collector.js.map +1 -0
- package/dist/hub/finding-source.d.ts +22 -0
- package/dist/hub/finding-source.d.ts.map +1 -0
- package/dist/hub/finding-source.js +41 -0
- package/dist/hub/finding-source.js.map +1 -0
- package/dist/hub/finding-store.d.ts +68 -0
- package/dist/hub/finding-store.d.ts.map +1 -0
- package/dist/hub/finding-store.js +122 -0
- package/dist/hub/finding-store.js.map +1 -0
- package/dist/hub/finding.d.ts +54 -0
- package/dist/hub/finding.d.ts.map +1 -0
- package/dist/hub/finding.js +24 -0
- package/dist/hub/finding.js.map +1 -0
- package/dist/hub/gmail-to-task.d.ts +69 -0
- package/dist/hub/gmail-to-task.d.ts.map +1 -0
- package/dist/hub/gmail-to-task.js +102 -0
- package/dist/hub/gmail-to-task.js.map +1 -0
- package/dist/hub/hub-config.d.ts +18 -0
- package/dist/hub/hub-config.d.ts.map +1 -0
- package/dist/hub/hub-config.js +40 -0
- package/dist/hub/hub-config.js.map +1 -0
- package/dist/hub/judge.d.ts +30 -0
- package/dist/hub/judge.d.ts.map +1 -0
- package/dist/hub/judge.js +177 -0
- package/dist/hub/judge.js.map +1 -0
- package/dist/hub/lenses.d.ts +60 -0
- package/dist/hub/lenses.d.ts.map +1 -0
- package/dist/hub/lenses.js +123 -0
- package/dist/hub/lenses.js.map +1 -0
- package/dist/hub/priority-md.d.ts +21 -0
- package/dist/hub/priority-md.d.ts.map +1 -0
- package/dist/hub/priority-md.js +64 -0
- package/dist/hub/priority-md.js.map +1 -0
- package/dist/hub/repo-resolver.d.ts +11 -0
- package/dist/hub/repo-resolver.d.ts.map +1 -0
- package/dist/hub/repo-resolver.js +39 -0
- package/dist/hub/repo-resolver.js.map +1 -0
- package/dist/hub/scope.d.ts +39 -0
- package/dist/hub/scope.d.ts.map +1 -0
- package/dist/hub/scope.js +62 -0
- package/dist/hub/scope.js.map +1 -0
- package/dist/hub/task-inbox.d.ts +16 -0
- package/dist/hub/task-inbox.d.ts.map +1 -0
- package/dist/hub/task-inbox.js +39 -0
- package/dist/hub/task-inbox.js.map +1 -0
- package/dist/incident/resolution-verify.d.ts +2 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/medical/adapters/apple-health.js +1 -1
- package/dist/medical/adapters/apple-health.js.map +1 -1
- package/dist/medical/analysis/cadence.d.ts +32 -0
- package/dist/medical/analysis/cadence.d.ts.map +1 -0
- package/dist/medical/analysis/cadence.js +72 -0
- package/dist/medical/analysis/cadence.js.map +1 -0
- package/dist/medical/analysis/cross-marker.d.ts +33 -0
- package/dist/medical/analysis/cross-marker.d.ts.map +1 -0
- package/dist/medical/analysis/cross-marker.js +79 -0
- package/dist/medical/analysis/cross-marker.js.map +1 -0
- package/dist/medical/analysis/finding-writer.d.ts +26 -0
- package/dist/medical/analysis/finding-writer.d.ts.map +1 -0
- package/dist/medical/analysis/finding-writer.js +60 -0
- package/dist/medical/analysis/finding-writer.js.map +1 -0
- package/dist/medical/analysis/finding.d.ts +63 -0
- package/dist/medical/analysis/finding.d.ts.map +1 -0
- package/dist/medical/analysis/finding.js +70 -0
- package/dist/medical/analysis/finding.js.map +1 -0
- package/dist/medical/analysis/review-pass.d.ts +76 -0
- package/dist/medical/analysis/review-pass.d.ts.map +1 -0
- package/dist/medical/analysis/review-pass.js +119 -0
- package/dist/medical/analysis/review-pass.js.map +1 -0
- package/dist/medical/analysis/trends.d.ts +36 -0
- package/dist/medical/analysis/trends.d.ts.map +1 -0
- package/dist/medical/analysis/trends.js +157 -0
- package/dist/medical/analysis/trends.js.map +1 -0
- package/dist/medical/health-store.d.ts +5 -0
- package/dist/medical/health-store.d.ts.map +1 -1
- package/dist/medical/health-store.js +10 -0
- package/dist/medical/health-store.js.map +1 -1
- package/dist/medical/lab-note.d.ts +72 -0
- package/dist/medical/lab-note.d.ts.map +1 -0
- package/dist/medical/lab-note.js +161 -0
- package/dist/medical/lab-note.js.map +1 -0
- package/dist/medical/lab-pdf-parser.d.ts +19 -0
- package/dist/medical/lab-pdf-parser.d.ts.map +1 -0
- package/dist/medical/lab-pdf-parser.js +57 -0
- package/dist/medical/lab-pdf-parser.js.map +1 -0
- package/dist/medical/lab-reindex.d.ts +24 -0
- package/dist/medical/lab-reindex.d.ts.map +1 -0
- package/dist/medical/lab-reindex.js +45 -0
- package/dist/medical/lab-reindex.js.map +1 -0
- package/dist/medical/lab-types.d.ts +75 -0
- package/dist/medical/lab-types.d.ts.map +1 -0
- package/dist/medical/lab-types.js +17 -0
- package/dist/medical/lab-types.js.map +1 -0
- package/dist/medical/profile.d.ts +96 -0
- package/dist/medical/profile.d.ts.map +1 -0
- package/dist/medical/profile.js +273 -0
- package/dist/medical/profile.js.map +1 -0
- package/dist/medical/recommend/context.d.ts +48 -0
- package/dist/medical/recommend/context.d.ts.map +1 -0
- package/dist/medical/recommend/context.js +109 -0
- package/dist/medical/recommend/context.js.map +1 -0
- package/dist/medical/recommend/judge-panel.d.ts +49 -0
- package/dist/medical/recommend/judge-panel.d.ts.map +1 -0
- package/dist/medical/recommend/judge-panel.js +164 -0
- package/dist/medical/recommend/judge-panel.js.map +1 -0
- package/dist/medical/recommend/lenses.d.ts +72 -0
- package/dist/medical/recommend/lenses.d.ts.map +1 -0
- package/dist/medical/recommend/lenses.js +220 -0
- package/dist/medical/recommend/lenses.js.map +1 -0
- package/dist/medical/recommend/recommend.d.ts +86 -0
- package/dist/medical/recommend/recommend.d.ts.map +1 -0
- package/dist/medical/recommend/recommend.js +211 -0
- package/dist/medical/recommend/recommend.js.map +1 -0
- package/dist/medical/recommend/types.d.ts +98 -0
- package/dist/medical/recommend/types.d.ts.map +1 -0
- package/dist/medical/recommend/types.js +20 -0
- package/dist/medical/recommend/types.js.map +1 -0
- package/dist/medical/recommend/urgency.d.ts +26 -0
- package/dist/medical/recommend/urgency.d.ts.map +1 -0
- package/dist/medical/recommend/urgency.js +124 -0
- package/dist/medical/recommend/urgency.js.map +1 -0
- package/dist/medical/research/online-research.d.ts +65 -0
- package/dist/medical/research/online-research.d.ts.map +1 -0
- package/dist/medical/research/online-research.js +101 -0
- package/dist/medical/research/online-research.js.map +1 -0
- package/dist/medical/research/research-note.d.ts +32 -0
- package/dist/medical/research/research-note.d.ts.map +1 -0
- package/dist/medical/research/research-note.js +55 -0
- package/dist/medical/research/research-note.js.map +1 -0
- package/dist/medical/supplements.d.ts +82 -0
- package/dist/medical/supplements.d.ts.map +1 -0
- package/dist/medical/supplements.js +173 -0
- package/dist/medical/supplements.js.map +1 -0
- package/dist/orchestrator/agentic-loop.d.ts +160 -1
- package/dist/orchestrator/agentic-loop.d.ts.map +1 -1
- package/dist/orchestrator/agentic-loop.js +350 -41
- package/dist/orchestrator/agentic-loop.js.map +1 -1
- package/dist/orchestrator/compaction.d.ts +47 -0
- package/dist/orchestrator/compaction.d.ts.map +1 -0
- package/dist/orchestrator/compaction.js +75 -0
- package/dist/orchestrator/compaction.js.map +1 -0
- package/dist/orchestrator/generator-agent.d.ts +19 -0
- package/dist/orchestrator/generator-agent.d.ts.map +1 -1
- package/dist/orchestrator/generator-agent.js +27 -1
- package/dist/orchestrator/generator-agent.js.map +1 -1
- package/dist/orchestrator/loop-events.d.ts +98 -0
- package/dist/orchestrator/loop-events.d.ts.map +1 -0
- package/dist/orchestrator/loop-events.js +2 -0
- package/dist/orchestrator/loop-events.js.map +1 -0
- package/dist/orchestrator/model-resolver.d.ts.map +1 -1
- package/dist/orchestrator/model-resolver.js +10 -6
- package/dist/orchestrator/model-resolver.js.map +1 -1
- package/dist/orchestrator/pipeline.d.ts +10 -1
- package/dist/orchestrator/pipeline.d.ts.map +1 -1
- package/dist/orchestrator/pipeline.js +102 -4
- package/dist/orchestrator/pipeline.js.map +1 -1
- package/dist/orchestrator/security-audit-types.d.ts +53 -0
- package/dist/orchestrator/security-audit-types.d.ts.map +1 -0
- package/dist/orchestrator/security-audit-types.js +10 -0
- package/dist/orchestrator/security-audit-types.js.map +1 -0
- package/dist/orchestrator/security-auditor-agent.d.ts +68 -0
- package/dist/orchestrator/security-auditor-agent.d.ts.map +1 -0
- package/dist/orchestrator/security-auditor-agent.js +482 -0
- package/dist/orchestrator/security-auditor-agent.js.map +1 -0
- package/dist/orchestrator/security-gate.d.ts +73 -0
- package/dist/orchestrator/security-gate.d.ts.map +1 -0
- package/dist/orchestrator/security-gate.js +174 -0
- package/dist/orchestrator/security-gate.js.map +1 -0
- package/dist/orchestrator/security-hub.d.ts +45 -0
- package/dist/orchestrator/security-hub.d.ts.map +1 -0
- package/dist/orchestrator/security-hub.js +147 -0
- package/dist/orchestrator/security-hub.js.map +1 -0
- package/dist/orchestrator/security-knowledge/benchmark/harness.d.ts +43 -0
- package/dist/orchestrator/security-knowledge/benchmark/harness.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/benchmark/harness.js +13 -0
- package/dist/orchestrator/security-knowledge/benchmark/harness.js.map +1 -0
- package/dist/orchestrator/security-knowledge/diff-provider.d.ts +79 -0
- package/dist/orchestrator/security-knowledge/diff-provider.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/diff-provider.js +320 -0
- package/dist/orchestrator/security-knowledge/diff-provider.js.map +1 -0
- package/dist/orchestrator/security-knowledge/index.d.ts +22 -0
- package/dist/orchestrator/security-knowledge/index.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/index.js +66 -0
- package/dist/orchestrator/security-knowledge/index.js.map +1 -0
- package/dist/orchestrator/security-knowledge/parser.d.ts +9 -0
- package/dist/orchestrator/security-knowledge/parser.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/parser.js +137 -0
- package/dist/orchestrator/security-knowledge/parser.js.map +1 -0
- package/dist/orchestrator/security-knowledge/registry.d.ts +25 -0
- package/dist/orchestrator/security-knowledge/registry.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/registry.js +114 -0
- package/dist/orchestrator/security-knowledge/registry.js.map +1 -0
- package/dist/orchestrator/security-knowledge/resolver.d.ts +48 -0
- package/dist/orchestrator/security-knowledge/resolver.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/resolver.js +63 -0
- package/dist/orchestrator/security-knowledge/resolver.js.map +1 -0
- package/dist/orchestrator/security-knowledge/selector.d.ts +18 -0
- package/dist/orchestrator/security-knowledge/selector.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/selector.js +46 -0
- package/dist/orchestrator/security-knowledge/selector.js.map +1 -0
- package/dist/orchestrator/security-knowledge/signature.d.ts +37 -0
- package/dist/orchestrator/security-knowledge/signature.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/signature.js +2 -0
- package/dist/orchestrator/security-knowledge/signature.js.map +1 -0
- package/dist/orchestrator/security-knowledge/supply-chain-inspector.d.ts +29 -0
- package/dist/orchestrator/security-knowledge/supply-chain-inspector.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/supply-chain-inspector.js +211 -0
- package/dist/orchestrator/security-knowledge/supply-chain-inspector.js.map +1 -0
- package/dist/orchestrator/security-scanners.d.ts +126 -0
- package/dist/orchestrator/security-scanners.d.ts.map +1 -0
- package/dist/orchestrator/security-scanners.js +501 -0
- package/dist/orchestrator/security-scanners.js.map +1 -0
- package/dist/orchestrator/security-verifier-agent.d.ts +62 -0
- package/dist/orchestrator/security-verifier-agent.d.ts.map +1 -0
- package/dist/orchestrator/security-verifier-agent.js +230 -0
- package/dist/orchestrator/security-verifier-agent.js.map +1 -0
- package/dist/orchestrator/session-store.d.ts +95 -0
- package/dist/orchestrator/session-store.d.ts.map +1 -0
- package/dist/orchestrator/session-store.js +186 -0
- package/dist/orchestrator/session-store.js.map +1 -0
- package/dist/orchestrator/stack-knowledge.d.ts +17 -0
- package/dist/orchestrator/stack-knowledge.d.ts.map +1 -0
- package/dist/orchestrator/stack-knowledge.js +35 -0
- package/dist/orchestrator/stack-knowledge.js.map +1 -0
- package/dist/orchestrator/subagents.d.ts +62 -0
- package/dist/orchestrator/subagents.d.ts.map +1 -0
- package/dist/orchestrator/subagents.js +143 -0
- package/dist/orchestrator/subagents.js.map +1 -0
- package/dist/orchestrator/tools/executor.d.ts +68 -0
- package/dist/orchestrator/tools/executor.d.ts.map +1 -0
- package/dist/orchestrator/tools/executor.js +104 -0
- package/dist/orchestrator/tools/executor.js.map +1 -0
- package/dist/orchestrator/tools/mcp-bridge.d.ts +76 -0
- package/dist/orchestrator/tools/mcp-bridge.d.ts.map +1 -0
- package/dist/orchestrator/tools/mcp-bridge.js +154 -0
- package/dist/orchestrator/tools/mcp-bridge.js.map +1 -0
- package/dist/orchestrator/tools/schemas.d.ts.map +1 -1
- package/dist/orchestrator/tools/schemas.js +3 -0
- package/dist/orchestrator/tools/schemas.js.map +1 -1
- package/dist/orchestrator/workflow/budget.d.ts +24 -2
- package/dist/orchestrator/workflow/budget.d.ts.map +1 -1
- package/dist/orchestrator/workflow/budget.js +39 -1
- package/dist/orchestrator/workflow/budget.js.map +1 -1
- package/dist/orchestrator/workflow/engine.d.ts +1 -1
- package/dist/orchestrator/workflow/engine.d.ts.map +1 -1
- package/dist/orchestrator/workflow/selector.d.ts.map +1 -1
- package/dist/orchestrator/workflow/selector.js +10 -0
- package/dist/orchestrator/workflow/selector.js.map +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +116 -26
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/claude-code.d.ts.map +1 -1
- package/dist/providers/claude-code.js +17 -0
- package/dist/providers/claude-code.js.map +1 -1
- package/dist/providers/cost-meter.d.ts +52 -0
- package/dist/providers/cost-meter.d.ts.map +1 -0
- package/dist/providers/cost-meter.js +81 -0
- package/dist/providers/cost-meter.js.map +1 -0
- package/dist/providers/factory.d.ts +6 -1
- package/dist/providers/factory.d.ts.map +1 -1
- package/dist/providers/factory.js +24 -5
- package/dist/providers/factory.js.map +1 -1
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js +29 -0
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/grounded-search.d.ts +128 -0
- package/dist/providers/grounded-search.d.ts.map +1 -0
- package/dist/providers/grounded-search.js +160 -0
- package/dist/providers/grounded-search.js.map +1 -0
- package/dist/providers/openai-compat.d.ts +15 -1
- package/dist/providers/openai-compat.d.ts.map +1 -1
- package/dist/providers/openai-compat.js +24 -0
- package/dist/providers/openai-compat.js.map +1 -1
- package/dist/providers/openai.d.ts +7 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +95 -4
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/types.d.ts +88 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/research/cadence.d.ts +33 -0
- package/dist/research/cadence.d.ts.map +1 -0
- package/dist/research/cadence.js +55 -0
- package/dist/research/cadence.js.map +1 -0
- package/dist/research/digest.d.ts +80 -0
- package/dist/research/digest.d.ts.map +1 -0
- package/dist/research/digest.js +119 -0
- package/dist/research/digest.js.map +1 -0
- package/dist/research/egress.d.ts +28 -0
- package/dist/research/egress.d.ts.map +1 -0
- package/dist/research/egress.js +41 -0
- package/dist/research/egress.js.map +1 -0
- package/dist/research/job-store.d.ts +30 -0
- package/dist/research/job-store.d.ts.map +1 -0
- package/dist/research/job-store.js +100 -0
- package/dist/research/job-store.js.map +1 -0
- package/dist/research/model-diversity.d.ts +27 -0
- package/dist/research/model-diversity.d.ts.map +1 -0
- package/dist/research/model-diversity.js +52 -0
- package/dist/research/model-diversity.js.map +1 -0
- package/dist/research/note-writer.d.ts +36 -0
- package/dist/research/note-writer.d.ts.map +1 -0
- package/dist/research/note-writer.js +53 -0
- package/dist/research/note-writer.js.map +1 -0
- package/dist/research/online-retrieval.d.ts +27 -0
- package/dist/research/online-retrieval.d.ts.map +1 -0
- package/dist/research/online-retrieval.js +22 -0
- package/dist/research/online-retrieval.js.map +1 -0
- package/dist/research/runner.d.ts +80 -0
- package/dist/research/runner.d.ts.map +1 -0
- package/dist/research/runner.js +115 -0
- package/dist/research/runner.js.map +1 -0
- package/dist/research/scheduler.d.ts +61 -0
- package/dist/research/scheduler.d.ts.map +1 -0
- package/dist/research/scheduler.js +58 -0
- package/dist/research/scheduler.js.map +1 -0
- package/dist/research/types.d.ts +81 -0
- package/dist/research/types.d.ts.map +1 -0
- package/dist/research/types.js +57 -0
- package/dist/research/types.js.map +1 -0
- package/dist/seo/adapters/http.d.ts +43 -0
- package/dist/seo/adapters/http.d.ts.map +1 -0
- package/dist/seo/adapters/http.js +35 -0
- package/dist/seo/adapters/http.js.map +1 -0
- package/dist/seo/ai-visibility-provider.d.ts +171 -0
- package/dist/seo/ai-visibility-provider.d.ts.map +1 -0
- package/dist/seo/ai-visibility-provider.js +165 -0
- package/dist/seo/ai-visibility-provider.js.map +1 -0
- package/dist/seo/ai-visibility-scorer.d.ts +43 -0
- package/dist/seo/ai-visibility-scorer.d.ts.map +1 -0
- package/dist/seo/ai-visibility-scorer.js +102 -0
- package/dist/seo/ai-visibility-scorer.js.map +1 -0
- package/dist/seo/analyzer.d.ts +58 -0
- package/dist/seo/analyzer.d.ts.map +1 -0
- package/dist/seo/analyzer.js +265 -0
- package/dist/seo/analyzer.js.map +1 -0
- package/dist/seo/benchmark/harness.d.ts +56 -0
- package/dist/seo/benchmark/harness.d.ts.map +1 -0
- package/dist/seo/benchmark/harness.js +172 -0
- package/dist/seo/benchmark/harness.js.map +1 -0
- package/dist/seo/builder/approved-finding.d.ts +115 -0
- package/dist/seo/builder/approved-finding.d.ts.map +1 -0
- package/dist/seo/builder/approved-finding.js +145 -0
- package/dist/seo/builder/approved-finding.js.map +1 -0
- package/dist/seo/builder/build-runner.d.ts +41 -0
- package/dist/seo/builder/build-runner.d.ts.map +1 -0
- package/dist/seo/builder/build-runner.js +156 -0
- package/dist/seo/builder/build-runner.js.map +1 -0
- package/dist/seo/builder/draft-generators.d.ts +32 -0
- package/dist/seo/builder/draft-generators.d.ts.map +1 -0
- package/dist/seo/builder/draft-generators.js +31 -0
- package/dist/seo/builder/draft-generators.js.map +1 -0
- package/dist/seo/builder/draft-store.d.ts +30 -0
- package/dist/seo/builder/draft-store.d.ts.map +1 -0
- package/dist/seo/builder/draft-store.js +76 -0
- package/dist/seo/builder/draft-store.js.map +1 -0
- package/dist/seo/builder/draft-types.d.ts +36 -0
- package/dist/seo/builder/draft-types.d.ts.map +1 -0
- package/dist/seo/builder/draft-types.js +14 -0
- package/dist/seo/builder/draft-types.js.map +1 -0
- package/dist/seo/builder/hub-approved-source.d.ts +11 -0
- package/dist/seo/builder/hub-approved-source.d.ts.map +1 -0
- package/dist/seo/builder/hub-approved-source.js +48 -0
- package/dist/seo/builder/hub-approved-source.js.map +1 -0
- package/dist/seo/builder/seo-builder.d.ts +72 -0
- package/dist/seo/builder/seo-builder.d.ts.map +1 -0
- package/dist/seo/builder/seo-builder.js +72 -0
- package/dist/seo/builder/seo-builder.js.map +1 -0
- package/dist/seo/citation-gate.d.ts +36 -0
- package/dist/seo/citation-gate.d.ts.map +1 -0
- package/dist/seo/citation-gate.js +59 -0
- package/dist/seo/citation-gate.js.map +1 -0
- package/dist/seo/command.d.ts +11 -0
- package/dist/seo/command.d.ts.map +1 -0
- package/dist/seo/command.js +90 -0
- package/dist/seo/command.js.map +1 -0
- package/dist/seo/content-sanitizer.d.ts +56 -0
- package/dist/seo/content-sanitizer.d.ts.map +1 -0
- package/dist/seo/content-sanitizer.js +55 -0
- package/dist/seo/content-sanitizer.js.map +1 -0
- package/dist/seo/crawl-engine.d.ts +35 -0
- package/dist/seo/crawl-engine.d.ts.map +1 -0
- package/dist/seo/crawl-engine.js +2 -0
- package/dist/seo/crawl-engine.js.map +1 -0
- package/dist/seo/data-source.d.ts +156 -0
- package/dist/seo/data-source.d.ts.map +1 -0
- package/dist/seo/data-source.js +2 -0
- package/dist/seo/data-source.js.map +1 -0
- package/dist/seo/egress.d.ts +39 -0
- package/dist/seo/egress.d.ts.map +1 -0
- package/dist/seo/egress.js +64 -0
- package/dist/seo/egress.js.map +1 -0
- package/dist/seo/hub-emitter.d.ts +28 -0
- package/dist/seo/hub-emitter.d.ts.map +1 -0
- package/dist/seo/hub-emitter.js +95 -0
- package/dist/seo/hub-emitter.js.map +1 -0
- package/dist/seo/index.d.ts +42 -0
- package/dist/seo/index.d.ts.map +1 -0
- package/dist/seo/index.js +19 -0
- package/dist/seo/index.js.map +1 -0
- package/dist/seo/never-encode-filter.d.ts +45 -0
- package/dist/seo/never-encode-filter.d.ts.map +1 -0
- package/dist/seo/never-encode-filter.js +51 -0
- package/dist/seo/never-encode-filter.js.map +1 -0
- package/dist/seo/parser.d.ts +46 -0
- package/dist/seo/parser.d.ts.map +1 -0
- package/dist/seo/parser.js +113 -0
- package/dist/seo/parser.js.map +1 -0
- package/dist/seo/playbook-index.d.ts +19 -0
- package/dist/seo/playbook-index.d.ts.map +1 -0
- package/dist/seo/playbook-index.js +74 -0
- package/dist/seo/playbook-index.js.map +1 -0
- package/dist/seo/quota-governor.d.ts +100 -0
- package/dist/seo/quota-governor.d.ts.map +1 -0
- package/dist/seo/quota-governor.js +199 -0
- package/dist/seo/quota-governor.js.map +1 -0
- package/dist/seo/quota-ledger.d.ts +50 -0
- package/dist/seo/quota-ledger.d.ts.map +1 -0
- package/dist/seo/quota-ledger.js +95 -0
- package/dist/seo/quota-ledger.js.map +1 -0
- package/dist/seo/report-store.d.ts +30 -0
- package/dist/seo/report-store.d.ts.map +1 -0
- package/dist/seo/report-store.js +94 -0
- package/dist/seo/report-store.js.map +1 -0
- package/dist/seo/retriever.d.ts +34 -0
- package/dist/seo/retriever.d.ts.map +1 -0
- package/dist/seo/retriever.js +95 -0
- package/dist/seo/retriever.js.map +1 -0
- package/dist/seo/runner.d.ts +108 -0
- package/dist/seo/runner.d.ts.map +1 -0
- package/dist/seo/runner.js +512 -0
- package/dist/seo/runner.js.map +1 -0
- package/dist/seo/scrape-throttle.d.ts +84 -0
- package/dist/seo/scrape-throttle.d.ts.map +1 -0
- package/dist/seo/scrape-throttle.js +149 -0
- package/dist/seo/scrape-throttle.js.map +1 -0
- package/dist/seo/serp-provider.d.ts +52 -0
- package/dist/seo/serp-provider.d.ts.map +1 -0
- package/dist/seo/serp-provider.js +17 -0
- package/dist/seo/serp-provider.js.map +1 -0
- package/dist/seo/sources/ai-visibility-adapter.d.ts +87 -0
- package/dist/seo/sources/ai-visibility-adapter.d.ts.map +1 -0
- package/dist/seo/sources/ai-visibility-adapter.js +85 -0
- package/dist/seo/sources/ai-visibility-adapter.js.map +1 -0
- package/dist/seo/sources/api-spine-provider.d.ts +66 -0
- package/dist/seo/sources/api-spine-provider.d.ts.map +1 -0
- package/dist/seo/sources/api-spine-provider.js +68 -0
- package/dist/seo/sources/api-spine-provider.js.map +1 -0
- package/dist/seo/sources/citation-verifier.d.ts +95 -0
- package/dist/seo/sources/citation-verifier.d.ts.map +1 -0
- package/dist/seo/sources/citation-verifier.js +106 -0
- package/dist/seo/sources/citation-verifier.js.map +1 -0
- package/dist/seo/sources/crawl-source.d.ts +62 -0
- package/dist/seo/sources/crawl-source.d.ts.map +1 -0
- package/dist/seo/sources/crawl-source.js +87 -0
- package/dist/seo/sources/crawl-source.js.map +1 -0
- package/dist/seo/sources/damcrawler-crawl-engine.d.ts +151 -0
- package/dist/seo/sources/damcrawler-crawl-engine.d.ts.map +1 -0
- package/dist/seo/sources/damcrawler-crawl-engine.js +154 -0
- package/dist/seo/sources/damcrawler-crawl-engine.js.map +1 -0
- package/dist/seo/sources/damcrawler-serp-provider.d.ts +75 -0
- package/dist/seo/sources/damcrawler-serp-provider.d.ts.map +1 -0
- package/dist/seo/sources/damcrawler-serp-provider.js +60 -0
- package/dist/seo/sources/damcrawler-serp-provider.js.map +1 -0
- package/dist/seo/sources/dataforseo-adapter.d.ts +46 -0
- package/dist/seo/sources/dataforseo-adapter.d.ts.map +1 -0
- package/dist/seo/sources/dataforseo-adapter.js +335 -0
- package/dist/seo/sources/dataforseo-adapter.js.map +1 -0
- package/dist/seo/sources/dataforseo-serp-provider.d.ts +30 -0
- package/dist/seo/sources/dataforseo-serp-provider.d.ts.map +1 -0
- package/dist/seo/sources/dataforseo-serp-provider.js +20 -0
- package/dist/seo/sources/dataforseo-serp-provider.js.map +1 -0
- package/dist/seo/sources/engine-scrape-parser-chatgpt.d.ts +62 -0
- package/dist/seo/sources/engine-scrape-parser-chatgpt.d.ts.map +1 -0
- package/dist/seo/sources/engine-scrape-parser-chatgpt.js +72 -0
- package/dist/seo/sources/engine-scrape-parser-chatgpt.js.map +1 -0
- package/dist/seo/sources/engine-scrape-parser-perplexity.d.ts +10 -0
- package/dist/seo/sources/engine-scrape-parser-perplexity.d.ts.map +1 -0
- package/dist/seo/sources/engine-scrape-parser-perplexity.js +72 -0
- package/dist/seo/sources/engine-scrape-parser-perplexity.js.map +1 -0
- package/dist/seo/sources/gsc-adapter.d.ts +64 -0
- package/dist/seo/sources/gsc-adapter.d.ts.map +1 -0
- package/dist/seo/sources/gsc-adapter.js +221 -0
- package/dist/seo/sources/gsc-adapter.js.map +1 -0
- package/dist/seo/sources/local-export.d.ts +53 -0
- package/dist/seo/sources/local-export.d.ts.map +1 -0
- package/dist/seo/sources/local-export.js +307 -0
- package/dist/seo/sources/local-export.js.map +1 -0
- package/dist/seo/sources/mention-citation-extractor.d.ts +136 -0
- package/dist/seo/sources/mention-citation-extractor.d.ts.map +1 -0
- package/dist/seo/sources/mention-citation-extractor.js +272 -0
- package/dist/seo/sources/mention-citation-extractor.js.map +1 -0
- package/dist/seo/sources/scrape-arm-provider.d.ts +109 -0
- package/dist/seo/sources/scrape-arm-provider.d.ts.map +1 -0
- package/dist/seo/sources/scrape-arm-provider.js +129 -0
- package/dist/seo/sources/scrape-arm-provider.js.map +1 -0
- package/dist/seo/tracked-prompt-store.d.ts +33 -0
- package/dist/seo/tracked-prompt-store.d.ts.map +1 -0
- package/dist/seo/tracked-prompt-store.js +68 -0
- package/dist/seo/tracked-prompt-store.js.map +1 -0
- package/dist/seo/types.d.ts +128 -0
- package/dist/seo/types.d.ts.map +1 -0
- package/dist/seo/types.js +14 -0
- package/dist/seo/types.js.map +1 -0
- package/dist/seo/verifier.d.ts +34 -0
- package/dist/seo/verifier.d.ts.map +1 -0
- package/dist/seo/verifier.js +204 -0
- package/dist/seo/verifier.js.map +1 -0
- package/dist/seo/workflow-capabilities.d.ts +26 -0
- package/dist/seo/workflow-capabilities.d.ts.map +1 -0
- package/dist/seo/workflow-capabilities.js +12 -0
- package/dist/seo/workflow-capabilities.js.map +1 -0
- package/dist/state/facts.d.ts +5 -1
- package/dist/state/facts.d.ts.map +1 -1
- package/dist/state/facts.js +29 -19
- package/dist/state/facts.js.map +1 -1
- package/dist/state/index.d.ts +1 -1
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +1 -1
- package/dist/state/index.js.map +1 -1
- package/dist/state/outline-state.d.ts +0 -12
- package/dist/state/outline-state.d.ts.map +1 -1
- package/dist/state/outline-state.js +1 -18
- package/dist/state/outline-state.js.map +1 -1
- package/dist/state/security-audit-state.d.ts +20 -0
- package/dist/state/security-audit-state.d.ts.map +1 -0
- package/dist/state/security-audit-state.js +59 -0
- package/dist/state/security-audit-state.js.map +1 -0
- package/dist/teams/registry.d.ts.map +1 -1
- package/dist/teams/registry.js +17 -0
- package/dist/teams/registry.js.map +1 -1
- package/dist/telegram/bot.d.ts +137 -0
- package/dist/telegram/bot.d.ts.map +1 -0
- package/dist/telegram/bot.js +323 -0
- package/dist/telegram/bot.js.map +1 -0
- package/dist/telegram/digest.d.ts +19 -0
- package/dist/telegram/digest.d.ts.map +1 -0
- package/dist/telegram/digest.js +23 -0
- package/dist/telegram/digest.js.map +1 -0
- package/dist/telegram/fleet-view.d.ts +38 -0
- package/dist/telegram/fleet-view.d.ts.map +1 -0
- package/dist/telegram/fleet-view.js +98 -0
- package/dist/telegram/fleet-view.js.map +1 -0
- package/dist/telegram/handlers/approvals.d.ts +61 -0
- package/dist/telegram/handlers/approvals.d.ts.map +1 -0
- package/dist/telegram/handlers/approvals.js +122 -0
- package/dist/telegram/handlers/approvals.js.map +1 -0
- package/dist/telegram/handlers/capture.d.ts +43 -0
- package/dist/telegram/handlers/capture.d.ts.map +1 -0
- package/dist/telegram/handlers/capture.js +51 -0
- package/dist/telegram/handlers/capture.js.map +1 -0
- package/dist/telegram/handlers/prioritize.d.ts +50 -0
- package/dist/telegram/handlers/prioritize.d.ts.map +1 -0
- package/dist/telegram/handlers/prioritize.js +99 -0
- package/dist/telegram/handlers/prioritize.js.map +1 -0
- package/dist/telegram/handlers/upload.d.ts +105 -0
- package/dist/telegram/handlers/upload.d.ts.map +1 -0
- package/dist/telegram/handlers/upload.js +149 -0
- package/dist/telegram/handlers/upload.js.map +1 -0
- package/dist/telegram/keyboard.d.ts +48 -0
- package/dist/telegram/keyboard.d.ts.map +1 -0
- package/dist/telegram/keyboard.js +81 -0
- package/dist/telegram/keyboard.js.map +1 -0
- package/dist/telegram/outbound.d.ts +77 -0
- package/dist/telegram/outbound.d.ts.map +1 -0
- package/dist/telegram/outbound.js +45 -0
- package/dist/telegram/outbound.js.map +1 -0
- package/dist/telegram/router.d.ts +46 -0
- package/dist/telegram/router.d.ts.map +1 -0
- package/dist/telegram/router.js +63 -0
- package/dist/telegram/router.js.map +1 -0
- package/dist/telegram/streaming.d.ts +36 -0
- package/dist/telegram/streaming.d.ts.map +1 -0
- package/dist/telegram/streaming.js +55 -0
- package/dist/telegram/streaming.js.map +1 -0
- package/dist/telegram/whitelist.d.ts +20 -0
- package/dist/telegram/whitelist.d.ts.map +1 -0
- package/dist/telegram/whitelist.js +34 -0
- package/dist/telegram/whitelist.js.map +1 -0
- package/dist/utils/git.d.ts +0 -6
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +0 -19
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/vault/conventions.d.ts +23 -0
- package/dist/vault/conventions.d.ts.map +1 -0
- package/dist/vault/conventions.js +22 -0
- package/dist/vault/conventions.js.map +1 -0
- package/dist/vault/frontmatter.d.ts +47 -0
- package/dist/vault/frontmatter.d.ts.map +1 -0
- package/dist/vault/frontmatter.js +149 -0
- package/dist/vault/frontmatter.js.map +1 -0
- package/dist/vault/index-map.d.ts +35 -0
- package/dist/vault/index-map.d.ts.map +1 -0
- package/dist/vault/index-map.js +67 -0
- package/dist/vault/index-map.js.map +1 -0
- package/dist/vault/mcp-adapter.d.ts +96 -0
- package/dist/vault/mcp-adapter.d.ts.map +1 -0
- package/dist/vault/mcp-adapter.js +176 -0
- package/dist/vault/mcp-adapter.js.map +1 -0
- package/dist/vault/note-io.d.ts +29 -0
- package/dist/vault/note-io.d.ts.map +1 -0
- package/dist/vault/note-io.js +44 -0
- package/dist/vault/note-io.js.map +1 -0
- package/dist/vault/profile.d.ts +35 -0
- package/dist/vault/profile.d.ts.map +1 -0
- package/dist/vault/profile.js +50 -0
- package/dist/vault/profile.js.map +1 -0
- package/dist/vault/reindex.d.ts +55 -0
- package/dist/vault/reindex.d.ts.map +1 -0
- package/dist/vault/reindex.js +69 -0
- package/dist/vault/reindex.js.map +1 -0
- package/dist/vault/types.d.ts +25 -0
- package/dist/vault/types.d.ts.map +1 -0
- package/dist/vault/types.js +9 -0
- package/dist/vault/types.js.map +1 -0
- package/package.json +20 -4
- package/scripts/sync-targets.json +2 -1
- package/skills/bober.design/SKILL.md +190 -0
- package/skills/bober.design/references/1-anti-slop.md +102 -0
- package/skills/bober.design/references/2-design-brief.md +84 -0
- package/skills/bober.design/references/3-critique-rubric.md +62 -0
- package/skills/bober.design/references/4-copy-guide.md +43 -0
- package/skills/bober.plan/SKILL.md +15 -1
- package/skills/bober.run/SKILL.md +7 -4
- package/skills/bober.security-anchor/SKILL.md +172 -0
- package/skills/bober.security-audit/SKILL.md +288 -0
- package/skills/bober.security-dex-backend/SKILL.md +306 -0
- package/skills/bober.security-generic/SKILL.md +295 -0
- package/skills/bober.security-igaming/SKILL.md +290 -0
- package/skills/bober.security-node/SKILL.md +267 -0
- package/skills/bober.security-payments/SKILL.md +249 -0
- package/skills/bober.security-react/SKILL.md +194 -0
- package/skills/bober.security-solidity/SKILL.md +306 -0
- package/skills/bober.seo/SKILL.md +132 -0
- package/skills/bober.seo-ai-visibility/SKILL.md +110 -0
- package/skills/bober.seo-content-decay/SKILL.md +99 -0
- package/skills/bober.seo-generic/SKILL.md +173 -0
- package/skills/bober.seo-internal-linking/SKILL.md +87 -0
- package/skills/bober.seo-parasite-watch/SKILL.md +121 -0
- package/skills/bober.seo-rank-track/SKILL.md +98 -0
- package/skills/bober.seo-schema-audit/SKILL.md +97 -0
- package/skills/bober.seo-technical-audit/SKILL.md +113 -0
- package/skills/bober.seo-topical-map/SKILL.md +100 -0
- package/skills/bober.seo-verticals/SKILL.md +133 -0
- package/skills/bober.using-bober/SKILL.md +1 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bober.seo-generic
|
|
3
|
+
description: "Generic SEO/GEO signature library shared across every workflow-specific SEO skill. Not a workflow skill -- a data file of discrete, cited SEO/GEO tactics read by SeoPlaybookParser. Encodes VERIFIED 2025-2026 AI-visibility correlation research (Ahrefs, Semrush, Profound), ranking-mechanics leak findings, and the never-encode policy boundary."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# bober.seo-generic — Generic SEO/GEO Signature Library
|
|
7
|
+
|
|
8
|
+
This skill is a **signature-library** file, not a workflow skill. It is read (as raw
|
|
9
|
+
markdown text) by `SeoPlaybookParser.parse()` (`src/seo/parser.ts`) and turned into
|
|
10
|
+
typed `SeoSignature[]` records used by the SEO agent team's retriever
|
|
11
|
+
(`SeoPlaybookRetriever`) as the always-included generic floor. Every surviving
|
|
12
|
+
signature below cites its primary source; a block with no `PrimarySourceUrl` or
|
|
13
|
+
tagged `PolicyClass: never-encode` is DROPPED by the parser at load time — see
|
|
14
|
+
`.bober/research/research-20260715-ultimate-seo-agents-skills-research.md` §1/§6 for
|
|
15
|
+
the underlying evidence and the two refuted claims that are deliberately NOT encoded
|
|
16
|
+
anywhere in this file (ChatGPT-Wikipedia dominance, Reddit-leading-AI-Overviews).
|
|
17
|
+
|
|
18
|
+
## Signature Block Format
|
|
19
|
+
|
|
20
|
+
Each signature is a level-3 heading (three `#` characters, a space, then the
|
|
21
|
+
`playbookId`) followed by labelled fields. This file and `SeoPlaybookParser` are one
|
|
22
|
+
executable spec — keep them in sync. Unlike the security signature library, SEO
|
|
23
|
+
blocks carry **no code fences** — `Tactic` replaces the unsafe/safe example pair.
|
|
24
|
+
|
|
25
|
+
Fields per block:
|
|
26
|
+
- The heading text itself is the `playbookId` (must be non-empty, or the block is dropped).
|
|
27
|
+
- `- **Title:** <human-readable title>` (required — missing drops the block)
|
|
28
|
+
- `- **Workflows:** comma, separated, SeoWorkflow, members` (soft field; invalid members are filtered out, default `[]`)
|
|
29
|
+
- `- **Tactic:** <the recommended action>` (soft field, defaults to `""` if absent)
|
|
30
|
+
- `- **Invariant:** <the evidence-backed claim this signature encodes>` (soft field, defaults to `""` if absent)
|
|
31
|
+
- `- **PrimarySourceUrl:** <REQUIRED citation URL>` — **a block missing or with an empty value here is DROPPED** (no-uncited-claim rule; the whole point of this format)
|
|
32
|
+
- `- **PolicyClass:** auto-safe|human-approve|never-encode` — **`never-encode` is DROPPED**; any other invalid value is also DROPPED
|
|
33
|
+
- `- **EvidenceGrade:** verified|primary-unverified|single-source` (soft field, defaults to `single-source` if absent/invalid)
|
|
34
|
+
- `- **LiveWeightStatus:** live-corroborated|documented-only|unknown` (soft field, defaults to `unknown` if absent/invalid — encodes whether the invariant is corroborated by a live ranking signal or is documented-only guidance; `documented-only` + a `firm` model finding is downgraded to `tentative` by the analyzer)
|
|
35
|
+
- `- **Keywords:** comma, separated, keywords` (soft field, defaults to `[]`)
|
|
36
|
+
|
|
37
|
+
A block missing `Title`, `PrimarySourceUrl`, or a valid `PolicyClass` is dropped by the
|
|
38
|
+
parser — never a fatal error. A `never-encode` block is dropped even when every other
|
|
39
|
+
field is present: it documents the automation boundary for human readers but must
|
|
40
|
+
never reach an analyzer prompt.
|
|
41
|
+
|
|
42
|
+
## Signatures
|
|
43
|
+
|
|
44
|
+
### youtube-mentions-ai-visibility
|
|
45
|
+
- **Title:** YouTube mentions are the strongest AI-visibility correlate
|
|
46
|
+
- **Workflows:** ai-visibility
|
|
47
|
+
- **Tactic:** Prioritise earning brand presence and mentions on YouTube (owned channel content, creator partnerships, video PR) as a first-class AI-visibility lever, not an afterthought to written-content SEO.
|
|
48
|
+
- **Invariant:** Across ChatGPT, Google AI Mode, and AI Overviews, YouTube mentions show the single highest correlation (~0.737 Spearman) with brand visibility in AI answers, in a 75,000-brand Ahrefs correlation study.
|
|
49
|
+
- **PrimarySourceUrl:** https://ahrefs.com/blog/ai-brand-visibility-correlations/
|
|
50
|
+
- **PolicyClass:** human-approve
|
|
51
|
+
- **EvidenceGrade:** verified
|
|
52
|
+
- **Keywords:** youtube, ai-visibility, brand-mention, geo, correlation
|
|
53
|
+
|
|
54
|
+
### branded-mentions-ai-visibility
|
|
55
|
+
- **Title:** Branded web mentions (linked or unlinked) are the strongest non-video AI-visibility signal
|
|
56
|
+
- **Workflows:** ai-visibility
|
|
57
|
+
- **Tactic:** Pursue digital-PR and organic brand-mention placements across the web; unlinked mentions still count toward AI-visibility correlation, so do not discount coverage that omits a hyperlink.
|
|
58
|
+
- **Invariant:** Branded web mentions (linked or unlinked) correlate at 0.66-0.71 with brand visibility in AI answers — the strongest non-YouTube signal in the same 75,000-brand study.
|
|
59
|
+
- **PrimarySourceUrl:** https://ahrefs.com/blog/ai-brand-visibility-correlations/
|
|
60
|
+
- **PolicyClass:** human-approve
|
|
61
|
+
- **EvidenceGrade:** verified
|
|
62
|
+
- **Keywords:** brand-mention, digital-pr, ai-visibility, geo, unlinked-mention
|
|
63
|
+
|
|
64
|
+
### link-volume-weak-for-ai
|
|
65
|
+
- **Title:** Classic backlink volume is a weak lever for AI visibility
|
|
66
|
+
- **Workflows:** ai-visibility
|
|
67
|
+
- **Tactic:** Do not spend budget on bulk backlink-volume link building as a primary AI-visibility lever; redirect it toward branded mentions and YouTube presence, which correlate far more strongly.
|
|
68
|
+
- **Invariant:** Classic link metrics (backlink count, URL rating) show very weak correlation (~0.218) with AI-answer brand mentions, in the same 75,000-brand study.
|
|
69
|
+
- **PrimarySourceUrl:** https://ahrefs.com/blog/ai-brand-visibility-correlations/
|
|
70
|
+
- **PolicyClass:** auto-safe
|
|
71
|
+
- **EvidenceGrade:** verified
|
|
72
|
+
- **Keywords:** backlinks, link-building, ai-visibility, weak-correlation
|
|
73
|
+
|
|
74
|
+
### aio-commercial-intent-shift
|
|
75
|
+
- **Title:** AI Overviews triggers have shifted toward commercial/transactional intent
|
|
76
|
+
- **Workflows:** ai-visibility, rank-track
|
|
77
|
+
- **Tactic:** Prioritise AIO-visibility work on commercial and transactional queries, not only informational content — the trigger mix has moved decisively toward money queries.
|
|
78
|
+
- **Invariant:** AIO intent mix shifted Jan-Oct 2025: informational share fell 91.3%->57.1% of triggers while commercial rose to 18.57% and transactional to 13.94%, per a Semrush 10M+ keyword panel.
|
|
79
|
+
- **PrimarySourceUrl:** https://www.semrush.com/blog/semrush-ai-overviews-study/
|
|
80
|
+
- **PolicyClass:** auto-safe
|
|
81
|
+
- **EvidenceGrade:** verified
|
|
82
|
+
- **Keywords:** aio, commercial-intent, transactional, rank-track
|
|
83
|
+
|
|
84
|
+
### aio-prevalence-volatility
|
|
85
|
+
- **Title:** AI Overview prevalence is highly volatile — plan for churn, not a stable surface
|
|
86
|
+
- **Workflows:** ai-visibility
|
|
87
|
+
- **Tactic:** Re-measure AIO prevalence for target queries on a recurring cadence rather than assuming a one-time audit is durable; build monitoring, not a static report.
|
|
88
|
+
- **Invariant:** AIO prevalence fluctuated hard through 2025: 6.49% of queries (Jan) -> 24.61% (Jul) -> 15.69% (Nov), per the same Semrush 10M+ keyword panel.
|
|
89
|
+
- **PrimarySourceUrl:** https://www.semrush.com/blog/semrush-ai-overviews-study/
|
|
90
|
+
- **PolicyClass:** auto-safe
|
|
91
|
+
- **EvidenceGrade:** verified
|
|
92
|
+
- **Keywords:** aio, volatility, monitoring, rank-track
|
|
93
|
+
|
|
94
|
+
### zero-click-not-collapsing
|
|
95
|
+
- **Title:** Zero-click rate did not spike after AI Overviews — do not over-index on click-loss panic
|
|
96
|
+
- **Workflows:** ai-visibility
|
|
97
|
+
- **Tactic:** Do not justify SEO/GEO investment primarily on a claimed AIO-driven zero-click collapse; the measured effect is small, so frame AI-visibility work around brand exposure and citation share instead.
|
|
98
|
+
- **Invariant:** Zero-click rate slightly DECREASED (33.75%->31.53%) on keywords after AIOs appeared, in a 200K+ keyword before/after study validated against Datos clickstream data.
|
|
99
|
+
- **PrimarySourceUrl:** https://www.semrush.com/blog/semrush-ai-overviews-study/
|
|
100
|
+
- **PolicyClass:** auto-safe
|
|
101
|
+
- **EvidenceGrade:** verified
|
|
102
|
+
- **Keywords:** zero-click, aio, clickstream, datos
|
|
103
|
+
|
|
104
|
+
### aio-citations-decouple-top10
|
|
105
|
+
- **Title:** AIO citations increasingly decouple from organic top-10 rankings
|
|
106
|
+
- **Workflows:** ai-visibility, technical-audit
|
|
107
|
+
- **Tactic:** Do not assume organic top-10 ranking is required for AIO citation; audit AIO citation coverage separately from rank-tracking, since a majority of cited pages now rank outside the top 10.
|
|
108
|
+
- **Invariant:** Only 38% of AIO-cited pages ranked in the organic top-10 as of Jan 2026 (down from ~76% in Jul 2025); 31.2% of cited pages ranked 11-100 and 31.0% ranked beyond top-100, per an Ahrefs analysis of 863K SERPs / 4M AIO URLs.
|
|
109
|
+
- **PrimarySourceUrl:** https://ahrefs.com/blog/ai-overview-citations-top-10/
|
|
110
|
+
- **PolicyClass:** auto-safe
|
|
111
|
+
- **EvidenceGrade:** verified
|
|
112
|
+
- **Keywords:** aio, citations, top10, technical-audit
|
|
113
|
+
|
|
114
|
+
### ghost-citations
|
|
115
|
+
- **Title:** Most AI citations are "ghost citations" — cited as a source but never named
|
|
116
|
+
- **Workflows:** ai-visibility
|
|
117
|
+
- **Tactic:** Track citation rate and brand-mention rate as two distinct AI-visibility metrics; a page being cited as a source link does not mean the brand is actually named in the answer.
|
|
118
|
+
- **Invariant:** 61.7% of AI citations are "ghost citations" — the source page is linked but the brand is never named in the answer, across 3,981 domain appearances / 115 prompts / 4 platforms / 14 countries (Semrush/Kevin Indig study).
|
|
119
|
+
- **PrimarySourceUrl:** https://www.semrush.com/blog/the-ghost-citations-study/
|
|
120
|
+
- **PolicyClass:** auto-safe
|
|
121
|
+
- **EvidenceGrade:** verified
|
|
122
|
+
- **Keywords:** ghost-citation, citation-rate, mention-rate, ai-visibility
|
|
123
|
+
|
|
124
|
+
### query-fan-out-coverage
|
|
125
|
+
- **Title:** AI Overviews retrieve via query fan-out — optimize for the fan-out set, not just the head keyword
|
|
126
|
+
- **Workflows:** topical-map, ai-visibility
|
|
127
|
+
- **Tactic:** Build topical-map content that comprehensively covers the fan-out query set around a topic (related sub-questions, comparisons, specifications) rather than optimizing a single page for one head keyword.
|
|
128
|
+
- **Invariant:** AI Overviews retrieve results via query fan-out (generating and retrieving against a broadened set of related sub-queries), so single-keyword-optimized pages under-cover what AIO actually retrieves against.
|
|
129
|
+
- **PrimarySourceUrl:** https://ahrefs.com/blog/ai-overview-citations-top-10/
|
|
130
|
+
- **PolicyClass:** auto-safe
|
|
131
|
+
- **EvidenceGrade:** single-source
|
|
132
|
+
- **Keywords:** fan-out, topical-map, query-expansion, aio
|
|
133
|
+
|
|
134
|
+
### perplexity-community-weighted
|
|
135
|
+
- **Title:** Perplexity is the most community-weighted AI platform — Reddit dominates its citation mix
|
|
136
|
+
- **Workflows:** ai-visibility
|
|
137
|
+
- **Tactic:** For Perplexity-specific AI-visibility work, prioritise genuine community presence and discussion (Reddit and similar forums) over traditional publisher-style content placement.
|
|
138
|
+
- **Invariant:** Perplexity is the most community-weighted platform in a 680M-citation study: Reddit accounts for 6.6% of ALL Perplexity citations and 46.7% of its top-source citations.
|
|
139
|
+
- **PrimarySourceUrl:** https://www.tryprofound.com/blog/ai-platform-citation-patterns
|
|
140
|
+
- **PolicyClass:** auto-safe
|
|
141
|
+
- **EvidenceGrade:** verified
|
|
142
|
+
- **Keywords:** perplexity, reddit, community, platform-specific
|
|
143
|
+
|
|
144
|
+
### sitefocus-topical-authority
|
|
145
|
+
- **Title:** Topical authority is mechanically scored — site focus and page-topic deviation affect ranking potential
|
|
146
|
+
- **Workflows:** topical-map
|
|
147
|
+
- **Tactic:** Keep new content aligned to the site's established topical focus; treat high-deviation off-topic pages as ranking-risk outliers rather than easy incremental traffic.
|
|
148
|
+
- **Invariant:** The leaked Google Content Warehouse API documents a siteFocusScore (site dedication to one topic) and siteRadius (page deviation from the site's central theme) that operationalize topical authority; high-deviation pages are documented ranking outliers.
|
|
149
|
+
- **PrimarySourceUrl:** https://sparktoro.com/blog/an-anonymous-source-shared-thousands-of-leaked-google-search-api-documents-with-me-everyone-in-seo-should-see-them/
|
|
150
|
+
- **PolicyClass:** auto-safe
|
|
151
|
+
- **EvidenceGrade:** single-source
|
|
152
|
+
- **LiveWeightStatus:** documented-only
|
|
153
|
+
- **Keywords:** topical-authority, sitefocus, site-radius, leak
|
|
154
|
+
|
|
155
|
+
### schema-entity-aio-lift
|
|
156
|
+
- **Title:** Entity/schema markup measurably lifts AI Overview visibility
|
|
157
|
+
- **Workflows:** schema-audit, ai-visibility
|
|
158
|
+
- **Tactic:** Implement and validate entity-linking schema markup (Organization, Product, FAQ, and related structured data) as a standard part of every technical/schema audit, not an optional add-on.
|
|
159
|
+
- **Invariant:** A documented Schema App case study measured +19.72% AI Overview visibility from entity-linking / schema-markup work — one of the few quantified schema-to-GEO results.
|
|
160
|
+
- **PrimarySourceUrl:** https://www.schemaapp.com/schema-markup/case-study-entity-linking-increases-aio-visibility/
|
|
161
|
+
- **PolicyClass:** auto-safe
|
|
162
|
+
- **EvidenceGrade:** single-source
|
|
163
|
+
- **Keywords:** schema, entity, structured-data, aio-lift
|
|
164
|
+
|
|
165
|
+
### parasite-seo-placement
|
|
166
|
+
- **Title:** Parasite SEO placement on high-authority third-party hosts
|
|
167
|
+
- **Workflows:** parasite-watch
|
|
168
|
+
- **Tactic:** NEVER encode as an actionable tactic — placing brand content on a high-authority third-party domain (forum, subreddit, unrelated news site) specifically to borrow its ranking signal is a Google site-reputation-abuse policy violation. The Nov 2024 policy update closed the first-party-involvement loophole: no amount of oversight, white-labeling, or licensing exempts this.
|
|
169
|
+
- **Invariant:** This tactic must never be recommended, even as a human-approval-gated option — it is a named policy violation, not a judgment call the suite should surface as an option.
|
|
170
|
+
- **PrimarySourceUrl:** https://developers.google.com/search/blog/2024/03/core-update-spam-policies
|
|
171
|
+
- **PolicyClass:** never-encode
|
|
172
|
+
- **EvidenceGrade:** primary-unverified
|
|
173
|
+
- **Keywords:** parasite-seo, site-reputation-abuse, never-encode, policy-violation
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bober.seo-internal-linking
|
|
3
|
+
description: "Per-workflow SEO signature library for the internal-linking workflow. A data file of discrete, cited SEO tactics read by SeoPlaybookParser (src/seo/parser.ts), not a workflow skill. Encodes leak-grounded siteFocusScore/siteRadius topical-consolidation signals and fresh/top-tier-indexed link value for the internal-linking workflow."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# bober.seo-internal-linking — Internal Linking Signature Library
|
|
7
|
+
|
|
8
|
+
This skill is a **signature-library** file for the `internal-linking` workflow, not a
|
|
9
|
+
workflow skill in its own right. It is read (as raw markdown text) by
|
|
10
|
+
`SeoPlaybookParser.parse()` (`src/seo/parser.ts`) and turned into typed
|
|
11
|
+
`SeoSignature[]` records consumed by the SEO agent team's retriever
|
|
12
|
+
(`SeoPlaybookRetriever`). It follows the identical block format defined and
|
|
13
|
+
documented in `skills/bober.seo-generic/SKILL.md` ("Signature Block Format") --
|
|
14
|
+
the two files are one executable spec; a block missing `Title` or
|
|
15
|
+
`PrimarySourceUrl`, or tagged `PolicyClass: never-encode`, is DROPPED by the
|
|
16
|
+
parser at load time -- see `.bober/research/research-20260715-ultimate-seo-agents-skills-research.md`
|
|
17
|
+
for the underlying evidence.
|
|
18
|
+
|
|
19
|
+
The signatures below encode the leaked Google Content Warehouse API's
|
|
20
|
+
`siteFocusScore` / `siteRadius` topical-consolidation attributes, the
|
|
21
|
+
tactical implication that fresh/top-tier-indexed pages pass more link
|
|
22
|
+
value, and the anchor-text demotion signal. Most signatures here are
|
|
23
|
+
**read-only analysis** (auto-safe); the one signature that would execute a
|
|
24
|
+
redirect or page-merge is `human-approve`, since it is a structural site
|
|
25
|
+
change, not an audit -- consistent with research §6's automation boundary.
|
|
26
|
+
|
|
27
|
+
## Signatures
|
|
28
|
+
|
|
29
|
+
### sitefocus-internal-consolidation
|
|
30
|
+
- **Title:** Concentrate internal links within topical clusters to reinforce siteFocusScore
|
|
31
|
+
- **Workflows:** internal-linking
|
|
32
|
+
- **Tactic:** Link new and existing pages primarily to other pages within the same topical cluster; avoid diluting internal link equity across unrelated topics on the site.
|
|
33
|
+
- **Invariant:** The leaked Google Content Warehouse API documents a siteFocusScore that rewards a site's dedication to one topic; concentrating internal links within topical clusters reinforces the site-wide signal the leak shows Google is mechanically scoring.
|
|
34
|
+
- **PrimarySourceUrl:** https://sparktoro.com/blog/an-anonymous-source-shared-thousands-of-leaked-google-search-api-documents-with-me-everyone-in-seo-should-see-them/
|
|
35
|
+
- **PolicyClass:** auto-safe
|
|
36
|
+
- **EvidenceGrade:** single-source
|
|
37
|
+
- **Keywords:** sitefocus, topical-cluster, internal-linking, leak
|
|
38
|
+
|
|
39
|
+
### siteradius-deviation-outlier
|
|
40
|
+
- **Title:** Limit internal link equity flowing to high-siteRadius off-topic outlier pages
|
|
41
|
+
- **Workflows:** internal-linking
|
|
42
|
+
- **Tactic:** When auditing internal-link structure, identify pages that deviate sharply from the site's central topic and deliberately limit the internal-link equity routed to them rather than treating them as easy incremental-traffic targets.
|
|
43
|
+
- **Invariant:** The leaked Google Content Warehouse API documents siteRadius, which scores each page's deviation from the site's central theme; the leak identifies high-deviation pages as documented ranking outliers, so an internal-linking strategy should isolate rather than reinforce them.
|
|
44
|
+
- **PrimarySourceUrl:** https://sparktoro.com/blog/an-anonymous-source-shared-thousands-of-leaked-google-search-api-documents-with-me-everyone-in-seo-should-see-them/
|
|
45
|
+
- **PolicyClass:** auto-safe
|
|
46
|
+
- **EvidenceGrade:** single-source
|
|
47
|
+
- **Keywords:** siteradius, deviation, ranking-outlier, internal-linking
|
|
48
|
+
|
|
49
|
+
### fresh-toptier-link-value
|
|
50
|
+
- **Title:** Route internal links from freshly-updated, well-indexed hub pages
|
|
51
|
+
- **Workflows:** internal-linking
|
|
52
|
+
- **Tactic:** Prioritise placing internal links to priority pages from hub/pillar pages that are frequently updated and confirmed well-indexed, rather than from stale or thinly-indexed pages.
|
|
53
|
+
- **Invariant:** Mike King's technical analysis of the leak states the tactical implication that links from fresh and top-tier-indexed pages weigh more in Google's ranking systems than links from stale or poorly-indexed pages.
|
|
54
|
+
- **PrimarySourceUrl:** https://ipullrank.com/google-algo-leak
|
|
55
|
+
- **PolicyClass:** auto-safe
|
|
56
|
+
- **EvidenceGrade:** single-source
|
|
57
|
+
- **Keywords:** fresh-link, top-tier-indexed, link-value, hub-page
|
|
58
|
+
|
|
59
|
+
### anchor-mismatch-demotion
|
|
60
|
+
- **Title:** Keep internal anchor text on-topic to avoid anchorMismatchDemotion
|
|
61
|
+
- **Workflows:** internal-linking
|
|
62
|
+
- **Tactic:** Audit internal anchor text for relevance to the linked page's actual topic; avoid over-optimized, keyword-stuffed, or topically mismatched anchor text even when it targets a high-value keyword.
|
|
63
|
+
- **Invariant:** The leak documents anchorMismatchDemotion together with IsAnchorBayesSpam, a Penguin-era anchor-text spam classifier; anchor text that does not match the linked page's topic is a documented demotion trigger.
|
|
64
|
+
- **PrimarySourceUrl:** https://ipullrank.com/google-algo-leak
|
|
65
|
+
- **PolicyClass:** auto-safe
|
|
66
|
+
- **EvidenceGrade:** single-source
|
|
67
|
+
- **Keywords:** anchor-text, anchor-mismatch-demotion, penguin, internal-linking
|
|
68
|
+
|
|
69
|
+
### authority-consolidation-merge
|
|
70
|
+
- **Title:** Consolidating overlapping pages concentrates authority -- but requires a human-approved redirect/migration
|
|
71
|
+
- **Workflows:** internal-linking
|
|
72
|
+
- **Tactic:** When internal-link analysis surfaces overlapping or cannibalising pages, propose consolidating them into the stronger URL and routing internal links accordingly; do not execute the redirect or migration without a human sign-off, since it is a structural site change.
|
|
73
|
+
- **Invariant:** The leak's siteAuthority and homepagePagerankNs attributes give a mechanical basis for authority-consolidation strategy (merging overlapping pages into the stronger URL to concentrate site-wide authority signals); because consolidation requires redirects and site migration, a human must own the execution decision.
|
|
74
|
+
- **PrimarySourceUrl:** https://ipullrank.com/google-algo-leak
|
|
75
|
+
- **PolicyClass:** human-approve
|
|
76
|
+
- **EvidenceGrade:** single-source
|
|
77
|
+
- **Keywords:** authority-consolidation, redirect, site-migration, human-approve
|
|
78
|
+
|
|
79
|
+
### topical-cluster-hub-spoke
|
|
80
|
+
- **Title:** Build hub-and-spoke internal linking to concentrate siteFocusScore-scored topical authority
|
|
81
|
+
- **Workflows:** internal-linking
|
|
82
|
+
- **Tactic:** Structure internal linking as hub pages fanning out to member/spoke pages within a topic, rather than flat, undifferentiated cross-linking across the whole site.
|
|
83
|
+
- **Invariant:** The leak's siteFocusScore mechanically rewards a site's dedication to one topic; a hub-and-spoke internal-link structure concentrates topical signal into a small set of pillar pages instead of diffusing it flatly across the site.
|
|
84
|
+
- **PrimarySourceUrl:** https://sparktoro.com/blog/an-anonymous-source-shared-thousands-of-leaked-google-search-api-documents-with-me-everyone-in-seo-should-see-them/
|
|
85
|
+
- **PolicyClass:** auto-safe
|
|
86
|
+
- **EvidenceGrade:** single-source
|
|
87
|
+
- **Keywords:** hub-spoke, topical-cluster, sitefocusscore, internal-linking
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bober.seo-parasite-watch
|
|
3
|
+
description: "Per-workflow SEO signature library for the parasite-watch workflow. A data file of discrete, cited SEO tactics read by SeoPlaybookParser (src/seo/parser.ts), not a workflow skill. Encodes READ-ONLY detection/monitoring guidance for competitors' parasite SEO on high-DR third-party hosts, plus the Nov-2024 site-reputation-abuse policy, framed exclusively as defender-side awareness. Every policy-violating tactic itself (placement, expired-domain plays, paid links) is encoded ONLY as a never-encode block the parser drops -- see the safety note below."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# bober.seo-parasite-watch — Parasite-SEO Detection Signature Library
|
|
7
|
+
|
|
8
|
+
This skill is a **signature-library** file for the `parasite-watch` workflow, not
|
|
9
|
+
a workflow skill in its own right. It is read (as raw markdown text) by
|
|
10
|
+
`SeoPlaybookParser.parse()` (`src/seo/parser.ts`) and turned into typed
|
|
11
|
+
`SeoSignature[]` records consumed by the SEO agent team's retriever
|
|
12
|
+
(`SeoPlaybookRetriever`). It follows the identical block format defined and
|
|
13
|
+
documented in `skills/bober.seo-generic/SKILL.md` ("Signature Block Format") --
|
|
14
|
+
the two files are one executable spec; a block missing `Title` or
|
|
15
|
+
`PrimarySourceUrl`, or tagged `PolicyClass: never-encode`, is DROPPED by the
|
|
16
|
+
parser at load time.
|
|
17
|
+
|
|
18
|
+
**Safety framing (read before editing this file):** parasite SEO is an
|
|
19
|
+
adversarial tactic under a NAMED Google spam policy. Every surviving block
|
|
20
|
+
below is read-only competitor monitoring -- phrased as Detect / Monitor / Flag
|
|
21
|
+
/ Audit, never as an instruction to place content, buy links, or register a
|
|
22
|
+
domain. Every policy-violating tactic itself (placement on a third-party host,
|
|
23
|
+
expired-domain authority plays, paid links) is encoded as a `PolicyClass:
|
|
24
|
+
never-encode` block, which the parser hard-drops at `src/seo/parser.ts:111` so
|
|
25
|
+
it never reaches an analyzer prompt -- it exists here only to document the
|
|
26
|
+
automation boundary for human readers, mirroring the precedent block
|
|
27
|
+
`parasite-seo-placement` in `skills/bober.seo-generic/SKILL.md:163-171`. See
|
|
28
|
+
`.bober/research/research-20260715-ultimate-seo-agents-skills-research.md`
|
|
29
|
+
§3/§6 for the underlying policy evidence.
|
|
30
|
+
|
|
31
|
+
## Signatures
|
|
32
|
+
|
|
33
|
+
### parasite-competitor-detection-highdr-hosts
|
|
34
|
+
- **Title:** Detect competitors' parasite SEO on high-DR third-party hosts
|
|
35
|
+
- **Workflows:** parasite-watch
|
|
36
|
+
- **Tactic:** Monitor target SERPs for competitor content placed on high-authority third-party hosts (Forbes, Reddit, Medium, major news outlets, .edu domains) -- keyword-stuffed "best <X>" listicles or review pages outranking dedicated competitor sites are the parasite-SEO signal. Flag newly-appearing parasite entrants for the human operator to review. This is READ-ONLY SERP monitoring, never a placement action.
|
|
37
|
+
- **Invariant:** Parasite SEO (site-reputation abuse) remains widespread across gambling/affiliate SERPs despite the Nov-2024 policy update; continuous SERP monitoring detects new parasite entrants a defender must respond to.
|
|
38
|
+
- **PrimarySourceUrl:** https://developers.google.com/search/blog/2024/11/site-reputation-abuse
|
|
39
|
+
- **PolicyClass:** auto-safe
|
|
40
|
+
- **EvidenceGrade:** primary-unverified
|
|
41
|
+
- **Keywords:** parasite-seo, detection, site-reputation-abuse, serp-monitoring, competitor
|
|
42
|
+
|
|
43
|
+
### site-reputation-abuse-policy-awareness
|
|
44
|
+
- **Title:** Maintain policy awareness of the Nov-2024 site-reputation-abuse loophole closure
|
|
45
|
+
- **Workflows:** parasite-watch
|
|
46
|
+
- **Tactic:** Keep the parasite-watch audit report's policy-reference section current with Google's site-reputation-abuse definition; use it as the classification rubric when flagging detected competitor placements, so findings are labeled against the actual named policy rather than an informal "seems spammy" judgment.
|
|
47
|
+
- **Invariant:** Google's Nov 2024 policy update closed the first-party-involvement loophole for site-reputation abuse: no amount of third-party oversight, white-labeling, or licensing arrangement exempts content hosted to exploit another site's ranking signal.
|
|
48
|
+
- **PrimarySourceUrl:** https://developers.google.com/search/blog/2024/11/site-reputation-abuse
|
|
49
|
+
- **PolicyClass:** auto-safe
|
|
50
|
+
- **EvidenceGrade:** primary-unverified
|
|
51
|
+
- **Keywords:** site-reputation-abuse, policy-awareness, nov-2024, classification
|
|
52
|
+
|
|
53
|
+
### standalone-section-algorithm-watch
|
|
54
|
+
- **Title:** Watch for Google scoring a site section as "standalone" from the main site
|
|
55
|
+
- **Workflows:** parasite-watch, technical-audit
|
|
56
|
+
- **Tactic:** Audit site sections (subdomains, subdirectories with distinct editorial control or topic focus) for the risk of being algorithmically scored as standalone from the main site's authority; report any section showing "starkly different" content/purpose from the core site as a silent-traffic-loss risk finding, not a policy violation -- this is a ranking-mechanics watch item, not a spam classification.
|
|
57
|
+
- **Invariant:** Google's spam-policy documentation notes that a site section starkly different in purpose from the rest of the site may be scored as if it were a standalone entity, which can silently reduce the traffic that section inherits from the main site's authority -- a distinct risk from an outright policy violation.
|
|
58
|
+
- **PrimarySourceUrl:** https://developers.google.com/search/docs/essentials/spam-policies
|
|
59
|
+
- **PolicyClass:** auto-safe
|
|
60
|
+
- **EvidenceGrade:** primary-unverified
|
|
61
|
+
- **Keywords:** standalone-section, algorithm-watch, silent-traffic-loss, technical-audit
|
|
62
|
+
|
|
63
|
+
### parasite-serp-monitoring-new-entrants
|
|
64
|
+
- **Title:** Run continuous SERP monitoring for new parasite-SEO entrants in adversarial verticals
|
|
65
|
+
- **Workflows:** parasite-watch
|
|
66
|
+
- **Tactic:** Schedule recurring (not one-time) SERP checks for target keywords in adversarial verticals (iGaming, affiliate, crypto) to catch new parasite placements as they appear; a single audit snapshot understates the problem because parasite entrants rotate hosts and rankings volatilely.
|
|
67
|
+
- **Invariant:** Industry reporting on iGaming affiliate SERPs documents parasite SEO as an ongoing, shifting problem -- new placements appear and enforcement against them is inconsistent -- making continuous monitoring, not a one-time audit, the correct defensive cadence.
|
|
68
|
+
- **PrimarySourceUrl:** https://www.affiversemedia.com/parasite-seo-is-thriving-in-igaming-and-its-costing-affiliates/
|
|
69
|
+
- **PolicyClass:** auto-safe
|
|
70
|
+
- **EvidenceGrade:** primary-unverified
|
|
71
|
+
- **Keywords:** serp-monitoring, new-entrants, igaming, continuous-audit
|
|
72
|
+
|
|
73
|
+
### remediation-trap-awareness
|
|
74
|
+
- **Title:** Flag remediation traps before recommending a manual-action response
|
|
75
|
+
- **Workflows:** parasite-watch
|
|
76
|
+
- **Tactic:** When a site under audit has a manual action or reputation-abuse penalty, route any proposed remediation (noindexing the offending section, moving content to a different subdirectory) through human approval; do not auto-recommend noindex as a fix, and explicitly flag that relocating penalized content to a new path may itself be treated as circumvention rather than remediation.
|
|
77
|
+
- **Invariant:** Noindexing a section does not automatically remove an existing manual action, and moving previously-penalized content into a new subdirectory can be treated by Google as an attempt to circumvent the action rather than a genuine fix -- both are documented remediation traps in Google's spam-policy guidance.
|
|
78
|
+
- **PrimarySourceUrl:** https://developers.google.com/search/docs/essentials/spam-policies
|
|
79
|
+
- **PolicyClass:** human-approve
|
|
80
|
+
- **EvidenceGrade:** primary-unverified
|
|
81
|
+
- **Keywords:** remediation-trap, manual-action, circumvention, human-approve
|
|
82
|
+
|
|
83
|
+
### igaming-parasite-defensive-playbook
|
|
84
|
+
- **Title:** Defend against iGaming parasite-SEO pressure with long-tail targeting and diversified traffic
|
|
85
|
+
- **Workflows:** parasite-watch
|
|
86
|
+
- **Tactic:** For iGaming/affiliate clients facing parasite-SEO pressure on head terms, recommend (human-approval-gated, since it is a strategic content/PR investment) a defensive mix of long-tail keyword targeting the parasite entrants under-cover, genuine E-E-A-T-building PR (real expert bylines, verifiable credentials), and traffic-source diversification so no single SERP category dominates revenue exposure.
|
|
87
|
+
- **Invariant:** Reporting on the iGaming affiliate-marketing parasite-SEO landscape documents affiliates experiencing organic-traffic declines from parasite competitors and recommends long-tail targeting, genuine authority-building, and traffic diversification as the practical defensive response, alongside continuous monitoring.
|
|
88
|
+
- **PrimarySourceUrl:** https://www.businessofigaming.com/parasite-seo-affiliate-marketing/
|
|
89
|
+
- **PolicyClass:** human-approve
|
|
90
|
+
- **EvidenceGrade:** primary-unverified
|
|
91
|
+
- **Keywords:** igaming, defensive-playbook, long-tail, eeat, traffic-diversification
|
|
92
|
+
|
|
93
|
+
### parasite-seo-placement-boundary
|
|
94
|
+
- **Title:** Parasite-SEO placement on high-DR third-party hosts -- NEVER encode as a tactic
|
|
95
|
+
- **Workflows:** parasite-watch
|
|
96
|
+
- **Tactic:** NEVER encode as actionable. Placing brand or client content on a high-authority third-party domain (forum, subreddit, unrelated news site) specifically to borrow its ranking signal is a Google site-reputation-abuse policy violation, regardless of disclosure or licensing arrangement. Documented here only to mark the automation boundary; the parser DROPS this block so it can never reach an analyzer prompt.
|
|
97
|
+
- **Invariant:** This tactic must never be recommended, even as a human-approval-gated option -- it is a named policy violation, not a judgment call the suite should surface as an option. See the identical precedent in the generic skill's `parasite-seo-placement` block.
|
|
98
|
+
- **PrimarySourceUrl:** https://developers.google.com/search/blog/2024/11/site-reputation-abuse
|
|
99
|
+
- **PolicyClass:** never-encode
|
|
100
|
+
- **EvidenceGrade:** primary-unverified
|
|
101
|
+
- **Keywords:** parasite-seo, never-encode, policy-violation, site-reputation-abuse
|
|
102
|
+
|
|
103
|
+
### expired-domain-authority-play-boundary
|
|
104
|
+
- **Title:** Expired-domain authority acquisition -- NEVER encode as a tactic
|
|
105
|
+
- **Workflows:** parasite-watch
|
|
106
|
+
- **Tactic:** NEVER encode as actionable. Buying/re-registering an expired domain to inherit its historic authority and backlinks (then redirecting or rebuilding on it) is a NAMED Google spam violation ("expired domain abuse", March 2024). Documented here only to mark the automation boundary; the parser DROPS this block so it can never reach an analyzer prompt.
|
|
107
|
+
- **Invariant:** Expired-domain abuse is a named spam policy -- must never be surfaced as an option, even human-approval-gated.
|
|
108
|
+
- **PrimarySourceUrl:** https://developers.google.com/search/blog/2024/03/core-update-spam-policies
|
|
109
|
+
- **PolicyClass:** never-encode
|
|
110
|
+
- **EvidenceGrade:** primary-unverified
|
|
111
|
+
- **Keywords:** expired-domain, authority-play, never-encode, policy-violation
|
|
112
|
+
|
|
113
|
+
### paid-links-boundary
|
|
114
|
+
- **Title:** Buying or selling links that pass ranking signal -- NEVER encode as a tactic
|
|
115
|
+
- **Workflows:** parasite-watch
|
|
116
|
+
- **Tactic:** NEVER encode as actionable. Buying links, selling links that pass PageRank-style signal, or exchanging goods/services (including paid posts or sponsorships) specifically for links intended to manipulate ranking is a NAMED Google link-spam violation. Documented here only to mark the automation boundary; the parser DROPS this block so it can never reach an analyzer prompt.
|
|
117
|
+
- **Invariant:** Paid/link-spam schemes are a named spam policy category in Google's living spam-policy reference -- must never be surfaced as an option, even human-approval-gated.
|
|
118
|
+
- **PrimarySourceUrl:** https://developers.google.com/search/docs/essentials/spam-policies
|
|
119
|
+
- **PolicyClass:** never-encode
|
|
120
|
+
- **EvidenceGrade:** primary-unverified
|
|
121
|
+
- **Keywords:** paid-links, link-spam, never-encode, policy-violation
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bober.seo-rank-track
|
|
3
|
+
description: "Per-workflow SEO signature library for the rank-track workflow. A data file of discrete, cited SEO tactics read by SeoPlaybookParser (src/seo/parser.ts), not a workflow skill. Encodes AI Overview citation-vs-rank decoupling, AIO prevalence volatility, and the zero-click-rate reality for the rank-track workflow."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# bober.seo-rank-track — Rank Tracking Signature Library
|
|
7
|
+
|
|
8
|
+
This skill is a **signature-library** file for the `rank-track` workflow, not a
|
|
9
|
+
workflow skill in its own right. It is read (as raw markdown text) by
|
|
10
|
+
`SeoPlaybookParser.parse()` (`src/seo/parser.ts`) and turned into typed
|
|
11
|
+
`SeoSignature[]` records consumed by the SEO agent team's retriever
|
|
12
|
+
(`SeoPlaybookRetriever`). It follows the identical block format defined and
|
|
13
|
+
documented in `skills/bober.seo-generic/SKILL.md` ("Signature Block Format") --
|
|
14
|
+
the two files are one executable spec; a block missing `Title` or
|
|
15
|
+
`PrimarySourceUrl`, or tagged `PolicyClass: never-encode`, is DROPPED by the
|
|
16
|
+
parser at load time -- see
|
|
17
|
+
`.bober/research/research-20260715-ultimate-seo-agents-skills-research.md`
|
|
18
|
+
for the underlying evidence.
|
|
19
|
+
|
|
20
|
+
The signatures below encode Ahrefs' and Semrush's 2025-2026 rank-tracking
|
|
21
|
+
studies: AI Overview citation increasingly decouples from organic top-10
|
|
22
|
+
position (only 38% of AIO-cited pages rank top-10), AIO prevalence and
|
|
23
|
+
intent mix are highly volatile, zero-click rate has not spiked as claimed,
|
|
24
|
+
and most AI citations are "ghost citations" (linked but unnamed). Every
|
|
25
|
+
signature here is pure read-only monitoring/analysis, so all are
|
|
26
|
+
**auto-safe** -- consistent with research §6's automation boundary.
|
|
27
|
+
|
|
28
|
+
## Signatures
|
|
29
|
+
|
|
30
|
+
### aio-citation-rank-decouple
|
|
31
|
+
- **Title:** Track AIO-citation coverage as a metric separate from organic rank -- only 38% of cited pages rank top-10
|
|
32
|
+
- **Workflows:** rank-track
|
|
33
|
+
- **Tactic:** Record AIO-citation status as an independent tracked metric alongside position, not as a proxy derived from rank; a page can be a heavily-cited AIO source while ranking well outside the organic top-10, so rank-only tracking misses most of the citation surface.
|
|
34
|
+
- **Invariant:** An Ahrefs analysis of 863K SERPs / 4M AIO URLs found only 38% of AIO-cited pages ranked in the organic top-10 as of Jan 2026 (down from ~76% in Jul 2025), with 31.2% ranking 11-100 and 31.0% ranking beyond top-100.
|
|
35
|
+
- **PrimarySourceUrl:** https://ahrefs.com/blog/ai-overview-citations-top-10/
|
|
36
|
+
- **PolicyClass:** auto-safe
|
|
37
|
+
- **EvidenceGrade:** verified
|
|
38
|
+
- **Keywords:** aio-citation, rank-decouple, top10, ahrefs
|
|
39
|
+
|
|
40
|
+
### zero-click-reality-check
|
|
41
|
+
- **Title:** Zero-click rate slightly decreased after AIOs appeared -- don't over-index on click-loss panic
|
|
42
|
+
- **Workflows:** rank-track
|
|
43
|
+
- **Tactic:** When interpreting rank-tracking data for click-loss risk, do not default to a narrative of AIO-driven zero-click collapse; report the measured, small directional change instead of an assumed large one.
|
|
44
|
+
- **Invariant:** A 200K+ keyword before/after study validated against Datos clickstream data found the zero-click rate slightly DECREASED (33.75% to 31.53%) on keywords after AI Overviews appeared.
|
|
45
|
+
- **PrimarySourceUrl:** https://www.semrush.com/blog/semrush-ai-overviews-study/
|
|
46
|
+
- **PolicyClass:** auto-safe
|
|
47
|
+
- **EvidenceGrade:** verified
|
|
48
|
+
- **Keywords:** zero-click, reality-check, datos, clickstream
|
|
49
|
+
|
|
50
|
+
### aio-prevalence-volatility-cadence
|
|
51
|
+
- **Title:** AI Overview prevalence swings hard -- re-measure on a recurring cadence, not a one-time snapshot
|
|
52
|
+
- **Workflows:** rank-track
|
|
53
|
+
- **Tactic:** Schedule AIO-prevalence re-measurement for tracked queries on a recurring cadence; treat AIO as a churning surface that needs standing monitoring, not a one-time audit finding that stays valid indefinitely.
|
|
54
|
+
- **Invariant:** A Semrush 10M+ keyword panel documents AIO prevalence fluctuating through 2025 from 6.49% of queries (Jan) to 24.61% (Jul) to 15.69% (Nov) -- a large enough swing that a single-point measurement is stale within weeks.
|
|
55
|
+
- **PrimarySourceUrl:** https://www.semrush.com/blog/semrush-ai-overviews-study/
|
|
56
|
+
- **PolicyClass:** auto-safe
|
|
57
|
+
- **EvidenceGrade:** verified
|
|
58
|
+
- **Keywords:** aio-prevalence, volatility, monitoring-cadence, semrush
|
|
59
|
+
|
|
60
|
+
### commercial-intent-trigger-shift
|
|
61
|
+
- **Title:** Track commercial/transactional AIO triggers -- intent mix has moved decisively to money queries
|
|
62
|
+
- **Workflows:** rank-track
|
|
63
|
+
- **Tactic:** Segment rank-tracking reports by intent (informational vs. commercial vs. transactional) and surface the commercial/transactional AIO-trigger trend as a distinct tracked line, since it reflects where the AIO surface is actually shifting.
|
|
64
|
+
- **Invariant:** The same Semrush 10M+ keyword panel documents AIO intent mix shifting Jan-Oct 2025: informational share fell from 91.3% to 57.1% of triggers while commercial rose to 18.57% and transactional to 13.94%.
|
|
65
|
+
- **PrimarySourceUrl:** https://www.semrush.com/blog/semrush-ai-overviews-study/
|
|
66
|
+
- **PolicyClass:** auto-safe
|
|
67
|
+
- **EvidenceGrade:** verified
|
|
68
|
+
- **Keywords:** commercial-intent, transactional, aio-trigger-shift, rank-track
|
|
69
|
+
|
|
70
|
+
### rank-track-monitoring-cadence
|
|
71
|
+
- **Title:** Track position on a standing recurring cadence rather than ad-hoc spot checks
|
|
72
|
+
- **Workflows:** rank-track
|
|
73
|
+
- **Tactic:** Run position tracking as a recurring, read-only monitoring pass on a fixed cadence for tracked queries/URLs, rather than triggering checks only ad-hoc when a stakeholder asks; a recurring cadence is what makes AIO-citation-decouple and volatility findings comparable run-over-run.
|
|
74
|
+
- **Invariant:** Both the AIO citation-decouple finding (38% top-10 alignment, down from ~76% seven months earlier) and the AIO prevalence-volatility finding (6.49%->24.61%->15.69% across 2025) show the ranking/citation surface moving materially within months, which only a recurring monitoring cadence can capture.
|
|
75
|
+
- **PrimarySourceUrl:** https://www.semrush.com/blog/semrush-ai-overviews-study/
|
|
76
|
+
- **PolicyClass:** auto-safe
|
|
77
|
+
- **EvidenceGrade:** verified
|
|
78
|
+
- **Keywords:** rank-track, monitoring-cadence, recurring, position-tracking
|
|
79
|
+
|
|
80
|
+
### ghost-citation-two-metric-tracking
|
|
81
|
+
- **Title:** Track citation-rate and mention-rate as two separate metrics -- most AI citations are "ghost citations"
|
|
82
|
+
- **Workflows:** rank-track
|
|
83
|
+
- **Tactic:** Report AI citation-rate (linked as a source) and brand-mention-rate (named in the answer text) as two distinct tracked metrics rather than treating a citation as evidence the brand was actually named.
|
|
84
|
+
- **Invariant:** A Semrush/Kevin Indig study of 3,981 domain appearances / 115 prompts / 4 platforms / 14 countries found 61.7% of AI citations are "ghost citations" -- the source page is linked but the brand is never named in the answer.
|
|
85
|
+
- **PrimarySourceUrl:** https://www.semrush.com/blog/the-ghost-citations-study/
|
|
86
|
+
- **PolicyClass:** auto-safe
|
|
87
|
+
- **EvidenceGrade:** verified
|
|
88
|
+
- **Keywords:** ghost-citation, citation-rate, mention-rate, two-metric
|
|
89
|
+
|
|
90
|
+
### navboost-click-quality-leading-indicator
|
|
91
|
+
- **Title:** Watch good/bad-click proxies as a leading indicator of upcoming rank movement
|
|
92
|
+
- **Workflows:** rank-track
|
|
93
|
+
- **Tactic:** Include click-quality proxies (bounce-back behavior, dwell/engagement signals) as a tracked leading-indicator line item alongside raw position, since click-history shifts can precede a rank change rather than only follow it.
|
|
94
|
+
- **Invariant:** The leaked Google Content Warehouse API documents NavBoost as a click-based re-ranking system tracking goodClicks, badClicks, lastLongestClicks, and unsquashedClicks over a rolling 13-month window; a shift in this click history is a mechanical input to future re-ranking, making it a leading indicator worth tracking alongside position.
|
|
95
|
+
- **PrimarySourceUrl:** https://ipullrank.com/google-algo-leak
|
|
96
|
+
- **PolicyClass:** auto-safe
|
|
97
|
+
- **EvidenceGrade:** single-source
|
|
98
|
+
- **Keywords:** navboost, click-quality, leading-indicator, rank-track
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bober.seo-schema-audit
|
|
3
|
+
description: "Per-workflow SEO signature library for the schema-audit workflow. A data file of discrete, cited SEO tactics read by SeoPlaybookParser (src/seo/parser.ts), not a workflow skill. Encodes the entity-linking to AI Overview visibility lift (Schema App case study), Google's structured-data policy guidance, and leak-grounded date-consistency signals for the schema-audit workflow."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# bober.seo-schema-audit — Schema Audit Signature Library
|
|
7
|
+
|
|
8
|
+
This skill is a **signature-library** file for the `schema-audit` workflow, not a
|
|
9
|
+
workflow skill in its own right. It is read (as raw markdown text) by
|
|
10
|
+
`SeoPlaybookParser.parse()` (`src/seo/parser.ts`) and turned into typed
|
|
11
|
+
`SeoSignature[]` records consumed by the SEO agent team's retriever
|
|
12
|
+
(`SeoPlaybookRetriever`). It follows the identical block format defined and
|
|
13
|
+
documented in `skills/bober.seo-generic/SKILL.md` ("Signature Block Format") --
|
|
14
|
+
the two files are one executable spec; a block missing `Title` or
|
|
15
|
+
`PrimarySourceUrl`, or tagged `PolicyClass: never-encode`, is DROPPED by the
|
|
16
|
+
parser at load time -- see `.bober/research/research-20260715-ultimate-seo-agents-skills-research.md`
|
|
17
|
+
for the underlying evidence.
|
|
18
|
+
|
|
19
|
+
The signatures below encode the quantified entity-linking -> AI Overview
|
|
20
|
+
visibility lift (Schema App case study), Google's own structured-data
|
|
21
|
+
eligibility and policy documentation, and the leak's date-consistency
|
|
22
|
+
guidance applied to structured-data audits. Read-only validation and
|
|
23
|
+
audit tactics are `auto-safe`; generating and deploying structured data at
|
|
24
|
+
scale across a site is a structural change with policy exposure and is
|
|
25
|
+
`human-approve` -- consistent with research §6's automation boundary.
|
|
26
|
+
|
|
27
|
+
## Signatures
|
|
28
|
+
|
|
29
|
+
### schema-entity-linking-aio
|
|
30
|
+
- **Title:** Entity-linking / schema markup measurably lifts AI Overview visibility (+19.72%)
|
|
31
|
+
- **Workflows:** schema-audit
|
|
32
|
+
- **Tactic:** Prioritise entity-linking and schema-markup work as a standard, budgeted line item in every schema audit, not an optional add-on -- treat it as one of the few quantified levers with a measured AI Overview visibility outcome.
|
|
33
|
+
- **Invariant:** A documented Schema App case study measured a +19.72% increase in AI Overview visibility from entity-linking / schema-markup work -- one of the few quantified schema-to-GEO (generative-engine-optimization) results in the current evidence base.
|
|
34
|
+
- **PrimarySourceUrl:** https://www.schemaapp.com/schema-markup/case-study-entity-linking-increases-aio-visibility/
|
|
35
|
+
- **PolicyClass:** auto-safe
|
|
36
|
+
- **EvidenceGrade:** single-source
|
|
37
|
+
- **Keywords:** entity-linking, schema-markup, aio-lift, schema-audit
|
|
38
|
+
|
|
39
|
+
### structured-data-validation
|
|
40
|
+
- **Title:** Validate structured data against Google's eligibility guidance as a standard audit step
|
|
41
|
+
- **Workflows:** schema-audit
|
|
42
|
+
- **Tactic:** Run every audited page's structured data through validation against Google's documented eligibility requirements before flagging it as compliant; treat "present but invalid" markup as a distinct finding from "absent" markup.
|
|
43
|
+
- **Invariant:** Google's structured-data documentation defines validation and rich-result eligibility requirements that markup must satisfy; rich-result eligibility depends on valid, complete markup, not merely its presence.
|
|
44
|
+
- **PrimarySourceUrl:** https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data
|
|
45
|
+
- **PolicyClass:** auto-safe
|
|
46
|
+
- **EvidenceGrade:** primary-unverified
|
|
47
|
+
- **Keywords:** structured-data, validation, rich-results, schema-audit
|
|
48
|
+
|
|
49
|
+
### article-date-schema-alignment
|
|
50
|
+
- **Title:** Article schema datePublished/dateModified must align with the visible byline
|
|
51
|
+
- **Workflows:** schema-audit
|
|
52
|
+
- **Tactic:** For every audited article page, compare the structured data's datePublished and dateModified against the visible byline date on the page; flag any mismatch as an audit finding.
|
|
53
|
+
- **Invariant:** Google's Article structured-data documentation specifies datePublished and dateModified properties that are expected to reflect the article's actual publish/update history; misalignment with the visible byline is a documented markup-accuracy issue.
|
|
54
|
+
- **PrimarySourceUrl:** https://developers.google.com/search/docs/appearance/structured-data/article
|
|
55
|
+
- **PolicyClass:** auto-safe
|
|
56
|
+
- **EvidenceGrade:** primary-unverified
|
|
57
|
+
- **Keywords:** article-schema, datepublished, datemodified, byline-alignment
|
|
58
|
+
|
|
59
|
+
### leak-date-consistency-schema
|
|
60
|
+
- **Title:** Cross-check structured-data dates against on-page and URL date signals (leak-grounded)
|
|
61
|
+
- **Workflows:** schema-audit
|
|
62
|
+
- **Tactic:** As part of every schema audit, cross-check the structured data's date fields against the visible on-page byline date and any date embedded in the URL; report drift across any of the three as a single date-consistency finding.
|
|
63
|
+
- **Invariant:** Mike King's technical analysis of the leak states the tactical implication that bylineDate, syntacticDate, and semanticDate should be kept consistent across structured data, titles, and URLs; a schema audit is a natural enforcement point for this cross-check.
|
|
64
|
+
- **PrimarySourceUrl:** https://ipullrank.com/google-algo-leak
|
|
65
|
+
- **PolicyClass:** auto-safe
|
|
66
|
+
- **EvidenceGrade:** single-source
|
|
67
|
+
- **Keywords:** date-consistency, structured-data, leak, schema-audit
|
|
68
|
+
|
|
69
|
+
### mass-schema-generation-approval
|
|
70
|
+
- **Title:** Mass structured-data generation/deployment across a site requires human approval
|
|
71
|
+
- **Workflows:** schema-audit
|
|
72
|
+
- **Tactic:** Do not auto-deploy generated structured data at scale across a site; generate proposed markup, then route it through human review before publication, since bulk deployment is a structural site change with policy exposure.
|
|
73
|
+
- **Invariant:** Google's General Structured Data Guidelines state that structured data must accurately reflect the content of the page it's on and penalise markup that does not match visible content; generating and deploying markup at scale across many pages without per-page review is a policy-exposed structural change, so a human must approve mass generation before deployment.
|
|
74
|
+
- **PrimarySourceUrl:** https://developers.google.com/search/docs/appearance/structured-data/sd-policies
|
|
75
|
+
- **PolicyClass:** human-approve
|
|
76
|
+
- **EvidenceGrade:** primary-unverified
|
|
77
|
+
- **Keywords:** mass-schema-generation, structured-data-policy, human-approve, sd-guidelines
|
|
78
|
+
|
|
79
|
+
### entity-schema-org-product-faq
|
|
80
|
+
- **Title:** Implement Organization/Product/FAQ entity schema to strengthen the entity graph behind the AIO lift
|
|
81
|
+
- **Workflows:** schema-audit
|
|
82
|
+
- **Tactic:** Where absent, implement Organization, Product, and FAQ structured data (as applicable to the page type) as the concrete entity-linking work behind the measured AI Overview visibility lift, prioritising pages that already rank or are AIO-eligible.
|
|
83
|
+
- **Invariant:** The Schema App case study's +19.72% AI Overview visibility lift was produced by entity-linking / schema-markup work; Organization, Product, and FAQ schema are the standard entity-graph structured-data types that operationalize entity linking on a page.
|
|
84
|
+
- **PrimarySourceUrl:** https://www.schemaapp.com/schema-markup/case-study-entity-linking-increases-aio-visibility/
|
|
85
|
+
- **PolicyClass:** auto-safe
|
|
86
|
+
- **EvidenceGrade:** single-source
|
|
87
|
+
- **Keywords:** organization-schema, product-schema, faq-schema, entity-graph
|
|
88
|
+
|
|
89
|
+
### sd-policy-compliance-audit
|
|
90
|
+
- **Title:** Audit for structured-data policy violations (markup that doesn't reflect visible content)
|
|
91
|
+
- **Workflows:** schema-audit
|
|
92
|
+
- **Tactic:** Check every page's structured data against the visible content it describes and flag any markup that adds information not present on the page, or that is hidden/irrelevant to the user, as a policy-compliance finding -- do not wait for a manual action to surface it.
|
|
93
|
+
- **Invariant:** Google's General Structured Data Guidelines document policy violations including markup that doesn't reflect the page's visible content and irrelevant or misleading markup; a schema audit should proactively check for these violations.
|
|
94
|
+
- **PrimarySourceUrl:** https://developers.google.com/search/docs/appearance/structured-data/sd-policies
|
|
95
|
+
- **PolicyClass:** auto-safe
|
|
96
|
+
- **EvidenceGrade:** primary-unverified
|
|
97
|
+
- **Keywords:** structured-data-policy, compliance-audit, sd-guidelines, schema-audit
|