From compass
How to score the four context dimensions, compose and constrain a route, and keep an honest de-scope ledger. Triggers during Frame, whenever the Needle runs, and whenever a task is re-framed mid-flight.
How this skill is triggered — by the user, by Claude, or both
Slash command
/compass:adaptive-routingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill is the craft behind `routes/router.md`. The router file is the
This skill is the craft behind routes/router.md. The router file is the
rubric; this is how you actually use it well.
You are not picking a process. You are computing one. The four dimensions are
four independent questions, and the route is their composition — heavier where
they read high, lighter where they read low. The composition is biased by
the routing strategies and bounded by the routing guardrails, both in
governance/routing-policy.md. The five reference routes
(Express/Standard/Expedition/Hotfix/Spike) are shapes the composition tends to
land near, not boxes to sort into.
/compass:init is optional. The framework ships governance/ with active
default guardrails, default strategies, and a default routing policy. If a
project has not run init and has no project-specific additions, that is a
valid, complete governance state — you route against the shipped defaults
exactly as you would route against an extended set. "Frame-and-go on day one"
is honest precisely because the defaults are real, in-force content. Never
treat an un-extended governance/ as a missing prerequisite.
Blast radius — consequence, never effort.
critical: can this lose data, lose money, breach auth/privacy,
or resist a clean rollback? If yes, it is critical even if it is one line.trivial: is the worst case cosmetic, instantly obvious, and
instantly reversible — with no data, money, auth, or other team touched?Terrain — new code, or old code, and is the old code mapped?
brownfield-unmapped is not a judgement of code quality — it means the
behaviour is not written down as scenarios. It triggers a routing guardrail
floor: blueprint-distillation must run. Do not route around it.Magnitude — the dimension humans get wrong most.
atomic is one file and no design decision;
standard has one or two design decisions; large has real architecture and
is plausibly parallelisable.Intent & role — the actual outcome, not the literal request.
brief.md if it exists. "Add a CSV export" under a brief that says "let
finance self-serve" may need filters, scheduling, and permissions — the
literal request under-describes the intent.If you cannot justify a reading in one honest line, ask the human. An unjustified guess is worse than a question, every time.
Go phase by phase, not route by route:
plan.md / plan + distribution map.Name the nearest reference route for shared vocabulary, then list deviations
explicitly. "Standard, but Verify also runs security because blast radius is
cross-cutting" is a correct, expected output — not an exception.
The composition step is where the routing strategies apply. They bias the
candidate — default_shapes says which reference shape a reading leans toward,
and the tie-breaking biases settle the close calls ("when magnitude is
unclear, estimate up"; "prefer the lightest route that still clears the routing
guardrails"). A routing strategy is a starting point, not a verdict: depart from
one when the task warrants, and record the departure in route.md.
When intent reads exploration, the composition leans toward Spike — the
escape hatch for work you cannot yet frame as delivery. Compose toward Spike
when all three hold: intent is genuinely exploration not delivery, the work is
a question rather than a known change, and nothing irreversible is in scope.
What is different about a Spike composition:
.compass/work/<task>/.spike marker file. The Navigator writes that marker
when it composes a Spike route; without it the hook will still block.main, because it has no path to main at all.auth, payments, personal-data, migrations) is not a Spike — the
routing guardrail floors force those to Expedition regardless of intent.After composing — the candidate already biased by the routing strategies — run
it through the routing guardrails in governance/routing-policy.md in this
order: floors raise it, caps limit it, immovable_gates are stapled
on, blocking role_rules add artifacts and phase blocks. Record every routing
guardrail that fires and quote its rationale in route.md. Never apply a
constraint silently — a reader of route.md must see which bounds were active.
The split is the whole point: routing strategies bias what the Needle reaches
for, routing guardrails bound what it is allowed to do. A human can override a
reading or a strategy-biased choice per-task; a human cannot override a routing
guardrail per-task — changing one means amending
governance/routing-policy.md.
This is the heart of the skill. Every phase or check the route collapses or skips earns a row in the de-scope ledger, and each row needs an explicit "safe to skip because…" line.
critical blast radius
cap pins an Expedition to one worktree, record that as cap-driven in the
topology section, not in the de-scope ledger. The ledger is for things the
route chose to skip, not things a guardrail removed.route.md makes this visible; do not do it.route.md.Re-framing mid-task is a normal event, not a failure. Trigger it when:
touches: tag surfaces late (you discover the change reaches auth).Run /compass:frame --reframe: re-score the dimensions, write a new route.md
revision, record what changed and why. A route quietly outgrown is the failure;
a route honestly re-framed is the system working.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub jed72/compass --plugin compass