1仕組みと動作原理
エントリルーティング機構:ユーザーの兆候に基づき最も狭いパスを選択。名前付きの疑わしいソース(Apple Content Caching、Docker、Chromiumのコード署名クローン、特定のキャッシュディレクトリ)はまず専用のリファレンス文書を参照し、原因が真に不明な場合のみ汎用スキャンを実施します。
Choose the narrowest path that can answer the request
安全機構のコアは「観察と変更の分離 + 精密な承認ゲート」による4相ステートマシン:Observe(読み取り専用)→ Plan(確認ゲートで一時停止)→ Execute(承認されたスコープのみ)→ Verify(独立した再読み込み)。第2相と第3相を単一のメッセージに統合することは禁止されています。
Do not compress phases 2 and 3 into one message. A plan printed beside a cleanup command is not a confirmation gate.
読み取り専用診断は独自開発のPythonスクリプト群(analyze_caches、analyze_dev_env、find_app_remnants、analyze_large_files、analyze_code_sign_clones)によって実行され、厳格な物理割り当て計算規範に従います。duはパス記帳であり物理的な解放ではありません(APFSクローンはエクステントを共有)。
shared extents can be attributed to every path, so actual release remains unknown until deletion and `df` readback
2系統の削除パス:Finder Trashを優先(osascriptによる削除は復元可能だが、物理容量はゴミ箱を空にして初めて解放)。レガシーなsafe_delete.pyは拒否リストと対話的確認を備えた完全削除ヘルパーですが、ドキュメント上で明縮格付けされています(Trash非経由、全ユーザーデータルートの未検査、開かれているファイルの未検知)。
HIGH_RISK_PATHS = frozenset( _canonical_path(path) for path in [ '/System', '/Library/Apple', '/usr', '/bin', '/sbin', '/etc', '/private/var/db', '~/.ssh', '~/.aws', '~/.gnupg', '~/Library/Keychains', ] )
Docker/OrbStackの規律:オブジェクト単位の分析(各イメージ/コンテナ/ボリュームの列挙、参照関係やライブラリ種別の確認、スパースファイルの実際の割り当て)、データベースボリューム名(mysql/postgres/redis/mongo/mariadb)は内容検査を実施して初めて削除提案が可能。**prune系コマンドは絶対に使用禁止**。
**Never use Docker prune-family commands.** This includes image, container, volume, system, builder, and buildx prune.
事後検証の規律:前後のdf読み取り値から実際の回収量を算出(削除ツールの自己申告は不採用)、クリーンアップ対象サブシステムの再検査、重要な共存サービスに対するPID/ヘルスプローブの再解決、APFSの記帳遅延やバックフィルの可能性がある場合は制限付きの間隔で観察。終了コードが判明しただけの段階で「fixed」と報告することは禁止。
Never report “fixed” when only the command exit code is known. A successful cleanup requires both the intended state and the protected invariants.
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | df / du / lsof / pgrep / launchctl / ps(系统状态与分配测量) |
| cli | uv(运行 bundled python 脚本) |
| cli | osascript(Finder Trash 删除) |
| cli | docker(可选:per-object 分析 + 受权后的临时只读检查容器) |
| cli | mo / Mole(可选第三方全盘扫描器 github.com/tw93/Mole,需用户批准其固定宽扫描根) |
| cli | sudo AssetCacheManagerUtil / AssetCache(受权后的服务控制) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: scripts/analyze_caches.py / analyze_dev_env.py / find_app_remnants.py / ana
- scripts/ 或 SKILL.md: 外部言語パッケージ依存の動的インストールの宣言
- 本地工作目录: ファイルの読み書きおよび成果物の出力: ~/.macos-cleaner/{before,after}.json(cleanup_report.py スナップショット)
5二重目の独立検証
- [ok] safe_delete.py denylist 与删除逻辑 — HIGH_RISK_PATHS 含 /System、/usr、/bin、/etc、~/.ssh、~/.aws、~/.gnupg、~/Library/Keychains 等;delete_path 对 is_high_risk_path 直接拒绝;文件 unlink/目录 shutil.rmtree。
- [ok] 『观察/变更分离 + 确认门禁』在源码与文档双重存在 — SKILL.md 10 条 contract + 四相状态机 + 'Do not compress phases 2 and 3 into one message';safe_delete 每次删除前交互 input('[y/N]')。
- [ok] nominal vs physical 纪律有代码/文档支撑 — SKILL.md 明示 du 路径记账 vs df 物理读回;cleanup_report 只做 df 快照不做释放断言;safe_delete 输出 'Measured size removed' 并提示 'Physical release: verify with before/after df -k'。
- [ok] Docker prune 禁令与 per-object 纪律 — SKILL.md 六行明文禁 prune 家族;docker_analysis.md 给 --pull=never --network=none --read-only --cap-drop=ALL 的只读检查容器配方。
- [ok] 无网络/无凭证(安全结论基础) — 全目录扫描零网络调用代码、零凭证读取;Mole/AssetCacheManagerUtil 等外部工具仅在有授权与安装前提下由宿主调用。
- [ok] batch 'all' 可跳过逐项危险模式警告的注意点 — safe_delete.py batch_confirm 支持输入 'all' 直接返回全部 items(不做 danger_patterns 逐项检查,仅 denylist 兜底)——已在 risks 注明;SKILL.md 也限定该助手仅用于精确批准的非用户数据目标。
- [ok] 元数据(commit/license/stars) — 本地 HEAD == pin d5c4678cb5d4fd6acc9c922690df035dbd33d247;GitHub API:MIT、stars 1385(2026-09-09 实采)、pushed_at 2026-09-09T12:33:29Z。
6結論
2e94bb1d20bbcc55…