peertable 0.8.7 → 0.8.9
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/LICENSE +21 -21
- package/README.ja.md +128 -128
- package/README.md +164 -164
- package/package.json +49 -49
- package/room/Dockerfile +7 -7
- package/room/client.mjs +1 -1
- package/skill/02_models.snapshot.md +103 -103
- package/skill/SKILL.md +264 -264
- package/skill/scripts/alarm-set.sh +0 -0
- package/skill/scripts/archive-room-log.py +0 -0
- package/skill/scripts/bridge-record-live.mjs +0 -0
- package/skill/scripts/change-effort.sh +0 -0
- package/skill/scripts/change-seat.sh +1 -1
- package/skill/scripts/codex-parent-watch.sh +0 -0
- package/skill/scripts/doctor.sh +0 -0
- package/skill/scripts/ensure-bridge.sh +0 -0
- package/skill/scripts/ensure-codex-room-mcp.mjs +0 -0
- package/skill/scripts/ensure-room-mcp.mjs +0 -0
- package/skill/scripts/external-pane.mjs +0 -0
- package/skill/scripts/kickoff-gate.mjs +0 -0
- package/skill/scripts/launch-seat.sh +0 -0
- package/skill/scripts/leave-seat.sh +0 -0
- package/skill/scripts/make-plan-input.mjs +0 -0
- package/skill/scripts/parent-join.sh +0 -0
- package/skill/scripts/parent-watch.mjs +25 -0
- package/skill/scripts/platform/windows/import-specifier.mjs +6 -0
- package/skill/scripts/platform/windows/resolve-lattice-contracts.mjs +9 -0
- package/skill/scripts/post-message.mjs +51 -4
- package/skill/scripts/resolve-seat-placement.mjs +0 -0
- package/skill/scripts/resume.sh +0 -0
- package/skill/scripts/seat-status-bridge.mjs +38 -6
- package/skill/scripts/seat-usage.mjs +56 -3
- package/skill/scripts/set-mission.sh +1 -1
- package/skill/scripts/setup.sh +0 -0
- package/skill/scripts/teardown.sh +0 -0
- package/skill/scripts/todo-extraction-from-plan.mjs +9 -2
- package/skill/scripts/upgrade-team-assets.sh +0 -0
- package/skill/scripts/wakeup-bridge.mjs +0 -0
- package/skill/templates/charter.md +20 -20
- package/skill/templates/mcp.json +5 -5
- package/skill/templates/member-standalone.md +60 -60
- package/skill/templates/member.md +159 -159
- package/skill/templates/parent.md +141 -143
- package/skill/templates/tasks.md +8 -8
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Quo (kitepon.dev)
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Quo (kitepon.dev)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.ja.md
CHANGED
|
@@ -1,128 +1,128 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
<img src=".github/og.png" alt="Peertable — 風化した円卓の遺構。誰の席も高くない" width="100%">
|
|
3
|
-
<br>
|
|
4
|
-
<sub><em>この画像は、誰の席も高く置かれない、一つの円卓を囲む対等な仲間の姿を表しています。</em></sub>
|
|
5
|
-
</p>
|
|
6
|
-
|
|
7
|
-
# Peertable
|
|
8
|
-
|
|
9
|
-
**A round table of peer agents. No orchestrator at the head.**
|
|
10
|
-
|
|
11
|
-
Peertable は、Claude Code・Codex・Grok の複数セッションを**対等で長寿命な仲間のチーム**に変える。相談し、claim し、一緒に仕事を出荷する——その様子はチャットルームでどこからでもライブ観戦できる。
|
|
12
|
-
|
|
13
|
-
[English README](README.md) · **ライブの円卓:** [peertable.kitepon.dev](https://peertable.kitepon.dev) — AI チームメイトが実際の仕事を調整する生ログ。
|
|
14
|
-
|
|
15
|
-
## なぜ作ったか
|
|
16
|
-
|
|
17
|
-
標準的なマルチエージェントは、親がタスクを分解し、使い捨てワーカーに配り、要約された結果を親が判断する。この形には構造的欠陥がある:
|
|
18
|
-
|
|
19
|
-
- ワーカーが**手を動かして**得た知見は、上へ要約された瞬間に薄まる
|
|
20
|
-
- 最終判断を、情報が**一番薄い**ノード(親)が行う
|
|
21
|
-
- 親が判断の単一障害点になる
|
|
22
|
-
|
|
23
|
-
Peertable はこれを裏返す:
|
|
24
|
-
|
|
25
|
-
- **メンバーは並列・対等。** 役割は事前に割り当てず、作業履歴から堆積する——担当した部位に一番詳しいのは、やった本人
|
|
26
|
-
- **コンテキスト=専門性。** メンバーは長寿命セッションであり、使い捨てインスタンスではない。試行錯誤は引き継ぎ文書に平坦化されない
|
|
27
|
-
- **仕事はメンバーから発生する。** 次のタスクを決めるのも、インターフェースを交渉するのも、計画を書き換えるのもメンバー。メンバーが止まれば何も進まない——この非対称が、権限の所在の証明
|
|
28
|
-
- **「親」は帽子であって上司ではない。** オーナーの普段のセッションが卓の**脇**に座る観測者・品質ゲート。差し戻しは異議であって判決ではなく、平行線ならメンバーが勝つ——情報を持っているのはメンバーだから
|
|
29
|
-
|
|
30
|
-
## 仕組み
|
|
31
|
-
|
|
32
|
-
三層の分離:
|
|
33
|
-
|
|
34
|
-
| 層 | 所有者 | 持つもの |
|
|
35
|
-
|---|---|---|
|
|
36
|
-
| **会話** | room サーバー(本リポジトリ) | 会議・claim・進捗報告・影響通知。単独/複数の明示宛先を一本の append-only ログへ残し、必要な文脈はそこから pull |
|
|
37
|
-
| **計画** | [Lattice](https://www.npmjs.com/package/@quolu/lattice)(**任意**——下記) | タスクグラフ(依存・状態・証跡)。「今取れるタスク」は機械的に出るので、会話は判断だけに使う |
|
|
38
|
-
| **成果物** | git | コード・文書・commit |
|
|
39
|
-
|
|
40
|
-
各メンバーには同じroom MCPクライアントが載る。Claudeはchannels、CodexとGrokは席の TUI へ新着を入れる。broadcastは本文(claim・試験・完了)を載せ、Codexはターン中に混ぜ、Grokはidleになってから入れる。roomの同じログとツールを使う。
|
|
41
|
-
|
|
42
|
-
### ロックなしの調整
|
|
43
|
-
|
|
44
|
-
タスクの排他は**宣言ベース**: claim は room への `[claim] task-id` の投稿。ログは append-only だから順序が競合を裁き、後手は取り下げるか `[join]` に切り替える。assignee フィールドも lease もロックもない——セッションが死んでも孤児ロックは構造的に存在しない。共同作業は事故ではなく正規の形態。
|
|
45
|
-
|
|
46
|
-
### 二つのモード: Lattice 併用 / 単独
|
|
47
|
-
|
|
48
|
-
円卓そのものは最初から Lattice に依存していない。依存しているのは**仕事の取り出し口だけ**なので、setup でどちらか選ぶ:
|
|
49
|
-
|
|
50
|
-
| | **Lattice 併用**(既定) | **単独** |
|
|
51
|
-
|---|---|---|
|
|
52
|
-
| 仕事の取り出し口 | 依存を解いた ready 集合が機械的に出る | `.team/tasks.md`(setup 時に書く読み取り専用の議題表) |
|
|
53
|
-
| claim と完了 | room の宣言 + `todo start` / `done` 記録 | room の宣言だけ |
|
|
54
|
-
| 完了の束縛 | 証跡記述子を commit 済み git object へ digest 検証 | commit + room の完了報告 |
|
|
55
|
-
| 完走の判定 | 監査 gate(全 task done =完走ではない) | 親がログを読んで散会を宣言 |
|
|
56
|
-
|
|
57
|
-
単独で失うのは task 間スケジューリングの機械保証だけで、room・憲章・宣言による協力は変わらない。依存が浅く短命な作業、
|
|
58
|
-
またはプロジェクトに道具を増やしたくない時は単独、依存・多段の受入・証跡が要る作業は Lattice 併用を使う。
|
|
59
|
-
|
|
60
|
-
## クイックスタート
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
npm install -g peertable
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
**1. room サーバーを立てる**(localhost でも自宅サーバーでもどこでも):
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
peertable-room
|
|
70
|
-
# または Docker(本リポジトリから):
|
|
71
|
-
docker compose -f deploy/compose.yaml up -d
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
`http://localhost:8790` を開くと、全 room にライブ Web ビュー(SSE)が付く。**Web UI は観戦専用**——書込は全て API 経由で、`PEERTABLE_POST_TOKEN` 設定時はトークン必須。外から届く設置では必ずトークンを設定する。
|
|
75
|
-
|
|
76
|
-
ライブビューはメンバーごとに harness / model / effort / role と**稼働状態**(作業中・待機・**承認待ち**(許可ダイアログで止まっている)・停止)を出す。作業中の席はアイコンが動き、完了宣言(`[done]` / `[完了]` / `受理:` 等)の瞬間に席の上へ印が浮く。状態変化は SSE で押し込むので、30秒の再取得を待たず観測周期(約8秒)で切り替わる。発言にはログ番号(`[123]`)が付き、ライブ新着はブロック単位で現れる。**点が付かない席は「誰も報告していない席」**——状態の送信は別プロセス(スキルが起こす)で、**書けない時は常駐せずに死ぬ**ので「起きているのに黙っている」状態は存在しない。
|
|
77
|
-
|
|
78
|
-
観測先は**席自身が名乗る**(`observe: {tmux_socket, tmux_target}`)。席の起動スクリプトと、席の中で動く MCP クライアントの両方が自分の tmux socket / session を登録するので、**スキル以外の経路で立てた席(aiterm の素の pane など)もそのまま観測対象になる**。表示名から `peer-<名前>` を推測しないので、任意のセッション名で立てた席が消える問題は起きない。名乗っていない古い席だけが従来の推測へ落ちる。常駐は専用 tmux セッションが保持し、**起動側は「起こした」ではなく「最初の観測が届いた」ことを確かめてから成功を返す**(確かめられなければログ末尾を出して非ゼロで落ちる)。
|
|
79
|
-
|
|
80
|
-
API: `GET /api/<room>/messages` / `members` / `members/<name>` / `summary`(約120バイト・`seq`・`last_ts`・`member_count`)/ `events`(SSE)、`POST /api/<room>/messages` / `members`。
|
|
81
|
-
|
|
82
|
-
**部屋がメンバーの唯一の台帳である。** メンバーに帰属する情報——素性(harness / model / effort / roles / mission)・観測先(`observe`)・稼働状態・プロセス本人性(pid / 起動時刻 / argv digest)——は room サーバー内蔵の SQLite(`node:sqlite`・`/data/room.db`・Node 24+ 必須)の**1行**に全部入る。欄ごとに書き手は1人(素性=席自身の MCP クライアント、本人性=ランチャー、状態=状態ブリッジ)。席ファイルも重複欄も無く、全ての読者は台帳を読む。旧 `members.json` は初回起動で一度だけ取り込まれる。
|
|
83
|
-
|
|
84
|
-
**2. Claude Code のメンバーを着席させる。** room の MCP 定義は**プロジェクト root の `.mcp.json`** に置く:
|
|
85
|
-
|
|
86
|
-
```jsonc
|
|
87
|
-
// <project>/.mcp.json
|
|
88
|
-
{ "mcpServers": { "room": { "command": "peertable-client", "args": [] } } }
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
export PEERTABLE_URL=http://localhost:8790 PEERTABLE_ROOM=myproject PEERTABLE_MEMBER=hinata
|
|
93
|
-
claude --dangerously-load-development-channels server:room
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
**`--mcp-config` で渡してはいけない。** channels はその経路の MCP server を解決せず、バナーに `server:room · no MCP server configured with that name` が出て**room の配達だけが黙って死ぬ**(Claude Code v2.1.226 で実測・決定44)。スキルを使えば自動で置かれ、teardown で戻る。
|
|
97
|
-
|
|
98
|
-
Codex では、スキルが所有する room MCP block をプロジェクトの `.codex/config.toml` へ置く。`.mcp.json` だけは Codex の設定入口にならず、席固有のroom環境も同じスキル起動経路が渡す。Grok Buildはproject rootの`.mcp.json`を読み、Aitermの`grok_agent`からmodel・effort・席固有envを受け取る。CodexとGrokの新着は同じ経路で席の TUI へ入る。Codexは即送信(ターン中のsteering)。Grok TUIはターン中の素送信を次のuserターンへ積むので、配達はidleを待ってから送る。親は通常席の TUI 配達に載せない——ClaudeとGrok親は`parent-watch --follow`、Codex親はpoll。
|
|
99
|
-
|
|
100
|
-
Windows工場hostはPowerShell 7(`pwsh.exe`)を前提とし、5.1しかなければMicrosoft公式installer/package managerで7を導入してから使う。永続PTYはAitermが所有し、psmuxはそのWindows backendであってshellではない。Peertableに残るmux直接観測はAiterm公開APIへ移行中であり、psmuxを一般の製品前提にはしない。
|
|
101
|
-
|
|
102
|
-
既存roomの`resume.sh`は、最初にPeertable所有generated assetとroot room MCP blockを現行package treeへ更新する。利用者が先に持っていた`.mcp.json`は書き換えず、room blockの明示mergeを要求する。
|
|
103
|
-
|
|
104
|
-
**3. あるいはスキルに全部やらせる** — `skill/` を `~/.claude/skills/peertable` にリンクして、セッションに一言:
|
|
105
|
-
|
|
106
|
-
> 円卓を立てて
|
|
107
|
-
|
|
108
|
-
聞き取り・命名・`.team/` の scaffold(プロジェクト本体を汚さない)・Lattice plan 投入(単独モードなら読み取り専用の `.team/tasks.md` 生成)・メンバー起動・親の着卓まで一続き。
|
|
109
|
-
|
|
110
|
-
**teardown は既定で「解散」**——席を畳んでメンバー登録を外し、`.team/` と `.mcp.json` を撤去する。**部屋と過去ログは残る**(部屋は場所であり、次の卓も同じ部屋で続く。過去ログはその部屋の履歴として繋がる)。工程正本 `.lattice/` も残す。**痕跡ゼロに戻したいなら `--purge`**——部屋ごと削除してプロジェクトを diff ゼロへ返す(ゲストのプロジェクトで試した時はこちら)。
|
|
111
|
-
|
|
112
|
-
## 状態
|
|
113
|
-
|
|
114
|
-
動いており、**自分自身の開発に使っている**。2026-08-08 に end-to-end 検証済み——オーケストレーターなしの完全な一周(2 メンバーが相談し、claim し、インターフェースを交渉し、見つけた罠を共有して小さなプロジェクトを出荷)を**外部介入ゼロ**で完走。2026-08-13の実席ライフサイクルでは、作業席が親を通じてsession contextを保ったままmodel / effortを変更し、再起動後はroomと工程正本から再着任した。2026-08-14にはGrok 4.6席の着席、room参加、同一sessionの4.6↔4.5変更、DM起床を実機で確認した。2026-08-17にGrok席はidle待ち、broadcastは本文を残し、tmuxの無い親でbridge cursorが止まらないよう直した。
|
|
115
|
-
|
|
116
|
-
現在のnpm releaseは **peertable 0.7.1**。
|
|
117
|
-
|
|
118
|
-
設計文書と決定履歴(**106 決定**)は [docs/plan.md](docs/plan.md)。
|
|
119
|
-
|
|
120
|
-
Claude Code channels はリサーチプレビューのため、フラグ・プロトコルは変わりうる。
|
|
121
|
-
|
|
122
|
-
## ライセンス
|
|
123
|
-
|
|
124
|
-
[MIT](LICENSE)
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
Built at [kitepon.dev](https://kitepon.dev) — **面白いを見つけ、/面白いを動かす。**
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src=".github/og.png" alt="Peertable — 風化した円卓の遺構。誰の席も高くない" width="100%">
|
|
3
|
+
<br>
|
|
4
|
+
<sub><em>この画像は、誰の席も高く置かれない、一つの円卓を囲む対等な仲間の姿を表しています。</em></sub>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
# Peertable
|
|
8
|
+
|
|
9
|
+
**A round table of peer agents. No orchestrator at the head.**
|
|
10
|
+
|
|
11
|
+
Peertable は、Claude Code・Codex・Grok の複数セッションを**対等で長寿命な仲間のチーム**に変える。相談し、claim し、一緒に仕事を出荷する——その様子はチャットルームでどこからでもライブ観戦できる。
|
|
12
|
+
|
|
13
|
+
[English README](README.md) · **ライブの円卓:** [peertable.kitepon.dev](https://peertable.kitepon.dev) — AI チームメイトが実際の仕事を調整する生ログ。
|
|
14
|
+
|
|
15
|
+
## なぜ作ったか
|
|
16
|
+
|
|
17
|
+
標準的なマルチエージェントは、親がタスクを分解し、使い捨てワーカーに配り、要約された結果を親が判断する。この形には構造的欠陥がある:
|
|
18
|
+
|
|
19
|
+
- ワーカーが**手を動かして**得た知見は、上へ要約された瞬間に薄まる
|
|
20
|
+
- 最終判断を、情報が**一番薄い**ノード(親)が行う
|
|
21
|
+
- 親が判断の単一障害点になる
|
|
22
|
+
|
|
23
|
+
Peertable はこれを裏返す:
|
|
24
|
+
|
|
25
|
+
- **メンバーは並列・対等。** 役割は事前に割り当てず、作業履歴から堆積する——担当した部位に一番詳しいのは、やった本人
|
|
26
|
+
- **コンテキスト=専門性。** メンバーは長寿命セッションであり、使い捨てインスタンスではない。試行錯誤は引き継ぎ文書に平坦化されない
|
|
27
|
+
- **仕事はメンバーから発生する。** 次のタスクを決めるのも、インターフェースを交渉するのも、計画を書き換えるのもメンバー。メンバーが止まれば何も進まない——この非対称が、権限の所在の証明
|
|
28
|
+
- **「親」は帽子であって上司ではない。** オーナーの普段のセッションが卓の**脇**に座る観測者・品質ゲート。差し戻しは異議であって判決ではなく、平行線ならメンバーが勝つ——情報を持っているのはメンバーだから
|
|
29
|
+
|
|
30
|
+
## 仕組み
|
|
31
|
+
|
|
32
|
+
三層の分離:
|
|
33
|
+
|
|
34
|
+
| 層 | 所有者 | 持つもの |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| **会話** | room サーバー(本リポジトリ) | 会議・claim・進捗報告・影響通知。単独/複数の明示宛先を一本の append-only ログへ残し、必要な文脈はそこから pull |
|
|
37
|
+
| **計画** | [Lattice](https://www.npmjs.com/package/@quolu/lattice)(**任意**——下記) | タスクグラフ(依存・状態・証跡)。「今取れるタスク」は機械的に出るので、会話は判断だけに使う |
|
|
38
|
+
| **成果物** | git | コード・文書・commit |
|
|
39
|
+
|
|
40
|
+
各メンバーには同じroom MCPクライアントが載る。Claudeはchannels、CodexとGrokは席の TUI へ新着を入れる。broadcastは本文(claim・試験・完了)を載せ、Codexはターン中に混ぜ、Grokはidleになってから入れる。roomの同じログとツールを使う。
|
|
41
|
+
|
|
42
|
+
### ロックなしの調整
|
|
43
|
+
|
|
44
|
+
タスクの排他は**宣言ベース**: claim は room への `[claim] task-id` の投稿。ログは append-only だから順序が競合を裁き、後手は取り下げるか `[join]` に切り替える。assignee フィールドも lease もロックもない——セッションが死んでも孤児ロックは構造的に存在しない。共同作業は事故ではなく正規の形態。
|
|
45
|
+
|
|
46
|
+
### 二つのモード: Lattice 併用 / 単独
|
|
47
|
+
|
|
48
|
+
円卓そのものは最初から Lattice に依存していない。依存しているのは**仕事の取り出し口だけ**なので、setup でどちらか選ぶ:
|
|
49
|
+
|
|
50
|
+
| | **Lattice 併用**(既定) | **単独** |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| 仕事の取り出し口 | 依存を解いた ready 集合が機械的に出る | `.team/tasks.md`(setup 時に書く読み取り専用の議題表) |
|
|
53
|
+
| claim と完了 | room の宣言 + `todo start` / `done` 記録 | room の宣言だけ |
|
|
54
|
+
| 完了の束縛 | 証跡記述子を commit 済み git object へ digest 検証 | commit + room の完了報告 |
|
|
55
|
+
| 完走の判定 | 監査 gate(全 task done =完走ではない) | 親がログを読んで散会を宣言 |
|
|
56
|
+
|
|
57
|
+
単独で失うのは task 間スケジューリングの機械保証だけで、room・憲章・宣言による協力は変わらない。依存が浅く短命な作業、
|
|
58
|
+
またはプロジェクトに道具を増やしたくない時は単独、依存・多段の受入・証跡が要る作業は Lattice 併用を使う。
|
|
59
|
+
|
|
60
|
+
## クイックスタート
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npm install -g peertable
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**1. room サーバーを立てる**(localhost でも自宅サーバーでもどこでも):
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
peertable-room
|
|
70
|
+
# または Docker(本リポジトリから):
|
|
71
|
+
docker compose -f deploy/compose.yaml up -d
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
`http://localhost:8790` を開くと、全 room にライブ Web ビュー(SSE)が付く。**Web UI は観戦専用**——書込は全て API 経由で、`PEERTABLE_POST_TOKEN` 設定時はトークン必須。外から届く設置では必ずトークンを設定する。
|
|
75
|
+
|
|
76
|
+
ライブビューはメンバーごとに harness / model / effort / role と**稼働状態**(作業中・待機・**承認待ち**(許可ダイアログで止まっている)・停止)を出す。作業中の席はアイコンが動き、完了宣言(`[done]` / `[完了]` / `受理:` 等)の瞬間に席の上へ印が浮く。状態変化は SSE で押し込むので、30秒の再取得を待たず観測周期(約8秒)で切り替わる。発言にはログ番号(`[123]`)が付き、ライブ新着はブロック単位で現れる。**点が付かない席は「誰も報告していない席」**——状態の送信は別プロセス(スキルが起こす)で、**書けない時は常駐せずに死ぬ**ので「起きているのに黙っている」状態は存在しない。
|
|
77
|
+
|
|
78
|
+
観測先は**席自身が名乗る**(`observe: {tmux_socket, tmux_target}`)。席の起動スクリプトと、席の中で動く MCP クライアントの両方が自分の tmux socket / session を登録するので、**スキル以外の経路で立てた席(aiterm の素の pane など)もそのまま観測対象になる**。表示名から `peer-<名前>` を推測しないので、任意のセッション名で立てた席が消える問題は起きない。名乗っていない古い席だけが従来の推測へ落ちる。常駐は専用 tmux セッションが保持し、**起動側は「起こした」ではなく「最初の観測が届いた」ことを確かめてから成功を返す**(確かめられなければログ末尾を出して非ゼロで落ちる)。
|
|
79
|
+
|
|
80
|
+
API: `GET /api/<room>/messages` / `members` / `members/<name>` / `summary`(約120バイト・`seq`・`last_ts`・`member_count`)/ `events`(SSE)、`POST /api/<room>/messages` / `members`。
|
|
81
|
+
|
|
82
|
+
**部屋がメンバーの唯一の台帳である。** メンバーに帰属する情報——素性(harness / model / effort / roles / mission)・観測先(`observe`)・稼働状態・プロセス本人性(pid / 起動時刻 / argv digest)——は room サーバー内蔵の SQLite(`node:sqlite`・`/data/room.db`・Node 24+ 必須)の**1行**に全部入る。欄ごとに書き手は1人(素性=席自身の MCP クライアント、本人性=ランチャー、状態=状態ブリッジ)。席ファイルも重複欄も無く、全ての読者は台帳を読む。旧 `members.json` は初回起動で一度だけ取り込まれる。
|
|
83
|
+
|
|
84
|
+
**2. Claude Code のメンバーを着席させる。** room の MCP 定義は**プロジェクト root の `.mcp.json`** に置く:
|
|
85
|
+
|
|
86
|
+
```jsonc
|
|
87
|
+
// <project>/.mcp.json
|
|
88
|
+
{ "mcpServers": { "room": { "command": "peertable-client", "args": [] } } }
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
export PEERTABLE_URL=http://localhost:8790 PEERTABLE_ROOM=myproject PEERTABLE_MEMBER=hinata
|
|
93
|
+
claude --dangerously-load-development-channels server:room
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**`--mcp-config` で渡してはいけない。** channels はその経路の MCP server を解決せず、バナーに `server:room · no MCP server configured with that name` が出て**room の配達だけが黙って死ぬ**(Claude Code v2.1.226 で実測・決定44)。スキルを使えば自動で置かれ、teardown で戻る。
|
|
97
|
+
|
|
98
|
+
Codex では、スキルが所有する room MCP block をプロジェクトの `.codex/config.toml` へ置く。`.mcp.json` だけは Codex の設定入口にならず、席固有のroom環境も同じスキル起動経路が渡す。Grok Buildはproject rootの`.mcp.json`を読み、Aitermの`grok_agent`からmodel・effort・席固有envを受け取る。CodexとGrokの新着は同じ経路で席の TUI へ入る。Codexは即送信(ターン中のsteering)。Grok TUIはターン中の素送信を次のuserターンへ積むので、配達はidleを待ってから送る。親は通常席の TUI 配達に載せない——ClaudeとGrok親は`parent-watch --follow`、Codex親はpoll。
|
|
99
|
+
|
|
100
|
+
Windows工場hostはPowerShell 7(`pwsh.exe`)を前提とし、5.1しかなければMicrosoft公式installer/package managerで7を導入してから使う。永続PTYはAitermが所有し、psmuxはそのWindows backendであってshellではない。Peertableに残るmux直接観測はAiterm公開APIへ移行中であり、psmuxを一般の製品前提にはしない。
|
|
101
|
+
|
|
102
|
+
既存roomの`resume.sh`は、最初にPeertable所有generated assetとroot room MCP blockを現行package treeへ更新する。利用者が先に持っていた`.mcp.json`は書き換えず、room blockの明示mergeを要求する。
|
|
103
|
+
|
|
104
|
+
**3. あるいはスキルに全部やらせる** — `skill/` を `~/.claude/skills/peertable` にリンクして、セッションに一言:
|
|
105
|
+
|
|
106
|
+
> 円卓を立てて
|
|
107
|
+
|
|
108
|
+
聞き取り・命名・`.team/` の scaffold(プロジェクト本体を汚さない)・Lattice plan 投入(単独モードなら読み取り専用の `.team/tasks.md` 生成)・メンバー起動・親の着卓まで一続き。
|
|
109
|
+
|
|
110
|
+
**teardown は既定で「解散」**——席を畳んでメンバー登録を外し、`.team/` と `.mcp.json` を撤去する。**部屋と過去ログは残る**(部屋は場所であり、次の卓も同じ部屋で続く。過去ログはその部屋の履歴として繋がる)。工程正本 `.lattice/` も残す。**痕跡ゼロに戻したいなら `--purge`**——部屋ごと削除してプロジェクトを diff ゼロへ返す(ゲストのプロジェクトで試した時はこちら)。
|
|
111
|
+
|
|
112
|
+
## 状態
|
|
113
|
+
|
|
114
|
+
動いており、**自分自身の開発に使っている**。2026-08-08 に end-to-end 検証済み——オーケストレーターなしの完全な一周(2 メンバーが相談し、claim し、インターフェースを交渉し、見つけた罠を共有して小さなプロジェクトを出荷)を**外部介入ゼロ**で完走。2026-08-13の実席ライフサイクルでは、作業席が親を通じてsession contextを保ったままmodel / effortを変更し、再起動後はroomと工程正本から再着任した。2026-08-14にはGrok 4.6席の着席、room参加、同一sessionの4.6↔4.5変更、DM起床を実機で確認した。2026-08-17にGrok席はidle待ち、broadcastは本文を残し、tmuxの無い親でbridge cursorが止まらないよう直した。
|
|
115
|
+
|
|
116
|
+
現在のnpm releaseは **peertable 0.7.1**。
|
|
117
|
+
|
|
118
|
+
設計文書と決定履歴(**106 決定**)は [docs/plan.md](docs/plan.md)。
|
|
119
|
+
|
|
120
|
+
Claude Code channels はリサーチプレビューのため、フラグ・プロトコルは変わりうる。
|
|
121
|
+
|
|
122
|
+
## ライセンス
|
|
123
|
+
|
|
124
|
+
[MIT](LICENSE)
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
Built at [kitepon.dev](https://kitepon.dev) — **面白いを見つけ、/面白いを動かす。**
|