@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
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read, Write, Edit, Glob, Grep
|
|
3
|
+
description: "要件を対話的にブレストし仕様を策定する"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /team-spec
|
|
7
|
+
|
|
8
|
+
ユーザーと対話的に要件をブレストし、仕様を策定してください。
|
|
9
|
+
|
|
10
|
+
## 手順
|
|
11
|
+
|
|
12
|
+
### 1. 前提チェック
|
|
13
|
+
|
|
14
|
+
- `.team/team.json` が存在すること(なければ `/team-init` を案内)
|
|
15
|
+
|
|
16
|
+
### 2. 既存仕様の読み込み
|
|
17
|
+
|
|
18
|
+
以下のファイルが存在すれば読み込む:
|
|
19
|
+
- `.team/specs/requirements.md` — 既存の要件定義
|
|
20
|
+
- `.team/specs/research.md` — リサーチ結果(`/team-research` の成果)
|
|
21
|
+
- `.team/team.json` — プロジェクト説明
|
|
22
|
+
|
|
23
|
+
### 3. コンテキスト収集
|
|
24
|
+
|
|
25
|
+
プロジェクトの現状を把握する:
|
|
26
|
+
- カレントディレクトリの構造を確認(主要ファイル・ディレクトリ)
|
|
27
|
+
- README.md や既存ドキュメントがあれば読む
|
|
28
|
+
- `.team/tasks/` にタスクがあれば確認(`task-state.json` で状態確認)
|
|
29
|
+
|
|
30
|
+
### 4. 対話的ブレスト
|
|
31
|
+
|
|
32
|
+
ユーザーと以下の項目を対話形式で詰めていく:
|
|
33
|
+
|
|
34
|
+
#### a. プロジェクト概要
|
|
35
|
+
- 何を作るのか(What)
|
|
36
|
+
- なぜ作るのか(Why)
|
|
37
|
+
- 誰が使うのか(Who)
|
|
38
|
+
|
|
39
|
+
#### b. 機能要件
|
|
40
|
+
- 必須機能(Must-have)
|
|
41
|
+
- あると嬉しい機能(Nice-to-have)
|
|
42
|
+
- スコープ外(Out of scope)
|
|
43
|
+
|
|
44
|
+
#### c. 非機能要件
|
|
45
|
+
- パフォーマンス要件
|
|
46
|
+
- セキュリティ要件
|
|
47
|
+
- 互換性・制約
|
|
48
|
+
|
|
49
|
+
#### d. 技術的な制約・前提
|
|
50
|
+
- 使用する技術スタック
|
|
51
|
+
- 既存システムとの連携
|
|
52
|
+
- デプロイ環境
|
|
53
|
+
|
|
54
|
+
**対話のルール**:
|
|
55
|
+
- 一度に多くの質問をせず、2-3 項目ずつ確認する
|
|
56
|
+
- ユーザーの回答を要約して確認を取る
|
|
57
|
+
- 不明瞭な点があれば具体例を挙げて確認する
|
|
58
|
+
- リサーチが必要な項目があれば `/team-research` の実行を提案する
|
|
59
|
+
|
|
60
|
+
### 5. 要件ドキュメント生成
|
|
61
|
+
|
|
62
|
+
対話で集まった情報を以下の形式で `.team/specs/requirements.md` に書き出す:
|
|
63
|
+
|
|
64
|
+
```markdown
|
|
65
|
+
# 要件定義: <プロジェクト名>
|
|
66
|
+
|
|
67
|
+
## 概要
|
|
68
|
+
<プロジェクトの簡潔な説明>
|
|
69
|
+
|
|
70
|
+
## 目的
|
|
71
|
+
<なぜこのプロジェクトが必要か>
|
|
72
|
+
|
|
73
|
+
## ターゲットユーザー
|
|
74
|
+
<誰が使うのか>
|
|
75
|
+
|
|
76
|
+
## 機能要件
|
|
77
|
+
|
|
78
|
+
### Must-have
|
|
79
|
+
- [ ] REQ-001: <要件名> — <詳細>
|
|
80
|
+
- [ ] REQ-002: <要件名> — <詳細>
|
|
81
|
+
|
|
82
|
+
### Nice-to-have
|
|
83
|
+
- [ ] REQ-N01: <要件名> — <詳細>
|
|
84
|
+
|
|
85
|
+
### Out of scope
|
|
86
|
+
- <スコープ外の項目>
|
|
87
|
+
|
|
88
|
+
## 非機能要件
|
|
89
|
+
- NFR-001: <要件名> — <詳細>
|
|
90
|
+
|
|
91
|
+
## 技術的制約
|
|
92
|
+
- <制約事項>
|
|
93
|
+
|
|
94
|
+
## 前提条件
|
|
95
|
+
- <前提事項>
|
|
96
|
+
|
|
97
|
+
## 未決事項
|
|
98
|
+
- <オープンな質問>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 6. ユーザー承認
|
|
102
|
+
|
|
103
|
+
生成した要件ドキュメントをユーザーに提示し:
|
|
104
|
+
- 内容に問題がなければ承認を得る
|
|
105
|
+
- 修正が必要な場合は対話を続けて更新する
|
|
106
|
+
- 承認後、ドキュメントの末尾に承認ステータスを追記:
|
|
107
|
+
```markdown
|
|
108
|
+
---
|
|
109
|
+
Status: Approved
|
|
110
|
+
Approved at: <ISO 8601 タイムスタンプ>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 7. 次のステップ案内
|
|
114
|
+
|
|
115
|
+
(team.json の phase 更新は daemon が自動的に行う)
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
要件定義が完了しました。
|
|
119
|
+
|
|
120
|
+
次のステップ:
|
|
121
|
+
/team-design → 設計フェーズに進む(アーキテクト + レビュアー起動)
|
|
122
|
+
/team-research → 追加リサーチが必要な場合
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## 引数
|
|
126
|
+
|
|
127
|
+
`$ARGUMENTS` が指定された場合は、その内容をプロジェクト概要の初期入力として使用する。
|
|
128
|
+
|
|
129
|
+
## 注意事項
|
|
130
|
+
|
|
131
|
+
- 既存の requirements.md がある場合は上書きせず、更新として扱う
|
|
132
|
+
- 対話中にユーザーが「もういい」「これでOK」等と言った場合は、その時点の情報でドキュメントを生成する
|
|
133
|
+
- リサーチ結果がある場合は要件の裏付けとして積極的に参照する
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read, Glob, Grep
|
|
3
|
+
description: "チームの現在の状態を表示する"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /team-status
|
|
7
|
+
|
|
8
|
+
チームの現在の状態を表示してください。
|
|
9
|
+
|
|
10
|
+
## 手順
|
|
11
|
+
|
|
12
|
+
1. .team/team.json を読む(なければ未初期化を案内)
|
|
13
|
+
2. 以下の真のソースから直接情報を取得して表示:
|
|
14
|
+
- **Manager の状態**: `cmux read-screen --surface <manager-surface> --lines 5` で画面を確認
|
|
15
|
+
- **稼働中の Conductor**: `cmux tree` でペイン構成を確認
|
|
16
|
+
- **オープンタスク**: `ls .team/tasks/` でファイル一覧 + `cat .team/task-state.json` で状態を確認
|
|
17
|
+
- **完了タスク履歴**: `grep task_completed .team/logs/manager.log`
|
|
18
|
+
- **クローズ済みタスク数**: `cat .team/task-state.json` の closed エントリ数
|
|
19
|
+
3. アーキテクチャ: 4-tier (Master → Manager → Conductor → Agent)
|
|
20
|
+
4. Manager が応答しているか cmux read-screen で簡易ヘルスチェック
|
|
21
|
+
|
|
22
|
+
## 引数
|
|
23
|
+
|
|
24
|
+
なし
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read, Write, Edit, Glob, Grep
|
|
3
|
+
description: "ドキュメントをスペックと同期する"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /team-sync-docs
|
|
7
|
+
|
|
8
|
+
`docs/` を `.team/specs/` の現在の状態と同期してください。
|
|
9
|
+
|
|
10
|
+
## 手順
|
|
11
|
+
|
|
12
|
+
### 1. 前提チェック
|
|
13
|
+
|
|
14
|
+
- `.team/team.json` が存在すること(なければ `/team-init` を案内)
|
|
15
|
+
- `.team/specs/` にファイルが存在すること
|
|
16
|
+
|
|
17
|
+
### 2. 現在のスペック状態の収集
|
|
18
|
+
|
|
19
|
+
`.team/specs/` 内の全ファイルを読み込む:
|
|
20
|
+
- `requirements.md` — 要件定義
|
|
21
|
+
- `research.md` — リサーチ結果
|
|
22
|
+
- `design.md` — 設計ドキュメント
|
|
23
|
+
- `tasks.md` — タスク一覧
|
|
24
|
+
- その他のスペックファイル
|
|
25
|
+
|
|
26
|
+
### 3. スナップショットとの差分検出
|
|
27
|
+
|
|
28
|
+
`.team/docs-snapshot/` と比較:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# スナップショットが存在しない場合は初回同期
|
|
32
|
+
ls .team/docs-snapshot/ 2>/dev/null
|
|
33
|
+
|
|
34
|
+
# 差分検出
|
|
35
|
+
diff -rq .team/specs/ .team/docs-snapshot/ 2>/dev/null
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
- スナップショットが存在しない場合: 全ファイルが「新規」扱い
|
|
39
|
+
- 差分がない場合: 「ドキュメントは最新です」と表示して終了
|
|
40
|
+
|
|
41
|
+
### 4. ドキュメント生成・更新
|
|
42
|
+
|
|
43
|
+
team.json からプロジェクト名を取得し、`docs/` 構造を生成:
|
|
44
|
+
|
|
45
|
+
#### ドキュメント構成
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
docs/
|
|
49
|
+
├── README.md # プロジェクト概要(requirements.md ベース)
|
|
50
|
+
├── design.md # 技術設計(design.md を整形)
|
|
51
|
+
├── tasks.md # タスク一覧と進捗(tasks.md を整形)
|
|
52
|
+
└── research/ # リサーチ結果(あれば)
|
|
53
|
+
└── <topic>.md
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
#### 生成ルール
|
|
57
|
+
|
|
58
|
+
**docs/README.md** (または既存の docs/README.md を更新):
|
|
59
|
+
- requirements.md から「概要」「目的」「機能要件」セクションを抽出
|
|
60
|
+
- ユーザー向けの読みやすい形式に整形
|
|
61
|
+
- 技術的な内部詳細は除外
|
|
62
|
+
|
|
63
|
+
**docs/design.md**:
|
|
64
|
+
- design.md の内容を整形
|
|
65
|
+
- 内部実装の詳細(ファイルパス等)は一般化
|
|
66
|
+
- Mermaid ダイアグラムはそのまま維持
|
|
67
|
+
|
|
68
|
+
**docs/tasks.md**:
|
|
69
|
+
- tasks.md の内容を進捗ステータス付きで表示
|
|
70
|
+
- 完了済み/進行中/未着手のステータスを反映
|
|
71
|
+
|
|
72
|
+
### 5. スナップショット更新
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# 現在の specs/ をスナップショットとしてコピー
|
|
76
|
+
rm -rf .team/docs-snapshot/*
|
|
77
|
+
cp -r .team/specs/* .team/docs-snapshot/
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 6. 差分サマリーの表示
|
|
81
|
+
|
|
82
|
+
ユーザーに以下を表示:
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
## ドキュメント同期完了
|
|
86
|
+
|
|
87
|
+
### 変更内容
|
|
88
|
+
- 更新: docs/README.md (要件からの概要更新)
|
|
89
|
+
- 新規: docs/design.md (設計ドキュメント追加)
|
|
90
|
+
- 更新: docs/tasks.md (進捗ステータス反映)
|
|
91
|
+
|
|
92
|
+
### 次回同期で検出する変更
|
|
93
|
+
- .team/specs/ 内のファイルが変更された場合
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 7. git コミット(オプション)
|
|
97
|
+
|
|
98
|
+
ユーザーに確認: 「ドキュメントの変更を git commit しますか?」
|
|
99
|
+
|
|
100
|
+
YES の場合:
|
|
101
|
+
```bash
|
|
102
|
+
git add docs/
|
|
103
|
+
git commit -m "docs: sync documentation with current specs"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 8. DocKeeper エージェント(オプション)
|
|
107
|
+
|
|
108
|
+
ドキュメントの品質をさらに向上させたい場合:
|
|
109
|
+
- ユーザーに確認: 「DocKeeper エージェントを起動してドキュメントを精査しますか?」
|
|
110
|
+
- YES の場合:
|
|
111
|
+
1. `~/.claude/skills/cmux-team/templates/dockeeper.md` からプロンプトを生成
|
|
112
|
+
2. エージェントを起動し、docs/ の整形・改善を実施
|
|
113
|
+
3. 完了後に差分を表示
|
|
114
|
+
|
|
115
|
+
### 9. 状態更新
|
|
116
|
+
|
|
117
|
+
- team.json は更新しない(sync-docs はフェーズを変更しない補助コマンド)
|
|
118
|
+
|
|
119
|
+
## 引数
|
|
120
|
+
|
|
121
|
+
なし
|
|
122
|
+
|
|
123
|
+
## 注意事項
|
|
124
|
+
|
|
125
|
+
- `docs/` に既存のユーザー作成ドキュメントがある場合は上書きせず、マージを試みる
|
|
126
|
+
- スペックに機密情報が含まれていないか注意する(内部実装詳細の除外)
|
|
127
|
+
- docs-snapshot/ は gitignore されているため、同期状態はローカルのみで管理される
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read, Write, Edit, Glob, Grep
|
|
3
|
+
description: "タスクの作成・一覧・クローズ・表示を管理する"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /team-task
|
|
7
|
+
|
|
8
|
+
`.team/tasks/` のタスクを管理してください。
|
|
9
|
+
|
|
10
|
+
## サブコマンド判定
|
|
11
|
+
|
|
12
|
+
`$ARGUMENTS` を解析し、以下のいずれかの操作を実行する:
|
|
13
|
+
|
|
14
|
+
- `$ARGUMENTS` = "" または未指定 → **一覧表示**
|
|
15
|
+
- `$ARGUMENTS` が "create " で始まる → **新規作成**("create " 以降がタイトル)
|
|
16
|
+
- `$ARGUMENTS` が "close " で始まる → **クローズ**("close " 以降が ID)
|
|
17
|
+
- `$ARGUMENTS` が "show " で始まる → **詳細表示**("show " 以降が ID)
|
|
18
|
+
- `$ARGUMENTS` がその他の文字列 → **新規作成のショートハンド**(文字列全体がタイトル)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 操作: 一覧表示
|
|
23
|
+
|
|
24
|
+
### 手順
|
|
25
|
+
|
|
26
|
+
1. `.team/tasks/` の全ファイルを読み込む
|
|
27
|
+
2. `cat .team/task-state.json` でタスク状態を取得
|
|
28
|
+
3. 各タスクの YAML フロントマターと状態を組み合わせて解析
|
|
29
|
+
4. 一覧を表形式で表示:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
## オープンタスク (N件)
|
|
33
|
+
|
|
34
|
+
| ID | タイトル | タイプ | ステータス | 起票者 | 作成日 |
|
|
35
|
+
|-----|---------------------------|----------|----------|---------------|-----------|
|
|
36
|
+
| 001 | 認証トークンの有効期限設計 | decision | ready | architect | 2026-03-19 |
|
|
37
|
+
| 002 | DB接続のタイムアウト | blocker | draft | implementer-1 | 2026-03-19 |
|
|
38
|
+
|
|
39
|
+
## クローズ済み (M件)
|
|
40
|
+
|
|
41
|
+
| ID | タイトル | タイプ | 起票者 | 作成日 |
|
|
42
|
+
|-----|---------------------------|----------|---------------|-----------|
|
|
43
|
+
| 000 | 初期設計の方針決定 | decision | architect | 2026-03-18 |
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
タスクが 0 件の場合: 「オープンタスクはありません」
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 操作: 新規作成
|
|
51
|
+
|
|
52
|
+
### 手順
|
|
53
|
+
|
|
54
|
+
1. **次のタスク番号を決定**:
|
|
55
|
+
```bash
|
|
56
|
+
# tasks/ の全ファイルから最大の ID を取得
|
|
57
|
+
ls .team/tasks/ 2>/dev/null | grep -oE '^[0-9]+' | sort -n | tail -1
|
|
58
|
+
# → 最大 ID + 1。ファイルがなければ 001 から開始
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
2. **タスク情報の収集**:
|
|
62
|
+
タイトルは `$ARGUMENTS` から取得済み。以下を対話的に確認:
|
|
63
|
+
- **タイプ**: decision / blocker / finding / question
|
|
64
|
+
- **コンテキスト**: このタスクの背景(1-2 文)
|
|
65
|
+
- **選択肢**(decision/question の場合): 検討中のオプション
|
|
66
|
+
- **推奨案**(あれば)
|
|
67
|
+
|
|
68
|
+
3. **タスクファイルを作成**:
|
|
69
|
+
ファイル名: `.team/tasks/NNN-<slug>.md`
|
|
70
|
+
(slug はタイトルから英数字・ハイフンに変換、30 文字以内)
|
|
71
|
+
|
|
72
|
+
```markdown
|
|
73
|
+
---
|
|
74
|
+
id: NNN
|
|
75
|
+
title: "<タイトル>"
|
|
76
|
+
type: <タイプ>
|
|
77
|
+
raised_by: conductor
|
|
78
|
+
created_at: <ISO 8601 タイムスタンプ>
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Context
|
|
82
|
+
<コンテキスト>
|
|
83
|
+
|
|
84
|
+
## Options
|
|
85
|
+
1. <選択肢 A> — メリット/デメリット
|
|
86
|
+
2. <選択肢 B> — メリット/デメリット
|
|
87
|
+
|
|
88
|
+
## Recommendation
|
|
89
|
+
<推奨案>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
タスクファイルには status を含めない(title, body, priority のみ)。
|
|
93
|
+
status は `task-state.json` で管理する。
|
|
94
|
+
|
|
95
|
+
**status について:**
|
|
96
|
+
- `draft` — 作成直後。Manager は無視する(ユーザー確認待ち)
|
|
97
|
+
- `ready` — 着手 OK。Manager が走査して Conductor を起動する
|
|
98
|
+
|
|
99
|
+
新規作成時は `bun run main.ts create-task --title <title> --priority <p> --status draft` を使用。
|
|
100
|
+
|
|
101
|
+
4. **作成確認**:
|
|
102
|
+
作成したタスクの内容を表示。
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 操作: クローズ
|
|
107
|
+
|
|
108
|
+
### 手順
|
|
109
|
+
|
|
110
|
+
1. **タスクファイルを検索**:
|
|
111
|
+
```bash
|
|
112
|
+
ls .team/tasks/ | grep "^$ID"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
2. **タスクが見つからない場合**:
|
|
116
|
+
「ID: $ID のオープンタスクが見つかりません」と表示
|
|
117
|
+
|
|
118
|
+
3. **CLI でタスクをクローズ**:
|
|
119
|
+
```bash
|
|
120
|
+
bun run main.ts close-task --task-id $ID --journal "closed by user"
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
4. **確認表示**:
|
|
124
|
+
「タスク #NNN をクローズしました: <タイトル>」
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 操作: 詳細表示
|
|
129
|
+
|
|
130
|
+
### 手順
|
|
131
|
+
|
|
132
|
+
1. **タスクファイルを検索**:
|
|
133
|
+
```bash
|
|
134
|
+
ls .team/tasks/ 2>/dev/null | grep "^$ID"
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
2. **タスクが見つからない場合**:
|
|
138
|
+
「ID: $ID のタスクが見つかりません」と表示
|
|
139
|
+
|
|
140
|
+
3. **タスクの全内容を表示**:
|
|
141
|
+
ファイルの全内容を読み込み、`task-state.json` の状態と合わせて整形表示。
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 前提チェック
|
|
146
|
+
|
|
147
|
+
すべての操作の前に:
|
|
148
|
+
- `.team/team.json` が存在すること
|
|
149
|
+
- `.team/tasks/` ディレクトリが存在すること(なければ作成)
|
|
150
|
+
|
|
151
|
+
## 引数
|
|
152
|
+
|
|
153
|
+
`$ARGUMENTS` = サブコマンドと引数:
|
|
154
|
+
- "" → 一覧表示
|
|
155
|
+
- "create <title>" → 新規作成
|
|
156
|
+
- "close <id>" → クローズ
|
|
157
|
+
- "show <id>" → 詳細表示
|
|
158
|
+
- "<title>" → 新規作成のショートハンド
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read, Write, Edit, Glob, Grep
|
|
3
|
+
description: "テストエージェントを起動しテストを作成・実行する"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /team-test
|
|
7
|
+
|
|
8
|
+
テストエージェントを起動し、テストの作成と実行を行ってください。
|
|
9
|
+
|
|
10
|
+
## 手順
|
|
11
|
+
|
|
12
|
+
### 1. 前提チェック
|
|
13
|
+
|
|
14
|
+
- `.team/team.json` が存在すること
|
|
15
|
+
- `CMUX_SOCKET_PATH` が設定されていること
|
|
16
|
+
- `cmux` コマンドが利用可能であること
|
|
17
|
+
|
|
18
|
+
### 2. テストスコープの決定
|
|
19
|
+
|
|
20
|
+
`$ARGUMENTS` に基づいてスコープを決定:
|
|
21
|
+
|
|
22
|
+
- `"unit"` → ユニットテストのみ
|
|
23
|
+
- `"integration"` → 統合テストのみ
|
|
24
|
+
- `"e2e"` → E2E テストのみ
|
|
25
|
+
- `"all"` → 全スコープ(最大 3 エージェント)
|
|
26
|
+
- 空 → プロジェクトの構成を分析して自動決定
|
|
27
|
+
|
|
28
|
+
自動決定の基準:
|
|
29
|
+
- テストフレームワークの検出(jest, pytest, go test, etc.)
|
|
30
|
+
- 既存のテストファイルの構造を確認
|
|
31
|
+
- 変更されたファイルの種類に基づいて適切なスコープを選択
|
|
32
|
+
|
|
33
|
+
### 3. コンテキスト収集
|
|
34
|
+
|
|
35
|
+
以下を読み込む:
|
|
36
|
+
- `.team/specs/requirements.md` — テスト対象の要件
|
|
37
|
+
- `.team/specs/design.md` — 設計ドキュメント
|
|
38
|
+
- `.team/output/implementer-*.md` — 実装出力(変更ファイル一覧)
|
|
39
|
+
- 既存のテストファイル(パターン検出用)
|
|
40
|
+
- `git diff` — 最近の変更内容
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# 変更されたファイル一覧
|
|
44
|
+
git diff --name-only HEAD~10 -- . ':!.team'
|
|
45
|
+
|
|
46
|
+
# テストファイルの既存パターン
|
|
47
|
+
find . -name "*test*" -o -name "*spec*" | head -20
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 4. テストエージェント数の決定
|
|
51
|
+
|
|
52
|
+
- `"unit"` のみ: 1 エージェント
|
|
53
|
+
- `"integration"` のみ: 1 エージェント
|
|
54
|
+
- `"e2e"` のみ: 1 エージェント
|
|
55
|
+
- `"all"` または自動: 最大 3 エージェント(各スコープに 1 名)
|
|
56
|
+
- 該当するスコープがない場合は省略(例: E2E テストが不要なプロジェクト)
|
|
57
|
+
|
|
58
|
+
### 5. プロンプト生成
|
|
59
|
+
|
|
60
|
+
各テストエージェントに対して:
|
|
61
|
+
|
|
62
|
+
1. `~/.claude/skills/cmux-team/templates/common-header.md` を読み込み
|
|
63
|
+
2. `~/.claude/skills/cmux-team/templates/tester.md` を読み込み
|
|
64
|
+
3. テンプレート変数を置換:
|
|
65
|
+
- `{{ROLE_ID}}` → `tester-unit`, `tester-integration`, `tester-e2e`
|
|
66
|
+
- `{{TASK_DESCRIPTION}}` → "<スコープ>テストの作成と実行"
|
|
67
|
+
- `{{OUTPUT_FILE}}` → `.team/output/tester-<scope>.md`
|
|
68
|
+
- `{{PROJECT_ROOT}}` → カレントディレクトリ
|
|
69
|
+
- `{{TEST_SCOPE}}` → テストスコープの説明と対象ファイル
|
|
70
|
+
- `{{IMPLEMENTATION_SUMMARY}}` → 実装出力のサマリー + git diff
|
|
71
|
+
- `{{REQUIREMENTS_CONTENT}}` → requirements.md の内容
|
|
72
|
+
- `{{COMMON_HEADER}}` → 展開済み共通ヘッダー
|
|
73
|
+
4. `.team/prompts/tester-<scope>.md` に書き出す
|
|
74
|
+
|
|
75
|
+
### 6. テストエージェント起動
|
|
76
|
+
|
|
77
|
+
サブエージェントの配置は cmux-team SKILL.md §5 参照。
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Conductor と同じワークスペース内で分割(デフォルト)
|
|
81
|
+
cmux new-split right # → surface:S
|
|
82
|
+
# 複数テスターの場合は追加分割
|
|
83
|
+
# cmux new-split right # → surface:S2
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
各テスターに対して(**1体ずつ、cmux-team SKILL.md §2.1 の手順に従う**):
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# a. ステータス設定
|
|
90
|
+
cmux set-status tester-<scope> "spawning" --icon sparkle --color "#ffcc00"
|
|
91
|
+
|
|
92
|
+
# c. Claude 起動(シェルコマンドは \n で送信可能)
|
|
93
|
+
cmux send --surface surface:S --workspace workspace:W "claude --dangerously-skip-permissions\n"
|
|
94
|
+
|
|
95
|
+
# d. 起動完了を待つ(Trust確認 or ❯ プロンプトをポーリング、SKILL.md §2.1 Step 5 参照)
|
|
96
|
+
for i in $(seq 1 10); do
|
|
97
|
+
SCREEN=$(cmux read-screen --surface surface:S --workspace workspace:W 2>&1)
|
|
98
|
+
if echo "$SCREEN" | grep -q "Yes, I trust"; then
|
|
99
|
+
cmux send-key --surface surface:S --workspace workspace:W "return"
|
|
100
|
+
sleep 5; break
|
|
101
|
+
elif echo "$SCREEN" | grep -q '❯'; then
|
|
102
|
+
break
|
|
103
|
+
fi
|
|
104
|
+
sleep 3
|
|
105
|
+
done
|
|
106
|
+
|
|
107
|
+
# e. プロンプト送信(単一行指示 → \n で送信可能)
|
|
108
|
+
cmux send --surface surface:S --workspace workspace:W ".team/prompts/tester-<scope>.md を読んで指示に従ってください。\n"
|
|
109
|
+
|
|
110
|
+
# f. 送信確認 + ステータス更新
|
|
111
|
+
sleep 3
|
|
112
|
+
SCREEN=$(cmux read-screen --surface surface:S --workspace workspace:W 2>&1)
|
|
113
|
+
if ! echo "$SCREEN" | grep -qE '(Stewing|Thinking|Reading|Searching|Ideating)'; then
|
|
114
|
+
cmux send-key --surface surface:S --workspace workspace:W "return"
|
|
115
|
+
sleep 3
|
|
116
|
+
fi
|
|
117
|
+
cmux set-status tester-<scope> "running" --icon hammer --color "#0099ff"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### 7. 完了待機
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
cmux set-progress 0.0 --label "Testing: 0/N scopes done"
|
|
124
|
+
|
|
125
|
+
# 各エージェントの完了を待つ
|
|
126
|
+
cmux wait-for "tester-unit-done" --timeout 300
|
|
127
|
+
cmux wait-for "tester-integration-done" --timeout 300
|
|
128
|
+
cmux wait-for "tester-e2e-done" --timeout 300
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 8. テスト結果の収集
|
|
132
|
+
|
|
133
|
+
各エージェントの出力を読み込み:
|
|
134
|
+
- `.team/output/tester-unit.md`
|
|
135
|
+
- `.team/output/tester-integration.md`
|
|
136
|
+
- `.team/output/tester-e2e.md`
|
|
137
|
+
|
|
138
|
+
### 9. テスト実行の検証
|
|
139
|
+
|
|
140
|
+
エージェントの報告に加えて、Conductor 自身でもテストを実行して結果を確認:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# プロジェクトのテストランナーを検出して実行
|
|
144
|
+
# 例: npm test, pytest, go test ./..., etc.
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 10. 結果統合
|
|
148
|
+
|
|
149
|
+
テスト結果を統合してユーザーに提示:
|
|
150
|
+
|
|
151
|
+
```markdown
|
|
152
|
+
## テスト結果サマリー
|
|
153
|
+
|
|
154
|
+
### 概要
|
|
155
|
+
- ユニットテスト: ✅ 15 passed / ❌ 2 failed
|
|
156
|
+
- 統合テスト: ✅ 8 passed / ❌ 0 failed
|
|
157
|
+
- E2E テスト: ⏭️ スキップ
|
|
158
|
+
|
|
159
|
+
### 失敗したテスト
|
|
160
|
+
1. `test_auth_token_refresh` — Expected 200, got 401
|
|
161
|
+
2. `test_session_timeout` — Timeout after 5s
|
|
162
|
+
|
|
163
|
+
### 新規作成テスト
|
|
164
|
+
- `tests/unit/test_auth.py` (5 tests)
|
|
165
|
+
- `tests/integration/test_api.py` (8 tests)
|
|
166
|
+
|
|
167
|
+
### カバレッジ
|
|
168
|
+
- 要件カバレッジ: 12/15 (80%)
|
|
169
|
+
- 未カバー要件: REQ-003, REQ-007, REQ-012
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### 11. テスト失敗のタスク化
|
|
173
|
+
|
|
174
|
+
失敗したテストに対して自動的にタスクを作成:
|
|
175
|
+
|
|
176
|
+
`.team/tasks/NNN-test-failure-<name>.md`:
|
|
177
|
+
```markdown
|
|
178
|
+
---
|
|
179
|
+
id: NNN
|
|
180
|
+
title: "[Test] <テスト名> が失敗"
|
|
181
|
+
type: finding
|
|
182
|
+
raised_by: tester-<scope>
|
|
183
|
+
created_at: <ISO 8601>
|
|
184
|
+
severity: major
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 失敗内容
|
|
188
|
+
<エラーメッセージ>
|
|
189
|
+
|
|
190
|
+
## 期待される動作
|
|
191
|
+
<期待値>
|
|
192
|
+
|
|
193
|
+
## 実際の動作
|
|
194
|
+
<実際の値>
|
|
195
|
+
|
|
196
|
+
## 対象ファイル
|
|
197
|
+
- <テストファイル>
|
|
198
|
+
- <テスト対象ファイル>
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 12. クリーンアップと状態更新
|
|
202
|
+
|
|
203
|
+
- テストエージェントのペインを閉じる
|
|
204
|
+
- (team.json は daemon が自動更新する)
|
|
205
|
+
- プログレスバーをクリア
|
|
206
|
+
|
|
207
|
+
### 13. 次のステップ案内
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
テストフェーズが完了しました。
|
|
211
|
+
|
|
212
|
+
結果: X passed / Y failed
|
|
213
|
+
カバレッジ: Z%
|
|
214
|
+
タスク作成: N 件
|
|
215
|
+
|
|
216
|
+
次のステップ:
|
|
217
|
+
/team-impl → テスト失敗の修正(失敗がある場合)
|
|
218
|
+
/team-sync-docs → ドキュメント同期
|
|
219
|
+
/team-task → タスクの確認・管理
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## 引数
|
|
223
|
+
|
|
224
|
+
`$ARGUMENTS` = テストスコープ("unit", "integration", "e2e", "all")。オプション。
|
|
225
|
+
|
|
226
|
+
## エラーハンドリング
|
|
227
|
+
|
|
228
|
+
- テストフレームワークが見つからない場合: プロジェクトの技術スタックを分析し、適切なフレームワークを提案
|
|
229
|
+
- テスト実行がタイムアウトした場合: 無限ループや重いテストの可能性を報告
|
|
230
|
+
- エージェントがテストを書けなかった場合: 出力を確認し、手動での対応を提案
|