skills/canon/skills/plan/SKILL.md
Strategic analysis and planning brief production. Evaluates build requests, challenges assumptions, considers alternatives. Used by the architect agent as a requirements interview fallback when PM conversation left gaps.
npx skillsauth add micherra/canon planInstall 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.
This skill defines the contract for producing a planning brief. Load it when you are the architect agent and discover requirements gaps that need user clarification.
Note: The planning brief template is deprecated. The architect uses this skill's interview protocol for requirements clarification, not for producing standalone planning brief artifacts.
This skill covers strategic analysis only. Do NOT do the following — they belong to other agents:
canon:synthesize. The requirements clarification names which runbook steps are needed (using vocabulary from references/runbook-vocabulary.md); the synthesis skill translates those into an executable runbook.design step. The brief identifies the problem and recommends an approach; it does not specify how modules are structured, which APIs to call, or how data flows through the system.Before producing the planning brief, evaluate whether the request warrants a requirements conversation.
Skip the interview when the request is fully specified: it names exact files, exact changes, no ambiguity about scope or behavior. The PM has already triaged trivial requests to the engineer — you only receive non-trivial work. Conduct at least one interview round for small and complex builds.
Investigate first. Use get_file_context, graph_query, and semantic_search to understand the request's real footprint before formulating any questions. Caller counts, dependency depth, existing patterns, and affected modules are all discoverable. Questions must be grounded in what you found.
Formulate questions as conversation. Write natural paragraphs that weave questions into context. Do not produce a numbered list of requirements questions or a form. Good example: "Looking at the codebase, I see that UserService.getProfile() has 14 callers across 3 modules. Your request to change its return type would affect all of them. Are you expecting to update all callers in this build, or should the change be backward-compatible? And on the topic of backward compatibility — the current return type is used in 2 API response schemas, so changing it could be a breaking API change. Is that acceptable?" Bad example: "1. What callers should be updated? 2. Is backward compatibility required?"
Report HAS_QUESTIONS. This is the architect's fallback when the PM requirements conversation left gaps. Include: a restatement of the goal in your own words, implicit assumptions with codebase evidence, scope boundary questions, and success criteria proposals when the request does not specify how to verify.
Handle re-spawn with answers. On re-spawn, read the user's answers from the HITL feedback in your spawn prompt. Either ask follow-up questions if answers revealed new ambiguity requiring investigation, or proceed to design incorporating the answers.
Check in with the user. After each round, ask if the requirements are clear enough to proceed: "Ready for me to proceed with design, or is there more to clarify?" The interview ends when the user says to proceed, not when a counter runs out.
Every planning brief must include all eight sections below. The output format follows templates/planning-brief.md (canonical path from project root). Write the brief to ${WORKSPACE}/plans/${slug}/planning-brief.md.
Intent: State the real outcome the user wants, not the solution they proposed. Distinguish observed (evidenced) from speculative (imagined) problems.
Quality bar:
graph_query, get_file_context, logs, user reports) when the problem is not self-evident. Apply agent-evidence-over-intuition: claims about user need must be grounded in observable facts, not assumed.Evidence: speculative — no logs or reports confirm this problem.Example wording: "Users cannot filter search results by date range. Evidence: 12 open GitHub issues tagged search-ux; no date-range parameter in the current API."
Intent: Name who benefits and who does not. Scope prevents over-building.
Quality bar:
Example wording: "Primary: end-users performing recurring search queries (daily). Secondary: admins auditing search usage (weekly). Out of scope: API consumers — the filter is UI-only in this brief."
Intent: Observable, testable conditions that define "done" without ambiguity.
Quality bar:
- [ ]) so the reviewer or tester can mark off each item.Example wording: "- [ ] Filtering by date range returns only results within the specified window (integration test). - [ ] Invalid date input returns a 422 with a human-readable message. - [ ] Filter state persists across page reload."
Intent: Create an explicit traceability contract between the user's original request and the runbook's scope. Every requirement the user stated or implied must be accounted for — silently dropping requirements is the failure mode this section prevents.
Quality bar:
covered, descoped, or partial.covered: cite the runbook step ID or acceptance criterion that addresses it.descoped: provide an explicit rationale (complexity, out of scope, deferred to follow-up).partial: explain what is covered vs what is deferred.Depth calibration:
covered. The section is still required but minimal.Disposition values:
covered — fully addressed by the runbook's acceptance criteria and stepsdescoped — deliberately excluded; rationale requiredpartial — partially addressed; explain what is and isn't coveredOrchestrator behavior: If all requirements are covered, the orchestrator proceeds silently to runbook approval. If any requirement is descoped or partial, the orchestrator surfaces them to the user as an explicit HITL decision before approval — this prevents silent scope narrowing.
Example wording: "| 1 | Support dark mode toggle | covered | implement step (task-1, AC-3) | | 2 | Persist preference across sessions | covered | implement step (task-2) | | 3 | Sync preference across devices | descoped | Out of scope for this brief — requires backend sync infrastructure; deferred to follow-up |"
Intent: Ensure the recommended approach is the result of deliberate choice, not default.
Quality bar:
Example wording for Alternative C: "Do nothing — users continue to filter manually post-export; churn risk increases as the dataset grows beyond ~5k rows."
Intent: The architect's single recommended path, grounded in the alternatives analysis.
Quality bar:
references/runbook-vocabulary.md so the synthesis skill can consume it directly. Example: "Recommended steps: research (codebase scope), design (API contract), implement (team dispatch, 2 tasks), test, review, context-sync, learn."Intent: Surface what cannot be resolved from the request alone — before the architect builds on a wrong assumption.
Quality bar:
[user] or [architect].agent-surface-assumptions: assumptions that you resolved yourself belong in the ASSUMPTIONS block; unresolvable items belong here.Example wording: "1. Should date-range filtering apply to all search result types or only document results? [user] — determines API scope. 2. Is timezone normalization required? [architect] — affects data model."
Intent: Confirm the cost is proportional to the benefit before committing resources.
Quality bar:
yes, no, or conditional with conditions.agent-evidence-over-intuition: cite measurable signals (issue count, usage data, error rates) rather than asserting value qualitatively.Example wording: "Cost: medium (3–4 days, 1 engineer). Value: high — resolves 12 open issues affecting ~40% of active users on a daily workflow. Proportion: yes."
Scale the brief to the complexity of the request. Never produce a full-length brief for a one-step fix; never produce a one-liner for a multi-wave epic.
A request that resolves in a single runbook step (e.g., fix a specific bug, context-sync a doc update).
fix — correct the off-by-one in src/search/filter.ts").covered. The section is still required but minimal.A request that requires research, implementation, and review (the standard fast-path or feature flow).
A request spanning multiple waves, multiple agents, or architectural change.
descoped or partial items are surfaced as an explicit HITL decision before the runbook is approved.The architect's job is to challenge the request before resources are committed. Apply the following four checks in order before writing the brief body:
Clarify requirements — Is the problem statement clear? If not, ask one or two targeted questions. Do not enumerate every possible ambiguity — only the ones whose answers change the approach or scope.
Challenge assumptions — What does this request assume about the current system, user behavior, or effort? List assumptions explicitly in the ASSUMPTIONS block (required by agent-surface-assumptions). Flag assumptions that are likely wrong based on graph_query or get_file_context results.
Evaluate alternatives — Apply the Canon preference ordering: configuration over new code; extension over rewrite; scoped fix over broad refactor. If a simpler path achieves the same outcome, the brief should REDIRECT to it, not GREENLIGHT the original.
Assess value relative to effort — Estimate wave count and agents involved. If the effort exceeds the observable value, REDIRECT or flag in Value Assessment. "We could build this, but X is likely faster and solves the same problem" is a valid finding.
The outcome field (GREENLIGHT / REDIRECT / OPEN_QUESTIONS) communicates the result of this discipline, not just the architect's preference.
${WORKSPACE}/plans/${slug}/planning-brief.md
Where:
${WORKSPACE} is the active workspace directory (e.g., .canon/workspaces/agent-teams-v2).${slug} is the kebab-case name of the build request.Follow templates/planning-brief.md exactly. Read the template before writing the brief (agent-template-required). The template is the authoritative section structure; do not add or remove top-level sections.
When the brief is revised (e.g., after user answers Open Questions), write the new version as a numbered file:
planning-brief-iter-1.md <- first revision
planning-brief-iter-2.md <- second revision
The base planning-brief.md always holds the latest approved version. Numbered iteration files are the audit trail.
The synthesized runbook (produced by canon:synthesize) references this brief by path. The Recommended Approach section of this brief is the primary input the synthesis skill uses to determine which runbook steps to generate. Phrase the recommended approach using step IDs from references/runbook-vocabulary.md.
Apply agent-evidence-over-intuition throughout:
graph_query, get_file_context, or semantic_search results. "The current API has no date-range parameter" must be verified, not assumed.search-ux" is.agent-simplify-before-extending).If evidence is unavailable for a claim, flag it in ASSUMPTIONS or Open Questions. Do not lower the evidence bar — omit the claim instead.
development
Requirements sharpening for build requests. Classifies request fuzziness into tiers (trivial, clear, fuzzy) and applies proportionate PM effort -- from pass-through to full creative divergence. Produces a sharpened-request artifact for architect hand-off. Used by the PM orchestrator.
data-ai
Procedural how-to for inter-wave handoff coordination: analyze execution reports, push back on weak verdicts, draft next-wave prompts.
development
Principle, convention, and agent-rule authoring. Covers creation, editing, and applying accepted learner proposals. Handles interview, examples, conflict detection, format validation, and save. Loaded by the writer agent.
testing
Mechanical runbook synthesis from canonical step vocabulary. Composes a step-by-step runbook from the design using only canonical step IDs. Validates step composition, enforces mandatory tail, and emits per-signal confidence. Used by the architect agent.