@hummer98/cmux-team 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +21 -0
- package/.claude-plugin/plugin.json +15 -0
- package/CHANGELOG.md +279 -0
- package/LICENSE +21 -0
- package/README.ja.md +238 -0
- package/README.md +158 -0
- package/bin/cmux-team.js +29 -0
- package/bin/postinstall.js +26 -0
- package/commands/master.md +8 -0
- package/commands/start.md +42 -0
- package/commands/team-archive.md +63 -0
- package/commands/team-design.md +199 -0
- package/commands/team-disband.md +79 -0
- package/commands/team-impl.md +201 -0
- package/commands/team-research.md +182 -0
- package/commands/team-review.md +222 -0
- package/commands/team-spec.md +133 -0
- package/commands/team-status.md +24 -0
- package/commands/team-sync-docs.md +127 -0
- package/commands/team-task.md +158 -0
- package/commands/team-test.md +230 -0
- package/package.json +51 -0
- package/skills/cmux-agent-role/SKILL.md +166 -0
- package/skills/cmux-team/SKILL.md +568 -0
- package/skills/cmux-team/manager/bun.lock +118 -0
- package/skills/cmux-team/manager/cmux.ts +134 -0
- package/skills/cmux-team/manager/conductor.ts +347 -0
- package/skills/cmux-team/manager/daemon.ts +373 -0
- package/skills/cmux-team/manager/e2e.ts +550 -0
- package/skills/cmux-team/manager/logger.ts +13 -0
- package/skills/cmux-team/manager/main.ts +756 -0
- package/skills/cmux-team/manager/master.ts +51 -0
- package/skills/cmux-team/manager/package.json +18 -0
- package/skills/cmux-team/manager/proxy.ts +219 -0
- package/skills/cmux-team/manager/queue.ts +73 -0
- package/skills/cmux-team/manager/schema.ts +84 -0
- package/skills/cmux-team/manager/task.ts +160 -0
- package/skills/cmux-team/manager/template.ts +92 -0
- package/skills/cmux-team/templates/architect.md +25 -0
- package/skills/cmux-team/templates/common-header.md +12 -0
- package/skills/cmux-team/templates/conductor-role.md +244 -0
- package/skills/cmux-team/templates/conductor-task.md +37 -0
- package/skills/cmux-team/templates/conductor.md +275 -0
- package/skills/cmux-team/templates/dockeeper.md +23 -0
- package/skills/cmux-team/templates/implementer.md +24 -0
- package/skills/cmux-team/templates/manager.md +199 -0
- package/skills/cmux-team/templates/master.md +94 -0
- package/skills/cmux-team/templates/researcher.md +24 -0
- package/skills/cmux-team/templates/reviewer.md +28 -0
- package/skills/cmux-team/templates/task-manager.md +22 -0
- package/skills/cmux-team/templates/tester.md +27 -0
package/README.md
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+
# cmux-team
|
|
4
|
+
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
Multi-agent development orchestration with Claude Code + cmux.
|
|
8
|
+
|
|
9
|
+
**[日本語版 README はこちら](README.ja.md)**
|
|
10
|
+
|
|
11
|
+
## Why cmux-team?
|
|
12
|
+
|
|
13
|
+
Claude Code's built-in sub-agents (the Agent tool) are useful, but **you can't see what they're doing**. You only get the final result — the process is a black box.
|
|
14
|
+
|
|
15
|
+
cmux-team uses cmux's terminal splitting to run sub-agents **visibly** in parallel.
|
|
16
|
+
|
|
17
|
+
**What you do**: Just give Claude instructions in natural language.
|
|
18
|
+
**What Claude does**: Splits panes via cmux, launches sub-agents, monitors them, and integrates results.
|
|
19
|
+
|
|
20
|
+
## Prerequisites
|
|
21
|
+
|
|
22
|
+
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) installed
|
|
23
|
+
- [cmux](https://github.com/manaflow-ai/cmux) installed
|
|
24
|
+
- [bun](https://bun.sh/) installed (required for the Manager daemon)
|
|
25
|
+
- Running Claude Code inside a cmux session
|
|
26
|
+
|
|
27
|
+
## Installation
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install -g @hummer98/cmux-team
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Usage
|
|
34
|
+
|
|
35
|
+
### Basic Workflow
|
|
36
|
+
|
|
37
|
+
Start cmux, launch Claude Code inside it.
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
You: /cmux-team:start
|
|
41
|
+
→ Daemon starts with TUI dashboard
|
|
42
|
+
→ Master pane auto-created
|
|
43
|
+
→ Switch to Master pane to give tasks
|
|
44
|
+
|
|
45
|
+
You: Build a TODO app with React
|
|
46
|
+
Claude: Task created.
|
|
47
|
+
→ Daemon detects task → spawns Conductor
|
|
48
|
+
→ Conductor spawns Agents in adjacent panes
|
|
49
|
+
→ Watch each agent working in real time
|
|
50
|
+
|
|
51
|
+
You: How's it going?
|
|
52
|
+
Claude: (checks manager.log, cmux tree)
|
|
53
|
+
Conductor-1: implementing (2/3 agents done)
|
|
54
|
+
|
|
55
|
+
You: Also clean up worktrees (TODO)
|
|
56
|
+
Claude: → Sends TODO to queue via CLI
|
|
57
|
+
→ Daemon spawns new Conductor in parallel
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Commands
|
|
61
|
+
|
|
62
|
+
| Command | What it does | When to use |
|
|
63
|
+
|---------|-------------|-------------|
|
|
64
|
+
| `/cmux-team:start` | Start daemon + Master | Once per session |
|
|
65
|
+
| `/cmux-team:master` | Reload Master role | After `/clear` |
|
|
66
|
+
| `/team-spec [summary]` | Brainstorm requirements | Deciding what to build |
|
|
67
|
+
| `/team-research <topic>` | Parallel research | Technical research |
|
|
68
|
+
| `/team-design` | Design + review | After requirements |
|
|
69
|
+
| `/team-impl [task\|all]` | Parallel implementation | After design |
|
|
70
|
+
| `/team-review` | Implementation review | After implementation |
|
|
71
|
+
| `/team-test [scope\|all]` | Create & run tests | After implementation |
|
|
72
|
+
| `/team-sync-docs` | Sync documentation | When specs change |
|
|
73
|
+
| `/team-task [action]` | Task management | Record decisions |
|
|
74
|
+
| `/team-archive [range]` | Archive closed tasks | Task cleanup |
|
|
75
|
+
| `/team-status` | Show team status | Anytime |
|
|
76
|
+
| `/team-disband [force]` | Terminate all agents | When done |
|
|
77
|
+
|
|
78
|
+
## Architecture
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
┌─────────────────────────────────────────┐
|
|
82
|
+
│ cmux-team daemon (TypeScript/bun) │
|
|
83
|
+
│ ┌───────────────────────────────────┐ │
|
|
84
|
+
│ │ TUI Dashboard │ │
|
|
85
|
+
│ │ Tasks: 2 open | Conductors: 1/3 │ │
|
|
86
|
+
│ └───────────────────────────────────┘ │
|
|
87
|
+
│ Queue ← Master/Hook write via CLI │
|
|
88
|
+
│ Loop → Task scan → Conductor spawn │
|
|
89
|
+
│ Monitor → Completion → Result collect │
|
|
90
|
+
└───────────┬────────────┬────────────────┘
|
|
91
|
+
│ │
|
|
92
|
+
[Master] [Conductor-035]
|
|
93
|
+
Claude Code Claude Code
|
|
94
|
+
(Opus) → [Agent] Claude Code
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Deterministic Manager
|
|
98
|
+
|
|
99
|
+
The Manager is **not** a Claude Code session. It's a TypeScript program with a deterministic event loop:
|
|
100
|
+
|
|
101
|
+
- **File queue** (`.team/queue/`) for communication (no `cmux send-key`)
|
|
102
|
+
- **zod** schema validation for all messages
|
|
103
|
+
- **ink** TUI dashboard
|
|
104
|
+
- **Task dependency resolution** via `depends_on` field
|
|
105
|
+
- **Priority sorting** (high > medium > low)
|
|
106
|
+
|
|
107
|
+
### Task Dependencies
|
|
108
|
+
|
|
109
|
+
```yaml
|
|
110
|
+
---
|
|
111
|
+
id: 13
|
|
112
|
+
title: Consolidated report
|
|
113
|
+
status: ready
|
|
114
|
+
depends_on: [10, 11, 12] # waits for all to complete
|
|
115
|
+
---
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Communication
|
|
119
|
+
|
|
120
|
+
| Direction | Mechanism |
|
|
121
|
+
|-----------|-----------|
|
|
122
|
+
| Master → daemon | CLI (`main.ts send`) → `.team/queue/*.json` |
|
|
123
|
+
| daemon → Conductor | `cmux new-split` + Claude Code launch |
|
|
124
|
+
| Conductor → daemon | SessionEnd hook + `cmux read-screen` polling |
|
|
125
|
+
|
|
126
|
+
## Troubleshooting
|
|
127
|
+
|
|
128
|
+
### Daemon won't start
|
|
129
|
+
|
|
130
|
+
**bun not installed**: `brew install oven-sh/bun/bun`
|
|
131
|
+
|
|
132
|
+
**Not in cmux**: Run inside cmux. `CMUX_SOCKET_PATH` must be set.
|
|
133
|
+
|
|
134
|
+
### Panes too narrow
|
|
135
|
+
|
|
136
|
+
Too many panes cause cmux commands to fail. Use `/team-disband` and set `CMUX_TEAM_MAX_CONDUCTORS=1` to limit concurrency.
|
|
137
|
+
|
|
138
|
+
### View Conductor session logs
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
grep conductor-xxx .team/logs/manager.log
|
|
142
|
+
# → task_completed ... session=abc-123
|
|
143
|
+
claude --resume abc-123
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Known Limitations
|
|
147
|
+
|
|
148
|
+
- **API rate limits**: Multiple concurrent agents. Claude Max recommended. Control with `CMUX_TEAM_MAX_CONDUCTORS` (default: 3).
|
|
149
|
+
- **Pane width**: Too many panes can break cmux commands.
|
|
150
|
+
- **Trust prompts**: New directories trigger trust confirmation. Conductor auto-approves but may need manual intervention.
|
|
151
|
+
|
|
152
|
+
## Contributing
|
|
153
|
+
|
|
154
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for testing, repository structure, and coding conventions.
|
|
155
|
+
|
|
156
|
+
## License
|
|
157
|
+
|
|
158
|
+
MIT License — see [LICENSE](LICENSE) for details.
|
package/bin/cmux-team.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// cmux-team CLI ラッパー
|
|
4
|
+
// bun で skills/cmux-team/manager/main.ts を実行する
|
|
5
|
+
|
|
6
|
+
import { execFileSync } from "node:child_process";
|
|
7
|
+
import { fileURLToPath } from "node:url";
|
|
8
|
+
import { dirname, join } from "node:path";
|
|
9
|
+
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = dirname(__filename);
|
|
12
|
+
const mainTs = join(__dirname, "..", "skills", "cmux-team", "manager", "main.ts");
|
|
13
|
+
|
|
14
|
+
// bun の存在確認
|
|
15
|
+
try {
|
|
16
|
+
execFileSync("which", ["bun"], { stdio: "ignore" });
|
|
17
|
+
} catch {
|
|
18
|
+
console.error("エラー: bun がインストールされていません。");
|
|
19
|
+
console.error("インストール: https://bun.sh/docs/installation");
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// 引数を透過して bun run で実行
|
|
24
|
+
const args = process.argv.slice(2);
|
|
25
|
+
try {
|
|
26
|
+
execFileSync("bun", ["run", mainTs, ...args], { stdio: "inherit" });
|
|
27
|
+
} catch (e) {
|
|
28
|
+
process.exit(e.status ?? 1);
|
|
29
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// npm postinstall スクリプト
|
|
4
|
+
// manager/ の依存を bun install で解決
|
|
5
|
+
|
|
6
|
+
import { execFileSync } from "node:child_process";
|
|
7
|
+
import { fileURLToPath } from "node:url";
|
|
8
|
+
import { dirname, join } from "node:path";
|
|
9
|
+
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = dirname(__filename);
|
|
12
|
+
const managerDir = join(__dirname, "..", "skills", "cmux-team", "manager");
|
|
13
|
+
|
|
14
|
+
// bun install(manager/ の依存解決)
|
|
15
|
+
try {
|
|
16
|
+
execFileSync("which", ["bun"], { stdio: "ignore" });
|
|
17
|
+
console.log("cmux-team: bun install を実行中...");
|
|
18
|
+
execFileSync("bun", ["install"], { cwd: managerDir, stdio: "inherit" });
|
|
19
|
+
} catch {
|
|
20
|
+
console.warn("cmux-team: bun が見つかりません。手動で以下を実行してください:");
|
|
21
|
+
console.warn(` cd ${managerDir} && bun install`);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// インストール完了メッセージ
|
|
25
|
+
console.log("cmux-team: インストール完了");
|
|
26
|
+
console.log(" Plugin としても使う場合: claude plugin add hummer98/cmux-team");
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read
|
|
3
|
+
description: "チーム体制を構築する(daemon + Master を起動)"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /cmux-team:start
|
|
7
|
+
|
|
8
|
+
cmux-team daemon を起動し、固定2x2レイアウトで Master + Conductor x3 を構築する。
|
|
9
|
+
|
|
10
|
+
## 手順
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# cmux-team コマンドで起動
|
|
14
|
+
if ! command -v cmux-team >/dev/null 2>&1; then
|
|
15
|
+
echo "ERROR: cmux-team がインストールされていません"
|
|
16
|
+
echo "npm install -g cmux-team を実行してください"
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
# node_modules がなければ依存インストール
|
|
21
|
+
MANAGER_DIR="$(npm prefix -g)/lib/node_modules/cmux-team/skills/cmux-team/manager"
|
|
22
|
+
if [ ! -d "$MANAGER_DIR/node_modules" ]; then
|
|
23
|
+
(cd "$MANAGER_DIR" && bun install)
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
# daemon 起動
|
|
27
|
+
cmux-team start
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## daemon が自動的に行うこと
|
|
31
|
+
|
|
32
|
+
1. **インフラ初期化** — `.team/` ディレクトリ構造を作成(tasks/, output/, logs/, prompts/ 等)
|
|
33
|
+
2. **Master ペイン作成** — 左上ペインにユーザー対話用の Claude セッションを起動
|
|
34
|
+
3. **固定2x2レイアウト作成** — 以下の4ペイン(5 surface)を作成:
|
|
35
|
+
```
|
|
36
|
+
[Manager|Master] | [Conductor-1]
|
|
37
|
+
[Conductor-2 ] | [Conductor-3]
|
|
38
|
+
```
|
|
39
|
+
4. **各 Conductor で Claude を idle 起動** — 常駐セッションとしてタスク割り当てを待機
|
|
40
|
+
5. **ダッシュボード表示** — チーム状態をサイドバーに表示
|
|
41
|
+
|
|
42
|
+
このセッションの役割はここで終了。Master ペインに切り替えてタスクを伝えること。
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read
|
|
3
|
+
description: "完了タスクをアーカイブする(closed → archived)"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /cmux-team:team-archive
|
|
7
|
+
|
|
8
|
+
`task-state.json` で closed 状態のタスクをアーカイブディレクトリに移動する。
|
|
9
|
+
|
|
10
|
+
## 引数
|
|
11
|
+
|
|
12
|
+
`$ARGUMENTS` でアーカイブ対象を指定:
|
|
13
|
+
|
|
14
|
+
- `/team-archive` — closed 状態の全タスクをアーカイブ
|
|
15
|
+
- `/team-archive 1-33` — ID 1〜33 のタスクをアーカイブ
|
|
16
|
+
- `/team-archive 15` — ID 15 のタスクのみアーカイブ
|
|
17
|
+
|
|
18
|
+
## 手順
|
|
19
|
+
|
|
20
|
+
### 1. アーカイブディレクトリ作成
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
ARCHIVE_DIR=".team/tasks/archived/$(date +%Y-%m-%d)"
|
|
24
|
+
mkdir -p "$ARCHIVE_DIR"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### 2. closed タスクの特定
|
|
28
|
+
|
|
29
|
+
`task-state.json` から closed 状態のタスク ID を取得:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
cat .team/task-state.json
|
|
33
|
+
# → closed 状態のエントリを抽出
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 3. 対象タスクの移動
|
|
37
|
+
|
|
38
|
+
`$ARGUMENTS` を解析:
|
|
39
|
+
|
|
40
|
+
- **空** → closed 状態の全タスクファイルを `"$ARCHIVE_DIR/"` に移動
|
|
41
|
+
- **`N-M` 形式** → ID が N 以上 M 以下かつ closed 状態のタスクファイルを移動
|
|
42
|
+
- **`N` 形式** → ID が N かつ closed 状態のタスクファイルのみ移動
|
|
43
|
+
|
|
44
|
+
ID はファイル名の先頭の数字部分(例: `016-conductor-self-review.md` → ID 16)で判定する。
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# task-state.json から closed ID を取得し、範囲指定と照合
|
|
48
|
+
for f in .team/tasks/*.md; do
|
|
49
|
+
ID=$(basename "$f" | grep -oE '^[0-9]+' | sed 's/^0*//')
|
|
50
|
+
# task-state.json で closed かつ ID が範囲内なら移動
|
|
51
|
+
if [[ $ID -ge $START && $ID -le $END ]]; then
|
|
52
|
+
mv "$f" "$ARCHIVE_DIR/"
|
|
53
|
+
fi
|
|
54
|
+
done
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
移動後、`task-state.json` から該当エントリの status を `archived` に更新する。
|
|
58
|
+
|
|
59
|
+
### 4. 結果報告
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
アーカイブ完了: N 件を .team/tasks/archived/YYYY-MM-DD/ に移動
|
|
63
|
+
```
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read, Write, Edit, Glob, Grep
|
|
3
|
+
description: "アーキテクト+レビュアーエージェントで設計フェーズを実行する"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /team-design
|
|
7
|
+
|
|
8
|
+
アーキテクトとレビュアーエージェントを起動し、設計フェーズを実行してください。
|
|
9
|
+
|
|
10
|
+
## 手順
|
|
11
|
+
|
|
12
|
+
### 1. 前提チェック
|
|
13
|
+
|
|
14
|
+
- `.team/team.json` が存在すること
|
|
15
|
+
- `CMUX_SOCKET_PATH` が設定されていること
|
|
16
|
+
- `cmux` コマンドが利用可能であること
|
|
17
|
+
- `.team/specs/requirements.md` が存在し、`Status: Approved` が含まれていること
|
|
18
|
+
- 存在しない場合: 「要件定義がありません。`/team-spec` を先に実行してください」
|
|
19
|
+
- 未承認の場合: 「要件が未承認です。`/team-spec` で承認してください」と警告(続行は可能)
|
|
20
|
+
|
|
21
|
+
### 2. コンテキスト収集
|
|
22
|
+
|
|
23
|
+
以下を読み込む:
|
|
24
|
+
- `.team/specs/requirements.md` — 要件定義
|
|
25
|
+
- `.team/specs/research.md` — リサーチ結果(あれば)
|
|
26
|
+
- `.team/tasks/` — オープンタスク(あれば。`task-state.json` で状態確認)
|
|
27
|
+
- プロジェクトの主要ディレクトリ構造
|
|
28
|
+
|
|
29
|
+
### 3. アーキテクトプロンプト生成
|
|
30
|
+
|
|
31
|
+
1. `~/.claude/skills/cmux-team/templates/common-header.md` を読み込み
|
|
32
|
+
2. `~/.claude/skills/cmux-team/templates/architect.md` を読み込み
|
|
33
|
+
3. テンプレート変数を置換:
|
|
34
|
+
- `{{ROLE_ID}}` → `architect`
|
|
35
|
+
- `{{TASK_DESCRIPTION}}` → "要件に基づく技術設計の作成"
|
|
36
|
+
- `{{OUTPUT_FILE}}` → `.team/output/architect.md`
|
|
37
|
+
- `{{PROJECT_ROOT}}` → カレントディレクトリ
|
|
38
|
+
- `{{REQUIREMENTS_CONTENT}}` → requirements.md の内容
|
|
39
|
+
- `{{RESEARCH_SUMMARY}}` → research.md の内容(あれば。なければ "リサーチ結果なし")
|
|
40
|
+
- `{{CODEBASE_CONTEXT}}` → 主要ディレクトリ構造 + 既存の主要ファイル一覧
|
|
41
|
+
- `{{COMMON_HEADER}}` → 展開済み共通ヘッダー
|
|
42
|
+
4. `.team/prompts/architect.md` に書き出す
|
|
43
|
+
|
|
44
|
+
### 4. アーキテクトエージェント起動
|
|
45
|
+
|
|
46
|
+
サブエージェントの配置は cmux-team SKILL.md §5 参照。
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# a. Conductor と同じワークスペース内で分割(デフォルト)
|
|
50
|
+
cmux new-split right # → surface:S
|
|
51
|
+
|
|
52
|
+
# b. ステータス設定
|
|
53
|
+
cmux set-status architect "spawning" --icon sparkle --color "#ffcc00"
|
|
54
|
+
|
|
55
|
+
# d. Claude 起動(シェルコマンドは \n で送信可能)
|
|
56
|
+
cmux send --surface surface:S --workspace workspace:W "claude --dangerously-skip-permissions\n"
|
|
57
|
+
|
|
58
|
+
# e. 起動完了を待つ(Trust確認 or ❯ プロンプトをポーリング、cmux-team SKILL.md §2.1 Step 5 参照)
|
|
59
|
+
for i in $(seq 1 10); do
|
|
60
|
+
SCREEN=$(cmux read-screen --surface surface:S --workspace workspace:W 2>&1)
|
|
61
|
+
if echo "$SCREEN" | grep -q "Yes, I trust"; then
|
|
62
|
+
cmux send-key --surface surface:S --workspace workspace:W "return"
|
|
63
|
+
sleep 5; break
|
|
64
|
+
elif echo "$SCREEN" | grep -q '❯'; then
|
|
65
|
+
break
|
|
66
|
+
fi
|
|
67
|
+
sleep 3
|
|
68
|
+
done
|
|
69
|
+
|
|
70
|
+
# f. プロンプト送信(単一行指示 → \n で送信可能)
|
|
71
|
+
cmux send --surface surface:S --workspace workspace:W ".team/prompts/architect.md を読んで指示に従ってください。\n"
|
|
72
|
+
|
|
73
|
+
# g. 送信確認 + ステータス更新
|
|
74
|
+
sleep 3
|
|
75
|
+
SCREEN=$(cmux read-screen --surface surface:S --workspace workspace:W 2>&1)
|
|
76
|
+
if ! echo "$SCREEN" | grep -qE '(Stewing|Thinking|Reading|Searching|Ideating)'; then
|
|
77
|
+
cmux send-key --surface surface:S --workspace workspace:W "return"
|
|
78
|
+
sleep 3
|
|
79
|
+
fi
|
|
80
|
+
cmux set-status architect "running" --icon hammer --color "#0099ff"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 5. アーキテクト完了待機
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
cmux set-progress 0.0 --label "Design: architect working..."
|
|
87
|
+
cmux wait-for "architect-done" --timeout 600
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
- 10 分のタイムアウト(設計は時間がかかる場合がある)
|
|
91
|
+
- 定期的に画面を確認し、進捗を報告
|
|
92
|
+
|
|
93
|
+
### 6. 設計結果の処理
|
|
94
|
+
|
|
95
|
+
1. `.team/output/architect.md` を読み込む
|
|
96
|
+
2. 内容を `.team/specs/design.md` にコピー
|
|
97
|
+
3. ユーザーに設計概要を提示
|
|
98
|
+
4. アーキテクトペインを閉じる(またはアイドル状態にする)
|
|
99
|
+
|
|
100
|
+
### 7. レビュアー起動
|
|
101
|
+
|
|
102
|
+
ユーザーに確認: 「設計のレビューを実行しますか?」
|
|
103
|
+
|
|
104
|
+
YES の場合:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Design ワークスペース内で分割(アーキテクトペインを再利用 or 新規分割)
|
|
108
|
+
cmux new-split right --workspace workspace:W # → surface:A
|
|
109
|
+
cmux new-split right --workspace workspace:W # → surface:B
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
各レビュアーに対して(cmux-team SKILL.md §2.1 の手順に従う):
|
|
113
|
+
1. `~/.claude/skills/cmux-team/templates/reviewer.md` からプロンプトを生成
|
|
114
|
+
- `{{ROLE_ID}}` → `reviewer-1`, `reviewer-2`
|
|
115
|
+
- `{{ARTIFACT_CONTENT}}` → design.md の内容
|
|
116
|
+
- `{{REQUIREMENTS_CONTENT}}` → requirements.md の内容
|
|
117
|
+
- `{{DESIGN_CONTENT}}` → ""(設計そのものをレビュー中のため)
|
|
118
|
+
2. `.team/prompts/reviewer-{1,2}.md` に書き出す
|
|
119
|
+
3. 1体ずつ起動: Claude 起動 → Trust 確認ポーリング → プロンプト送信(`send-key return`)→ 送信確認
|
|
120
|
+
|
|
121
|
+
### 8. レビュアー完了待機
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
cmux set-progress 0.5 --label "Design: reviewers working..."
|
|
125
|
+
cmux wait-for "reviewer-1-done" --timeout 300
|
|
126
|
+
cmux wait-for "reviewer-2-done" --timeout 300
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### 9. レビュー結果の統合
|
|
130
|
+
|
|
131
|
+
1. `.team/output/reviewer-1.md` と `.team/output/reviewer-2.md` を読み込む
|
|
132
|
+
2. レビュー結果を統合:
|
|
133
|
+
- **Verdict**: 両方 Approved なら "Approved"、それ以外は "Changes Requested"
|
|
134
|
+
- **共通指摘**: 両レビュアーが指摘した問題
|
|
135
|
+
- **個別指摘**: 各レビュアー固有の指摘
|
|
136
|
+
- **Critical/Major 項目**: 即座に対応が必要な指摘
|
|
137
|
+
3. 統合結果をユーザーに提示
|
|
138
|
+
|
|
139
|
+
### 10. イテレーション判断
|
|
140
|
+
|
|
141
|
+
レビュー結果に基づいて:
|
|
142
|
+
|
|
143
|
+
- **Approved**:
|
|
144
|
+
- `.team/specs/design.md` の末尾に承認ステータスを追記
|
|
145
|
+
- 次のステップ案内
|
|
146
|
+
- **Changes Requested**:
|
|
147
|
+
- Critical/Major 指摘を一覧表示
|
|
148
|
+
- ユーザーに確認: 「設計を修正しますか?」
|
|
149
|
+
- YES: レビューフィードバックをアーキテクトプロンプトに追加し、再度アーキテクトを起動(手順 3 に戻る)
|
|
150
|
+
- NO: 現状の設計で続行(ユーザー判断)
|
|
151
|
+
|
|
152
|
+
### 11. タスク分解(オプション)
|
|
153
|
+
|
|
154
|
+
設計が承認されたら:
|
|
155
|
+
- ユーザーに確認: 「設計からタスク一覧を生成しますか?」
|
|
156
|
+
- YES の場合:
|
|
157
|
+
- design.md を分析してタスクを抽出
|
|
158
|
+
- 各タスクに並列実行可能フラグ `(P)` を付与
|
|
159
|
+
- `.team/specs/tasks.md` に書き出す
|
|
160
|
+
- 形式:
|
|
161
|
+
```markdown
|
|
162
|
+
# タスク一覧
|
|
163
|
+
|
|
164
|
+
## Task 1: <タスク名> (P)
|
|
165
|
+
- 説明: <詳細>
|
|
166
|
+
- 依存: なし
|
|
167
|
+
- 推定規模: S/M/L
|
|
168
|
+
|
|
169
|
+
## Task 2: <タスク名>
|
|
170
|
+
- 説明: <詳細>
|
|
171
|
+
- 依存: Task 1
|
|
172
|
+
- 推定規模: M
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 12. クリーンアップと状態更新
|
|
176
|
+
|
|
177
|
+
- レビュアーペインを閉じる
|
|
178
|
+
- (team.json は daemon が自動更新する)
|
|
179
|
+
- プログレスバーをクリア
|
|
180
|
+
|
|
181
|
+
### 13. 次のステップ案内
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
設計フェーズが完了しました。
|
|
185
|
+
|
|
186
|
+
次のステップ:
|
|
187
|
+
/team-impl → 実装フェーズに進む
|
|
188
|
+
/team-review → 追加レビューが必要な場合
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## 引数
|
|
192
|
+
|
|
193
|
+
なし
|
|
194
|
+
|
|
195
|
+
## エラーハンドリング
|
|
196
|
+
|
|
197
|
+
- アーキテクトがタイムアウトした場合: 画面を確認し、進捗に応じて延長または中断を提案
|
|
198
|
+
- レビュアーの結果が矛盾する場合: 両者の見解を並列表示し、ユーザーに判断を委ねる
|
|
199
|
+
- イテレーションが 3 回を超えた場合: ユーザーに設計の根本的な見直しを提案
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read, Write, Edit
|
|
3
|
+
description: "全層を終了しチームを解散する"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /team-disband
|
|
7
|
+
|
|
8
|
+
全層(Agent → Conductor → Manager)を bottom-up で終了してください。
|
|
9
|
+
|
|
10
|
+
## 手順
|
|
11
|
+
|
|
12
|
+
1. .team/team.json を読む(なければ未初期化を案内)
|
|
13
|
+
稼働中の Conductor は `cmux tree` で確認する
|
|
14
|
+
|
|
15
|
+
2. **Layer 1: Agent 終了**
|
|
16
|
+
各 Conductor の Agent を終了:
|
|
17
|
+
- cmux send --surface <agent-surface> "/exit\n"
|
|
18
|
+
- sleep 2
|
|
19
|
+
- cmux close-surface --surface <agent-surface>
|
|
20
|
+
|
|
21
|
+
3. **Layer 2: Conductor 終了**
|
|
22
|
+
各 Conductor を終了:
|
|
23
|
+
- cmux send --surface <conductor-surface> "/exit\n"
|
|
24
|
+
- sleep 2
|
|
25
|
+
- cmux close-surface --surface <conductor-surface>
|
|
26
|
+
|
|
27
|
+
4. **Layer 3: git worktree クリーンアップ**
|
|
28
|
+
- `git worktree list` で `.worktrees/` 内の worktree を列挙
|
|
29
|
+
- 各 worktree について未マージの変更を確認:
|
|
30
|
+
```bash
|
|
31
|
+
cd <worktree-path>
|
|
32
|
+
UNMERGED=$(git log --oneline main..HEAD 2>/dev/null)
|
|
33
|
+
if [ -n "$UNMERGED" ]; then
|
|
34
|
+
echo "WARNING: 未マージの変更があります: <worktree-path>"
|
|
35
|
+
echo "$UNMERGED"
|
|
36
|
+
fi
|
|
37
|
+
```
|
|
38
|
+
- **未マージの変更がある場合**: ユーザーに警告を表示し確認を求める。`$ARGUMENTS = "force"` の場合のみスキップして強制削除
|
|
39
|
+
- **未マージの変更がない場合**: `git worktree remove <path>` で削除(`--force` 不要)
|
|
40
|
+
- 対応するブランチを `git branch -d` で削除(マージ済みのみ。未マージは `-d` が失敗するので安全)
|
|
41
|
+
|
|
42
|
+
5. **Layer 4: Manager 終了**
|
|
43
|
+
TypeScript Manager プロセスに SHUTDOWN メッセージを送信:
|
|
44
|
+
```bash
|
|
45
|
+
# SHUTDOWN キューメッセージを送信
|
|
46
|
+
.team/manager/main.ts stop
|
|
47
|
+
|
|
48
|
+
# プロセスが終了するまで待機(最大 15 秒)
|
|
49
|
+
MANAGER_PID=$(python3 -c "import json; d=json.load(open('.team/team.json')); print(d.get('manager',{}).get('pid',''))")
|
|
50
|
+
for i in $(seq 1 15); do
|
|
51
|
+
kill -0 $MANAGER_PID 2>/dev/null || break
|
|
52
|
+
sleep 1
|
|
53
|
+
done
|
|
54
|
+
|
|
55
|
+
# まだ生きていたら SIGTERM
|
|
56
|
+
kill $MANAGER_PID 2>/dev/null || true
|
|
57
|
+
|
|
58
|
+
# Manager ペインを閉じる
|
|
59
|
+
MANAGER_SURFACE=$(python3 -c "import json; d=json.load(open('.team/team.json')); print(d.get('manager',{}).get('surface',''))")
|
|
60
|
+
cmux close-surface --surface $MANAGER_SURFACE 2>/dev/null || true
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
6. **ステータスクリア**
|
|
64
|
+
- cmux clear-progress
|
|
65
|
+
- cmux のサイドバーステータスをすべてクリア
|
|
66
|
+
|
|
67
|
+
7. **team.json 更新**
|
|
68
|
+
daemon の stop コマンド(手順5)が team.json の状態を自動更新する(phase: "disbanded" 等)。直接書き込みは不要。
|
|
69
|
+
|
|
70
|
+
8. サマリー表示
|
|
71
|
+
|
|
72
|
+
## 引数
|
|
73
|
+
|
|
74
|
+
$ARGUMENTS = "force" → グレースフル終了をスキップし即座にペインクローズ
|
|
75
|
+
|
|
76
|
+
## 注意事項
|
|
77
|
+
|
|
78
|
+
- .team/ ディレクトリ自体は削除しない
|
|
79
|
+
- マージされていない worktree ブランチがある場合は警告を表示
|