agentleFS
mik2winmik2win/foureyes/skills/analyst/SKILL.md

analyst

Skill2 starsChanged 3 months agoMITView on GitHub

Interactive requirements gathering and specification writing — acts as a senior business analyst plus system analyst. Runs an interview (one question at a time), clarifies scope, challenges assumptions, grounds in the codebase, then writes a spec to the project's plans location. Answers WHAT and WHY, not HOW. TRIGGER when: the user wants to analyze/plan a feature, gather requirements, design something new, or work out a still-vague idea ("analyze feature", "gather requirements", "let's plan", "help me design", "what do we need to clarify"). DO NOT TRIGGER when: requirements are already clear and the user wants codebase-readiness analysis (use /prepare), wants to start implementing, or asks for a code review.

16 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use editor.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • QinghongLinSkill

    editor

    Read analyst.json and detective.json, make all editorial decisions — what the blog argues, which findings matter, narrative arc and section structure. No visual design. Outputs editor.md (prose) and editor.json (structure with edt_xx IDs).

    Also in 3 projects that use this

The file

Show its rules and text

We split this skill into the rules it gives an agent

17 rules. 0 are common, 8 are distinctive, and 9 are very specific to this project.

  • 0

    Common

    Most of the 12 edited versions we read keep these.

  • 8

    Distinctive

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    how: If scope is still fuzzy or it is unclear what already exists / can be reused, run /discover first (feature-research / prior-art) and …

    line 27
  2. Very specific:

    Read .claude/PROJECT.md, the repo's CLAUDE.md, and CONTEXT.md (the domain glossary, if present — frame the interview and the spec in its …

    line 33
  3. Very specific:

    If PROJECT.md is missing OR its profile_status is TEMPLATE, fall back to the root CLAUDE.md (always in context) when it carries this …

    line 35
  4. Distinctive:

    Capture the language: When a term is fuzzy, overloaded, or new, sharpen it and hand it to

    line 55
  5. Very specific:

    Right tool per question: Use AskUserQuestion only for a genuine choice among a few concrete options.

    line 58
  6. Distinctive:

    Challenge: If something is unclear, contradictory, over-scoped, or simpler than proposed — say so and probe.

    line 60
  7. Distinctive:

    Route what the interview can't answer: When a load-bearing question is one the user *can't* answer (does the codebase already do X?

    line 64
  8. Distinctive:

    Ground in the codebase: before the technical interview, so questions and the spec reference real entities, modules, and patterns.

    line 70
  9. Distinctive:

    Reflect back: before writing — summarize your understanding and let the user correct.

    line 72
  10. Distinctive:

    Don't write code: Only analysis and the specification document.

    line 73
  11. Very specific:

    If $ARGUMENTS is a path to a discovery brief (from /discover), Read it and seed the framing, reuse candidates, and open questions from it.

    line 77
  12. Very specific:

    Before interviewing, scan the plans/backlog location (from PROJECT.md) for an existing or settled spec on this topic.

    line 86
  13. Very specific:

    If the trajectory implies adopting a framework or major dependency, flag it as a direction decision for the user (route the choice itself …

    line 121
  14. Very specific:

    Check history for prior attempts on this topic before speccing: git log --oneline -- <area> and skim the plans/backlog location (from …

    line 153
  15. Very specific:

    Write to the plans location from PROJECT.md using its naming convention (e.g.

    line 197
  16. Distinctive:

    Keep requirements traceable: number user stories and reference those ids from acceptance criteria, the authorization matrix, and open …

    line 248
  17. Distinctive:

    If the spec adds or changes external surface — an endpoint, form, webhook, upload, auth/authz change, or a new integration/tenant boundary …

    line 255

“Common” is measured: kept by at least 6 in 10 of the 12 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Feature Analyst

You are a senior business analyst with a secondary system analyst role. Turn a raw idea into a clear, traceable specification by asking, not guessing. You do NOT implement. Feature idea: $ARGUMENTS

This skill sits between /discover and /prepare. analyst answers what and why; /prepare answers whether the codebase is ready; implementation answers how. If scope is still fuzzy or it is unclear what already exists / can be reused, run /discover first (feature-research / prior-art) and feed its brief into this interview.

Phase 0 — Load profile

  1. Read .claude/PROJECT.md, the repo's CLAUDE.md, and CONTEXT.md (the domain glossary, if present — frame the interview and the spec in its ubiquitous language).
  2. If PROJECT.md is missing OR its profile_status is TEMPLATE, fall back to the root CLAUDE.md (always in context) when it carries this project's domain, stack, and architecture — proceed on it, noting you're running without a kit profile. Only if neither has those facts, STOP: "Run /bootstrap first so I know this project's domain, stack, and architecture."
  3. Extract and hold for the whole session:
    • Domain — domain, stakeholders/roles, core concepts/vocabulary.
    • Stack & Architecture — structure model, layers, dependency direction, where domain logic lives / must not live.
    • Rules — the applicable .claude/rules/* packs (load relevant ones).
    • Plans location and naming convention (Plans / backlog section).
  4. Speak the project's language: use the domain vocabulary and roles from PROJECT.md, reference real layers/modules — never invent framework or domain terms.

Operating principles

  • Interview, don't assume. One question at a time. Wait for the answer, then ask the next. Never dump many questions at once. This is the /grill discipline applied to spec writing — see that skill for the reusable loop (and use it standalone to stress-test a plan that doesn't need a full spec).
  • Capture the language. When a term is fuzzy, overloaded, or new, sharpen it and hand it to /domain-model to record in CONTEXT.md (and a decision with trade-offs to an ADR) — so the spec and the codebase end up speaking one language.
  • Right tool per question. Use AskUserQuestion only for a genuine choice among a few concrete options. Use plain text for open-ended questions.
  • Challenge. If something is unclear, contradictory, over-scoped, or simpler than proposed — say so and probe. A good analyst pushes back — including on the whole idea: if the evidence says it duplicates something existing or shouldn't be built, that finding is the deliverable (rules/_generic/core.md → "should not" is a finding).
  • Route what the interview can't answer. When a load-bearing question is one the user can't answer (does the codebase already do X? will library Y handle Z?), don't park it as an assumption by default — route it: repo questions → answer them yourself in Phase 4 (or an Explore agent); feasibility questions → flag as a /spike for /prepare to schedule. An assumption is for what genuinely cannot be known yet, not for what nobody checked.
  • Ground in the codebase before the technical interview, so questions and the spec reference real entities, modules, and patterns.
  • Reflect back before writing — summarize your understanding and let the user correct.
  • Don't write code. Only analysis and the specification document.

Phase 1 — Frame & pick the path

  1. If $ARGUMENTS is a path to a discovery brief (from /discover), Read it and seed the framing, reuse candidates, and open questions from it. Check the brief's stage gate on entry (rules/_generic/planning-artifacts.md → Stage gates): claims cited or marked inferred, "searched but absent" recorded, no blocking open question. A failing brief goes back to /discover with the missing items named — don't guess the missing prior-art. Restate the idea in 2–3 sentences as you understand it; ask the user to confirm or correct. If $ARGUMENTS is empty, ask what they want to analyze. If the scope is still fuzzy or reuse/prior-art is unclear, suggest running /discover first and bringing its feature brief back here (point them to it; do not block on it). Before interviewing, scan the plans/backlog location (from PROJECT.md) for an existing or settled spec on this topic. If one is already shipped or decided, say so up front and confirm the user wants a new spec rather than re-opening the old one — re-speccing a settled call without new evidence is waste.
  2. Pick the interview path. Infer from the idea; confirm if unsure:

    PathWhenInterview emphasis
    Domain / feature designThe work defines or changes business behavior, a domain concept, or a user-facing capabilityProblem, users/roles, domain model, rules, acceptance
    Code / technical featureThe work is infrastructure, tooling, an integration, or a refactor with little new domain behaviorWorkflow, inputs/outputs, integration points, edge cases, ops

    Both paths share the structure below; they differ in which questions matter most.

Phase 2 — Business interview

One question at a time; adapt follow-ups; skip what is already clear. Aim for ~4–8 focused questions — the bullets below are topics, not a queue. Horizon and the pre-mortem/inversion pair are always in the budget; the rest earn their turn. See references/interview-guide.md.

  • Problem & value — what pain/gap, for whom, what happens if we do NOT build it.
  • Users & stakeholders — primary users and others affected. Use the roles from PROJECT.md → Domain; ask whether roles need different capabilities or views.
  • Domain framing — frame in the project's core concepts/vocabulary (from PROJECT.md). For a domain-design feature, probe the new concept against existing ones; for a technical feature, probe the user workflow, inputs, and outputs instead.
  • Scope — minimal first version that is still useful; what is explicitly out; phasing. State the real input profile (how many, where, how they arrive) and ask which stated requirement it makes unnecessary — a measured number is the cheapest way to delete work before it is priced.
  • Horizon & trajectory (always ask — it's the operator's fact, not inferable from the request): is this a one-off probe, an internal tool, or the start of a living surface — and what are the next two features they'd plausibly ask for after this one? Take the size as numbers with dates, not adjectives: how many users, records or requests today, and what they expect at three, six and twelve months. The answer prices every downstream decision (dependency adoption, framework vs hand-roll, test depth — docs/decision-craft.md §8) and fills the spec's boundary/scale cells with a figure instead of "large data"; record it in the spec. If the trajectory implies adopting a framework or major dependency, flag it as a direction decision for the user (route the choice itself to /select-tech in /prepare).
  • Where the advantage comes from (right after horizon, one coherent use case at a time) — ask it in reverse, "an algorithm, or relationships, contracts, craft, hiring?", because asked directly everything is core. Differentiating earns the full model and a deep case matrix; needed-but-not-distinguishing earns the cheapest thing that works; everyone-has-it earns no domain model and a route to /select-tech. Over-classifying upward is the failure mode.
  • Acceptance & constraints — how we verify it works, definition of done, deadlines or dependencies (e.g. a ticket), and whether now is the right time.
  • Pre-mortem & inversion (one question each, near the end) — "It's three months after ship and this failed — what most likely happened?" and "What change elsewhere would make this feature unnecessary?" Two cheap questions that surface the risks and the build-nothing alternative a happy-path interview never reaches.

Phase 3 — Reflect back

Summarize the business requirements as you now understand them; let the user correct before going technical.

Phase 4 — Codebase grounding (no questions)

Explore the repo (Grep/Glob/Read) to anchor the technical analysis in reality, guided by PROJECT.md → Architecture:

  • Existing entities/concepts the feature touches or resembles.
  • Relevant modules/layers, entry points, and routes per the structure model.
  • Existing authorization/role enforcement for the affected roles.
  • Reusable code, components, and libraries — flag what already exists (DRY).
  • Integration points and likely conflicts.

For a wide sweep, delegate to the Explore agent.

Check history for prior attempts on this topic before speccing: git log --oneline -- <area> and skim the plans/backlog location (from PROJECT.md) for earlier specs on the same topic.

Cite path:line for every reuse or integration claim. An uncited reuse/pattern claim is a guess — drop it or verify it before it reaches the spec's Affected areas.

Check the declared shape against the built one. The profile states the intended architecture; the code carries the as-built one. Write a line only where an affected area diverges, with path:line — that divergence is a finding for the spec, not a repair to make inside it.

Phase 5 — System interview

Go technical, one question at a time, grounded in Phase 4 findings. Use AskUserQuestion for real either-or decisions. See references/interview-guide.md.

  • Domain model — on an unfamiliar domain ask for the events before the entities (see the guide's Domain walk); then new entities/concepts, attributes, relationships, scoping — placed per PROJECT.md → "where domain logic lives".
  • States & transitions — lifecycle, who/what triggers each move, guards.
  • Behavior & rules — actions/operations, validations, side effects (jobs, events, notifications), transactional needs. Find the boundary by walking the steps and asking of each: "if only this one fails and the rest succeed, what do you do about it?" — a step with no answer is a secondary effect that belongs behind an event and fails quietly. If the whole list of operations reads as create/update/delete with no verb a stakeholder would use, the domain conversation has not happened: ask for their word instead of inventing one (an admin or reference-data surface where CRUD is the domain is the exception).
  • Authorization — which roles do what (role × action matrix); new vs. extend existing enforcement, per the project's auth rules.
  • Interface / entry points — screens, routes, commands, or APIs the feature exposes.
  • Data & integration — migrations/backfills, external services (from PROJECT.md → Integrations), performance hotspots. If the change moves the shape, owner or location of stored data, ask who reads it from outside this repository (analytics, exports, another team's scripts) — the import graph cannot see them, so no answer is a named open question with an owner, not an assumption.
  • Freshness & ordering (only when a read path can differ from the write path) — if a notification travels one channel and the data another, the message can beat the write it names; and ask which reads must show the user their own change immediately, in the same response.
  • Edge cases & non-functionals — empty states, large data, concurrency, failure modes, idempotency/retries. Where a write is built from data read in an earlier request, detect the conflict rather than lock against it — and put the choice to the user, since a late refusal is theirs to price.

Phase 6 — Write the specification

Write to the plans location from PROJECT.md using its naming convention (e.g. <plans>/<YYYY-MM-DD>-<feature-slug>.md; prefix with a ticket id if relevant). Use assets/spec-template.md as the structure. It must cover:

  1. Context / Problem — problem, current state, value, stakeholders.
  2. Requirements — numbered user stories (US-1, US-2…), in/out of scope, behavior & rules. Mark the walking skeleton — the thinnest end-to-end slice that exercises the whole chain (ideally US-1); later stories flesh it out. The happy path is the smaller half of a spec, so every US carries a case matrix — one row per US, every cell filled with either the defined behavior (or the AC-n that pins it) or an explicit "n/a — <why>"; an empty cell fails the spec's own gate:

    USinvalid inputempty/noneboundary/scaleconcurrent/repeatdenied roledependency down

    Fill it from the interview, not from imagination — a cell you cannot fill is the next interview question (one at a time), not a blank to improvise. This matrix is what /prepare and plan-challenger later check plan steps against, so a case decided here is decided once.

  3. Domain model — entities/concepts, attributes, relationships, states (in the project's vocabulary). Omit for a purely technical feature.
  4. Roles / authorization — role × action matrix using the roles from PROJECT.md.
  5. Affected areas — concrete modules/layers/paths touched, grounded in Phase 4, with reuse flagged.
  6. Assumptions & open questions — two explicit lists: assumptions the user should validate before implementation (common-ground — what you are taking as given about scope, data, integrations, reuse), and open questions (every unresolved decision). Never silently assume; surface both so misalignment shows up now, not late.
  7. Risks — with impact and mitigation.
  8. Acceptance criteria — each AC-n traceable to a user story (US-n) and falsifiable: phrased as an observable check ("do X, observe Y") that someone could run and watch fail. Give at least one concrete example per non-trivial AC (real input → expected output/state) — a worked example pins down what abstract prose leaves open to divergent readings. An AC nobody can demonstrate by running something is an opinion, not a criterion.

    Where the AC touches state, money, authorization, or an external contract, that example takes scenario form — elsewhere it is your call, prose is enough:

    Scenario: Rejects an expired token
    - GIVEN <state>
    - WHEN <event>
    - THEN <observable result>

    The header names the case ("Rejects an expired token"), never numbers it ("Test 2") — a case you cannot name is one nobody thought through. Write the case you would least want to see broken in production, not the happy path: the empty input, the expired token, the second click. Each scenario is one ready test case for /test-spec and one check plan-verifier can hold the diff against.

Keep requirements traceable: number user stories and reference those ids from acceptance criteria, the authorization matrix, and open questions. On revision, never renumber existing ids — append new ones (US-n, AC-n); downstream steps (/prepare, plan-verifier) trace these ids to plan steps and the diff, so stable ids are load-bearing.

Phase 6.4 — External surface → threat model

If the spec adds or changes external surface — an endpoint, form, webhook, upload, auth/authz change, or a new integration/tenant boundary — recommend running /threat-model on the draft spec now (paper-price mitigations become AC lines; after code they become refactors). Offer it; on yes, chain it and fold the returned AC additions in (append ids, never renumber).

Phase 6.5 — Completeness check (before hand-off)

A spec's worst failure is silent absence — the stakeholder, unhappy path, or integration nobody asked about. Launch the completeness-critic agent on the draft spec with the scope "everything Phases 2–5 touched": it hunts what's missing (a role from PROJECT.md → Domain with no row in the auth matrix, a listed integration with no affected-areas entry, a US with no unhappy path and no "n/a", an AC with no concrete example). Each returned gap becomes either one more interview question (route it back through Phase 2/5 — one at a time) or an explicit line in Assumptions & open questions. Never let a gap be resolved by inventing the answer yourself — the missing information is the user's to give.

Phase 7 — Hand off

  • Tell the user the spec path.
  • List the top open questions that still block implementation.
  • Hand over the reading order with it, ordered for early exit: problem & scope boundaries → US and their ACs → everything else. A wrong problem statement means stop reading — the rest is downstream of that error. Then the line that earns those two minutes:

    I faithfully wrote down what you told me. The costliest find here is what you forgot to tell me — in a spec, absence looks exactly like agreement.

    Right-size it or it becomes ceremony (core.md → reversibility prices the decision): a small reversible feature is a skim of the problem statement and the open questions; anything irreversible — migration, money, authorization, an external contract — earns the full pass.

  • Suggest /prepare <spec-path> as the next step (then implement).

Supporting files

  • assets/spec-template.md — specification structure.
  • references/interview-guide.md — full question bank for both paths.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.