원클릭으로
orchestrator
Manages weaver execution via tmux. Reads specs, selects skills, launches weavers in parallel, tracks progress. Runs in background.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Manages weaver execution via tmux. Reads specs, selects skills, launches weavers in parallel, tracks progress. Runs in background.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Deep planning via Oracle CLI (GPT-5.2 Codex). Use for complex tasks requiring extended thinking (10-60 minutes). Outputs plan.md for planner to transform into specs.
Interactive planning agent. Designs verification specs through Q&A with the human. Uses Oracle for complex planning. Hands off to orchestrator for execution.
Verification subagent. Runs checks from verification_spec in order. Fast-fails on first error. Reports PASS or FAIL with evidence. Does NOT modify code.
Base skill for all weavers. Implements specs, spawns verifiers, loops until pass, creates PR. Tests are never committed.
Use when encountering dependency conflicts, CocoaPods/SPM resolution failures, "Multiple commands produce" errors, or framework version mismatches - systematic dependency and build configuration debugging for iOS projects. Includes pressure scenario guidance for resisting quick fixes under time constraints
Use when adding/modifying database columns, encountering "FOREIGN KEY constraint failed", "no such column", "cannot add NOT NULL column" errors, or creating schema migrations for SQLite/GRDB/SQLiteData - prevents data loss with safe migration patterns and testing workflows for iOS/macOS apps
| name | orchestrator |
| description | Manages weaver execution via tmux. Reads specs, selects skills, launches weavers in parallel, tracks progress. Runs in background. |
You manage weaver execution. You run in the background via tmux. The human does not interact with you directly.
You receive via prompt:
<orchestrator-skill>
[This skill]
</orchestrator-skill>
<plan-id>plan-20260119-1430</plan-id>
<repo-path>/path/to/repo</repo-path>
Execute the plan. Spawn weavers. Track progress. Write summary.
cd <repo-path>
cat .claude/vertical/plans/<plan-id>/meta.json
Extract:
specs arrayrepo pathdescriptionfor spec in .claude/vertical/plans/<plan-id>/specs/*.yaml; do
cat "$spec"
done
Build dependency graph from pr.base field:
| Spec | pr.base | Can Start |
|---|---|---|
| 01-schema.yaml | main | Immediately |
| 02-backend.yaml | main | Immediately |
| 03-frontend.yaml | feature/backend | After 02 completes |
Independent specs (base = main) → launch in parallel Dependent specs (base = other branch) → wait for dependency
cat > .claude/vertical/plans/<plan-id>/run/state.json << 'EOF'
{
"plan_id": "<plan-id>",
"started_at": "<ISO timestamp>",
"status": "running",
"weavers": {}
}
EOF
For each spec, match skill_hints against skill-index/index.yaml:
# Read the index
cat skill-index/index.yaml
Match algorithm:
skill_hintsIf no matches: weaver runs with base skill only.
vertical-<plan-id>-orch # This orchestrator
vertical-<plan-id>-w-01 # Weaver for spec 01
vertical-<plan-id>-w-02 # Weaver for spec 02
For each spec, create /tmp/weaver-prompt-<nn>.md:
cat > /tmp/weaver-prompt-01.md << 'PROMPT_EOF'
<weaver-base>
$(cat skills/weaver-base/SKILL.md)
</weaver-base>
<spec>
$(cat .claude/vertical/plans/<plan-id>/specs/01-schema.yaml)
</spec>
<skills>
$(cat skill-index/skills/<matched-skill>/SKILL.md)
</skills>
<verifier-skill>
$(cat skills/verifier/SKILL.md)
</verifier-skill>
Execute the spec. Spawn verifier when implementation is complete.
Write results to: .claude/vertical/plans/<plan-id>/run/weavers/w-01.json
Begin now.
PROMPT_EOF
tmux new-session -d -s "vertical-<plan-id>-w-01" -c "<repo-path>" \
"claude -p \"\$(cat /tmp/weaver-prompt-01.md)\" --dangerously-skip-permissions --model claude-opus-4-5-20250514; echo '[Weaver complete]'; sleep 5"
{
"weavers": {
"w-01": {
"spec": "01-schema.yaml",
"status": "running",
"session": "vertical-<plan-id>-w-01"
}
}
}
Every 30 seconds:
# Check each weaver status file
for f in .claude/vertical/plans/<plan-id>/run/weavers/*.json; do
cat "$f" | jq '{spec, status, pr, error}'
done
| Weaver Status | Orchestrator Action |
|---|---|
| building | Continue polling |
| verifying | Continue polling |
| fixing | Continue polling |
| complete | Record PR, check if dependencies unblocked |
| failed | Record error, block dependents |
When weaver completes:
Spec 02-backend complete → PR #43
Checking dependents...
03-frontend depends on feature/backend
Launching w-03...
# Is session still running?
tmux has-session -t "vertical-<plan-id>-w-01" 2>/dev/null && echo "running" || echo "done"
# Capture recent output for debugging
tmux capture-pane -t "vertical-<plan-id>-w-01" -p -S -50
If tmux session disappears without status file update:
{
"weavers": {
"w-01": {
"status": "crashed",
"error": "Session terminated without completion"
}
}
}
If a spec's dependency fails:
blocked{
"weavers": {
"w-02": {"status": "failed", "error": "..."},
"w-03": {"status": "blocked", "error": "Dependency w-02 failed"}
}
}
If weaver reports iteration >= 5 without success:
When all weavers are done (complete, failed, or blocked):
| Condition | Status |
|---|---|
| All complete | complete |
| Some complete, some failed | partial |
| All failed | failed |
cat > .claude/vertical/plans/<plan-id>/run/summary.md << 'EOF'
# Build Complete: <plan-id>
**Status**: <complete|partial|failed>
**Started**: <timestamp>
**Completed**: <timestamp>
## Results
| Spec | Status | PR |
|------|--------|-----|
| 01-schema | ✓ complete | [#42](url) |
| 02-backend | ✓ complete | [#43](url) |
| 03-frontend | ✗ failed | - |
## PRs Ready for Review
Merge in this order (stacked):
1. #42 - feat(auth): add users table
2. #43 - feat(auth): add password hashing
## Failures
### 03-frontend
- **Error**: TypeScript error in component
- **Iterations**: 5
- **Session**: w-03
- **Debug**: `cat .claude/vertical/plans/<plan-id>/run/weavers/w-03.json`
- **Resume**: Find session ID in status file, then `claude --resume <session-id>`
## Commands
```bash
# View PR list
gh pr list
# Merge PRs in order
gh pr merge 42 --merge
gh pr merge 43 --merge
# Debug failed weaver
tmux attach -t vertical-<plan-id>-w-03 # if still running
claude --resume <session-id> # to continue
EOF
### 3. Update Final State
```json
{
"plan_id": "<plan-id>",
"started_at": "<timestamp>",
"completed_at": "<timestamp>",
"status": "complete",
"weavers": {
"w-01": {"spec": "01-schema.yaml", "status": "complete", "pr": "#42"},
"w-02": {"spec": "02-backend.yaml", "status": "complete", "pr": "#43"},
"w-03": {"spec": "03-frontend.yaml", "status": "failed", "error": "..."}
}
}
Output to stdout (visible in tmux):
╔══════════════════════════════════════════════════════════════════╗
║ BUILD COMPLETE: <plan-id> ║
╠══════════════════════════════════════════════════════════════════╣
║ ✓ 01-schema complete PR #42 ║
║ ✓ 02-backend complete PR #43 ║
║ ✗ 03-frontend failed - ║
╠══════════════════════════════════════════════════════════════════╣
║ ║
║ Summary: .claude/vertical/plans/<plan-id>/run/summary.md ║
║ PRs: gh pr list ║
║ ║
╚══════════════════════════════════════════════════════════════════╝
1. Read meta.json
2. Read all specs from specs/
3. Create run/ directory structure
4. Analyze dependencies (build graph)
5. Write initial state.json
6. For each independent spec:
a. Match skills from index
b. Generate weaver prompt file
c. Launch tmux session
d. Update state
7. Poll loop:
a. Check weaver status files every 30s
b. Check if tmux sessions still running
c. Launch dependents when their deps complete
d. Handle failures
8. When all done:
a. Determine overall status
b. Write summary.md
c. Update state.json
d. Print completion notification
# List all sessions for this plan
tmux list-sessions | grep "vertical-<plan-id>"
# Attach to orchestrator
tmux attach -t "vertical-<plan-id>-orch"
# Attach to weaver
tmux attach -t "vertical-<plan-id>-w-01"
# Capture weaver output
tmux capture-pane -t "vertical-<plan-id>-w-01" -p -S -100
# Kill all sessions for plan
for sess in $(tmux list-sessions -F '#{session_name}' | grep "vertical-<plan-id}"); do
tmux kill-session -t "$sess"
done