feat: /gsd:fast command for trivial inline tasks (#609)
New lightweight command for tasks too small to justify planning overhead: typo fixes, config changes, forgotten commits, simple additions. - Runs inline in current context (no subagent spawn) - No PLAN.md or SUMMARY.md generated - Scope guard: redirects to /gsd:quick if task needs >3 file edits - Atomic commit with conventional commit format - Logs to STATE.md quick tasks table if present Complements /gsd:quick (which spawns planner+executor) for cases where the planning overhead exceeds the actual work. Closes #609
This commit is contained in:
30
commands/gsd/fast.md
Normal file
30
commands/gsd/fast.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
name: gsd:fast
|
||||||
|
description: Execute a trivial task inline — no subagents, no planning overhead
|
||||||
|
argument-hint: "[task description]"
|
||||||
|
allowed-tools:
|
||||||
|
- Read
|
||||||
|
- Write
|
||||||
|
- Edit
|
||||||
|
- Bash
|
||||||
|
- Grep
|
||||||
|
- Glob
|
||||||
|
---
|
||||||
|
|
||||||
|
<objective>
|
||||||
|
Execute a trivial task directly in the current context without spawning subagents
|
||||||
|
or generating PLAN.md files. For tasks too small to justify planning overhead:
|
||||||
|
typo fixes, config changes, small refactors, forgotten commits, simple additions.
|
||||||
|
|
||||||
|
This is NOT a replacement for /gsd:quick — use /gsd:quick for anything that
|
||||||
|
needs research, multi-step planning, or verification. /gsd:fast is for tasks
|
||||||
|
you could describe in one sentence and execute in under 2 minutes.
|
||||||
|
</objective>
|
||||||
|
|
||||||
|
<execution_context>
|
||||||
|
@~/.claude/get-shit-done/workflows/fast.md
|
||||||
|
</execution_context>
|
||||||
|
|
||||||
|
<process>
|
||||||
|
Execute the fast workflow from @~/.claude/get-shit-done/workflows/fast.md end-to-end.
|
||||||
|
</process>
|
||||||
105
get-shit-done/workflows/fast.md
Normal file
105
get-shit-done/workflows/fast.md
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
<purpose>
|
||||||
|
Execute a trivial task inline without subagent overhead. No PLAN.md, no Task spawning,
|
||||||
|
no research, no plan checking. Just: understand → do → commit → log.
|
||||||
|
|
||||||
|
For tasks like: fix a typo, update a config value, add a missing import, rename a
|
||||||
|
variable, commit uncommitted work, add a .gitignore entry, bump a version number.
|
||||||
|
|
||||||
|
Use /gsd:quick for anything that needs multi-step planning or research.
|
||||||
|
</purpose>
|
||||||
|
|
||||||
|
<process>
|
||||||
|
|
||||||
|
<step name="parse_task">
|
||||||
|
Parse `$ARGUMENTS` for the task description.
|
||||||
|
|
||||||
|
If empty, ask:
|
||||||
|
```
|
||||||
|
What's the quick fix? (one sentence)
|
||||||
|
```
|
||||||
|
|
||||||
|
Store as `$TASK`.
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step name="scope_check">
|
||||||
|
**Before doing anything, verify this is actually trivial.**
|
||||||
|
|
||||||
|
A task is trivial if it can be completed in:
|
||||||
|
- ≤ 3 file edits
|
||||||
|
- ≤ 1 minute of work
|
||||||
|
- No new dependencies or architecture changes
|
||||||
|
- No research needed
|
||||||
|
|
||||||
|
If the task seems non-trivial (multi-file refactor, new feature, needs research),
|
||||||
|
say:
|
||||||
|
|
||||||
|
```
|
||||||
|
This looks like it needs planning. Use /gsd:quick instead:
|
||||||
|
/gsd:quick "{task description}"
|
||||||
|
```
|
||||||
|
|
||||||
|
And stop.
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step name="execute_inline">
|
||||||
|
Do the work directly:
|
||||||
|
|
||||||
|
1. Read the relevant file(s)
|
||||||
|
2. Make the change(s)
|
||||||
|
3. Verify the change works (run existing tests if applicable, or do a quick sanity check)
|
||||||
|
|
||||||
|
**No PLAN.md.** Just do it.
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step name="commit">
|
||||||
|
Commit the change atomically:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add -A
|
||||||
|
git commit -m "fix: {concise description of what changed}"
|
||||||
|
```
|
||||||
|
|
||||||
|
Use conventional commit format: `fix:`, `feat:`, `docs:`, `chore:`, `refactor:` as appropriate.
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step name="log_to_state">
|
||||||
|
If `.planning/STATE.md` exists, append to the "Quick Tasks Completed" table.
|
||||||
|
If the table doesn't exist, skip this step silently.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check if STATE.md has quick tasks table
|
||||||
|
if grep -q "Quick Tasks Completed" .planning/STATE.md 2>/dev/null; then
|
||||||
|
# Append entry — workflow handles the format
|
||||||
|
echo "| $(date +%Y-%m-%d) | fast | $TASK | ✅ |" >> .planning/STATE.md
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step name="done">
|
||||||
|
Report completion:
|
||||||
|
|
||||||
|
```
|
||||||
|
✅ Done: {what was changed}
|
||||||
|
Commit: {short hash}
|
||||||
|
Files: {list of changed files}
|
||||||
|
```
|
||||||
|
|
||||||
|
No next-step suggestions. No workflow routing. Just done.
|
||||||
|
</step>
|
||||||
|
|
||||||
|
</process>
|
||||||
|
|
||||||
|
<guardrails>
|
||||||
|
- NEVER spawn a Task/subagent — this runs inline
|
||||||
|
- NEVER create PLAN.md or SUMMARY.md files
|
||||||
|
- NEVER run research or plan-checking
|
||||||
|
- If the task takes more than 3 file edits, STOP and redirect to /gsd:quick
|
||||||
|
- If you're unsure how to implement it, STOP and redirect to /gsd:quick
|
||||||
|
</guardrails>
|
||||||
|
|
||||||
|
<success_criteria>
|
||||||
|
- [ ] Task completed in current context (no subagents)
|
||||||
|
- [ ] Atomic git commit with conventional message
|
||||||
|
- [ ] STATE.md updated if it exists
|
||||||
|
- [ ] Total operation under 2 minutes wall time
|
||||||
|
</success_criteria>
|
||||||
@@ -151,6 +151,21 @@ Usage: `/gsd:quick`
|
|||||||
Usage: `/gsd:quick --research --full`
|
Usage: `/gsd:quick --research --full`
|
||||||
Result: Creates `.planning/quick/NNN-slug/PLAN.md`, `.planning/quick/NNN-slug/SUMMARY.md`
|
Result: Creates `.planning/quick/NNN-slug/PLAN.md`, `.planning/quick/NNN-slug/SUMMARY.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**`/gsd:fast [description]`**
|
||||||
|
Execute a trivial task inline — no subagents, no planning files, no overhead.
|
||||||
|
|
||||||
|
For tasks too small to justify planning: typo fixes, config changes, forgotten commits, simple additions. Runs in the current context, makes the change, commits, and logs to STATE.md.
|
||||||
|
|
||||||
|
- No PLAN.md or SUMMARY.md created
|
||||||
|
- No subagent spawned (runs inline)
|
||||||
|
- ≤ 3 file edits — redirects to `/gsd:quick` if task is non-trivial
|
||||||
|
- Atomic commit with conventional message
|
||||||
|
|
||||||
|
Usage: `/gsd:fast "fix the typo in README"`
|
||||||
|
Usage: `/gsd:fast "add .env to gitignore"`
|
||||||
|
|
||||||
### Roadmap Management
|
### Roadmap Management
|
||||||
|
|
||||||
**`/gsd:add-phase <description>`**
|
**`/gsd:add-phase <description>`**
|
||||||
|
|||||||
@@ -625,7 +625,7 @@ describe('copyCommandsAsCopilotSkills', () => {
|
|||||||
// Count gsd-* directories — should be 31
|
// Count gsd-* directories — should be 31
|
||||||
const dirs = fs.readdirSync(tempDir, { withFileTypes: true })
|
const dirs = fs.readdirSync(tempDir, { withFileTypes: true })
|
||||||
.filter(e => e.isDirectory() && e.name.startsWith('gsd-'));
|
.filter(e => e.isDirectory() && e.name.startsWith('gsd-'));
|
||||||
assert.strictEqual(dirs.length, 42, `expected 42 skill folders, got ${dirs.length}`);
|
assert.strictEqual(dirs.length, 43, `expected 43 skill folders, got ${dirs.length}`);
|
||||||
} finally {
|
} finally {
|
||||||
fs.rmSync(tempDir, { recursive: true });
|
fs.rmSync(tempDir, { recursive: true });
|
||||||
}
|
}
|
||||||
@@ -1119,7 +1119,7 @@ const { execFileSync } = require('child_process');
|
|||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
|
|
||||||
const INSTALL_PATH = path.join(__dirname, '..', 'bin', 'install.js');
|
const INSTALL_PATH = path.join(__dirname, '..', 'bin', 'install.js');
|
||||||
const EXPECTED_SKILLS = 42;
|
const EXPECTED_SKILLS = 43;
|
||||||
const EXPECTED_AGENTS = 16;
|
const EXPECTED_AGENTS = 16;
|
||||||
|
|
||||||
function runCopilotInstall(cwd) {
|
function runCopilotInstall(cwd) {
|
||||||
|
|||||||
Reference in New Issue
Block a user