name: refine-initiative description: Turn a thin initiative into one a team could build from — read it and its feature definitions, investigate the architecture it lands in, interview the person who filed it until the picture is complete, then rewrite the initiative and every feature with the background and structure implementation needs. Use this whenever someone wants an initiative refined, fleshed out, scoped, designed, "made real", or checked before it starts building — or names an initiative and asks what it would actually take. Stops short of code-level plans: those belong on the tickets (/colormath:refine-ticket), and this is the layer above. argument-hint: [initiative key, e.g. CM-00007 — or enough of the title to find it] allowed-tools: Bash Read Grep Glob AskUserQuestion mcp__abacus__get_ticket mcp__abacus__update_ticket mcp__abacus__add_comment mcp__abacus__add_feature mcp__abacus__update_feature mcp__abacus__move_feature mcp__abacus__list_boards mcp__abacus__list_tickets
Refine the initiative named in "$ARGUMENTS" until the team could start building from it without coming back to ask what it meant.
An initiative is a direction, not a design. Someone had a shape in their head, wrote down a title and a handful of feature lines, and stopped — because at the moment of writing, the connective tissue was obvious to them. What is missing is everything that makes it buildable: which parts of the system it lands in, what already exists, which architectural decisions it has to live with, what it deliberately will not do, and whether those feature lines describe anything a person could actually pick up.
Two failure modes follow from that shape, and this skill exists to prevent
both. The first is the confident restatement — expanding four feature
lines into four paragraphs of fluent prose that add words and no information,
none of it checked against the codebase. The second is designing the code —
sliding down into file-by-file steps, function signatures, and schema DDL. That
is a different job at a different altitude, done per ticket, later, by
/colormath:refine-ticket. This skill's altitude is: what is being built, in
what shape, against what that already exists, and does it hold together.
The spine is read → investigate → interview → draft → confirm → write.
Investigate before interviewing, so the questions are concrete and few per
round. Refer to the initiative by its key (CM-00007) throughout.
1. Read the initiative, and check it is one
Call mcp__abacus__get_ticket. It takes the key directly; case and
zero-padding don't matter. If "$ARGUMENTS" is a title fragment, find it with
list_boards then list_tickets, and confirm which one you landed on before
doing anything else.
Check type is initiative. If it isn't, stop. Say what it is, and point
at /colormath:refine-ticket, which is the right tool for a ticket. Do not
quietly refine a feature as if it were an initiative — the deliverable is
shaped differently and would be wrong.
Check initiative_status.
designing— the normal case. The features are editable; carry on.building— the design is closed. Every feature write is refused by the server, and that is deliberate: the list is the record of what was agreed and the tickets have already been cut from it. Say so plainly rather than discovering it at the write step. You may still refine the initiative's own description if the user asks — offer that, name it as the only thing you can change, and get an explicit yes before writing. Never propose "just start a fresh initiative to get around the lock" as though it were free; the tickets already cut are the reason it is locked.
Then read all of it, and mean it: description, every feature definition in
order, every comment, the tickets already filed under it (get_ticket
returns the children — the board tools hide them), its release, its lane.
Comments are where decisions already made go to hide, and refining an initiative
into a shape that contradicts a decision recorded in its own thread is an
avoidable embarrassment.
If it already has a description or features, you are revising, not authoring. Read the prior text as evidence of intent.
2. Investigate the architecture before you ask anything
This is where most of the time should go, and it is what separates a refined initiative from a padded one. You are building the picture the filer assumed everyone had.
Start with the written decisions. AGENTS.md / CLAUDE.md, the ADRs in
docs/adr/, the rules files. These state the invariants the initiative must
live inside — layering, tenancy scoping, ordering rules, audit obligations,
authorization defaults, naming. An initiative that violates one of these is the
single most valuable thing to catch, and you catch it here or not at all.
Then the code the initiative lands in. Routes, services, models, templates, jobs, migrations, config. For each feature line, and for the initiative as a whole:
- Does it already exist? Fully, partially, behind a flag, or built and deliberately removed. Something already shipped is the most useful finding you can bring back.
- Where does it go? Which layer owns it, which existing service grows a method, which needs to be created. Name real modules.
- What does it force? A new table, a migration, a new column on a hot table, a new event type, a new permission, a background job, a third-party dependency, a deploy-ordering constraint. These are the things that make an initiative bigger than it looks, and the reason to find them now is that they change what the features should even be.
- What does it collide with? Work in flight, an adjacent subsystem that owns the same data, an invariant that would have to bend. Bending an invariant is sometimes right — but it is a decision, and it belongs in the write-up rather than in a surprise six weeks later.
- Is each feature implementable as written? Take each one literally and ask what you would do on Monday. A feature nobody can start from — "make it faster", "handle errors properly", "improve the UX" — is not a feature yet, and turning it into one is half of this skill's job.
- Do the features cover the initiative? Look for the gaps: the migration nobody listed, the permission model, the empty state, the thing that has to happen to existing data, the surface an agent reaches over MCP. Also look for the opposite — features that belong to a different initiative.
Keep, in your head and later in the write-up, a hard line between what you verified in the repo and what you inferred. They get labelled differently in the output.
3. Interview until the picture is complete
The interview is the point of this skill, and it is a conversation rather than a form. But it earns its cost only because step 2 happened first: you are asking someone to choose between real options, not to explain their own idea back to you.
Use AskUserQuestion with concrete options, recommendation first, and say why
it's your recommendation. Batch into rounds — up to four questions a round,
and let each round's answers reshape the next. Three rounds is usually plenty;
if you are still asking on the fourth, you are either designing the code (stop)
or the initiative is really several (say so).
The things that most often decide whether an initiative is right:
- The problem behind it. The title says what to build; it rarely says what goes wrong today, for whom, and how often. The obvious build frequently satisfies the title and misses the reason.
- What "done" looks like for the whole initiative — the observable that makes someone say it shipped. If nobody can name one, the initiative is a theme, and it should be split or narrowed.
- The scope edges. What is deliberately not in it, and where that work went instead. This is the single most valuable answer you will get.
- The forks step 2 surfaced. Every place two reasonable structures differ in a way someone would notice later: where state lives, what is derived versus stored, what happens to data already written, what is reversible.
- The architectural bends. If the initiative needs an invariant to move, put the choice to them explicitly, with the cost of each side. Never bend one silently.
- Ordering and dependencies. What has to exist first, inside the initiative and outside it — another team, a vendor, a migration that must land alone.
- Who it is for, when that is unclear: an internal tool and a customer surface are different products with the same title.
Don't ask what you can settle. Where a conventional default exists, take it and write it into the initiative as a stated assumption where it can be contradicted — cheaper for everyone than a question. And let the answers move you: interviewing and then writing the design you had already drafted is worse than not asking.
4. Draft the initiative, at the right altitude
Write for someone with none of the context, joining on Monday. The test for every sentence: does this help someone decide what to build, without telling them how to type it?
The initiative's description carries:
- The problem — what is true today, what is wrong with it, who it costs.
- What this initiative is — the shape of the change in a paragraph, in the system's own vocabulary.
- Where it lands — the real modules, services, tables and surfaces it touches, named. This is the section that proves you opened the repo.
- The decisions taken, including the ones taken in the interview and the options they beat. This is what stops the same argument happening twice.
- Constraints and invariants — the ADRs and rules it must live inside, by number, and anything it deliberately bends, with the reason.
- Out of scope — the adjacent, tempting work this is not doing, and where it went instead.
- Open questions and assumptions — everything unresolved, stated plainly. An initiative that admits two unknowns is worth more than one that silently guesses.
Stop short of code. No file-by-file steps, no function signatures, no DDL,
no test lists. If you catch yourself writing services/billing.py:212, you have
dropped an altitude — that belongs to the ticket, and
/colormath:refine-ticket will write it there later. Naming a module as the
home for a feature is the right level; naming a line is not.
Then each feature definition gets rewritten so that it is a thing someone could take. A good one has:
- a title that names a capability, not an activity — a reader should be able to tell whether it is done;
- a description covering what it includes, what it explicitly does not, the surface(s) it appears on, and the observable that means it works;
- enough background that whoever picks it up does not have to re-derive the initiative to understand their piece.
Put them in build order where one genuinely depends on another — the order is read as an argument, so make it one.
Where the investigation says a feature should not exist — already built, belongs to another initiative, or is really three — say so in the draft. Note that there is no way to delete a feature definition over MCP: recommend the removal, name it clearly, and let the user do it in the web UI. Rewriting an unwanted feature into a different one to avoid the awkwardness is worse than saying it plainly.
5. Show it, confirm, then write it back
Show the whole draft in chat before writing anything: the new description, each feature as it will read, the new order, the additions, and the removals you are recommending but cannot make. Refining is a proposal about someone else's intent; they get to correct it while it is still cheap.
Say explicitly what you are overwriting — description text and feature text you did not write — so the loss is a decision rather than an accident.
On approval, write in this order, so a failure part-way leaves something coherent:
mcp__abacus__update_ticketwith the newdescription. Pass only the fields you are changing; anything omitted keeps its value. Leaveplanandqa_planalone — an initiative is not implemented directly, and those fields belong to the tickets that come out of it.mcp__abacus__update_featurefor each rewritten feature. Both fields are replaced by what you send, so send the title even when only the description changed, or you will clear it.mcp__abacus__add_featurefor each new one.mcp__abacus__move_featureto put the list in the order you argued for. Positions are 0-based and clamp; move one at a time and re-read if you lose track.
Where the interview produced a decision worth keeping as a record — a rejected
approach, the reasoning behind a scope cut — add_comment is its home. The
description should read as the current intent, not its history.
Finish in chat with: the initiative key, what changed, what you verified against the code versus assumed, the open questions that survived, and the removals the user still has to make by hand. Then say what happens next — a human starts building when they are ready, which cuts a ticket per feature; you cannot do that and should not offer to.
Rules
- Check it is an initiative, and check its status, first. A ticket goes to
/colormath:refine-ticket. A building initiative is locked, and saying so early is the difference between a conversation and a failed write. - Investigate before you interview. Questions from a cold read are a survey; questions after an architecture pass are a decision.
- Stay above the code. Structure, layers, invariants, ordering — yes. File-by-file steps, signatures, DDL, test lists — no. Those go on the tickets later.
- Never bend an architectural rule silently. If the initiative needs one to move, that is a question for the user and a line in the write-up, by ADR number.
- Never invent an answer the user didn't give. Unresolved goes in as a stated open question or a stated assumption, visibly, where it can be contradicted.
- Don't implement anything. No branches, no code edits, no PRs, no tickets created by hand. The refined initiative is the deliverable.
- Don't start building. The transition is one-way, it locks the features and cuts the tickets, and it is a person's decision — there is deliberately no tool for it. If asked, explain and hand back.
- Say when an initiative shouldn't be built. If the investigation shows it is already built, already rejected by a recorded decision, or solves a problem that no longer exists, that finding is the deliverable.
Expert Next.js App Router
Developpement
Un skill qui transforme Claude en expert Next.js App Router.
Générateur de README
Developpement
Crée des README.md professionnels et complets pour vos projets.
Rédacteur de Documentation API
Developpement
Génère de la documentation API complète au format OpenAPI/Swagger.