From 36ae1a4cba791ec633a81b38b1d8345af8487276 Mon Sep 17 00:00:00 2001 From: tanaka takashi Date: Thu, 13 Aug 2026 19:15:01 +0900 Subject: feat!: unify sandbox configuration and permission application Replace the split executable approval and sandbox resolution workflows with schema_version 2 and a YAML-driven execution.entries model. Resolve workspace, mount, executable, runtime, network, and resource settings into one config-scoped Applied Configuration snapshot protected by a user-only DACL and written with atomic replacement. Reduce the public CLI to implicit server startup, show, and apply. Remove serve/check, executable and sandbox subcommands, and configuration override flags including --config, --lang, --transport, --path, and --runtime-root. Add migration diagnostics for every removed schema and command surface, and keep server preflight mandatory for both stdio and HTTP. Update effective-policy compilation to validate the applied fingerprint, resolved paths, and executable hashes before startup. Preserve fail-closed behavior while allowing execution entries and runtime roots inside a development workspace to inherit that workspace capability without creating an impossible narrower ACL boundary. Rewrite the README around the consolidated permission matrix and document configuration, application, store location, startup, transport-specific elevation, Python 3.14, PowerShell, and cmd usage. Align specifications, design, implementation plan, traceability, audit report, localization, publish scripts, and operational verification with the breaking schema. Verification: Release build completed with zero warnings and errors; Agent.Core.Tests 104/104 and Agent.Planner.Tests 10/10 passed; administrator Windows Security/Recovery 56/56 and README operational 19/19 passed with no skips; published HTTP MCP completed a cmd/curl/venv-Python task with network deny and zero ACL, WFP, journal, backup, or process residue. --- README.md | 377 +++++++++++++++++++------------------------------------------- 1 file changed, 113 insertions(+), 264 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index e4e286b..94e9fb3 100644 --- a/README.md +++ b/README.md @@ -1,366 +1,217 @@ # AI Agent Sandbox MCP Server -Windows上でローカルのOllamaを利用し、AIエージェントのファイル操作とプロセス実行を、利用者が確認した範囲に閉じ込めるMCP Serverです。 +Windows上でOllamaを利用し、AIエージェントのファイル操作とプロセス実行を、利用者がYAMLで指定した範囲へ閉じ込めるMCP Serverです。MCP Clientには`agent_run`と`agent_status`だけを公開します。 -MCP Clientには `agent_run` と `agent_status` だけを公開します。エージェントが内部で行うファイル操作・プロセス実行は、Workspace、Mount、承認済みExecutable、Network、Resourceの設定とWindowsの強制機構によって制限されます。 +## 機能 -## 主な機能 - -- Ollamaモデルによる、計画・コード作成・ファイル編集・コマンド実行の自動化 -- MCPのstdioとStreamable HTTP(stateless)への対応 -- MCP Tasks Extensionによる非同期Taskの取得・キャンセル -- WorkspaceとMountを分けた、読み取り・書き込み・削除・実行の権限設定 -- 実行前に人間が確認するExecutable AliasとSHA-256承認 -- LPAC、NTFS ACL、Job Object、WFPによるSandbox Process Treeの制限 -- 日本語・英語のメッセージ、監査ログ、異常終了後の自動Recovery -- `agent.yaml`と、環境ごとの差分を置ける`agent.local.yaml`のマージ +- 計画、ファイル検索・読取・編集、プロセス実行を伴うAgent Task +- MCP stdio/Streamable HTTP(stateless)とMCP Tasks Extension +- LPAC、NTFS ACL、Job Object、WFPによるSandbox Process Treeの強制 +- Workspace、Mount、Entry Executable、Network、Resourceの一括設定・確認 +- 日本語/英語、監査ログ、異常終了後のRecovery ## 動作環境 | 項目 | 要件 | | --- | --- | | OS | Windows 11 x64 | -| 権限 | 管理者権限のPowerShell。TaskごとのWFP設定に必要です。 | -| Windowsサービス | Base Filtering Engine(BFE)が起動していること | -| LLM | Ollama。Release既定モデルは`deepseek-v4-flash:cloud`です。 | -| MCP Client | stdioまたはStreamable HTTPを利用できるClient | - -Ollamaへの通信はBroker側で行われます。Sandbox内プロセスのNetwork許可とは別に設定されます。 - -## インストール - -Release Bundleを任意のディレクトリへ展開します。以降の例では、展開先を``と表記します。 - -```text -/ - agent-mcp.exe - agent.yaml - prompts/ - skills/ -``` - -`agent.yaml`は配布時の共通設定です。利用者固有の設定は、同じディレクトリに`agent.local.yaml`を作成して記載してください。publishやupgradeは`agent.local.yaml`、`local/`、`logs/`、`state/`、ユーザーごとの承認・確認情報を上書きしません。 - -## 初回セットアップ +| 実行権限 | 管理者権限(WFP操作に必要) | +| Windows Service | Base Filtering Engine(BFE) | +| LLM | Ollama。配布設定の既定モデルは`deepseek-v4-flash:cloud` | +| Client | stdioまたはStreamable HTTP対応MCP Client | -### 1. Ollamaを準備する +Ollamaへの通信はBrokerが行います。Sandbox内プロセスのNetwork設定とは別です。 -Ollamaをインストール後、モデルを取得して起動します。 - -```powershell -ollama pull deepseek-v4-flash:cloud -ollama serve -``` +## 設定 -既にOllama Serviceまたは`ollama serve`が起動している場合、重複して起動する必要はありません。 +`agent.yaml`がbase設定です。同じディレクトリに任意の`agent.local.yaml`があれば自動的に上書きマージします。mapは再帰merge、scalarと配列はlocal側で置換されます。相対pathはbase設定のディレクトリ基準です。 -### 2. ローカル設定を作成する - -`agent.yaml`と同じディレクトリへ`agent.local.yaml`を作成します。最小例は次のとおりです。 +権限の希望状態はYAMLだけに記載します。CLIでExecutableやACLを個別登録する必要はありません。 ```yaml +schema_version: 2 + application: language: ja -agent: - user_system_prompt: local/prompts/user-system.md - -skills: - directory: local/skills - -sandbox: - profile: development - workspaces: - - C:/work/project - mounts: [] - execution: - executables: [python] - shells: [] -``` - -`agent.local.yaml`は、共通設定から変更したい項目だけを書きます。mapは再帰的にマージされ、scalarと配列はlocal側で置換されます。そのため、`workspaces`や`mounts`をlocal側に書く場合は、最終的に必要な要素をすべて列挙してください。 - -相対パスは`agent.yaml`のあるディレクトリを基準に解決されます。マージ後の設定全体に対して検証が行われるため、未知のキーや矛盾した設定は起動前にエラーになります。 +mcp: + transport: http + http: + host: 127.0.0.1 + port: 8080 -### 3. Sandboxの対象を確認する +ollama: + endpoint: http://127.0.0.1:11434 + model: deepseek-v4-flash:cloud -管理者としてPowerShellを起動し、展開先へ移動します。 - -```powershell -cd -.\agent-mcp.exe sandbox resolve --config .\agent.yaml -.\agent-mcp.exe sandbox confirm --config .\agent.yaml -.\agent-mcp.exe sandbox show --format text --config .\agent.yaml -``` - -`resolve`は設定されたパスを実体パスへ解決して表示するだけです。内容を確認した後、`confirm`で確認済み結果をユーザーごとのStoreへ保存します。Workspace、Mount、設定内容またはリンクの解決先が変わると、再確認するまで起動はfail-closedになります。 - -### 4. 使用するExecutableを承認する - -設定したAliasごとに、実行ファイルの候補を確認し、使用する実体を明示して承認します。 - -```powershell -.\agent-mcp.exe executable resolve python --config .\agent.yaml -.\agent-mcp.exe executable approve python ` - --path C:\Python314\python.exe ` - --runtime-root C:\Python314 ` - --config .\agent.yaml -.\agent-mcp.exe executable list --config .\agent.yaml -``` - -承認時にはResolved PathとSHA-256が保存されます。実行ファイルのパスまたはハッシュが変わった場合は、自動では更新されず、再承認が必要です。 - -最後に起動前診断を実行します。 - -```powershell -.\agent-mcp.exe check --config .\agent.yaml --lang ja -``` - -## Sandbox設定 - -`schema_version: 1`の設定では、Sandboxを利用者が理解できる単位で指定します。未指定の権限は許可されません。 - -```yaml sandbox: profile: development - workspaces: - - C:/work/project - + - C:/tmp mounts: - path: C:/data/reference access: read_only - execution: - executables: [python, git] - shells: [powershell] - + entries: + - alias: python + path: C:/tmp/.venv/Scripts/python.exe + runtime_root: C:/Users/example/AppData/Roaming/uv/python/cpython-3.14-windows-x86_64-none + - alias: powershell + path: C:/Program Files/PowerShell/7/pwsh.exe + - alias: cmd + path: C:/Windows/System32/cmd.exe network: access: local local_endpoints: - port: 11434 restricted_endpoints: [] - resources: profile: normal - # memory_mb: 4096 - # process_limit: 16 - # execution_timeout_seconds: 1800 ``` -### WorkspaceとMount +実環境用path、Prompt、Skillは`agent.local.yaml`から指定できます。publish/upgradeは`agent.local.yaml`、`local/`、`logs/`、`state/`、適用済み設定Storeを上書きしません。 -| 設定 | 用途 | 実行 | -| --- | --- | --- | -| `workspaces` | エージェントが作業するプロジェクト領域 | `development`ではWorkspace内の成果物をEntry Processとして実行できます。 | -| `mounts` | 参照データや追加の入出力領域 | Mount上のExecutableは直接起動できません。 | +### 権限マトリックス -`profile`には次を指定します。 +| YAML項目 | `readonly` | `development` | Entry Processとして起動 | +| --- | --- | --- | --- | +| `workspaces` | read | read/write/delete/execute | developmentのWorkspace Artifactのみ可 | +| `mounts: read_only` | read | read | 不可 | +| `mounts: read_write` | 設定不可 | read/write | 不可 | +| `mounts: read_write_delete` | 設定不可 | read/write/delete | 不可 | +| `execution.entries` | file read/execute | file read/execute | Alias、Resolved Path、SHA-256一致時に可 | +| `runtime_root` | read/execute | read/execute | Runtime Componentは子孫として利用可 | +| Resolved System32 | read/execute | read/execute | 未登録System32 Executableの直接Entry起動は不可 | -| Profile | Workspaceの権限 | Workspace ArtifactのEntry実行 | -| --- | --- | --- | -| `readonly` | read | 不可 | -| `development` | read / write / delete | 可 | +Entry Processの子孫には個別のExecutable登録を要求しません。同じLPAC identity、ACL、WFP、Job Objectを継承し、Process Tree全体が同じ制限内に残ります。 -Mountの`access`には`read_only`、`read_write`、`read_write_delete`を指定します。`readonly` Profileでは`read_only`だけが使用できます。 +### Network -### ExecutableとShell +| `access` | 動作 | +| --- | --- | +| `none` | localhostを含む全通信を拒否 | +| `local` | `local_endpoints`のportについて`127.0.0.1`と`::1`のみ許可 | +| `restricted` | `restricted_endpoints`のhost/portをTask開始時にIPへ固定して許可 | -`execution.executables`と`execution.shells`には、実行を許可したいAliasを記載します。Aliasを設定しただけでは実行できず、前節の`executable approve`で実体パスとハッシュを承認する必要があります。 +### Resource profile -- Executable: 例 `python`、`git` -- Shell: `cmd.exe`、`powershell.exe`、`pwsh.exe`に対応するAlias +| Profile | メモリ | Process数 | timeout | +| --- | ---: | ---: | ---: | +| constrained | 1024 MiB | 4 | 300秒 | +| normal | 4096 MiB | 16 | 1800秒 | +| extended | 8192 MiB | 32 | 3600秒 | -承認は最初にBrokerが直接起動するEntry Processにだけ適用されます。Entry Processから生成される子孫Processには個別承認を要求しませんが、同じLPAC、ACL、WFP、Job Objectの制限を継承します。未知の外部ExecutableやMount上のExecutableは、Brokerから直接起動できません。 +`memory_mb`、`process_limit`、`execution_timeout_seconds`は正数で個別上書きできます。 -#### cmd.exeを有効にする例 +## 初回適用と起動 -`agent.local.yaml`のShell一覧へAliasを追加します。配列はlocal側で置換されるため、ほかのShellも使う場合はすべて列挙してください。 +管理者PowerShellで展開先へ移動します。まずYAMLから計算された権限マトリックスを確認します。 -```yaml -sandbox: - profile: development - workspaces: - - C:/tmp - execution: - executables: - - python - shells: - - cmd +```powershell +.\agent-mcp.exe show .\agent.yaml ``` -管理者として起動したPowerShellで、cmdの実体を確認して承認します。cmdはWindowsのOS Runtime Rootを利用するため、追加Runtime Rootを登録しない`--no-runtime`を指定します。 +内容が正しければ設定全体を一度だけ適用します。Workspace/Mountの解決先、Executableの解決先とSHA-256、設定fingerprintが一つのスナップショットとして保存されます。 ```powershell -cd -.\agent-mcp.exe executable resolve cmd ` - --path C:\Windows\System32\cmd.exe ` - --config .\agent.yaml -.\agent-mcp.exe executable approve cmd ` - --path C:\Windows\System32\cmd.exe ` - --no-runtime ` - --config .\agent.yaml -.\agent-mcp.exe executable list --config .\agent.yaml -.\agent-mcp.exe check --config .\agent.yaml --lang ja +.\agent-mcp.exe apply .\agent.yaml ``` -非対話で承認する場合だけ`approve`へ`--yes`を付けます。この操作はAuditへ記録されます。 - -cmdから子Processを呼ぶ場合は、`cmd.exe`、`curl.exe`、`.venv\Scripts\python.exe`のようにPATHで解決できる名前またはWorkspace相対パスを使います。`%ComSpec%`や`%SystemRoot%\System32\curl.exe`のようなドライブ修飾絶対パスは、cmd自身が事前にvolume情報へアクセスするため、LPACではOSに拒否されることがあります。これは子Process生成の禁止ではありません。 +CIなど対話入力がない場合だけ`--yes`を使用します。 -### Network +```powershell +.\agent-mcp.exe apply .\agent.yaml --yes +``` -| `access` | 許可内容 | -| --- | --- | -| `none` | localhostを含むすべてのネットワーク通信を拒否します。 | -| `local` | `local_endpoints`に列挙したportへの`127.0.0.1`および`::1`だけを許可します。 | -| `restricted` | `restricted_endpoints`に列挙したhost/portをTask開始時にIPへ固定して許可します。 | +起動にはcommand名がありません。transport、languageなどはすべてYAMLから読みます。 -空のendpoint設定やmodeと矛盾する設定は拒否されます。 +```powershell +.\agent-mcp.exe .\agent.yaml +``` -### Resource +設定pathを省略すると、実行ファイルと同じディレクトリの`agent.yaml`を使います。 -`resources.profile`の既定値は以下です。個別の正数指定で上書きできます。 +```powershell +.\agent-mcp.exe +``` -| Profile | メモリ | Process数 | 実行時間 | -| --- | ---: | ---: | ---: | -| `constrained` | 1024 MiB | 4 | 300秒 | -| `normal` | 4096 MiB | 16 | 1800秒 | -| `extended` | 8192 MiB | 32 | 3600秒 | +YAML、解決先、Executable hashのいずれかが変化すると起動はfail-closedになります。`show`で差分を確認してから`apply`し直してください。YAMLからEntryを削除して再適用すると、その権限も同じスナップショットから削除されます。 ## CLIリファレンス -すべてのCLI commandは`agent-mcp.exe`から実行します。`serve`と`check`では`--config`を省略でき、その場合は実行ファイルと同じディレクトリの`agent.yaml`を使用します。`executable`および`sandbox`の管理commandでは`--config`が必須です。 +| 構文 | 引数/option | 変更 | 用途 | +| --- | --- | --- | --- | +| `agent-mcp []` | 任意の設定path | Task中の一時Sandbox Resourceのみ | 設定を検証し、管理者権限・BFE・WFPをpreflightしてServer起動 | +| `agent-mcp show []` | 任意の設定path | なし | 現在の希望状態、Resolved Path、hash、適用一致状態を表示 | +| `agent-mcp apply [] [--yes]` | 任意の設定path、任意の`--yes` | Applied Configuration Storeをatomic置換 | マトリックスを一括確認して適用 | -| Command | 必須の位置引数 | 使用できるoption | 用途 | 設定・Storeの変更 | -| --- | --- | --- | --- | --- | -| `[serve]` | なし | `--config `、`--lang `、`--transport ` | MCP Serverを起動します。commandを省略した場合、または最初の引数がoptionの場合も`serve`として扱います。 | なし。ただしTask実行中には一時的なSandbox Resourceを適用します。 | -| `check` | なし | `--config `、`--lang ` | 設定、Resolution、Approval、管理者権限、BFE、WFP操作を診断します。 | なし | -| `executable resolve` | `` | `--path `、`--config `、`--lang ` | Aliasに対応するPATH候補、または指定pathを解決して表示します。 | なし | -| `executable approve` | `` | `--path `、`--runtime-root `または`--no-runtime`、`--yes`、`--config `、`--lang ` | ExecutableまたはShellの実体パスとSHA-256を承認します。 | Approval Storeを更新 | -| `executable list` | なし | `--config `、`--lang ` | 承認済みExecutableを一覧表示します。 | なし | -| `executable revoke` | `` | `--yes`、`--config `、`--lang ` | AliasのExecutable Approvalを取り消します。 | Approval Storeを更新 | -| `sandbox resolve` | なし | `--config `、`--lang ` | WorkspaceとMountのLogical Pathを実体パスへ解決し、確認候補を表示します。 | なし | -| `sandbox confirm` | なし | `--yes`、`--config `、`--lang ` | 現在のSandbox Environment Resolutionを確認済みとして保存します。 | Resolution Storeを更新 | -| `sandbox show` | なし | `--format `、`--config `、`--lang ` | 現在のResolution、確認状態、Effective Sandbox Policyを表示します。 | なし | +`serve`、`check`、`executable ...`、`sandbox ...`はschema v2で廃止されました。`--config`、`--lang`、`--transport`、`--path`、`--runtime-root`、`--no-runtime`、`--format`も廃止されています。値はYAMLへ書き、設定pathだけを位置引数で渡します。 -### 引数とoptionの意味 +## Applied Configuration Store -| 引数・option | 値 | 説明 | -| --- | --- | --- | -| `` | 設定したAlias名 | `sandbox.execution.executables`または`sandbox.execution.shells`に宣言した名前です。Alias自体は承認を意味しません。 | -| `--config ` | YAMLファイルのpath | base設定ファイルを指定します。同じディレクトリの`agent.local.yaml`は自動的にマージされます。 | -| `--lang ` | 例: `ja`、`en` | CLIおよび起動時の利用者向けメッセージの言語を、その実行に限って上書きします。 | -| `--transport ` | `stdio`または`http` | `serve`時だけ使用できます。設定ファイルの`mcp.transport`をその起動に限って上書きします。 | -| `--path ` | Executable fileのpath | `executable resolve`では候補検索対象、`executable approve`では承認対象を明示します。候補が曖昧な場合は必須です。 | -| `--runtime-root ` | Runtime directoryのpath | 承認するEntry ExecutableのRuntime Rootを明示します。存在するディレクトリでなければなりません。 | -| `--no-runtime` | 値なし | Runtime Rootを登録しないことを明示します。`executable approve`では`--runtime-root`とのどちらか一方が必要です。 | -| `--yes` | 値なし | `approve`、`revoke`、`confirm`の対話確認を省略します。非対話操作としてAudit Logに記録されます。 | -| `--format ` | `text`または`json` | `sandbox show`の出力形式です。既定値は`text`です。 | +適用済みスナップショットはYAMLではなく、起動ユーザー専用DACLを持つ次の場所に保存されます。 -`resolve`、`list`、`show`、`check`はread-onlyです。`approve`、`revoke`、`confirm`は差分表示後に確認を求めます。標準入力が対話的でない場合は、内容を確認したうえで明示的に`--yes`を指定してください。 - -## 起動と接続 +```text +%LOCALAPPDATA%\AgentSandboxMcp\applied-configurations\.json +``` -`serve`は起動前に管理者権限、BFE、WFP、設定、Resolution、Executable Approvalを検査します。いずれかが失敗すると待受を開始せず、エラーと対処方法を表示します。 +YAMLは希望状態、Storeは利用者が確認した実体path・hashを含む適用状態です。`apply`は設定全体をatomic replaceするため、個別承認と個別confirmの不整合は発生しません。`show`はread-onlyで、ACLやWFPを変更しません。 -### stdio +## MCP Client設定 -stdioを使う場合は、MCP Client自体を管理者権限で起動してください。 +stdioではMCP ClientがServerを起動するため、MCP Clientを管理者権限で起動します。 ```json { "mcpServers": { "agent-sandbox": { "command": "C:\\tools\\agent-sandbox-mcp\\agent-mcp.exe", - "args": [ - "serve", - "--config", "C:\\tools\\agent-sandbox-mcp\\agent.yaml", - "--lang", "ja", - "--transport", "stdio" - ] + "args": ["C:\\tools\\agent-sandbox-mcp\\agent.yaml"] } } } ``` -### Streamable HTTP - -管理者PowerShellでServerを起動します。 - -```powershell -.\agent-mcp.exe serve --config .\agent.yaml --lang ja --transport http -``` - -既定endpointは`http://127.0.0.1:8080/mcp`です。bind先には`127.0.0.1`または`::1`だけを設定できます。HTTPはstatelessであり、`Mcp-Session-Id`や旧SSE endpoint(`/sse`、`/message`)は使用しません。 - -`serve`は既定commandなので、次も同じです。 - -```powershell -.\agent-mcp.exe --config .\agent.yaml -``` - -## MCPでの利用 +HTTPではagent-mcp.exeを管理者権限で起動しますが、接続するMCP Clientの管理者権限は不要です。既定endpointは`http://127.0.0.1:8080/mcp`です。 -公開されるMCP Toolは次の2つです。 +## MCP Tool | Tool | 用途 | | --- | --- | -| `agent_run` | 自然言語の依頼を新規または既存のAgent Sessionへ登録します。非同期でTask IDとSession IDを返します。 | -| `agent_status` | Taskの状態、進捗、token実績、最終結果または利用者向けエラーを取得します。 | - -例えば、`agent_run`には「Workspace内にPythonプログラムとテストを作成し、実行して検証して」のような依頼を渡します。複数Taskは受付順にqueuedとなり、planning/runningとSandbox Resourceの適用は一度に1件だけです。 - -Tasks Extension対応Clientでは、`agent_run`の結果をMCP Taskとして受け取り、`tasks/get`と`tasks/cancel`で追跡できます。非対応Clientでは、返された`task_id`を指定して`agent_status`を呼び出します。 +| `agent_run` | 自然言語の依頼をAgent Taskとして登録 | +| `agent_status` | 状態、進捗、token実績、結果またはエラーを取得 | ## PromptとSkill -System Promptは`agent.user_system_prompt`、Skill directoryは`skills.directory`で指定します。Skillは次の形式で配置します。 - -```text -skills/ - / - SKILL.md -``` - -SkillはLLMに与える補助指示であり、Sandboxの権限を増やしません。Skillの記述に実行コマンドが含まれていても、Executable Alias、Approval、Filesystem権限、Network権限は通常どおり必要です。 +System Promptは`agent.user_system_prompt`、Skill directoryは`skills.directory`で指定します。Skillは`skills//SKILL.md`形式です。PromptやSkillはSandbox権限を増やしません。 -## ログ、監査、復旧 +## ログとRecovery | 場所 | 内容 | | --- | --- | -| `logs/application.log` | 起動、診断、アプリケーションイベント | -| `logs/llm.jsonl` | Ollama call、token使用量、Internal Tool結果 | -| `logs/audit.jsonl` | ファイル・プロセス・Policy・ACL・WFP・Recoveryの監査イベント | -| `logs/http.jsonl` | HTTPリクエストの接続情報と処理結果 | -| `state/journals/` | 異常終了からの復旧用Journal | -| `state/backups/` | 大容量ファイル編集のtransaction backup | - -ログは起動ユーザーだけがアクセスできるDACLで保護されます。HTTPログにはAuthorization、Cookie、request body、prompt、画像、Base64を記録しません。 - -LLM/Audit JSONLを絞り込むには、付属のread-only scriptを使えます。 +| `logs/application.log` | 起動とアプリケーションイベント | +| `logs/llm.jsonl` | Ollama call、token、Internal Tool結果 | +| `logs/audit.jsonl` | ファイル、Process、Policy、ACL、WFP、Recovery、非対話apply | +| `logs/http.jsonl` | HTTP接続と処理結果 | +| `state/journals/` | crash recovery用Journal | +| `state/backups/` | 大容量編集のtransaction backup | ```powershell .\scripts\Read-AgentLog.ps1 -Path .\logs\llm.jsonl -TaskId -Tail 100 .\scripts\Read-AgentLog.ps1 -Path .\logs\audit.jsonl -Event policy.deny -Tail 100 ``` -起動時には未完了のJournalを復旧してからMCP受付を開始します。再起動時に未完了だったTaskは自動再実行されず、`failed/server_restarted`になります。 - ## よくある問題 | 状況 | 対処 | | --- | --- | -| 管理者権限またはWFP probeの失敗 | 管理者PowerShellから起動し、`Get-Service BFE`でBFEを確認します。 | -| Ollama接続失敗 | `ollama list`、Ollama endpoint、model名を確認します。 | -| Resolution未確認または変更 | `sandbox resolve`で差分を確認し、`sandbox confirm`を実行します。 | -| Alias不明、Approval不足、hash変更 | `executable resolve`で候補を確認してから`executable approve`を実行します。 | -| Filesystem拒否 | 対象を適切なWorkspaceまたはMountとして設定し、Resolutionを再確認します。 | -| rollback拒否 | 外部Processが同じファイルを変更している可能性があります。Audit LogとJournalを確認し、手動で内容を確認します。 | +| `sandbox.configuration_not_applied` | `show`で全体を確認して`apply` | +| Executable更新後に起動できない | hash変更は自動承認しないため、`show`後に`apply` | +| 管理者権限/WFP preflight失敗 | 管理者PowerShellで起動し、`Get-Service BFE`を確認 | +| Filesystem拒否 | WorkspaceまたはMountをYAMLへ追加し、再度`apply` | +| Network拒否 | `network.access`とendpointを見直し、再度`apply` | -## 開発者向け - -ソースからbuild・test・releaseする場合は以下を実行します。 +## 開発 ```powershell dotnet restore AgentSandboxMcp.slnx @@ -369,10 +220,8 @@ dotnet test AgentSandboxMcp.slnx -c Release --no-build --no-restore .\scripts\Publish-Release.ps1 ``` -build成果物は`build/`、ローカル試験の証跡は`artifacts/`に作成されます。どちらもGit管理外です。 - -詳細な仕様と設計は[仕様書](doc/Specifications.md)、[設計書](doc/Design.md)を参照してください。 +詳細は[仕様書](doc/Specifications.md)と[設計書](doc/Design.md)を参照してください。 ## ライセンス -MIT +MIT \ No newline at end of file -- cgit v1.2.3