* gsd: Installed
* docs: complete project research
Research for adding GitHub Copilot CLI as 5th runtime to installer.
Files:
- STACK.md: Zero new deps, Copilot reads from .github/, tool name mapping
- FEATURES.md: 18 table stakes, 4 differentiators, 6 anti-features
- ARCHITECTURE.md: Codex-parallel pattern, 5 new functions, 12 existing changes
- PITFALLS.md: 10 pitfalls with prevention strategies and phase mapping
- SUMMARY.md: Synthesized findings, 4-phase roadmap suggestion
* docs(01): create phase plan for core installer plumbing
* feat(01-01): add Copilot as 5th runtime across all install.js locations
- Add --copilot flag parsing and selectedRuntimes integration
- Add 'copilot' to --all array (5 runtimes)
- getDirName('copilot') returns '.github' (local path)
- getGlobalDir('copilot') returns ~/.copilot with COPILOT_CONFIG_DIR override
- getConfigDirFromHome handles copilot for both local/global
- Banner and help text updated to include Copilot
- promptRuntime: Copilot as option 5, All renumbered to option 6
- install(): isCopilot variable, runtimeLabel, skip hooks (Codex pattern)
- install(): Copilot early return before hooks/settings configuration
- finishInstall(): Copilot program name and /gsd-new-project command
- uninstall(): Copilot runtime label and isCopilot variable
- GSD_TEST_MODE exports: getDirName, getGlobalDir, getConfigDirFromHome
* test(01-01): add Copilot plumbing unit tests
- 19 tests covering getDirName, getGlobalDir, getConfigDirFromHome
- getGlobalDir: default path, explicit dir, COPILOT_CONFIG_DIR env var, priority
- Source code integration checks for CLI-01 through CLI-06
- Verifies --both flag unchanged, hooks skipped, prompt options correct
- All 481 tests pass (19 new + 462 existing, no regressions)
* docs(01-01): complete core installer plumbing plan
- Mark Phase 1 and Plan 01-01 as complete in ROADMAP.md
- All 6 requirements (CLI-01 through CLI-06) fulfilled
* gsd: planning
* docs(02): create phase 2 content conversion engine plans
* feat(02-01): add Copilot tool mapping constant and conversion functions
- Add claudeToCopilotTools constant (13 Claude→Copilot tool mappings)
- Add convertCopilotToolName() with mcp__context7__ wildcard handling
- Add convertClaudeToCopilotContent() for CONV-06 (4 path patterns) + CONV-07 (gsd:→gsd-)
- Add convertClaudeCommandToCopilotSkill() for skill frontmatter transformation
- Add convertClaudeAgentToCopilotAgent() with tool dedup and JSON array format
- Export all new functions + constant via GSD_TEST_MODE
* feat(02-01): wire Copilot conversion into install() flow
- Add copyCommandsAsCopilotSkills() for folder-per-skill structure
- Add isCopilot branch in install() skill copy section
- Add isCopilot branch in agent loop with .agent.md rename
- Skip generic path replacement for Copilot (converter handles it)
- Add isCopilot branch in copyWithPathReplacement for .md files
- Add .cjs/.js content transformation for CONV-06/CONV-07
- Export copyCommandsAsCopilotSkills via GSD_TEST_MODE
- CONV-09 not generated (discarded), CONV-10 confirmed working
* docs(02-01): complete content conversion engine plan
- Create 02-01-SUMMARY.md with execution results
- Update STATE.md with Phase 2 position and decisions
- Mark CONV-01 through CONV-10 requirements complete
* test(02-02): add unit tests for Copilot conversion functions
- 16 tests for convertCopilotToolName (all 12 direct mappings, mcp prefix, wildcard, unknown fallback, constant size)
- 8 tests for convertClaudeToCopilotContent (4 path patterns, gsd: conversion, mixed content, no double-replace, passthrough)
- 7 tests for convertClaudeCommandToCopilotSkill (all fields, missing optional fields, CONV-06/07, no frontmatter, agent field)
- 7 tests for convertClaudeAgentToCopilotAgent (dedup, JSON array, field preservation, mcp tools, no tools, CONV-06/07, no frontmatter)
* test(02-02): add integration tests for Copilot skill copy and agent conversion
- copyCommandsAsCopilotSkills produces 31 skill folders with SKILL.md files
- Skill content verified: comma-separated allowed-tools, no YAML multiline, CONV-06/07 applied
- Old skill directories cleaned up on re-run
- gsd-executor agent: 6 tools → 4 after dedup (Write+Edit→edit, Grep+Glob→search)
- gsd-phase-researcher: mcp__context7__* wildcard → io.github.upstash/context7/*
- All 11 agents convert without error, all have frontmatter and tools
- Engine .md and .cjs files: no ~/.claude/ or gsd: references after conversion
- Full suite: 527 tests pass, zero regressions
* docs(02-02): complete Copilot conversion test suite plan
- SUMMARY: 46 new tests covering all conversion functions
- STATE: Phase 02 complete, 3/3 plans done
- ROADMAP: Phase 02 marked complete
* docs(03): research phase domain
* docs(03-instructions-lifecycle): create phase plan
* feat(03-01): add copilot-instructions template and merge/strip functions
- Create get-shit-done/templates/copilot-instructions.md with 5 GSD instructions
- Add GSD_COPILOT_INSTRUCTIONS_MARKER and GSD_COPILOT_INSTRUCTIONS_CLOSE_MARKER constants
- Add mergeCopilotInstructions() with 3-case merge (create, replace, append)
- Add stripGsdFromCopilotInstructions() with null-return for GSD-only content
* feat(03-01): wire install, fix uninstall/manifest/patches for Copilot
- Wire mergeCopilotInstructions() into install() before Copilot early return
- Add else-if isCopilot uninstall branch: remove skills/gsd-*/ + clean instructions
- Fix writeManifest() to hash Copilot skills: (isCodex || isCopilot)
- Fix reportLocalPatches() to show /gsd-reapply-patches for Copilot
- Export new functions and constants in GSD_TEST_MODE
- All 527 existing tests pass with zero regressions
* docs(03-01): complete instructions lifecycle plan
- Create 03-01-SUMMARY.md with execution results
- Update STATE.md: Phase 3 Plan 1 position, decisions, session
- Update ROADMAP.md: Phase 03 progress (1/2 plans)
- Mark INST-01, INST-02, LIFE-01, LIFE-02, LIFE-03 complete
* test(03-02): add unit tests for mergeCopilotInstructions and stripGsdFromCopilotInstructions
- 10 new tests: 5 merge cases + 5 strip cases
- Tests cover create/replace/append merge scenarios
- Tests cover null-return, content preservation, no-markers passthrough
- Added beforeEach/afterEach imports for temp dir lifecycle
- Exported writeManifest and reportLocalPatches via GSD_TEST_MODE for Task 2
* test(03-02): add integration tests for uninstall, manifest, and patches Copilot fixes
- 3 uninstall tests: gsd-* skill identification, instructions cleanup, GSD-only deletion
- writeManifest hashes Copilot skills in manifest JSON (proves isCopilot fix)
- reportLocalPatches uses /gsd-reapply-patches for Copilot (dash format)
- reportLocalPatches uses /gsd:reapply-patches for Claude (no regression)
- Full suite: 543 tests pass, 0 failures
* docs(03-02): complete instructions lifecycle tests plan
- SUMMARY.md with 16 new tests documented
- STATE.md updated: Phase 3 complete, 5/5 plans done
- ROADMAP.md updated: Phase 03 marked complete
* docs(04): capture phase context
* docs(04): research phase domain
* docs(04): create phase plan — E2E integration tests for Copilot install/uninstall
* test(04-01): add E2E Copilot full install verification tests
- 9 tests: skills count/structure, agents count/names, instructions markers
- Manifest structure, categories, SHA256 integrity verification
- Engine directory completeness (bin, references, templates, workflows, CHANGELOG, VERSION)
- Uses execFileSync in isolated /tmp dirs with GSD_TEST_MODE stripped from env
* test(04-01): add E2E Copilot uninstall verification tests
- 6 tests: engine removal, instructions removal, GSD skills/agents cleanup
- Preserves non-GSD custom skills and agents after uninstall
- Standalone lifecycle tests for preservation (install → add custom → uninstall → verify)
- Full suite: 558 tests passing, 0 failures
* docs(04-01): complete E2E Copilot install/uninstall integration tests plan
- SUMMARY.md: 15 E2E tests, SHA256 integrity, 558 total tests passing
- STATE.md: Phase 4 complete, 6/6 plans done
- ROADMAP.md: Phase 4 marked complete
- REQUIREMENTS.md: QUAL-01 complete, QUAL-02 out of scope
* fix: use .github paths for Copilot --local instead of ~/.copilot
convertClaudeToCopilotContent() was hardcoded to always map ~/.claude/
and $HOME/.claude/ to ~/.copilot/ and $HOME/.copilot/ regardless of
install mode. For --local installs these should map to .github/ (repo-
relative, no ./ prefix) since Copilot resolves @file references from
the repo root.
Local mode: ~/.claude/ → .github/ | $HOME/.claude/ → .github/
Global mode: ~/.claude/ → ~/.copilot/ | $HOME/.claude/ → $HOME/.copilot/
Added isGlobal parameter to convertClaudeToCopilotContent,
convertClaudeCommandToCopilotSkill, convertClaudeAgentToCopilotAgent,
copyCommandsAsCopilotSkills, and copyWithPathReplacement. All call
sites in install() now pass isGlobal through.
Tests updated to cover both local (default) and global modes.
565 tests passing, 0 failures.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix: use double quotes for argument-hint in Copilot skills
The converter was hardcoding single quotes around argument-hint values
in skill frontmatter. This breaks YAML parsing when the value itself
contains single quotes (e.g., "e.g., 'v1.1 Notifications'").
Now uses yamlQuote() (JSON.stringify) which produces double-quoted
strings with proper escaping.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chore: complete v1.23 milestone — Copilot CLI Support
Archive milestone artifacts, retrospective, and update project docs.
- Archive: v1.23-ROADMAP.md, v1.23-REQUIREMENTS.md, v1.23-MILESTONE-AUDIT.md
- Create: MILESTONES.md, RETROSPECTIVE.md
- Evolve: PROJECT.md (validated reqs, key decisions, shipped context)
- Reorganize: ROADMAP.md (collapsed v1.23, progress table)
- Update: STATE.md (status: completed)
- Delete: REQUIREMENTS.md (archived, fresh for next milestone)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chore: archive phase directories from v1.23 milestone
* chore: Clean gsd tracking
* fix: update test counts for new upstream commands and agents
Upstream added validate-phase command (32 skills) and nyquist-auditor agent (12 agents).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chore: Remove copilot instructions
* chore: Improve loop
* gsd: installation
* docs: start milestone v1.24 Autonomous Skill
* docs: internal research for autonomous skill
* docs: define milestone v1.24 requirements
* docs: create milestone v1.24 roadmap (4 phases)
* docs: phase 5 context — skill scaffolding decisions
* docs(5): research phase domain
* docs(05): create phase plan — 2 plans in 2 waves
* docs(phase-5): add validation strategy
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* test(05-01): add failing tests for colon-outside-bold regex format
- Test get-phase with **Goal**: format (colon outside bold)
- Test analyze with **Goal**: and **Depends on**: formats
- Test mixed colon-inside and colon-outside bold formats
- All 3 new tests fail confirming the regex bug
* fix(05-01): fix regex for goal/depends_on extraction in roadmap.cjs
- Fix 3 regex patterns to support both **Goal:** and **Goal**: formats
- Pattern: /\*\*Goal(?::\*\*|\*\*:)/ handles colon inside or outside bold
- Fix in both source (get-shit-done/) and runtime (.github/) copies
- All 28 tests pass including 4 new colon-outside-bold tests
- Live verification: all 4 phases return non-null goals from real ROADMAP.md
* feat(05-01): create gsd:autonomous command file
- name: gsd:autonomous with argument-hint: [--from N]
- Sections: objective, execution_context, context, process
- References workflows/autonomous.md and references/ui-brand.md
- Follows exact pattern of new-milestone.md (42 lines)
* docs(05-01): complete roadmap regex fix + autonomous command plan
* feat(05-02): create autonomous workflow with phase discovery and Skill() execution
- Initialize step with milestone-op bootstrap and --from N flag parsing
- Phase discovery via roadmap analyze with incomplete filtering and sort
- Execute step uses Skill() flat calls for discuss/plan/execute (not Task())
- Progress banner: GSD ► AUTONOMOUS ▸ Phase N/T format with bar
- Iterate step re-reads ROADMAP.md after each phase for dynamic phase detection
- Handle blocker step with retry/skip/stop user options
* test(05-02): add autonomous skill generation tests and fix skill count
- Test autonomous.md converts to gsd-autonomous Copilot skill with correct frontmatter
- Test CONV-07 converts gsd: to gsd- in autonomous command body content
- Update skill count from 32 to 33 (autonomous.md added in plan 01)
- All 645 tests pass across full suite
* docs(05-02): complete autonomous workflow plan
* docs: phase 5 complete — update roadmap and state
* docs: phase 6 context — smart discuss decisions
* docs(06): research smart discuss phase domain
* docs(06): create phase plan
* feat(06-01): replace Skill(discuss-phase) with inline smart discuss
- Add <step name="smart_discuss"> with 5 sub-steps: load prior context, scout codebase, analyze phase with infrastructure detection, present proposals per area in tables, write CONTEXT.md
- Rewire execute_phase step 3a: check has_context before/after, reference smart_discuss inline
- Remove Skill(gsd:discuss-phase) call entirely
- Preserve Skill(gsd:plan-phase) and Skill(gsd:execute-phase) calls unchanged
- Update success criteria to mention smart discuss
- Grey area proposals use table format with recommended/alternative columns
- AskUserQuestion offers Accept all, Change QN, Discuss deeper per area
- Infrastructure phases auto-detected and skip to minimal CONTEXT.md
- CONTEXT.md output uses identical XML-wrapped sections as discuss-phase.md
* docs(06-01): complete smart discuss inline logic plan
* docs(07): phase execution chain context — flag strategy, validation routing, error recovery
* docs(07): research phase execution chain domain
* docs(07): create phase plan
* feat(07-01): wire phase execution chain with verification routing
- Add --no-transition flag to execute-phase Skill() call in step 3c
- Replace step 3d transition with VERIFICATION.md-based routing
- Route on passed/human_needed/gaps_found with appropriate user prompts
- Add gap closure cycle with 1-retry limit to prevent infinite loops
- Route execute-phase failures (no VERIFICATION.md) to handle_blocker
- Update success_criteria with all new verification behaviors
* docs(07-01): complete phase execution chain plan
* docs(08): multi-phase orchestration & lifecycle context
* docs(08): research phase domain
* docs(08): create phase plan
* feat(08-01): add lifecycle step, fix progress bar, document smart_discuss
- Add lifecycle step (audit→complete→cleanup) after all phases complete
- Fix progress bar N/T to use phase number/total milestone phases
- Add smart_discuss CTRL-03 compliance documentation note
- Rewire iterate step to route to lifecycle instead of manual banner
- Renumber handle_blocker from step 5 to step 6
- Add 10 lifecycle-related items to success criteria
- File grows from 630 to 743 lines, 6 to 7 named steps
* docs(08-01): complete multi-phase orchestration & lifecycle plan
* docs: v1.24 milestone audit — passed (18/18 requirements)
* chore: complete v1.24 milestone — Autonomous Skill
* chore: archive phase directories from v1.24 milestone
* gsd: clean
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
GET SHIT DONE
A light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code, OpenCode, Gemini CLI, and Codex.
Solves context rot — the quality degradation that happens as Claude fills its context window.
npx get-shit-done-cc@latest
Works on Mac, Windows, and Linux.
"If you know clearly what you want, this WILL build it for you. No bs."
"I've done SpecKit, OpenSpec and Taskmaster — this has produced the best results for me."
"By far the most powerful addition to my Claude Code. Nothing over-engineered. Literally just gets shit done."
Trusted by engineers at Amazon, Google, Shopify, and Webflow.
Why I Built This · How It Works · Commands · Why It Works · User Guide
Why I Built This
I'm a solo developer. I don't write code — Claude Code does.
Other spec-driven development tools exist; BMAD, Speckit... But they all seem to make things way more complicated than they need to be (sprint ceremonies, story points, stakeholder syncs, retrospectives, Jira workflows) or lack real big picture understanding of what you're building. I'm not a 50-person software company. I don't want to play enterprise theater. I'm just a creative person trying to build great things that work.
So I built GSD. The complexity is in the system, not in your workflow. Behind the scenes: context engineering, XML prompt formatting, subagent orchestration, state management. What you see: a few commands that just work.
The system gives Claude everything it needs to do the work and verify it. I trust the workflow. It just does a good job.
That's what this is. No enterprise roleplay bullshit. Just an incredibly effective system for building cool stuff consistently using Claude Code.
— TÂCHES
Vibecoding has a bad reputation. You describe what you want, AI generates code, and you get inconsistent garbage that falls apart at scale.
GSD fixes that. It's the context engineering layer that makes Claude Code reliable. Describe your idea, let the system extract everything it needs to know, and let Claude Code get to work.
Who This Is For
People who want to describe what they want and have it built correctly — without pretending they're running a 50-person engineering org.
Getting Started
npx get-shit-done-cc@latest
The installer prompts you to choose:
- Runtime — Claude Code, OpenCode, Gemini, Codex, or all
- Location — Global (all projects) or local (current project only)
Verify with:
- Claude Code / Gemini:
/gsd:help - OpenCode:
/gsd-help - Codex:
$gsd-help
Note
Codex installation uses skills (
skills/gsd-*/SKILL.md) rather than custom prompts.
Staying Updated
GSD evolves fast. Update periodically:
npx get-shit-done-cc@latest
Non-interactive Install (Docker, CI, Scripts)
# Claude Code
npx get-shit-done-cc --claude --global # Install to ~/.claude/
npx get-shit-done-cc --claude --local # Install to ./.claude/
# OpenCode (open source, free models)
npx get-shit-done-cc --opencode --global # Install to ~/.config/opencode/
# Gemini CLI
npx get-shit-done-cc --gemini --global # Install to ~/.gemini/
# Codex (skills-first)
npx get-shit-done-cc --codex --global # Install to ~/.codex/
npx get-shit-done-cc --codex --local # Install to ./.codex/
# All runtimes
npx get-shit-done-cc --all --global # Install to all directories
Use --global (-g) or --local (-l) to skip the location prompt.
Use --claude, --opencode, --gemini, --codex, or --all to skip the runtime prompt.
Development Installation
Clone the repository and run the installer locally:
git clone https://github.com/glittercowboy/get-shit-done.git
cd get-shit-done
node bin/install.js --claude --local
Installs to ./.claude/ for testing modifications before contributing.
Recommended: Skip Permissions Mode
GSD is designed for frictionless automation. Run Claude Code with:
claude --dangerously-skip-permissions
Tip
This is how GSD is intended to be used — stopping to approve
dateandgit commit50 times defeats the purpose.
Alternative: Granular Permissions
If you prefer not to use that flag, add this to your project's .claude/settings.json:
{
"permissions": {
"allow": [
"Bash(date:*)",
"Bash(echo:*)",
"Bash(cat:*)",
"Bash(ls:*)",
"Bash(mkdir:*)",
"Bash(wc:*)",
"Bash(head:*)",
"Bash(tail:*)",
"Bash(sort:*)",
"Bash(grep:*)",
"Bash(tr:*)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(git status:*)",
"Bash(git log:*)",
"Bash(git diff:*)",
"Bash(git tag:*)"
]
}
}
How It Works
Already have code? Run
/gsd:map-codebasefirst. It spawns parallel agents to analyze your stack, architecture, conventions, and concerns. Then/gsd:new-projectknows your codebase — questions focus on what you're adding, and planning automatically loads your patterns.
1. Initialize Project
/gsd:new-project
One command, one flow. The system:
- Questions — Asks until it understands your idea completely (goals, constraints, tech preferences, edge cases)
- Research — Spawns parallel agents to investigate the domain (optional but recommended)
- Requirements — Extracts what's v1, v2, and out of scope
- Roadmap — Creates phases mapped to requirements
You approve the roadmap. Now you're ready to build.
Creates: PROJECT.md, REQUIREMENTS.md, ROADMAP.md, STATE.md, .planning/research/
2. Discuss Phase
/gsd:discuss-phase 1
This is where you shape the implementation.
Your roadmap has a sentence or two per phase. That's not enough context to build something the way you imagine it. This step captures your preferences before anything gets researched or planned.
The system analyzes the phase and identifies gray areas based on what's being built:
- Visual features → Layout, density, interactions, empty states
- APIs/CLIs → Response format, flags, error handling, verbosity
- Content systems → Structure, tone, depth, flow
- Organization tasks → Grouping criteria, naming, duplicates, exceptions
For each area you select, it asks until you're satisfied. The output — CONTEXT.md — feeds directly into the next two steps:
- Researcher reads it — Knows what patterns to investigate ("user wants card layout" → research card component libraries)
- Planner reads it — Knows what decisions are locked ("infinite scroll decided" → plan includes scroll handling)
The deeper you go here, the more the system builds what you actually want. Skip it and you get reasonable defaults. Use it and you get your vision.
Creates: {phase_num}-CONTEXT.md
3. Plan Phase
/gsd:plan-phase 1
The system:
- Researches — Investigates how to implement this phase, guided by your CONTEXT.md decisions
- Plans — Creates 2-3 atomic task plans with XML structure
- Verifies — Checks plans against requirements, loops until they pass
Each plan is small enough to execute in a fresh context window. No degradation, no "I'll be more concise now."
Creates: {phase_num}-RESEARCH.md, {phase_num}-{N}-PLAN.md
4. Execute Phase
/gsd:execute-phase 1
The system:
- Runs plans in waves — Parallel where possible, sequential when dependent
- Fresh context per plan — 200k tokens purely for implementation, zero accumulated garbage
- Commits per task — Every task gets its own atomic commit
- Verifies against goals — Checks the codebase delivers what the phase promised
Walk away, come back to completed work with clean git history.
How Wave Execution Works:
Plans are grouped into "waves" based on dependencies. Within each wave, plans run in parallel. Waves run sequentially.
┌─────────────────────────────────────────────────────────────────────┐
│ PHASE EXECUTION │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ WAVE 1 (parallel) WAVE 2 (parallel) WAVE 3 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Plan 01 │ │ Plan 02 │ → │ Plan 03 │ │ Plan 04 │ → │ Plan 05 │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ User │ │ Product │ │ Orders │ │ Cart │ │ Checkout│ │
│ │ Model │ │ Model │ │ API │ │ API │ │ UI │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ │ │ ↑ ↑ ↑ │
│ └───────────┴──────────────┴───────────┘ │ │
│ Dependencies: Plan 03 needs Plan 01 │ │
│ Plan 04 needs Plan 02 │ │
│ Plan 05 needs Plans 03 + 04 │ │
│ │
└─────────────────────────────────────────────────────────────────────┘
Why waves matter:
- Independent plans → Same wave → Run in parallel
- Dependent plans → Later wave → Wait for dependencies
- File conflicts → Sequential plans or same plan
This is why "vertical slices" (Plan 01: User feature end-to-end) parallelize better than "horizontal layers" (Plan 01: All models, Plan 02: All APIs).
Creates: {phase_num}-{N}-SUMMARY.md, {phase_num}-VERIFICATION.md
5. Verify Work
/gsd:verify-work 1
This is where you confirm it actually works.
Automated verification checks that code exists and tests pass. But does the feature work the way you expected? This is your chance to use it.
The system:
- Extracts testable deliverables — What you should be able to do now
- Walks you through one at a time — "Can you log in with email?" Yes/no, or describe what's wrong
- Diagnoses failures automatically — Spawns debug agents to find root causes
- Creates verified fix plans — Ready for immediate re-execution
If everything passes, you move on. If something's broken, you don't manually debug — you just run /gsd:execute-phase again with the fix plans it created.
Creates: {phase_num}-UAT.md, fix plans if issues found
6. Repeat → Complete → Next Milestone
/gsd:discuss-phase 2
/gsd:plan-phase 2
/gsd:execute-phase 2
/gsd:verify-work 2
...
/gsd:complete-milestone
/gsd:new-milestone
Loop discuss → plan → execute → verify until milestone complete.
If you want faster intake during discussion, use /gsd:discuss-phase <n> --batch to answer a small grouped set of questions at once instead of one-by-one.
Each phase gets your input (discuss), proper research (plan), clean execution (execute), and human verification (verify). Context stays fresh. Quality stays high.
When all phases are done, /gsd:complete-milestone archives the milestone and tags the release.
Then /gsd:new-milestone starts the next version — same flow as new-project but for your existing codebase. You describe what you want to build next, the system researches the domain, you scope requirements, and it creates a fresh roadmap. Each milestone is a clean cycle: define → build → ship.
Quick Mode
/gsd:quick
For ad-hoc tasks that don't need full planning.
Quick mode gives you GSD guarantees (atomic commits, state tracking) with a faster path:
- Same agents — Planner + executor, same quality
- Skips optional steps — No research, no plan checker, no verifier
- Separate tracking — Lives in
.planning/quick/, not phases
Use for: bug fixes, small features, config changes, one-off tasks.
/gsd:quick
> What do you want to do? "Add dark mode toggle to settings"
Creates: .planning/quick/001-add-dark-mode-toggle/PLAN.md, SUMMARY.md
Why It Works
Context Engineering
Claude Code is incredibly powerful if you give it the context it needs. Most people don't.
GSD handles it for you:
| File | What it does |
|---|---|
PROJECT.md |
Project vision, always loaded |
research/ |
Ecosystem knowledge (stack, features, architecture, pitfalls) |
REQUIREMENTS.md |
Scoped v1/v2 requirements with phase traceability |
ROADMAP.md |
Where you're going, what's done |
STATE.md |
Decisions, blockers, position — memory across sessions |
PLAN.md |
Atomic task with XML structure, verification steps |
SUMMARY.md |
What happened, what changed, committed to history |
todos/ |
Captured ideas and tasks for later work |
Size limits based on where Claude's quality degrades. Stay under, get consistent excellence.
XML Prompt Formatting
Every plan is structured XML optimized for Claude:
<task type="auto">
<name>Create login endpoint</name>
<files>src/app/api/auth/login/route.ts</files>
<action>
Use jose for JWT (not jsonwebtoken - CommonJS issues).
Validate credentials against users table.
Return httpOnly cookie on success.
</action>
<verify>curl -X POST localhost:3000/api/auth/login returns 200 + Set-Cookie</verify>
<done>Valid credentials return cookie, invalid return 401</done>
</task>
Precise instructions. No guessing. Verification built in.
Multi-Agent Orchestration
Every stage uses the same pattern: a thin orchestrator spawns specialized agents, collects results, and routes to the next step.
| Stage | Orchestrator does | Agents do |
|---|---|---|
| Research | Coordinates, presents findings | 4 parallel researchers investigate stack, features, architecture, pitfalls |
| Planning | Validates, manages iteration | Planner creates plans, checker verifies, loop until pass |
| Execution | Groups into waves, tracks progress | Executors implement in parallel, each with fresh 200k context |
| Verification | Presents results, routes next | Verifier checks codebase against goals, debuggers diagnose failures |
The orchestrator never does heavy lifting. It spawns agents, waits, integrates results.
The result: You can run an entire phase — deep research, multiple plans created and verified, thousands of lines of code written across parallel executors, automated verification against goals — and your main context window stays at 30-40%. The work happens in fresh subagent contexts. Your session stays fast and responsive.
Atomic Git Commits
Each task gets its own commit immediately after completion:
abc123f docs(08-02): complete user registration plan
def456g feat(08-02): add email confirmation flow
hij789k feat(08-02): implement password hashing
lmn012o feat(08-02): create registration endpoint
Note
Benefits: Git bisect finds exact failing task. Each task independently revertable. Clear history for Claude in future sessions. Better observability in AI-automated workflow.
Every commit is surgical, traceable, and meaningful.
Modular by Design
- Add phases to current milestone
- Insert urgent work between phases
- Complete milestones and start fresh
- Adjust plans without rebuilding everything
You're never locked in. The system adapts.
Commands
Core Workflow
| Command | What it does |
|---|---|
/gsd:new-project [--auto] |
Full initialization: questions → research → requirements → roadmap |
/gsd:discuss-phase [N] [--auto] |
Capture implementation decisions before planning |
/gsd:plan-phase [N] [--auto] |
Research + plan + verify for a phase |
/gsd:execute-phase <N> |
Execute all plans in parallel waves, verify when complete |
/gsd:verify-work [N] |
Manual user acceptance testing ¹ |
/gsd:audit-milestone |
Verify milestone achieved its definition of done |
/gsd:complete-milestone |
Archive milestone, tag release |
/gsd:new-milestone [name] |
Start next version: questions → research → requirements → roadmap |
Navigation
| Command | What it does |
|---|---|
/gsd:progress |
Where am I? What's next? |
/gsd:help |
Show all commands and usage guide |
/gsd:update |
Update GSD with changelog preview |
/gsd:join-discord |
Join the GSD Discord community |
Brownfield
| Command | What it does |
|---|---|
/gsd:map-codebase |
Analyze existing codebase before new-project |
Phase Management
| Command | What it does |
|---|---|
/gsd:add-phase |
Append phase to roadmap |
/gsd:insert-phase [N] |
Insert urgent work between phases |
/gsd:remove-phase [N] |
Remove future phase, renumber |
/gsd:list-phase-assumptions [N] |
See Claude's intended approach before planning |
/gsd:plan-milestone-gaps |
Create phases to close gaps from audit |
Session
| Command | What it does |
|---|---|
/gsd:pause-work |
Create handoff when stopping mid-phase |
/gsd:resume-work |
Restore from last session |
Utilities
| Command | What it does |
|---|---|
/gsd:settings |
Configure model profile and workflow agents |
/gsd:set-profile <profile> |
Switch model profile (quality/balanced/budget) |
/gsd:add-todo [desc] |
Capture idea for later |
/gsd:check-todos |
List pending todos |
/gsd:debug [desc] |
Systematic debugging with persistent state |
/gsd:quick [--full] [--discuss] |
Execute ad-hoc task with GSD guarantees (--full adds plan-checking and verification, --discuss gathers context first) |
/gsd:health [--repair] |
Validate .planning/ directory integrity, auto-repair with --repair |
¹ Contributed by reddit user OracleGreyBeard
Configuration
GSD stores project settings in .planning/config.json. Configure during /gsd:new-project or update later with /gsd:settings. For the full config schema, workflow toggles, git branching options, and per-agent model breakdown, see the User Guide.
Core Settings
| Setting | Options | Default | What it controls |
|---|---|---|---|
mode |
yolo, interactive |
interactive |
Auto-approve vs confirm at each step |
granularity |
coarse, standard, fine |
standard |
Phase granularity — how finely scope is sliced (phases × plans) |
Model Profiles
Control which Claude model each agent uses. Balance quality vs token spend.
| Profile | Planning | Execution | Verification |
|---|---|---|---|
quality |
Opus | Opus | Sonnet |
balanced (default) |
Opus | Sonnet | Sonnet |
budget |
Sonnet | Sonnet | Haiku |
Switch profiles:
/gsd:set-profile budget
Or configure via /gsd:settings.
Workflow Agents
These spawn additional agents during planning/execution. They improve quality but add tokens and time.
| Setting | Default | What it does |
|---|---|---|
workflow.research |
true |
Researches domain before planning each phase |
workflow.plan_check |
true |
Verifies plans achieve phase goals before execution |
workflow.verifier |
true |
Confirms must-haves were delivered after execution |
workflow.auto_advance |
false |
Auto-chain discuss → plan → execute without stopping |
Use /gsd:settings to toggle these, or override per-invocation:
/gsd:plan-phase --skip-research/gsd:plan-phase --skip-verify
Execution
| Setting | Default | What it controls |
|---|---|---|
parallelization.enabled |
true |
Run independent plans simultaneously |
planning.commit_docs |
true |
Track .planning/ in git |
Git Branching
Control how GSD handles branches during execution.
| Setting | Options | Default | What it does |
|---|---|---|---|
git.branching_strategy |
none, phase, milestone |
none |
Branch creation strategy |
git.phase_branch_template |
string | gsd/phase-{phase}-{slug} |
Template for phase branches |
git.milestone_branch_template |
string | gsd/{milestone}-{slug} |
Template for milestone branches |
Strategies:
none— Commits to current branch (default GSD behavior)phase— Creates a branch per phase, merges at phase completionmilestone— Creates one branch for entire milestone, merges at completion
At milestone completion, GSD offers squash merge (recommended) or merge with history.
Security
Protecting Sensitive Files
GSD's codebase mapping and analysis commands read files to understand your project. Protect files containing secrets by adding them to Claude Code's deny list:
- Open Claude Code settings (
.claude/settings.jsonor global) - Add sensitive file patterns to the deny list:
{
"permissions": {
"deny": [
"Read(.env)",
"Read(.env.*)",
"Read(**/secrets/*)",
"Read(**/*credential*)",
"Read(**/*.pem)",
"Read(**/*.key)"
]
}
}
This prevents Claude from reading these files entirely, regardless of what commands you run.
Important
GSD includes built-in protections against committing secrets, but defense-in-depth is best practice. Deny read access to sensitive files as a first line of defense.
Troubleshooting
Commands not found after install?
- Restart your runtime to reload commands/skills
- Verify files exist in
~/.claude/commands/gsd/(global) or./.claude/commands/gsd/(local) - For Codex, verify skills exist in
~/.codex/skills/gsd-*/SKILL.md(global) or./.codex/skills/gsd-*/SKILL.md(local)
Commands not working as expected?
- Run
/gsd:helpto verify installation - Re-run
npx get-shit-done-ccto reinstall
Updating to the latest version?
npx get-shit-done-cc@latest
Using Docker or containerized environments?
If file reads fail with tilde paths (~/.claude/...), set CLAUDE_CONFIG_DIR before installing:
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx get-shit-done-cc --global
This ensures absolute paths are used instead of ~ which may not expand correctly in containers.
Uninstalling
To remove GSD completely:
# Global installs
npx get-shit-done-cc --claude --global --uninstall
npx get-shit-done-cc --opencode --global --uninstall
npx get-shit-done-cc --codex --global --uninstall
# Local installs (current project)
npx get-shit-done-cc --claude --local --uninstall
npx get-shit-done-cc --opencode --local --uninstall
npx get-shit-done-cc --codex --local --uninstall
This removes all GSD commands, agents, hooks, and settings while preserving your other configurations.
Community Ports
OpenCode, Gemini CLI, and Codex are now natively supported via npx get-shit-done-cc.
These community ports pioneered multi-runtime support:
| Project | Platform | Description |
|---|---|---|
| gsd-opencode | OpenCode | Original OpenCode adaptation |
| gsd-gemini (archived) | Gemini CLI | Original Gemini adaptation by uberfuzzy |
Star History
License
MIT License. See LICENSE for details.
Claude Code is powerful. GSD makes it reliable.