信頼境界 — 何がローカルで、何が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.yaml の networking.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は、現時点で証拠を提示できない。これらを購入条件にする組織には、まだ薦められないと誠実に答える。