harness-everything 0.2.1 → 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 +63 -63
- package/docs/workflows/eval-harness.md +64 -57
- package/docs/workflows/fable-discipline.md +59 -59
- package/docs/workflows/fable-mode.md +12 -15
- package/docs/workflows/find-skills.md +36 -0
- package/docs/workflows/git-commit.md +71 -62
- package/docs/workflows/grill-me.md +62 -62
- package/docs/workflows/grill-with-docs.md +69 -62
- package/docs/workflows/harness-everything.md +95 -92
- package/docs/workflows/improve-codebase-architecture.md +68 -60
- package/docs/workflows/install-cognitive-os.md +60 -60
- package/docs/workflows/multi-agent-workspace.md +42 -0
- package/docs/workflows/repo-docs.md +64 -59
- package/docs/workflows/rewrite-commits.md +60 -60
- package/docs/workflows/security-review.md +77 -58
- package/docs/workflows/self-evolve.md +42 -59
- package/docs/workflows/skill-creator.md +80 -75
- package/docs/workflows/skill-style.md +64 -64
- package/docs/workflows/tdd.md +7 -4
- package/docs/workflows/to-spec.md +83 -0
- package/docs/workflows/to-tickets.md +80 -0
- package/docs/workflows/todo-driven-workflow.md +28 -30
- package/docs/workflows/using-git-worktrees.md +67 -63
- package/docs/workflows/verification-loop.md +71 -69
- package/docs/workflows/verify-before-claim.md +64 -60
- package/docs/workflows/zoom-out.md +74 -62
- package/environment-detection/SKILL.md +41 -77
- 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 +42 -59
- 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 +41 -38
- package/fable-discipline/references/discipline-rules.md +22 -0
- package/fable-mode/CONTRACT-FORMAT.md +51 -51
- package/fable-mode/SKILL.md +39 -51
- 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 +45 -55
- 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 +43 -36
- 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 +41 -99
- package/grill-with-docs/references/session-playbook.md +97 -0
- package/harness-everything/SKILL.md +42 -141
- 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 +87 -18
- package/hooks/hooks.json +155 -155
- package/hooks/scripts/boundary-guard.js +55 -55
- 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 +185 -42
- package/hooks/scripts/lib/platforms/codex.js +114 -46
- package/hooks/scripts/lib/platforms/continue.js +91 -41
- package/hooks/scripts/lib/platforms/copilot.js +109 -41
- package/hooks/scripts/lib/platforms/cursor.js +89 -41
- package/hooks/scripts/lib/platforms/hermes.js +57 -32
- 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 +14 -3
- 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 +40 -44
- 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 +38 -95
- 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 +46 -45
- 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 +37 -32
- package/rewrite-commits/references/workflow.md +18 -0
- package/scripts/installer.js +546 -649
- package/scripts/lib/advisory-text.js +167 -163
- package/scripts/lib/claude-hooks.js +84 -71
- package/scripts/lib/gitignore.js +199 -80
- package/scripts/lib/manifest.js +146 -82
- package/scripts/lib/prompts.js +241 -241
- package/scripts/lib/skills.js +260 -172
- package/scripts/lib/workspace.js +28 -28
- package/scripts/verify-install.js +147 -0
- package/security-review/SKILL.md +50 -511
- 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 +47 -54
- 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 +49 -91
- 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 +20 -25
- package/skill-style/SKILL.md +42 -48
- package/skill-style/references/style-guide.md +36 -0
- package/tdd/SKILL.md +44 -53
- 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 +40 -54
- package/todo-driven-workflow/references/execution-guide.md +27 -0
- package/using-git-worktrees/SKILL.md +49 -161
- package/using-git-worktrees/references/workflow-details.md +108 -0
- package/verification-loop/SKILL.md +46 -138
- 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 +43 -86
- package/verify-before-claim/references/verification-guide.md +73 -0
- package/zoom-out/SKILL.md +42 -90
- 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
|
@@ -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 };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: find-skills
|
|
3
|
+
description: Search the agent-skills ecosystem (skills.sh / npx skills) when no installed skill fits; verify quality, apply ephemerally via temp cache by default, and install permanently via npx skills add only with explicit user approval
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: Miya Daniel
|
|
7
|
+
version: 0.3.4
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Find Skills (External Skill Discovery)
|
|
11
|
+
|
|
12
|
+
## 📋 Skill Contract
|
|
13
|
+
|
|
14
|
+
| Component | Specification |
|
|
15
|
+
| :--- | :--- |
|
|
16
|
+
| **Trigger / Input** | Request to find an external skill. |
|
|
17
|
+
| **Expected Output** | Skill pointer, applied skill, or fallback. |
|
|
18
|
+
| **State Mutations** | Temp cache (default); native install opt-in. |
|
|
19
|
+
| **Enforcement Gate** | Local first; explicit approval required before applying third-party code; graceful npx failure. |
|
|
20
|
+
|
|
21
|
+
## Workflow
|
|
22
|
+
|
|
23
|
+
0. Check local coverage (router registry, `generated[]`) before live installs:
|
|
24
|
+
```bash
|
|
25
|
+
npx skills list --json # project scope
|
|
26
|
+
npx skills list -g --json # global scope
|
|
27
|
+
```
|
|
28
|
+
1. Identify domain/task, check [skills.sh](https://skills.sh/), then search `npx skills find [query] [--owner <owner>]`.
|
|
29
|
+
2. Verify: prefer 1K+ installs, official sources; read the unaudited SKILL.md.
|
|
30
|
+
3. Present name/source/count; NEVER fetch/apply without explicit approval.
|
|
31
|
+
4. Apply ephemerally (default, zero footprint):
|
|
32
|
+
```bash
|
|
33
|
+
node "<this-skill-dir>/scripts/use-skill.js" <owner/repo[@skill]>
|
|
34
|
+
```
|
|
35
|
+
Apply the output; OS-temp cache (6h); nothing written to repo or manifest.json.
|
|
36
|
+
5. Permanent install ONLY when the user says they will reuse it: `npx skills add <owner/repo[@skill]> --agent <agent> [-g] -y`
|
|
37
|
+
6. Nothing exists? Help directly; suggest `npx skills init <name>` if recurring.
|
|
38
|
+
|
|
39
|
+
Deep dive: references/discovery-flow.md
|
|
40
|
+
|
|
41
|
+
## USE FOR:
|
|
42
|
+
- finding an external skill when none installed fits
|
|
43
|
+
- vetting third-party skills before applying them
|
|
44
|
+
- ephemeral skill use without permanent installs
|
|
45
|
+
|
|
46
|
+
## DO NOT USE FOR:
|
|
47
|
+
- authoring skills (`skill-creator`)
|
|
48
|
+
- installing anything without explicit user approval
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Find Skills — Full Discovery & Application Reference
|
|
2
|
+
|
|
3
|
+
## Decision Flow
|
|
4
|
+
|
|
5
|
+
```mermaid
|
|
6
|
+
flowchart TD
|
|
7
|
+
Start[User Asks for Skill / Capability X] --> CheckLocal{1. Covered by Static or Self-Evolved Skills?}
|
|
8
|
+
|
|
9
|
+
CheckLocal -- Yes --> UseLocal[Use Existing Harness Skill / Dynamic Generated Skill]
|
|
10
|
+
CheckLocal -- No --> CheckNet{2. Network & npx Executable?}
|
|
11
|
+
|
|
12
|
+
CheckNet -- Yes --> SearchSkills[Search via npx skills find / skills.sh]
|
|
13
|
+
SearchSkills -- Found & Approved --> ApplySkill[Apply Ephemerally via use-skill.js or npx skills add]
|
|
14
|
+
SearchSkills -- Network / Search Fails --> FallbackGeneral
|
|
15
|
+
|
|
16
|
+
CheckNet -- No --> FallbackGeneral{3. Offline / General Domain Capability Fallback}
|
|
17
|
+
|
|
18
|
+
FallbackGeneral --> ExecuteDirect[Apply Built-in Best Practices / Direct Solution]
|
|
19
|
+
|
|
20
|
+
UseLocal --> Done[Delivered Capabilities]
|
|
21
|
+
ApplySkill --> Done
|
|
22
|
+
ExecuteDirect --> Done
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 0. Check existing coverage first (full detail)
|
|
26
|
+
|
|
27
|
+
Confirm the capability doesn't already exist, in this order:
|
|
28
|
+
|
|
29
|
+
1. **Static skills** — grep `harness-everything/SKILL.md` §5's registry table for a matching row. This is the reviewed, first-party skill set; `tier-router.js` also surfaces it automatically by keyword.
|
|
30
|
+
2. **Self-evolved dynamic skills** (`generated[]`) — skills this workspace's own agent authored via `self-evolve` after a hard-won lesson. `tier-router.js` scans every reachable `manifest.json`'s `generated[]` array every turn and prints a `🎯 HIGH-RELEVANCE SELF-EVOLVED SKILL DETECTED` block when a skill's `triggers` match — check this turn's routing checkpoint output before doing anything else.
|
|
31
|
+
3. **Third-party skills someone already chose to keep** — query live, don't guess:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npx skills list --json # project scope
|
|
35
|
+
npx skills list -g --json # global scope
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
This only ever finds something if a past session went through the rare permanent-install exception path — the default ephemeral path never shows up here, by design, because it never installs anything. Checked live rather than cached on purpose: unlike `generated[]` (which Harness fully owns — authored, quality-gated by `skill-creator`, lifecycle-tracked draft/active/deprecated), a third-party skill's content can change out from under a cache the moment its author updates it or the user runs `npx skills update`/`remove` — Harness has no way to govern that lifecycle, so it doesn't pretend to by caching a snapshot. `npx skills list` is already the CLI's own live, authoritative record. (Full reasoning: `docs/reflection.md`'s "External Skills" section.)
|
|
39
|
+
|
|
40
|
+
## 1. Understand what they need
|
|
41
|
+
|
|
42
|
+
Identify: the domain (React, testing, deployment, design...), the specific task, and whether it's common enough that a published skill likely exists.
|
|
43
|
+
|
|
44
|
+
## 2. Check the leaderboard first
|
|
45
|
+
|
|
46
|
+
Before running a CLI search, check the [skills.sh leaderboard](https://skills.sh/) for a well-known skill in the domain. Top sources: `vercel-labs/agent-skills` (React, Next.js, web design), `anthropics/skills` (frontend design, document processing).
|
|
47
|
+
|
|
48
|
+
## 4. Verify quality before recommending (full criteria)
|
|
49
|
+
|
|
50
|
+
Don't recommend a skill from search results alone. Check:
|
|
51
|
+
|
|
52
|
+
- **Install count** — prefer 1K+ installs; be cautious under 100.
|
|
53
|
+
- **Source reputation** — official sources (`vercel-labs`, `anthropics`, `microsoft`) outrank unknown authors.
|
|
54
|
+
- **GitHub stars** — treat a source repo with <100 stars with skepticism.
|
|
55
|
+
- **Trust, not just quality** — a third-party `SKILL.md` is natural-language instructions that get loaded into agent context and followed, whether applied ephemerally or installed permanently. Unlike this repo's own skills (which pass `skill-creator`'s Quality Checklist and get reviewed via PR), it's unaudited. Read the actual `SKILL.md` content before applying it, the same way you'd review a dependency before adding it — not just its install count.
|
|
56
|
+
|
|
57
|
+
## 5. Present options — example message
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
I found a skill that might help! The "react-best-practices" skill provides
|
|
61
|
+
React and Next.js performance optimization guidelines from Vercel Engineering.
|
|
62
|
+
(185K installs)
|
|
63
|
+
|
|
64
|
+
Source: vercel-labs/agent-skills@react-best-practices
|
|
65
|
+
Learn more: https://skills.sh/vercel-labs/agent-skills/react-best-practices
|
|
66
|
+
|
|
67
|
+
Want me to apply it to this task? (It won't be installed anywhere unless you
|
|
68
|
+
tell me you'll want it again later.)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Show the skill name, what it does, install count/source, and ask whether this is a one-off or something worth keeping. Never fetch or apply anything from search results without explicit confirmation.
|
|
72
|
+
|
|
73
|
+
## 6. Apply ephemerally — how the wrapper works
|
|
74
|
+
|
|
75
|
+
Run this skill's own small wrapper instead of raw `npx skills use`:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
node "<this-skill-dir>/scripts/use-skill.js" <owner/repo[@skill]>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
It prints the skill's `SKILL.md` wrapped as a ready-to-follow prompt (identical to `npx skills use`'s own stdout format) — read that output and apply it to the current task. Behind that:
|
|
82
|
+
|
|
83
|
+
- **First lookup of a given `<source>`**: a real fetch via `npx skills use` (a few seconds), then the rendered output is cached under `os.tmpdir()/harness-find-skills-cache/<sha1-of-source>.md`.
|
|
84
|
+
- **Repeat lookups of the same `<source>`** (this session or a later one, same machine) within the freshness window (default 6h, override with `--max-age <hours>`): served straight from that cache file — no network call, near-instant.
|
|
85
|
+
- **Nothing is written to the repo, to any platform's native skill directory, or to `manifest.json`.** The cache lives entirely under the OS temp directory, so it needs no explicit cleanup and nothing for Harness to track — the OS reclaiming temp files on its own schedule is the only "expiry" this needs, and a reclaimed-or-past-freshness-window entry is just treated as a fresh cache miss.
|
|
86
|
+
|
|
87
|
+
This is the default for a reason: a skill applied through here costs real work on first fetch and effectively nothing on repeats, without ever growing a footprint that later sessions have to read through or a human has to remember to clean up.
|
|
88
|
+
|
|
89
|
+
## 6b. Install permanently — full mapping
|
|
90
|
+
|
|
91
|
+
Only when the user says this is something they expect to reuse across many future sessions — not the default, and not implied by "yes, use it":
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
npx skills add <owner/repo[@skill]> --agent <agent> [-g] -y
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Map whichever platform this session is actually running in to the CLI's own agent name: `claude` → `claude-code`, `cursor` → `cursor`, `copilot` → `github-copilot`, `codex` → `codex`, `continue` → `continue`. `-g` targets that platform's global skill directory instead of the project-local one — same local-vs-global convention `scripts/installer.js` uses. Nothing further to register: §0.3's live `npx skills list` finds it again next time.
|
|
98
|
+
|
|
99
|
+
## Related mechanisms
|
|
100
|
+
|
|
101
|
+
- `self-evolve/SKILL.md` + `skill-creator/SKILL.md` §4 — the Dynamic Skill Generation Contract for `generated[]` skills. Deliberately a *different* mechanism from this skill, not a shared one: `generated[]` skills are self-authored and lifecycle-owned by Harness, so caching their triggers in `manifest.json` for `tier-router.js` to match is safe. Third-party skills fetched here default to a self-expiring OS-temp cache with no Harness bookkeeping at all (§6), or, in the rare §6b case, the CLI's own native install + lock file — never a second, driftable Harness-owned cache.
|
|
102
|
+
- `harness-everything/SKILL.md` §5 — the static skill registry to check before searching externally.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Ephemeral third-party skill lookup: prints a skill's SKILL.md wrapped as a
|
|
4
|
+
* ready-to-apply prompt (the same shape `npx skills use` writes to stdout),
|
|
5
|
+
* backed by a content-addressed cache under the OS temp directory so
|
|
6
|
+
* repeat lookups of the same <source> cost zero network calls within the
|
|
7
|
+
* cache's freshness window.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately writes nothing anywhere Harness owns - no manifest, no
|
|
10
|
+
* platform's native skill directory. The cache lives entirely under
|
|
11
|
+
* os.tmpdir() and needs no explicit cleanup: the OS reclaims temp files on
|
|
12
|
+
* its own schedule, and the freshness check below (default 6h) means a
|
|
13
|
+
* lingering entry just gets treated as a miss and re-fetched rather than
|
|
14
|
+
* served stale. That's the only "lifecycle" this needs - nothing for
|
|
15
|
+
* Harness to track or govern, unlike self-evolve's `generated[]`.
|
|
16
|
+
*
|
|
17
|
+
* Usage:
|
|
18
|
+
* node use-skill.js <owner/repo[@skill]> [--max-age <hours>]
|
|
19
|
+
*/
|
|
20
|
+
const fs = require('fs');
|
|
21
|
+
const os = require('os');
|
|
22
|
+
const path = require('path');
|
|
23
|
+
const crypto = require('crypto');
|
|
24
|
+
const { execSync } = require('child_process');
|
|
25
|
+
|
|
26
|
+
const CACHE_DIR = path.join(os.tmpdir(), 'harness-find-skills-cache');
|
|
27
|
+
const DEFAULT_MAX_AGE_HOURS = 6;
|
|
28
|
+
|
|
29
|
+
// `source` is a third-party-supplied identifier (from a search result the
|
|
30
|
+
// agent picked) that ends up in a shell command line - `npx` is a `.cmd`
|
|
31
|
+
// shim on Windows, which CreateProcess can only launch through a shell, so
|
|
32
|
+
// there's no shell-free path here. Node's own child_process docs flag
|
|
33
|
+
// spawn/execFile's `{args: [...], shell: true}` form as unsafe (DEP0190: the
|
|
34
|
+
// array isn't actually escaped, just concatenated) - execSync's single
|
|
35
|
+
// pre-built string is the form Node expects the caller to have already
|
|
36
|
+
// validated, so this allow-list IS the injection defense, checked before the
|
|
37
|
+
// string is built. A package spec never legitimately needs spaces or shell
|
|
38
|
+
// metacharacters (`&|;$()<>\`"'`).
|
|
39
|
+
const SAFE_SOURCE_PATTERN = /^[A-Za-z0-9._/@:-]+$/;
|
|
40
|
+
|
|
41
|
+
function assertSafeSource(source) {
|
|
42
|
+
if (!SAFE_SOURCE_PATTERN.test(source)) {
|
|
43
|
+
console.error(`[Error] Refusing to run "npx skills use" with a source containing unexpected characters: ${JSON.stringify(source)}`);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function parseArgs(argv) {
|
|
49
|
+
const opts = { source: null, maxAgeHours: DEFAULT_MAX_AGE_HOURS };
|
|
50
|
+
const rest = [];
|
|
51
|
+
for (let i = 0; i < argv.length; i++) {
|
|
52
|
+
const a = argv[i];
|
|
53
|
+
if (a === '--max-age') opts.maxAgeHours = Number(argv[++i]);
|
|
54
|
+
else rest.push(a);
|
|
55
|
+
}
|
|
56
|
+
opts.source = rest[0] || null;
|
|
57
|
+
return opts;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function cachePathFor(source) {
|
|
61
|
+
const hash = crypto.createHash('sha1').update(source).digest('hex');
|
|
62
|
+
return path.join(CACHE_DIR, `${hash}.md`);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function readCacheIfFresh(cachePath, maxAgeHours) {
|
|
66
|
+
if (!fs.existsSync(cachePath)) return null;
|
|
67
|
+
const ageMs = Date.now() - fs.statSync(cachePath).mtimeMs;
|
|
68
|
+
if (ageMs > maxAgeHours * 60 * 60 * 1000) return null;
|
|
69
|
+
return fs.readFileSync(cachePath, 'utf8');
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function main() {
|
|
73
|
+
const { source, maxAgeHours } = parseArgs(process.argv.slice(2));
|
|
74
|
+
if (!source) {
|
|
75
|
+
console.error('Usage: node use-skill.js <owner/repo[@skill]> [--max-age <hours>]');
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
assertSafeSource(source);
|
|
79
|
+
|
|
80
|
+
const cachePath = cachePathFor(source);
|
|
81
|
+
const cached = readCacheIfFresh(cachePath, maxAgeHours);
|
|
82
|
+
if (cached !== null) {
|
|
83
|
+
process.stderr.write(`[find-skills] cache hit (<${maxAgeHours}h old, no network call): ${cachePath}\n`);
|
|
84
|
+
process.stdout.write(cached);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
process.stderr.write(`[find-skills] cache miss - fetching "${source}" via npx skills use...\n`);
|
|
89
|
+
let prompt;
|
|
90
|
+
try {
|
|
91
|
+
// Safe to interpolate directly: assertSafeSource() already rejected
|
|
92
|
+
// anything outside [A-Za-z0-9._/@:-], so there's no metacharacter left
|
|
93
|
+
// for a shell to act on.
|
|
94
|
+
const npxCmd = os.platform() === 'win32' ? 'npx.cmd' : 'npx';
|
|
95
|
+
prompt = execSync(`${npxCmd} --yes skills use ${source}`, { encoding: 'utf8', shell: true });
|
|
96
|
+
} catch (err) {
|
|
97
|
+
console.error(`[Error] "npx skills use ${source}" failed:\n${(err.stderr || err.message || '').toString().trim()}`);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
fs.mkdirSync(CACHE_DIR, { recursive: true });
|
|
102
|
+
fs.writeFileSync(cachePath, prompt, 'utf8');
|
|
103
|
+
process.stdout.write(prompt);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
main();
|
package/git-commit/SKILL.md
CHANGED
|
@@ -1,55 +1,45 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: git-commit
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
- After confirming the commit message, call the terminal tool to execute `git commit -m "..." -m "..."`.
|
|
47
|
-
- Upon success, if still within the `fable-mode` workflow, hand control back to `fable-mode` to continue to the next milestone.
|
|
48
|
-
|
|
49
|
-
## Deep Reference Guides
|
|
50
|
-
For comprehensive details on commit rules and submodule configurations, refer to:
|
|
51
|
-
- `git-commit/guides/ANGULAR_STYLE.md` — Complete specification for commit messages
|
|
52
|
-
- `git-commit/guides/COMMIT_GENERATION.md` — Generation patterns and strategies
|
|
53
|
-
- `git-commit/guides/LANGUAGE_DETECTION.md` — Language-specific commit guidelines
|
|
54
|
-
- `git-commit/guides/MAIN_REPO.md` — Committing within monorepos/main repo contexts
|
|
55
|
-
- `git-commit/guides/SUBMODULES.md` — Advanced handling of submodules and nested repos
|
|
1
|
+
---
|
|
2
|
+
name: git-commit
|
|
3
|
+
description: "Generate Angular-style commit messages after verifying the environment, submodules, and staged files; use for explicit commit requests or concluded task phases."
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: Miya Daniel
|
|
7
|
+
version: 0.3.4
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Git Commit (Angular Style)
|
|
11
|
+
|
|
12
|
+
## 📋 Skill Contract
|
|
13
|
+
|
|
14
|
+
| Component | Specification |
|
|
15
|
+
| :--- | :--- |
|
|
16
|
+
| **Trigger / Input** | User requests a commit, or a task phase concludes. Input: staged git diff. |
|
|
17
|
+
| **Expected Output** | Clean Angular-style commit via `git commit -m` or temp file (`git commit -F`). |
|
|
18
|
+
| **State Mutations** | Git tree updated; working tree becomes clean. |
|
|
19
|
+
| **Enforcement Gate** | Run `git status` first; nothing staged → prompt user; non-git repo → offer `git init` or skip. |
|
|
20
|
+
|
|
21
|
+
## Quick Workflow
|
|
22
|
+
|
|
23
|
+
1. `git status`; no repo → offer `git init` or skip; submodules changed → commit first per `git-commit/guides/SUBMODULES.md`.
|
|
24
|
+
2. `git diff --cached`; nothing staged → prompt user / stage targeted files.
|
|
25
|
+
3. Format `<type>(<scope>): <subject>` per `git-commit/guides/ANGULAR_STYLE.md`. Multiline/Windows → `.git-commit-msg.txt` + `git commit -F`, clean up.
|
|
26
|
+
4. `git commit -m "..."`, verify with `git log -1`.
|
|
27
|
+
|
|
28
|
+
Deep guides:
|
|
29
|
+
- `git-commit/guides/ANGULAR_STYLE.md` — Conventional structure, scopes
|
|
30
|
+
- `git-commit/guides/COMMIT_GENERATION.md` — Patterns, diff analysis
|
|
31
|
+
- `git-commit/guides/LANGUAGE_DETECTION.md` — Subject language rules
|
|
32
|
+
- `git-commit/guides/MAIN_REPO.md` — Monorepo commits
|
|
33
|
+
- `git-commit/guides/SUBMODULES.md` — Submodules, nested repos
|
|
34
|
+
|
|
35
|
+
## USE FOR:
|
|
36
|
+
- Commit request from the user
|
|
37
|
+
- Formatting conventional commit messages
|
|
38
|
+
- Submodule or monorepo commits
|
|
39
|
+
|
|
40
|
+
## DO NOT USE FOR:
|
|
41
|
+
- Staging without user confirmation
|
|
42
|
+
- Branching, rebasing, merging, pushing
|
|
43
|
+
- Non-git dirs where user declines `git init`
|
|
44
|
+
|
|
45
|
+
Deep dive: references/commit-flow.md
|