diff --git a/CLAUDE.md b/CLAUDE.md index 12b33d0..4206cbc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -22,14 +22,6 @@ Orchestrator (tmux background) └─→ Weaver 03 (tmux) → Verifier (subagent) → PR ``` -## Commands - -| Command | Description | -|---------|-------------| -| `/plan` | Start interactive planning session | -| `/build ` | Execute a plan (spawns orchestrator + weavers) | -| `/status [plan-id]` | Check status of plans and weavers | - ## Quick Start ```bash diff --git a/README.md b/README.md index b9db6df..90be523 100644 --- a/README.md +++ b/README.md @@ -57,14 +57,6 @@ Orchestrator (tmux background) └─→ Weaver 03 (tmux) → Verifier (subagent) → PR ``` -## Commands - -| Command | Description | -|---------|-------------| -| `/plan` | Start interactive planning session | -| `/build ` | Execute plan via tmux weavers | -| `/status [plan-id]` | Check plan/weaver status | - ## Directory Structure ``` diff --git a/commands/vertical-build.md b/commands/vertical-build.md deleted file mode 100644 index 8d3307e..0000000 --- a/commands/vertical-build.md +++ /dev/null @@ -1,194 +0,0 @@ ---- -description: Execute a plan by launching orchestrator in tmux. Creates PRs for each spec. -argument-hint: [spec-names...] ---- - -# /build Command - -Execute a plan. Launches orchestrator in tmux, which spawns weavers for each spec. - -## Usage - -``` -/build plan-20260119-1430 -/build plan-20260119-1430 01-schema 02-backend -``` - -## What You Do - -When `/build ` is invoked: - -### Step 1: Validate Plan Exists - -```bash -if [ ! -f ".claude/vertical/plans//meta.json" ]; then - echo "Error: Plan not found: " - echo "Run /status to see available plans" - exit 1 -fi -``` - -### Step 2: Generate Orchestrator Prompt - -```bash -cat > /tmp/orch-prompt-.md << 'PROMPT_EOF' - -$(cat skills/orchestrator/SKILL.md) - - - -$(pwd) - -Execute the plan. Spawn weavers. Track progress. Write summary. - -Begin now. -PROMPT_EOF -``` - -### Step 3: Launch Orchestrator in Tmux - -```bash -tmux new-session -d -s "vertical--orch" -c "$(pwd)" \ - "claude -p \"\$(cat /tmp/orch-prompt-.md)\" --dangerously-skip-permissions --model claude-opus-4-5-20250514; echo '[Orchestrator complete. Press any key to close.]'; read" -``` - -### Step 4: Confirm Launch - -Output to human: - -``` -════════════════════════════════════════════════════════════════ -BUILD LAUNCHED: -════════════════════════════════════════════════════════════════ - -Orchestrator: vertical--orch - -The orchestrator will: - 1. Read specs from .claude/vertical/plans//specs/ - 2. Spawn weavers in parallel tmux sessions - 3. Track progress and handle dependencies - 4. Write summary when complete - -Monitor commands: - /status # Check status - tmux attach -t vertical--orch # Watch orchestrator - tmux list-sessions | grep vertical # List all sessions - -Results will be at: - .claude/vertical/plans//run/summary.md - -════════════════════════════════════════════════════════════════ -``` - -## Partial Execution - -To execute specific specs only: - -``` -/build plan-20260119-1430 01-schema 02-backend -``` - -Modify the orchestrator prompt: - -``` -01-schema, 02-backend -``` - -The orchestrator will only process those specs. - -## Monitoring While Running - -### Check Status - -```bash -/status -``` - -### Attach to Orchestrator - -```bash -tmux attach -t vertical--orch -# Detach: Ctrl+B then D -``` - -### Attach to a Weaver - -```bash -tmux attach -t vertical--w-01 -# Detach: Ctrl+B then D -``` - -### Capture Weaver Output - -```bash -tmux capture-pane -t vertical--w-01 -p -S -100 -``` - -## Results - -When complete, find results at: - -| File | Contents | -|------|----------| -| `run/state.json` | Overall status and weaver states | -| `run/summary.md` | Human-readable summary with PR links | -| `run/weavers/w-*.json` | Per-weaver status | - -## Debugging Failures - -### Resume a Failed Weaver - -```bash -# Get session ID from weaver status -cat .claude/vertical/plans//run/weavers/w-01.json | jq -r .session_id - -# Resume -claude --resume -``` - -### Attach to Running Weaver - -```bash -tmux attach -t vertical--w-01 -``` - -## Killing a Build - -```bash -# Source helpers -source lib/tmux.sh - -# Kill all sessions for this plan -vertical_kill_plan - -# Or kill everything -vertical_kill_all -``` - -## What Happens Behind the Scenes - -``` -/build plan-20260119-1430 - │ - ├─→ Create orchestrator prompt - │ - ├─→ Launch tmux: vertical-plan-20260119-1430-orch - │ │ - │ ├─→ Read specs - │ ├─→ Analyze dependencies - │ ├─→ Launch weavers in parallel - │ │ │ - │ │ ├─→ vertical-plan-20260119-1430-w-01 - │ │ │ └─→ Build → Verify → PR #42 - │ │ │ - │ │ ├─→ vertical-plan-20260119-1430-w-02 - │ │ │ └─→ Build → Verify → PR #43 - │ │ │ - │ │ └─→ (waits for dependencies...) - │ │ - │ ├─→ Poll weaver status - │ ├─→ Launch dependent specs when ready - │ └─→ Write summary.md - │ - └─→ Human runs /status to check progress -``` diff --git a/commands/vertical-plan.md b/commands/vertical-plan.md deleted file mode 100644 index a989b0b..0000000 --- a/commands/vertical-plan.md +++ /dev/null @@ -1,141 +0,0 @@ ---- -description: Start an interactive planning session. Design specs through Q&A with the planner. -argument-hint: [description] ---- - -# /plan Command - -Start a planning session. You become the planner agent. - -## Usage - -``` -/plan -/plan Add user authentication with OAuth -``` - -## What You Do - -When `/plan` is invoked: - -### Step 1: Load Planner Skill - -Read and internalize `skills/planner/SKILL.md`. - -### Step 2: Generate Plan ID - -```bash -plan_id="plan-$(date +%Y%m%d-%H%M%S)" -``` - -### Step 3: Create Plan Directory - -```bash -mkdir -p ".claude/vertical/plans/${plan_id}/specs" -mkdir -p ".claude/vertical/plans/${plan_id}/run/weavers" -``` - -### Step 4: Start Interactive Planning - -Follow the planner skill phases: - -1. **Understand** - Ask questions until task is crystal clear -2. **Research** - Explore codebase, find patterns -3. **Assess Complexity** - Decide if Oracle is needed -4. **Oracle (optional)** - For complex tasks, invoke Oracle -5. **Design** - Break into specs (each = one PR) -6. **Write** - Create spec YAML files -7. **Hand off** - Tell human to run `/build ` - -### Step 5: Confirm Plan Ready - -When specs are written: - -``` -════════════════════════════════════════════════════════════════ -PLANNING COMPLETE: -════════════════════════════════════════════════════════════════ - -Specs created: - .claude/vertical/plans//specs/ - 01-schema.yaml - 02-backend.yaml - 03-frontend.yaml - -To execute: - /build - -To check status: - /status - -════════════════════════════════════════════════════════════════ -``` - -## When to Use Oracle - -The planner will invoke Oracle for: - -| Trigger | Why | -|---------|-----| -| 5+ specs needed | Complex dependency management | -| Unclear dependencies | Need deep analysis | -| Architecture decisions | Needs extended thinking | -| Performance/migration planning | Requires careful sequencing | - -Oracle runs via browser engine (10-60 minutes typical). - -## Spec Output Location - -``` -.claude/vertical/plans// - meta.json # Plan metadata - specs/ - 01-schema.yaml # First spec - 02-backend.yaml # Second spec - 03-frontend.yaml # Third spec -``` - -## Transitioning to Build - -When specs are ready, the human runs: - -``` -/build -``` - -This launches the orchestrator in tmux, which spawns weavers. - -## Multiple Planning Sessions - -Run multiple planning sessions in parallel: - -``` -# Terminal 1 -/plan Add authentication - -# Terminal 2 -/plan Add payment processing - -# Terminal 3 -/plan Add notification system -``` - -Each gets its own plan-id and can be built independently. - -## Resuming a Planning Session - -Planning sessions are Claude Code sessions. Resume with: - -```bash -claude --resume -``` - -The session ID is saved in `.claude/vertical/plans//meta.json`. - -## Example Interaction - -``` -Human: /plan - -Claude: Starting plan: plan-20260119-143052 - What would you like to build? \ No newline at end of file diff --git a/commands/vertical-status.md b/commands/vertical-status.md deleted file mode 100644 index 49b9647..0000000 --- a/commands/vertical-status.md +++ /dev/null @@ -1,213 +0,0 @@ ---- -description: Check status of plans and weavers. Shows tmux sessions, weaver progress, and PRs. -argument-hint: [plan-id] ---- - -# /status Command - -Check the status of plans and weavers. - -## Usage - -``` -/status # All plans -/status plan-20260119-1430 # Specific plan -``` - -## What You Do - -When `/status` is invoked: - -### Without Arguments (All Plans) - -```bash -# List active tmux sessions -echo "=== Active Tmux Sessions ===" -tmux list-sessions 2>/dev/null | grep "^vertical-" || echo "No active sessions" -echo "" - -# List plan statuses -echo "=== Plan Status ===" -if [ -d ".claude/vertical/plans" ]; then - for plan_dir in .claude/vertical/plans/*/; do - if [ -d "$plan_dir" ]; then - plan_id=$(basename "$plan_dir") - state_file="${plan_dir}run/state.json" - - if [ -f "$state_file" ]; then - status=$(jq -r '.status // "unknown"' "$state_file" 2>/dev/null) - echo " ${plan_id}: ${status}" - else - meta_file="${plan_dir}meta.json" - if [ -f "$meta_file" ]; then - echo " ${plan_id}: ready (not started)" - else - echo " ${plan_id}: incomplete" - fi - fi - fi - done -else - echo " No plans found" -fi -``` - -Output: - -``` -=== Active Tmux Sessions === -vertical-plan-20260119-1430-orch -vertical-plan-20260119-1430-w-01 -vertical-plan-20260119-1430-w-02 -vertical-plan-20260119-1445-orch - -=== Plan Status === - plan-20260119-1430: running - plan-20260119-1445: running - plan-20260119-1400: complete -``` - -### With Plan ID (Specific Plan) - -```bash -plan_id="$1" -plan_dir=".claude/vertical/plans/${plan_id}" - -# Validate plan exists -if [ ! -d "$plan_dir" ]; then - echo "Error: Plan not found: ${plan_id}" - exit 1 -fi - -# Read state -state_file="${plan_dir}/run/state.json" -if [ -f "$state_file" ]; then - status=$(jq -r '.status // "unknown"' "$state_file") - started=$(jq -r '.started_at // "-"' "$state_file") -else - status="ready (not started)" - started="-" -fi - -echo "=== Plan: ${plan_id} ===" -echo "Status: ${status}" -echo "Started: ${started}" -echo "" - -# List specs -echo "=== Specs ===" -for spec in "${plan_dir}/specs/"*.yaml; do - [ -f "$spec" ] && echo " $(basename "$spec")" -done -echo "" - -# List weaver status -echo "=== Weavers ===" -weavers_dir="${plan_dir}/run/weavers" -if [ -d "$weavers_dir" ]; then - for weaver_file in "${weavers_dir}"/*.json; do - if [ -f "$weaver_file" ]; then - w_name=$(basename "$weaver_file" .json) - w_status=$(jq -r '.status // "unknown"' "$weaver_file" 2>/dev/null) - w_spec=$(jq -r '.spec // "?"' "$weaver_file" 2>/dev/null) - w_pr=$(jq -r '.pr // "-"' "$weaver_file" 2>/dev/null) - printf " %-10s %-15s %-30s %s\n" "$w_name" "$w_status" "$w_spec" "$w_pr" - fi - done -else - echo " No weavers yet" -fi -echo "" - -# List tmux sessions for this plan -echo "=== Tmux Sessions ===" -tmux list-sessions 2>/dev/null | grep "vertical-${plan_id}" | while read line; do - session_name=$(echo "$line" | cut -d: -f1) - echo " ${session_name}" -done || echo " No active sessions" -``` - -Output: - -``` -=== Plan: plan-20260119-1430 === -Status: running -Started: 2026-01-19T14:35:00Z - -=== Specs === - 01-schema.yaml - 02-backend.yaml - 03-frontend.yaml - -=== Weavers === - w-01 complete 01-schema.yaml https://github.com/... - w-02 verifying 02-backend.yaml - - w-03 waiting 03-frontend.yaml - - -=== Tmux Sessions === - vertical-plan-20260119-1430-orch - vertical-plan-20260119-1430-w-01 - vertical-plan-20260119-1430-w-02 -``` - -## Weaver Status Reference - -| Status | Meaning | -|--------|---------| -| waiting | Waiting for dependency to complete | -| building | Implementing the spec | -| verifying | Running verification checks | -| fixing | Fixing verification failures | -| complete | PR created successfully | -| failed | Failed after max iterations | -| blocked | Dependency failed | -| crashed | Session terminated unexpectedly | - -## Quick Actions - -Based on status, suggest actions: - -| Status | Suggested Action | -|--------|------------------| -| complete | `gh pr list` to review PRs | -| running | `tmux attach -t ` to watch | -| failed | `claude --resume ` to debug | -| ready | `/build ` to start | - -## Viewing Results - -```bash -# Summary (after completion) -cat .claude/vertical/plans//run/summary.md - -# State JSON -cat .claude/vertical/plans//run/state.json | jq - -# Specific weaver -cat .claude/vertical/plans//run/weavers/w-01.json | jq - -# List PRs -gh pr list -``` - -## Tmux Helper Commands - -```bash -# Source helpers -source lib/tmux.sh - -# List all vertical sessions -vertical_list_sessions - -# Full status -vertical_status - -# Weaver status for a plan -vertical_weaver_status plan-20260119-1430 - -# Capture recent output -vertical_capture_output vertical-plan-20260119-1430-w-01 - -# Attach to a session -vertical_attach vertical-plan-20260119-1430-w-01 -``` diff --git a/install.sh b/install.sh index 79b81fd..e429344 100755 --- a/install.sh +++ b/install.sh @@ -7,7 +7,6 @@ TMP="/tmp/claude-code-vertical-$$" git clone --depth 1 "$REPO" "$TMP" 2>/dev/null mkdir -p .claude/vertical/plans -cp -r "$TMP/commands" .claude/ cp -r "$TMP/skills" .claude/ cp -r "$TMP/skill-index" .claude/ cp -r "$TMP/lib" .claude/