---
title: "信頼境界 — 何がローカルで、何がserverか"
description: "local agent runtime、Project HTML viewer browser、aachat serverについて、実行場所、保存データ、secret、通信、障害時の境界をこの1ページで示す。"
---

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

Agentのプロセスとファイル操作は実行端末で動き、Projectの文書・会話・実行記録はaachat serverで共有・保存します。ただし「fully local」でも「serverはメタデータだけ」でもない。このページを、セキュリティ・データの所在・通信・障害時挙動の正本として使う。

実行と保存の境界は3層に分ける。

| 層 | 実行と保存 |
|---|---|
| **local agent runtime** | Claude Code / Codexとファイル操作、LLM providerとの生の推論通信、session environment secret、workspace repo |
| **Project HTML viewer browser** | projectの`html/`にあるJavaScriptが、memberまたはpublic shareを開いた各viewerのbrowserで実行される |
| **aachat server** | Projectのmessage・実行記録、Shared Documents、session transcript、Project Media / HTML、credentialとaccess control |

## local agent runtime

- coding-agent processとworkspaceのファイル・コマンド操作はownerのマシン上で行う。local runtimeがLLM providerへ接続し、provider側で推論が行われる。permissionはClaude Code / Codexのモデルに従い、WebUIのWorkspaceパネルから許可・拒否・割り込みができる
- LLM providerとの生の推論通信はlocal runtimeから行う。aachatはLLMを実行せず、tokenを計測・課金しない
- 通常のworkspace repoとagent repoの内容は、sessionを動かすためにaachat serverへuploadされない。例外は明示的なproject projectionである`docs/`、`media/`、`html/`
- session environment secretの値はownerの`~/aachat/.run/.env`またはInfisical CLIにあり、`~/aachat/.state/env.toml`でagentごとに承認した名前だけがsessionへ渡る（[Environment](/ja/docs/environment)）
- agent repo本体はGitHubとlocal cloneにあり、aachat serverには保存されない。sessionのstderr logもlocalの`~/aachat/.run/logs/`にある

## aachat serverに送信・保存されるもの

local runtimeはWebSocketだけを使うわけではない。realtimeなruntime controlとdeliveryにはWebSocketを使い、永続化とproject操作にはHTTPS APIを使う。

- project messages、Project Timeline、Asks、検索index、membershipとrole
- **Shared Documents**。serverが正本で、localの`aachat/projects/`は`aachat up`稼働中に同期されるprojectionである
- **session recordとtranscript**。user / agentの発言、reasoning・tool-callの表示用表現、実行configやusageを含むsession eventがserverへ永続化される。LLM providerとの生の通信自体がserverを経由する、という意味ではない
- Project Media、Project HTMLのsourceと配信用snapshot
- agent catalog、skills / Skill Ledger、templates、Company model（Concept / Entity）
- External Session Run credentialの設定とtoken hash。token値は発行時だけ表示される（[External Session Runs](/ja/docs/external-session-runs)）

`aachat init`で接続した通常の開発repo全体がserverへ保存されることはない。serverに置きたくない機密コードはprojectの`html/`、`docs/`、`media/`に入れない。

新しく保存するSessionの永久履歴では、Toolの入力・識別情報・状態などを保持し、Tool出力の本文・raw出力・出力由来の差分は保存しません。容量制限による省略もあるため、入力の全文保存も保証しません。live表示で出力を受け取ることと、永久履歴へ保存することは別です。会話本文やShared Documents等は引き続き保存対象で、この方針は過去の全履歴や別の保存先の削除を保証しません。[後から確認する成果の残し方](/ja/docs/sessions)を参照してください。

## secretと外部credential

| 種類 | 保存場所 | 誰に渡るか |
|---|---|---|
| **session environment secret** | ownerのlocal provider（`.env` / Infisical） | `env.toml`で名前を承認したlocal agent session |

ログへsecret値を意図的に出力しない契約はあるが、local agent codeが受け取った値を外部へ送らないことまで自動保証するものではない。承認するsecretは、実行するcodeと権限境界を確認して最小化する。

これとは別に、External Session RunのBearer API keyがある。値は発行時だけ表示され、serverはtoken hashと固定したagent / mode / repo等の設定を保存する。これはworkloadへ注入するsecretではなく、外部systemが新規sessionを起動するためのcredentialである（[External Session Runs](/ja/docs/external-session-runs)）。

## Project HTML viewer browser

Project HTMLのsourceと配信用snapshotはserverに保存されるが、authoringされたJavaScriptはmemberまたはpublic shareを開いた各viewerのbrowserで実行される。delivery security headerはCSPでframe埋め込み、object、base URL変更、通常form、Workerを拒否し、Permissions-Policyでdevice APIを無効化する。CSPは`script-src`と`connect-src`を定義しないため、scriptはbrowserの規則に従って実行・network requestできる。生成HTMLは開く・共有する前に確認し、secretや特権credentialを埋め込まない（[HTML](/ja/docs/html)）。

## 認証と書き込み

- CLI認証はlocalの`gh` tokenを使って短命JWTを発行し、`~/aachat/.run/tokens/user.jwt`へcacheする。GitHub tokenそのものをprojectへ保存するわけではない
- `aachat init`の書き込みは接続repo内と`~/aachat/.state/repo-connections/`だけ。repo外pathとsymlink越しの書き込みは拒否される
- team default workspace repoを利用する各memberは、自分自身のGitHub credential、repo read/write権限、必要ならorganization SSO承認を持つ必要がある。aachatがrepo accessを付与することはない（[Teams](/ja/docs/teams)）

## server障害時

aachat server障害中も、稼働中のcoding agentはlocalのファイル操作とproviderへの依頼を継続できる。ただしruntime・network・LLM providerが利用可能であることが条件となる。一方、HTTPS API / WebSocketに依存するtranscript永続化、messages、Shared Documents同期、sessionの新規起動・follow-up・handoffは止まる。project projectionは復旧後に`aachat up`稼働中に再同期される。

## 実装されていない保証

- local agent runtimeの通信先をaachatが制限する機構はない。`environment.yaml`の`networking.type`は宣言のみ。必要ならClaude Code / Codex側のsandboxとpermissionで制限する
- SSO / SCIM / SOC2 / immutable audit log、server data全体のretentionと削除保証は、現行公開docsからは証明できない。購入条件や削除保証として断定しない

## 即答表

| 質問 | 即答 |
|---|---|
| LLMはどこで動く？ | localのClaude Code / Codex runtimeが接続するLLM provider。client processはownerのマシン上 |
| sessionの会話はserverへ行く？ | 行く。transcriptとreasoning/tool-callの表示用表現、実行metadataはHTTPS APIでserverへ保存される。新しい永久履歴にはTool出力を保存しない |
| 通信はWebSocketだけ？ | いいえ。realtime controlはWebSocket、永続化とproject操作はHTTPS API |
| secretはすべてlocal？ | session environment secretはlocal。External Session Run credentialは一度だけ発行され、serverにはhashが保存される |
| Shared Documentsの正本は？ | server。localの`aachat/projects/`はprojection |
| agentが書いたcodeはどこで動く？ | session codeはlocal、Project HTMLのJavaScriptは各viewerのbrowser |
| 会話と実行logはどこ？ | transcriptはserverの`session read`、stderrはlocalの`session logs` |
| server障害時に何が止まる？ | 永続化、同期、messages、session調整。依存先が利用可能なら、稼働中runtimeのfile操作とproviderへの依頼は継続可能 |

## 構造化データとpublic access

[Project Database](/ja/docs/database)の行は通常Projectごとのserver管理Cloudflare D1に保存されます。metadataとschema cacheはserver側Postgresにあり、`db/schema.sql`はread-onlyのローカル投影、`db/migrations/`はmigration sourceです。これも明示的なProject data面です。ローカルmigration同期だけではSQLを実行せず、workspace codeの編集だけで自動的にDBへuploadするわけでもありません。coverageにあるrunning Sessionがrole確認付きserver操作を使い、WebUI table browserは読取専用です。

Projectがactiveでなくなると新しいDB操作は止まります。受理済み作業は完了でき、Project削除はquery lease、migration照合、物理DB削除を待ちます。ローカルfileの削除はrollbackでもserver消去の証拠でもありません。

[Public share](/ja/docs/sharing)は意図的にmembershipの境界を越えます。有効なMarkdown tokenを持つ誰もが、その範囲をloginなしで読めます。document tokenは現在の文書と許可されたMedia依存先、Adminが作るcontext tokenはProject記録・文書・Project内Session transcriptを読み、後から追加された内容も対象になります。固定exportではなくlive readです。UIでの期限は7日で、権限を持つ作成者/Adminが共有ガイドの規則に従ってrevokeできます。download済みコピーは回収できません。

Mediaの`/m/<uuid>`は、許可されたshare依存先として別経路で配信される場合を除き、membershipを必要とします。Share HTMLはbuild済み静的面を公開し、JavaScriptは相手のbrowserで動きます。作者のserver credentialやDB権限を与えません。公開前に本文と依存先を確認し、目的に合う最小の共有範囲を選びます。
