reverse-engineer について
許可を得て分析した外部システムを、機能一覧、証拠インデックス、採否マップにまとめる開発向けエージェントスキルです。ドキュメント上の主張、コードの証拠、ホスト側の機能を区別し、README だけに基づく判断を避けます。
主な機能
- 01外部システムの機能一覧を作成
- 02証拠を情報源別に分類
- 03採否を自プロジェクトに対応付け
- 04分析結果とセキュリティ項目を検証
- 05許可の確認と秘密情報の保護
活用シーン
- 01許可を得たコードリポジトリの評価
- 02CLI、設定、契約仕様の整理
- 03外部機能を既存プロジェクトに対応付け
- 04ドキュメントのみの調査で要検証項目を記録
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ boshu2/ agentops --skill reverse-engineerインストール後、Claude Code で/reverse-engineerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitignoreagents/openai.yamlfixtures/cc-sdd-v2.1.0/cli-surface-contracts.txtclone-metadata.jsondocs-features.txtfeature-registry.yamlreferences/invocation.mdreverse-engineer.featurereferences/templates/spec-architecture.md.tmplspec-code-map.md.tmplreferences/templates/security/attack-surface.md.tmplauthn-authz.md.tmplcrypto-review.md.tmpldataflow.md.tmplfindings.md.tmplreproducibility.md.tmplthreat-model.md.tmplscripts/extract_docs_features.shextract_sitemap_paths.shfetch_url.pygenerate_feature_catalog_md.pygenerate_feature_inventory_md.pyrepo_fixture_test.shreverse_engineer.pyscaffold_feature_registry.pyscripts/binary/analyze_binary.shcapture_cli_help.shextract_embedded_archives.pylist_embedded_archives.pyscripts/security/generate_sbom.sh詳細
リバースエンジニアリング
外部システムをリバースエンジニアリングし、2つの成果物にまとめます。1つはティアダウン(機能一覧、参照先の登録簿、CLI とコントラクトの仕様、必要に応じてセキュリティ監査)、もう1つは取り込みマップ(自分たちのサーフェスに何を採用し、何を採用しないかという判断)です。根拠の引用が必須の判断行は誰でも再確認できますが、印象に基づく判断は、その作成者自身でも再確認できません。競合他社の README に基づいて判断することこそ、このスキルで防ぐべき失敗です。
⚠️ 制約 — 厳格なガードレール(必須)
- 自分が所有するコード/バイナリ、または分析する明示的な書面での許可を得たコード/バイナリのみを扱ってください。無許可のティアダウンは、法的問題や知的財産権侵害につながるためです。
- 保護や利用規約を回避する手順、または独自のソースコード/システムプロンプトを抽出する手順は提供しないでください。
- 再構成した独自のソースコードや埋め込みプロンプトを出力しないでください(インデックスのみとし、レポートではマスキングします)。保護された知的財産の複製を防ぐためです。
- シークレット/トークン/キーを見つけた場合はマスキングしてください。出力バリデーターは各フェーズで、出力ディレクトリ全体に対してこのスキルの
scripts/security/scan_secrets.shを実行します。検出された場合、マスキングするまで失敗となります。 - 常に、ドキュメントの記述、コードで確認できること、ホスト型/コントロールプレーンを区別してください。
根拠のルール
- すべての機能に根拠の出所を付けてください。
code:相手のソースコードまたはバイナリで確認できます。開いたファイルの行番号を引用してください(バイナリの場合は、ティアダウン出力の行を引用してください)。また、コードの実際の動作を記録してください。これは多くの場合、主張よりも限定的です。docs:README、ドキュメントページ、または発表で述べられていますが、未検証です。hosted:確認できないサービスまたはコントロールプレーンです。 - 登録簿はインデックスであり、根拠ではありません。 参照先を一覧表示します。リポジトリモードでは、グループは
impl: unclassifiedから始まります(バイナリモードでは、binary-symbols.txtを根拠とするclientグループが記録されますが、これもcodeの根拠ではありません)。clientまたはmixedには根拠箇所が必要で、control-planeはhostedを意味します。登録簿のエントリーだけで、行がcodeになることはありません。 - コードにアクセスできなければ、取り込みは禁止です。 ドキュメント、README、またはランディングページしかない場合、相手の実装に関するすべての行は
docsであり、未検証です。gap、park、またはrejectにはできますが、stealにはできません。 - 実際のツリーで自分たちの側を検証してください。
haveの行には、自分たちのファイルを引用してください。missingの行にはすべて、それを確認した検索内容(コマンドと対象範囲)を記載してください。何かを欠落と判断する前に、現在のスタックがすでに提供している機能を確認してください。 - 取り込みを決める前に、根拠を再度確認してください。
stealとマークする前に、引用したファイルをそれぞれ開き直してください。記憶に基づく要約は根拠になりません。 - 取り込むのはパターンであり、プラットフォームではありません。 相手の堅牢性を支えているのは通常、統合、ゲート、調整ループといった1つのアイデアです。それを自分たちのプリミティブで再表現してください。相手のランタイムやストレージエンジンをそのままベンダーとして持ち込んではいけません。
フェーズ 1 — 分解
<skill-dir> は、この SKILL.md が含まれているディレクトリです。Claude Code では「このスキルのベースディレクトリ」として表示され、Codex ではこのスキルの SKILL.md のパスとして表示されます。AgentOps のソースチェックアウトでは skills/reverse-engineer です。コマンドを実行する前に、<skill-dir> をその絶対パスに置き換えてください。作業ディレクトリはユーザーのリポジトリのままにします。ホストにこのスキルのインストール先が表示されなかった場合は、読み込んだ SKILL.md のディレクトリを使用してください。特定できない場合は、パスを推測したり、現在のリポジトリにある同名スクリプトを実行したりせず、同梱スクリプトを使用できないと伝え、以下のドキュメントのみのモードと同様に、インベントリと盗用マップを手作業で作成してください。
認可済みのクローンまたはバイナリがある場合、スクリプトは固定されたリビジョンをクローンし、CLI/設定/アーティファクトの表層をスキャンして、インベントリ、レジストリ、仕様を書き出し、分解結果を検証します。
python3 "<skill-dir>/scripts/reverse_engineer.py" <product> --mode=repo \
--upstream-repo="https://github.com/org/repo.git" --upstream-ref=v1.0.0 \
--output-dir=".agents/scratch/reverse-engineer/<product>/"
クローンは、--local-clone-dir で別の場所を指定しない限り、現在のディレクトリの .tmp/<product>/ に配置されます。コミットに含めないでください。バイナリモードには --authorized が必要です。実際のバイナリの使用が認可されていない場合は、bash "<skill-dir>/scripts/self_test.sh" を実行してください。デモ用バイナリがビルドされます(Go が必要です)。フラグ、出力の完全な一覧、フィクスチャ、テストについては、実行リファレンスを参照してください。
コードにアクセスできない場合(README、ドキュメントサイト、ランディングページのみの場合)は、スクリプトを使わず、各行に docs または hosted のタグを付けて、インベントリと盗用マップを手作業で作成し、分解バリデーターを実行していないことを明記してください。コードを読めるもののスクリプトを実行できない場合は、コードを直接読み、各 code 行に file:line を引用してください。バリデーターを実行できなかったことも報告します。
フェーズ 2 — 盗用マップ
各機能を、.agents/scratch/reverse-engineer/<product>/steal-map.md にある自分たちの表層に対応付けます。スクリプトはフェーズ 1 の検証後に停止します。自分たちの稼働中のツリーにその機能があるか、ないか、採用すべきかを、スクリプトが正直に判断することはできません。呼び出し側が、分解結果、それが示すコード、自分たちのリポジトリを改めて確認した結果に基づいてマップを作成します。マップがない、または形式が不正な場合はスキルの結果が未完了であり、スクリプトの成功を判断として言い換えてはいけません。
| 相手の機能 | 現在の自分たちの表層 | 判定 |
|---|---|---|
<feature>(コード:<file:line>)、(docs)または(hosted) | <自分たちのファイル/スキル/CLI>、または、それを証明した検索内容を添えて「なし」 | have / gap / steal / park / reject |
各行には、次の判定を必ず 1 つだけ付けます。
- have — 自分たちの稼働中のツリーにすでに存在します。ファイルを引用し、現在も有効であることを確認します。
- steal — 自分たちにはありません。
codeの証拠から相手の実装方法が分かり、それが自分たちの中核を前進させます。パターンを取り入れ、自分たちのプリミティブで再表現します。 - gap — 自分たちにはなく、価値が実証されれば取り入れたいものの、まだ盗用に値するとは判断できません。相手の実装方法が
docsまたはhostedのみであるか、自分たちの中核に対する価値が示されていません。判断に必要な証拠を明記します。 - park — 実在するものの、現時点では意図的に自分たちで構築しないものです。委譲する基盤(AgentOps では ADR-0009 により、スケジューリング、監督、キューは外部に委ねられます)、またはまだ実行していない賭けに依存するものが該当します。名前を挙げるだけにし、構築はしません。
- reject — 自分たちの方針に反します(たとえば、完了の裏付けとなるチェックがない完了エッジ。自分たちはチェックと CI に加え、コストのかかるミスを防ぐための新たな判断を 1 つ必須とします)。
どちらにも当てはまりそうな場合は、reject を park より優先し、park を steal または gap より優先します。steal と gap の間では、証拠に基づいて判断します。
検証と引き継ぎ
steal-map.md を作成した後、$output_dir、$security_audit、$sbom、$upstream_ref_set(それぞれ数値フラグ 0|1)を使って、出力全体を検証します。
bash "<skill-dir>/scripts/validate-output.sh" \
--output-dir "$output_dir" --phase complete \
--security-audit "$security_audit" --sbom "$sbom" \
--upstream-ref-set "$upstream_ref_set"
ソースタグまたは5つの判定のいずれかがないテーブル行と、code の証拠がない steal は、いずれも検証に失敗します。upstream ref がある場合は、解決済みのコミットが clone-metadata.json に含まれている必要があります。引き継ぎの前に終了コードが0でなければならず、そうでない場合、レポートには実行されなかったと記載されます(ドキュメントのみのモード)。
steal の採用が後戻りできない決定(アーキテクチャの分岐、新しい境界づけられたコンテキスト、ストレージまたはデータの移行)に当たる場合、ここでは決定しないでください。検証済みの steal-map をPlanに渡し、既存の意図のソース内で選択肢を具体化します。Idea Genieの対決モードまたはPremortemで、助言的な証拠として異議を唱えることはできますが、どちらも準備完了の判断や続行の権限を与えるものではありません。通常の have、park、reject の各行は、証拠に裏付けられた最終的な判断です。
特定の外部システムではなく、一般的な探索を行う場合は、Researchを使用してください。reverse-engineer.featureのシナリオに動作が記載されています。このスキルの scripts/validate.sh と scripts/self_test.sh で動作を確認できます。