* feat(gsd-tools): add history-digest, atomic state operations, and summary variants Adds new performance-focused commands to gsd-tools and introduces specialized summary templates to reduce context tax: - history-digest: Compiles phase summaries into structured JSON for JIT loading - state get/patch: Enables atomic STATE.md operations instead of full rewrites - template select: Automatically chooses optimal summary template based on plan complexity - Adds minimal, standard, and complex summary templates Part of the "Hydra" architecture for GSD context optimization. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * chore: add project config * docs: define v1 requirements * docs: create roadmap (6 phases) * feat(history-digest): fix nested YAML parsing and add tests - Fix extractFrontmatter() to handle nested YAML structures like dependency-graph.provides, tech-stack.added using stack-based parsing - Add test infrastructure with Node test runner (npm test) - Update gsd-planner to use digest fields directly instead of reading full SUMMARY.md files - Add 6 schema validation tests covering nested fields, merging, malformed files, and backward compatibility Closes: HIST-01, HIST-02, HIST-03, HIST-04 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(planner): use digest for selection, full SUMMARY for understanding The previous commit went too far by eliminating full SUMMARY reads. The digest is an index for smart selection, not a replacement for understanding what actually happened. Two-step approach: 1. Digest to score/select relevant phases (2-4 typically) 2. Full SUMMARY read for selected phases (implementation details) 3. Digest-level context retained for unselected phases Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(gsd-tools): add phases, roadmap, and phase commands TDD implementation of three new commands to replace repetitive bash: phases list [--type plans|summaries] [--phase N] - Lists phase directories sorted numerically (handles decimals) - Filter by file type or specific phase - Replaces: ls -d .planning/phases/*/ | sort -V (22 occurrences) roadmap get-phase <N> - Extracts phase section from ROADMAP.md - Returns name, goal, full section content - Replaces: grep -A20 "Phase X:" ROADMAP.md (19 occurrences) phase next-decimal <N> - Calculates next decimal phase (06 → 06.1, 06.2 → 06.3) - Handles gaps, normalizes input - Replaces: complex bash math in insert-phase (3 occurrences) 16 new tests, all passing. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor: migrate agents/workflows to use gsd-tools commands Replace inline bash patterns with centralized gsd-tools commands: phases list: - audit-milestone.md: ls -d .planning/phases/*/ | sort -V - plan-milestone-gaps.md: ls -d ... | sort -V | tail -1 roadmap get-phase: - plan-phase.md: grep -A5 "Phase X:" ROADMAP.md (2 occurrences) - research-phase.md: grep patterns (2 occurrences) - verify-phase.md: grep -A5 pattern - gsd-verifier.md: grep -A5 pattern - gsd-plan-checker.md: grep -A10 pattern - commands/gsd/research-phase.md: grep patterns (2 occurrences) phase next-decimal: - insert-phase.md: complex bash decimal calculation - decimal-phase-calculation.md: reference doc rewritten phase-argument-parsing.md: updated to reference gsd-tools Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
4.9 KiB
The "Railroad" Architecture: GSD Framework Evolution
Executive Summary
This document outlines the strategic evolution of the Get Shit Done (GSD) framework from a "Prompt Engineering" reliance to a "Software Engineering" foundation. The core objective is to reduce token consumption ("context tax") and increase reliability by shifting workflow logic from LLM context to deterministic code.
1. The Core Shift: "Railroad" State Machine
Current State
Currently, the LLM acts as the Workflow Engine. It reads a verbose Markdown file (e.g., new-project.md) containing logic like:
"If the user says X, then ask Y. If they say Z, execute tool A."
This relies on "soft state management" where the LLM must perfectly recall and adhere to written instructions.
Proposed State ("Railroad")
The LLM becomes an Intelligent Worker, while gsd-tools becomes the Workflow Engine.
-
Logic in Code: Complex branching logic is moved to
gsd-tools. -
The "Next Step" Pattern: Instead of reading a map, the Agent simply asks: "What is next?"
# Agent calls: node gsd-tools.js next-step --workflow new-project --state-file .planning/state.jsonTool Returns:
{ "action": "ask_user", "prompt": "What do you want to build?", "context_files": [] } -
Benefit: The Agent needs zero knowledge of the overall workflow. It focuses 100% of its attention on executing the single, immediate task. It cannot "skip" steps because it doesn't know they exist until the tool assigns them.
2. Just-in-Time (JIT) Context Loading
Current State
We load all templates, references, and instructions at the start of a session.
- Example:
new-projectloadsquestioning.md,project.mdtemplate,requirements.mdtemplate, etc.
Proposed State
Context is injected only when needed for the specific step.
- Step 1 (Questioning): Load
questioning.md. Do NOT loadrequirements.mdtemplate. - Step 2 (Requirements): Unload
questioning.md. Loadrequirements.mdtemplate. - Step 3 (Roadmap): Load
ROADMAP.mdtemplate.
Mechanism:
The gsd-tools next-step response includes a context_files array. The wrapper script or system prompt dynamically reads these files into the context window for that turn only.
3. Native Interventions (Bypassing the LLM)
Current State
The LLM acts as a text-based menu system.
"User, please choose: 1. YOLO Mode, 2. Interactive Mode."
This burns tokens on input tokens (instructions on how to ask), output tokens (asking the question), and input tokens (processing the user's "1").
Proposed State
Standardize discrete choices into CLI interactions managed by gsd-tools or the wrapper.
- Configuration Wizard:
gsd-tools init new-projectruns an interactive CLI wizard (usinginquirerorreadline) to gathermode,depth,parallelizationpreferences before the LLM is even invoked. - Structured Output: The LLM receives the result as a finalized JSON configuration, not a conversation transcript.
4. Micro-Agents & Chained Execution
Current State
Monolithic workflows (new-project) maintain a single context window that grows indefinitely. By the time the agent reaches "Roadmap Creation" (Step 9), the context is polluted with "Questioning" (Step 3) transcripts.
Proposed State
Break workflows into atomic, chainable units.
- Process:
gsd:new-project - Chain:
- Agent A (Scope): Interviews user
\rightarrowOutputsPROJECT.md\rightarrowExits. - Context Flush
- Agent B (Research): Reads
PROJECT.md\rightarrowOutputsresearch/\rightarrowExits. - Context Flush
- Agent C (Roadmap): Reads
PROJECT.md+research/\rightarrowOutputsROADMAP.md.
- Agent A (Scope): Interviews user
Implementation:
The gsd-tools utility manages the hand-off. When Agent A finishes, it returns a specific exit code or signal. The outer loop detects this, clears context, and spawns Agent B with the specific inputs generated by A.
Implementation Roadmap
- Expand
gsd-tools:- Implement
next-stepstate machine logic. - Add interactive CLI prompts for configuration.
- Implement
- Refactor Workflows:
- Strip
workflows/*.mdto bare essentials (or remove them entirely in favor of code definitions).
- Strip
- Update Agent Definitions:
- Direct agents to rely on
gsd-toolsfor guidance rather than internal reasoning about the process.
- Direct agents to rely on
Summary of Benefits
| Metric | Current | Railroad Architecture |
|---|---|---|
| Context Usage | High (Full workflow + History) | Minimal (Current Step + Immediate Inputs) |
| Reliability | Variable (LLM can hallucinate process) | Deterministic (Code enforces process) |
| Speed | Slower (Reading/generating verbose text) | Faster (Code execution + concise LLM tasks) |
| Maintenance | Distributed (Markdown files) | Centralized (JS Logic) |