Claude Skill

scope

Triage front door for work that isn't ready to build. Classifies the dominant uncertainty and routes to one specialist skill. Use for 'let's scope this', '/scope', 'scope this out', 'not sure how to approach', 'grill me on this', 'stress-test this plan', or any request carrying r

LLM Mart · 0 points · 12 views 2 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download ConnorGriffin-skills-skills_workflows_scope-872be56.zip · 8 KB
Part of connorgriffin/skills — 25 skills

Install

skills CLI npx skills add https://github.com/ConnorGriffin/skills/tree/main/skills/workflows/scope
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install connorgriffin-skills@llmmart
Git git clone https://github.com/ConnorGriffin/skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole connorgriffin/skills collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Scope

Diagnose why work isn't buildable yet, route to exactly one specialist skill, and open a ledger the moment routing happens. Never do the specialist's work yourself — a correct route with no other output is a complete helper result; return it to the caller, which continues its own authorized workflow. For an epic child, every specialist instead uses untracked session scratch outside the child branch, discarded after the final order; it creates no scope ledger or docs/scope ledger. /epic alone owns the parent proposal, design, and tasks.

Routing table

Classify the dominant uncertainty — the one that, if resolved, makes the others tractable — and route to exactly one of:

  • Big and foggy, many interlocking decisions that block each other → epic. Mechanical bulk without an unsettled decision is not an epic route; hand-split it into serial build tickets.
  • A concrete plan or design exists in someone's head, untested → interview mode (references/interview.md, in this skill).
  • A written plan, work order, spec, or brief exists and needs stress-testing before anything is built → plan-review.
  • Missing facts answerable from docs or sources → research.
  • Only answerable by feeling it out in running code → prototype.
  • The dominant uncertainty is what a user-facing surface should look like → ui-craft, lock phase.
  • Mixed or unclear → ask the user one framing question, then route. One question at a time, always — never a menu of questions.
  • Nothing genuinely uncertain — the plan is grounded, the decisions are already settled, and any open point has an obvious default → say so in one line, name the defaults being assumed, and return control without asking anything. No ledger. Do not manufacture questions to justify the invocation; a caller may route here unconditionally, and "nothing to scope" is a correct helper result.

If the request already names a specialist by trigger phrase (a grill-style trigger names interview mode; stress-test this plan names plan-review; an epic map names epic), route there directly without re-diagnosing.

Ledger — required

Outside an epic child, at the moment routing happens, open a ledger before invoking the specialist:

  • Path: docs/scope/<slug>.md in the target project's repo when that path is writable; otherwise the session scratchpad. <slug> is a short kebab-case name for the work.
  • Sections: Decisions, Open questions, Spawned tasks.
  • Decisions get appended at the moment each one settles — never batched at session end. Each entry: the decision, a one-line why, and a disposition tag — → ADR, → issue, or inline.
  • The ledger is the durable session state. A fresh agent resumes by reading it, not by re-deriving context from chat history.

For an epic child, the remaining ledger, risk-contract, evidence, and exit rules are applied only through the stamped work order and parent epic authority; session scratch is never made durable.

Risk contract

For interview-mode work, and for any other bounded plan being declared ready to build, settle a risk contract before admission. An epic map whose work is not yet bounded does not need one.

Keep one ### Risk contract block under the ledger's Decisions section:

  • Must prevent: harmful outcomes the work may never produce.
  • Must recover: concrete failures that require automatic recovery.
  • Accepted failure: a concrete failure and the exact consequence the user accepts, such as a clear stop with manual recovery, skipped best-effort work, or degraded non-authoritative output.
  • Unsupported: inputs or operating conditions the work does not promise to handle.
  • Evidence owed: public-interface behaviors and named invariants that require tests or another explicit check.

Give the block one-line Why: and Disposition: fields rather than tagging every line separately. Default Must prevent to secret exposure, irreversible loss of authoritative data, and silent incorrect success; changing one of those defaults requires an explicit user decision. Default rare, recoverable failures to an Accepted failure with a clear stop and manual recovery, not automatic recovery.

Price the contract from concrete consequences, exposure, and recoverability. Audience size is evidence, not an assurance tier: one person's financial tool can be high-stakes, while a public toy can be disposable. Do not use a target test count. Evidence is owed only by supported behavior, a must-prevent outcome, an enforced invariant, or an observed regression.

At admission, copy the risk contract unchanged into the authoritative issue, plan, or brief that the implementation and reviews will use. The ledger remains the session record; the admitted artifact becomes the downstream authority. Do not declare bounded work ready while the contract is missing or still only in the ledger.

Exit protocol

The session is not done until every disposition is discharged:

  • Every → ADR decision has a real ADR written.
  • Every → issue decision has a filed GitHub issue.
  • The ledger's remaining-dispositions list is empty.

Report which dispositions remain open if the session ends early; do not report the scoping work as finished while any disposition is outstanding.

Files (skills)
  • agents
    • openai.yaml 228 B
      interface:
        display_name: "Scope"
        short_description: "Triage front door: classify the dominant uncertainty and route to one specialist skill"
        default_prompt: "Use $scope to figure out how to approach this before building."
      
  • references
    • interview-format.lock.md 2 KB
      # Lock manifest — interview question format
      
      Locked: 2026-08-05 by Connor Griffin (live iteration in a scoping session, 4 concepts compared rendered)
      Re-settled: 2026-08-06 by Connor Griffin (terms 1, 3, 6; rec line read as attached to the last option; 4 variants compared rendered in chat, V2 chosen)
      Mock: the fenced sample in interview.md rule 2 (medium is chat-rendered markdown; no HTML mockup exists)
      Supersedes: the unlocked format prose that rule 2 carried before this date
      
      ## Precedence
      
      This manifest wins for question rendering wherever interview mode runs; client-specific markdown rendering quirks never justify a format deviation. A higher-priority host restriction that forbids the form is the sole compatibility case: disclose it, present the proposal and substantive alternatives with costs in explanatory prose, then ask one concise stable-Q-ID plain question about the original unsettled decision. Do not ask a downstream detail that assumes the proposal was accepted. This exception retains the normal rendering whenever permitted.
      
      ## Terms
      
      | # | Term | Kind | Evidence expected |
      |---|------|------|-------------------|
      | 1 | Question line is bold, Q-numbered `**QN. …?**`, phrased as behavior | gate | rendered round |
      | 2 | Options and rec form one blockquote; options one per line as `A.` `B.` `C.`, 2-4 of them | gate | rendered round |
      | 3 | Rec is the quote's last line, separated from the options by a blank quote line: unindented, `↳` prefix, fully italic, why in the same sentence | gate | rendered round |
      | 4 | Rec reads visually subordinate to the options above it, never as attached to the last option | eye | rendered round |
      | 5 | Never tables, never bulleted options, no em-dashes, no answer-coaching lines ("answer like…") | gate | rendered round |
      | 6 | ≤7 lines per question; whole round sent as one message; stable Q-numbering across the session | gate | rendered round |
      
      ## Verbatim strings
      
      `↳ *rec X: …*` — the rec line's shape, including the arrow and the lowercase "rec".
      
    • interview.md 9.2 KB
      # Interview mode
      
      Routed here from `scope` when a concrete plan or design exists but is untested.
      Interview me relentlessly about every aspect of the plan until we reach a shared
      understanding. Map the plan as a **design tree**: every decision branches into the
      decisions that depend on it.
      
      Work the tree in **rounds**. The **frontier** is every decision whose prerequisites are
      already settled — everything I can answer now without either of us guessing at an
      earlier answer. An empty first frontier is a valid outcome: if mapping the tree finds
      no decision that is genuinely mine to make, say so in one line, list any defaults being
      assumed, and close — never pad the round with questions whose answers are already
      settled or obvious. Ask the whole frontier in one numbered round, then wait for my answers
      before continuing. Keep tightly coupled questions together so I can scroll through the
      round and dictate answers by number.
      
      After each response, record the settled decisions in the scope ledger, recompute the
      frontier, and ask the next round. If one answer could materially change whether or how
      another question should be asked, those questions are not on the same frontier: ask the
      dependency first and save the downstream question for a later round.
      
      Finding facts is your job; making decisions is mine. If a frontier question needs a
      fact from the environment, explore it instead of asking me. When subagents are
      available, dispatch fact-finding to a subagent and continue with the rest of the
      frontier; treat only questions downstream of that exploration as blocked. Put every
      actual decision to me.
      
      ## Voice rules — I have not read the code as deeply as you have
      
      1. **Phrase every question as app behavior, not code.** "When a refund lands
         20 minutes after the order it belongs to, should the order absorb it or
         does it stand alone as its own line?" — never "should `merge_events`
         dedupe by `source_event_id`?" A code term is allowed only as a one-line
         parenthetical when it genuinely disambiguates.
      
      2. **Hard budget: ≤7 lines per question, rendered in exactly this format
         (★ locked 2026-08-05, re-settled 2026-08-06, see interview-format.lock.md):**
      
         ```
         **Q1. Question, phrased as behavior?**
         > A. first option
         > B. second option
         > C. third option
         >
         > ↳ *rec B: one-line why*
         ```
      
         Each question is one visual unit: bold `Q`-numbered question line (`Q1`,
         `Q2`, … so answers can reference them), then a single blockquote holding
         the options (one per line, capital letters with periods, never bulleted,
         never in a table) and, after a blank quote line, the recommendation —
         unindented at the quote's left margin, led by ↳, fully italic, why in
         the same breath — visually subordinate to the options above it, never
         reading as attached to the last option. Options are 2–4, concrete, grounded in real examples where
         possible ("on June 30 this would have meant…"). No em-dashes anywhere in
         rendered questions. No preamble, no context essay, no restating what
         we've already agreed. Depth only when I ask for it. A verbose question
         makes me agree just to make it stop — that produces a confidently wrong
         spec, which is worse than no spec.
      
         If a higher-priority host restriction forbids that choice form, say that the host
         requires a plain question. State the proposed implementation and each considered
         alternative with its meaningful cost, then ask one concise question with the stable
         Q-number about the still-unsettled original decision. Do not ask for a downstream
         detail that presupposes the recommendation. Do not hide alternatives, assume the
         recommendation was accepted, or disguise a multiple-choice question as prose.
         Accept rejection, a free-form alternative, partial answers, and explicit delegation;
         wait for a required answer.
      
      3. **Accept shorthand answers; never coach them.** Use stable Q-numbers within
         the session and concise, distinct option labels so answers like "Q1 yes;
         Q2 B; Q3 rec" are unambiguous — and never print instructions on how to
         answer ("answer like…"); the format makes it obvious. Accept free-form or
         partial answers too; carry unanswered decisions into the next round
         without re-asking settled ones.
      
      4. **`explain` escape hatch.** If I say "explain", stop and produce a proper
         explainer for the current question — a diagram, worked example, or
         screenshot-illustrated HTML page — open it in my browser, then re-ask the
         question.
      
      5. **`ground it` escape hatch — and offer it proactively.** If I say "I'm not
         sure", "ground this in my real data", or similar, stop asking and run a
         **read-only** exploration against the real data: how often does this case
         occur, what's the actual impact, what would each option have done on my
         real history. Come back with a ≤6-line verdict — prevalence, impact,
         recommendation — and re-ask the question with the options now priced.
         When the honest basis for an answer is my data rather than my preference,
         don't demand an opinion: lead with "I can measure this — want me to?"
         Real data may be sensitive (a production database snapshot containing real
         customer records, say): explorations are strictly read-only, and never copy
         real data outside the repo's sanctioned paths. If the repo documents a
         fresh-snapshot pull for its real data, run that first and ground against
         the snapshot, never a live or authoritative database.
      
      6. **"I don't know" is an accepted answer.** Offer it where genuine. Convert
         it into either a `ground it` measurement or an explicit "decide at
         implementation, here's the default" note — never pressure a choice.
      
      7. **Check every question before sending — especially deep in a session.**
         Drift back into jargon happens precisely when the topic gets technical
         and the conversation gets long. Before each question, verify: ≤6 lines?
         Phrased as app behavior? Code symbols only in parentheticals? If the
         question seems to *need* the technical backstory to be answerable,
         that's not license to inline it — that's the `explain` artifact's job:
         offer it in one line instead. Rewrite until the checks pass; do not
         send the draft that fails them.
      
      ## Standards grounding
      
      When the plan touches code structure and the project has an engineering
      standards document (a charter, architecture guide, or design doc the repo or
      your global instructions provide), it is part of the frontier, not an
      implementation detail:
      
      - **Set the risk contract once the work is bounded.** Follow
        [scope's risk-contract schema](../SKILL.md#risk-contract). Ask one concrete
        behavior question after the audience, consequence, and recoverability are known;
        reopen it only for a failure with materially different stakes. Never ask an abstract
        "how robust should this be?" question. For example:
      
        **Q1. If this one-person tool hits a rare malformed-state case, what must happen?**
        > A. Fail clearly; I repair it manually
        > B. Preserve work and recover automatically
        > C. Support every reachable case without intervention
        >
        > ↳ *rec A: the state is rare, recoverable, and has one operator*
      
      - **Interface shape is a decision, not a byproduct.** If the plan adds or
        reshapes a module, put its front door on the frontier explicitly — what the
        caller sees, judged by the deep-module test (an interface far simpler than
        its implementation) — and load `/codebase-design` for the vocabulary when it
        is available. A plan that leaves interface shape to build time is how
        shallow modules happen. `design-it-twice` (`skills/tools/codebase-design/`) may be
        offered right there as a grounding step for this frontier question, the same
        way `ground it` grounds any other one.
      - **Edge cases are priced against the risk contract, not assumed.** An edge case
        earns handling only if it is reachable from real inputs (`ground it` measures
        this). Reachability does not automatically earn recovery: default a rare,
        recoverable case to visible failure and manual recovery. Make me overrule that
        default rather than making me strip speculative hardening out later.
      
      ## Docs as you go
      
      Load the `domain-modeling` skill at the start when available, and apply it throughout:
      the moment a decision crystallises that constrains architecture or behavior, append it
      to the scope ledger's `Decisions` section with its disposition tag (`→ ADR`, `→ issue`,
      or `inline`); the moment a fuzzy term gets sharpened, update the glossary
      (`CONTEXT.md`). Write these as they land, not in a batch at the end — a decision that
      only exists in chat is lost to the next session. Challenge terms against the existing
      glossary as you interview.
      
      ## Closing
      
      The helper result is ready when the frontier is empty: every branch has been visited and
      nothing remains silently assumed. End with a compact summary of every decision made
      (the shared understanding), flag anything deferred or defaulted, and confirm every
      ledger disposition — `→ ADR`, `→ issue` — has been discharged per scope's exit
      protocol. For bounded work, confirm the risk contract has been copied into the
      admitted issue, plan, or brief. Return that result to the caller, which continues its
      next authorized step. Do not enact the plan until I confirm we have reached a shared
      understanding.
      
  • SKILL.md 5.6 KB
    ---
    name: scope
    description: Triage front door for work that isn't ready to build. Classifies the dominant uncertainty and routes to one specialist skill. Use for 'let's scope this', '/scope', 'scope this out', 'not sure how to approach', 'grill me on this', 'stress-test this plan', or any request carrying real ambiguity about what to do next.
    ---
    
    # Scope
    
    Diagnose why work isn't buildable yet, route to exactly one specialist skill, and open
    a ledger the moment routing happens. Never do the specialist's work yourself — a
    correct route with no other output is a complete helper result; return it to the caller,
    which continues its own authorized workflow. For an epic child, every
    specialist instead uses untracked session scratch outside the child branch, discarded after the final order;
    it creates no scope ledger or docs/scope ledger. `/epic` alone owns the parent
    proposal, design, and tasks.
    
    ## Routing table
    
    Classify the **dominant** uncertainty — the one that, if resolved, makes the others
    tractable — and route to exactly one of:
    
    - **Big and foggy, many interlocking decisions that block each other** → `epic`.
      Mechanical bulk without an unsettled decision is not an epic route; hand-split it
      into serial build tickets.
    - **A concrete plan or design exists in someone's head, untested** → interview mode
      ([references/interview.md](references/interview.md), in this skill).
    - **A written plan, work order, spec, or brief exists and needs stress-testing
      before anything is built** → `plan-review`.
    - **Missing facts answerable from docs or sources** → `research`.
    - **Only answerable by feeling it out in running code** → `prototype`.
    - **The dominant uncertainty is what a user-facing surface should look like** →
      `ui-craft`, lock phase.
    - **Mixed or unclear** → ask the user **one** framing question, then route. One
      question at a time, always — never a menu of questions.
    - **Nothing genuinely uncertain** — the plan is grounded, the decisions are already
      settled, and any open point has an obvious default → say so in one line, name the
      defaults being assumed, and return control without asking anything. No ledger. Do
      not manufacture questions to justify the invocation; a caller may route here
      unconditionally, and "nothing to scope" is a correct helper result.
    
    If the request already names a specialist by trigger phrase (a `grill`-style trigger
    names interview mode; `stress-test this plan` names `plan-review`; an epic map
    names `epic`), route there directly without re-diagnosing.
    
    ## Ledger — required
    
    Outside an epic child, at the moment routing happens, open a ledger before invoking
    the specialist:
    
    - **Path:** `docs/scope/<slug>.md` in the target project's repo when that path is
      writable; otherwise the session scratchpad. `<slug>` is a short kebab-case name for
      the work.
    - **Sections:** `Decisions`, `Open questions`, `Spawned tasks`.
    - **Decisions** get appended **at the moment each one settles** — never batched at
      session end. Each entry: the decision, a one-line why, and a disposition tag —
      `→ ADR`, `→ issue`, or `inline`.
    - The ledger is the durable session state. A fresh agent resumes by reading it, not by
      re-deriving context from chat history.
    
    For an epic child, the remaining ledger, risk-contract, evidence, and exit rules are
    applied only through the stamped work order and parent epic authority; session scratch
    is never made durable.
    
    ## Risk contract
    
    For interview-mode work, and for any other bounded plan being declared ready to
    build, settle a risk contract before admission. An epic map whose work is not yet
    bounded does not need one.
    
    Keep one `### Risk contract` block under the ledger's `Decisions` section:
    
    - **Must prevent:** harmful outcomes the work may never produce.
    - **Must recover:** concrete failures that require automatic recovery.
    - **Accepted failure:** a concrete failure and the exact consequence the user accepts,
      such as a clear stop with manual recovery, skipped best-effort work, or degraded
      non-authoritative output.
    - **Unsupported:** inputs or operating conditions the work does not promise to handle.
    - **Evidence owed:** public-interface behaviors and named invariants that require tests
      or another explicit check.
    
    Give the block one-line `Why:` and `Disposition:` fields rather than tagging every
    line separately. Default `Must prevent` to secret exposure, irreversible loss of
    authoritative data, and silent incorrect success; changing one of those defaults
    requires an explicit user decision. Default rare, recoverable failures to an
    `Accepted failure` with a clear stop and manual recovery, not automatic recovery.
    
    Price the contract from concrete consequences, exposure, and recoverability. Audience
    size is evidence, not an assurance tier: one person's financial tool can be
    high-stakes, while a public toy can be disposable. Do not use a target test count.
    Evidence is owed only by supported behavior, a must-prevent outcome, an enforced
    invariant, or an observed regression.
    
    At admission, copy the risk contract unchanged into the authoritative issue, plan, or
    brief that the implementation and reviews will use. The ledger remains the session
    record; the admitted artifact becomes the downstream authority. Do not declare bounded
    work ready while the contract is missing or still only in the ledger.
    
    ## Exit protocol
    
    The session is not done until every disposition is discharged:
    
    - Every `→ ADR` decision has a real ADR written.
    - Every `→ issue` decision has a filed GitHub issue.
    - The ledger's remaining-dispositions list is empty.
    
    Report which dispositions remain open if the session ends early; do not report the
    scoping work as finished while any disposition is outstanding.
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related