Communityライティング&編集github.com

Windows サンドボックス ACL 障害の診断と修復

Windows 上で DSH サンドボックスによる予期しないアクセス拒否(ワークスペースへの書き込みやリスト取得の失敗、通常読み取れるパスが読めない場合など)が発生したときに使用します。1つのコマンドで対象パスとそのすべての祖先パスを検査し、確認された ACL 問題を同じ実行内で修復します。想定された制限による拒否は ACL 修復の対象外です。

Windows サンドボックス ACL 障害の診断と修復 とは?

これは、Windows 上の DSH (Developer Sandbox) サンドボックス環境において、予期しないアクセス拒否エラーが発生した際に、根本原因であるファイルシステムの ACL (アクセス制御リスト) 問題を診断し、自動修復するためのエージェントスキルです。ワークスペースへの書き込み、ディレクトリのリスト取得、通常は読み取り可能なパスへのアクセスが「アクセスが拒否されました」で失敗するケースを想定しています。このスキルは、対象となるパスとそのすべての祖先ディレクトリを分析し、DSH がワークスペースをプロビジョニングするために必要な `WRITE_DAC` や `WRITE_OWNER` 権限が不足している場合は、現在のサインインユーザーに対してフルコントロール許可 ACE を追加します。同時に、AppContainer パッケージ (`S-1-15-2-*`) の明示的な許可 ACE をその発生源から削除します。すべての変更はバックアップされ、検証された後、元の操作をサンドボックス内で再試行するよう促します。スキルは一度の承認リクエストで1つのコマンドのみを実行するように設計されており、修復のための承認を複数回求めたり、診断と修復を分割したりすることはありません。ユーザーは、問題が解決しない場合や修復が失敗した場合に備えて、障害が発生したオブジェクト、不足している権限、ロールバックコマンドを明確に示す詳細なレポートを受け取ります。このスキルは、Claude Code や Codex などの AI エージェントが Windows のファイル権限問題を自動的に解決するために使用されます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/formal-you/agent-skills-suite/tree/HEAD/.agents/skills/diagnose-windows-sandbox-acl

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Windows サンドボックス ACL 障害の診断

承認リクエストはすべて、ユーザーの言葉で平易に書いてください。 プロンプトはユーザーがアクセスを広げる前に読むすべてです。そのため、次の点を単独で理解できるようにしなければなりません:スクリプトがどのフォルダに触れるか、権限が不足している場所にサインインユーザーのフルコントロールエントリを追加し、外部パッケージのエントリを削除すること、ファイルの内容と所有者は変更されないこと、そして出力される回復コマンドが各変更を元に戻すこと。エラーコード、WRITE_DAC/WRITE_OWNER、S-1-15-2-* SID、icacls、ACL、ACE、判定結果の名前やスイッチはリクエストに含めないでください。Windows ファイル権限について記述し、ACL や ACE とは記述しないでください。1つのコマンドにつき、1回だけ依頼してください。

1つのコマンドで診断と修復を実施

このスクリプトにモードはありません。-Path、-AllowRoot、-Out は、対象パスとそのすべての祖先パスを読み取り、観測結果に基づいて同じ実行内で修復します。

  • そのチェーン上のディレクトリで、効果的な WRITE_DAC または WRITE_OWNER がないものには、サインインユーザーに対するフルコントロール許可 ACE が追加されます。DSH がワークスペースの権限付与をプロビジョニングするためにこれらが必要だからです。
  • 明示的な AppContainer パッケージ許可 ACE (S-1-15-2-*、ただし末尾が1または2の既知のグループを除く) は、その発生源(祖先が先)から削除され、これによりそれらのパッケージのアクセスも削除されます。
  • サンドボックスがプロビジョニングできないディレクトリ(そのプロビジョニングエラーがワークスペースルートについて報告する状態)、または許可されたルート自体も、同じ実行内でそれらの ACE がサブツリー検索されます。これにより、より深いエントリに対して2回目のリクエストが必要になることはありません。この範囲指定された検索は、truncated(切り詰められた)および読み取り不能なディレクトリを報告します。切り詰められた場合は、まだ失敗しているより深いパスをもう一度渡してください。

すべての変更はバックアップされ、再読み取りによって検証されます。-AllowRoot はこのすべてを範囲指定します。オブジェクトは、そのディレクトリ自体であるか、その厳密に内部にある場合にのみ変更されるため、ワークスペースルートは自己修復できます。これを診断呼び出しと修復呼び出しに分割したり、1つの修復について2回依頼したり、存在しないモードスイッチを渡したりしないでください。

& '<skill-directory>\scripts\diagnose-windows-sandbox-acl.ps1' -Path '<failing-path>' -AllowRoot '<authorized-directory>' -Out '<recovery-directory>'
exit $LASTEXITCODE

完全なパスを引用符で囲んで置き換えてください。-Out は永続的でユーザー所有の場所(できれば障害が発生しているワークスペースの隣)を指定してください。スキルリソースディレクトリは絶対に使用しないでください。スキルがアンロードされると削除されます。1回の呼び出しにつき1つのパスを渡してください。

実行方法

制限付きの状態で、失敗した操作をもう一度実行してください。スクリプトは権限を書き込みますが、制限付きトークンではこれを行うことはできません。そのため、制限付き環境で実行すると、スクリプトはサンドボックス自身の制限を権限不足として報告してしまいます。従って、その1つのコマンドの承認をリクエストし、制限なしで実行してください。制限付きでのスクリプト実行は決して役に立ちません。制限なしでも Windows トークンが昇格されるわけではありません。

ワークスペースへの書き込み、リスト取得、または通常読み取り可能なパスに対する予期しない拒否を診断してください。想定される拒否(ワークスペース外への書き込み、read-only での書き込み、パイプされた子プロセスの spawn EPERM、ConstrainedLanguage エラーなど)については説明してください。承認が拒否されたり利用できない場合は、パスを「診断未了」として報告し、停止してください。

出力の読み方

すべてのレコードは標準出力、-Out で指定された場所の acl-report-*.jsonl ファイル、および最終行の RECAP 行に出力されます。RECAP 行には、判定結果、変更、検証、拒否、スキャンが含まれます。ツールの出力はその末尾のみを保持するため、まず RECAP を読み、それで不十分な場合はレポートから特定のレコードを読み取ってください。verification(検証)レコードを信頼し、completed(完了)アクションは決して信頼しないでください。details.nextAction から判断してください。

nextAction意味
verify_original_confined_operation修復が検証されました。元の操作を制限付きで再試行してください。
stop何も修復されなかったか、拒否により実行が終了しました。報告して停止してください。
restore_pending_then_stop未検証のロールバックがあります。表示された回復コマンドを順番に実行した後、停止してください。

拒否 ACE が存在するというだけでは因果関係は証明されず、スクリプトは決してそれを削除しません。DSH の S-1-4-* 権限付与と Everyone の DeleteSubdirectoriesAndFiles 拒否は想定内であり、競合ではありません。修復をブロックする拒否があった場合、スクリプトは試行した内容を復元した後、修復を行わずに実行を終了します(REPAIR_REFUSED または GRANT_FAILED)。各変更に対して、-Out ディレクトリに2つのファイル(acl-backup-<id>.json とその .ps1 ファイル)が残され、実行時に一致する ROLLBACK コマンドが出力されます。

修復後、および停止時

制限付きで、元の失敗した操作を再試行してください。検証済みの修復は、元の操作が別の理由で失敗したからといって取り消されるわけではありません。新しい観測結果から続行し、より深いパスがまだ拒否されている場合は、同じ1つのコマンドをそこに対して再度実行してください。今回も1回の呼び出し、1回の承認です。

修復または検証が失敗または拒否された後は停止してください。 スクリプトはその呼び出しの変更を既に復元しています。繰り返したり、別の修復を開始したりしないでください。また、拒否 ACE を手動で削除しないでください。

停止した実行でも、ユーザーに判断を委ねる必要があります。 ブロックしているオブジェクトと、それに不足している権限または ACE、変更内容とロールバックされた内容、順序付けられた回復コマンド、レポートのパスを指定してください。制限を解除できるのはユーザーだけです。そのため、一時的にこのセッションをフルアクセス(Chinese UI: 完全权限)に切り替えるよう依頼し、それによって何が可能になるかを説明してください。つまり、そのまま作業を続けるか、このファイル権限問題の調査を依頼することができると伝えてください(レポートにはメカニズムと証拠が既に記録されています)。そして、このセッションをフィードバックとして送信し、関連するレコードを引用するよう依頼してください。これにより、対処されていないシナリオが私たちに届きます。この会話で交わされた情報のみが一緒に送信されます。例えば:

这个工作区被 Windows 文件权限挡住了:<对象> 上 <缺哪个权限 / 哪条权限项>。你可以把本会话切到「完全权限」(full access) 临时继续工作;切完之后既能直接干活,也可以让我继续排查这个文件权限问题(报告里已经有机制和证据)。也麻烦把这个会话作为反馈发出去,好让我们补上这个场景。

This workspace is blocked by Windows file permissions: <object> <missing right / offending entry>. Switch this session to full access (完全权限) to keep working meanwhile; then either continue your work or have me keep investigating this file-permission problem from the report. Please also send this session as feedback so we can cover the case.

禁止事項

  • ACL を手動で編集したり、所有者を変更したり、拒否エントリを消去したり、子の権限を再帰的に置き換えたりしないこと。
  • UAC または runas を使用してスクリプトを昇格して実行しないこと。
  • -AllowRoot を祖先にまで広げたり、拒否または失敗した呼び出しを繰り返したりしないこと。

ユーザーの言葉で報告してください:分析したパス、変更、検証、回復コマンド、次のステップ。許可された制限なし実行は、そのようにラベル付けし、サンドボックス修復とは呼ばないでください。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

formal-you/agent-skills-suite

Run a bounded brownfield change (bugfix, small feature, behavior tweak) against an existing spec or codebase: proposal -> one task bundle -> dev/QA -> converge -> archive. Use when an existing spec or codebase needs an incremental change (bugfix, small feature, behavior tweak) and a full PRD is overkill. Do not use for greenfield requirements (use prd-generator), architecture decisions (use spec-generator), or pure task slicing (use task-decomposition).

formal-you/agent-skills-suite

Fold confirmed implementation deviations back into the technical spec after a task reaches QA_PASSED, archive the task bundle and close the change proposal. Use when a task bundle records a checked QA_PASSED verdict and its 02-dev-workspace.md deviation log is ready to be written back. Do not use while implementation or QA is still running, and do not use to invent spec content.

formal-you/agent-skills-suite

Implement one planned task bundle as the Dev role: read the contract, change only touch_files, run the machine-checkable DoD, fill 02-dev-workspace.md and hand off to QA. Use when a task contract exists and you are assigned implementation. Do not use for planning, task slicing, architecture, or QA verification.

formal-you/agent-skills-suite

Run the Gate 1 deterministic static check on task bundles before development starts and follow the Gate 2 review checklist. Use when task contracts exist under tasks/ and you need to verify blast radius, diff budget, declared-file topology, traceability anchors, spec anchor coverage, inherited ADRs, machine-checkable acceptance criteria, and DAG acyclicity. Do not use for code execution, CI pipeline construction, AST/complexity checks, or test audits (owned by quality-engineering).

関連スキル