A Claude Code plugin that turns feature ideas into reviewed specs, lets you explicitly hand off tasks to Claude on your own schedule, and has Claude actually carry them out — coding, research, writing, or analysis, whichever the task calls for — while keeping your own review and judgment central. Built around Anthropic's AI Fluency 4Ds framework:
| D | What it means | Where it shows up here |
|---|---|---|
| Delegation | Deciding whether/when/how to hand work to AI | /4ds:delegate — a standalone, run-anytime command that assigns a task's Owner and, if it's Claude's, actually acts on it. Nothing happens without this explicit step. |
| Description | Communicating goals clearly | Real back-and-forth brainstorming, not a form to fill out |
| Discernment | Critically evaluating AI output | Three distinct checks — see below — not just a code review |
| Diligence | Taking responsibility for outcomes | You mark things "Done," not Claude; the checklists are yours to work through |
Anthropic's own framing of Discernment splits it into Product (is the output good), Process (did the AI get there soundly), and Performance (was the interaction itself effective) — three different questions, not one code review. This plugin keeps them as three separate mechanisms rather than conflating them into a single "review" step:
| Discernment type | What it asks | How this plugin handles it |
|---|---|---|
| Product | Is the output itself good — accurate, coherent, relevant? | code-reviewer agent, via /4ds:discern — on-demand, checklist-driven, code-diff-focused |
| Process | Did the agent get there soundly — grounded, verified, logically consistent? | process-reviewer agent — runs automatically, every time, right after coder or writer finishes |
| Performance | Was Claude's behavior/communication during the interaction actually effective for you? | A direct reflective check-in table at the end of every /4ds:delegate run |
- It does not write your implementation for you when you're just
brainstorming.
/4ds:brainstormproduces a specification document — illustrative snippets only, never a full implementation. This is deliberate: it keeps you hands-on with the work you want to stay hands-on with, and conserves usage. - It does not decide who owns what, ever — not during brainstorming,
not implicitly. Every task starts
UnassignedandUnclassified, and stays that way until you run/4ds:delegate, whenever you're ready to make that call. - It does act on a task the moment you delegate it to Claude —
/4ds:delegateisn't just bookkeeping. It figures out what kind of task it actually is and dispatches to the right specialist:coderfor implementation,researcherfor fact-finding with citations,writerfor prose deliverables,analystfor investigating what's already in the repo, or handles it directly if none of those fit. - It stays engaged even when a task goes to you. Delegating to Human isn't just a database write — Claude checks for outstanding questions and will discuss the task with you, without doing any part of it itself.
- It tries to stop you from delegating a whole undecomposed feature in one
shot, to either party. A large, multi-part chunk of work handed off
wholesale is where things go wrong, regardless of who's doing it —
/4ds:delegateflags an oversized task before assigning it and offers to split it first, though the final call is still yours. - It doesn't treat "code review" as the whole of Discernment. Checking the artifact (Product) is only one of three checks — see above.
- It never decides something is "safe," "done," or "ready to ship." That judgment — Discernment and Diligence — stays yours throughout. Claude's job is to hand you concrete things to check, not to check them off for you.
As a team, via this repo as a self-hosted marketplace:
/plugin marketplace add <owner>/4ds
/plugin install 4ds@4ds-marketplace
(Replace <owner> with wherever this repo ends up hosted — fill in
homepage/repository in .claude-plugin/plugin.json once it's pushed.)
For local development/testing:
claude --plugin-dir ./4ds
/4ds:brainstorm [idea]
|
v
+-----------------------+
| Brainstorm together: |
| problem, goals, |
| approach |
+-----------------------+
|
v
+-----------------------+
| Big enough to split |
| into tasks? List them |
| -- Owner AND Type are |
| NOT decided here |
+-----------------------+
|
v
+-----------------------+
| spec-writer agent |
| writes |
| specs/<spec-name>.md |
| every task/feature = |
| Unclassified, |
| Unassigned |
+-----------------------+
|
v
+-----------------------+
| /4ds:delegate | <-- run anytime: right
| <spec-name> [task] | after brainstorming,
| | days later, whenever
| Scope too broad for | you decide
| one task? Flag it -- |
| offer to split first |
| via /4ds:refine (your |
| call either way) |
| |
| Assign Owner: Claude |
| or Human |
+-----------------------+
|
+---------------+----------------+
| |
Owner = Claude Owner = Human
| |
v v
+--------------------------+ +--------------------------+
| Classify Type, then | | Recorded as yours -- |
| dispatch: | | Claude stays engaged: |
| | | "outstanding questions?" |
| Coding -> coder agent | | discusses/points at |
| (worktree) | | context, does none of |
| Research -> researcher | | the work itself |
| Writing -> writer agent | +--------------------------+
| (worktree) | |
| Analysis -> analyst | |
| Other -> handled | |
| directly | |
+--------------------------+ |
| |
Coding/Writing only: |
+--------------------------+ |
| process-reviewer agent | |
| (Process Discernment, | |
| automatic, not optional) | |
+--------------------------+ |
| |
output + process-review you implement it yourself,
written, spec Status updated whenever you're ready
| |
+----------------+------------------+
|
v
+-----------------------+
| Performance Discernment| <-- always, every path,
| check-in (table) -- | end of every
| your read on how this | /4ds:delegate run
| interaction went |
+-----------------------+
|
v
+-----------------------+
| /4ds:discern | (Product Discernment,
| <spec-name> [target] | on-demand, code only --
| | non-code output gets
| code-reviewer agent | read manually)
| checks the diff |
| against the 10-item |
| checklist -- reports |
| findings, never a |
| verdict |
+-----------------------+
|
v
You decide what's actually
satisfied (Discernment and
Diligence stay yours)
|
v
+-----------------------+
| /4ds:refine |
| <spec-name> |
| |
| anytime: new info, |
| scope change, |
| mark Done |
+-----------------------+
|
v
(loop back into /4ds:delegate,
/4ds:discern, or another
/4ds:refine as remaining
tasks get worked through)
Start here for anything new. Claude has a real conversation with you about
the problem, goals, and approach (Description). If the feature is large
enough to have natural seams, it proposes breaking it into tasks — but it
never decides who implements them or what kind of task each one is. The
result is a spec written to specs/<spec-name>.md, with every task (or
the whole feature, if it wasn't split) set to Owner: Unassigned and
Type: Unclassified, plus a Product Discernment & Diligence checklist for
later. <spec-name> is a short, recognizable kebab-case name you both
agree on during the conversation (e.g. api-rate-limiting) — it's what
you'll type into every other command below to refer back to this spec.
> /4ds:brainstorm add rate limiting to the public API
Claude: What's driving this — abuse, cost, or fairness between callers? ...
[... conversation continues ...]
Claude: This has two natural pieces: a token-bucket limiter middleware, and
a per-key config store. I won't assign owners yet — delegate them
whenever you're ready with /4ds:delegate.
Claude: Wrote specs/api-rate-limiting.md — both tasks are Unassigned.
The actual Delegation act — and where the work actually gets done. Assigns or reassigns a task's Owner to Claude or Human, run any time, independent of when the spec was written: right after brainstorming, days later, or again if plans change.
Always operates on one well-scoped task, never a whole undecomposed feature if that can be helped — before it delegates anything, it looks at what's actually being handed off and flags it if the scope looks too broad for one person (or Claude) to safely take on in one piece, whether that's headed to a human or to Claude. You can proceed anyway if you want to; it's a heads-up, not a block.
If you assign the task to Human, that's not the end of the conversation — Claude stays engaged and asks if you have outstanding questions before stepping back, and will actually discuss the task with you (pointing at relevant code/context) without doing any part of it itself.
If you assign it to Claude, this skill immediately figures out what kind of task it is and dispatches to the right specialist:
| Type | Specialist | Notes |
|---|---|---|
| Coding | coder agent |
Isolated git worktree/branch, then process-reviewer runs automatically |
| Research | researcher agent |
Cites sources in APA format |
| Writing | writer agent |
Isolated git worktree/branch, then process-reviewer runs automatically |
| Analysis | analyst agent |
Read-only investigation of the repo |
| Other | Claude, directly | No dedicated agent — best judgment |
Reassigning a task that already has partial work prompts a check on whether its Status should reset too. Every run — regardless of Owner or Type — closes with a Performance Discernment check-in (see below).
> /4ds:delegate api-rate-limiting 1
Claude: Task 1 ("token-bucket limiter middleware") is Unassigned. Claude
or Human?
> Human
Claude: Got it — that's yours. Any outstanding questions before you get
started?
> what's the existing rate-limit config format?
Claude: [points to the relevant existing module] ...
> nope, good to go
Claude: Sounds good — it's recorded as yours in the spec.
[... Performance Discernment check-in table ...]
Product Discernment, on-demand. Runs the spec's Product Discernment & Diligence checklist against a code change — uncommitted diff, a branch from a Coding or Writing delegation, a task, or specific files. Works on code you wrote by hand just as well as Claude's output — this is meant to support your own review, not just police Claude. Reports findings by category with severity/confidence labels and file/line references; never a summary verdict. You decide which findings count as "addressed" before any checklist boxes get checked off, and Claude always asks first. (This checklist is code-diff-focused — for Research/Analysis/ Other output, review is manual: read the output file. This is Product Discernment only — Process Discernment already ran automatically if the task was Coding or Writing; see Agents below.)
Update an existing spec as understanding changes — new information, a
resolved open question, a scope change. Edits the file in place (never
regenerates it), and appends to its Revision History. Only you can move a
task's Status to Done; Claude never infers that on its own.
Seven subagents back the commands above. Each is general-purpose — none of
them are hard-locked to a single calling skill, so Claude can reach for
any of them mid-conversation whenever they're genuinely useful, not just
when /4ds:delegate is running:
| Agent | Role | Tools |
|---|---|---|
spec-writer |
The only thing that writes/edits specs/*.md — single source of truth for spec formatting |
Read, Grep, Glob, Write, Edit |
coder |
Implements a well-scoped coding task, isolated worktree | Read, Grep, Glob, Write, Edit, Bash |
code-reviewer |
Product Discernment. Reviews a code change against the checklist, read-only, on-demand (/4ds:discern) |
Read, Grep, Glob, Bash (read-only use) |
process-reviewer |
Process Discernment. Examines how coder/writer did their work — grounding, verification, reasoning consistency — read-only, automatic (runs right after coder/writer, not on-demand) |
Read, Grep, Glob, Bash (read-only use) |
researcher |
Gathers information (web + codebase), cites sources in APA format | Read, Grep, Glob, WebSearch, WebFetch |
writer |
Drafts prose deliverables grounded in given context, isolated worktree | Read, Grep, Glob, Write, Edit |
analyst |
Investigates existing repo data/logs/code, read-only | Read, Grep, Glob, Bash (read-only use) |
coder and writer use isolation: worktree since they write directly
to real project files — this means their runs never collide with your own
uncommitted edits, other concurrent delegations, or a teammate's work on
the same repo. process-reviewer only ever runs after one of those two —
researcher and analyst don't create/modify files in the repo, so there's
no process to check in the same sense.
specs/<spec-name>.md— one file per feature, the planning/tracking document.<spec-name>is the same short, kebab-case name you use with every command. If a spec with that name already exists,/4ds:brainstormwon't overwrite it — it points you to/4ds:refineinstead.outputs/<spec-name>-task-<#>.md(oroutputs/<spec-name>.mdfor a single-task spec) — where Research and Analysis deliverables land, and where Writing deliverables land unless the task clearly targets a real project file instead (e.g. "update the README").outputs/<spec-name>-task-<#>-process-review.md—process-reviewer's report, saved automatically after every Coding or Writing delegation.- Coding (and file-targeted Writing) deliverables land as commits on a dedicated branch in an isolated worktree, reported back to you with the branch name and path.
Every spec gets a fixed set of 10 categories — this is the Product check specifically (see "Discernment is three things, not one" above); Process and Performance are handled separately and don't live in this checklist. The first category is the one that matters most for Product Discernment specifically — evaluating the accuracy, coherence, and relevance of what the AI actually produced, not general code quality trivia:
- Spec conformance & AI self-report accuracy — does the diff actually
match what the spec asked for, and do any claims the coder agent made
about its own work (tests added, files changed, "completed") hold up
against what's really in the diff? This is where
/4ds:discerncatches an AI overclaiming or quietly drifting from the task. - Assumptions to verify
- Edge cases & failure modes
- Security considerations
- Performance & scale
- Data / compatibility / migration
- Testing gaps
- Rollback & reversibility
- Dependencies & integration points
- Observability
Claude fills these in with feature-specific bullets — never generic
filler — but never checks them off itself. /4ds:discern helps you
work through them; deciding they're actually satisfied is on you.
Everything is plain Markdown — fork it:
- Change the spec location: edit the
specs/<spec-name>.mdpath references inskills/brainstorm/SKILL.md,skills/delegate/SKILL.md,skills/refine/SKILL.md, and the template inagents/spec-writer.md. - Change the outputs location or naming: edit
skills/delegate/SKILL.mdSteps 10-11 andskills/code/SKILL.mdStep 3. - Add/remove Product checklist categories: edit the template in
agents/spec-writer.md(the single source of truth for spec formatting) and the category list inagents/code-reviewer.md. - Add/remove Process Discernment categories: edit
agents/process-reviewer.md. - Change the Performance Discernment table's dimensions: edit
skills/delegate/SKILL.mdStep 14. - Add/remove Task Types: edit the Type vocabulary and classification
guidance in
agents/spec-writer.mdandskills/delegate/SKILL.mdStep 8, plus add a matching agent underagents/if the new type needs one. - Adjust the task-breakdown size heuristic:
skills/brainstorm/SKILL.md, Phase 2.
Why explicit commands instead of Claude offering this automatically?
So it only ever runs when you actually want it to — disable-model- invocation: true on every user-facing skill guarantees Claude can't start
one of these flows on its own.
Why doesn't /4ds:brainstorm write real code?
Because the point is to keep you writing the code yourself where you've
chosen to, and to avoid burning usage on a full implementation before
you've even decided you like the approach.
Why is delegation its own command instead of happening during
brainstorming?
Because who implements a task, and how, is a decision that can be made on
its own timeline — you might not know yet when you're still brainstorming,
or you might change your mind weeks later. Baking it into brainstorming
forces a premature choice. /4ds:delegate keeps Delegation a distinct,
deliberate act you can invoke whenever you're actually ready to make that
call — including reassigning it later.
Why does delegating to Claude immediately act, instead of just recording the decision? Because splitting "decide" and "do" into two separate commands tangled the decision-making step with implementation details for no real benefit — delegating a task to Claude is asking Claude to do it. Assigning to Human doesn't do the work (that's genuinely yours), but it also doesn't just write a database row and vanish — see the next question.
Why does /4ds:delegate keep talking after assigning a task to me?
Because handing you a task and immediately going silent isn't actually
useful — you might have questions about the codebase, the approach, or
what the spec meant by something. Checking in and discussing before
stepping back costs little and catches misunderstandings early, without
crossing into doing the work for you.
Why does /4ds:delegate push back on delegating a whole feature at
once?
Because a large, undecomposed chunk of work handed off in one piece is
where things are most likely to go wrong — for a human or for Claude.
Smaller, well-scoped tasks are just more reliable to execute and to
review. This is a flag, not a hard rule — you can still proceed with the
whole thing as one delegation if you've weighed it and still want to.
Why isn't /4ds:code a command anymore?
It's still there as a distinct file (skills/code/SKILL.md) — it's just
no longer user-invocable (user-invocable: false). It's the internal
coding-dispatch process /4ds:delegate reads and follows for Coding-type
tasks, kept separate for clarity rather than inlined into delegate
itself, but not something you'd ever run standalone anymore since it
assumes delegation already happened.
Why is Discernment split into three agents/mechanisms instead of one
"review" step?
Because Anthropic's own framework splits it that way, and collapsing it
into a single code review loses two-thirds of the picture. code-reviewer
checking the diff tells you nothing about whether the agent that produced
it verified its own work or made unsupported leaps to get there (Process),
and nothing about whether the interaction itself — Claude's communication,
question-asking, responsiveness — actually served you well (Performance).
Keeping them separate means each stays legible and focused instead of one
agent trying to judge three different things at once.
Why does process-reviewer run automatically but code-reviewer
doesn't?
Process Discernment is cheap to always do and easy to lose track of if
it's optional — it's checking the work that already just happened, using
what's already in context (the agent's own report). Product Discernment
(code-reviewer) is heavier and often makes more sense once you've
actually decided you want to look closely at something, so it stays
on-demand via /4ds:discern.
Why do coder and writer get an isolated worktree but not researcher
or analyst?
Worktrees matter for agents that write directly to real project files —
that's where concurrent-edit collisions could happen. researcher and
analyst are read-only against the repo; their output goes to a fresh
file elsewhere, so there's nothing to collide with.
Why /4ds:discern and not /4ds:review?
Claude Code already ships built-in /review and /code-review skills.
Naming ours review would collide with those — discern avoids the clash
and names the actual D it supports.
Version 0.1.0. Contributions welcome — open a PR. Licensed under MIT
(see LICENSE).