信頼境界 — 何がローカルで、何がserverか
local agent runtime、Project HTML viewer browser、aachat serverについて、実行場所、保存データ、secret、通信、障害時の境界をこの1ページで示す。
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) - 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)
aachat initで接続した通常の開発repo全体がserverへ保存されることはない。serverに置きたくない機密コードはprojectのhtml/、docs/、media/に入れない。
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)。
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)。
認証と書き込み
- CLI認証はlocalの
ghtokenを使って短命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)
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へ保存される |
| 通信は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の行は通常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は意図的に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権限を与えません。公開前に本文と依存先を確認し、目的に合う最小の共有範囲を選びます。