mirror of
https://github.com/zernie/vigiles.git
synced 2026-09-14 20:53:57 +08:00
85c54e7e78
Closes #181, closes #182, closes #183, closes #184, closes #185, and the residual half of #173. #185 — every per-surface check read ONE root, so a monorepo with `skills/` plus `plugins/*/skills/` scored only the first: 4 skills over budget, 2 reported, exit 0. The default now NAMES the bundles it did not score; `--bundles=all` scores them in one pass with one exit code. Root-only stays the default so a vendored third-party corpus is not scored as if it were yours. #181 — `orphan-docs` had a documented severity nothing read, and the duplicate-rules check had no id at all, so neither could be tiered. Both are real rules now and the exit code respects their severity. #183 — the log and `--json` disagreed (21 lines against 88 findings) because some checks print per finding and others per group. One computed total, printed and carried in `--json`. #182 — `--json-out=<file>` writes the JSON while stdout stays human-readable, so a CI job stops scanning twice. #184 — `vigiles test` resolves a harness's bare `vigiles` import from the CLI's own install, so `npx vigiles@<version> test` needs nothing in the project. NODE_PATH was measured, not assumed: Node ignores it for ESM. #173 residual — `lint` verified the integrity HASH, which says nothing about whether the things a file NAMES still exist, so an artifact committed while its refs were live stayed green after the target was deleted. The new `spec-refs` rule re-derives them. It immediately found four dead references in this repo's own `examples/CLAUDE.md.spec.ts`, left behind by the hexagonal refactor. BREAKING CHANGE: `orphan-docs` and `duplicate-rules` now default to "warn" — a repo relying on either to fail CI must set "error" explicitly. Registering them surfaced that both are heuristic proxies, and this repo's calibration rule is that a heuristic never defaults to error. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Documentation — index
How-to and reference docs for using vigiles. New here? Start with the README for the pitch and a 5-minute quick start, or try the live demo at vigiles.sh — grade any repo in your browser.
The docs are grouped by what you're trying to do:
- Guides — step-by-step, task-first ("help me do X").
- Reference — exact flags, symbols, rules.
- Explanation — the reasoning and trade-offs.
Guides — "help me do X"
Verify your instruction files (the Lint layer)
verifying-instruction-files.md— the master guide: the markdown → typed-spec ladder, the three rule types (enforce/guidance/guard), verified references, and the before/after tables. Holds the full validation-rules matrix.markdown-mode.md— the no-spec on-ramp: verify rules in plain markdown with inline<!-- vigiles:enforce -->comments, no TypeScript.skills-monorepo.md— adopt vigiles in a CI-tested skill library or a plain.claude/repo (noplugin.json).
Test & measure your harness (the Test + Eval layers)
harness-testing.md— task-first how-to: pick what you want to test (hook / wiring / skill firing / behaviour) and the tier that answers it, with a copy-paste first test and CI.harness-testing-claude-code.md— Claude Code specifics:scriptModel,${CLAUDE_PLUGIN_ROOT}/pluginDir/ theSkilltool, the bubblewrap sandbox.harness-testing-codex.md— Codex specifics:runHarnessTest({ adapter: codexAdapter })against realcodex exec, the Responses mock, what maps and what doesn't.
measuring-skills.md— A/B a skill, plugin, model, or rule change on real coding tasks: the metric triple (bill / target / blast-radius), the worked example, and why it's affordable on your subscription.migrating-from-promptfoo.md— move existing skill evals onto the subscription: the concept + assertion mapping, a worked side-by-side, and the honest gaps.
Author & ship
skills.md— authoring a SKILL.md across the three on-ramps; the prose-vs-gates split.compiled-hooks.md— author a hook as a pure typed function against the closedvigiles/hookvocabulary and compile it, making whole classes of hook bugs unrepresentable (false confidence, matcher bypass, capability creep).railway-subagents.md— the typedResultsubagent contract: declare a typed outcome, compose flat workers, and assert the outcome deterministically (no model judge).for-plugin-authors.md— the plugin-author journey end to end: scan a draft, fix what it flags, make your skills fire, rank against a marketplace, gate it in CI.github-action.md— run vigiles in CI: the composite Action, every input, the sticky PR comment, versioning.
Harnesses, adapters & agents
harnesses.md— which harness vigiles targets and how you pick one (by import), plus the capability matrix.authoring-an-adapter.md— teach vigiles a new harness: the five ports, a worked skeleton, validating with the conformance kit.non-js-harnesses.md— running vigiles on a harness whose project is Kotlin, Go or anything else non-JS: what needs Node and what does not.agent-setup.md— agent setup & workflows in one guide: whatinitdoes, per-agent recipes (Claude Code / Codex / multi-agent / Cursor), non-interactive setup + fallback hooks, and CI.
Reference — "the exact flag, symbol, or rule"
cli.md— the full CLI: every verb and flag, the Claude Code plugin,lintvsaudit.commands-and-how-they-relate.md— the mental model: howaudit/lint/test/eval/initfit together, and why measuring "do my skills fire?" usesinit, notaudit.testing-matrix.md— every use case of the harness-testing API mapped to the tier that tests it, and what each tier costs.testing-api.md— the full harness-testing API: every predicate, assertion,check, matcher, and option (measureTriggerRate/runEval/ significance).spec-format.md— the typed.spec.tsformat (target, sections, rules, verified references) — the source of truth.linter-support.md— the 11 linters +generate-types/generate-schema.adapter-api.md— the adapter API reference: every port field, the conformance functions, the registry API.- Validation rules: the full matrix lives in the linting guide; each rule has a doc under
rules/. - Library entry points (grouped by concern so a future harness can sit beside the current one):
vigiles/linting— the compiler + reference verification (compileClaude,compileSkill, …).vigiles/spec— the spec builders (claude,enforce,guidance,file,cmd,symbol, …) and the module-augmentation target for generated types.vigiles(the package root) — the free testing surface: the harness/hook runners, thecheckvocabulary and the runner-agnostic assertions.vigiles/eval— everything that can spend money, every symbol prefixedpaid_:paid_runEval,paid_measure,paid_measureArms,paid_measureTriggerRate,paid_judge,paid_judged,paid_claudeEvalDriver.defineEvalis on the free root, not here, and that is the point: a*.eval.mjsfile DESCRIBES its eval andvigiles evalruns it, so importing one cannot spend. See eval files describe their eval.vigiles/claude-code,vigiles/codex— the per-harness adapters.vigiles/adapter— the adapter-authoring kit.
- API reference (generated) → — every exported symbol across all entry points, generated from the source. The hand-written guides here are the human-facing layer; this is the exhaustive symbol-level reference.
Explanation — "why it's built this way"
what-vigiles-catches.md— the taxonomy of problems vigiles handles: the prevented / caught / measured model, biggest-problem-first.comparison.md— before/after tables, the determinism breakdown, the flow diagram, and what vigiles composes with rather than replaces.sandboxing.md— what the sandbox isolates vs records (honestly): IO /rm -rf, the three network modes, tiers and limits.emit-channel.md—experimental_emitTool: a skill returns a typed result by calling a tool instead of ending its turn, which is how an INLINE skill can carry an output contract at all. Includes the measurements, and when to prefer the stableoutput:instead.faq.md— the front-door FAQ across all four layers.