From bd7048985d23e8633e44e71d86d6bc68e7a6e0b2 Mon Sep 17 00:00:00 2001 From: Tibsfox Date: Fri, 10 Apr 2026 11:56:12 -0700 Subject: [PATCH] perf(workflow): default to inline execution for small plans (#1979) Plans with 1-2 tasks now execute inline (Pattern C) instead of spawning a subagent (Pattern A). This avoids ~14K token subagent spawn overhead and preserves the orchestrator's prompt cache for small plans. The threshold is configurable via workflow.inline_plan_threshold (default: 2). Set to 0 to always spawn subagents. Plans above the threshold continue to use checkpoint-based routing as before. Closes #1979 Co-Authored-By: Claude Opus 4.6 --- get-shit-done/bin/lib/config.cjs | 1 + get-shit-done/references/planning-config.md | 2 ++ get-shit-done/workflows/execute-plan.md | 10 +++++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/get-shit-done/bin/lib/config.cjs b/get-shit-done/bin/lib/config.cjs index 07da8c4e7..58ef53b23 100644 --- a/get-shit-done/bin/lib/config.cjs +++ b/get-shit-done/bin/lib/config.cjs @@ -28,6 +28,7 @@ const VALID_CONFIG_KEYS = new Set([ 'git.branching_strategy', 'git.base_branch', 'git.phase_branch_template', 'git.milestone_branch_template', 'git.quick_branch_template', 'planning.commit_docs', 'planning.search_gitignored', 'workflow.subagent_timeout', + 'workflow.inline_plan_threshold', 'hooks.context_warnings', 'features.thinking_partner', 'context', diff --git a/get-shit-done/references/planning-config.md b/get-shit-done/references/planning-config.md index 50691fb4c..99f45bac7 100644 --- a/get-shit-done/references/planning-config.md +++ b/get-shit-done/references/planning-config.md @@ -35,6 +35,7 @@ Configuration options for `.planning/` directory behavior. | `git.quick_branch_template` | `null` | Optional branch template for quick-task runs | | `workflow.use_worktrees` | `true` | Whether executor agents run in isolated git worktrees. Set to `false` to disable worktrees — agents execute sequentially on the main working tree instead. Recommended for solo developers or when worktree merges cause issues. | | `workflow.subagent_timeout` | `300000` | Timeout in milliseconds for parallel subagent tasks (e.g. codebase mapping). Increase for large codebases or slower models. Default: 300000 (5 minutes). | +| `workflow.inline_plan_threshold` | `2` | Plans with this many tasks or fewer execute inline (Pattern C) instead of spawning a subagent. Avoids ~14K token spawn overhead for small plans. Set to `0` to always spawn subagents. | | `manager.flags.discuss` | `""` | Flags passed to `/gsd-discuss-phase` when dispatched from manager (e.g. `"--auto --analyze"`) | | `manager.flags.plan` | `""` | Flags passed to plan workflow when dispatched from manager | | `manager.flags.execute` | `""` | Flags passed to execute workflow when dispatched from manager | @@ -259,6 +260,7 @@ Set via `workflow.*` namespace in config.json (e.g., `"workflow": { "research": | `workflow.skip_discuss` | boolean | `false` | `true`, `false` | Skip discuss phase entirely | | `workflow.use_worktrees` | boolean | `true` | `true`, `false` | Run executor agents in isolated git worktrees | | `workflow.subagent_timeout` | number | `300000` | Any positive integer (ms) | Timeout for parallel subagent tasks (default: 5 minutes) | +| `workflow.inline_plan_threshold` | number | `2` | `0`–`10` | Plans with â‰ĪN tasks execute inline instead of spawning a subagent | | `workflow.code_review` | boolean | `true` | `true`, `false` | Enable built-in code review step in the ship workflow | | `workflow.code_review_depth` | string | `"standard"` | `"light"`, `"standard"`, `"deep"` | Depth level for code review analysis in the ship workflow | | `workflow._auto_chain_active` | boolean | `false` | `true`, `false` | Internal: tracks whether autonomous chaining is active | diff --git a/get-shit-done/workflows/execute-plan.md b/get-shit-done/workflows/execute-plan.md index 99aa9da1c..39baccdd7 100644 --- a/get-shit-done/workflows/execute-plan.md +++ b/get-shit-done/workflows/execute-plan.md @@ -61,10 +61,18 @@ PLAN_START_EPOCH=$(date +%s) ```bash +TASK_COUNT=$(grep -c "^/dev/null || echo "0") +INLINE_THRESHOLD=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-get workflow.inline_plan_threshold --default 2 2>/dev/null || echo "2") grep -n "type=\"checkpoint" .planning/phases/XX-name/{phase}-{plan}-PLAN.md ``` -**Routing by checkpoint type:** +**Primary routing: task count threshold (#1979)** + +If `TASK_COUNT <= INLINE_THRESHOLD`: Use Pattern C (inline) regardless of checkpoint type. Small plans execute faster inline — avoids ~14K token subagent spawn overhead and preserves prompt cache. Configure threshold via `workflow.inline_plan_threshold` (default: 2). + +If `TASK_COUNT > INLINE_THRESHOLD`: Apply checkpoint-based routing below. + +**Checkpoint-based routing (plans with > threshold tasks):** | Checkpoints | Pattern | Execution | |-------------|---------|-----------|