plugins/build/skills/build-resolver/SKILL.md
Scaffold a root-level RESOLVER.md — a dual routing table (filing for writes, context for reads) plus an AGENTS.md pointer and a trigger-eval sidecar at `.resolver/evals.yml`. Use when the user wants to "scaffold RESOLVER.md", "create a resolver", or "add a routing table for filing and context".
npx skillsauth add bcbeidel/wos build-resolverInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Scaffold the three linked artifacts that make a resolver work: RESOLVER.md at the target repo root with a machine-managed region, a one-line AGENTS.md pointer, and a seeded .resolver/evals.yml. The skill is the workflow; authoring principles live in resolver-best-practices.md.
Also fires when the user phrases the request as:
Capture intent before any other workflow step. Write
.briefs/<slug>.brief.md from the user's intake. The slug is
resolver for a root-scoped resolver, or the target directory slug
for a nested resolver (e.g., plugins-resolver). Format follows
brief-best-practices.md:
five required H2 sections (User ask, So-what, Scope boundaries,
Planned artifacts, Planned handoffs) plus an empty Decisions log.
Pre-populate the two checklists from the planned workflow:
RESOLVER.md at the resolver root, sibling .resolver/evals.yml,
and the AGENTS.md pointer line./build:check-resolver (in regenerate mode,
with --run-evals).If .briefs/<slug>.brief.md already exists, read it and ask whether
to update (default yes) or abandon and recreate (default no). Update
means: append to Decisions log, refresh checklists if scope
materially changed, retain User ask and So-what unless the user
explicitly revises them. Do not overwrite the brief silently.
A resolver is right when:
type:)references: aloneRedirect when:
description; not a resolver concern_shared/references/ wiring → separate problem; not this pairWalk up from the target directory looking for an existing RESOLVER.md. The first ancestor that has one becomes the resolver root for this run.
<!-- resolver:begin --> / <!-- resolver:end --> markersAnnounce the mode, the resolver root, and what will change before proceeding. All subsequent steps operate scoped to the resolver root, not necessarily the repo root.
Walk the resolver root's subtree (depth 1–2) and collect:
type: research across files in .research/) or a consistent naming pattern — primary filing targets. Sample 1–3 files per directory to read their frontmatter description..git/, node_modules/, .cache/, dist/, build/) — out-of-scope candidates._shared/references/) — candidates for context-table bundles.YYYY-MM-DD-<slug>.<type>.md is the common shape).Report the scan summary: N directories detected, K tagged as filing candidates, M tagged ambient.
Re-read the brief's So-what and Scope boundaries before
elicitation. Filing rows that drift toward generic naming
(.misc/, .docs/) rather than the repo's actual conventions are
the lossy-compression failure mode the brief exists to counter.
Present autodetected filing rows as proposed content. For each, show: content type (inferred from a sample of frontmatter description fields, or asked of the user), location (directory), naming pattern. Ask the user to confirm, correct, or extend.
For directories the scan could not classify, ask directly: ".inbox/ has 4 files with no consistent naming pattern — filing target, or out-of-scope?"
The filing table is the one machine-generated part of the managed region. Capture final decisions per row.
Re-read the brief's So-what before eliciting context bundles. Generic task names ("when working on the project") are a smell; the brief should anchor the bundles to the specific recurring tasks named at intake.
This is human-provided. Ask:
"Name up to 5 recurring tasks whose reference-doc set should be bundled. Examples: 'authoring a hook', 'planning research', 'debugging the data pipeline'. For each, list the docs to load first."
Validate that each listed entry resolves to a file or directory. Directory entries are valid — the convention is to Glob the directory's naming pattern and read frontmatter to identify the right file. If a path doesn't resolve, flag and ask for a correction before writing.
Propose 10–20 eval cases drawn from:
Ask the user to confirm, edit, or add cases. A resolver shipped without evals is a decoration.
Show the full proposed output:
RESOLVER.md contents (filing + context + out-of-scope inside markers, notes section outside)AGENTS.md diff (one pointer line; placement proposed based on existing structure).resolver/evals.yml contentsChecklist verification. Before accepting the build, read
.briefs/<slug>.brief.md and confirm every item in Planned
artifacts is checked off. Unchecked items are a Review-Gate fail —
either the artifact was forgotten, or scope changed and the brief
needs updating with a Decisions log entry justifying the drop.
Planned handoffs may remain unchecked here; those land in Step 9.
Iterate on feedback. Hold the write until the user approves.
RESOLVER.md at the resolver root.resolver/evals.yml as a sibling under the resolver root (create .resolver/ if missing) — co-located so the resolver and its evals move togetherReport each file path.
In regenerate mode (Step 2), run /build:check-resolver --run-evals automatically after writing — the managed region changed, so the seeded prompts must be re-proven against the new routing. Report the eval pass rate alongside the audit findings. Paste the brief's So-what into the check-resolver invocation prompt verbatim, not as a .briefs/<slug>.brief.md pointer.
In fresh-scaffold mode, offer: "Run /build:check-resolver against the new resolver?" Run it on approval; pass --run-evals only if the user asks. Evals failing on the first run means the seeded expectations don't match the filing/context shape — fix the evals, not the resolver.
Step 0 captures a brief at .briefs/resolver.brief.md with the user's intake, planned-artifact and planned-handoff checklists.
Step 3 scan: finds .research/, .plans/, .designs/, .context/, .prompts/, plugins/build/_shared/references/. Detects frontmatter type: patterns or consistent naming in four of these. Flags .raw/ as ambient (no frontmatter pattern, no consistent naming).
Step 4: proposes 6 filing rows; user confirms 5, drops .prompts/ as out-of-scope.
Step 5: user names three recurring tasks — "authoring a rule", "authoring a hook", "planning research" — with 2–3 doc paths each.
Step 6: skill proposes 12 eval cases (5 positive filing, 3 positive context, 4 negative); user accepts 10, edits 2.
Step 7 Review Gate: presents all three artifacts plus brief-checklist verification. User approves.
Step 8 writes:
RESOLVER.md (42 lines).resolver/evals.yml (35 lines)AGENTS.md — inserts pointer line under existing "Context Navigation"Step 9: runs /build:check-resolver. All Tier-1 checks PASS; two Tier-2 WARN on thin context bundles ("authoring a rule" loads only one doc — consider adding primitive-routing.md). User applies WARN fix via repair loop.
</example>
RESOLVER.md alone when AGENTS.md exists and the pointer hasn't been approved..resolver/evals.yml empty./build:check-resolver (regenerate mode auto-runs it; fresh-scaffold
mode offers it), MUST invoke the chained skill via the Skill tool.
MUST NOT read its SKILL.md and inline a partial implementation. The
shortcut bypasses the chained skill's rubric and leaves no audit
trail that the proper skill was used. Paste the brief's So-what
into the invocation prompt verbatim — leaf and chained skills do
not navigate to the brief.Chainable to: /build:check-resolver (audits the three artifacts; runs evals; flags dark capabilities).
tools
Use when the user wants to "audit a help skill", "review my plugin index", or "verify my help-skill is up to date". Audits a plugins/<plugin>/skills/help/SKILL.md against the help-skill rubric — coverage, freshness, frontmatter fidelity, plus five judgment dimensions and a trigger-collision check.
tools
Use when the user wants to "scaffold a help skill", "add a /<plugin>:help command", or "build a plugin index skill", or wants to give a plugin an orientation surface that lists its skills and common workflows. Produces a SKILL.md at plugins/<plugin>/skills/help/SKILL.md.
tools
Audits pair-level integrity of a primitive-pair (the artifact `/build:build-skill-pair` produces) by walking the four required artifact slots — principles doc, `build-<primitive>/SKILL.md`, `check-<primitive>/SKILL.md`, and the `primitive-routing.md` registration — and reports cross-artifact issues a per-SKILL.md checker cannot see: missing principles doc, divergent principles paths between halves, absent routing registration, missing build→check handoff. Per-half structural compliance with the unified pattern (`check-skill-pattern.md`) is delegated to `plugins/build/_shared/scripts/check_skill_pattern.py`. Use when the user wants to "audit a skill pair", "review a primitive pair", or "validate the skill pair for X". Not for auditing a single SKILL.md — route to `/build:check-skill`. Not for re-distilling a stale principles doc — route to `/build:build-skill-pair`.
testing
Audit a root-level resolver — verify AGENTS.md pointer, managed-region integrity, filing-table coverage against disk, context-table actionability, and trigger-eval pass rate. Use when the user wants to "audit a resolver", "validate routing table", or "find dark capabilities".