From flow
Shape vague goals into verifiable task contracts before agentic execution. Use when starting any significant task, before /agentic, or when a goal feels unclear. Converts intent into machine-testable acceptance criteria.
How this skill is triggered — by the user, by Claude, or both
Slash command
/flow:shapeThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Turn intent into a **task contract** with verifiable acceptance criteria.
Turn intent into a task contract with verifiable acceptance criteria.
The difference between "mostly achieved" and "fully achieved" is whether "done" is a feeling or a test.
Project root:
!ls -1 2>/dev/null | head -15
Git state:
!git status --short 2>/dev/null | head -10
Stack signals:
!ls Gemfile Gemfile.lock package.json tsconfig.json Cargo.toml go.mod pyproject.toml mix.exs 2>/dev/null || true
Input: $ARGUMENTS
Parse the goal into:
Explore the codebase to ground the goal in reality:
Every claim you later put in the Context section must come from an action you took here — a file you read, a grep you ran, a command you executed. If you catch yourself wanting to write something you didn't actually verify, either verify it now or move it to an Open Questions for Executing Agent subsection in the contract so the agent knows to confirm before acting on it. Unverified claims dressed as facts are the single most expensive thing a contract can contain — the agent anchors on them and stops investigating.
When a claim rests on another file's behavior — a method's return
type, a rake task's DRY_RUN default, a callback chain, a constant's
value — paste the relevant source lines inline as a quoted code block
instead of paraphrasing. "Catch yourself before paraphrasing" is
self-policed and leaks; quoting replaces the self-check with a visible
artifact. Example, instead of:
"
Location#churchesfor a city returnsChurch.where(location_id: id)"
paste:
# app/models/location.rb:157-168
def churches(threshold: 30, boost: false)
scope = case category
when "city"
if search_boundary_type(threshold:) == :near
Church.near(coordinates, ...).or(Church.where(location_id: id))
else
Church.where(location_id: id)
end
Quoting forces the file to have been opened, surfaces branches a
paraphrase would elide (the :near branch above), and lets the executor
verify the claim without re-reading every cited file.
Identify the category:
| Category | Characteristics | Verification Style |
|---|---|---|
| Feature | New behavior | Test passes, UI renders, API responds |
| Fix | Broken behavior | Regression test passes, error gone |
| Refactor | Same behavior, better structure | All existing tests still pass + new structural checks |
| Config/Tooling | Developer experience | Tool runs successfully, output matches expectations |
| Migration | Moving from A to B | B works, A removed, no regressions |
Use AskUserQuestion to build a complete picture. The number of questions scales with the complexity discovered in Phase 1 — a config tweak might need 2 questions, a multi-file migration might need 10+.
AskUserQuestion supports 1-4 questions per call. Use multiple rounds. Each round should build on answers from the previous round — don't ask everything upfront if later questions depend on earlier answers.
Draw from these categories based on what's genuinely ambiguous. Skip any category where the answer is obvious from the codebase.
Scope — what's in and what's out:
Approach — how to get there:
Quality bar — what "done" means:
Constraints — hard boundaries:
Decision authority — autonomy boundaries:
Dependencies & ordering — what interacts:
Risk — what could go wrong:
Output the contract as a fenced code block in the conversation. Do not create files (no PLAN.md, no task-contract.md, nothing). The contract is portable — the user will copy it into their chosen execution method.
Format it as a fenced markdown block the user can copy directly into a new session, /agentic-v2, or headless mode.
## Task Contract: [title]
### Goal
[1-2 sentence outcome statement — what the world looks like when this is done]
### Acceptance Tests
[Generate per the Acceptance Test Principles below]
### Constraints
- OFF-LIMITS: [files/dirs/systems not to touch]
- BUDGET: [scope boundary — e.g., "only these 3 files" or "this module only"]
- DECIDE FREELY: [what the agent can choose without asking]
- ASK ME: [what requires human decision during execution]
### Context
[Key codebase facts the executing agent needs to know — existing patterns,
relevant files, test commands, conventions discovered in Phase 1]
Generate shell commands that return exit 0 when the task is done.
Rules:
DONE = linebundle exec,
npm test, pytest) over generic checks (curl, grep)Examples of good criteria:
bundle exec rubocop --format json | jq '.summary.offense_count' | grep -q '^0$'find app/views/admin -name '*.haml' | wc -l | grep -q '^0$'bundle exec rspec spec/models/user_spec.rb --format progressExamples of bad criteria:
Present the task contract inline (already displayed from Phase 3 — do not write it to a file) and ask: "Ready to execute this, or want to adjust?"
If the user says go, suggest the execution method:
/agentic-v2 with the contract as inputclaude -p "[contract]"Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub kurioscreative/skills --plugin flow