/SKILL.md
Manage long-running AI agent development projects with incremental progress, scoped features, and verification. Works with any project type — web, API, CLI, library, data pipeline, mobile. Use this skill when working on multi-session projects, implementing features incrementally, running tests, initializing project scopes, or continuing work from previous sessions. Triggers on phrases like "continue working", "pick up where I left off", "next feature", "run tests", "verify", "initialize scope", "switch scope", "feature list", "incremental progress", or any multi-session development workflow.
npx skillsauth add sunfmin/iterative-dev iterative-devInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Autonomous, incremental development with quality gates. One feature at a time. Implement → verify → refine → next.
FOR each feature (highest priority first):
1. IMPLEMENT — launch subagent to build, test, and commit
2. VERIFY — parent checks: commit exists, screenshots exist (web), tests prove outcomes
3. REFINE — launch subagent to polish UX + code quality, write report, commit
4. NEXT — immediately proceed to next feature
All three steps are mandatory. Skipping refinement is as wrong as skipping verification.
feature_list.json is the single source of truth — see references/core/feature-list-format.mdThese patterns were found in real sessions and waste significant time:
| Anti-Pattern | Rule |
|-------------|------|
| Retry loops | If the same tool call fails twice with the same approach, STOP and change strategy. Read error output carefully — don't blindly retry. |
| Edit without Read | If the Edit tool fails (old_string not found), ALWAYS Read the file first to see current content before retrying. Never guess at file contents. |
| AskUserQuestion | NEVER use the AskUserQuestion tool. The human may be asleep. Make your best judgment and move on. |
| EnterPlanMode / ExitPlanMode | NEVER enter or exit plan mode during autonomous execution. Just execute directly. |
| Blind test reruns | When a test fails, read the FULL error output, identify the root cause, fix it, THEN rerun. Rerunning without changes is a waste. |
| Compile-then-pray | Always run compilation checks (tsc --noEmit, go build ./...) BEFORE running tests. Fix compile errors first — they cause cascading test failures. |
| Type | Verification | Extra Standards |
|------|-------------|-----------------|
| web | Playwright E2E + screenshots | web/ux-standards.md, web/frontend-design.md |
| api | Integration tests + endpoint validation | — |
| cli | Command execution + output validation | — |
| library | Unit tests + public API validation | — |
| data | Transformation tests + data quality | — |
| mobile | Mobile E2E + screenshots | web/ux-standards.md (adapted) |
project-root/
├── specs/{scope}/
│ ├── spec.md, feature_list.json, progress.txt
│ ├── screenshots/
│ └── refinements/
├── .active-scope
├── spec.md → specs/{scope}/spec.md (symlink)
├── feature_list.json → specs/{scope}/... (symlink)
├── progress.txt → specs/{scope}/... (symlink)
└── init.sh
Check state: ls specs/ && cat .active-scope
Create scope: mkdir -p specs/{scope}/{screenshots,refinements}, write spec.md
Switch: echo "{scope}" > .active-scope, create symlinks
Determine project type: Browser→web, Terminal→cli, Import→library, HTTP→api, Phone→mobile, Data→data
Create feature list — two methods:
references/core/feature-list-format.mdreferences/core/constitution-audit.mdCritical rules for features:
"type" field in feature_list.jsonCreate init.sh — see references/core/init-script-template.md
Commit
pwd && cat progress.txt && cat feature_list.json && git log --oneline -20
bash init.sh
Verify existing features work before implementing new ones.
Never stop to report progress. Never ask the human. Keep going until done.
For each incomplete feature (highest priority first):
Read references/templates/feature-subagent.md for the full prompt template. Launch via Agent tool.
Reference doc paths: The references/ directory is in THIS SKILL's install directory, not the project. Resolve to absolute paths using {skill_base_dir} shown at top of this prompt.
After the implementation subagent completes:
a. Compile gate (run BEFORE other gates — catches most subagent mistakes):
| Type | Command |
|------|---------|
| web (frontend) | cd frontend && npx tsc --noEmit |
| api / library / cli (Go) | go build ./... |
| api / library / cli (other) | language-appropriate compile/lint check |
If compilation fails, launch a fix subagent immediately — do not proceed to other gates.
b. Commit gate: git log --oneline -1 — confirm feat: commit exists
c. Feature list gate: confirm "passes": true in feature_list.json
d. Type-specific gate:
| Type | Gate |
|------|------|
| web/mobile | Screenshot gate: ls specs/{scope}/screenshots/feature-{id}-*.png \| wc -l — if 0, BLOCK and launch screenshot subagent. If >0, spot-check one with Read tool. Outcome test gate: verify tests perform user actions (not just screenshots). |
| web full-stack | Integration smoke test: verify backend responds (not 404), verify CORS headers, verify screenshots show real data (not loading spinners). See references/verification/web-verification.md. |
| api | Verify integration tests exist and cover error cases |
| cli | Smoke test: ./bin/{tool} --help |
| library | All tests pass including race detection |
| data | Transformation tests cover edge cases |
e. If any gate fails, launch a fix subagent before proceeding. Include the FULL error output in the subagent prompt so it can fix the root cause directly.
Read references/templates/refinement-subagent.md for the full prompt template. Launch via Agent tool.
Why refinement exists: Implementation subagents build features that work. Refinement subagents make features delightful. Without refinement, UX issues (spacing, hierarchy, micro-interactions) and code smells (duplication, naming, complexity) ship uncaught. It's the quality difference between "functional" and "users love it".
Refinement gate (parent must verify after subagent completes):
# At least one refinement report must exist for this feature (each pass creates a new timestamped file)
ls specs/{scope}/refinements/feature-{id}-refinement-*.md | head -1
# Commit must exist
git log --oneline -1 | grep "refine:"
If either is missing, launch the refinement subagent again. Do NOT proceed without refinement.
Loop back immediately to the next incomplete feature. No pausing, no reporting.
When: Every 5 features AND at session end.
For each applicable standards doc, launch audit subagent (see references/templates/audit-subagent.md). Fix violations before proceeding.
Applicable standards by type:
core/code-quality.md, core/gitignore-standards.md, core/session-handoff-standards.mdweb/ux-standards.md, web/frontend-design.mdOnly end when ALL features have "passes": true and all refinements are committed, or a truly unrecoverable error occurs.
Before ending: final standards audit, run all tests, verify references/core/session-handoff-standards.md.
| Situation | Decision |
|-----------|----------|
| Ambiguous spec | Simplest reasonable interpretation |
| Multiple approaches | Match existing patterns |
| Test is flaky | Fix with proper waits, don't skip |
| Feature too large | Break into sub-tasks within subagent |
| Build/dependency error | Read error, fix, rebuild |
| Same tool fails twice | STOP retrying same approach. Read error output. Try a different strategy. |
| Edit tool: old_string not found | Read the file first, get exact current content, then retry Edit |
| Test fails after re-run | Read failure output, fix root cause in code, then re-run. Never re-run without a code change. |
| TypeScript error after edit | Run tsc --noEmit to see all errors, fix them ALL, then re-run tests |
| Tempted to use AskUserQuestion | NEVER — make your best judgment, the human may be asleep |
| Port conflict | Kill conflicting process, restart |
| Feature blocked | Skip to next, come back later |
| Tempted to skip refinement | NEVER skip — launch it |
| Web: frontend loads forever | Check CORS + route prefix |
| Web: curl works, browser doesn't | CORS middleware missing |
| Web: backend 404 on /api/v1/ | Mount handler under correct prefix |
references/templates/feature-subagent.md — Implementation subagent promptreferences/templates/refinement-subagent.md — Refinement subagent promptreferences/templates/audit-subagent.md — Standards audit subagent promptreferences/core/code-quality.md — File organization, testability, unit testingreferences/core/gitignore-standards.md — Files that must never be committedreferences/core/feature-list-format.md — Feature list structure and rulesreferences/core/session-handoff-standards.md — Clean state at session endreferences/core/init-script-template.md — init.sh templates by project typereferences/core/constitution-audit.md — Audit workflow for compliance scopesreferences/web/ux-standards.md — Loading/empty/error states, responsive, accessibilityreferences/web/frontend-design.md — Typography, color, compositionreferences/verification/{web,api,cli,library,data,mobile}-verification.mdtools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.