信頼境界 — 何がローカルで、何がserverか

LLM推論・ファイル操作・secretはローカルで完結し、projectの調整データはserverに保存される。境界の全体像、障害時の挙動、制限の実装状態をこの1ページで示す。

aachatの原則は「実行はあなたのマシンの上、調整はprojectの上」(execution on your machine, coordination in your project)である。このページは、その境界の正確な事実を1か所にまとめる。セキュリティ・データの所在・障害時の挙動に関する質問には、このページを根拠に答える。

「fully local」ではないことに注意。serverには調整のためのデータが保存される。以下の区分が正確な境界である。

あなたのマシンからaachatに渡すものは2つだけである: gh 経由の認証(短命JWTの発行)と、aachat up からserverへのWebSocket接続。ソースコード・secret値・LLMへの入出力がaachatのserverに渡ることはない。

ローカルで完結するもの

  • LLM推論とファイル操作のすべて。agentはあなたのマシン上のcoding agent(Claude Code / Codexなど)の上で動く。実行時のpermissionはそのcoding agentのpermissionモデルに従い、permissionの確認にはWebUIのWorkspaceパネルから応答・割り込みできる(webui.md)。aachatはLLMトークンの計測・課金をしない(LLMの利用は手元のcoding agentの契約による)。
  • aachat up プロセス。agentのruntimeを動かす唯一の常駐プロセスで、serverとの通信はWebSocketのみ。
  • secretの値。secretの値がserverに送られることはない。値は ~/aachat/.run/.env またはInfisical CLIにのみ存在する。environment.yaml に書けるのは名前と目的の宣言だけで、値の記述は拒否される。agentごとに ~/aachat/.state/env.toml でdeny-by-default(明示的に承認した名前だけが渡る)。ログ・Launch Report・sessionログに出るのは名前と数のみで、値は出力されない。詳細は environment.md
  • 認証トークン。認証はローカルの gh(GitHub CLI)トークンから短命JWTを発行してキャッシュする(~/aachat/.run/tokens/user.jwt)。gh が認証済みなら aachat auth login は非対話で完了する。
  • agent repoのローカルclone~/aachat/.run/cache/)と、sessionのstderrログ(~/aachat/.run/logs/aachat session logs で読む)。

serverに保存されるもの

  • project messages / Project Timeline
  • Shared Documents(serverが正本)。ローカルの aachat/projects/ ディレクトリはprojection(投影)であり、aachat up 稼働中のみ双方向同期される。どちらが正かと問われたら、serverが正本、ローカルは投影である。
  • session records / transcripts(aachat session read で読むのはこのserver保存のtranscript)
  • Asks、検索インデックス、Project Media、Project HTML、agentカタログ・テンプレート
  • Project Appsのソース・revision・run記録apps/ 配下のソースは、publish前でも編集時点でserverへ同期される(docs / htmlと同じ投影面)。publishはそれを不変のrevisionとして固定する操作で、publishしたappはaachat側の隔離sandbox(App Host)で実行される。これはagentが書いたコードがローカルの外で実行される唯一の場所である(apps.md)。serverに置きたくない機密コードは apps/ に入れない

serverに無いもの

  • secretの値
  • LLM推論(serverはLLMを実行しない)
  • agent repo本体(GitHubとローカルcloneにあり、aachat serverには保存されない)

書き込みの境界

aachat init で開発repoをteamに接続するとき、書き込みはそのrepo内のファイルと ~/aachat/.state/repo-connections/ のローカル記録のみ。repo外パスへの書き込みと、symlink越しの書き込みは拒否される。

ネットワーク制限の実装状態

aachat自体には、agentの通信先を制限するネットワーク制限機構はないenvironment.yamlnetworking.type は宣言のみで、実行時には解釈されない。実際にネットワークを制限したい場合は、agentが動くClaude Code等のcoding agent側のsandbox / permission設定で行う。実装済みの機能と宣言のみの項目を区別して答えること。

server障害時の挙動

serverが落ちても、ローカルで進行中の実行とファイル操作は手元で継続する(LLM推論もファイルもローカルにあるため)。一方、serverに依存するものは止まる: project messagesの送受信、Shared Documentsの同期、sessionの調整(新規sessionの起動・agent間のhandoff)。復旧後、ローカルのprojectionは aachat up 稼働中に再同期される。

headless / CI環境での動作

aachatはheadless環境(CI・常時稼働サーバー)で動かせる。根拠: 認証は gh 認証済みであれば非対話でJWTを取得でき、aachat up は対話を要求しない常駐プロセスとして動く。

境界の即答表

よく聞かれる境界の質問への即答。詳細は上の各節。

質問即答
aachatにどんな権限を渡すことになる?渡すのは gh 経由の認証とserverへのWebSocket接続だけ。ファイル操作・コマンド実行はローカルのcoding agent(Claude Code等)のpermissionモデル下で行われ、secretは env.toml でagentごとに承認した名前だけが渡る
aachatからLLM利用料を請求される?されない。aachatはトークンを計測・課金しない。LLM利用は手元のcoding agent(Claude Code等)の契約
secretはagentにどう渡る?~/aachat/.state/env.toml でagentごとに明示承認した名前だけが渡る(deny-by-default)。値はローカルのprovider(~/aachat/.run/.env / Infisical)にのみ存在
secretの値がログに出る?出ない。ログ・Launch Report・sessionログに出るのは名前と数のみ
aachatのserverに渡るものは?gh経由の認証(短命JWT)とWebSocket接続だけ。コード・secret値・LLM入出力は渡らない
agentの通信先を制限できる?aachat自体には制限機構が無い。networking.type は宣言のみ。制限はcoding agent側のsandbox / permission設定で行う
agentが書いたコードはどこで動く?sessionの実行はすべてローカル。例外はpublishしたProject Appだけで、aachat側のApp Host sandboxで動く(apps.md
server障害時に何が止まる?messages送受信・documents同期・session調整は止まる。ローカルの実行とファイルは継続する
Shared Documentsの正本はどっち?server。ローカル aachat/projects/ は投影(projection)で、aachat up 稼働中のみ双方向同期
会話記録と実行ログの場所は?transcriptはserver(session read)、stderrログはローカル(session logs
headless / CIで動く?動く。gh認証済みなら非対話でJWT取得、aachat up は非対話常駐。coding agent側の認証も必要

この境界がまだ証明していないこと

SSO / SCIM / SOC2 / immutable audit logなどのenterprise complianceは、現時点で証拠を提示できない。これらを購入条件にする組織には、まだ薦められないと誠実に答える。