Communitygithub.com

tzzs/storops

AIエージェント向けストレージ運用ツール — Windows、Linux、macOS上でストレージを安全に診断、クリーンアップ、マイグレーションします。

storops とは?

StorOpsは、AIエージェントがストレージの使用状況を分析し、安全にクリーンアップやデータ移行を実行するためのCLIツールです。ディスクスキャナ(WizTree/gdu)の結果を解釈し、各パスの危険性や削除可能性をルールベースで特定します。読み取り専用の分析コマンド(scan、inspect、identify)は事前確認なしで実行可能で、書き込み操作(cleanup execute、migrate execute)はユーザーの明示的な承認を必須とします。Windows、Linux、macOSをサポートし、移行時にはアプリケーション固有の設定変更やジャンクション(シンボリックリンク)を適切に選択し、移行後は必ず検証を実施します。このツールは、Cursor、Claude Code、CodexなどのAIエージェントプラットフォーム上で、ユーザーに代わって安全かつ一貫したストレージ管理を実行するように設計されています。

対応~Claude Code~Codex CLI~Cursor
npx skills add tzzs/storops

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

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

ドキュメント

storops は何をしますか?

ストレージがどこで使われているか、それが何なのかを理解し、重要なものを移動し、不要なものを安全にクリーンアップします。

StorOpsはディスクスキャナでもディスククリーナーでもありません。WizTreeが「何が容量を占有しているか」を答えるのに対し、StorOpsはそれらの「正体」、安全に触れられるかどうかを判断し、ユーザーが実行を許可した時点で安全にクリーンアップまたは移行を実行します。詳しい設計思想は docs/DESIGN.md を参照してください。

このファイルは、StorOpsを使用する際のエージェントの振る舞いを定義します(単に使用可能なコマンドを列挙するものではありません)。以下のワークフローに従うことを優先し、ユーザーがコマンド名を知る必要がないようにするべきです。

絶対的なルール

  1. 分析は行動の前に行う。常にスキャン/検査/識別を先に行い、いきなり書き込み操作に進まないこと。
  2. すべての操作はデフォルトで読み取り専用。storops scan、storops inspect、storops search、storops identify、storops cleanup plan、storops migrate plan はファイルシステムを変更しないため、事前確認なしで自由に実行してよい。
  3. パスの名前だけでそのパスが何かを推測してはならない。storops identify(rules/*.yaml に基づく)だけがカテゴリ/リスク/削除可能性を決定する。マッチするルールがないパスは unknown / critical として返される——それは「触るな」という意味であり、フォルダ名から推測する許可ではない。
  4. 名前に「cache」や「temp」が含まれていても、それを削除の根拠にしてはならない。storops identify / storops cleanup plan が実際に分類したものだけに基づいて行動する。
  5. クリティカルリスクのパス(Windows、Program Files、未知のシステムファイル、ユーザードキュメントなど)は削除や移行の対象として提示してはならない。これはコード側で強制されている(src/storops/core/risk.py の assert_not_critical)——規則ではなく実装上の保証であり、迂回しようとしても無駄である。
  6. すべての書き込み操作(storops cleanup execute、storops migrate execute)は、事前にユーザーの明示的かつ項目ごとの確認を必要とし、CLI自体も --confirm なしでは実行を拒否する。計画を表示し、ユーザーが本当に「はい」と言うのを待ってから --confirm を渡すこと——先回りしてユーザーに代わって --confirm を指定してはならない。
  7. アプリケーションが動作中の可能性がある場合、そのデータを移動してはならない。storops migrate plan は RequiresAppClosed フラグを立てる。storops migrate execute はその場合、明示的な --app-closed の確認なしでは実行を拒否する。ユーザーにアプリを閉じるよう伝えること——閉じていると決めつけたり、自分でプロセスを強制終了してはならない。
  8. 大規模で再ダウンロード可能なAIモデル/キャッシュデータ(Hugging Face キャッシュ、Ollama/LM Studio のモデルなど)については、ユーザーが承認する前に必ず結果を明確に伝える(「これは再ダウンロードが必要になります」)。
  9. ユーザーが価値があると判断したものについては、削除よりも移行を優先する。削除は再利用可能または使い捨て可能なデータに対してのみ。大規模なモデルやプロジェクトデータで使い捨てできないものは「削除」ではなく「移動」として提示すること。
  10. アプリケーション自身の設定による再配置をジャンクションより優先する。storops migrate plan はこの優先順位を既にエンコードしている——単に簡単そうだからという理由でジャンクションに上書きしてはならない。
  11. マイグレーション後は必ず検証する(storops migrate execute が書き出す結果ファイルに対して storops verify を実行)。検証が失敗した場合はその旨を明確に伝えて停止すること——検証失敗を「解決」するためにデータを削除したりさらに変更したりしてはならない。
  12. スキャンバックエンド(Windows では WizTree、Linux/macOS では gdu/du)を推理のハードな依存関係にしてはならない。バックエンドが完全に欠如している場合、CLI は入手先を指し示す明確なエラーを表示する(WizTree: https://diskanalyzer.com/ または $env:STOROPS_WIZTREE_PATH;gdu: https://github.com/dundee/gdu または $env:STOROPS_GDU_PATH)——それを回避しようと独自に別の方法を試みるのではなく、そのエラーをユーザーにそのまま伝えること。
  13. Linux/macOS では、読み取り/計画段階のコマンド(scan/inspect/search/cleanup plan/migrate plan)の --json 結果には Backend フィールドと BackendAdvice フィールドが含まれる。BackendAdvice は、gdu が見つからなかったために StorOps が低速な du バックエンドにフォールバックした場合のみ非 null になる。会話の中で一度だけユーザーに言及する(例:「ところで、gdu をインストールするとこれらのスキャンがかなり高速になります」)——すべてのコマンドで繰り返したり、Windows 上や null の時には言及しない。

ワークフロー:「ドライブの空き容量がなぜ少ない?」

  1. storops scan C:\(またはユーザーが指定したドライブ)を実行し、最上位の容量消費元と空き容量を取得する。
  2. 大きくて未識別または曖昧なエントリについては、storops inspect で実際に内部を確認する。
  3. 注目すべき各エントリを storops identify でクロスリファレンスする(scan/inspect には既に識別結果と推奨アクションが付属しているが、ユーザーが尋ねた単一パスについては直接呼び出すこと)。
  4. ランク付けされた内訳を提示する:それが何か、サイズ、推奨アクション(KEEP / DELETE / MOVE / CHECK)、理由、リスク。
  5. この段階では何も削除または移動しない——これは純粋に診断のためのフェーズである。

ワークフロー:「ディスク容量をクリーンアップ」/「Xを削除」

  1. 対象が既にスキャン/識別されていることを確認する(されていない場合は上記のスキャンワークフローを先に実行する)。
  2. storops cleanup plan を実行する(デフォルトは --max-risk low。ユーザーが中リスク/高リスクの項目も明示的に許可した場合のみリスク閾値を上げること)。これにより、項目ごとのJSON形式の計画が出力される——まだ何も削除されていない。
  3. 計画をリスクレベルごとにグループ化して提示する。各項目のサイズ、アプリケーション、結果(中リスク/高リスクの結果は明示的に言及する、例:「再ダウンロードが必要になる可能性があります」)を表示し、回収可能な合計容量を示す。
  4. ユーザーに確認を求める。ユーザーが一部のみを希望する場合は、より厳しい --max-risk で再生成するか、スキップする項目を指定する——ユーザーに何が変わったかを正確に伝えずに計画ファイルの Approved フラグを手動で編集してはならない。
  5. ユーザーが確認した後にのみ、storops cleanup execute --plan-file <path> --confirm を実行する。
  6. 結果を項目ごとに報告する(削除済み / スキップ / 失敗)と、回収された合計容量。failed 項目(例:使用中のファイル)は報告するが、強制的に再試行はしない。

ワークフロー:「Xを別のドライブに移行」

  1. ソースパスを識別する(スキャンから既にわかっていない場合は storops identify を使用)。それが Migratable でない場合は、その旨と理由(例:クリティカル、または既知の移行パスがない)を説明し、独自に移行方法をでっち上げてはならない。
  2. storops migrate plan <source> <destination> を実行する。これにより方法(アプリ設定変更、またはフォールバックとしてのジャンクション)が決定され、順序付けられた手順リストが生成される——まだ何も移動されていない。
  3. 計画を提示する:ソース、宛先、サイズ、方法、アプリケーションを先に閉じる必要があるかどうか。RequiresAppClosed の場合は、明示的にユーザーにアプリを閉じるよう依頼する。
  4. 計画全体の確認を求める。
  5. storops migrate execute --plan-file <path> --confirm を実行する(ユーザーがアプリを閉じたことを確認したら --app-closed を追加する)。これによりデータをコピーし、ファイル数とサイズをソースと照合して検証し、その後にのみ元のデータを削除する——ジャンクション方式の場合は古いパスのリンクも再設定する。
  6. 方法がアプリ設定変更(ジャンクションではない)の場合、ユーザーに正確な設定変更内容を伝える(計画の MigrationHint から)——StorOps 自身が任意のアプリ設定ファイルを編集することはない。
  7. storops verify --result-file <migrate execute 出力からのパス> を実行し、各チェックの PASS/FAIL を報告する。FAIL の場合は停止し、正確に何が一致しなかったかを説明する——検証失敗を「解決」するために残ったデータを削除してはならない。

ワークフロー:「<パス>を削除/移動しても安全か?」

単に storops identify <path> を実行し、Category、Deletable、Migratable、CleanupRisk、Consequence、推奨アクションをそのまま伝える——これは直接的な決定論的な答えであり、ルールベースが実際に言っていること以上に解説を加えたり、unknown の結果について推測してはならない。

コマンドリファレンス

段階コマンド確認
読み取りstorops scan、storops inspect、storops search、storops identify不要
計画storops cleanup plan、storops migrate plan不要(計画ファイルのみを生成)
書き込みstorops cleanup execute、storops migrate execute--confirm が必要(および該当する移行では --app-closed)
検証storops verify不要(読み取り専用の再チェック)

すべてのコマンドは機械可読な出力のために --json をサポートします。python -m storops <command> ... または、パッケージが pip install 済みの場合は storops <command> ... として呼び出します。

セットアップと要件については README.md、識別の背後にあるルールスキーマについては rules/README.md を参照してください。

関連スキル