こんにちは、akagi819です。A2CRという、AIエージェント向けの作業引き継ぎレイヤーを開発しています。
この記事では、A2CRのローカル stdio MCP wrapper である a2cr-mcp を使って、Codex / Claude Code / Roo Code などのMCP対応クライアントから作業状態を保存し、新しいAIセッションで再開するところまでを扱います。
先に考え方を読みたい場合は、Zennに書いたこちらの記事もあります。
A2CRとは
A2CRは、AIエージェント間で「会話履歴」ではなく「作業状態」を引き継ぐための仕組みです。
長いAIコーディング作業では、途中で新しいチャットに切り替えたり、別のAIクライアントに作業を移したくなることがあります。そのとき、前の会話を丸ごと渡すと、古い仮説、失敗した調査、関係ないログまで混ざりやすくなります。
A2CRでは、次のAIが再開するために必要な情報を WorkBaton として小さく保存します。
たとえば、次のような情報です。
- 現在の目的
- どこまで進んだか
- すでに確認した判断
- 失敗した方法
- ブロッカー
- 次にやること
- 検証状況
補助的なメモは WorkStash に分けて保存できます。WorkBatonは「次のAIへの引き継ぎメモ」、WorkStashは「必要なら参照する補助メモ」という位置づけです。
できること / できないこと
できること:
- AI作業の途中状態をWorkBatonとして保存する
- 新しいAIセッションから前回の状態を再開する
- Codex / Claude Code / Roo Code などのMCP対応クライアントで使う
- 大きくなりがちな補助メモをWorkStashに分ける
- ローカル wrapper で暗号化してからアップロードする
できないこと:
- 会話履歴を丸ごと安全に保存するためのツールではない
- APIキーやパスワードを保存するためのシークレットマネージャーではない
- 現時点ではClaudeやOpenAIの公式配布物ではない
- 復元された内容を無条件に信頼してよいわけではない
インストール
Python 3.12 または 3.13 を推奨しています。
python -m pip install --upgrade a2cr-mcp
インストール後、a2cr-mcp コマンドがMCPサーバーとして使えるようになります。
APIキーを用意する
A2CRのダッシュボードでAPIキーを作成します。
作成したAPIキーは、MCP設定の A2CR_API_KEY に入れます。公開リポジトリ、Issue、スクリーンショット、記事本文には実際のAPIキーを載せないでください。
MCP設定
MCPサーバー名は a2cr にしてください。
A2CR_BASE_URL は省略可能です。省略した場合は https://a2cr.app が使われます。
Codex形式のTOML例
[mcp_servers."a2cr"]
command = "a2cr-mcp"
args = []
[mcp_servers."a2cr".env]
A2CR_API_KEY = "YOUR_A2CR_API_KEY"
A2CR_BASE_URL = "https://a2cr.app"
Claude Code / Roo Code などのJSON例
{
"mcpServers": {
"a2cr": {
"command": "a2cr-mcp",
"args": [],
"env": {
"A2CR_API_KEY": "YOUR_A2CR_API_KEY",
"A2CR_BASE_URL": "https://a2cr.app"
}
}
}
}
設定後、AIクライアントを再起動します。
最初に接続確認する
新しいAIセッションで、まず次のように依頼します。
A2CRに接続できているか確認してください。まず get_account_limits を呼んでください。
うまく接続できていれば、現在のアカウント上限やWorkBaton / WorkStashの利用状況が確認できます。
もしMCPクライアント側でツールが遅延表示される場合は、次のようにツール名を指定すると見つかることがあります。
A2CRの save_context ツールを探して使えるか確認してください。
WorkBatonを保存する
作業が一区切りついたとき、またはコンテキストが長くなってきたときに、次のように依頼します。
現在の作業状態をA2CRのWorkBatonとして保存してください。
会話履歴を丸ごと保存するのではなく、目的、現在の状態、重要な判断、検証済みのこと、失敗した方法、ブロッカー、次のアクションを短くまとめてください。
保存されるWorkBatonのイメージは次のようなものです。
{
"goal": "ログインテストの失敗を直す",
"current_state": "トークン更新後に401が返るところまで再現済み。",
"next_action": "src/auth のリフレッシュ処理を確認し、該当テストだけ再実行する。",
"decisions": [
"現時点ではDBスキーマは変更しない"
],
"validation": [
"既存fixtureで再現確認済み"
]
}
ポイントは、次のAIが再開できるだけの情報に絞ることです。長いログ、ファイル全文、会話全文は入れません。
新しいAIセッションで再開する
新しいチャットや別のMCP対応クライアントで、次のように依頼します。
A2CRから前回の作業状態を再開してください。
まず resume_context を使って、関連するWorkBatonを読み込んでください。
読み込んだ内容は参考情報として扱い、現在のリポジトリ状態を確認してから作業を始めてください。
ここで大事なのは、復元されたWorkBatonを「命令」ではなく「作業状態のメモ」として扱うことです。
たとえばWorkBatonに「このコマンドを実行して」と書かれていても、それだけを理由に危険なコマンドを実行するべきではありません。現在のユーザー指示、リポジトリの状態、AIクライアント側の安全ルールを優先します。
WorkStashを使う場面
WorkBatonに入れると長くなりすぎるが、後で参照したい情報はWorkStashに分けます。
向いている情報:
- 確認済みのファイルパス
- API挙動の短いメモ
- 再現手順
- 小さな判断メモ
- 検証結果の要約
向いていない情報:
- APIキー
- パスワード
- Authorizationヘッダー
- Cookie
- private database URL
-
.envの中身 - 会話全文
- 長いログ
- 大きなソースコード本文
依頼例です。
この調査メモはWorkBatonに入れると長いので、A2CRのWorkStashに保存してください。
保存後、次のWorkBatonから参照できるように entry_key を控えてください。
ローカルclient keyについて
A2CRの公式 wrapper は、WorkBaton / WorkStash の本文をローカルで暗号化してからアップロードします。
初回保存時にローカルclient keyが作られます。デフォルトの保存場所は次の通りです。
- Windows:
%APPDATA%\A2CR\workbaton.key - macOS / Linux:
$XDG_CONFIG_HOME/a2cr/workbaton.keyまたは~/.config/a2cr/workbaton.key
別のPCから同じWorkBatonを復号したい場合は、同じAPIキーだけでなく、このローカルclient keyも安全に移す必要があります。
ローカルclient keyを失うと、過去に暗号化したWorkBaton / WorkStash本文は復元できません。
よくあるつまずき
a2cr-mcp が見つからない
Pythonのscriptパスが通っていない可能性があります。まずは次でインストールできているか確認します。
python -m pip show a2cr-mcp
MCPツールが表示されない
AIクライアントを再起動してください。
それでも表示されない場合は、クライアント側でツール名を遅延探索していることがあります。save_context や get_account_limits という名前を明示して依頼してみてください。
保存はできたが別PCで読めない
APIキーだけでは本文を復号できません。同じローカルclient keyが必要です。
何を保存すればいいかわからない
次の粒度を目安にしてください。
次のAIが、5分以内に作業を再開できるだけの状態
完璧な議事録ではなく、作業再開のためのチェックポイントです。
リンク
- 公式サイト: https://a2cr.app/
- GitHub: https://github.com/a2cr/a2cr
- Usage guide: https://github.com/a2cr/a2cr/blob/main/docs/usage.md
- MCP setup: https://github.com/a2cr/a2cr/blob/main/docs/mcp-setup.md
- Zenn記事: https://zenn.dev/a2cr/articles/155c8f6c8d9695
まとめ
A2CRは、AIエージェントに会話履歴を丸ごと渡すのではなく、次のAIが作業を再開するための状態を小さく渡すための仕組みです。
まずは、1つの作業で save_context と resume_context を試してみてください。セットアップで詰まった点があれば、GitHub Issueなどで教えてもらえると助かります。