metaharness 0.1.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/LICENSE +21 -0
- package/README.md +73 -0
- package/dist/analyze-repo.d.ts +74 -0
- package/dist/analyze-repo.d.ts.map +1 -0
- package/dist/analyze-repo.js +329 -0
- package/dist/analyze-repo.js.map +1 -0
- package/dist/audit-cmd.d.ts +6 -0
- package/dist/audit-cmd.d.ts.map +1 -0
- package/dist/audit-cmd.js +139 -0
- package/dist/audit-cmd.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +8 -0
- package/dist/bin.js.map +1 -0
- package/dist/compare-cmd.d.ts +56 -0
- package/dist/compare-cmd.d.ts.map +1 -0
- package/dist/compare-cmd.js +173 -0
- package/dist/compare-cmd.js.map +1 -0
- package/dist/completions-cmd.d.ts +6 -0
- package/dist/completions-cmd.d.ts.map +1 -0
- package/dist/completions-cmd.js +171 -0
- package/dist/completions-cmd.js.map +1 -0
- package/dist/diag.d.ts +76 -0
- package/dist/diag.d.ts.map +1 -0
- package/dist/diag.js +349 -0
- package/dist/diag.js.map +1 -0
- package/dist/eject.d.ts +33 -0
- package/dist/eject.d.ts.map +1 -0
- package/dist/eject.js +147 -0
- package/dist/eject.js.map +1 -0
- package/dist/export-config.d.ts +25 -0
- package/dist/export-config.d.ts.map +1 -0
- package/dist/export-config.js +134 -0
- package/dist/export-config.js.map +1 -0
- package/dist/external-template.d.ts +19 -0
- package/dist/external-template.d.ts.map +1 -0
- package/dist/external-template.js +37 -0
- package/dist/external-template.js.map +1 -0
- package/dist/federate.d.ts +37 -0
- package/dist/federate.d.ts.map +1 -0
- package/dist/federate.js +167 -0
- package/dist/federate.js.map +1 -0
- package/dist/genome-scorers.d.ts +33 -0
- package/dist/genome-scorers.d.ts.map +1 -0
- package/dist/genome-scorers.js +115 -0
- package/dist/genome-scorers.js.map +1 -0
- package/dist/genome.d.ts +28 -0
- package/dist/genome.d.ts.map +1 -0
- package/dist/genome.js +219 -0
- package/dist/genome.js.map +1 -0
- package/dist/harness-bin.d.ts +3 -0
- package/dist/harness-bin.d.ts.map +1 -0
- package/dist/harness-bin.js +17 -0
- package/dist/harness-bin.js.map +1 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +409 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +55 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +62 -0
- package/dist/manifest.js.map +1 -0
- package/dist/mcp-cmd.d.ts +19 -0
- package/dist/mcp-cmd.d.ts.map +1 -0
- package/dist/mcp-cmd.js +179 -0
- package/dist/mcp-cmd.js.map +1 -0
- package/dist/mcp-scan.d.ts +25 -0
- package/dist/mcp-scan.d.ts.map +1 -0
- package/dist/mcp-scan.js +132 -0
- package/dist/mcp-scan.js.map +1 -0
- package/dist/oia-manifest.d.ts +97 -0
- package/dist/oia-manifest.d.ts.map +1 -0
- package/dist/oia-manifest.js +241 -0
- package/dist/oia-manifest.js.map +1 -0
- package/dist/publish-cmd.d.ts +9 -0
- package/dist/publish-cmd.d.ts.map +1 -0
- package/dist/publish-cmd.js +56 -0
- package/dist/publish-cmd.js.map +1 -0
- package/dist/publish.d.ts +55 -0
- package/dist/publish.d.ts.map +1 -0
- package/dist/publish.js +104 -0
- package/dist/publish.js.map +1 -0
- package/dist/registry.d.ts +60 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +67 -0
- package/dist/registry.js.map +1 -0
- package/dist/rename.d.ts +26 -0
- package/dist/rename.d.ts.map +1 -0
- package/dist/rename.js +86 -0
- package/dist/rename.js.map +1 -0
- package/dist/renderer.d.ts +39 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +75 -0
- package/dist/renderer.js.map +1 -0
- package/dist/sbom-cmd.d.ts +6 -0
- package/dist/sbom-cmd.d.ts.map +1 -0
- package/dist/sbom-cmd.js +125 -0
- package/dist/sbom-cmd.js.map +1 -0
- package/dist/score.d.ts +32 -0
- package/dist/score.d.ts.map +1 -0
- package/dist/score.js +381 -0
- package/dist/score.js.map +1 -0
- package/dist/secrets.d.ts +27 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +228 -0
- package/dist/secrets.js.map +1 -0
- package/dist/subcommands.d.ts +32 -0
- package/dist/subcommands.d.ts.map +1 -0
- package/dist/subcommands.js +335 -0
- package/dist/subcommands.js.map +1 -0
- package/dist/tarball.d.ts +14 -0
- package/dist/tarball.d.ts.map +1 -0
- package/dist/tarball.js +121 -0
- package/dist/tarball.js.map +1 -0
- package/dist/threat-model.d.ts +32 -0
- package/dist/threat-model.d.ts.map +1 -0
- package/dist/threat-model.js +236 -0
- package/dist/threat-model.js.map +1 -0
- package/dist/upgrade-cmd.d.ts +9 -0
- package/dist/upgrade-cmd.d.ts.map +1 -0
- package/dist/upgrade-cmd.js +90 -0
- package/dist/upgrade-cmd.js.map +1 -0
- package/dist/upgrade.d.ts +37 -0
- package/dist/upgrade.d.ts.map +1 -0
- package/dist/upgrade.js +124 -0
- package/dist/upgrade.js.map +1 -0
- package/dist/validate.d.ts +7 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +240 -0
- package/dist/validate.js.map +1 -0
- package/dist/walker.d.ts +24 -0
- package/dist/walker.d.ts.map +1 -0
- package/dist/walker.js +76 -0
- package/dist/walker.js.map +1 -0
- package/dist/witness-client.d.ts +40 -0
- package/dist/witness-client.d.ts.map +1 -0
- package/dist/witness-client.js +99 -0
- package/dist/witness-client.js.map +1 -0
- package/dist/wizard.d.ts +37 -0
- package/dist/wizard.d.ts.map +1 -0
- package/dist/wizard.js +137 -0
- package/dist/wizard.js.map +1 -0
- package/dist/writer.d.ts +13 -0
- package/dist/writer.d.ts.map +1 -0
- package/dist/writer.js +43 -0
- package/dist/writer.js.map +1 -0
- package/package.json +114 -0
- package/templates/catalog.def.mjs +542 -0
- package/templates/catalog.json +1274 -0
- package/templates/minimal/.claude/settings.json.tmpl +18 -0
- package/templates/minimal/CLAUDE.md.tmpl +23 -0
- package/templates/minimal/README.md.tmpl +20 -0
- package/templates/minimal/manifest.json +16 -0
- package/templates/minimal/package.json.tmpl +30 -0
- package/templates/minimal/src/init.ts.tmpl +21 -0
- package/templates/vertical_advertising/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_advertising/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_advertising/.claude/skills/media-plan/SKILL.md.tmpl +13 -0
- package/templates/vertical_advertising/CLAUDE.md.tmpl +30 -0
- package/templates/vertical_advertising/README.md.tmpl +29 -0
- package/templates/vertical_advertising/manifest.json +81 -0
- package/templates/vertical_advertising/package.json.tmpl +30 -0
- package/templates/vertical_advertising/src/agents/copywriter.ts.tmpl +7 -0
- package/templates/vertical_advertising/src/agents/media-planner.ts.tmpl +7 -0
- package/templates/vertical_advertising/src/agents/performance-analyst.ts.tmpl +7 -0
- package/templates/vertical_advertising/src/init.ts.tmpl +21 -0
- package/templates/vertical_agentics/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_agentics/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_agentics/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_agentics/.claude/skills/run-swarm/SKILL.md.tmpl +14 -0
- package/templates/vertical_agentics/CLAUDE.md.tmpl +32 -0
- package/templates/vertical_agentics/README.md.tmpl +30 -0
- package/templates/vertical_agentics/manifest.json +91 -0
- package/templates/vertical_agentics/package.json.tmpl +30 -0
- package/templates/vertical_agentics/src/agents/critic.ts.tmpl +7 -0
- package/templates/vertical_agentics/src/agents/orchestrator.ts.tmpl +7 -0
- package/templates/vertical_agentics/src/agents/planner.ts.tmpl +7 -0
- package/templates/vertical_agentics/src/agents/worker.ts.tmpl +7 -0
- package/templates/vertical_agentics/src/init.ts.tmpl +21 -0
- package/templates/vertical_ai/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_ai/.claude/settings.json.tmpl +35 -0
- package/templates/vertical_ai/.claude/skills/eval-report/SKILL.md.tmpl +13 -0
- package/templates/vertical_ai/CLAUDE.md.tmpl +31 -0
- package/templates/vertical_ai/README.md.tmpl +30 -0
- package/templates/vertical_ai/manifest.json +86 -0
- package/templates/vertical_ai/package.json.tmpl +30 -0
- package/templates/vertical_ai/src/agents/data-curator.ts.tmpl +7 -0
- package/templates/vertical_ai/src/agents/deployer.ts.tmpl +7 -0
- package/templates/vertical_ai/src/agents/evaluator.ts.tmpl +7 -0
- package/templates/vertical_ai/src/agents/trainer.ts.tmpl +7 -0
- package/templates/vertical_ai/src/init.ts.tmpl +21 -0
- package/templates/vertical_business/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_business/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_business/.claude/skills/quarterly-plan/SKILL.md.tmpl +13 -0
- package/templates/vertical_business/CLAUDE.md.tmpl +30 -0
- package/templates/vertical_business/README.md.tmpl +29 -0
- package/templates/vertical_business/manifest.json +81 -0
- package/templates/vertical_business/package.json.tmpl +30 -0
- package/templates/vertical_business/src/agents/analyst.ts.tmpl +7 -0
- package/templates/vertical_business/src/agents/ops-coordinator.ts.tmpl +7 -0
- package/templates/vertical_business/src/agents/strategist.ts.tmpl +7 -0
- package/templates/vertical_business/src/init.ts.tmpl +21 -0
- package/templates/vertical_coding/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_coding/.claude/commands/review-diff.md.tmpl +10 -0
- package/templates/vertical_coding/.claude/settings.json.tmpl +40 -0
- package/templates/vertical_coding/.claude/skills/plan-change/SKILL.md.tmpl +15 -0
- package/templates/vertical_coding/CLAUDE.md.tmpl +32 -0
- package/templates/vertical_coding/README.md.tmpl +30 -0
- package/templates/vertical_coding/manifest.json +91 -0
- package/templates/vertical_coding/package.json.tmpl +30 -0
- package/templates/vertical_coding/src/agents/architect.ts.tmpl +7 -0
- package/templates/vertical_coding/src/agents/implementer.ts.tmpl +7 -0
- package/templates/vertical_coding/src/agents/reviewer.ts.tmpl +7 -0
- package/templates/vertical_coding/src/agents/test-writer.ts.tmpl +7 -0
- package/templates/vertical_coding/src/init.ts.tmpl +21 -0
- package/templates/vertical_crm/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_crm/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_crm/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_crm/CLAUDE.md.tmpl +30 -0
- package/templates/vertical_crm/README.md.tmpl +29 -0
- package/templates/vertical_crm/manifest.json +81 -0
- package/templates/vertical_crm/package.json.tmpl +30 -0
- package/templates/vertical_crm/src/agents/account-manager.ts.tmpl +7 -0
- package/templates/vertical_crm/src/agents/churn-watcher.ts.tmpl +7 -0
- package/templates/vertical_crm/src/agents/lead-qualifier.ts.tmpl +7 -0
- package/templates/vertical_crm/src/init.ts.tmpl +21 -0
- package/templates/vertical_devops/.claude/settings.json.tmpl +36 -0
- package/templates/vertical_devops/CLAUDE.md.tmpl +34 -0
- package/templates/vertical_devops/README.md.tmpl +27 -0
- package/templates/vertical_devops/manifest.json +22 -0
- package/templates/vertical_devops/package.json.tmpl +26 -0
- package/templates/vertical_devops/runbooks/README.md.tmpl +32 -0
- package/templates/vertical_devops/src/agents/escalator.ts.tmpl +19 -0
- package/templates/vertical_devops/src/agents/postmortem.ts.tmpl +23 -0
- package/templates/vertical_devops/src/agents/responder.ts.tmpl +14 -0
- package/templates/vertical_devops/src/agents/runbook-runner.ts.tmpl +17 -0
- package/templates/vertical_devops/src/init.ts.tmpl +23 -0
- package/templates/vertical_education/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_education/.claude/commands/mastery-report.md.tmpl +12 -0
- package/templates/vertical_education/.claude/settings.json.tmpl +45 -0
- package/templates/vertical_education/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_education/.claude/skills/teach-next/SKILL.md.tmpl +16 -0
- package/templates/vertical_education/CLAUDE.md.tmpl +33 -0
- package/templates/vertical_education/README.md.tmpl +30 -0
- package/templates/vertical_education/manifest.json +96 -0
- package/templates/vertical_education/package.json.tmpl +30 -0
- package/templates/vertical_education/src/agents/explainer.ts.tmpl +7 -0
- package/templates/vertical_education/src/agents/grader.ts.tmpl +7 -0
- package/templates/vertical_education/src/agents/quiz-master.ts.tmpl +7 -0
- package/templates/vertical_education/src/agents/tutor.ts.tmpl +7 -0
- package/templates/vertical_education/src/init.ts.tmpl +21 -0
- package/templates/vertical_exotic/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_exotic/.claude/settings.json.tmpl +44 -0
- package/templates/vertical_exotic/.claude/skills/evolve/SKILL.md.tmpl +14 -0
- package/templates/vertical_exotic/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_exotic/CLAUDE.md.tmpl +31 -0
- package/templates/vertical_exotic/README.md.tmpl +29 -0
- package/templates/vertical_exotic/manifest.json +86 -0
- package/templates/vertical_exotic/package.json.tmpl +30 -0
- package/templates/vertical_exotic/src/agents/experimenter.ts.tmpl +7 -0
- package/templates/vertical_exotic/src/agents/federator.ts.tmpl +7 -0
- package/templates/vertical_exotic/src/agents/hypothesizer.ts.tmpl +7 -0
- package/templates/vertical_exotic/src/init.ts.tmpl +21 -0
- package/templates/vertical_gaming/.claude/commands/design-doc-diff.md.tmpl +13 -0
- package/templates/vertical_gaming/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_gaming/.claude/settings.json.tmpl +45 -0
- package/templates/vertical_gaming/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_gaming/.claude/skills/playtest-recap/SKILL.md.tmpl +16 -0
- package/templates/vertical_gaming/CLAUDE.md.tmpl +33 -0
- package/templates/vertical_gaming/README.md.tmpl +30 -0
- package/templates/vertical_gaming/manifest.json +96 -0
- package/templates/vertical_gaming/package.json.tmpl +30 -0
- package/templates/vertical_gaming/src/agents/balance-critic.ts.tmpl +7 -0
- package/templates/vertical_gaming/src/agents/economy-modeler.ts.tmpl +7 -0
- package/templates/vertical_gaming/src/agents/narrative-keeper.ts.tmpl +7 -0
- package/templates/vertical_gaming/src/agents/playtest-reader.ts.tmpl +7 -0
- package/templates/vertical_gaming/src/init.ts.tmpl +21 -0
- package/templates/vertical_health/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_health/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_health/.claude/skills/wellness-intake/SKILL.md.tmpl +15 -0
- package/templates/vertical_health/CLAUDE.md.tmpl +30 -0
- package/templates/vertical_health/README.md.tmpl +29 -0
- package/templates/vertical_health/manifest.json +81 -0
- package/templates/vertical_health/package.json.tmpl +30 -0
- package/templates/vertical_health/src/agents/care-coordinator.ts.tmpl +7 -0
- package/templates/vertical_health/src/agents/intake.ts.tmpl +7 -0
- package/templates/vertical_health/src/agents/triage.ts.tmpl +7 -0
- package/templates/vertical_health/src/init.ts.tmpl +21 -0
- package/templates/vertical_legal/.claude/settings.json.tmpl +10 -0
- package/templates/vertical_legal/CLAUDE.md.tmpl +24 -0
- package/templates/vertical_legal/README.md.tmpl +21 -0
- package/templates/vertical_legal/manifest.json +20 -0
- package/templates/vertical_legal/package.json.tmpl +13 -0
- package/templates/vertical_legal/src/agents/citation-checker.ts.tmpl +7 -0
- package/templates/vertical_legal/src/agents/redline.ts.tmpl +7 -0
- package/templates/vertical_legal/src/agents/risk-rater.ts.tmpl +8 -0
- package/templates/vertical_legal/src/init.ts.tmpl +13 -0
- package/templates/vertical_marketing/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_marketing/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_marketing/.claude/skills/campaign-brief/SKILL.md.tmpl +13 -0
- package/templates/vertical_marketing/CLAUDE.md.tmpl +30 -0
- package/templates/vertical_marketing/README.md.tmpl +29 -0
- package/templates/vertical_marketing/manifest.json +81 -0
- package/templates/vertical_marketing/package.json.tmpl +30 -0
- package/templates/vertical_marketing/src/agents/content-creator.ts.tmpl +7 -0
- package/templates/vertical_marketing/src/agents/seo-analyst.ts.tmpl +7 -0
- package/templates/vertical_marketing/src/agents/strategist.ts.tmpl +7 -0
- package/templates/vertical_marketing/src/init.ts.tmpl +21 -0
- package/templates/vertical_repo-maintainer/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_repo-maintainer/.claude/commands/release-check.md.tmpl +13 -0
- package/templates/vertical_repo-maintainer/.claude/commands/repo-triage.md.tmpl +16 -0
- package/templates/vertical_repo-maintainer/.claude/settings.json.tmpl +44 -0
- package/templates/vertical_repo-maintainer/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_repo-maintainer/.claude/skills/plan-change/SKILL.md.tmpl +15 -0
- package/templates/vertical_repo-maintainer/CLAUDE.md.tmpl +34 -0
- package/templates/vertical_repo-maintainer/README.md.tmpl +30 -0
- package/templates/vertical_repo-maintainer/manifest.json +101 -0
- package/templates/vertical_repo-maintainer/package.json.tmpl +30 -0
- package/templates/vertical_repo-maintainer/src/agents/benchmarker.ts.tmpl +7 -0
- package/templates/vertical_repo-maintainer/src/agents/maintainer.ts.tmpl +7 -0
- package/templates/vertical_repo-maintainer/src/agents/release.ts.tmpl +7 -0
- package/templates/vertical_repo-maintainer/src/agents/security.ts.tmpl +7 -0
- package/templates/vertical_repo-maintainer/src/init.ts.tmpl +21 -0
- package/templates/vertical_research/.claude/settings.json.tmpl +9 -0
- package/templates/vertical_research/CLAUDE.md.tmpl +33 -0
- package/templates/vertical_research/README.md.tmpl +17 -0
- package/templates/vertical_research/manifest.json +23 -0
- package/templates/vertical_research/package.json.tmpl +13 -0
- package/templates/vertical_research/src/agents/citer.ts.tmpl +8 -0
- package/templates/vertical_research/src/agents/fact-checker.ts.tmpl +8 -0
- package/templates/vertical_research/src/agents/scout.ts.tmpl +7 -0
- package/templates/vertical_research/src/agents/source-grader.ts.tmpl +10 -0
- package/templates/vertical_research/src/agents/synthesizer.ts.tmpl +8 -0
- package/templates/vertical_research/src/agents/web-searcher.ts.tmpl +6 -0
- package/templates/vertical_research/src/init.ts.tmpl +13 -0
- package/templates/vertical_ruview/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_ruview/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_ruview/.claude/skills/index-and-ask/SKILL.md.tmpl +15 -0
- package/templates/vertical_ruview/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_ruview/CLAUDE.md.tmpl +31 -0
- package/templates/vertical_ruview/README.md.tmpl +29 -0
- package/templates/vertical_ruview/manifest.json +86 -0
- package/templates/vertical_ruview/package.json.tmpl +30 -0
- package/templates/vertical_ruview/src/agents/indexer.ts.tmpl +7 -0
- package/templates/vertical_ruview/src/agents/retriever.ts.tmpl +7 -0
- package/templates/vertical_ruview/src/agents/reviewer.ts.tmpl +7 -0
- package/templates/vertical_ruview/src/init.ts.tmpl +21 -0
- package/templates/vertical_sales/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_sales/.claude/commands/pipeline-report.md.tmpl +13 -0
- package/templates/vertical_sales/.claude/settings.json.tmpl +45 -0
- package/templates/vertical_sales/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_sales/.claude/skills/qualify-lead/SKILL.md.tmpl +15 -0
- package/templates/vertical_sales/CLAUDE.md.tmpl +33 -0
- package/templates/vertical_sales/README.md.tmpl +30 -0
- package/templates/vertical_sales/manifest.json +96 -0
- package/templates/vertical_sales/package.json.tmpl +30 -0
- package/templates/vertical_sales/src/agents/closer.ts.tmpl +7 -0
- package/templates/vertical_sales/src/agents/demo-coach.ts.tmpl +7 -0
- package/templates/vertical_sales/src/agents/prospector.ts.tmpl +7 -0
- package/templates/vertical_sales/src/agents/qualifier.ts.tmpl +7 -0
- package/templates/vertical_sales/src/init.ts.tmpl +21 -0
- package/templates/vertical_support/.claude/settings.json.tmpl +25 -0
- package/templates/vertical_support/CLAUDE.md.tmpl +34 -0
- package/templates/vertical_support/README.md.tmpl +16 -0
- package/templates/vertical_support/kb/README.md.tmpl +23 -0
- package/templates/vertical_support/manifest.json +22 -0
- package/templates/vertical_support/package.json.tmpl +24 -0
- package/templates/vertical_support/src/agents/escalator.ts.tmpl +6 -0
- package/templates/vertical_support/src/agents/kb-searcher.ts.tmpl +6 -0
- package/templates/vertical_support/src/agents/responder.ts.tmpl +7 -0
- package/templates/vertical_support/src/agents/triager.ts.tmpl +6 -0
- package/templates/vertical_support/src/init.ts.tmpl +16 -0
- package/templates/vertical_trading/.claude/settings.json.tmpl +20 -0
- package/templates/vertical_trading/CLAUDE.md.tmpl +24 -0
- package/templates/vertical_trading/README.md.tmpl +17 -0
- package/templates/vertical_trading/manifest.json +22 -0
- package/templates/vertical_trading/package.json.tmpl +13 -0
- package/templates/vertical_trading/src/agents/executor.ts.tmpl +8 -0
- package/templates/vertical_trading/src/agents/market-watcher.ts.tmpl +7 -0
- package/templates/vertical_trading/src/agents/postmortem.ts.tmpl +8 -0
- package/templates/vertical_trading/src/agents/risk-checker.ts.tmpl +11 -0
- package/templates/vertical_trading/src/agents/signal-gen.ts.tmpl +8 -0
- package/templates/vertical_trading/src/init.ts.tmpl +20 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Content Creator agent — Writes on-brand content for the channel.
|
|
3
|
+
|
|
4
|
+
export const SYSTEM_PROMPT = `You write content to the strategist's brief, in the brand voice, shaped for the channel (a thread is not a blog post). Lead with the hook, earn the scroll, end with one clear call to action. No filler, no clichés. You operate inside the {{name}} harness; defer destructive actions to the user.`;
|
|
5
|
+
|
|
6
|
+
export const NAME = 'content-creator';
|
|
7
|
+
export const TIER = 'sonnet' as const;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// SEO Analyst agent — Grounds content in real search demand.
|
|
3
|
+
|
|
4
|
+
export const SYSTEM_PROMPT = `You ground content in search demand from the analytics MCP: the queries real people use, the intent behind them, and the gap competitors leave. Recommend the target query, the title, and the internal links. Optimise for the human first and the crawler second. You operate inside the {{name}} harness; defer destructive actions to the user.`;
|
|
5
|
+
|
|
6
|
+
export const NAME = 'seo-analyst';
|
|
7
|
+
export const TIER = 'sonnet' as const;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Strategist agent — Sets the audience, message, and channel.
|
|
3
|
+
|
|
4
|
+
export const SYSTEM_PROMPT = `You set marketing strategy: the specific audience, the one message that lands with them, and the channels where they actually are. Tie the plan to a funnel metric. Reject vague "raise awareness" goals — name the action you want and how you'll measure it. You operate inside the {{name}} harness; defer destructive actions to the user.`;
|
|
5
|
+
|
|
6
|
+
export const NAME = 'strategist';
|
|
7
|
+
export const TIER = 'opus' as const;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Generated by create-agent-harness — your harness's `{{name}} init` entry.
|
|
3
|
+
|
|
4
|
+
import { loadKernel } from '@ruflo/kernel';
|
|
5
|
+
import adapter from '@ruflo/host-{{host}}';
|
|
6
|
+
|
|
7
|
+
const HARNESS_NAME = '{{name}}';
|
|
8
|
+
|
|
9
|
+
async function main(): Promise<number> {
|
|
10
|
+
const kernel = await loadKernel();
|
|
11
|
+
const info = kernel.kernelInfo();
|
|
12
|
+
console.log(`${HARNESS_NAME} — kernel ${info.version} (${kernel.backend})`);
|
|
13
|
+
console.log(`Host adapter: ${adapter.name}`);
|
|
14
|
+
console.log(`Run \`${HARNESS_NAME} doctor\` to verify the install.`);
|
|
15
|
+
return 0;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
main().then(c => process.exit(c)).catch(err => {
|
|
19
|
+
console.error(err);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Health-check the harness: kernel load, MCP wiring, memory backend, host adapter."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Run a full health check and print a PASS/FAIL table.
|
|
6
|
+
|
|
7
|
+
1. Kernel loads and `kernelInfo().version` matches package.json.
|
|
8
|
+
2. The MCP server starts and lists its tools.
|
|
9
|
+
3. The memory backend is reachable.
|
|
10
|
+
4. The configured host adapter is present.
|
|
11
|
+
|
|
12
|
+
Exit non-zero if any check fails.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run the release-readiness umbrella + draft a tweet-length announcement.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Run the release-readiness check.
|
|
6
|
+
|
|
7
|
+
1. `harness validate` — umbrella check, must be green.
|
|
8
|
+
2. `harness sbom` — emit the SBOM artifact.
|
|
9
|
+
3. `harness score` — the scorecard must be >= 70 (B grade).
|
|
10
|
+
4. If any gate is red, REFUSE to draft and name the specific blocker.
|
|
11
|
+
5. Otherwise: draft the GitHub release body from the conventional-commit log since the last tag, grouped by feat/fix/docs/chore.
|
|
12
|
+
|
|
13
|
+
Never push or tag in this command; the operator decides when to ship.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Maintainer triage: what changed, what is risky, what to review first."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Triage the current repo state.
|
|
6
|
+
|
|
7
|
+
1. `git status` to see what is uncommitted.
|
|
8
|
+
2. `git log --oneline -20` to see the recent history.
|
|
9
|
+
3. `git diff HEAD~1` for the latest commit.
|
|
10
|
+
4. Report:
|
|
11
|
+
- headline risk
|
|
12
|
+
- files most likely to regress
|
|
13
|
+
- smallest test the team should run before merging
|
|
14
|
+
- any permissions widened in the diff
|
|
15
|
+
|
|
16
|
+
Do not auto-fix; surface findings only.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(npx {{name}}*)",
|
|
5
|
+
"mcp__{{name}}__*",
|
|
6
|
+
"mcp__code_index__*",
|
|
7
|
+
"Bash(npm test*)",
|
|
8
|
+
"Bash(npm run*)",
|
|
9
|
+
"Bash(git diff*)",
|
|
10
|
+
"Bash(git status*)",
|
|
11
|
+
"Bash(git log*)",
|
|
12
|
+
"Bash(git show*)",
|
|
13
|
+
"Bash(cargo bench*)",
|
|
14
|
+
"Bash(cargo test*)"
|
|
15
|
+
],
|
|
16
|
+
"deny": [
|
|
17
|
+
"Read(./.env)",
|
|
18
|
+
"Read(./.env.*)",
|
|
19
|
+
"Bash(git push*)",
|
|
20
|
+
"Bash(rm -rf*)",
|
|
21
|
+
"Bash(npm publish*)"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"mcpServers": {
|
|
25
|
+
"{{name}}": {
|
|
26
|
+
"command": "npx",
|
|
27
|
+
"args": [
|
|
28
|
+
"-y",
|
|
29
|
+
"{{name}}@latest",
|
|
30
|
+
"mcp",
|
|
31
|
+
"start"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"code_index": {
|
|
35
|
+
"command": "npx",
|
|
36
|
+
"args": [
|
|
37
|
+
"-y",
|
|
38
|
+
"{{name}}@latest",
|
|
39
|
+
"mcp",
|
|
40
|
+
"index"
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: memory-inspect
|
|
3
|
+
description: Search and inspect the harness memory namespace (HNSW + emergent-time decay).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# memory-inspect
|
|
7
|
+
|
|
8
|
+
Inspect what the harness has learned.
|
|
9
|
+
|
|
10
|
+
- `search <query>` — semantic nearest-neighbour over the namespace
|
|
11
|
+
- `list` — recent patterns with decay weight
|
|
12
|
+
- `forget <id>` — evict a pattern
|
|
13
|
+
|
|
14
|
+
Use this before planning so the harness reuses prior trajectories instead of starting cold.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan-change
|
|
3
|
+
description: "Turn a feature request into a minimal, file-level implementation plan before any code."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# plan-change
|
|
7
|
+
|
|
8
|
+
Produce an implementation plan for a requested change.
|
|
9
|
+
|
|
10
|
+
1. Restate the goal in one sentence.
|
|
11
|
+
2. List the files to touch and why.
|
|
12
|
+
3. Name the smallest interface that satisfies it.
|
|
13
|
+
4. Flag anything that ripples beyond three files or widens a permission.
|
|
14
|
+
|
|
15
|
+
Hand the plan to the implementer; do not write code in this step.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# {{name}}
|
|
2
|
+
|
|
3
|
+
{{description}}
|
|
4
|
+
|
|
5
|
+
> Repo Maintainer harness · domain: `engineering/repo-maintenance`. Generated with [create-agent-harness](https://github.com/ruvnet/agent-harness-generator).
|
|
6
|
+
|
|
7
|
+
## Behavioral rules
|
|
8
|
+
|
|
9
|
+
- Use the harness's MCP tools (`mcp__{{name}}__*`) for orchestration
|
|
10
|
+
- Memory and routing are handled by the kernel — you don't need to learn them
|
|
11
|
+
- Defer destructive operations to the user
|
|
12
|
+
|
|
13
|
+
## Agents
|
|
14
|
+
|
|
15
|
+
| Agent | Tier | Role |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| `maintainer` | opus | Triages the repo state — what changed, what is risky, what to review first. |
|
|
18
|
+
| `benchmarker` | sonnet | Runs the perf gates and reports regressions. |
|
|
19
|
+
| `release` | opus | Drafts the GitHub release body + runs the readiness gates. |
|
|
20
|
+
| `security` | opus | Flags risky MCP grants, leaked secrets, dangerous diffs. |
|
|
21
|
+
## Skills
|
|
22
|
+
|
|
23
|
+
- `/memory-inspect` — Search and inspect the harness memory namespace (HNSW + emergent-time decay).
|
|
24
|
+
- `/plan-change` — Turn a feature request into a minimal, file-level implementation plan before any code.
|
|
25
|
+
|
|
26
|
+
## Commands
|
|
27
|
+
|
|
28
|
+
- `doctor` — Health-check the harness: kernel load, MCP wiring, memory backend, host adapter.
|
|
29
|
+
- `repo-triage` — Maintainer triage: what changed, what is risky, what to review first.
|
|
30
|
+
- `release-check` — Run the release-readiness umbrella + draft a tweet-length announcement.
|
|
31
|
+
|
|
32
|
+
## Architecture
|
|
33
|
+
|
|
34
|
+
This harness uses [@ruflo/kernel](https://www.npmjs.com/package/@ruflo/kernel) — a Rust-compiled WASM module with a NAPI-RS native fallback — so the same code runs identically on every platform.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# {{name}}
|
|
2
|
+
|
|
3
|
+
{{description}}
|
|
4
|
+
|
|
5
|
+
> **Repo Maintainer** — Maintainer triages the diff → benchmarker reports regressions → release drafts the GH release body → security flags risky MCP grants. Drop into any repo and run.
|
|
6
|
+
>
|
|
7
|
+
> Generated with [`create-agent-harness`](https://github.com/ruvnet/agent-harness-generator). WASM kernel, multi-host support, witness-signed releases.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g {{name}}
|
|
13
|
+
{{name}} init
|
|
14
|
+
{{name}} doctor
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Agents
|
|
18
|
+
|
|
19
|
+
| Agent | Role |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `maintainer` | Triages the repo state — what changed, what is risky, what to review first. |
|
|
22
|
+
| `benchmarker` | Runs the perf gates and reports regressions. |
|
|
23
|
+
| `release` | Drafts the GitHub release body + runs the readiness gates. |
|
|
24
|
+
| `security` | Flags risky MCP grants, leaked secrets, dangerous diffs. |
|
|
25
|
+
|
|
26
|
+
This harness ships with the **{{host}}** adapter.
|
|
27
|
+
|
|
28
|
+
## License
|
|
29
|
+
|
|
30
|
+
MIT
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "vertical:repo-maintainer",
|
|
3
|
+
"description": "A maintenance pod for an existing repo — maintainer, benchmarker, release, security agents. The \"this repo ships with its own agent\" demo.",
|
|
4
|
+
"domain": "engineering/repo-maintenance",
|
|
5
|
+
"category": "Engineering",
|
|
6
|
+
"files": [
|
|
7
|
+
{
|
|
8
|
+
"src": "package.json.tmpl",
|
|
9
|
+
"dst": "package.json",
|
|
10
|
+
"render": true
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"src": "CLAUDE.md.tmpl",
|
|
14
|
+
"dst": "CLAUDE.md",
|
|
15
|
+
"render": true
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"src": "README.md.tmpl",
|
|
19
|
+
"dst": "README.md",
|
|
20
|
+
"render": true
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"src": ".claude/settings.json.tmpl",
|
|
24
|
+
"dst": ".claude/settings.json",
|
|
25
|
+
"render": true
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"src": "src/init.ts.tmpl",
|
|
29
|
+
"dst": "src/init.ts",
|
|
30
|
+
"render": true
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"src": "src/agents/maintainer.ts.tmpl",
|
|
34
|
+
"dst": "src/agents/maintainer.ts",
|
|
35
|
+
"render": true
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"src": "src/agents/benchmarker.ts.tmpl",
|
|
39
|
+
"dst": "src/agents/benchmarker.ts",
|
|
40
|
+
"render": true
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"src": "src/agents/release.ts.tmpl",
|
|
44
|
+
"dst": "src/agents/release.ts",
|
|
45
|
+
"render": true
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"src": "src/agents/security.ts.tmpl",
|
|
49
|
+
"dst": "src/agents/security.ts",
|
|
50
|
+
"render": true
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"src": ".claude/skills/memory-inspect/SKILL.md.tmpl",
|
|
54
|
+
"dst": ".claude/skills/memory-inspect/SKILL.md",
|
|
55
|
+
"render": true
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"src": ".claude/skills/plan-change/SKILL.md.tmpl",
|
|
59
|
+
"dst": ".claude/skills/plan-change/SKILL.md",
|
|
60
|
+
"render": true
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"src": ".claude/commands/doctor.md.tmpl",
|
|
64
|
+
"dst": ".claude/commands/doctor.md",
|
|
65
|
+
"render": true
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"src": ".claude/commands/repo-triage.md.tmpl",
|
|
69
|
+
"dst": ".claude/commands/repo-triage.md",
|
|
70
|
+
"render": true
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"src": ".claude/commands/release-check.md.tmpl",
|
|
74
|
+
"dst": ".claude/commands/release-check.md",
|
|
75
|
+
"render": true
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"vars": [
|
|
79
|
+
{
|
|
80
|
+
"name": "name",
|
|
81
|
+
"prompt": "Harness name (kebab-case)",
|
|
82
|
+
"validate": "^[a-z0-9-]+$"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "description",
|
|
86
|
+
"prompt": "One-line description",
|
|
87
|
+
"default": "Maintain an existing repo: triage what changed, benchmark, release-check, security-flag"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"name": "host",
|
|
91
|
+
"prompt": "Host adapter",
|
|
92
|
+
"default": "claude-code",
|
|
93
|
+
"choices": [
|
|
94
|
+
"claude-code",
|
|
95
|
+
"codex",
|
|
96
|
+
"pi-dev",
|
|
97
|
+
"hermes"
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{name}}",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "{{description}}",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"{{name}}": "./bin/{{name}}.js"
|
|
8
|
+
},
|
|
9
|
+
"files": ["bin/**", "dist/**", ".claude/**", "CLAUDE.md", "README.md", "LICENSE"],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"test": "vitest run --passWithNoTests",
|
|
13
|
+
"init": "node ./dist/init.js"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@ruflo/kernel": "^0.1.0",
|
|
17
|
+
"@ruflo/host-{{host}}": "^0.1.0"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@types/node": "^20.0.0",
|
|
21
|
+
"typescript": "^5.4.0",
|
|
22
|
+
"vitest": "^2.0.0"
|
|
23
|
+
},
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=20.0.0"
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Benchmarker agent — Runs the perf gates and reports regressions.
|
|
3
|
+
|
|
4
|
+
export const SYSTEM_PROMPT = `You run the project's declared benchmark suite (cargo bench, npm run bench, or whatever the manifest names) and compare against the baseline. Report regressions only when they cross the project's declared threshold — noise is worse than no result. Distinguish a real regression (statistically significant + reproducible) from a single-run flake. Write the result to memory so the maintainer can quote it. You operate inside the {{name}} harness; defer destructive actions to the user.`;
|
|
5
|
+
|
|
6
|
+
export const NAME = 'benchmarker';
|
|
7
|
+
export const TIER = 'sonnet' as const;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Maintainer agent — Triages the repo state — what changed, what is risky, what to review first.
|
|
3
|
+
|
|
4
|
+
export const SYSTEM_PROMPT = `You are the repo maintainer. When asked "what changed?" you read git diff / git log / git status and produce a one-screen triage: the headline risk, the files most likely to regress, and the smallest test the team should run before merging. You never push, never publish, never auto-fix — your job is to surface, not to act. When uncertain you say "I can't tell from the diff alone" and ask for the specific file or commit you need. You operate inside the {{name}} harness; defer destructive actions to the user.`;
|
|
5
|
+
|
|
6
|
+
export const NAME = 'maintainer';
|
|
7
|
+
export const TIER = 'opus' as const;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Release agent — Drafts the GitHub release body + runs the readiness gates.
|
|
3
|
+
|
|
4
|
+
export const SYSTEM_PROMPT = `You draft a release. Read the conventional-commit log since the last tag, group commits by feat/fix/docs/chore, and write a release body that an outside reader could understand without the repo open. Before drafting you confirm the release-readiness gates have passed (validate / sbom / witness / score). If any gate is red you refuse to draft and name the specific blocker. The release is a public commitment; you treat it like one. You operate inside the {{name}} harness; defer destructive actions to the user.`;
|
|
5
|
+
|
|
6
|
+
export const NAME = 'release';
|
|
7
|
+
export const TIER = 'opus' as const;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Security agent — Flags risky MCP grants, leaked secrets, dangerous diffs.
|
|
3
|
+
|
|
4
|
+
export const SYSTEM_PROMPT = `You scan the harness for the security regressions that matter: MCP grants that widened (Bash(rm:*), shell on, network on, file-write on), .env or token strings that escaped the redaction set, dependency updates that pulled in CVEs, and policy files that drifted from default-deny. Report each finding with a file:line, a severity (HIGH / MEDIUM), and the smallest fix. Never approve a change that widens a permission without a written reason in the PR description. You operate inside the {{name}} harness; defer destructive actions to the user.`;
|
|
5
|
+
|
|
6
|
+
export const NAME = 'security';
|
|
7
|
+
export const TIER = 'opus' as const;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Generated by create-agent-harness — your harness's `{{name}} init` entry.
|
|
3
|
+
|
|
4
|
+
import { loadKernel } from '@ruflo/kernel';
|
|
5
|
+
import adapter from '@ruflo/host-{{host}}';
|
|
6
|
+
|
|
7
|
+
const HARNESS_NAME = '{{name}}';
|
|
8
|
+
|
|
9
|
+
async function main(): Promise<number> {
|
|
10
|
+
const kernel = await loadKernel();
|
|
11
|
+
const info = kernel.kernelInfo();
|
|
12
|
+
console.log(`${HARNESS_NAME} — kernel ${info.version} (${kernel.backend})`);
|
|
13
|
+
console.log(`Host adapter: ${adapter.name}`);
|
|
14
|
+
console.log(`Run \`${HARNESS_NAME} doctor\` to verify the install.`);
|
|
15
|
+
return 0;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
main().then(c => process.exit(c)).catch(err => {
|
|
19
|
+
console.error(err);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": ["Bash(npx {{name}}*)", "mcp__{{name}}__*", "WebFetch"],
|
|
4
|
+
"deny": ["Bash(rm *)", "Read(./.env)", "Read(./.env.*)"]
|
|
5
|
+
},
|
|
6
|
+
"mcpServers": {
|
|
7
|
+
"{{name}}": { "command": "npx", "args": ["-y", "{{name}}@latest", "mcp", "start"] }
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# {{name}}
|
|
2
|
+
|
|
3
|
+
{{description}}
|
|
4
|
+
|
|
5
|
+
## Pipeline
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
scout -> web-searcher -> source-grader -> synthesizer -> fact-checker -> citer
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Each agent only sees the OUTPUT of the previous one, not the raw inputs. This forces information to flow through grading + verification gates.
|
|
12
|
+
|
|
13
|
+
## Agents
|
|
14
|
+
|
|
15
|
+
| Agent | Role | Tier |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| `scout` | Decompose the research question into subqueries | Sonnet |
|
|
18
|
+
| `web-searcher` | Run subqueries via WebSearch MCP, collect raw hits | Haiku |
|
|
19
|
+
| `source-grader` | Grade each source A/B/C/D by authority + freshness + relevance | Sonnet |
|
|
20
|
+
| `synthesizer` | Synthesise findings from grade A/B sources only | Sonnet |
|
|
21
|
+
| `fact-checker` | Adversarially verify each claim in the synthesis | Sonnet |
|
|
22
|
+
| `citer` | Final pass: every claim must cite a graded source | Sonnet |
|
|
23
|
+
|
|
24
|
+
## Evidence grading rubric
|
|
25
|
+
|
|
26
|
+
- **A**: Primary source (paper, official doc), <2 years old, on-topic
|
|
27
|
+
- **B**: Reputable secondary source (major outlet, expert blog), <5 years
|
|
28
|
+
- **C**: Tertiary source (Wikipedia, summary article) — informational only
|
|
29
|
+
- **D**: Discarded (forum, unsourced claim, broken link)
|
|
30
|
+
|
|
31
|
+
## Output
|
|
32
|
+
|
|
33
|
+
A dossier markdown: TL;DR + body (every claim cited) + bibliography with grades.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# {{name}}
|
|
2
|
+
|
|
3
|
+
{{description}}
|
|
4
|
+
|
|
5
|
+
> Generated with [`create-agent-harness`](https://github.com/ruvnet/agent-harness-generator) — `vertical:research` template.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g {{name}}
|
|
11
|
+
{{name}} init
|
|
12
|
+
{{name}} dossier "your research question"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## License
|
|
16
|
+
|
|
17
|
+
MIT
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "vertical:research",
|
|
3
|
+
"description": "Research dossier harness — 6 agents (scout, web-searcher, source-grader, synthesizer, fact-checker, citer), evidence-graded multi-source synthesis",
|
|
4
|
+
"domain": "research/multi-source-dossier",
|
|
5
|
+
"files": [
|
|
6
|
+
{ "src": "package.json.tmpl", "dst": "package.json", "render": true },
|
|
7
|
+
{ "src": "CLAUDE.md.tmpl", "dst": "CLAUDE.md", "render": true },
|
|
8
|
+
{ "src": "README.md.tmpl", "dst": "README.md", "render": true },
|
|
9
|
+
{ "src": ".claude/settings.json.tmpl", "dst": ".claude/settings.json", "render": true },
|
|
10
|
+
{ "src": "src/init.ts.tmpl", "dst": "src/init.ts", "render": true },
|
|
11
|
+
{ "src": "src/agents/scout.ts.tmpl", "dst": "src/agents/scout.ts", "render": true },
|
|
12
|
+
{ "src": "src/agents/web-searcher.ts.tmpl", "dst": "src/agents/web-searcher.ts", "render": true },
|
|
13
|
+
{ "src": "src/agents/source-grader.ts.tmpl", "dst": "src/agents/source-grader.ts", "render": true },
|
|
14
|
+
{ "src": "src/agents/synthesizer.ts.tmpl", "dst": "src/agents/synthesizer.ts", "render": true },
|
|
15
|
+
{ "src": "src/agents/fact-checker.ts.tmpl", "dst": "src/agents/fact-checker.ts", "render": true },
|
|
16
|
+
{ "src": "src/agents/citer.ts.tmpl", "dst": "src/agents/citer.ts", "render": true }
|
|
17
|
+
],
|
|
18
|
+
"vars": [
|
|
19
|
+
{ "name": "name", "prompt": "Harness name (kebab-case)", "validate": "^[a-z0-9-]+$" },
|
|
20
|
+
{ "name": "description", "prompt": "One-line description", "default": "Multi-source research with evidence grading" },
|
|
21
|
+
{ "name": "host", "prompt": "Host adapter", "default": "claude-code", "choices": ["claude-code", "codex", "pi-dev", "hermes"] }
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{name}}",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "{{description}}",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": { "{{name}}": "./bin/{{name}}.js" },
|
|
7
|
+
"files": ["bin/**", "dist/**", ".claude/**", "CLAUDE.md", "README.md", "LICENSE"],
|
|
8
|
+
"scripts": { "build": "tsc", "test": "vitest run --passWithNoTests", "init": "node ./dist/init.js" },
|
|
9
|
+
"dependencies": { "@ruflo/kernel": "^0.1.0", "@ruflo/host-{{host}}": "^0.1.0" },
|
|
10
|
+
"devDependencies": { "@types/node": "^20.0.0", "typescript": "^5.4.0", "vitest": "^2.0.0" },
|
|
11
|
+
"keywords": ["research", "dossier", "fact-checking", "agent-harness"],
|
|
12
|
+
"engines": { "node": ">=20.0.0" }
|
|
13
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
export const SYSTEM_PROMPT = `You are the citer for {{name}}.
|
|
3
|
+
Final pass over the verified synthesis. Add inline citations [1][2] to
|
|
4
|
+
every claim. Build the bibliography with grade tags: [A], [B], [C].
|
|
5
|
+
Render the final dossier markdown: TL;DR + body + bibliography. The
|
|
6
|
+
dossier must NOT contain any claim without a citation.`;
|
|
7
|
+
export const NAME = 'citer';
|
|
8
|
+
export const TIER = 'sonnet' as const;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
export const SYSTEM_PROMPT = `You are the fact-checker for {{name}}.
|
|
3
|
+
Adversarially verify each claim in the synthesis: is it supported by at
|
|
4
|
+
least one grade A or two grade B sources? Flag CONFIRMED, DISPUTED,
|
|
5
|
+
UNSUPPORTED. Strip UNSUPPORTED claims from the dossier. Output: pruned
|
|
6
|
+
synthesis + verification log.`;
|
|
7
|
+
export const NAME = 'fact-checker';
|
|
8
|
+
export const TIER = 'sonnet' as const;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
export const SYSTEM_PROMPT = `You are the scout for {{name}}.
|
|
3
|
+
Decompose the research question into 3-7 specific subqueries. Each subquery
|
|
4
|
+
must be standalone (no shared context required), web-searchable, and
|
|
5
|
+
non-overlapping. Output: a JSON list of strings.`;
|
|
6
|
+
export const NAME = 'scout';
|
|
7
|
+
export const TIER = 'sonnet' as const;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
export const SYSTEM_PROMPT = `You are the source grader for {{name}}.
|
|
3
|
+
For each search hit, fetch the URL (via WebFetch) and assign a grade:
|
|
4
|
+
A = primary source (paper, official doc), <2y, on-topic
|
|
5
|
+
B = reputable secondary (major outlet, expert blog), <5y
|
|
6
|
+
C = tertiary (Wikipedia, summary)
|
|
7
|
+
D = discard (forum, unsourced, broken)
|
|
8
|
+
Output: enriched hits with {grade, reason, key_facts[]}.`;
|
|
9
|
+
export const NAME = 'source-grader';
|
|
10
|
+
export const TIER = 'sonnet' as const;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
export const SYSTEM_PROMPT = `You are the synthesizer for {{name}}.
|
|
3
|
+
Use ONLY grade A and B sources from source-grader's output. Synthesise
|
|
4
|
+
findings into a coherent narrative. Every claim must be traceable to one
|
|
5
|
+
or more sources. Flag contradictions explicitly. Do NOT cite yet — citer
|
|
6
|
+
does that.`;
|
|
7
|
+
export const NAME = 'synthesizer';
|
|
8
|
+
export const TIER = 'sonnet' as const;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
export const SYSTEM_PROMPT = `You are the web searcher for {{name}}.
|
|
3
|
+
For each subquery, run a web search via WebFetch / WebSearch. Collect raw
|
|
4
|
+
hits — do NOT filter or summarise. Output per subquery: list of {url, title, snippet}.`;
|
|
5
|
+
export const NAME = 'web-searcher';
|
|
6
|
+
export const TIER = 'haiku' as const;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
import { loadKernel } from '@ruflo/kernel';
|
|
3
|
+
import adapter from '@ruflo/host-{{host}}';
|
|
4
|
+
const HARNESS_NAME = '{{name}}';
|
|
5
|
+
async function main(): Promise<number> {
|
|
6
|
+
const kernel = await loadKernel();
|
|
7
|
+
const info = kernel.kernelInfo();
|
|
8
|
+
console.log(`${HARNESS_NAME} — research dossier harness`);
|
|
9
|
+
console.log(`Kernel ${info.version} (${kernel.backend}), host: ${adapter.name}`);
|
|
10
|
+
console.log('Use `' + HARNESS_NAME + ' dossier "<question>"` to start a research run.');
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
main().then(c => process.exit(c)).catch(err => { console.error(err); process.exit(1); });
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Health-check the harness: kernel load, MCP wiring, memory backend, host adapter."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Run a full health check and print a PASS/FAIL table.
|
|
6
|
+
|
|
7
|
+
1. Kernel loads and `kernelInfo().version` matches package.json.
|
|
8
|
+
2. The MCP server starts and lists its tools.
|
|
9
|
+
3. The memory backend is reachable.
|
|
10
|
+
4. The configured host adapter is present.
|
|
11
|
+
|
|
12
|
+
Exit non-zero if any check fails.
|