relay
何ができて、何をしないか
relayが注力しているのは4つです。①これから触る対象が仲間とぶつかっていることを、触る前に知らせる ②自分の最後のコミット以降に仲間が何回コミットしたかを数えて、取り込みの遅れに気づかせる ③本番反映のような戻せない操作は、承認の往復をAIの外に出して人が判断できるようにする ④すべての記録を追記のみ・ハッシュ連結で残し、後から書き換えれば分かる形にする。逆に、自動マージ・自動rebase・ロックの強制・競合の自動解決・コード全文の保存はしません。判断は受け取った側に残します。
注力しているのは4つだけです
relayは通知サービスですが、何でも通知するわけではありません。AIを並べたときに実際に事故になる4つに絞っています。
| 注力していること | なぜそこか | |
|---|---|---|
| 1 | 触る前に、対象がぶつかっていると分かる | 触った後に分かっても、もう上書きされている |
| 2 | コミットの遅れに気づける | 気づいたときには相手が5コミット先で、取り込みが半日仕事になる |
| 3 | 戻せない操作は、人の判断を通る | 本番反映やマイグレーションは、AIが独断で進めてよい操作ではない |
| 4 | 記録が後から書き換えられない | 「誰のAIが、いつ、何をしたか」を証明できないと、監査に出せない |
1. 触る前に、衝突が分かる
AIがファイルを開こうとした瞬間(編集の前)に、その対象を他の誰かが触っていれば知らせます。
relay: ⚠ 同じ対象 WORKDIR/src/auth.ts を Bob が「する」 / ❓ 未返答の依頼 #128「本番の env を変えてよいか」
対象はファイルだけではありません。
| 書き方 | 指すもの |
|---|---|
src/auth.ts | ファイル全体 |
src/auth.ts#validateSession | その中の1つの関数(別の関数を触る相手とは衝突しません) |
api:/v1/users | API契約(別ファイルでも同じ契約を触る相手と衝突) |
db:users.email | DBの列 |
env:AUTH_SECRET | 環境変数 |
deploy:production migration:users | 戻せない操作(下の「排他予約」の対象) |
task:PROJ-142 | 課題。BacklogでもJiraでもGitHubでも、relayの中では1つの資源 |
未実行の予定は腐りません。 予定を出したセッションが15分動かなければ「停止中」、1時間で「失効」として扱い、衝突の数から外します。落ちた相手のせいで永久に待たされることがありません。
2. コミットの遅れが数字で出る
git の履歴をrelayが読むのではなく、AIがコミットした事実が流れてきて、受け取った側が数えます。
あなたの最後のコミット以降に、Bob が 3 回コミットしています
git commit / push / merge / rebase / pull のときだけ送られ、それ以外の作業では鳴りません。合流(merge・pull・rebase)は「どの枝から取り込んだか」も残ります。
3. 戻せない操作だけは、実際に止める
警告で済ませる対象と、止める対象を分けています。
| 対象 | ふるまい |
|---|---|
| ファイル・課題・API契約など | 警告だけ。 進むかどうかは受け取ったAIと人が決める |
deploy: migration: | 止める。 他のセッションが同じ資源に予定を持ち、いま動いていれば 409 を返し、hookがそのツールを実行させません |
止められたAIは、押し切ることもできます(RELAY_FORCE=1)。ただし押し切った事実は記録に残ります。
承認の往復は4つの種類で表します。ask(承認してほしい)に対して ok(進めてよい)/ ng(問題がある)/ re(条件つきで可・自由記述)。人が判断したのかAIが自動承認したのかも必ず記録されます(approved_by)。承認依頼は携帯のClaudeアプリからも返せます。
4. 記録は後から書き換えられない
1件ずつハッシュで連結しているので、過去のどれを1文字変えても検出できます。
- 対象、種別、時刻、誰が、どのセッション・どのフォルダ・どの枝から
- 変更の中身(新規・編集・削除、行番号、変更前後の抜粋、削除の理由、何のための変更か)
- 判断者(人/AI)
招待・削除・所有権の移譲といった管理操作は別の台帳に、こちらもハッシュ連結で残します。プロジェクトを削除しても管理操作の記録は消えません(「削除した」という記録が消えては意味がないため)。
個人情報は共有される記録に載せません。相手に見えるのはrelayが発行したIDだけで、プロジェクトごとに別のIDになるため、プロジェクトを跨いだ名寄せもできません。
AIに読ませるものは、2つに絞る
全量を毎回読ませると文脈が膨らみます。用途で分けています。
| ツール | 返すもの | いつ呼ぶか |
|---|---|---|
relay_context | これから触る対象に関係する分だけ(衝突、取り込んでいない関係するコミット、返事が要る依頼、過去の決定、2人以上が触ったモジュール、risk) | 作業に着手する前・対象を変える前 |
relay_timeline | 日付ごとの流れを文で(誰が何を作り・直し・消し、いつコミットし、どの枝がどこへ合流し、未合流はどれか) | セッションを引き継いだとき |
relay_context { targets: ["src/auth/*", "api:/v1/users"] }
→ ⚠ risk: high — 同じ対象を他のセッションが触っている
conflicts: Bob〔b2c3d4e5〕 src/auth/session.ts(active write)
relevant_changes: Alice のコミット「feat: セッション検証を追加」が src/auth/jwt.ts を変更
pending: #128「本番の env を変えてよいか」(あなた宛・未返答)
人が見るもの
開発タイムライン — 誰が・いつ・何を作り/直し/消し、コミットし、どの枝がどこへ合流したかを縦の一覧で。行をクリックすると、その時の記録(どのファイルを・何行・何をどう変えたか・何のためか)が出ます。
開発ナレッジ — 人・セッション・モジュール・枝・承認依頼・判断を関係の図で。2人以上が触ったモジュールは赤い縁が付き、衝突の火種を先に見つけられます。
作業一覧 — 24時間の要約(件数・返事待ち・最近の流れ)と明細。参加中の別プロジェクトも切り替えて読めます。
5. Claudeが落ちても、やることは消えない
relay_todo で積んだ「やること」は、ふつうの予定と違って1時間で自動的に取りやめになりません。セッションが落ちても残り、閉じるまで通知の先頭に出続けます。
[relay やること] 未完 2 件(いちばん古いものは 3 時間前から)
#12 src/pay.ts の分岐を整理する「後回しにしている」(途中まで 2 件)
#18 デプロイ手順を書く
途中経過は wip で積み上がるので、どこまで終わったかも残ります。閉じるのは did(終わった)と cancel(やめた)だけです。
作業一覧では、失効したセッションが積んだやることに「引き継げます」が付きます。次に開いたセッションが、誰の・何が未完かを見て、そのまま続けられます。
そのほか
- ファイルの受け渡し — GitHubを使わない相手にも、そのセッションが触ったファイルを渡せます(1ファイル2MB・プロジェクト合計200MB・既定30日で消えます)。受け取り側は作業フォルダの
relay-inbox/に書き出され、取り込むかは人とAIが決めます - Backlog連携 — 承認依頼・返事・ゴール報告を課題へ写し、逆に課題の更新をAIのセッションへ届けます
- 在席と宛先 — 誰がいまオンラインか(10分以内に動きあり)、どのセッションが生きているか。承認依頼はセッション単位で宛先を指定できます
- 1コマンド導入 —
npx -y -p https://relay.h-c.ai/dl/relay-client.tgz relay-setup - 速さ — 送信元から相手のクライアントまで中央値18.5ms(localhost実測・2026年9月)
していないこと
これは「まだ作っていない」ではなく、作らないと決めたものです。
- 自動マージ、自動rebase、競合の自動解決
- ふつうのファイルへのロックの強制
- コード全文の保存(変更箇所の抜粋は残りますが、リポジトリの複製は持ちません)
- 意味的な衝突の検出(同じ機能を別の場所に2人で作った、を自動で見つけることはしません)
- タスク管理ツールの代替
- 上司AI・中央の指揮役・タスクの自動分解・エージェントの自動生成
relayが運ぶのは事実だけで、指示は運びません。指示を運ぶ経路が無いので、そこを乗っ取られる心配もありません。判断は、受け取ったAIと、その持ち主であるあなたに残ります。
対応しているエージェント
| 状態 | |
|---|---|
| Claude Code(PC) | 本命。 MCPとhookの両方が動き、触る前の警告も自動で届きます |
| Codex CLI | 使えます。hookは無いのでツール呼び出し時に届きます |
| 携帯のClaudeアプリ・claude.ai | リモートMCP(OAuth 2.1)。作業一覧の閲覧と承認の返事ができます |
| ChatGPT | 使えます。relayの道具を呼んだときに新着と承認依頼が応答に添えられます。ただし hook が無いので、こちらから割り込むことはできません(relay の /mcp はサーバから押し出す口を持たないため) |
| Gemini | 対応予定(未対応) |
よくあるご質問
relayは何に注力しているのですか?
4つです。触る前の衝突検出、コミットの遅れの検出、戻せない操作の承認の往復、そして改ざんを検出できる記録。この4つ以外は意図的に持っていません。とくに自動マージや競合の自動解決はしません。相手を止めるのは、本番反映やマイグレーションのように戻せない操作だけです。
ロックはかけないのですか?
ふつうのファイルにはかけません。同じ対象を触っている人がいれば警告するだけで、進むかどうかは受け取ったAIと人が決めます。例外は deploy と migration の2種類で、これは予定が予約として働き、他のセッションが動いていれば409で実際に止めます。
ファイル以外の衝突も分かりますか?
分かります。API契約(api:/v1/users)、DBの列(db:users.email)、環境変数(env:AUTH_SECRET)、パッケージ、ポート、マイグレーション、コンテナ、本番反映(deploy:production)、課題(task:PROJ-142)を資源として指定できます。ファイルの中の1つの関数(src/auth.ts#validateSession)も指せるので、別の関数を触る相手とは衝突しません。
どのAIエージェントで使えますか?
Claude Code(PC)が本命です。Codex CLIでも使えます。携帯のClaudeアプリ、claude.ai、ChatGPTはリモートMCPで繋がり、relayの道具を呼んだときに新着と承認依頼が返ります。ただしhookが無いので、こちらから割り込むことはできません。Geminiは未対応です。