もくじを開く1.5信頼境界

PART 1始める・理解する1.5

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

local agent runtime、Project HTML viewer browser、aachat serverについて、実行場所、保存データ、secret、通信、Session間の入力、障害時の境界をこの1ページで示す。

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

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

層実行と保存
local agent runtimeClaude Code / Codexとファイル操作、LLM providerとの生の推論通信、session environment secret、workspace repo
Project HTML viewer browserprojectのhtml/にあるJavaScriptが、memberまたはpublic shareを開いた各viewerのbrowserで実行される
aachat serverProjectの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/と、Project Databaseへの操作
  • session environment secretの値は選択したComputerのlogin Keychainまたは.envにあり、.state/env.tomlでAgentごとにその保存先へbindingした宣言済み名だけがSessionへ渡る(Environment)
  • agent repo本体はGitHubとlocal cloneにあり、aachat serverには保存されない。例外として、Discoverの公開準備では、レビュー対象に選ばれたファイルの変更前と公開用の本文が非公開レビュー用に保存される(下記)。aachat upのlog(~/aachat/.run/logs/up.log)とsessionのstderr logもlocalの~/aachat/.run/logs/にある
  • CLIのuser JWTは~/aachat/.run/tokens/user.jwtにある。macOS Desktop 1.0のガイドは通常のCLIを操作してaachatを準備・起動し、CLIが同じファイルを使って認証やruntime状態を判定する。アプリ自身が扱う認証はガイドのランタイム(Claude Code / Codex)のサインインだけ(Desktop)

Session間の入力の境界

aachatのSessionへの入力は、aachatの経路(Project message、委任、chat session sendなど)で届き、SessionのProject coverageに従って扱われる。

Claude runtimeでは、aachatが各agent workspaceの.claude/settings.local.jsonに"crossSessionInbound": "refuse"を固定する。既存の値は上書きされ、user設定のacceptでも緩められない。そのため、同じマシン・同じOS userで動く別のClaude Code sessionから、aachat Sessionへturnを直接差し込むことはできない。Session内でsubagentへ送るSendMessageはこの制限の対象外である。

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

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

  • project messages、Project Chat、Asks、検索index、membershipとrole
  • Shared Documents。serverが正本で、localのaachat/teams/<team>/projects/<project>/はaachat up稼働中に同期されるprojectionである。Sessionのworktreeでは、aachat upのdaemonではなくそのSession自身のmirrorが投影ファイルを同期する。投影ファイルを通常どおり削除するとserverの文書も削除される(衝突中のファイルの削除・移動を除く。Shared Documents)
  • session recordとtranscript。user / agentの発言、reasoning・tool-callの表示用表現、実行configやusageを含むsession eventがserverへ永続化される。LLM providerとの生の通信自体がserverを経由する、という意味ではない
  • live表示。Session paneを開いている間、進行中の発言とtool-callの要約がserver経由でbrowserへ流れる
  • Project Media、Project HTMLのsourceと配信用snapshot
  • agent catalog、skills / Skill Ledger、templates、Company model(Concept / Entity)
  • Webhook Triggerの設定とsecret hash(Triggers)
  • 公開準備の非公開レビュー。Discoverの公開準備でレビューに表示する変更前(source)と公開用の本文は、所有者ごとの非公開領域に保存される。公開対象から除外したファイルはパスと理由だけを表示し、レビュー用にも本文をuploadしない。GitHubの公開repositoryへの書き込みとDiscoverへの掲載は、この内容で公開する を押したときだけ行われる
  • 運用上の失敗の診断。CLIとruntimeは、Session / Project ID、command、error category、所要時間などの識別子・分類だけをaachatのエラー監視へ送る。会話本文、request / response body、Team / Project / userの名前、email、IPは含めない

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

Toolの入力と出力

live表示と、新しく保存するSessionの永久履歴では、Tool呼び出しを要約として扱う。要約に含まれるのは、ID・種類・状態・名前・タイトル・入力と、Toolが触れたファイルのpathである。対応する完了時のTool出力は、local runtimeがUnicode文字で末尾最大2,000文字だけをプレーンテキストとして要約に保持し送信する。この末尾はlive表示と新しい永久履歴の両方に含まれる。raw出力全文と差分本文は保持しない。容量制限による省略もあるため、入力の全文保存も保証しない。会話本文やShared Documents等は引き続き保存対象で、この方針は過去の全履歴や別の保存先の削除を保証しない。後から確認する成果の残し方はSessionsを参照。

secretと外部credential

種類保存場所誰に渡るか
session environment secret選択したComputerのlogin Keychain / .envenv.tomlで名前を承認したlocal agent session
CLIのuser JWTownerの~/aachat/.run/tokens/user.jwtそのマシンのaachat CLIとruntime
Webhook Triggerのsecretserverにはhashだけ外部起動の認証に使う

Tools > Secretsで入力した値はHTTPS/WSSでserverを経由し、本人が選択したHostMirrorへ届く。この操作中はbrowser・server・hostのメモリに値が存在し、serverから値を隠すE2EEではない。保存済み値は照会で返さず、serverの秘密管理recordとして永続化しない。一覧はmetadataだけである。旧設定の名前や保存先をWebUIへ出す前に、人間がterminalで明示採用する。Agent tokenではToolsの秘密管理を行えない。

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

Webhook TriggerのBearer secretは設定したtargetへの外部起動を認証し、serverはsecret hashを保存する。workloadへ注入するsecretとは別で、Triggersで管理する。

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でcamera・microphone・位置情報などのdevice APIを無効化する。CSPはscript-srcとconnect-srcを定義しないため、scriptはbrowserの規則に従って実行・network requestできる。生成HTMLは開く・共有する前に確認し、secretや特権credentialを埋め込まない(HTML)。

メンバープレビューのDatabase APIでは、HTML内のscript(外部scriptを含む)が閲覧者の現在のProject権限で同じProjectのデータを読み書きできる。公開shareではDB操作を許可しない。保存UIや再送制御はHTML作者の責任となる。

Humanメンバー向けのDB操作であり、Agentは本人のrunning Sessionとcurrent coverageを確認する既存Session DB APIを使う。AgentのHTML/Media閲覧は引き続き利用できる。

認証と書き込み

  • CLI認証はlocalのgh tokenを使って短命JWTを発行し、~/aachat/.run/tokens/user.jwtへcacheする。GitHub tokenそのものをprojectへ保存するわけではない
  • 旧macOS Desktop 0.xのGitHubサインインはPKCE付きのOAuthで、ブラウザからaachat://のcallbackでアプリへ戻り、CLIが同じ場所へJWTを保存する。要求するGitHub scopeはread:userとuser:email。Desktop 1.0にはこの経路はなく、ガイドとの会話で通常のCLIの認証を準備する
  • 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永続化、live表示、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からは証明できない。購入条件や削除保証として断定しない

構造化データと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です。WebUIでの期限は7日で、権限を持つ作成者/Adminが共有ガイドの規則に従ってrevokeできます。download済みコピーは回収できません。

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

即答表

質問即答
LLMはどこで動く?localのClaude Code / Codex runtimeが接続するLLM provider。client processはownerのマシン上
sessionの会話はserverへ行く?行く。transcriptとreasoning/tool-callの表示用表現、実行metadataはHTTPS APIでserverへ保存される。対応する完了時のTool出力は末尾最大2,000文字だけをlive表示と新しい永久履歴に含める
通信はWebSocketだけ?いいえ。realtime controlはWebSocket、永続化とproject操作はHTTPS API
secretはすべてlocal?session environment secretとCLIのJWTはlocal。Webhook Triggerのsecret hashはserverに保存される
Shared Documentsの正本は?server。localのaachat/teams/<team>/projects/<project>/はprojection
agentが書いたcodeはどこで動く?session codeはlocal、Project HTMLのJavaScriptは各viewerのbrowser
会話と実行logはどこ?transcriptはserverのsession read、stderrはlocalのsession logs、runtime全体のlogはlocalのup.log
別のClaude Code sessionからaachat Sessionへ入力できる?できない。crossSessionInboundがrefuseに固定される。aachatの経路を使う
server障害時に何が止まる?永続化、同期、live表示、messages、session調整。依存先が利用可能なら、稼働中runtimeのfile操作とproviderへの依頼は継続可能