From gsd
Executes small, ad-hoc tasks using GSD methodology with atomic commits and state tracking, while skipping optional agents like research and discussion. Supports flags for adding discussion, research, or full quality pipeline.
How this skill is triggered — by the user, by Claude, or both
Slash command
/gsd:quick [list | status <slug> | resume <slug> | --full] [--validate] [--discuss] [--research] [task description][list | status <slug> | resume <slug> | --full] [--validate] [--discuss] [--research] [task description]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
<objective>
Default: Skips research, discussion, plan-checker, verifier. Use when you know exactly what to do.
--discuss flag: Lightweight discussion before planning. Surfaces assumptions, captures decisions in CONTEXT.md. Use when the task has ambiguity worth resolving upfront.
--full flag: Complete quality pipeline — discussion + research + plan-checking + verification.
--validate flag: Plan-checking (max 2 iterations) and post-execution verification only. Quality guarantees without discussion or research.
--research flag: Spawns a focused research agent before planning. Investigates approaches, library options, and pitfalls. Use when unsure of the best approach.
Granular flags are composable: --discuss --research --validate equals --full.
Subcommands:
list — List all quick tasks with statusstatus <slug> — Show status of a specific quick taskresume <slug> — Resume a specific quick task by slug
<execution_context> @${CLAUDE_PLUGIN_ROOT}/workflows/quick.md </execution_context>
$ARGUMENTSContext files are resolved inside the workflow (init quick) and delegated via <files_to_read> blocks.
Parse $ARGUMENTS for subcommands FIRST:
Slug sanitization (for status and resume): Strip any characters not matching [a-z0-9-]. Reject slugs longer than 60 chars or containing .. or /. If invalid, output "Invalid session slug." and stop.
When SUBCMD=list:
ls -d .planning/quick/*/ 2>/dev/null
For each directory found:
status from its frontmatter via:
gsd-sdk query frontmatter.get .planning/quick/{dir}/SUMMARY.md status 2>/dev/null
stat -f "%SB" -t "%Y-%m-%d" (macOS) or stat -c "%w" (Linux); fall back to the date prefix in the directory name (format: YYYYMMDD- prefix)complete ✓incompletein-progressabandoned? (>7 days, no summary)SECURITY: Directory names are read from the filesystem. Before displaying any slug, sanitize: strip non-printable characters, ANSI escape sequences, and path separators using: name.replace(/[^\x20-\x7E]/g, '').replace(/[/\\]/g, ''). Never pass raw directory names to shell commands via string interpolation.
Display format:
Quick Tasks
────────────────────────────────────────────────────────────
slug date status
backup-s3-policy 2026-04-10 in-progress
auth-token-refresh-fix 2026-04-09 complete ✓
update-node-deps 2026-04-08 abandoned? (>7 days, no summary)
────────────────────────────────────────────────────────────
3 tasks (1 complete, 2 incomplete/in-progress)
If no directories found: print No quick tasks found. and stop.
STOP after displaying the list. Do NOT proceed to further steps.
When SUBCMD=status and SLUG is set (already sanitized):
Find directory matching *-{SLUG} pattern:
dir=$(ls -d .planning/quick/*-{SLUG}/ 2>/dev/null | head -1)
If no directory found, print No quick task found with slug: {SLUG} and stop.
Read PLAN.md and SUMMARY.md (if exists) for the given slug. Display:
Quick Task: {slug}
─────────────────────────────────────
Plan file: .planning/quick/{dir}/PLAN.md
Status: {status from SUMMARY.md frontmatter, or "no summary yet"}
Description: {first non-empty line from PLAN.md after frontmatter}
Last action: {last meaningful line of SUMMARY.md, or "none"}
─────────────────────────────────────
Resume with: /gsd:quick resume {slug}
No agent spawn. STOP after printing.
When SUBCMD=resume and SLUG is set (already sanitized):
Find the directory matching *-{SLUG} pattern:
dir=$(ls -d .planning/quick/*-{SLUG}/ 2>/dev/null | head -1)
If no directory found, print No quick task found with slug: {SLUG} and stop.
Read PLAN.md to extract description and SUMMARY.md (if exists) to extract status.
Print before spawning:
[quick] Resuming: .planning/quick/{dir}/
[quick] Plan: {description from PLAN.md}
[quick] Status: {status from SUMMARY.md, or "in-progress"}
Load context via:
gsd-sdk query init.quick
Proceed to execute the quick workflow with resume context, passing the slug and plan directory so the executor picks up where it left off.
When SUBCMD=run:
Execute the quick workflow from @${CLAUDE_PLUGIN_ROOT}/workflows/quick.md end-to-end. Preserve all workflow gates (validation, task description, planning, execution, state updates, commits).
<output_format>
When the quick task completes (SUMMARY.md written, STATE.md updated), emit a Next Up continuation block following the pattern in references/continuation-format.md:
## ✓ Quick Task Complete — {slug})## ▶ Next Up heading suggesting the next likely action (often /gsd:next or returning to a paused phase)`/clear` then: before the command only for quick tasks that ran for >5 tool calls or >10 minutes — short trivial tasks don't accumulate enough context to warrant a clear/clear IS suggested, include the parenthetical: (/clear is safe — /gsd:resume-work restores position from HANDOFF.json if you change your mind)references/continuation-format.md — if any phase has a testing/partial UAT, lead with ↩ Resume UAT for Phase {N}: /gsd:verify-work {N} ABOVE the Next-Up, so the interrupted verification is not silently abandoned.
</output_format><security_notes>
gsd-sdk query frontmatter.get — never eval'd or shell-expanded
</security_notes>npx claudepluginhub jnuyens/gsd-pluginExecutes small ad-hoc tasks with GSD guarantees including atomic commits and state tracking. Supports optional flags for discussion, research, plan-checking, and verification.
Creates, executes, and verifies small dev tasks directly via Chorus tools, skipping Idea/Proposal. For bug fixes, <2pt features, hotfixes, prototypes.
Executes eligible tasks from session task list, syncs against codebase/PR state to surface stales, and generates handovers. Use /task-run [--all] [--sync [--dry-run]] [--handover [query]].