この記事で解決できること
- 複数のAIエージェントが同一リポジトリへ並走して書き込む構成で起きる問題の整理
- push衝突・記事の二重生成・旧CTA混入の共通の根因(書き込みパスの複数化)の理解
- 「並走OK」と「一本化すべき」の判断軸
環境
- masatoman.net(Next.js 16 + MDX + Vercel)
- Claude Code(CLAUDE.md / Skills / 定期実行)
- content-executor(Supabase + GitHub Actions)、Cowork(複数のAIエージェント)
- 発生日: 2026-06-23(dev_journal severity=high)
何が起きたか
masatoman.netへの記事公開ルートは、設計上はcontent-executor一本のつもりだった。ところが実際には以下が並走していた:
| エージェント | 実行タイミング | 書き込み先 |
|---|---|---|
| content-executor | 毎日02:00 JST | masatoman.net main |
| Cowork aff-writer | 毎日14:00 | masatoman.net main |
| Cowork aff-engineer | 月・水・金 | masatoman.net main |
| Cowork night-publisher | 毎晩 | 外部媒体 + main |
表面に出た症状:
-
push衝突: content-executorとaff-writerが同タイミングで
git pushを試み、一方がrejectされる - 記事の二重生成: 同テーマで似た記事が別エージェントにより別slugで生成される
- 旧CTA混入: 2026-06-07以前のKOBO CTAテンプレートをaff-crewが参照し続ける
原因
根因は一つ:同一リポジトリへの書き込みパスが複数あったこと。
各エージェントは自分の役割を正しく実行していた。問題は2つの設計が同じ出力先(mainブランチ)に向いていたことだ。さらに、各エージェントが参照するコンテキスト(CLAUDE.md、CTAテンプレート)の更新タイミングが異なり、新コンセプト(2026-06-07更新)との不整合を引き起こした。
判断軸:並走OK vs 一本化すべき
| 条件 | 並走OK | 一本化すべき |
|---|---|---|
| 出力先 | 別リポジトリ・別ファイル | 同一ブランチに書き込む |
| コンテキスト参照 | 各自が最新を動的に読む | 古いキャッシュを参照し続ける |
| 役割の重複 | ゼロ重複・明確に補完 | 同じことをタイミングをずらしてやっている |
| 症状 | 問題なし | 重複・衝突・不整合が出始めた |
対処した内容
- Cowork aff-crew(aff-writer/aff-engineer/night-publisher)を全停止
- content-executor 1本に書き込みルートを集約
- Step5(外部媒体へのadapt)は
docs/adapt-spec-{媒体}.mdを動的に読む方式に変更 - note自動公開を廃止(物語型のみ・手動確認後に公開)
棚卸しのやり方(3ステップ)
- 「何が・いつ・どこへ書き込むか」を表にする(全エージェントとGitHub Actionsを対象に)
- 同一リポジトリへの書き込みパスが2本以上あれば統合を検討
- 「停止中」のエージェントも含めて一覧化する(設定が残ったまま再起動で復活するケースがある)
AI ツールを業務に組み込む設計の実験ログを書いています。 https://masatoman.net