中文 EN

let-it-go Usage Guide

AI-driven development workflow — from PRD to shipped code

github.com/9Ashwin/let-it-go

Usage Guide — Six-step closed-loop development workflow: Plan, Design, Break Down, Implement, Review, Ship.

Contents

1. Overview

let-it-go is a set of development-workflow skills: 27 skills that take a change from "an idea" to "shipped code" through standard steps — requirements, design, breakdown, implementation, review, shipping — each owned by one skill.

It enables AI agents to act like experienced engineers — from understanding requirements, breaking down tasks, writing code, reviewing quality, to final submission and merge — autonomously completing the entire process. You just describe the feature idea, and the workflow handles the rest.

Entry point: can't remember which skill to use? Type /ask-flow and describe where you are (a half-formed idea, a pile of inbound issues, code that won't work, a long implementation). It picks the next step and starts it, stopping only when two routes are genuinely close or the next step crosses the human judgement boundary (opening a PR, merging, product acceptance).

/ask-flow

Skill routing (entry point): routes, then starts that step

  • Routes on the skill map, then reads that skill's body and follows it
  • Stops only when two routes are genuinely close or the next step crosses the human judgement boundary (opening a PR / merging / product acceptance)
  • Model-invocable: no disable-model-invocation

/prd

Requirements document generation

  • Clarifying questions → structured PRD with verifiable acceptance criteria
  • Reviewed and confirmed, then saved to tasks/prd-*.md
  • Hands off to /to-issues for breakdown

/to-issues

Break a PRD into vertical-slice Issues (the body is the contract)

  • Vertical slices (tracer bullets), not layers
  • Explicit blocking edges, blockers created first
  • Supports GitHub / Local, standalone

/triage

Turn raw inbound issues into executable cards

  • Reproduce / understand → assign a role (ready / needs-info / bug-confirmed / duplicate / wontfix)
  • Fill the ready ones out into agent-ready cards
  • Inbound items only — never triage /to-issues output

/goal

DSH goal command

  • Human types it at the prompt; the model side is create_goal / update_goal
  • Persisted objective with autonomous rounds
  • Runs only in a direct top-level human turn; not a skill, not a pipeline step

/review-it

Two-axis code review closeout

  • Spec axis: did the diff do what was asked (missing / extra / wrong)
  • Standards axis: code quality across 8 dimensions
  • Reported separately; runs once per wave / batch

/ship-it

Commit → PR → Merge → Close

  • The sole producer of the PR body
  • Squash merge + delete branch
  • Writes the implementation summary comment once (decisions / deviations / tradeoffs / open questions) and closes the card

/understand

Interactive review of fresh AI-generated changes

  • Scan uncommitted / branch changes into a webpage
  • File tree + syntax-highlighted diff + per-segment notes
  • Each segment shows its requirement and a plain-language explanation

/svg-diagram

SVG diagramming conventions + mechanical lint (vendor)

  • Layout / connectors / arrows / palette / CJK font stack
  • XML escaping, overlap and clipping hard rules
  • Ships tools/svg-lint (12 checks)

/refactor

Expert-level code refactoring (audit / fix modes)

  • audit reports only — no edits
  • fix (default) refactors via the Fowler catalog
  • 22 code smells + 40+ techniques + safety protocol

/modern-go

Go code modernization

  • 35+ gofix-style transformation rules
  • Full coverage Go 1.0 to 1.27+
  • Auto-detect version + safety guard

/walkthrough

Pre-ship walkthrough (evidence only)

  • Change summary + real verification output
  • Visual proof of the demo path
  • Risks + manual acceptance status (PR body and merge checklist belong to /ship-it)

/loop-it

Automated batch issue implementation

  • Fetch issues → dependency sort → implement inline → record evidence → supervisor check → commit; one review + one walkthrough + one ship at batch end
  • Checkpoint/resume with .loop-state.json
  • Structured error recovery (10 error classes)

/to-design

PRD to design document (Go proposal style), the conditional main-line step 2

  • Written only when the change spans two or more services, alters the data model or a migration, or touches two or more external contracts; skipped otherwise
  • The Markdown proposal is the main artifact
  • HTML is an optional rendering layer
  • Proactively lists rejected alternatives + reasons

/graph

Parallel task-graph execution (DAG + supersteps)

  • Task/PRD → DAG → layered into superstep waves
  • Independent nodes per wave implemented concurrently by subagents
  • Each node implements and commits in its own worktree; the wave reviews, writes the walkthrough and ships once

/implement

The inline closed loop for a single unit

  • Implement inline → prove with project gates → /review-it → /ship-it
  • No worktree, no subagent, no wave branch
  • One unit only; never expand scope

/test-first

Reference for the red → green loop

  • Good tests assert behaviour through public interfaces
  • Agree the seams with the user up front
  • Three anti-patterns + loop rules (red before green, one slice at a time)

/diagnose

The debugging loop for hard bugs

  • Get a command already red on this bug before theorising
  • Minimise → 3–5 falsifiable hypotheses → one variable at a time
  • Regression test at the right seam; it does no review / ship

/conflict

Resolve an in-progress merge / rebase

  • Recover both sides' intent → resolve hunk by hunk (keep both when possible)
  • Run the project gates and finish the operation
  • Always resolve, never --abort

/find-skills

Discover and install skills from the ecosystem (vendor)

  • For "is there a skill that can do X?"
  • Searches the open agent skills ecosystem
  • Source: vercel-labs/skills

/frontend-design

Front-end visual design direction (vendor)

  • Aesthetic direction for new or reshaped UI
  • Typography and visual choices
  • Avoids choices that read as templated defaults

/humanizer-zh

De-template Chinese prose (vendor)

  • Cuts filler, repetition and templated phrasing
  • Keeps facts, certainty and the author's voice
  • Polishes text; it does not judge AI authorship

/pptx

Read, write and edit PowerPoint decks (vendor)

  • Create, parse and edit .pptx / .potx
  • Templates, layouts, speaker notes and comments
  • Split or combine slide files

/skill-creator

Create and improve skills (vendor)

  • Write a skill from scratch, or optimise one
  • Run evals and variance analysis
  • Tune a description for triggering accuracy

/ui-ux-pro-max

Searchable UI/UX design knowledge base (vendor)

  • Styles, product palettes and font pairings
  • UX guidelines, icons, GSAP presets, chart types
  • Implementation guidance for 22 stacks

/web-design-guidelines

Review UI against the Web Interface Guidelines (vendor)

  • Check UI code for accessibility and interaction rules
  • Audit a design against established guidance
  • Source: vercel-labs/agent-skills

/resume-optimizer

Résumé audit and optimization (vendor)

  • Rewrites duty-style lines into achievement-style ones with quantified results and business value
  • Tunes keywords, project emphasis and career narrative to the target job description
  • Produces a revised draft plus an action list, and a one-page version on request

/teach

Teach a concept by teaching it (vendor)

  • Treats the current directory as a teaching workspace, with learning state kept in files
  • One self-contained HTML lesson per unit, grounded in the mission in MISSION.md
  • Uses learning-records to find the zone of proximal development and runs across sessions
Skill groups: the 27 skills split into three buckets by the role they play — flow (the pipeline itself, 10), bonus (what you reach for mid-flow because something broke, because quality is at stake, or because you need a non-code artifact, 7), and vendor (verbatim third-party copies pinned to a commit by the manifest, 10).

2. Installation

Two install routes — pick one, not both.

Option 1 (Recommended): Install as a skill directory

# Recommended — install all skills into ~/.agents/skills
npx skills add 9Ashwin/let-it-go

# Or install specific skills — flow (10)
npx skills add 9Ashwin/let-it-go --skill ask-flow
npx skills add 9Ashwin/let-it-go --skill prd
npx skills add 9Ashwin/let-it-go --skill to-design
npx skills add 9Ashwin/let-it-go --skill to-issues
npx skills add 9Ashwin/let-it-go --skill implement
npx skills add 9Ashwin/let-it-go --skill loop-it
npx skills add 9Ashwin/let-it-go --skill graph
npx skills add 9Ashwin/let-it-go --skill review-it
npx skills add 9Ashwin/let-it-go --skill walkthrough
npx skills add 9Ashwin/let-it-go --skill ship-it

# bonus (7)
npx skills add 9Ashwin/let-it-go --skill test-first
npx skills add 9Ashwin/let-it-go --skill triage
npx skills add 9Ashwin/let-it-go --skill diagnose
npx skills add 9Ashwin/let-it-go --skill conflict
npx skills add 9Ashwin/let-it-go --skill refactor
npx skills add 9Ashwin/let-it-go --skill modern-go
npx skills add 9Ashwin/let-it-go --skill understand

# vendor — verbatim third-party copies (10)
npx skills add 9Ashwin/let-it-go --skill svg-diagram
npx skills add 9Ashwin/let-it-go --skill find-skills
npx skills add 9Ashwin/let-it-go --skill frontend-design
npx skills add 9Ashwin/let-it-go --skill humanizer-zh
npx skills add 9Ashwin/let-it-go --skill pptx
npx skills add 9Ashwin/let-it-go --skill resume-optimizer
npx skills add 9Ashwin/let-it-go --skill skill-creator
npx skills add 9Ashwin/let-it-go --skill teach
npx skills add 9Ashwin/let-it-go --skill ui-ux-pro-max
npx skills add 9Ashwin/let-it-go --skill web-design-guidelines

# Global install (available for all projects)
npx skills add 9Ashwin/let-it-go -g

# Update from the same source later
npx skills update -g

# Install to one agent only (universal = the ~/.agents/skills location above)
npx skills add 9Ashwin/let-it-go -g -a universal

Skills land in ~/.agents/skills. This is the least-effort route: nothing to change in a profile, and it applies to every profile.

npx skills scans recursively and flattens skills/<bucket>/<skill> into ~/.agents/skills/<skill> on install — a skill root is scanned only one level deep, so the flattening is required. The picker groups the 27 entries into Let It Go Flow / Bonus / Vendor using the root .claude-plugin/marketplace.json; what lands in ~/.agents/skills is still flat, so the bucket exists in the repo only. Copying by hand means doing the flattening step yourself:

# flattened, not the bucket
cp -R <let-it-go>/skills/flow/graph ~/.agents/skills/graph

Option 2 (Optional): Install as a bundle

# Optional — install as a DSH bundle (config-only package)
dsh plugin --profile web add -w github:9Ashwin/let-it-go

# Pin a commit for production instead of tracking the default branch
dsh plugin --profile web add -w github:9Ashwin/let-it-go#<sha>

# Verify the bundle is registered in the profile
dsh --profile web --dump-config | grep -A3 let-it-go
Bundle install notes:
  • -w is required because the DSH profile is treated as a pnpm workspace root — without it, pnpm 9 refuses to add the dependency and reports ERR_PNPM_ADDING_TO_ROOT.
  • The package's dsh.bundle declaration makes dsh append it to the profile's bundles layer; the skills are then served by a provider shipped inside the package, so they do not depend on ~/.agents/skills being one of the skill roots. That patch lists skills/flow, skills/bonus and skills/vendor as three separate skill roots — a root is scanned one level deep, so a bucket missing from the patch disappears wholesale.
  • The package is a config-only bundle (skills + config, no native build step), so no allowBuilds grant is needed.
  • Pin a commit for production with #<sha> so an update can't shift behavior under you.
  • Verify with dsh --profile web --dump-config | grep -A3 let-it-go.
  • Working from a local checkout: dsh plugin --profile demo add -w /path/to/let-it-go.
Which route to pick: faces like Web get their skill directory from a shipped preset, and ~/.agents/skills is already inside its skill roots — so Option 1 is enough when all you want is the skills: the two sources are de-duplicated nearest-layer-first, and the directory copy wins over the plugin-package copy. Installing both duplicates nothing; on the Web face the bundle simply loses to the directory. The bundle's added value is shipping a preset with the package — a preset can decide both which skills an agent mounts and whether its subagents carry the skill directory (toolFilter) and a persona, turning "how this workflow runs" into first-class deployment config. Conversely, on a face with no preset mounted (some minimal profiles), the bundle is what makes the skills visible at all.

Prerequisites

ToolPurposeInstall
npxnpm package runner (recommended route)Bundled with Node.js
ghGitHub CLI (Issue/PR operations)brew install gh && gh auth login
dshDeepSeek Harness CLI (Option 2 only)npm install -g @deepseek-ai/dsh
Tip: After installation, type /ask-flow, /prd, /to-design, /to-issues, /implement, /loop-it, /graph, /review-it, /walkthrough, /ship-it (flow, 10), /test-first, /triage, /diagnose, /conflict, /refactor, /modern-go, /understand (bonus, 7), /svg-diagram, /find-skills, /frontend-design, /humanizer-zh, /pptx, /resume-optimizer, /skill-creator, /teach, /ui-ux-pro-max, /web-design-guidelines (vendor, 10) to directly invoke the corresponding skill. /goal is a DSH command that a human types, not a skill.
The model catalog: across the 27 skills the catalog is 6,446 characters, of which the model actually sees 6,385. The only skill carrying disable-model-invocation is the vendored /teach (upstream's choice, so it stays out of the model catalog), which saves the fixed cost every session and every subagent would otherwise pay; /ask-flow is model-invocable.

3. Workflow Overview

Six-step closed loop, from requirements to delivery (/to-design is inserted only when the change spans two or more services, alters the data model or a migration, or touches two or more external contracts — otherwise it is skipped):

1 /prd
→
1.2 /to-design
→
1.5 /to-issues
→
2 /implement
/
2 /loop-it · /graph
→
3 /review-it
→
4 /ship-it
Step 1: /prd Describe feature idea Clarify questions Generate PRD Output: PRD 1.5: /to-issues Read PRD Break into Issues Create cards Output: Issues Step 2: /loop-it sequential · one Issue /graph parallel · waves implement inline → commit Step 3: /review-it Auto review Verify findings Iterative fixes Output: ✓ Review Step 4: /ship-it Commit + Push Create PR Merge + Close Output: Shipped
StepCommandInputOutput
1. Plan /prd Feature description / product idea PRD document (hand off to /to-issues)
1.5 Break Down /to-issues PRD / SPEC document Issue cards
2. Implement /implement / /loop-it / /graph Issue cards (or a task DAG) Code implemented inline by the agent
3. Review /review-it Code changes (dirty / branch) Clean code that passes review
3.5 Walkthrough /walkthrough Reviewed changes tasks/walkthrough-<feature>.md walkthrough (optional)
4. Ship /ship-it Reviewed code Merged PR + Closed Issue
Tip: this main line does not have to be walked in order: a single unit goes straight to /implement; a bug, an intermittent flake or a performance regression starts with /diagnose; a raw inbound issue starts with /triage; an in-progress merge / rebase uses /conflict. Can't tell which? Type /ask-flow.

4. Step 1: /prd — Requirements Planning

/prd transforms a vague feature idea into a structured product requirements document (PRD): clarify the ambiguity first, then state the requirements as verifiable acceptance criteria. It produces the PRD only — /to-issues does the breakdown.

How to Invoke

# Run this directly
/prd Add a priority feature to our task management system

# Or use trigger phrases
Write PRD for: User registration with email and phone support
Requirements analysis: Add rate limiting capability to the API

Workflow

Output Example

# after the PRD is saved
✅ PRD saved to tasks/prd-priority-system.md

/to-issues    (split the PRD into Issues with blocking edges)
Tip: the PRD states what is wanted, and every requirement has to land as a verifiable acceptance criterion — that is what makes the Spec axis of /review-it falsifiable later. Issue sizing belongs to /to-issues: one Issue should be what a single agent can finish in one session (usually 1-3 files).

5. Step 1.5: /to-issues — Break Down into Issues

/to-issues breaks down a PRD (or any piece of requirements prose) into vertically-sliced, independently implementable Issues and creates them on your chosen platform. It can be used standalone — no need to run /prd first.

The Issue body is the contract. Goal, non-goals, acceptance criteria, required evidence, external boundary, definition of done and open questions all live in the body — so there is no "write a SPEC document first" step in the flow. A subagent that does not share this conversation's context can start from that body alone.
Core principle: tracer bullets, not layers. Each Issue is a narrow but complete path through every layer it touches (schema + API + UI + tests), demoable on its own the moment it lands — not "a backend ticket and a frontend ticket." The test: "what can I demo when this is done?" If the answer is a layer, not a behaviour, re-slice it. If the whole change fits one context window, skip Issues and implement it inline.

How to Invoke

# Run this directly
/to-issues

# Or use trigger phrases
Create issues for: Create Issues from prd-user-auth.md
Break down issues: Break this requirement into implementable cards
Generate cards: Break the PRD into Issues with blocking edges

Input Sources

OptionDescription
Auto-detectScan tasks/ directory, list available PRDs
Specify PRDBreak down based only on the PRD's User Stories
Paste itNo PRD? A pasted requirements description breaks down just as well

Creation Platforms

PlatformToolDescription
GitHubgh issue createNative blocking edges --blocked-by, sub-issues --parent (gh v2.94+)
LocalMarkdown filesOne file per Issue, dependency-ordered, in a per-feature folder

Workflow

Falsifiable acceptance criteria: every criterion must be red (fail) at the base commit. Wide mechanical refactors (rename a column, retype a shared symbol) use the expand → migrate → contract sequence — the one exception to the vertical-slice rule.
Note: /to-issues is the key bridge from requirements to implementation. It can be used independently — even if you didn't use /prd to generate a PRD, as long as you have a requirements document (or even pasted text), you can break it down into Issues.

Boundary: /triage only handles raw inbound items

/to-issues breaks down your own requirements, and its output is already agent-ready; bug reports, user feedback and requests filed by other people are the job of /triage — reproduce / understand first, then assign a role (ready / needs-info / bug-confirmed / duplicate / wontfix) and fill the ready ones out into agent-executable cards. Never triage /to-issues output. See 18. /triage.

6. Step 2: Implementation — /implement · /loop-it & /graph

This is the implementation step, and all three routes start from the Issue cards created by /to-issues: a single unit goes inline through /implement, sequential work through /loop-it, and parallel work through /graph. On every route the running agent writes the code itself — implementation is done inline, never by handing the work to an external command.

/implement — the single-unit inline loop

One issue, one card, one item in a spec — when there is exactly one unit, take this route: implement inline → prove with the project's gates → /review-it → /ship-it. It explicitly does not create a worktree, not dispatch a subagent and not create a wave branch — those are the orchestration owned by /loop-it and /graph, and putting a single unit on the graph or into a loop just pays orchestration cost for nothing.

Reference: /test-first — red → green

Use it when behaviour should be pinned down before the implementation: one test → one piece of implementation → the next test, one seam at a time. It is also the reference /implement uses internally, and it can be invoked on its own.

Node Scope: Implement → Prove → Commit

/loop-it — Sequential Implementation

/loop-it fetches the open GitHub issues and resolves their order with a dependency-aware topological sort. It implements one Issue at a time, inline (read the requirement → write the code → prove it with the project's gates → supervisor check, judged on evidence rather than how the diff looks) and commits on that Issue's own branch — without pushing or opening a PR. At the end of the batch it merges the surviving branches into a single batch branch (failed branches are never merged in) and runs /review-it once and /ship-it once. It checkpoints progress to .loop-state.json after every status change, so a crash or interruption can resume from the last checkpoint instead of restarting the whole batch.

# Sequential: per Issue — implement → prove → record evidence → supervisor check → commit; one review + one walkthrough + one ship at batch end
/loop-it

/graph — Parallel Implementation

/graph turns a task, PRD, or Issue set into a DAG, layers it into waves, and dispatches one subagent per independent node concurrently. Each node works in its own git worktree and commits only to its own branch, so parallel edits never clobber each other. Every wave ends with a mandatory fan-in barrier: wait for all of the wave's settlement notices → leak check → an evidence check on every node (judged on the evidence the node reports — commands and real output, not on how the diff reads) → integrate (merge only the nodes that shipped, never a failed one) → run the gates on the integrated tree → review once (section by section, node by node) → ship once (one PR, closing the Issues the wave satisfied). Progress is checkpointed to .graph_state.json, and a graph.html tracker re-renders from that checkpoint at every wave boundary.

# Parallel: task/PRD/issues → DAG → waves → one worktree per node → fan-in barrier
/graph tasks/prd-url-shortener.md

A wave of one node has nothing to integrate: skip the wave branch and the merge ceremony, and review + ship that node's branch directly.

When a Node Fails

Tip: implementation is done inline by the agent — a single unit goes through /implement (implement inline → prove with the gates → /review-it → /ship-it, no worktree, no subagent); /goal is a DSH command, not a skill, and its model side (create_goal / update_goal) only runs in a direct top-level human turn; /review-it and /ship-it are real skills the orchestrator calls once per wave. A child pays the parent's full prompt, tool schemas and skill catalog as fixed overhead, which is why a node stops at commit and trivia stays inline; cap concurrency at 3–4 by default and prefer waves of 2–3 nodes.
Note: /goal is not a pipeline step. In DSH, /goal is a command, not a skill: a human types it to create a persisted objective with autonomous continuation rounds. Its model side (create_goal / update_goal) only runs in a direct top-level human turn, so a subagent — or a skill running mid-orchestration — cannot mint a long-horizon goal for itself. The implementation step above is therefore done inline by the running agent (read the Issue, write the code, run the tests), not by calling /goal. A human may still type /goal <objective> for a single long-running objective, but that sits outside this pipeline.

7. Step 3: /review-it — Code Review

/review-it is the closeout check before shipping: prove the gates first, then review the diff, fixing real findings until none are actionable. Under the current contract it runs once per wave / batch, against the integrated diff — not once per node against its own fresh work.

Two Axes: Spec and Standards, Reported Separately

Every review answers two different questions, and it reports them as two sections, never one merged ranking — merge them and the naming-and-style findings drown out a missing acceptance criterion:

#DimensionWhat to look for
1Hidden side effectsCascading impact in non-obvious places; changed shared state or external-dependency behaviour
2Breaking compatibilityChanged API signatures, data structures, config formats or CLI surface; existing callers affected
3Edge casesnull / empty values / empty collections, extremes, concurrency races, error paths
4Performance risksNested loops, N+1 queries, large allocations, blocking I/O, lock contention
5Security risksInjection, privilege escalation, sensitive-data leakage, unsafe deserialization, vulnerable dependencies
6Misleading namesNames that do not match actual behaviour, or are vague about what they mean
7Insufficient testingMissing coverage on critical paths, boundaries and error handling; tests that do not really verify the expected behaviour
8Future maintenance costUnnecessary abstraction, duplication, implicit coupling, hard-to-trace control flow
Why the two axes stay separate: a change can pass all eight standards and still implement the wrong thing; one merged ranking lets style findings crowd out the missing requirement. Report the Spec axis first, then the Standards axis, each as its own section.

The Review Path

There is no external review CLI: once /review-it is loaded, the running agent performs the review itself with the principles below, and never shells out to a review command.

# Uncommitted changes (default): review the working tree, untracked files included
git status --short
git diff
git diff --cached

# Branch / PR: generate the diff against the base, then review it section by section
# base = the PR's base, else the repo's default branch — never a hardcoded main
base=$(gh pr view --json baseRefName --jq .baseRefName 2>/dev/null || git symbolic-ref -q --short refs/remotes/origin/HEAD | sed 's|^origin/||')
diff_file=$(mktemp)  # a fixed /tmp name is pre-creatable — don't
git diff "origin/$base"...HEAD > "$diff_file"

When the diff is large, or independence matters more, hand the diff file to a fresh subagent — it sees none of this conversation, so the prompt must be self-contained.

Review Principles

PrincipleDescription
AdvisoryReview results are suggestions, not blindly applied
VerifyEvery finding is verified by reading real code paths
Reject noiseReject impractical edge cases, speculative risks, excessive refactoring
IterateRe-review after fixes until no actionable findings remain
MinimalPrefer small fixes; avoid unnecessary large refactors

Review Modes

Working Tree StateModeAction
Uncommitted changeslocalThe current agent reviews the working tree directly (untracked files included)
Committed not pushedbranchgit diff origin/main...HEAD + review that diff
Pushed / PRbranchSame, against the PR's actual base
Clean working treeskipSkip when there is genuinely nothing to review

Wave Review: Once, Section by Section

8. Step 4: /ship-it — Commit and Ship

/ship-it is the standard closing workflow after implementation is complete: commit code, create PR, merge, close the Issue, and write the implementation summary comment once (decisions / deviations / tradeoffs / open questions). It is the sole producer of the PR body — /walkthrough only supplies evidence, which this skill writes into the body once. At the close of a /graph wave or a /loop-it batch it is called exactly once: one branch, one PR, one CI run, one merge, closing the several Issues that wave or batch satisfied.

How to Invoke

# Run this directly
/ship-it

# Or use trigger phrases
Submit code
Create PR and merge

Complete Flow

# Step 1: Commit code (link Issue)
git add <related files>
git commit -m "Add priority field to database (#42)"

# Step 2: Push branch
git push -u origin feat/issue-42-priority-field

# Step 3: Create PR (body includes Closes #42)
gh pr create --title "Add priority field" \
  --body "Closes #42 ..."

# Step 4: Merge
gh pr merge --squash --delete-branch

# Step 5: Close Issue (if not auto-closed)
gh issue close 42 --reason completed

Several Issues in One PR (Wave / Batch Mode)

A /graph wave and a /loop-it batch default to putting several Issues into one PR (after squash, only one commit remains). The PR body must list the evidence item by item — a single Closes #1 #2 #3 line is not enough, because then neither you nor the user can audit or revert a single feature.

ItemcommitIssue closedAcceptance evidence (test name / command)Manual acceptance
Node 3abc1234Closes #12TestFooBarNot manually accepted yet
Node 4def5678Closes #13mise run check + TestBazNot manually accepted yet

A single-item PR (one Issue, one PR) does not need this table — the "Complete Flow" above is enough.

Error Handling

ScenarioHandling
CI checks failedCheck failure reason, fix and append commit then push
Merge conflictHand it to /conflict: resolve hunk by hunk from both sides' intent, run the project gates and finish the operation (never --abort), then force push
Branch protectionConfirm required reviews are satisfied
Issue not auto-closedConfirm PR body contains Closes #N, or close manually
Note: resolve an in-progress merge / rebase with /conflict — keep both sides' intent when both can be preserved, pick the side consistent with this merge's goal when they genuinely conflict and record the tradeoff in the commit message, and always resolve, never --abort. See 20. /conflict.
Note: /ship-it depends on the gh CLI. Make sure you've authenticated with gh auth login.

9. Vendor: /svg-diagram — SVG Diagramming Conventions and Mechanical Lint

/svg-diagram is a house style for hand-written SVG diagrams: it fixes a technical look with CJK-friendly typography, and backs it with mechanical checks that prove the figure actually follows the rules. Flowcharts, architecture diagrams and sequence diagrams all go through it.

How to Invoke

# Run this directly
/svg-diagram

# Or use trigger phrases
Draw an architecture diagram: diagram the skill-loading flow as SVG
Draw a flowchart: draw this module's call flow as SVG

What the Conventions Cover

AreaRule
LayoutCentre the content, balance the two halves, keep sibling blocks ≥25px apart, and centre the title on the content centre rather than the viewBox centre
ConnectorsLines never cut through boxes, text never sits on a line (keep 10–20px), and legends live outside the diagram body
ArrowsOne shared marker definition; arrows terminate on the box edge, not inside it
PaletteA fixed palette plus a light-background fallback colour
CJK font stackThe stack covers Chinese and monospace together, so CJK never falls back to a serif or a tofu box
XML escaping& / < / > escaped per XML rules

Mechanical Lint: tools/svg-lint

The skill ships a zero-dependency tools/svg-lint that runs 12 checks over an SVG: overlap, block spacing, box height, connector geometry, arrow markers, text overflow, viewBox clipping, font stack, palette conformance, light-background fallback, baseline offset, and XML escaping.

Workflow

Tip: for one-shot generation, invoke it from a subagent so the main context does not have to carry the skill text plus the SVG XML; use it directly in the main context for multi-round tweaking.

10. Bonus: /refactor — Expert-Level Code Refactoring

/refactor provides expert-level code refactoring based on Martin Fowler's complete catalog from Refactoring 2nd Edition. By identifying code smells and applying proven refactoring techniques, it improves code maintainability, readability, and structure without changing external behavior.

Two Modes

ModeWhat it doesWrites code?
audit (report only)Detects code smells, architecture anti-patterns and complexity hotspots, validates each candidate, ranks the confirmed findings by severity, and writes a Markdown report plus a refactoring roadmap under tasks/No
fix (default)Applies the smallest Fowler refactoring that addresses one named smell, one commit per step with tests greenYes

When a request mixes both ("find the problems and fix them"): run audit first, confirm the findings with the user, then switch to fix on the agreed list.

How to Invoke

# Run this directly
/refactor

# Or use trigger phrases
Refactor: Refactor UserManager class, it's too large
Code smell: This function has Feature Envy, fix it
Extract method: Break this long method into smaller functions

Code Smell Catalog

Identifies 22 code smells, organized into five categories:

CategorySmellsPrimary Refactoring
BloatersLong MethodExtract Method, Replace Temp with Query
Large ClassExtract Class, Extract Subclass
Primitive ObsessionReplace Data Value with Object
Long Parameter ListIntroduce Parameter Object
Data ClumpsExtract Class
OO AbusersSwitch StatementsReplace Conditional with Polymorphism
Temporary FieldExtract Class, Introduce Null Object
Refused BequestReplace Inheritance with Delegation
Alternative Classes with Different InterfacesRename Method, Extract Superclass
Change PreventersDivergent ChangeExtract Class
Shotgun SurgeryMove Method, Move Field
Parallel Inheritance HierarchiesMove Method, Move Field
DispensablesComments (code self-explanatory)Extract Method, Rename Variable
Duplicate CodeExtract Method, Pull Up Method
Lazy ClassInline Class, Collapse Hierarchy
Data ClassMove Method, Encapsulate Field
Dead CodeDelete (Git history has record)
Speculative GeneralityInline Class, Remove Parameter
CouplersFeature EnvyMove Method
Inappropriate IntimacyMove Method, Move Field
Message ChainsHide Delegate
Middle ManRemove Middle Man
Incomplete Library ClassIntroduce Foreign Method

Refactoring Techniques Catalog

40+ refactoring techniques in 6 categories, each with mechanical steps and comparison examples:

CategoryCountRepresentative Techniques
Composing Methods9Extract Method, Inline Method, Extract Variable, Replace Temp with Query, Substitute Algorithm
Moving Features7Move Method, Move Field, Extract Class, Inline Class, Hide Delegate
Organizing Data13Replace Data Value with Object, Encapsulate Field, Replace Type Code with Subclasses, Replace Magic Number
Simplifying Conditionals8Decompose Conditional, Guard Clauses, Replace Conditional with Polymorphism, Introduce Null Object
Method Calls13Rename Method, Separate Query from Modifier, Introduce Parameter Object, Replace Error Code with Exception
Generalization9Pull Up Method, Push Down Method, Extract Interface, Form Template Method, Replace Inheritance with Delegation

Safety Protocol

Language-Specific Guides

LanguageKey Recommendations
Javafinal locals, IDE auto-refactor, Records, Sealed Classes
TypeScriptDestructuring reduces params, prefer const, Union Types replace type codes, ?. eliminates null checks
PythonType Hints, dataclasses, @property, Context Managers
GoSmall interfaces, named return values, table-driven tests, early returns eliminate nesting
RustResult/Option replace error codes and null, Pattern Matching, From trait, Derive macros
Tip: For each refactoring, simply tell the AI "This class has this smell, please fix it with the corresponding refactoring technique" — AI will follow the safety protocol step by step, committing at each step.

11. Bonus: /modern-go — Go Code Modernization

/modern-go automatically upgrades Go code to modern idioms and APIs, similar to go fix. It scans go.mod to detect the Go version, then batch-applies version-appropriate transformation rules to Go source files, covering 35+ rules from Go 1.0 through 1.27+.

How to Invoke

# Run this directly
/modern-go

# Or use trigger phrases
Modernize: Modernize this project's Go code
Upgrade Go code: Update to Go 1.22 idioms
Gofix: Scan pkg/ directory and apply transformations

Workflow

Transformation Rule Catalog (by Go Version)

VersionRulesExample (Before → After)
1.0+time.Sincetime.Now().Sub(start) → time.Since(start)
1.8+time.Untildeadline.Sub(time.Now()) → time.Until(deadline)
1.10+strings.BuilderLoop s += item → strings.Builder
1.13+errors.Iserr == io.EOF → errors.Is(err, io.EOF)
1.18+any, strings.Cut, bytes.Cutinterface{} → any, Index+slice → Cut
1.19+fmt.Appendf, type-safe atomicsappend(buf, fmt.Sprintf(...)...) → fmt.Appendf
1.20+strings.Clone, CutPrefix/CutSuffix, errors.Joinstring([]byte(s)) → strings.Clone(s)
1.21+min/max, clear, slices/maps packagesManual loops → slices.Contains, maps.Clone etc.
1.22+range over int, cmp.Or, reflect.TypeForfor i:=0;i<n;i++ → for i:=range n
1.23+Iterator helpers, SplitSeq/FieldsSeqfor _,p:=range strings.Split(s,sep) → SplitSeq
1.24+t.Context(), omitzero, b.Loop()Test context.Background() → t.Context()
1.25+wg.Go()wg.Add(1); go func(){defer wg.Done();fn()}() → wg.Go(fn)
1.26+new(expr), errors.AsTypev:=42; &v → new(42)
1.27+embedded-field literals (embedlit), go fix modernizersredundant embedded-field literals → promoted-field init

Safety Rules

Tip: You can specify scope when invoking, such as /modern-go pkg/ to only transform the pkg/ directory, or /modern-go main.go to only transform a single file.

12. Bonus: /walkthrough — Pre-Ship Walkthrough

/walkthrough runs after implementation, its verification pass and /review-it, and before /ship-it: it writes one Markdown artifact a reviewer can read to catch up on what changed and what is proven to work, with visual proof of the demo path. The point is evidence, not assertion — a diff says what the code looks like; a walkthrough says what you ran, what it printed and what you saw.

How to Invoke

# Run this directly
/walkthrough

# Or use trigger phrases
Walkthrough: write the pre-ship walkthrough for user-auth
Write the walkthrough: collect the verification evidence for this change

The Four Parts of the Artifact

PartWhat it holdsKey points
1. Change summaryThe diff described for someone who has not seen the work3–6 bullets: what was built, the key files and components, the requirement / Issue it serves
2. Verification stepsThe commands actually run and what they printedPaste the exact command and its real output (keep pass counts, truncate noise); record UI scenarios as action → observed result → pass/fail
3. Visual proofScreenshots or a short recording of the demo path2–4 shots that prove the path (before → action → after), not a screenshot dump
4. Risks and manual acceptanceWhat is not proven yetDiff stat and file list, high-risk notes, manual acceptance status; the PR body and merge checklist belong to /ship-it

Output

Positioning

/walkthrough supplies evidence only: the commands and their real output, visual proof, risks, and manual acceptance status. The PR body and the merge checklist are not produced here — they are /ship-it's output, written once by that skill; a second copy here is the same content maintained in two places. It records gate output; it does not replace the project's own gates. A step you could not verify is written as unverified or as a blocker — never as proven.

Tip: a one-line or purely mechanical change does not deserve a walkthrough — there is no demo path and nothing to catch up on, so hand over the diff instead. Write it after review, too: a walkthrough of code that is about to change is a walkthrough you rewrite.

13. Bonus: /loop-it — Automated Issue Implementation Loop

/loop-it fetches all open GitHub issues and resolves dependency order. It implements one Issue at a time, inline (read the requirement → write the code → prove it with the project's gates → record evidence) and commits on that Issue's own branch (no push, no PR). At the end of the batch it merges the surviving branches into a single batch branch (failed branches are never merged in) and runs /review-it once and /ship-it once. It persists progress to .loop-state.json so you can resume from where you left off after a crash or interruption. The observation behind each acceptance criterion is recorded as structured evidence in that same checkpoint, and anything new found while running goes into a followup queue — so the batch can grow new issues while it runs instead of being frozen at the list written during decomposition.

How to Invoke

# Run this directly
/loop-it

# Or use trigger phrases
Batch implement: 实现所有issue
Loop issues: 批量实现
Resume loop: 恢复循环

Key Features

Pipeline Integration

# Full pipeline from PRD to shipped code
/prd → /to-issues → /loop-it
                              │
                              └→ per issue: implement inline → prove → record evidence → supervisor check → commit (× N)
                                 batch end ×1: close out follow-ups → batch branch → /review-it → /walkthrough → /ship-it
Tip: Add .loop-state.json to your .gitignore. If the loop crashes, just run /loop-it again — it will detect the state file and offer to resume.

14. Bonus: /to-design — PRD to Design Document

/to-design turns a PRD (or a rough idea) into a design document written in the style of Go's official design proposals: plain language, concrete examples, and — above all — an honest account of why this approach and not the alternatives. The Markdown proposal is the primary deliverable; rendering it as a single-file HTML page is an optional presentation layer and is not done by default.

How is it different from the contract block in an issue? A contract block is an implementation contract (tables, endpoints, schemas) that /to-issues writes into the issue body, for an engineer to build against. A design document is a decision artifact — it argues for a direction, surfaces the tradeoffs, and lets a team agree on the same facts before anyone writes code. When the question is "how should we build this and why", produce a design doc; when the question is "give me the exact contract to implement", go to /to-issues.

How to Invoke

# Run this directly
/to-design tasks/prd-priority-system.md

# Or use trigger phrases
Design doc: write a design doc for the priority system
prd-to-design: based on prd-user-auth.md

When to Use

Design Document Structure (distilled from 5 Go proposals)

SectionPurpose
AbstractThe whole doc in one paragraph, with the single most important promise embedded (e.g. backward compatibility)
BackgroundExplain the pain with concrete examples or real buggy code — quantify it, don't pile on adjectives
DesignThe body. Declaration + example + boundaries, taught progressively from simple to complex
RationaleThe key section: proactively lists the rejected alternatives and why they were dropped
CompatibilityFor any breaking change, admit it head-on; honestly list the cost and a gradual migration path
ImplementationBack up "it's shippable" with data and tooling, not a hand-wave of "risk is manageable"
Appendix(Optional) full API, end-to-end examples, FAQ

Workflow

Tip: The value of a design doc does not depend on whether the proposal is accepted — it depends on whether it grounds the discussion in the same set of facts and tradeoffs. Even when rejected, recording "why this path doesn't work" is itself a high-value artifact.

15. Bonus: /graph — Parallel Task-Graph Execution

/graph turns a task (or PRD / SPEC / issue set) into a directed acyclic graph (DAG), layers it by dependency into supersteps (waves), then implements the independent nodes of each wave concurrently: one subagent per node implements inline and commits on its own branch inside its own git worktree; a fan-in barrier between waves then runs the leak check, gives every node an evidence check, merges only the nodes that shipped, runs the gates on the integrated tree, and reviews once + writes the walkthrough once + ships once before dynamically re-planning the next wave. The PR body and merge checklist are produced by /ship-it alone; /walkthrough only supplies evidence.

How is it different from /loop-it? /loop-it is strictly sequential — one worktree, one issue at a time. /graph is its parallel counterpart — it fans out every independent node in a wave at once. Use /graph when the DAG has genuine parallelism (independent subsystems); use /loop-it when nodes heavily share files or serial safety matters.

The design borrows from the trending idea of graph engineering, LangGraph's StateGraph / Pregel-BSP superstep model, and Claude's dynamic-workflow orchestration.

How to invoke

# Run this directly
/graph tasks/prd-url-shortener.md

# Or use trigger phrases
parallel implement: turn these issues into a task graph and run in parallel
build a graph: fan out the DAG concurrently

Core concepts (from LangGraph / graph engineering)

ConceptMeaning
NodeOne implementable unit of work (an issue / subtask)
EdgeA dependency: B depends on A → edge A → B
Superstep / WaveA set of nodes whose deps are all satisfied — run concurrently
Fan-outDispatch one subagent per node in the current wave
Fan-in (barrier)Wait for all nodes in the wave before the next
State channel.graph_state.json — shared checkpoint between waves, resume source
Live trackergraph.html — Claude-style light-theme dashboard, re-rendered from .graph_state.json at every checkpoint
Dynamic re-planRevise the graph after a wave if new work/deps emerged

Workflow

Key features

Concurrent execution

# Per wave: fan-out → fan-in barrier
Wave 0 (parallel×3):  #1 db schema   #2 cache layer   #3 logging util
Wave 1 (parallel×2):  #4 API (deps #1)   #5 CLI (deps #2)
Wave 2 (parallel×1):  #6 integration (deps #4,#5)

# Each node, in its own worktree:
implement inline → prove → commit on its own branch

# End of each wave (once):
leak check → evidence check per node → merge only shipped nodes → gates on the integrated tree → /review-it → /walkthrough → /ship-it

Pipeline integration

/prd → /to-issues ┬→ /loop-it  # sequential: one node at a time
                                        └→ /graph    # parallel: whole wave at once
Tip: Add nodes.json, .graph_state* and graph.html to .gitignore (use the pattern rather than a list of names: it covers the default, the pre-rename .graph_state, a per-run --state .graph_state-prd015, and the transient .tmp; if nodes/graph use non-default names, add those exact names too), and commit that ignore rule before the first wave — the leak check wants a clean shared checkout, and an uncommitted .gitignore edit would make the orchestrator flag itself as the leak. Subagents run in parallel only when dispatched as multiple calls in a single response — splitting them across responses degrades to sequential.

16. Bonus: /understand — Interactive Change Review

/understand turns the changes you just generated (usually AI-written) into a single-file interactive review webpage, so you can actually understand what changed before reviewing or shipping it. It scans the repo's uncommitted / branch changes and builds a Claude-style light-themed two-column page: a project file tree on the left, and the selected file's syntax-highlighted diff on the right, with a side rail that pairs each code segment with its unit requirement and a plain-language explanation.

How to Invoke

# Run this directly
/understand

# Or use trigger phrases
Review changes: Explain what this batch of new code does
Understand code: Walk me through the freshly generated changes

What You Get

AreaContent
Left treeChanged files laid out by real project structure; per-file +/− stats and A/M/D/R status. The column is drag-resizable (double-click the divider to reset).
Right diffSyntax-highlighted diff with additions / deletions clearly distinguished from unchanged code, real file line numbers.
Side railPer-segment cards: the related unit requirement (or a grey "inferred intent" tag when guessed) plus a plain-language code explanation; click to jump and flash the matching lines.

How It Works

Positioning

/understand is a comprehension companion to /review-it: where /review-it finds and fixes issues, /understand helps you see the intent and rationale behind freshly generated code before you commit to it.

Tip: .understand/ is a generated artifact directory — add it to .gitignore so it isn't accidentally committed. Explanations and requirements are always produced in Chinese.

17. Bonus: /ask-flow — Which Skill Do I Use?

/ask-flow is the entry point to the whole skill set: you cannot remember what all these skills own, so you ask. Describe where you are (a half-formed idea, a pile of inbound issues, code that will not work, a long implementation) and it picks the next step, then starts it — reading that skill's body and following it, instead of naming a skill and leaving you to type it again.

How to Invoke

# Run this directly
/ask-flow

# Or just ask
Which skill should I use?
How do I run this workflow?

What It Routes

Tip: /ask-flow is model-invocable — it carries no disable-model-invocation, so the model can pick it. Across the 27 skills the catalog is 6,446 characters, of which the model actually sees 6,385; the only skill that stays out of the model catalog is the vendored /teach (upstream's choice).

18. Bonus: /triage — Triaging Inbound Issues

/triage handles raw items that arrive from outside: bug reports, user feedback, requests filed by other people. It reproduces / understands first, assigns each item exactly one role, and fills the ready ones out into agent-executable cards. Never triage /to-issues output — that is already agent-ready.

Roles (every item ends in exactly one)

RoleMeaningAction
readyReproducible / clear, acceptance criteria can be writtenComplete the body (repro steps, expected behaviour, acceptance criteria, blast radius) and hand it to the main line
needs-infoMissing key information; cannot decide yetPost one comment asking for it, from the template
bug-confirmedA real bug, root cause unknownRecord the symptom and minimal repro, hand it to /diagnose
duplicateAn existing item already covers itComment with a pointer → close
wontfixExplicitly out of scopeComment the reason (which product boundary it crosses) → close

Handling One Item

Note: ready items go back to the main line — a chain of dependent ones through /loop-it, ones that share no files through /graph, and a single unit through /implement.

19. Bonus: /diagnose — The Debugging Loop

The discipline for hard bugs, intermittent flakes and performance regressions: no reasoning starts until there is a command already red on this bug — jumping straight to "I bet it's here" is exactly the failure this skill exists to prevent. It does no /review-it / /ship-it; once the cause is pinned down, go back to the main line as a single-point change.

How to Invoke

# Run this directly
/diagnose

# Or just say
Debug this intermittent failure
What is this performance regression?

The Loop

Note: debugging is usually a single inline unit — do not open a /graph for it. Once it is located, return to the main line as a single-point change: /implement → project gates → /review-it → /ship-it.

20. Bonus: /conflict — Resolving Merge / Rebase Conflicts

/conflict resolves an in-progress git merge / rebase: recover both sides' intent, resolve hunk by hunk, run the project gates, and finish the operation. Always resolve, never --abort.

Steps

Note: when resolving inside a /graph node the conflict lives in that node's worktree — use absolute paths and workdir=. When resolving on the shared checkout, confirm afterwards that git status holds nothing dirty besides this merge: a clean shared checkout is what the orchestrator's leak check relies on.

21. Vendor Skills and One-Command Sync

skills/vendor/ holds verbatim copies of third-party skills: this skill set did not write them, it collects them so they install alongside everything else. Which skill came from where, at which commit, is recorded in the manifest skills/vendor/vendor.json, and each skill directory carries a NOTICE.md (source / commit / license / sync date).

SkillSourcePinned commitLicense
/svg-diagrambybit-exchange/svg-diagramc30c9e3MIT
/skill-creatoranthropics/skills3337550MIT
/frontend-designanthropics/skills3337550not declared
/pptxanthropics/skills3337550not declared
/find-skillsvercel-labs/skills7407f38MIT
/ui-ux-pro-maxnextlevelbuilder/ui-ux-pro-max-skill823b0a1not declared
/web-design-guidelinesvercel-labs/agent-skills063bee9not declared
/humanizer-zhop7418/humanizer-zhf4518a8not declared
/resume-optimizerwyh0626/resume-optimizerfb16670not declared
/teachmattpocock/skillsc55ee46not declared
Never edit them in place. These directories are verbatim copies, so a local edit is overwritten by the next sync. Change the manifest and re-sync; anything this repo owns belongs in a flow / bonus skill instead.

Maintenance Commands

make vendor        # copy every vendored skill in at its pinned commit
make vendor-check  # report vendored skills whose upstream has moved
make vendor-update # re-pin to upstream HEAD, sync, and validate
make vendor-list   # list vendored skills and pinned commits
make vendor-add URL=<git url> SKILL="name [name...]"
make check          # layout, frontmatter, cross-references, bundle patch
make test           # check first, then the bundled scripts' self-tests
Note: like the other two buckets, vendor is listed as its own skill root in cordis.patch.yml, so its skills install with the DSH bundle; npx skills add picks them up through its recursive scan as well.

22. FAQ

Q: Do I have to use all steps in order?

No. Each Skill is independent and can be used standalone. For example, if you already have Issues, you can start directly from /implement (a single unit), /loop-it (sequential) or /graph (parallel); if code is already written, you can use /review-it directly. But going through the full workflow yields the best results.

Q: Where does /goal come from? Why isn't it in the skills directory?

/goal is a DSH command, not a skill, so it is not in ~/.agents/skills. A human types it to create a persisted objective with automatic continuation rounds. The model side of that surface is create_goal / update_goal, but create_goal only runs in a direct top-level human turn — a subagent, or a skill running mid-orchestration, cannot mint a long-horizon goal for itself. It is not the implementation step either: implementation is done inline by the running agent (see Step 2: Implementation).

Q: Can I use this in non-GitHub projects?

Yes. /to-issues can save Issues as local Markdown files. /review-it only needs a local git repository. /ship-it currently depends on GitHub (gh CLI).

Q: How is /review-it different from manual code review?

/review-it is automated self-review, catching obvious issues before submission. It reports on two axes: the Spec axis checks whether the diff did what was asked (missing / extra / wrong, each finding quoting the acceptance criterion it is checked against), and the Standards axis checks code quality across 8 dimensions. The two are reported separately, never merged into one ranking. It doesn't replace team code review, but rather improves code quality before PR creation, reducing the low-level issues reviewers need to point out.

Q: How big should an Issue be?

Each Issue should represent work an agent can complete in a single session — typically 1-3 files of changes with clear acceptance criteria. /to-issues holds that line when it splits, and you can adjust before confirming.

Q: Can I edit the skills under skills/vendor/?

No. Everything under skills/vendor/ is a verbatim copy of an upstream skill, and a local edit is overwritten by the next make vendor. Change the manifest in skills/vendor/vendor.json and re-sync; if what you want is a change this repo owns, write it as a flow / bonus skill. See 21. Vendor Skills and One-Command Sync.

Q: What does the /svg-diagram mechanical check cover?

It ships a zero-dependency tools/svg-lint with 12 checks: overlap, block spacing, box height, connector geometry, arrow markers, text overflow, viewBox clipping, font stack, palette conformance, light-background fallback, baseline offset, and XML escaping. The conventions themselves also cover layout, connector and arrow drawing, and the CJK font stack.