trailofbits/open-sourcing

リポジトリを公開リリース可能な状態にするスキルです。「このプロジェクトをオープンソース化する」「リポジトリを公開する」「ライセンスを選ぶ」「リリース自動化を設定する」といったリクエストに対応し、機密情報のチェック、ライセンス、ドキュメント、CI、言語固有のパッケージングのワークフローを提供します。

open-sourcing とは?

このスキルは、リポジトリを公開リリースに備えて準備するための包括的なワークフローを提供します。主な機能は、シークレット(APIキー、認証情報など)の徹底的な監査、適切なオープンソースライセンスの選択と適用、READMEやSECURITY.mdなどのドキュメント整備、CI/CDパイプラインの強化、そして言語固有(Python、C/C++、Rust、Go、JavaScript、Ruby)のパッケージングと公開設定です。特に重要なのは、公開後に修正が不可能なシークレット監査を最初に行う点です。また、組織ポリシー(例:Trail of Bits)の検出と適用、ブランチ保護、Dependabot/Renovateによる依存関係更新、セマンティックバージョニングに従ったリリースタグ付け、CI駆動のリリース自動化といったベストプラクティスもカバーします。GitHub ActionsやClaude Codeなどのプラットフォーム上で動作し、開発者がリポジトリを安全かつプロフェッショナルに公開するための指針を提供します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/trailofbits/skills/tree/main/plugins/open-sourcing/skills/open-sourcing

Installed? Explore more 生産性&コラボレーション skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

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

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

ドキュメント

リポジトリのオープンソース化

リポジトリを公開リリースに備えて準備し、事前知識のない部外者がビルド、使用、貢献できるようにすると同時に、機密情報が含まれないようにします。手順は順番に従って進めてください。最初にシークレット監査を行う理由は、その結果(リポジトリを維持するか再作成するか)が後続のすべての手順に影響するためです。

使用するタイミング

  • プライベートリポジトリを公開するとき
  • 既存の公開リポジトリをリリース品質に監査するとき(「正式版にする」)
  • プロジェクトのライセンスを選択するとき
  • 公開リリースに先立って、パッケージング、バージョニング、リリース自動化を設定するとき

使用してはいけないタイミング

  • すでにリリース済みのプロジェクトでの日常的な開発(リリースイベントがない場合)
  • サードパーティコードの脆弱性監査(セキュリティレビュースキルを使用してください)
  • プライベートのままにするリポジトリからパッケージを公開する場合 — リリース管理の手順のみが該当し、残りはスキップします

ワークフロー

ステップ 1:組織プロファイルの検出

bash {baseDir}/scripts/detect_org.sh

このスクリプトはgitリモートと最近のコミッターのメールアドレスを検査し、プロファイル名を出力します。trailofbits と出力された場合は、references/trailofbits.md を今すぐ読み、そのライセンスポリシー、公開アカウント、プロセスに関する注意事項を残りの手順全体に適用してください。generic と出力された場合は、汎用的なガイダンスのみに従って進めてください。ユーザーが検出結果が間違っていると言った場合は、ユーザーを信頼してください。

ステップ 2:シークレットの監査 — 他のすべてに先立って

一度でもシークレット(APIキー、認証情報、クライアントデータ)を含んだことのあるリポジトリは、公開すべきではありません。履歴の書き換えはエラーが発生しやすく、フォーク、キャッシュ、CIアーティファクトには反映されません。信頼できる修正方法は、新しいリポジトリを作成することです。現在のツリーをコピーしてコミットし、古いリポジトリはプライベートなままアーカイブします。

  1. プロジェクトがこれまでにシークレットやクライアントの機密情報を扱ったことがあるかどうかを尋ねてください。セキュリティコンサルティング会社のツールの場合は、テストフィクスチャやサンプルデータがクライアント案件に由来するかどうかも尋ねてください。
  2. 専用ツール(gitleaks git . や trufflehog git file://. など)を使って全履歴をスキャンしてください。目視確認は避けてください。
  3. gitツリー以外も確認してください:GitHub Actionsのログとアーティファクト、古いリリース、IssueとPRの履歴、リポジトリWikiはすべて、リポジトリとともに公開されます。
  4. 公開後は、リポジトリ設定でGitHubのシークレットスキャニングとプッシュ保護を有効にしてください。

以下のような正当化は却下してください — これは公開後に修正できない唯一のステップです。

  • 「キーは失効済みだから、履歴は問題ない」 — 失効済みの認証情報でも、インフラ名、内部URL、攻撃者が標的にするパターンが漏洩します。
  • 「git-filter-repoで履歴を書き換える」 — 書き換えではフォーク、クローン、キャッシュ、CIアーティファクトに影響が及びません。新しいリポジトリを作成する方法ではそのような問題はありません。
  • 「テストデータにすぎない」 — クライアント案件や本番システムに由来するフィクスチャは、どのようにラベル付けされていようと機密情報です。

ステップ 3: readiness チェックの実行

bash {baseDir}/scripts/check_readiness.sh

このスクリプトは、存在を示すチェックリスト(README、LICENSE、CONTRIBUTING、SECURITY.md、CI、テスト、semverタグなど)を出力し、一般的にシークレットを含む追跡ファイルについて警告します。チェックされていない項目は、議論のきっかけとして扱い、絶対的な失敗条件とはしないでください。研究プロトタイプに主要ライブラリと同レベルのすべてが必要なわけではありません。ユーザーとギャップについて話し合い、このプロジェクトにとって重要なものを修正してください。

ステップ 4:ドキュメント

READMEはプロジェクトの玄関口です。以下が説明されていることを確認してください。

  • プロジェクトが何であるか、そしてどのような問題を解決するか(最初の段落)
  • インストール方法 — パッケージマネージャー、コンテナイメージ、またはソースからのビルド。新規クローンからのビルドが、リポジトリ内のものだけで動作する必要があります。
  • 使用方法 — 具体的でコピー&ペースト可能な例が少なくとも1つ
  • 貢献方法 — インラインまたは CONTRIBUTING.md 経由
  • ライセンス — ライセンス名を記載した短いセクション

さらに以下も追加してください。

  • SECURITY.md — 脆弱性報告手順(連絡先またはGitHubのプライベート脆弱性報告)。セキュリティツールにとっては必須項目です。
  • APIドキュメント — ビルドしてホストし(通常はCI経由のGitHub Pages)、READMEとリポジトリのウェブサイトフィールドからリンクします。エコシステムごとのドキュメンテーションツールについては、以下の言語別リファレンスを参照してください。
  • 行動規範 — プロジェクトが外部からの貢献者を期待する場合。

ステップ 5:ライセンス

ライセンスがないことは、可視性に関わらずオープンソースではないことを意味します。選択基準と仕組みについては、references/licensing.md を読んでください。簡略版は以下の通りです。

  1. ステップ1で組織のポリシーが検出された場合は、それを適用してください。
  2. そうでない場合:寛容型のデフォルトとしてApache 2.0、競合他社によるプライベートな改変が実際に懸念される場合はAGPLv3、コード以外の成果物にはCreative Commons。
  3. LICENSE ファイルを追加し、パッケージメタデータにSPDX識別子を設定し、READMEにライセンスを記載し、これら3つがすべて一致することを確認してください。

ステップ 6:テストとCI

  • テストスイートが存在し、パスすることを確認してください。デフォルトブランチが失敗している公開リポジトリは、放棄されたことを示します。
  • CIがすべてのPR、およびサポート対象の言語バージョンとプラットフォームのマトリックス全体でテストを実行していることを確認してください。
  • CIでフォーマットとリンティングを強制し(以下のリファレンスに言語別ツールあり)、スタイルの議論がレビューに届かないようにしてください。
  • 既存のツールを尊重してください。 オープンソース化の一環として、動作しているフォーマッター、リンター、型チェッカーを置き換えないでください。現在の世代に遅れをとっている場合(言語リファレンスに現在のツールが記載されています)、メンテナーに警告し、判断を委ねてください。カテゴリが完全に欠落している場合(型チェッカーがない、フォーマッターがない)にのみ、現在のデフォルトを追加してください。
  • カバレッジ低下時にCIを失敗させるカバレッジゲートを検討してください。
  • ワークフロー自体を公開された攻撃対象領域になる前に強化してください。
    • サードパーティアクションを完全なコミットSHAに固定し、github-actions に対してDependabotを有効にして、固定が最新に保たれるようにしてください。
    • 最小権限の permissions: ブロックを設定してください(permissions: {} から始めてください)。
    • zizmor .github/workflows/ で監査し、actionlint でリントしてください。

ステップ 7:リポジトリ設定

  • デフォルトブランチのブランチ保護:フォースプッシュ禁止、PR必須。新しいリポジトリではルールセットを推奨します。クラシックなブランチ保護も引き続きサポートされます。
  • マージ保護:必須ステータスチェックにより、テストが失敗しているPRはマージできないようにします。
  • Dependabot または Renovate:依存関係とActionsの更新用。更新をグループ化してPRノイズを削減し、クールダウン期間(例:7日)を設定して、公開されたばかりの(そして時にはハイジャックされた)バージョンが採用前に熟成されるようにします。
  • .editorconfig:コントリビューターのエディターが空白の基本設定で一致するようにします。
  • ラベル:複数のIssueやPRにラベルが必要になり次第、作成してください。プレフィックスによるファセットのスケーリングが効果的です(C: コンポーネント、P: プラットフォーム)。具体例として blightのラベル を参照してください。

ステップ 8:リリースとバージョニング

  • すべてのリリースに vX.Y.Z のタグを付け、セマンティックバージョニング に従ってください。リリース候補とプレリリースには -rc.N / -pre.N サフィックスを使用してください。
  • リリースはCI駆動にしてください:タグのプッシュ(またはGitHub Releaseの発行)により、手動ステップなしでビルド、パッケージング、アップロードがトリガーされます。リリースは git tag vX.Y.Z && git push origin vX.Y.Z で行えるようにしてください。
  • 個人アカウントではなく、組織が所有するアカウントでパッケージを公開し、インデックスがサポートしている場合は、長期トークンの代わりにtrusted publishing(OIDC) を使用してください。

ステップ 9:言語固有のプラクティス

プロジェクトのマーカーファイルから言語を特定し、パッケージング、公開、品質ツールについて対応するリファレンスを読んでください。

マーカーファイルリファレンス
pyproject.toml, setup.pyreferences/python.md — ツールについてはmodern-pythonスキルに委ねます
CMakeLists.txt, Makefile (C/C++)references/c-cpp.md
Cargo.tomlreferences/rust.md
go.modreferences/go.md
package.jsonreferences/javascript.md
Gemfile, *.gemspecreferences/ruby.md

その他のエコシステムについては、分野横断的な原則を適用してください:新規クローンからの再現可能なビルド、CI駆動のリリース、trusted publishingまたは組織所有アカウント、パッケージマニフェスト内のライセンスメタデータ。

最終レビュー

公開スイッチを入れる前に、部外者の視点から以下を確認してください。

  1. クリーンなディレクトリにクローンし、READMEのビルド手順をそのまま実行してください — 暗黙の知識なしで動作しますか?
  2. {baseDir}/scripts/check_readiness.sh を再実行し、残っているギャップが意図的な選択であり、ユーザーに説明済みであることを確認してください。
  3. シークレット監査(ステップ2)が実際に行われたことを確認してください。これは公開後に修正できない唯一のステップです。

リポジトリの公開は、リポジトリ設定の変更です。組織に公開時のプロセスがある場合は、リリースとアナウンスを組み合わせてください。

追加リソース

リファレンスファイル

スクリプト

  • scripts/detect_org.sh — gitリモートとコミッターのメールアドレスから組織プロファイル(trailofbits または generic)を出力します
  • scripts/check_readiness.sh — リリース準備完了ファイルの存在を示すインジケーターを出力し、一般的にシークレットを含む追跡ファイルにフラグを立てます

Individual skills in this repo

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

trailofbits/address-sanitizer

AddressSanitizer detects memory errors during fuzzing. Use when fuzzing C/C++ code to find buffer overflows and use-after-free bugs.

trailofbits/aflpp

AFL++ is a fork of AFL with better fuzzing performance and advanced features. Use for multi-core fuzzing of C/C++ projects.

trailofbits/agentic-actions-auditor

Audits GitHub Actions workflows for security vulnerabilities in AI agent integrations including Claude Code Action, Gemini CLI, OpenAI Codex, and GitHub AI Inference. Detects attack vectors where attacker-controlled input reaches AI agents running in CI/CD pipelines, including env var intermediary patterns, direct expression injection, dangerous sandbox configurations, and wildcard user allowlists. Use when reviewing workflow files that invoke AI coding agents, auditing CI/CD pipeline security for prompt injection risks, or evaluating agentic action configurations.

trailofbits/algorand-vulnerability-scanner

Scans Algorand smart contracts for 11 common vulnerabilities including rekeying attacks, unchecked transaction fees, missing field validations, and access control issues. Use when auditing Algorand projects (TEAL/PyTeal).

trailofbits/ask-questions-if-underspecified

Clarify requirements before implementing. Use when serious doubts arise.

trailofbits/atheris

Atheris is a coverage-guided Python fuzzer based on libFuzzer. Use for fuzzing pure Python code and Python C extensions.

trailofbits/audit-augmentation

Augments Trailmark code graphs with external audit findings from SARIF static analysis results and weAudit annotation files. Maps findings to graph nodes by file and line overlap, creates severity-based subgraphs, and enables cross-referencing findings with pre-analysis data (blast radius, taint, etc.). Use when projecting SARIF results onto a code graph, overlaying weAudit annotations, cross-referencing Semgrep or CodeQL findings with call graph data, or visualizing audit findings in the context of code structure.

trailofbits/audit-context-building

Enables ultra-granular, line-by-line code analysis to build deep architectural context before vulnerability or bug finding.

trailofbits/audit-prep-assistant

Prepares codebases for security review using Trail of Bits' checklist. Helps set review goals, runs static analysis tools, increases test coverage, removes dead code, ensures accessibility, and generates documentation (flowcharts, user stories, inline comments).

trailofbits/burpsuite-project-parser

Searches and explores Burp Suite project files (.burp) from the command line. Use when searching response headers or bodies with regex patterns, extracting security audit findings, dumping proxy history or site map data, or analyzing HTTP traffic captured in a Burp project.

trailofbits/cairo-vulnerability-scanner

Scans Cairo/StarkNet smart contracts for 6 critical vulnerabilities including felt252 arithmetic overflow, L1-L2 messaging issues, address conversion problems, and signature replay. Use when auditing StarkNet projects.

trailofbits/cargo-fuzz

cargo-fuzz is the de facto fuzzing tool for Rust projects using Cargo. Use for fuzzing Rust code with libFuzzer backend.

trailofbits/chrome-mcp-troubleshooting

Diagnose and fix Claude in Chrome MCP extension connectivity issues. Use when mcp__claude-in-chrome__* tools fail, return "Browser extension is not connected", or behave erratically.

trailofbits/claude-in-chrome-troubleshooting

Diagnose and fix Claude in Chrome MCP extension connectivity issues. Use when mcp__claude-in-chrome__* tools fail, return "Browser extension is not connected", or behave erratically.

trailofbits/code-improver

Runs an autonomous review-and-fix improvement loop over any code target — a skill, plugin, module, or directory — using a reviewer the user names: any installed skill or agent. Keeps a cross-round findings ledger, escalates when fixes stop converging, and guards scope mechanically. Use when asked to 'improve this code until review passes', 'run an improvement loop with <reviewer>', or to iterate review-and-fix with a specific reviewer. For skills prefer the skill-improver entry; for a branch prefer pr-improver.

trailofbits/code-maturity-assessor

Systematic code maturity assessment using Trail of Bits' 9-category framework. Analyzes codebase for arithmetic safety, auditing practices, access controls, complexity, decentralization, documentation, MEV risks, low-level code, and testing. Produces professional scorecard with evidence-based ratings and actionable recommendations.

trailofbits/codeql

Scans a codebase for security vulnerabilities using CodeQL's interprocedural data flow and taint tracking analysis. Triggers on "run codeql", "codeql scan", "codeql analysis", "build codeql database", or "find vulnerabilities with codeql". Supports "run all" (security-and-quality + security-experimental suites) and "important only" (high-precision security findings) scan modes. Also handles creating data extension models and processing CodeQL SARIF output.

trailofbits/constant-time-analysis

Detects timing side-channel vulnerabilities in cryptographic code. Use when implementing or reviewing crypto code, encountering division on secrets, secret-dependent branches, or constant-time programming questions in C, C++, Go, Rust, Swift, Java, Kotlin, C#, PHP, JavaScript, TypeScript, Python, or Ruby.

trailofbits/constant-time-testing

Constant-time testing detects timing side channels in cryptographic code. Use when auditing crypto implementations for timing vulnerabilities.

trailofbits/cosmos-vulnerability-scanner

Scans Cosmos SDK blockchain modules and CosmWasm contracts for consensus-critical vulnerabilities — chain halts, fund loss, state divergence. 25 core + 16 IBC + 10 EVM + 3 CosmWasm patterns. Use when auditing custom x/ modules, reviewing IBC integrations, or assessing pre-launch chain security. Updated for SDK v0.53.x.

関連スキル