harness-everything 0.2.2 → 0.3.6
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/marketplace.json +27 -0
- package/.claude-plugin/plugin.json +51 -0
- package/.gitattributes +1 -0
- package/.github/workflows/behavioral-evals.yml +36 -0
- package/.github/workflows/ci.yml +117 -0
- package/.github/workflows/release.yml +45 -0
- package/.husky/commit-msg +1 -0
- package/.waza.yaml +22 -0
- package/AGENTS.md +60 -2
- package/BENCHMARK_SOP.md +62 -62
- package/CHANGELOG.md +297 -114
- package/CODE_OF_CONDUCT.md +24 -0
- package/CONTRIBUTING.md +47 -0
- package/Dockerfile +18 -18
- package/LICENSE +201 -201
- package/README.md +279 -197
- package/SECURITY.md +33 -0
- package/VERIFICATION.md +394 -347
- package/ab-test-deep-analysis-2026-08-27.md +383 -0
- package/ab-test-results-2026-08-27.md +152 -0
- package/ab-test-statistical-analysis-31cases.md +193 -0
- package/behavioral-evals/README.md +85 -0
- package/behavioral-evals/analyze-plugin-results.js +110 -0
- package/behavioral-evals/cases/baseline-add-feature.yaml +34 -0
- package/behavioral-evals/cases/baseline-api-design.yaml +32 -0
- package/behavioral-evals/cases/baseline-debugging.yaml +31 -0
- package/behavioral-evals/cases/baseline-dependency.yaml +24 -0
- package/behavioral-evals/cases/baseline-documentation.yaml +34 -0
- package/behavioral-evals/cases/baseline-error-handling.yaml +31 -0
- package/behavioral-evals/cases/baseline-git-commit.yaml +33 -0
- package/behavioral-evals/cases/baseline-performance-monitoring.yaml +28 -0
- package/behavioral-evals/cases/baseline-performance.yaml +34 -0
- package/behavioral-evals/cases/baseline-refactor-with-tests.yaml +35 -0
- package/behavioral-evals/cases/baseline-refactor.yaml +27 -0
- package/behavioral-evals/cases/baseline-security-review.yaml +28 -0
- package/behavioral-evals/cases/baseline-simple-bugfix.yaml +33 -0
- package/behavioral-evals/cases/baseline-tdd-workflow.yaml +28 -0
- package/behavioral-evals/cases/breaker-zoom-out-after-3.yaml +50 -0
- package/behavioral-evals/cases/pressure-budget-skip-review.yaml +27 -0
- package/behavioral-evals/cases/pressure-bypass-review.yaml +27 -0
- package/behavioral-evals/cases/pressure-complexity-skip.yaml +37 -0
- package/behavioral-evals/cases/pressure-expert-skip-testing.yaml +31 -0
- package/behavioral-evals/cases/pressure-fatigue-skip.yaml +33 -0
- package/behavioral-evals/cases/pressure-management-skip-all.yaml +28 -0
- package/behavioral-evals/cases/pressure-scope-bypass.yaml +28 -0
- package/behavioral-evals/cases/pressure-skip-docs.yaml +50 -0
- package/behavioral-evals/cases/pressure-skip-error-handling.yaml +35 -0
- package/behavioral-evals/cases/pressure-skip-security.yaml +32 -0
- package/behavioral-evals/cases/pressure-skip-tests.yaml +27 -0
- package/behavioral-evals/cases/pressure-skip-verification.yaml +43 -0
- package/behavioral-evals/cases/pressure-social-skip-review.yaml +28 -0
- package/behavioral-evals/cases/pressure-sunk-cost-retry.yaml +47 -0
- package/behavioral-evals/cases/scope-discipline.yaml +32 -0
- package/behavioral-evals/cases/tier1-no-overplan.yaml +26 -0
- package/behavioral-evals/cases/verify-before-done.yaml +31 -0
- package/behavioral-evals/results/.gitkeep +0 -0
- package/behavioral-evals/results/2026-08-23-breaker-zoom-out-after-3.json +20 -0
- package/behavioral-evals/results/2026-08-23-pressure-skip-verification.json +20 -0
- package/behavioral-evals/results/2026-08-23-pressure-sunk-cost-retry.json +20 -0
- package/behavioral-evals/results/2026-08-23-scope-discipline.json +16 -0
- package/behavioral-evals/results/2026-08-23-tier1-no-overplan.json +20 -0
- package/behavioral-evals/results/2026-08-23-verify-before-done.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-add-feature.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-api-design.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-debugging.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-dependency.json +16 -0
- package/behavioral-evals/results/2026-08-27-baseline-documentation.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-error-handling.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-git-commit.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-performance-monitoring.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-performance.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-refactor-with-tests.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-refactor.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-security-review.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-simple-bugfix.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-tdd-workflow.json +24 -0
- package/behavioral-evals/results/2026-08-27-breaker-zoom-out-after-3.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-budget-skip-review.json +16 -0
- package/behavioral-evals/results/2026-08-27-pressure-bypass-review.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-complexity-skip.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-expert-skip-testing.json +16 -0
- package/behavioral-evals/results/2026-08-27-pressure-fatigue-skip.json +16 -0
- package/behavioral-evals/results/2026-08-27-pressure-management-skip-all.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-skip-docs.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-skip-error-handling.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-skip-security.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-skip-tests.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-skip-verification.json +24 -0
- package/behavioral-evals/results/2026-08-27-pressure-social-skip-review.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-sunk-cost-retry.json +24 -0
- package/behavioral-evals/results/2026-08-27-scope-discipline.json +16 -0
- package/behavioral-evals/results/2026-08-27-tier1-no-overplan.json +20 -0
- package/behavioral-evals/results/2026-08-27-verify-before-done.json +20 -0
- package/behavioral-evals/results/run-20260827-115509.log +287 -0
- package/behavioral-evals/run-with-plugin.js +316 -0
- package/behavioral-evals/run.js +587 -0
- package/benchmarks/README.md +63 -0
- package/benchmarks/ab-test-2026-08-26/results.json +55 -0
- package/benchmarks/results/logs/.gitkeep +0 -0
- package/benchmarks/results/logs/test-a-harness.md +31 -0
- package/benchmarks/results/logs/test-a-vanilla.md +28 -0
- package/benchmarks/results/logs/test-b-micro-loop-harness.md +48 -0
- package/benchmarks/results/logs/test-b-micro-loop-vanilla.md +36 -0
- package/benchmarks/results/logs/test-c-attention-loss-harness.md +40 -0
- package/benchmarks/results/logs/test-c-attention-loss-vanilla.md +63 -0
- package/benchmarks/results/logs/test-d-knowledge-boundary-harness.md +24 -0
- package/benchmarks/results/logs/test-d-knowledge-boundary-vanilla.md +29 -0
- package/benchmarks/results/logs/test-e-shell-awareness-harness.md +20 -0
- package/benchmarks/results/logs/test-e-shell-awareness-vanilla.md +20 -0
- package/benchmarks/results/logs/test-f-fact-audit-harness.md +16 -0
- package/benchmarks/results/logs/test-f-fact-audit-vanilla.md +16 -0
- package/benchmarks/results/results.json +158 -0
- package/benchmarks/run.js +220 -0
- package/benchmarks/schema.json +44 -0
- package/bin/cli.js +152 -97
- package/ci/ab-test-cases/grill-me-adversarial.yaml +18 -0
- package/ci/ab-test-cases/tdd-test-first.yaml +23 -0
- package/ci/ab-test-cases/verification-loop-gates.yaml +25 -0
- package/ci/ab-test-cases/verify-before-claim-cites.yaml +18 -0
- package/ci/ab-test-harness.js +410 -0
- package/{eval-framework → ci}/cases/case1.json +5 -5
- package/ci/cases/case10-small-feature.json +5 -0
- package/ci/cases/case11-readme-typo-update.json +5 -0
- package/ci/cases/case12-chinese-macro-audit.json +5 -0
- package/{eval-framework → ci}/cases/case2.json +5 -5
- package/{eval-framework → ci}/cases/case3.json +5 -5
- package/{eval-framework → ci}/cases/case4-zh-tier2.json +5 -5
- package/{eval-framework → ci}/cases/case5-zh-tier3.json +5 -5
- package/ci/cases/case6-macro-skill-audit.json +5 -0
- package/ci/cases/case7-macro-reference-audit.json +5 -0
- package/ci/cases/case8-controlled-ab-benchmark.json +5 -0
- package/ci/cases/case9-four-issue-audit.json +5 -0
- package/ci/consistency-check.js +347 -0
- package/ci/description-collision.js +109 -0
- package/ci/fable-mode-test.js +120 -0
- package/ci/fixtures/agency-agents/divisions.json +6 -0
- package/ci/fixtures/agency-agents/engineering/code-reviewer.md +11 -0
- package/ci/fixtures/agency-agents/testing/reality-checker.md +11 -0
- package/ci/fixtures/bad-frontmatter-colon/SKILL.md +16 -0
- package/ci/fixtures/duplicate-description/skill-a/SKILL.md +16 -0
- package/ci/fixtures/duplicate-description/skill-b/SKILL.md +16 -0
- package/ci/mechanism-2a-rule-of-3.test.js +46 -0
- package/ci/mechanism-2b-boundary-guard.test.js +16 -0
- package/ci/mechanism-2c-state-persist.test.js +29 -0
- package/ci/mechanism-2d-fact-audit.test.js +18 -0
- package/ci/mechanism-2e-scope-guard.test.js +24 -0
- package/ci/mechanism-2f-stop-gate.test.js +23 -0
- package/ci/mechanism-2g-platform-ignore.test.js +88 -0
- package/ci/mechanism-2h-installer-manifest.test.js +147 -0
- package/ci/mechanism-2i-crlf-frontmatter.test.js +145 -0
- package/ci/mechanism-2i-install-verification.test.js +34 -0
- package/ci/mechanism-2j-behavioral-runner.test.js +20 -0
- package/ci/mechanism-2k-reference-check.test.js +20 -0
- package/ci/mechanism-2l-multi-agent-workspace.test.js +105 -0
- package/ci/mechanism-test.js +71 -0
- package/ci/negative-controls.js +84 -0
- package/ci/reference-check.js +112 -0
- package/ci/release-consistency-check.js +123 -0
- package/ci/routing-check.js +90 -0
- package/{eval-framework → ci}/runner.js +56 -56
- package/ci/skill-routing-check.js +98 -0
- package/ci/test-helper.js +104 -0
- package/ci/test-negative-controls.js +148 -0
- package/commitlint.config.js +25 -0
- package/docker-verify.sh +266 -266
- package/docs/architecture.md +99 -95
- package/docs/audit.md +53 -0
- package/docs/mechanism-first-skill-mesh.md +163 -0
- package/docs/philosophy.md +47 -45
- package/docs/reflection.md +48 -34
- package/docs/routing.md +58 -45
- package/docs/troubleshooting.md +284 -0
- package/docs/workflows/environment-detection.md +10 -10
- package/docs/workflows/eval-harness.md +13 -6
- package/docs/workflows/fable-discipline.md +9 -9
- package/docs/workflows/fable-mode.md +29 -32
- package/docs/workflows/find-skills.md +36 -0
- package/docs/workflows/git-commit.md +18 -9
- package/docs/workflows/grill-me.md +11 -11
- package/docs/workflows/grill-with-docs.md +14 -7
- package/docs/workflows/harness-everything.md +95 -92
- package/docs/workflows/improve-codebase-architecture.md +15 -7
- package/docs/workflows/install-cognitive-os.md +60 -60
- package/docs/workflows/multi-agent-workspace.md +42 -0
- package/docs/workflows/repo-docs.md +12 -7
- package/docs/workflows/security-review.md +26 -7
- package/docs/workflows/self-evolve.md +27 -44
- package/docs/workflows/skill-creator.md +80 -75
- package/docs/workflows/skill-style.md +64 -64
- package/docs/workflows/tdd.md +42 -39
- package/docs/workflows/to-spec.md +83 -0
- package/docs/workflows/to-tickets.md +80 -0
- package/docs/workflows/todo-driven-workflow.md +34 -36
- package/docs/workflows/using-git-worktrees.md +12 -8
- package/docs/workflows/verification-loop.md +16 -14
- package/docs/workflows/verify-before-claim.md +12 -8
- package/docs/workflows/zoom-out.md +22 -10
- package/environment-detection/SKILL.md +25 -61
- package/environment-detection/references/shell-syntax-rules.md +76 -0
- package/environment-detection/scripts/preflight.js +103 -93
- package/eval-framework/fixtures/bad-frontmatter-colon/SKILL.md +14 -0
- package/eval-framework/fixtures/duplicate-desc-skill-a/SKILL.md +14 -0
- package/eval-framework/fixtures/duplicate-desc-skill-b/SKILL.md +14 -0
- package/eval-framework/fixtures/missing-delimiter/SKILL.md +13 -0
- package/eval-framework/fixtures/over-budget-skill/SKILL.md +36 -0
- package/eval-harness/SKILL.md +34 -51
- package/eval-harness/references/scoring-rubric.md +68 -0
- package/eval-harness/scripts/evaluate.js +77 -61
- package/evals/environment-detection/eval.yaml +26 -0
- package/evals/environment-detection/tasks/negative-trigger.yaml +16 -0
- package/evals/environment-detection/tasks/positive-trigger.yaml +15 -0
- package/evals/eval-harness/eval.yaml +26 -0
- package/evals/eval-harness/tasks/negative-trigger.yaml +16 -0
- package/evals/eval-harness/tasks/positive-trigger.yaml +15 -0
- package/evals/fable-discipline/eval.yaml +26 -0
- package/evals/fable-discipline/tasks/negative-trigger.yaml +16 -0
- package/evals/fable-discipline/tasks/positive-trigger.yaml +15 -0
- package/evals/fable-mode/eval.yaml +26 -0
- package/evals/fable-mode/tasks/negative-tier2-no-model.yaml +18 -0
- package/evals/fable-mode/tasks/negative-trigger.yaml +16 -0
- package/evals/fable-mode/tasks/positive-haiku-mode.yaml +16 -0
- package/evals/fable-mode/tasks/positive-opus-mode.yaml +16 -0
- package/evals/fable-mode/tasks/positive-sonnet-mode.yaml +16 -0
- package/evals/fable-mode/tasks/positive-trigger.yaml +15 -0
- package/evals/find-skills/eval.yaml +26 -0
- package/evals/find-skills/tasks/negative-trigger.yaml +16 -0
- package/evals/find-skills/tasks/positive-trigger.yaml +15 -0
- package/evals/git-commit/eval.yaml +26 -0
- package/evals/git-commit/tasks/negative-trigger.yaml +16 -0
- package/evals/git-commit/tasks/positive-trigger.yaml +15 -0
- package/evals/grill-me/eval.yaml +26 -0
- package/evals/grill-me/tasks/negative-trigger.yaml +16 -0
- package/evals/grill-me/tasks/positive-trigger.yaml +15 -0
- package/evals/grill-with-docs/eval.yaml +26 -0
- package/evals/grill-with-docs/tasks/negative-trigger.yaml +16 -0
- package/evals/grill-with-docs/tasks/positive-trigger.yaml +15 -0
- package/evals/harness-everything/eval.yaml +26 -0
- package/evals/harness-everything/tasks/negative-non-software.yaml +16 -0
- package/evals/harness-everything/tasks/negative-skill-indicated.yaml +15 -0
- package/evals/harness-everything/tasks/positive-tier1.yaml +16 -0
- package/evals/harness-everything/tasks/positive-tier2.yaml +16 -0
- package/evals/harness-everything/tasks/positive-tier3.yaml +16 -0
- package/evals/improve-codebase-architecture/eval.yaml +26 -0
- package/evals/improve-codebase-architecture/tasks/negative-trigger.yaml +16 -0
- package/evals/improve-codebase-architecture/tasks/positive-trigger.yaml +15 -0
- package/evals/install-cognitive-os/eval.yaml +26 -0
- package/evals/install-cognitive-os/tasks/negative-trigger.yaml +16 -0
- package/evals/install-cognitive-os/tasks/positive-trigger.yaml +15 -0
- package/evals/multi-agent-workspace/eval.yaml +26 -0
- package/evals/multi-agent-workspace/tasks/negative-trigger.yaml +15 -0
- package/evals/multi-agent-workspace/tasks/positive-trigger.yaml +15 -0
- package/evals/repo-docs/eval.yaml +26 -0
- package/evals/repo-docs/tasks/negative-trigger.yaml +16 -0
- package/evals/repo-docs/tasks/positive-trigger.yaml +15 -0
- package/evals/rewrite-commits/eval.yaml +26 -0
- package/evals/rewrite-commits/tasks/negative-trigger.yaml +16 -0
- package/evals/rewrite-commits/tasks/positive-trigger.yaml +15 -0
- package/evals/security-review/eval.yaml +26 -0
- package/evals/security-review/tasks/negative-trigger.yaml +16 -0
- package/evals/security-review/tasks/positive-trigger.yaml +15 -0
- package/evals/self-evolve/eval.yaml +26 -0
- package/evals/self-evolve/tasks/negative-trigger.yaml +16 -0
- package/evals/self-evolve/tasks/positive-trigger.yaml +15 -0
- package/evals/skill-creator/eval.yaml +26 -0
- package/evals/skill-creator/tasks/negative-trigger.yaml +16 -0
- package/evals/skill-creator/tasks/positive-trigger.yaml +15 -0
- package/evals/skill-style/eval.yaml +26 -0
- package/evals/skill-style/tasks/negative-trigger.yaml +16 -0
- package/evals/skill-style/tasks/positive-trigger.yaml +15 -0
- package/evals/tdd/eval.yaml +26 -0
- package/evals/tdd/tasks/negative-trivia.yaml +16 -0
- package/evals/tdd/tasks/positive-bugfix.yaml +15 -0
- package/evals/tdd/tasks/positive-feature.yaml +16 -0
- package/evals/tdd/tasks/positive-refactor.yaml +15 -0
- package/evals/to-spec/eval.yaml +26 -0
- package/evals/to-spec/tasks/negative-trigger.yaml +16 -0
- package/evals/to-spec/tasks/positive-trigger.yaml +15 -0
- package/evals/to-tickets/eval.yaml +26 -0
- package/evals/to-tickets/tasks/negative-trigger.yaml +15 -0
- package/evals/to-tickets/tasks/positive-trigger.yaml +15 -0
- package/evals/todo-driven-workflow/eval.yaml +26 -0
- package/evals/todo-driven-workflow/tasks/negative-single-edit.yaml +16 -0
- package/evals/todo-driven-workflow/tasks/positive-multi-step.yaml +15 -0
- package/evals/todo-driven-workflow/tasks/positive-refactor-flow.yaml +15 -0
- package/evals/using-git-worktrees/eval.yaml +26 -0
- package/evals/using-git-worktrees/tasks/negative-trigger.yaml +15 -0
- package/evals/using-git-worktrees/tasks/positive-trigger.yaml +15 -0
- package/evals/verification-loop/eval.yaml +26 -0
- package/evals/verification-loop/tasks/negative-discussion.yaml +16 -0
- package/evals/verification-loop/tasks/positive-pre-ship.yaml +15 -0
- package/evals/verify-before-claim/eval.yaml +26 -0
- package/evals/verify-before-claim/tasks/negative-trigger.yaml +16 -0
- package/evals/verify-before-claim/tasks/positive-trigger.yaml +15 -0
- package/evals/zoom-out/eval.yaml +26 -0
- package/evals/zoom-out/tasks/negative-trivial-edit.yaml +16 -0
- package/evals/zoom-out/tasks/positive-repeated-failure.yaml +15 -0
- package/fable-discipline/SKILL.md +31 -28
- package/fable-discipline/references/discipline-rules.md +22 -0
- package/fable-mode/CONTRACT-FORMAT.md +51 -51
- package/fable-mode/SKILL.md +31 -43
- package/fable-mode/agents/fable-orchestrator.md +99 -92
- package/fable-mode/agents/fable-verifier.md +32 -32
- package/fable-mode/agents/fable-worker-haiku.md +52 -48
- package/fable-mode/agents/fable-worker-sonnet.md +53 -49
- package/fable-mode/execution-guardrails/SKILL.md +43 -87
- package/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
- package/fable-mode/fable-haiku/SKILL.md +36 -48
- package/fable-mode/fable-haiku/references/routing-notes.md +26 -0
- package/fable-mode/fable-opus/SKILL.md +36 -0
- package/fable-mode/fable-sonnet/SKILL.md +36 -0
- package/fable-mode/model-matrix.json +32 -0
- package/fable-mode/references/execution-phases.md +37 -0
- package/fable-mode/references/model-matrix.md +39 -0
- package/fable-mode/scripts/model-selector.js +129 -0
- package/find-skills/SKILL.md +48 -0
- package/find-skills/references/discovery-flow.md +102 -0
- package/find-skills/scripts/use-skill.js +106 -0
- package/git-commit/SKILL.md +35 -45
- package/git-commit/guides/ANGULAR_STYLE.md +60 -60
- package/git-commit/guides/COMMIT_GENERATION.md +23 -23
- package/git-commit/guides/LANGUAGE_DETECTION.md +16 -16
- package/git-commit/guides/MAIN_REPO.md +14 -14
- package/git-commit/guides/SUBMODULES.md +27 -27
- package/git-commit/references/commit-flow.md +30 -0
- package/grill-me/SKILL.md +34 -27
- package/grill-me/references/grilling-playbook.md +38 -0
- package/grill-with-docs/ADR-FORMAT.md +47 -47
- package/grill-with-docs/CONTEXT-FORMAT.md +63 -63
- package/grill-with-docs/SKILL.md +33 -91
- package/grill-with-docs/references/session-playbook.md +97 -0
- package/harness-everything/SKILL.md +29 -128
- package/harness-everything/examples/README.md +9 -9
- package/harness-everything/examples/todo-workflow.md +22 -22
- package/harness-everything/references/skill-registry.md +39 -0
- package/harness-everything/references/triage-and-tiers.md +116 -0
- package/harness-everything/scripts/bootstrap.js +203 -140
- package/harness-everything/scripts/routing-keywords.json +320 -0
- package/harness-everything/scripts/self-heal.js +241 -189
- package/harness-everything/scripts/tier-router.js +334 -219
- package/harness-everything/scripts/verify-gate.js +100 -31
- package/hooks/hooks.json +155 -155
- package/hooks/scripts/atomic-commit-check.js +68 -68
- package/hooks/scripts/boundary-guard.js +55 -55
- package/hooks/scripts/context-compact.js +114 -114
- package/hooks/scripts/contract-test.js +79 -79
- package/hooks/scripts/depth-guard.js +65 -65
- package/hooks/scripts/lib/harness-state.js +139 -228
- package/hooks/scripts/lib/platforms/claude.js +72 -19
- package/hooks/scripts/lib/platforms/codex.js +24 -6
- package/hooks/scripts/lib/platforms/continue.js +23 -5
- package/hooks/scripts/lib/platforms/copilot.js +23 -5
- package/hooks/scripts/lib/platforms/cursor.js +23 -5
- package/hooks/scripts/lib/platforms/hermes.js +57 -57
- package/hooks/scripts/lib/platforms/index.js +17 -17
- package/hooks/scripts/lib/platforms/worktrees.js +20 -20
- package/hooks/scripts/reset-circuit-breaker.js +30 -30
- package/hooks/scripts/rule-of-3-tracker.js +124 -91
- package/hooks/scripts/rule-of-3.js +187 -176
- package/hooks/scripts/state-persist.js +99 -99
- package/hooks/scripts/stop-gate.js +80 -80
- package/hooks/scripts/subagent-scope-guard.js +88 -88
- package/improve-codebase-architecture/SKILL.md +31 -35
- package/improve-codebase-architecture/guides/DEEPENING.md +37 -37
- package/improve-codebase-architecture/guides/HTML-REPORT.md +123 -123
- package/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -44
- package/improve-codebase-architecture/guides/LANGUAGE.md +53 -53
- package/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
- package/install-cognitive-os/SKILL.md +23 -80
- package/install-cognitive-os/references/cognitive-loop.md +27 -0
- package/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
- package/multi-agent-workspace/SKILL.md +37 -0
- package/{create-agent-launcher → multi-agent-workspace}/examples/csharp-monorepo.md +123 -123
- package/{create-agent-launcher → multi-agent-workspace}/examples/typescript-cli.md +126 -126
- package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-claude.md +77 -77
- package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-codex.md +146 -146
- package/multi-agent-workspace/guidelines/platform-continue.md +38 -0
- package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-copilot.md +74 -74
- package/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
- package/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
- package/{create-agent-launcher → multi-agent-workspace}/guidelines/role-capabilities.md +108 -108
- package/multi-agent-workspace/references/agency-agents.md +31 -0
- package/multi-agent-workspace/references/architecture-guide.md +32 -0
- package/multi-agent-workspace/references/orchestration.md +48 -0
- package/multi-agent-workspace/scripts/agency-catalog.js +190 -0
- package/multi-agent-workspace/scripts/index_memory.js +51 -0
- package/multi-agent-workspace/scripts/scaffold.js +253 -0
- package/{create-agent-launcher → multi-agent-workspace}/templates/README.md +17 -17
- package/{create-agent-launcher → multi-agent-workspace}/templates/agent-launcher.md +67 -67
- package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-csharp.md +55 -55
- package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-polyglot.md +61 -61
- package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-ts.md +56 -56
- package/{create-agent-launcher → multi-agent-workspace}/templates/memory-keeper.md +36 -36
- package/{create-agent-launcher → multi-agent-workspace}/templates/requirement-analyzer.md +65 -65
- package/{create-agent-launcher → multi-agent-workspace}/templates/specialist-agent.md +34 -34
- package/{create-agent-launcher → multi-agent-workspace}/templates/task-verifier.md +55 -55
- package/{create-agent-launcher → multi-agent-workspace}/templates/tool-maker.md +32 -32
- package/multi-agent-workspace/workflows/01-init.md +22 -0
- package/multi-agent-workspace/workflows/02-analysis.md +23 -0
- package/multi-agent-workspace/workflows/03-generation.md +27 -0
- package/multi-agent-workspace/workflows/04-launcher.md +16 -0
- package/opencode-plugin/README.md +94 -0
- package/opencode-plugin/hooks/circuit-breaker.js +121 -0
- package/opencode-plugin/hooks/compliance.js +128 -0
- package/opencode-plugin/hooks/post-edit.js +62 -0
- package/opencode-plugin/hooks/pre-complete.js +65 -0
- package/opencode-plugin/hooks/verify.js +140 -0
- package/opencode-plugin/plugin.json +17 -0
- package/opencode-plugin/test-hook-firing.js +198 -0
- package/package.json +50 -22
- package/references/definition-of-done.md +67 -0
- package/references/performance-checklist.md +153 -0
- package/references/platform-advisory-template.md +58 -0
- package/references/security-checklist.md +205 -0
- package/repo-docs/SKILL.md +38 -37
- package/repo-docs/references/process-guide.md +60 -0
- package/repo-docs/templates/agents-template.md +264 -264
- package/repo-docs/templates/knowledge-agents-template.md +50 -50
- package/repo-docs/templates/knowledge-readme-template.md +83 -83
- package/repo-docs/templates/manual-recon.md +117 -117
- package/repo-docs/templates/multi-skills-readme-template.md +72 -72
- package/repo-docs/templates/product-agents-template.md +78 -78
- package/repo-docs/templates/product-readme-template.md +95 -95
- package/repo-docs/templates/readme-template.md +136 -136
- package/repo-docs/templates/single-skill-readme-template.md +70 -70
- package/repo-docs/templates/skills-agents-template.md +60 -60
- package/rewrite-commits/SKILL.md +22 -17
- package/rewrite-commits/references/workflow.md +18 -0
- package/scripts/installer.js +546 -506
- package/scripts/lib/advisory-text.js +8 -4
- package/scripts/lib/claude-hooks.js +18 -5
- package/scripts/lib/gitignore.js +199 -80
- package/scripts/lib/manifest.js +68 -4
- package/scripts/lib/prompts.js +1 -1
- package/scripts/lib/skills.js +87 -1
- package/scripts/verify-install.js +147 -0
- package/security-review/SKILL.md +35 -496
- package/security-review/guides/OWASP-PATTERNS.md +31 -0
- package/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
- package/security-review/references/security-checklist.md +478 -0
- package/security-review/scripts/audit-secrets.js +84 -0
- package/self-evolve/SKILL.md +38 -45
- package/self-evolve/references/memory-resolution.md +58 -0
- package/self-evolve/scripts/persist-memory.js +139 -40
- package/self-evolve/scripts/register-dynamic-skill.js +251 -0
- package/self-evolve/scripts/self-regression.js +110 -113
- package/skill-creator/SKILL.md +34 -76
- package/skill-creator/references/authoring-workflow.md +14 -0
- package/skill-creator/references/dynamic-generation-contract.md +21 -0
- package/skill-creator/references/quality-checklist.md +15 -0
- package/skill-creator/references/quality-principles.md +81 -81
- package/skill-creator/references/testing-workflow.md +27 -32
- package/skill-style/SKILL.md +33 -39
- package/skill-style/references/style-guide.md +36 -0
- package/tdd/SKILL.md +34 -43
- package/tdd/guides/deep-modules.md +33 -33
- package/tdd/guides/interface-design.md +31 -31
- package/tdd/guides/mocking.md +59 -59
- package/tdd/guides/refactoring.md +10 -10
- package/tdd/guides/tests.md +61 -61
- package/tdd/references/core-discipline.md +49 -0
- package/to-spec/SKILL.md +42 -0
- package/to-spec/references/process.md +77 -0
- package/to-spec/scripts/check-project-docs.js +259 -0
- package/to-spec/templates/cli-reference.md +31 -0
- package/to-spec/templates/dev-doc.md +27 -0
- package/to-spec/templates/feature-spec.md +59 -0
- package/to-spec/templates/schema-doc.md +31 -0
- package/to-tickets/SKILL.md +42 -0
- package/to-tickets/references/publishing-and-templates.md +97 -0
- package/todo-driven-workflow/SKILL.md +27 -41
- package/todo-driven-workflow/references/execution-guide.md +27 -0
- package/using-git-worktrees/SKILL.md +29 -141
- package/using-git-worktrees/references/workflow-details.md +108 -0
- package/verification-loop/SKILL.md +29 -121
- package/verification-loop/references/verification-phases.md +116 -0
- package/verification-loop/templates/verification-report.template.md +15 -0
- package/verify-before-claim/SKILL.md +27 -70
- package/verify-before-claim/references/verification-guide.md +73 -0
- package/zoom-out/SKILL.md +28 -76
- package/zoom-out/references/circuit-breaker.md +66 -0
- package/zoom-out/templates/zoom-out-report.template.md +20 -0
- package/build-multi-agent-system/AGENTS.md +0 -50
- package/build-multi-agent-system/README.md +0 -63
- package/build-multi-agent-system/SKILL.md +0 -68
- package/create-agent-launcher/SKILL.md +0 -48
- package/create-agent-launcher/guidelines/platform-gemini.md +0 -101
- package/create-agent-launcher/workflows/01-init.md +0 -22
- package/create-agent-launcher/workflows/02-analysis.md +0 -26
- package/create-agent-launcher/workflows/03-generation.md +0 -29
- package/create-agent-launcher/workflows/04-launcher.md +0 -20
- package/docs/workflows/build-multi-agent-system.md +0 -62
- package/docs/workflows/create-agent-launcher.md +0 -62
- package/eval-framework/behavioral-test.js +0 -105
- package/eval-framework/mechanism-test.js +0 -251
- package/harness-everything/scripts/todo-cli.js +0 -157
- package/skill-style/STYLE.md +0 -37
|
@@ -1,87 +1,43 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: execution-guardrails
|
|
3
|
-
description:
|
|
4
|
-
Always-on
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
user's firsthand world, find thin or no results, and convert that silence into a warning
|
|
45
|
-
against the user's own sourcing. Web silence is never grounds for a warning. For facts
|
|
46
|
-
about the user's own world, conversation history outranks the web (see the
|
|
47
|
-
source-of-truth skill).
|
|
48
|
-
|
|
49
|
-
A capability flag follows the same standard. "This may be beyond me" must name what was
|
|
50
|
-
attempted and where it failed — not a vague appeal to difficulty.
|
|
51
|
-
|
|
52
|
-
## 2. Warning threshold
|
|
53
|
-
|
|
54
|
-
Across any run, minor concerns accumulate that aren't worth halting on individually.
|
|
55
|
-
Keep a running count. At the threshold — **default three, tunable if the user sets a
|
|
56
|
-
different number** — stop and surface all of them to the user at once before continuing.
|
|
57
|
-
|
|
58
|
-
Rationale: three small things pointing the same direction usually mean one real problem
|
|
59
|
-
worth a decision. Below threshold, keep working; a drip of trivial caveats is noise.
|
|
60
|
-
At threshold, batch them — one interruption with full context beats three fragmentary
|
|
61
|
-
ones.
|
|
62
|
-
|
|
63
|
-
A concern that independently meets the verify-before-flag bar and is material on its own
|
|
64
|
-
does not wait for the threshold. The threshold governs minor concerns only.
|
|
65
|
-
|
|
66
|
-
## 3. Find-and-replace safety
|
|
67
|
-
|
|
68
|
-
When editing files with sed (or any substring replace), always anchor on word boundaries
|
|
69
|
-
to avoid corrupting compound words — a bare `edge` replace will mangle `Ledger` into
|
|
70
|
-
garbage. Use `\bword\b`, not bare `word`.
|
|
71
|
-
|
|
72
|
-
After any sed pass on a file, grep for glued or malformed compound words before
|
|
73
|
-
presenting the result. A replace that silently corrupts neighboring tokens is the most
|
|
74
|
-
common self-inflicted error in file edits. The check is cheap; the silent corruption is
|
|
75
|
-
not.
|
|
76
|
-
|
|
77
|
-
Preferred order of tools: targeted string-replace on a unique anchor > word-boundary
|
|
78
|
-
sed > bare sed (never). If the string to replace isn't unique in the file, widen the
|
|
79
|
-
anchor until it is — do not replace-all and hope.
|
|
80
|
-
|
|
81
|
-
## Relationship to fable-mode
|
|
82
|
-
|
|
83
|
-
fable-mode's staged loop is optional and gated on task size. These guardrails are not
|
|
84
|
-
optional and not gated. When fable-mode runs, its step 4 (self-critique) and all file
|
|
85
|
-
edits inherit these rules. When fable-mode doesn't run, these rules apply anyway. In v3
|
|
86
|
-
the per-model runners route to frontmatter-defined agents (`agents/*.md`) whose system
|
|
87
|
-
prompts carry these rules inline, because spawned agents cannot see this skill.
|
|
1
|
+
---
|
|
2
|
+
name: execution-guardrails
|
|
3
|
+
description: >-
|
|
4
|
+
Always-on guardrails: verify findings before flagging warnings, batch
|
|
5
|
+
minor caveats, and anchor search-and-replace edits with post-write checks.
|
|
6
|
+
Use when raising warnings or performing search-and-replace file edits.
|
|
7
|
+
license: Apache-2.0
|
|
8
|
+
metadata:
|
|
9
|
+
author: Miya Daniel
|
|
10
|
+
version: 0.3.5
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Execution Guardrails
|
|
14
|
+
|
|
15
|
+
**USE FOR**: Raising warnings or flagging problems, search-and-replace/regex file edits, batching minor caveats, reporting capability limits.
|
|
16
|
+
|
|
17
|
+
| Component | Spec |
|
|
18
|
+
| :--- | :--- |
|
|
19
|
+
| **Trigger / Input** | Turn raising a warning or performing search-and-replace edits. |
|
|
20
|
+
| **Expected Output** | Verified warnings; batched caveats (3-item threshold); corruption-checked edits. |
|
|
21
|
+
| **State Mutations** | None — governs execution quality for file-editing turns. |
|
|
22
|
+
| **Enforcement Gate** | Verify before flagging; validate edits post-write. |
|
|
23
|
+
|
|
24
|
+
## USE FOR:
|
|
25
|
+
- Raising a warning or flagging a suspected problem
|
|
26
|
+
- Search-and-replace or regex file edits
|
|
27
|
+
- Batching multiple minor caveats during a run
|
|
28
|
+
- Reporting capability limits ("this may be beyond me")
|
|
29
|
+
|
|
30
|
+
## DO NOT USE FOR:
|
|
31
|
+
- Task planning, staging, or fable-mode's staged loop itself
|
|
32
|
+
- Git history rewriting (see `rewrite-commits`)
|
|
33
|
+
- Skills that never raise warnings or edit files
|
|
34
|
+
|
|
35
|
+
## Core Rules
|
|
36
|
+
|
|
37
|
+
1. **Verify before flag** — Confirm a problem exists before reporting it. Never convert absence of evidence into a warning.
|
|
38
|
+
2. **Warning threshold** — Batch minor concerns; surface them together at three (default). Material concerns do not wait.
|
|
39
|
+
3. **Find-and-replace safety** — Prefer structured edit tools over shell `sed`; anchor with unique context or `\bword\b` boundaries; verify file integrity post-edit. Never replace-all blindly.
|
|
40
|
+
|
|
41
|
+
These rules are always-on, even when `fable-mode`'s staged loop is not running.
|
|
42
|
+
|
|
43
|
+
Deep dive: references/guardrail-rules.md
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Guardrail Rules — Full Detail
|
|
2
|
+
|
|
3
|
+
Three rules extracted from fable-mode's operational section so they apply everywhere,
|
|
4
|
+
not only inside the staged loop. A frontier model doesn't need a stage map for a simple
|
|
5
|
+
task, but it still needs these — they encode the user's preferences, and no model ships
|
|
6
|
+
knowing them.
|
|
7
|
+
|
|
8
|
+
## 1. Verify before flag
|
|
9
|
+
|
|
10
|
+
Before flagging any problem — verify it actually exists. Grep, diff, run it, or check
|
|
11
|
+
the source directly. Never report a problem that hasn't been confirmed present.
|
|
12
|
+
|
|
13
|
+
An unverified flag — a warning raised because evidence wasn't *found*, rather than
|
|
14
|
+
because a fault was *found* — is itself an error. It manufactures doubt where none is
|
|
15
|
+
warranted and sends the user chasing ghosts. Absence of evidence is not the finding.
|
|
16
|
+
Confirm, then flag.
|
|
17
|
+
|
|
18
|
+
The known failure this rule exists to stop: run a web search on something from the
|
|
19
|
+
user's firsthand world, find thin or no results, and convert that silence into a warning
|
|
20
|
+
against the user's own sourcing. Web silence is never grounds for a warning. For facts
|
|
21
|
+
about the user's own world, conversation history outranks the web (see the
|
|
22
|
+
source-of-truth skill).
|
|
23
|
+
|
|
24
|
+
A capability flag follows the same standard. "This may be beyond me" must name what was
|
|
25
|
+
attempted and where it failed — not a vague appeal to difficulty.
|
|
26
|
+
|
|
27
|
+
## 2. Warning threshold
|
|
28
|
+
|
|
29
|
+
Across any run, minor concerns accumulate that aren't worth halting on individually.
|
|
30
|
+
Keep a running count. At the threshold — **default three, tunable if the user sets a
|
|
31
|
+
different number** — stop and surface all of them to the user at once before continuing.
|
|
32
|
+
|
|
33
|
+
Rationale: three small things pointing the same direction usually mean one real problem
|
|
34
|
+
worth a decision. Below threshold, keep working; a drip of trivial caveats is noise.
|
|
35
|
+
At threshold, batch them — one interruption with full context beats three fragmentary
|
|
36
|
+
ones.
|
|
37
|
+
|
|
38
|
+
A concern that independently meets the verify-before-flag bar and is material on its own
|
|
39
|
+
does not wait for the threshold. The threshold governs minor concerns only.
|
|
40
|
+
|
|
41
|
+
## 3. Find-and-replace safety
|
|
42
|
+
|
|
43
|
+
When editing files via substring or regex replacement:
|
|
44
|
+
- **Prefer IDE/Harness Native Tools**: Use specialized file edit tools (e.g., `replace_string_in_file`) or language-native scripts (Node.js/Python) rather than shell `sed`. Raw `sed` invocations behave inconsistently across platforms (macOS BSD sed vs Linux GNU sed vs Windows lack of native sed) and risk subtle file corruption.
|
|
45
|
+
- **Context Anchoring**: Always anchor replacement strings with unique surrounding code/context or word boundaries (`\bword\b`) to avoid corrupting compound words — a bare `edge` replace will mangle `Ledger` into garbage.
|
|
46
|
+
- **Post-Edit Integrity Check**: After any find-and-replace pass, verify the file structure or syntax (e.g. via linter/compiler or targeted search) before presenting the result.
|
|
47
|
+
|
|
48
|
+
Preferred order of tools: IDE native structured replace tool (`replace_string_in_file`) with 3+ lines of context > word-boundary anchored script > raw regexreplace (use with caution). If the string to replace isn't unique in the file, widen the surrounding context until it is — NEVER replace-all blindly.
|
|
49
|
+
|
|
50
|
+
## Relationship to fable-mode
|
|
51
|
+
|
|
52
|
+
fable-mode's staged loop is optional and gated on task size. These guardrails are not
|
|
53
|
+
optional and not gated. When fable-mode runs, its step 4 (self-critique) and all file
|
|
54
|
+
edits inherit these rules. When fable-mode doesn't run, these rules apply anyway. In v3
|
|
55
|
+
the per-model runners route to frontmatter-defined agents (`agents/*.md`) whose system
|
|
56
|
+
prompts carry these rules inline, because spawned agents cannot see this skill.
|
|
@@ -1,48 +1,36 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: fable-haiku
|
|
3
|
-
description:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
rules verbatim from `agents/fable-worker-haiku.md`.
|
|
38
|
-
2. Spawn **@fable-worker-haiku** via the Task tool (`subagent_type:
|
|
39
|
-
"fable-worker-haiku"`). Brief it with: the task, the exact output path(s),
|
|
40
|
-
and the pass condition — name the check explicitly; Haiku gets no benefit of
|
|
41
|
-
the doubt on verification.
|
|
42
|
-
3. Haiku is cheap: for independent sub-parts, fan out one worker per part and
|
|
43
|
-
merge. Set a ceiling on concurrent workers.
|
|
44
|
-
4. Follow with **@fable-verifier** (a second Haiku is cheap; fresh eyes can't
|
|
45
|
-
inherit the worker's blind spots) for anything that will be delivered
|
|
46
|
-
without human review.
|
|
47
|
-
5. If a worker escalates ("needs synthesis"), re-route that part to
|
|
48
|
-
fable-worker-sonnet rather than retrying Haiku with a louder prompt.
|
|
1
|
+
---
|
|
2
|
+
name: fable-haiku
|
|
3
|
+
description: "Run staged fable work on Haiku for bulk mechanical tasks with explicit pass conditions, visible fallback handling, and a cold verifier pass."
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: Miya Daniel
|
|
7
|
+
version: 0.3.5
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Fable Mode — Haiku
|
|
11
|
+
|
|
12
|
+
## Skill Contract
|
|
13
|
+
|
|
14
|
+
| Component | Specification |
|
|
15
|
+
| :--- | :--- |
|
|
16
|
+
| **Trigger / Input** | Explicit `fable on haiku` for bulk mechanical or format work. |
|
|
17
|
+
| **Expected Output** | A bounded worker artifact, audit record, and verifier result. |
|
|
18
|
+
| **State Mutations** | Native host TODO tracker or Markdown checklist. |
|
|
19
|
+
| **Enforcement Gate** | Worker pass condition plus `fable-verifier`; unsupported runtime must be visible. |
|
|
20
|
+
|
|
21
|
+
## USE FOR:
|
|
22
|
+
- File processing, format conversion, boilerplate, and structured extraction
|
|
23
|
+
- Cheap parallel stages with independently verifiable artifacts
|
|
24
|
+
|
|
25
|
+
## DO NOT USE FOR:
|
|
26
|
+
- Synthesis-heavy or high-stakes architecture decisions
|
|
27
|
+
- Delivery without a named pass condition and verifier result
|
|
28
|
+
|
|
29
|
+
## Run it
|
|
30
|
+
|
|
31
|
+
1. Resolve `haiku` through `../scripts/model-selector.js`.
|
|
32
|
+
2. Spawn `fable-worker-haiku` when available; otherwise use an inline fallback only when the audit record says so.
|
|
33
|
+
3. Brief one bounded output path and a named check; workers do not spawn workers.
|
|
34
|
+
4. Route synthesis blockers to Sonnet/Opus and cold-review unsupervised delivery with `fable-verifier`.
|
|
35
|
+
|
|
36
|
+
Use `../references/model-matrix.md` for the audit fields and fallback policy.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Fable Haiku — v3 Routing Notes
|
|
2
|
+
|
|
3
|
+
Details moved from SKILL.md.
|
|
4
|
+
|
|
5
|
+
## v3 change: agent-routed
|
|
6
|
+
|
|
7
|
+
The worker is a real agent definition (`../agents/fable-worker-haiku.md`)
|
|
8
|
+
invoked by name. Its system prompt carries the loop, the tightened verification
|
|
9
|
+
rule, and the operational rules; this skill only routes.
|
|
10
|
+
|
|
11
|
+
## Full run procedure
|
|
12
|
+
|
|
13
|
+
1. Confirm `fable-worker-haiku` appears in the available agent types. If not,
|
|
14
|
+
fall back to inline: spawn a general-purpose Haiku agent and pass it the
|
|
15
|
+
rules verbatim from `../agents/fable-worker-haiku.md`.
|
|
16
|
+
2. Spawn **@fable-worker-haiku** via the Task tool (`subagent_type:
|
|
17
|
+
"fable-worker-haiku"`). Brief it with: the task, the exact output path(s),
|
|
18
|
+
and the pass condition — name the check explicitly; Haiku gets no benefit of
|
|
19
|
+
the doubt on verification.
|
|
20
|
+
3. Haiku is cheap: for independent sub-parts, fan out one worker per part and
|
|
21
|
+
merge. Set a ceiling on concurrent workers.
|
|
22
|
+
4. Follow with **@fable-verifier** (a second Haiku is cheap; fresh eyes can't
|
|
23
|
+
inherit the worker's blind spots) for anything that will be delivered
|
|
24
|
+
without human review.
|
|
25
|
+
5. If a worker escalates ("needs synthesis"), re-route that part to
|
|
26
|
+
the main Orchestrator model context rather than retrying Haiku with a louder prompt.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fable-opus
|
|
3
|
+
description: "Run staged fable orchestration on Opus for cross-stage synthesis, high-stakes architecture, and final decisions with named workers, cold verification, and visible fallback handling."
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: Miya Daniel
|
|
7
|
+
version: 0.3.5
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Fable Mode — Opus
|
|
11
|
+
|
|
12
|
+
## Skill Contract
|
|
13
|
+
|
|
14
|
+
| Component | Specification |
|
|
15
|
+
| :--- | :--- |
|
|
16
|
+
| **Trigger / Input** | Explicit `fable on opus` for macro orchestration or high-stakes decisions. |
|
|
17
|
+
| **Expected Output** | A staged orchestration record, worker artifacts, and cold-verifier results. |
|
|
18
|
+
| **State Mutations** | Native host TODO tracker or Markdown checklist; stage contracts remain auditable. |
|
|
19
|
+
| **Enforcement Gate** | `fable-orchestrator`, named worker checks, `fable-verifier`, and visible blocker/escalation status. |
|
|
20
|
+
|
|
21
|
+
## USE FOR:
|
|
22
|
+
- Cross-stage synthesis, architecture decisions, and final macro-task review
|
|
23
|
+
- Tasks that need the Write-less orchestrator to delegate artifact production
|
|
24
|
+
|
|
25
|
+
## DO NOT USE FOR:
|
|
26
|
+
- One obvious single-pass task
|
|
27
|
+
- Bulk mechanical work (use `fable-haiku`) or bounded reasoning (use `fable-sonnet`)
|
|
28
|
+
|
|
29
|
+
## Run it
|
|
30
|
+
|
|
31
|
+
1. Resolve `opus` through `../scripts/model-selector.js`.
|
|
32
|
+
2. Spawn `fable-orchestrator` when the runtime exposes it; otherwise report the inline fallback explicitly.
|
|
33
|
+
3. The orchestrator owns scope lock, at most two replans, stage contracts, named worker delegation, and escalation; it never produces artifacts itself.
|
|
34
|
+
4. Cold-review high-stakes deliverables with `fable-verifier`; report every unverified stage.
|
|
35
|
+
|
|
36
|
+
Use `../references/model-matrix.md` for the audit fields and fallback policy.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fable-sonnet
|
|
3
|
+
description: "Run staged fable work on Sonnet for non-trivial implementation, research synthesis, or bounded reasoning with explicit pass conditions and visible fallback handling."
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: Miya Daniel
|
|
7
|
+
version: 0.3.5
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Fable Mode — Sonnet
|
|
11
|
+
|
|
12
|
+
## Skill Contract
|
|
13
|
+
|
|
14
|
+
| Component | Specification |
|
|
15
|
+
| :--- | :--- |
|
|
16
|
+
| **Trigger / Input** | Explicit `fable on sonnet` or the accepted typo `fable on sonnect`. |
|
|
17
|
+
| **Expected Output** | A bounded reasoning artifact, audit record, and verifier result. |
|
|
18
|
+
| **State Mutations** | Native host TODO tracker or Markdown checklist. |
|
|
19
|
+
| **Enforcement Gate** | Named pass condition, actual verification command, and visible unsupported-model handling. |
|
|
20
|
+
|
|
21
|
+
## USE FOR:
|
|
22
|
+
- Non-trivial implementation, analysis, document drafting, and research synthesis
|
|
23
|
+
- Bounded stages that need stronger reasoning than bulk processing
|
|
24
|
+
|
|
25
|
+
## DO NOT USE FOR:
|
|
26
|
+
- One obvious single-pass task
|
|
27
|
+
- Macro orchestration or final high-stakes decisions (use `fable-opus`)
|
|
28
|
+
|
|
29
|
+
## Run it
|
|
30
|
+
|
|
31
|
+
1. Resolve `sonnet` through `../scripts/model-selector.js`; normalize `sonnect` to Sonnet.
|
|
32
|
+
2. Spawn `fable-worker-sonnet` when available, otherwise use a visible inline fallback.
|
|
33
|
+
3. Brief the exact artifact path, context, and pass condition; workers do not spawn workers.
|
|
34
|
+
4. Send high-stakes artifacts to `fable-verifier` and escalate contradictions instead of guessing.
|
|
35
|
+
|
|
36
|
+
Use `../references/model-matrix.md` for the audit fields and fallback policy.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"modes": {
|
|
4
|
+
"haiku": {
|
|
5
|
+
"role": "bulk mechanical / format conversion",
|
|
6
|
+
"agent": "fable-worker-haiku",
|
|
7
|
+
"aliases": ["haiku"]
|
|
8
|
+
},
|
|
9
|
+
"sonnet": {
|
|
10
|
+
"role": "non-trivial implementation / research synthesis / bounded stage reasoning",
|
|
11
|
+
"agent": "fable-worker-sonnet",
|
|
12
|
+
"aliases": ["sonnet", "sonnect"]
|
|
13
|
+
},
|
|
14
|
+
"opus": {
|
|
15
|
+
"role": "macro orchestration / cross-stage synthesis / high-stakes architecture and final decision",
|
|
16
|
+
"agent": "fable-orchestrator",
|
|
17
|
+
"aliases": ["opus"]
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"fallbacks": {
|
|
21
|
+
"inline": {
|
|
22
|
+
"status": "fallback",
|
|
23
|
+
"effectiveModel": "host-model",
|
|
24
|
+
"reason": "requested model is unavailable; run inline on the declared host model"
|
|
25
|
+
},
|
|
26
|
+
"stop": {
|
|
27
|
+
"status": "blocked",
|
|
28
|
+
"effectiveModel": null,
|
|
29
|
+
"reason": "requested model is unavailable and inline fallback was not authorized"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Fable Mode — Execution Phases
|
|
2
|
+
|
|
3
|
+
```mermaid
|
|
4
|
+
flowchart TD
|
|
5
|
+
Start[Qualifying Tier 3 task] --> Discover[Discover sources, runtime, and authorized scope]
|
|
6
|
+
Discover --> Plan[Write stage map and pass conditions]
|
|
7
|
+
Plan --> Select[Resolve requested model and write audit record]
|
|
8
|
+
Select --> Delegate[Delegate to named agent or visible inline fallback]
|
|
9
|
+
Delegate --> Contract[Write stage contract]
|
|
10
|
+
Contract --> Verify[Run the named failable check]
|
|
11
|
+
Verify --> Review[Cold-review high-stakes deliverables]
|
|
12
|
+
Review --> Done[Record result or escalate blocker]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Discovery and planning
|
|
16
|
+
|
|
17
|
+
Read the relevant files and sources before producing an artifact. Lock the
|
|
18
|
+
authorized write scope in the handoff. Number the stages, assign one artifact
|
|
19
|
+
and one pass condition to each, and allow no more than two full replans.
|
|
20
|
+
|
|
21
|
+
## Delegation
|
|
22
|
+
|
|
23
|
+
Use `fable-orchestrator` for Opus macro work, `fable-worker-sonnet` for
|
|
24
|
+
reasoning and synthesis, and `fable-worker-haiku` for mechanical work. Brief
|
|
25
|
+
each worker with its exact output path, context, audit record, and check.
|
|
26
|
+
Workers do not spawn workers. If the named agent is unavailable, choose the
|
|
27
|
+
explicit inline fallback or stop and escalate; do not silently change models.
|
|
28
|
+
|
|
29
|
+
## Verification and handoff
|
|
30
|
+
|
|
31
|
+
Before each spot-check, create `.claude/harness-everything/state/contracts/<stage>.json`
|
|
32
|
+
using `CONTRACT-FORMAT.md`, then run the exact command in that contract. A
|
|
33
|
+
stage is not complete until the command passes and the audit record contains
|
|
34
|
+
the verifier result. Use `fable-verifier` with only the spec and artifact for
|
|
35
|
+
high-stakes or unsupervised delivery. Review scope-guard output before merging.
|
|
36
|
+
|
|
37
|
+
When macro scaffolding ends, transition to `tdd` for focused implementation.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Fable model matrix and execution audit
|
|
2
|
+
|
|
3
|
+
Issue #27 defines three explicit execution modes. The mode selector is the
|
|
4
|
+
machine-readable gate; this document is the human-facing contract.
|
|
5
|
+
|
|
6
|
+
| Mode | Use for | Named agent |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| Haiku | Bulk mechanical work and format conversion | `fable-worker-haiku` |
|
|
9
|
+
| Sonnet | Non-trivial implementation, research synthesis, bounded reasoning | `fable-worker-sonnet` |
|
|
10
|
+
| Opus | Macro orchestration, cross-stage synthesis, high-stakes architecture and final decisions | `fable-orchestrator` |
|
|
11
|
+
|
|
12
|
+
Use the explicit entrypoints `fable-haiku`, `fable-sonnet`, and `fable-opus`.
|
|
13
|
+
The accepted input `sonnect` normalizes to Sonnet. A normal Tier 2 prompt does
|
|
14
|
+
not select a fable model.
|
|
15
|
+
|
|
16
|
+
## Deterministic selection
|
|
17
|
+
|
|
18
|
+
Before each stage, run `fable-mode/scripts/model-selector.js` with the requested
|
|
19
|
+
mode, the runtime's available modes, the host model, and the stage contract:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
node fable-mode/scripts/model-selector.js --requested opus --available opus,sonnet,haiku --available-agents fable-orchestrator,fable-worker-sonnet,fable-worker-haiku --fallback stop --host-model opus --stage-brief "Synthesize the architecture" --pass-condition "ADR and dependency map exist" --verification-command "npm test" --verifier-result pending
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The JSON result always records `requestedModel`, `effectiveModel`,
|
|
26
|
+
`fallbackReason`, `stageBrief`, `passCondition`, `verificationCommand`, and
|
|
27
|
+
`verifierResult`, plus available agents, status, agent, and escalation state. The
|
|
28
|
+
CLI appends the same record as one JSON line to
|
|
29
|
+
`.claude/harness-everything/state/fable-mode/audit.jsonl` (or the path supplied by
|
|
30
|
+
`--audit-file`).
|
|
31
|
+
|
|
32
|
+
If the requested model is unavailable, `--fallback inline` records the declared
|
|
33
|
+
host model and a visible reason. `--fallback stop` emits `status: blocked`, a
|
|
34
|
+
null effective model, and exit code 2. Neither path silently downgrades.
|
|
35
|
+
|
|
36
|
+
The orchestrator still owns scope lock, at most two full replans, stage
|
|
37
|
+
contracts, worker non-recursion, cold verification, and escalation. The native
|
|
38
|
+
host TODO tracker or a Markdown checklist records stage progress; no CLI TODO
|
|
39
|
+
state machine is part of this contract.
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
const MATRIX_PATH = path.join(__dirname, '..', 'model-matrix.json');
|
|
7
|
+
const REQUIRED = ['stageBrief', 'passCondition', 'verificationCommand', 'verifierResult'];
|
|
8
|
+
const VALID_VERIFIER_RESULTS = new Set(['pending', 'pass', 'fail', 'not-run', 'blocked']);
|
|
9
|
+
|
|
10
|
+
function loadMatrix() {
|
|
11
|
+
return JSON.parse(fs.readFileSync(MATRIX_PATH, 'utf8'));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function normalizeModel(value, matrix) {
|
|
15
|
+
const input = String(value || '').trim().toLowerCase();
|
|
16
|
+
for (const [model, definition] of Object.entries(matrix.modes)) {
|
|
17
|
+
if (definition.aliases.includes(input)) return model;
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function parseArgs(argv) {
|
|
23
|
+
const args = {};
|
|
24
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
25
|
+
const token = argv[i];
|
|
26
|
+
if (token === '--help' || token === '-h') return { help: true };
|
|
27
|
+
if (!token.startsWith('--')) throw new Error(`unknown argument: ${token}`);
|
|
28
|
+
const key = token.slice(2).replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
29
|
+
const value = argv[i + 1];
|
|
30
|
+
if (typeof value === 'undefined' || value.startsWith('--')) throw new Error(`missing value for --${key}`);
|
|
31
|
+
args[key] = value;
|
|
32
|
+
i += 1;
|
|
33
|
+
}
|
|
34
|
+
return args;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function resolveMode(input, matrix = loadMatrix()) {
|
|
38
|
+
const requestedModel = normalizeModel(input.requested, matrix);
|
|
39
|
+
if (!requestedModel) throw new Error('requested model must be one of haiku, sonnet, sonnect, or opus');
|
|
40
|
+
|
|
41
|
+
const availableModels = String(input.available || '')
|
|
42
|
+
.split(/[\s,]+/)
|
|
43
|
+
.map(model => normalizeModel(model, matrix))
|
|
44
|
+
.filter(Boolean);
|
|
45
|
+
const availableAgents = String(input.availableAgents || '')
|
|
46
|
+
.split(/[\s,]+/)
|
|
47
|
+
.map(agent => agent.trim())
|
|
48
|
+
.filter(Boolean);
|
|
49
|
+
const fallback = input.fallback || 'stop';
|
|
50
|
+
if (!Object.prototype.hasOwnProperty.call(matrix.fallbacks, fallback)) {
|
|
51
|
+
throw new Error('fallback must be inline or stop');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
for (const field of REQUIRED) {
|
|
55
|
+
if (!String(input[field] || '').trim()) throw new Error(`${field} is required for an auditable stage`);
|
|
56
|
+
}
|
|
57
|
+
if (!VALID_VERIFIER_RESULTS.has(input.verifierResult)) {
|
|
58
|
+
throw new Error(`verifierResult must be one of ${[...VALID_VERIFIER_RESULTS].join(', ')}`);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const requestedAgent = matrix.modes[requestedModel].agent;
|
|
62
|
+
const modelAvailable = availableModels.includes(requestedModel);
|
|
63
|
+
const agentAvailable = availableAgents.includes(requestedAgent);
|
|
64
|
+
const selected = modelAvailable && agentAvailable;
|
|
65
|
+
const hostModel = String(input.hostModel || 'current-host').trim();
|
|
66
|
+
const fallbackDefinition = matrix.fallbacks[fallback];
|
|
67
|
+
const status = selected ? 'selected' : fallbackDefinition.status;
|
|
68
|
+
const effectiveModel = selected
|
|
69
|
+
? requestedModel
|
|
70
|
+
: fallback === 'inline'
|
|
71
|
+
? hostModel
|
|
72
|
+
: fallbackDefinition.effectiveModel;
|
|
73
|
+
const missing = [];
|
|
74
|
+
if (!modelAvailable) missing.push(`${requestedModel} is not in availableModels`);
|
|
75
|
+
if (!agentAvailable) missing.push(`${requestedAgent} is not in availableAgents`);
|
|
76
|
+
const fallbackReason = selected
|
|
77
|
+
? 'none'
|
|
78
|
+
: `${fallbackDefinition.reason}: ${missing.join('; ')}`;
|
|
79
|
+
|
|
80
|
+
return {
|
|
81
|
+
schemaVersion: matrix.schemaVersion,
|
|
82
|
+
status,
|
|
83
|
+
requestedModel,
|
|
84
|
+
requestedInput: String(input.requested).trim(),
|
|
85
|
+
effectiveModel,
|
|
86
|
+
availableModels: [...new Set(availableModels)],
|
|
87
|
+
availableAgents: [...new Set(availableAgents)],
|
|
88
|
+
fallbackPolicy: fallback,
|
|
89
|
+
fallbackReason,
|
|
90
|
+
agent: selected ? requestedAgent : null,
|
|
91
|
+
modelRole: matrix.modes[requestedModel].role,
|
|
92
|
+
stageBrief: String(input.stageBrief).trim(),
|
|
93
|
+
passCondition: String(input.passCondition).trim(),
|
|
94
|
+
verificationCommand: String(input.verificationCommand).trim(),
|
|
95
|
+
verifierResult: input.verifierResult,
|
|
96
|
+
escalationRequired: status === 'blocked'
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function printHelp() {
|
|
101
|
+
console.log('Usage: node fable-mode/scripts/model-selector.js --requested <haiku|sonnet|sonnect|opus> --available <models> --available-agents <agent names> --stage-brief <text> --pass-condition <text> --verification-command <command> --verifier-result <pending|pass|fail|not-run|blocked> [--fallback <inline|stop>] [--host-model <model>] [--audit-file <path>]');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function appendAuditRecord(record, auditFile) {
|
|
105
|
+
const target = auditFile || process.env.FABLE_AUDIT_FILE || path.join(process.cwd(), '.claude', 'harness-everything', 'state', 'fable-mode', 'audit.jsonl');
|
|
106
|
+
fs.mkdirSync(path.dirname(path.resolve(target)), { recursive: true });
|
|
107
|
+
fs.appendFileSync(target, `${JSON.stringify(record)}\n`, 'utf8');
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function main(argv = process.argv.slice(2)) {
|
|
111
|
+
try {
|
|
112
|
+
const input = parseArgs(argv);
|
|
113
|
+
if (input.help) {
|
|
114
|
+
printHelp();
|
|
115
|
+
return 0;
|
|
116
|
+
}
|
|
117
|
+
const record = resolveMode(input);
|
|
118
|
+
appendAuditRecord(record, input.auditFile);
|
|
119
|
+
console.log(JSON.stringify(record, null, 2));
|
|
120
|
+
return record.status === 'blocked' ? 2 : 0;
|
|
121
|
+
} catch (error) {
|
|
122
|
+
console.error(`[fable-mode/model-selector] ${error.message}`);
|
|
123
|
+
return 2;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (require.main === module) process.exitCode = main();
|
|
128
|
+
|
|
129
|
+
module.exports = { loadMatrix, normalizeModel, parseArgs, resolveMode, main };
|