
stride-gpt v0.19.0
OpenAIのGPTモデルを活用したAI駆動の脅威モデリングツールで、STRIDE手法に基づいて与えられたアプリケーションの脅威モデルを生成します。
STRIDE GPT は、STRIDE 手法に基づいて、与えられたアプリケーションの脅威モデルと攻撃ツリーを生成するために大規模言語モデル(LLM)を活用した、AI を搭載した脅威モデリングツールです。ユーザーは、アプリケーションの種類、認証方法、インターネットに公開されているかどうか、機密データを処理するかどうかなどのアプリケーションの詳細を提供します。モデルは提供された情報に基づいて出力を生成します。
目次
- プロジェクトをサポート
- 特徴
- エンタープライズ導入
- Open Security Summit でのトーク
- 変更履歴
- インストール
- リポジトリ構成
- 使用方法
- 出力例
- セキュリティのベストプラクティス
- 貢献
- ライセンス
プロジェクトをサポート
STRIDE GPT が役立つと思われましたら、プロジェクトへのサポートをご検討ください:
- ⭐ GitHub でリポジトリにスターを付けて、より多くの人がこのツールを見つけられるようにしてください。
- ☕ 開発とメンテナンスの継続を支援するために、コーヒーを一杯ご馳走してください。
特徴
- エージェンティックコードベース分析: CLI をコードベースに向けると、自律的で深い STRIDE 脅威モデルを取得できます。エージェントは計画、探索、サブシステム間での発見の統合を行います。
- CLI および対話型 REPL: タブ補完、履歴、リアルタイム進行状況を備えた本格的なターミナルエクスペリエンス。ブラウザは不要です。
- シンプルでユーザーフレンドリーな Streamlit ウェブインターフェース
- STRIDE 手法に基づく脅威モデルを生成
- エージェンティック AI サポート: OWASP Top 10 for Agentic Applications (ASI) との統合によるエージェンティック AI システム向けの特殊な脅威モデリング
- 生成 AI サポート: OWASP LLM Top 10 との統合による GenAI アプリケーション向け脅威モデリング
- MITRE ATT&CK & ATLAS マッピング: 脅威には標準化された敵対的テクニック ID(従来のインフラ攻撃には MITRE ATT&CK Enterprise、ML/LLM 固有の攻撃には ATLAS)が注釈として付与され、Markdown の列、HTML のリンク付きピル、SARIF の
mitre_attackプロパティとして表示されます。 - アーキテクチャパターン検出: アプリケーションの説明から RAG パイプライン、マルチエージェントシステム、コード実行環境、ツールエコシステムなどを自動検出(CSA MAESTRO に着想を得ています)。
- 組み込みの draw.io ダイアグラムエディター: 統合された diagrams.net エディターを使用して、STRIDE-GPT 内で直接アーキテクチャ図を作成および編集できます。外部ツールは不要です。ダイアグラムは XML として解析され、コンポーネント、接続、信頼境界が抽出されるため、画像分析のみよりもはるかに豊かなコンテキストが脅威モデル生成に提供されます。既存の画像アップロードワークフローは変更されません。デフォルトではエディターはホストされている
embed.diagrams.netから読み込まれます。セルフホスト型またはエアギャップ環境の場合は、STRIDE_GPT_DRAWIO_URL環境変数を使用して独自の draw.io を指定します。 - マルチモーダル: アーキテクチャ図、フローチャートなどを、サポートされているすべての視覚対応モデルへの脅威モデリングの入力として使用できます。
- データフロー図: アプリケーションの説明から DFD を生成し(またはアップロードした DFD 画像を解析)、Mermaid ソースをその場で編集し、確認済みの図を脅威モデルおよび攻撃ツリーのプロンプトに権威あるシステムモデルとしてフィードバックできます。CLI の
/analyzeも、その調査結果とともにシステムレベルの DFD を出力します。 - 攻撃ツリーを生成して可能な攻撃経路を列挙します
- 特定された脅威に対する可能な緩和策を提案します
- 特定された脅威に対する DREAD リスクスコアリングをサポートします
- 特定された脅威に基づいた Gherkin テストケースを生成します
- 包括的な脅威モデリングのための GitHub リポジトリ分析(GitHub Enterprise サポートを含む)
- 複数の出力形式: Markdown、JSON、SARIF(GitHub、GitLab、Azure DevOps、IDE にインポート可能)、および関係者と共有するための自己完結型 HTML ビュー
- 高度な推論モデルのサポート(OpenAI GPT-5.4/5.5 シリーズ、Anthropic Claude 4.6/4.8 Extended Thinking 対応、Google Gemini 3、Mistral Magistral シリーズ)
- LiteLLM による包括的な LLM プロバイダーサポート: OpenAI、Anthropic、Google AI、Mistral、Groq、DeepSeek、さらに LM Studio Server によるローカルホスティング
- データは保存されません。アプリケーションの詳細は保存されません。
- 簡単なデプロイのための Docker コンテナイメージとして提供
- 安全な構成のための環境変数サポート
エンタープライズ導入
組織向けに STRIDE-GPT をカスタマイズしたいですか? 包括的な 運用ガイド をチェックして、以下の方法を学びましょう:
- 🎯 組織のセキュリティ管理策と基準を注入する
- 📋 コンプライアンス要件に合わせて脅威モデルをカスタマイズする
- 🔧 STRIDE-GPT をフォークして社内にデプロイする
- 📊 環境に特化した、コンテキストを認識した実行可能な脅威モデルを取得する
このガイドには、チーム全体で AI を活用した脅威モデリングをスケールさせたい組織向けのステップバイステップの手順、コード例、デプロイパターンが含まれています。
Open Security Summit でのトーク
2024年1月、Open Security Summit で STRIDE GPT について講演しました。講演では、プロジェクトの始まり、核となる機能、最近のアップデート、将来の計画について説明しました。以下の完全なプレゼンテーションをご覧いただけます:
この動画は、STRIDE GPT の仕組みと、脅威モデリングの改善にどのように活用できるかを理解したい方にとって優れたリソースです。
変更履歴
バージョン 0.19 (最新)
--versionフラグ (#161):stride-gpt --versionがインストールされているバージョンを表示して終了するようになりました。また、対話型 TUI のバナーに実行中のバージョンが表示されるため、一目で現在のバージョンを確認できます。- 依存関係管理を uv に統合 (#155 を閉鎖):
uv.lockがすべての依存関係の単一の信頼できる情報源になりました。重複したrequirements.txtファイルは廃止されました。Docker UI イメージとセキュリティスキャンワークフローはuv exportを介してuv.lockからインストールするため、出荷されるものとスキャンされるものがロックされたものからずれることはなくなりました。pip install stride-gptユーザーには変更はありません。 - ドキュメント: README にサンプルの脅威モデル Markdown 出力 (#151) と対話型 REPL チートシート (#163) を追加しました。
バージョン 0.18
- 組み込みの draw.io ダイアグラムエディター (#132, #138): Streamlit Threat Model タブに diagrams.net エディターが組み込まれ、アプリ内でアーキテクチャ図をスケッチできるようになりました。保存時に図の XML が解析され(コンポーネント、接続、信頼境界)、脅威モデルのプロンプトに組み込まれます。GitHub 分析、画像アップロード、図エディター、AI 支援によるガイド付きビルダーが、単一の説明キャンバスの上のタブ付き「アプリケーションを説明する」セクションに統合されたため、オプションの入力が主な説明フィールドを圧迫しなくなりました。ガイド付きビルダーは、以前の静的なテンプレートとカバレッジチェックに代わり、選択したモデルを呼び出して説明をドラフトし、不足しているセキュリティ関連の詳細を提案するようになりました。セルフホスト型またはエアギャップ環境の場合、エディターホストは
STRIDE_GPT_DRAWIO_URLで設定可能(デフォルトはembed.diagrams.net)、iframe のpostMessageオリジンはそれにスコープされ、信頼できないダイアグラム XML はdefusedxmlで解析されます。 - DeepSeek プロバイダーサポート (#133 を閉鎖): DeepSeek が CLI セットアップウィザードと Streamlit UI の両方で第一級のモデルプロバイダーになり、
deepseek-v4-proとdeepseek-v4-flashを提供します。呼び出しは LiteLLM のネイティブdeepseek/統合を経由します(ホストされたエンドポイント、カスタムベース URL は不要)。キーはDEEPSEEK_API_KEYで設定します。 - データフロー図サポート (#56 を閉鎖): Streamlit UI の新しい「データフロー図」タブで、アプリケーションの説明から DFD を生成、視覚対応モデルを介してアップロードされた DFD 画像を解析、ライブプレビュー付きの編集可能な Mermaid ソースペインをレンダリングします。「この DFD を脅威モデルに使用する」チェックボックスをオンにすると、確認済みの図がセッション状態に保存され、後続の脅威モデルおよび攻撃ツリーのプロンプトに権威あるシステムモデルとして挿入されます。これにより、説明 → DFD → レビュー → 洗練された脅威モデルというループが閉じます。CLI の
/analyzeエージェントも、統合後にシステムレベルの DFD を生成し、Markdown レポート内の Mermaid ブロックとしてレンダリング、JSON のdata_flow_diagramフィールドに含められ、CDN から読み込まれた Mermaid ランタイムを介して HTML ビューに表示されます。DFD 生成はラップされており、不良な図が良いレポートを失敗させることはありません。 - GitHub リポジトリ分析エラーの丁寧な処理 (#92 を閉鎖): Streamlit UI がリポジトリ分析中の GitHub API 障害を、生のスタックトレースを表示する代わりにキャッチし、404(詳細な PAT スコープを含む、パブリックリポジトリでも 404 になる)、401、403/レート制限、ネットワークエラーに対して実用的なメッセージを表示するようになりました。リポジトリ URL は解析前に正規化(末尾の
/と.gitサフィックスを削除)されるため、.../repo/や.../repo.gitが誤って 404 になることはなくなりました。 - レポートと共に構造化された中間成果物 (#122 を閉鎖):
/analyzeまたは/quickに-o <path>が渡されると、レポートの横に JSON の兄弟ファイルが書き込まれます。<stem>.plan.json(AnalysisPlan)、<stem>.findings.json(サブシステムの発見、横断的脅威、データフロー図)、<stem>.run.json(モデル、構成ハッシュ、バージョン、タイミング、実際に読み込まれたリファレンスカード、完了したか呼び出し上限で切り詰められたかを示すrun_summaryを記録したRunManifest)。マニフェストは API キーとエンドポイントを除外し、ファイルシステムパスをマスクするため、コミットやチケットへの添付が安全です。-f形式フラグはレポート成果物のみを制御します。兄弟ファイルは常に JSON です。 - カンマ区切りの MITRE ATT&CK 復元 (#134 を閉鎖): ワーカーモデルが
MITRE_ATTACKを標準のリスト形状ではなくカンマ区切りの文字列(例:"T1190, T1059, AML.T0053")で返した場合でも、テクニック ID がドロップされる代わりに復元されるようになりました。以前は Markdown/HTML レポートに「MITRE ATT&CK」列が表示されていてもすべてのセルが空白になり、SARIF エクスポートでは ID が完全に失われていました。すべてのレンダラー(Markdown、HTML ピル、SARIF)と列表示チェックは、単一の正規化関数を経由するようになりました。また、テクニック ID ではない自由形式の文章はフィルタリングされるため、列に誤検出が含まれることはありません。 - 0.18.1 パッチ (#159 を閉鎖): 環境にクラウドプロバイダーのキーが存在しない場合に、LM Studio の呼び出しが
The api_key client option must be setで失敗する問題を修正しました。LM Studio は LiteLLM のopenai/プレフィックスを経由し、OpenAI SDK はapi_baseが localhost を指していても、キーなしではクライアントを構築しようとしないため、CLI は認証を必要としないプロバイダーに対してプレースホルダーを渡すようになりました。関連して、ワーカーティアの最終手段の環境スキャンはこれらのプロバイダーには適用されなくなりました。以前は設定されたANTHROPIC_API_KEYやOPENAI_API_KEYがapi_baseが指定するホストに送信されていました。これによりこのバグが隠蔽され、実際のキーがネットワークに送信されていました。LM Studio を使用していてそのようなキーを設定している場合、エンドポイントに送信されなくなります。
バージョン 0.17
- MITRE ATT&CK および ATLAS 統合 (#36 を閉鎖):
/analyzeおよび/quickによって出力される脅威が、MITRE ATT&CK Enterprise (v17.1) および MITRE ATLAS (2026.05) の標準化された敵対的テクニック ID を持つことができるようになりました。2 つの新しい段階的開示リファレンスカード(mitre_enterprise、mitre_atlas)が、エージェントにカタログ化された ID と名前のみを使用するよう指示し、ID の幻覚を排除します。カードはモデルの記憶からではなく、scripts/refresh_mitre_cards.pyを介して上流の STIX/YAML から再生成されます。テクニックは、Markdown テーブルのMITRE ATT&CK列、HTML のクリック可能な空色のピル、SARIF のproperties.mitre_attack配列としてレンダリングされます。 - HTML レポートのコンパニオン:
/analyzeおよび/quickは、Markdown / JSON / SARIF 出力に加えて、関係者と共有するのに適した自己完結型のブラウザ表示可能な HTML レポートを出力するようになりました。 - Anthropic Claude Opus 4.8: 既存の Opus 4.7 に加えて、Anthropic の最新のフロンティア級モデル
claude-opus-4-8のサポートを追加しました。アーキテクトモデルまたはワーカーモデルとして選択できます。 - UI イメージの統合: デュアル名前空間の Docker セットアップ(
mrwadams/stridegpt-ui)は廃止されました。Streamlit ウェブ UI はmrwadams/stridegptのみに配置されます。CLI ユーザーはコンテナを pull する代わりにpip install stride-gptを使用してください。 - 依存関係の衛生: 未使用の
mistralaiパッケージを削除しました(Mistral アクセスは既に LiteLLM を経由)。UI イメージのベースとしてpython:3.12-slimを更新し、curlを削除。PR #113–#115 にわたって 21 件の medium/high CVE アラートをクリアしました。 - コード品質のクリーンアップ: CodeQL の注意アラート(未使用のインポート、裸の
except、デッドコード)をクリアしました (#116)。
バージョン 0.16
- スタンドアロン CLI: レガシーな Streamlit ウェブ UI から分離された、
pip install stride-gptCLI として STRIDE-GPT の初回リリース。2 つの主要コマンド:/analyze(プランナー、サブシステムごとのツール使用エージェントループ、横断的統合パスを備えた自律的なエージェンティックコードベース分析)および/quick(記述されたアプリケーション説明からの単一ショット脅威モデル)。 - 段階的開示リファレンスカード:
genai(OWASP LLM Top 10)、agentic(OWASP ASI Top 10)、insider_threatカードは YAML フロントマターを介して自己記述。エージェントはlist_referencesで発見し、load_referenceでボディを取得します。 - 2 層モデルルーティング: アーキテクト + ワーカーモデルの分割によりコスト効率の良い分析を実現。フロンティアクラスのモデルは計画と統合に予約されます。
- 対話型 REPL: タブ補完、履歴、リアルタイム進行状況、ステータス行を備えた本格的なターミナルエクスペリエンス。
- マルチフォーマット出力: Markdown、JSON、SARIF(GitHub、GitLab、Azure DevOps、IDE にインポート可能)。
- 0.16.1 パッチ:
stride_gpt/__init__.pyで LiteLLM ロガーを ERROR に上げ、botocoreがない新規インストールで Bedrock/SageMaker のプリロード警告が表示されないようにしました。
以前のバージョン(0.15 以前)のリリースノートを表示するにはクリック
バージョン 0.15
-
エージェンティック AI アプリケーションサポート: OWASP Top 10 for Agentic Applications (ASI01-ASI10) との統合によるエージェンティック AI システムの脅威モデリングの包括的なサポートを追加しました。「エージェンティック AI アプリケーション」を選択してシステムを説明するだけで、LLM がアーキテクチャパターンを自動検出し、関連する脅威カテゴリを適用します。各 ASI リスクは、一貫した脅威分析のために適切な STRIDE カテゴリにマッピングされます。
-
生成 AI アプリケーションサポート: OWASP LLM Top 10 (LLM01-LLM10) との統合による GenAI アプリケーションの脅威モデリングのサポートを追加しました。「生成 AI アプリケーション」を選択してシステムを説明すると、LLM 固有の脅威分析を受けることができます。エージェンティック AI アプリケーションには、包括的なカバレッジのために LLM と ASI の両方のリスクカテゴリが含まれます。
-
MAESTRO に着想を得たアーキテクチャパターン検出: Cloud Security Alliance MAESTRO フレームワーク に着想を得て、アプリケーションの説明からアーキテクチャパターンを自動検出するエージェンティック脅威分析を強化しました。LLM は以下のパターン固有の脅威を特定し適用します:
- RAG/検索システム: ベクターストアのポイズニング、埋め込み操作、テナント間漏洩
- マルチエージェントシステム: エージェントのなりすまし、エージェント間メッセージ改ざん、連鎖的な侵害
- コード実行環境: サンドボックスエスケープ、コンテナ脱出、悪意のあるコード生成
- ツール/MCP エコシステム: 不正なツールプロバイダー、サプライチェーン攻撃、混乱した deputy の脆弱性
- 永続メモリ: メモリポイズニング、セッション間漏洩、状態操作
- 自律運用: 不正なエージェントの永続化、人間の監視の回避、暴走ループ
-
クロスレイヤー脅威分析: 脅威モデルにコンポーネント間の攻撃チェーンが含まれるようになりました。これは、あるアーキテクチャ層での侵害が他の層での攻撃を可能にする方法を示します(例: RAG ポイズニング → エージェント目標ハイジャック → ツール悪用 → データ流出)。
-
改善提案の強化: エージェンティックアプリケーションの場合、改善提案でエージェントフレームワーク、エージェント間通信プロトコル、サンドボックスメカニズム、サーキットブレーカー実装などの具体的なアーキテクチャの詳細を促すようになりました。
-
OpenAI モデルの更新: GPT-5.2 シリーズモデル (gpt-5.2, gpt-5.2-pro, gpt-5-mini, gpt-5-nano, gpt-5, gpt-4.1) に更新しました。非推奨モデル (gpt-4o, gpt-4o-mini, o3, o3-mini, o4-mini) を削除しました。
-
Anthropic Claude 4.5 モデル: Claude 4.5 シリーズ (claude-sonnet-4-5, claude-haiku-4-5, claude-opus-4-5) に更新しました。任意の Claude モデルで拡張思考機能を有効にする「Extended Thinking を有効にする」チェックボックスを追加しました。最大トークン数を 32k(標準)および 48k(思考モード)に増やしました。
-
Google Gemini 3 プレビュー: Gemini 2.5 モデルに加えて、Gemini 3 プレビューモデル (gemini-3-pro-preview, gemini-3-flash-preview) を追加しました。Gemini 3 モデルに拡張思考モードのサポートを追加しました。
-
Mistral モデルの更新: Mistral Large 3、Medium 3.1、Small 3.2、Ministral 3 (8B/14B)、Magistral 1.2 (Medium/Small) を含む、最新のバージョン管理された Mistral モデルに更新しました。
-
新しいプロジェクトロゴ: よりクリーンでミニマルなシールド + ニューラルネットワークデザインでブランディングをリフレッシュしました。
-
バグ修正: ダウンロードボタンをクリックした後に脅威モデルの出力が消える問題を修正しました。
バージョン 0.14.1
- セキュリティインフラストラクチャ: 包括的な自動セキュリティスキャンと強化を追加しました。以下を含む:
- GitHub Actions ワークフロー(Bandit(Python セキュリティ)、CodeQL(脆弱性検出)、pip-audit(依存関係スキャン)、Safety(パッケージ脆弱性)、Gitleaks(秘密検出)、Trivy(Docker イメージスキャン))
- SECURITY.md(48 時間の応答 SLA を持つ脆弱性報告プロセス、セキュリティのベストプラクティス)
- セキュリティ強化、リソース制限、本番対応の docker-compose.yml を備えた拡張された Docker 設定
- 自動化された毎週の依存関係更新のための Dependabot 設定
- 本番対応の機密情報管理ガイダンス(Docker Swarm シークレット、クラウドシークレットマネージャー)
- エンタープライズ運用ガイド: セキュリティ管理策、コンプライアンス要件、承認されたテクノロジースタック、エンタープライズ導入のためのデプロイパターンを含む、組織のコンテキストで STRIDE-GPT をカスタマイズするための包括的なガイドを追加しました。
バージョン 0.14- GPT-5シリーズサポート: OpenAIのGPT-5シリーズモデル(gpt-5, gpt-5-mini, gpt-5-nano)の包括的なサポートを全脅威モデリング機能に追加しました。これらの高度な推論モデルは、内部推論と出力生成の両方に適切なトークン配分を行い、分析能力を強化します。
- Anthropic Claude 4統合: Anthropicの最新Claude 4モデル(claude-opus-4-1-20250805, claude-opus-4-20250514, claude-sonnet-4-20250514)のサポートと機能強化を追加しました。
- GitHub Enterpriseサポート: GitHub Enterpriseリポジトリのサポートを追加しました。ツールはリポジトリURLに基づいて適切なAPIエンドポイントを自動検出・設定し、プライベートGitHub Enterpriseインスタンスでホストされているリポジトリの分析を容易にします。(@danielpops さん、コントリビューションありがとうございます!)
- 推論モデル統合の強化: GPT-5およびその他のOpenAI推論モデルにおいて、非推奨の
max_tokensの代わりにmax_completion_tokensを使用するようにパラメータ処理を更新し、OpenAIの最新API要件との互換性を確保しました。 - DREAD評価表示の改善: DREAD評価シナリオの説明における切り捨て制限を削除し、ユーザーがリスク評価テーブルで完全な脅威シナリオを表示できるようにしました(省略された"..."バージョンの代わりに)。
- セキュリティアップデート: Snykによって特定されたセキュリティ脆弱性に対処するため、依存関係を更新しました(anyio, zipp, tornado, requests, urllib3の更新を含む)。
- Mistralモデル更新: Mistralの最新モデル(Magistral Medium/Small(推論モデル)、Mistral Medium、Ministral 8B)のサポートを追加しました。
- Groqモデル更新: Groqモデル選択を更新し、OpenAI GPT-OSSモデル(120B, 20B)を追加、Llama 3.3 70Bおよび3.1 8Bを維持、DeepSeek R1を継続、Moonshot Kimi K2とQwen3 32Bを追加しました。
- Google Gemini 2.5 GAアップデート: Gemini 2.5モデル(Pro, Flash, Flash Lite)のプレビュー版を一般提供版に置き換えて更新しました。
- プロジェクトへの支援: サイドバーに「Buy me a coffee」ボタンを追加し、ユーザーがSTRIDE GPTの継続的な開発とメンテナンスを支援できるようにしました。
Version 0.13
- 新しいOpenAIモデル: OpenAIの最新モデル(gpt-4.1, o3, o4-mini)のサポートを追加し、o3-miniのサポートは維持。これらの推論モデルは詳細な分析能力を提供します。
- 新しいGoogle GenAI SDKへの移行: 新しいGoogle GenAI SDKに完全に移行し、非推奨のGoogle Generative AIライブラリへの依存をすべて削除しました。すべてのモジュールでGemini(Google AI)モデル統合をリファクタリングし、一貫性とパフォーマンスを向上させました。
- 推論モデルサポートの強化: 推論フレームワークを拡張し、すべてのOpenAI推論モデル(o1, o3, o3-mini, o4-mini)が脅威モデル生成、攻撃ツリー、緩和策、DREAD評価を含む全脅威モデリング機能で動作するようにしました。
- トークン制限の増加: 新しいモデルの拡張コンテキストを活用するため、トークン制限を更新しました。特にgpt-4.1(100万トークン対応)とo4-mini(20万トークン対応)を対象としています。
- マルチモーダルサポートの強化: 画像アップロードと分析が、Gemini 2.5、Claude 3、Claude 4モデルを含むさらに多くのモデルで動作するようになりました。すべてのビジョン対応モデルでさまざまな画像形式の分析サポートを拡大しました。
- 最新のGeminiプレビューモデルへの更新: 最新バージョンのGeminiプレビューモデルに移行し、パフォーマンスと機能を向上させました。
Version 0.12
- Claude 3.7統合: AnthropicのClaude 3.7モデルの包括的なサポートを全脅威モデリング機能に追加しました。分析中により詳細な推論を提供する革新的な「思考モード」も含まれています。
- GitHubリポジトリ分析の改善: GitHubリポジトリ分析機能を大幅に強化。インテリジェントなファイル選択、より優れたプログラミング言語サポート、分析中の進捗追跡を実装しました。
- GPT-4.5プレビューサポート: OpenAIのGPT-4.5プレビューモデルのサポートを追加し、モデル選択のガイダンスと説明を改善しました。
- パフォーマンス最適化: トークン使用量の追跡とトークン制限に近づいた際の警告システムを改善し、アプリケーション全体のパフォーマンスを向上させました。
Version 0.11
- LM Studio Serverサポート: LM Studio Serverをモデルプロバイダーとして使用するサポートを追加。ユーザーはOpenAI互換のAPIエンドポイントを使用して独自のローカルLLMを実行できます。
- Google Gemini攻撃ツリーサポート: Google Geminiモデルを使用した攻撃ツリー生成のサポートを追加し、ユーザーの選択肢を拡大しました。
- 新しいモデルサポート: 推論モデル(OpenAIのo1とo3-mini、Groq API経由のDeepSeek R1)およびGoogleが新たにリリースした高速推論用Gemini 2.0 Flashのサポートを追加しました。
- 攻撃ツリー生成の強化: 堅牢なJSON解析とMermaid図への変換により攻撃ツリー生成を改善し、出力の信頼性と視覚的魅力を向上させました。
- 動的モデル発見: LM Studio Serverの自動モデル発見機能を追加し、ユーザーがローカルインスタンス内の利用可能なモデルから選択できるようにしました。
- 脅威モデル生成の改善: 脅威モデル生成のガイダンスとプロンプトを強化し、より包括的で実用的な結果を生成できるようにしました。
- 構造化出力サポート: すべてのモデルプロバイダーでJSON出力処理を強化し、信頼性の高い脅威モデルとDREAD評価生成を保証します。
- UI強化: 新しいモデル設定に対応するためユーザーインターフェースを更新し、ローカルLLMの制限に関する警告メッセージを改善しました。
Version 0.10
- GitHubリポジトリ分析: STRIDE GPTはGitHubリポジトリの自動分析をサポートするようになりました。ユーザーがGitHubリポジトリURLを提供すると、ツールがREADMEと主要ファイルを分析し、より包括的な脅威モデルを生成します。
- 環境変数サポート: 環境変数からAPIキーやその他の設定を読み込むサポートを追加し、セキュリティとデプロイの容易さを向上させました。
- エラーハンドリングの改善: APIコールのエラーハンドリングとリトライ機構を強化し、信頼性を向上させました。
- UI強化: 新機能に対応し、全体的なユーザーエクスペリエンスを向上させるためユーザーインターフェースを更新しました。
Version 0.9
リリースハイライト:
- Mistral Client v1.0: STRIDE GPTはMistral Client v1.0を使用するようになりました。これにより、Mistral APIの最新バージョンで導入された破壊的な変更が解決されます。これにより、STRIDE GPTユーザーは引き続きMistral APIを脅威モデリングタスクに活用できます。
Version 0.8.1
このリリースでは以下のモデルのサポートを追加しました:
- GPT4o mini: OpenAIが最近リリースしたGPT4o miniモデルのサポートを追加しました。GPT4o miniはコスト効率の高い小型モデルでありながら、脅威モデリングタスクに対して高品質な応答を提供します。
- Gemini 1.5 Pro (安定版): ユーザーはGemini 1.5 Proモデルの安定版またはプレビュー版を選択できるようになりました。
Version 0.8
リリースハイライト:
- DREADリスクスコアリング: STRIDE GPTはDREADリスクスコアリングをサポートするようになりました。ユーザーは特定された脅威にDREADモデルに基づいてリスクスコアを割り当てることができます。この機能により、より包括的な脅威評価が可能になり、緩和策の優先順位付けに役立ちます。
- Gherkinテストケース: ユーザーは特定された脅威に基づいてGherkinテストケースを生成できるようになりました。この機能は脅威モデリングとテストの間のギャップを埋め、セキュリティ考慮事項がテストプロセスに統合されることを保証します。
- UI強化: ユーザーインターフェースをリフレッシュし、アプリケーションとその機能のナビゲーションと操作を容易にしました。
Version 0.7
リリースハイライト:
- マルチモーダル脅威モデリング: STRIDE GPTはOpenAIのGPT-4oおよびGPT-4-Turboモデルを使用したマルチモーダル脅威モデリングをサポートするようになりました。ユーザーはアーキテクチャ図、フローチャート、またはアプリケーションのその他の視覚的表現の画像を提供して、脅威モデリングプロセスを強化できます。
- Google AI統合: Google AI API経由でGemini 1.5 Proのサポートを追加しました。Geminiは一貫してJSON出力を生成しないため、一部のリクエストを再試行する必要がある場合があります。また、Googleの安全制限により、Google AIモデルを使用して攻撃ツリーを生成することはできません。
- コードベースのリファクタリング: コードベースの一部をリファクタリングし、保守性と可読性を向上させました。これにより、将来のリリースで新機能や拡張を追加しやすくなります。
- バグ修正: 軽微なバグ修正とエラーハンドリングの改善。
Version 0.6
リリースハイライト:
- Mistral API統合: ユーザーはMistral AIが提供するLLMを選択して、脅威モデル、攻撃ツリー、緩和策の提案を生成できるようになりました。これにより、OpenAIのGPTモデルに代わる選択肢が提供され、ユーザーにより大きな柔軟性と選択肢がもたらされます。
- プロンプトの改良: より多くの人がSTRIDE GPTを仕事で使用するようになったため、脅威モデルのプロンプトテンプレートを更新し、LLMがより包括的な出力を生成するように促すようにしました。ユーザーは各STRIDEカテゴリ内で複数の脅威が特定されることを期待できます。
- 公開ロードマップ: 今後の機能と改善の可視性を提供するため、公開ロードマップを作成しました。
- UI強化: 新しいMistral API統合に対応し、全体的なユーザーエクスペリエンスを向上させるため、UIにいくつかの軽微な更新を加えました。
Version 0.5
リリースハイライト:
- Dockerコンテナイメージ: パブリッククラウドおよびプライベートクラウドへのSTRIDE GPTのデプロイを容易にするため、ツールはDocker HubでDockerコンテナイメージとして利用可能になりました。
Version 0.4
リリースハイライト:
- 新しいGPTモデルの統合: アプリケーションは最新の"gpt-4-1106-preview"および"gpt-3.5-turbo-1106"モデルをサポートするようになり、脅威モデリングおよび攻撃ツリー生成において高度な機能とより正確な応答を提供します。
- OpenAI APIの直接呼び出し: STRIDE GPTは最近導入されたJSONモードを活用するため、OpenAI APIを直接呼び出すようになりました。これにより、脅威モデル生成時の構文エラーの可能性が大幅に減少します。
- 攻撃ツリー生成の改良: 攻撃ツリーの生成プロセスをより信頼性の高いものに全面改良し、Mermaid図生成時の構文エラーを最小限に抑え、視覚化の全体的な品質を向上させました。
- 新しいロゴとカラースキーム: リフレッシュされたカラースキームと新しいロゴ(DALL·E 3生成)。
- 継続的なバグ修正とパフォーマンス改善: 既存のバグに対処し、アプリケーションのパフォーマンスを最適化するために、少数の追加アップデートを行い、よりスムーズで効率的なユーザーエクスペリエンスを確保しました。
Version 0.3
リリースハイライト:
- 脅威緩和策: STRIDE GPTは脅威モデリングフェーズで特定された脅威に対する潜在的な緩和策を提案できるようになりました。これにより、ユーザーは特定された脅威の影響を防止または最小化する戦略を策定できます。
- ダウンロード可能な出力: ユーザーは生成された脅威モデル、攻撃ツリー、緩和策をMarkdownファイルとしてアプリケーションから直接ダウンロードできるようになりました。これにより、生成された出力の共有と文書化が容易になります。
- ユーザーインターフェースの改善: よりスムーズで直感的なユーザーエクスペリエンスを提供するため、ユーザーインターフェースをさらに洗練しました。アプリケーションレイアウトは、読みやすさと使いやすさのために最適化されています。
- GPTモデルの更新: STRIDE GPTはGPT-3.5-turboおよびGPT-4モデルの最新0613バージョンをサポートするようになりました。これらの更新されたモデルは、パフォーマンスの向上と生成出力の制御強化を提供します。
- バグ修正とパフォーマンス強化: 複数のバグに対処し、より安定した応答性の高いアプリケーションを実現するためにパフォーマンスの改善を行いました。
Version 0.2
リリースハイライト:
- 攻撃ツリー生成: 脅威モデルの生成に加えて、STRIDE GPTは提供された詳細に基づいてアプリケーションの攻撃ツリーを生成できるようになりました。これにより、ユーザーはアプリケーションの潜在的な攻撃経路をよりよく理解できます。
- 攻撃ツリーの可視化: これは実験的な機能で、ユーザーはMermaid.jsを使用してアプリ内で直接生成された攻撃ツリーを視覚化できます。これにより、STRIDE GPTインターフェース内でよりインタラクティブな体験が提供されます。
- GPT-4モデルサポート: STRIDE GPTはOpenAIのGPT-4モデルの使用をサポートするようになりました(ユーザーがGPT-4 APIにアクセスできる場合)。これにより、ユーザーはGPT技術の最新の進歩を活用して、より正確で包括的な脅威モデルと攻撃ツリーを生成できます。
- レイアウトと構成の改善: アプリのレイアウトを再構築し、ナビゲーションと使用を容易にしました。脅威モデルや攻撃ツリーなどの主要セクションは、折りたたみ可能なセクションに整理され、よりクリーンで直感的なユーザーエクスペリエンスを提供します。
Version 0.1
アプリケーションの初回リリース。
Installation
Option 1: pip (CLI only)```bash
pip install stride-gpt
これにより、`stride-gpt` コマンドがインストールされます。CLI と Streamlit Web UI は現在別々の製品となっています — `pip install stride-gpt` では Streamlit を含まない軽量な CLI がインストールされます。ソースから Web UI を実行するには、以下のオプション 2 を参照してください。
### オプション 2: ソースから
1. リポジトリをクローンする:
```bash
git clone https://github.com/mrwadams/stride-gpt.git
cd stride-gpt
```
2. [uv](https://docs.astral.sh/uv/) でインストールする (推奨 — `uv.lock` が依存関係の唯一の信頼できる情報源です): ```bash
# CLI plus the Streamlit web UI deps
uv sync
または、CLIのみをpipでインストールする: ```bash pip install -e .
3. (任意) 環境変数を設定する: ```bash
cp .env.example .env
.envを編集してAPIキーを追加するか、後でstride-gptを実行してインタラクティブREPLで/configコマンドを使用するか、Streamlit UIを介して設定します。
オプション3: Docker(Web UI)
StreamlitのWeb UIはDockerイメージとして提供されています:```bash docker pull mrwadams/stridegpt:latest
For the CLI, use `pip install stride-gpt` — there's no separate CLI image. If you need a sandboxed CLI, roll your own from a minimal Python base image.
## リポジトリのレイアウト
STRIDE-GPTは小さなmonorepoとして構成されています: 1つの共有Pythonライブラリと、それを利用する1つ以上のアプリケーションです。```
stride-gpt/
├── stride_gpt/ # shared library + Python CLI (core, agent loop, prompts, schemas, models)
├── apps/
│ └── web/ # Streamlit web UI
├── tests/ # pytest suite
└── pyproject.toml # single project file; web UI deps live in the `web` dependency-group
apps/ ディレクトリは、追加でデプロイ可能なフロントエンド用のスロットです — 例えば、将来の Node/TypeScript CLI は apps/web/ と並んで配置されるでしょう。Python CLI 自体は stride_gpt/cli.py に残ります。これは共有ライブラリと密結合しているためです。
Usage
CLI
エージェントによるコードベース分析 — エージェントが自律的にコードベースを探索し、分析を計画し、STRIDE 脅威モデルを生成します:```bash
Analyze the current directory
stride-gpt analyze .
Specify a model and auto-approve the analysis plan
stride-gpt analyze ./my-app --worker-model anthropic/claude-sonnet-4-6 -y
Export as JSON, SARIF, or browser-viewable HTML
stride-gpt analyze . -o report.json -f json # also writes report.html alongside stride-gpt analyze . -o report.sarif -f sarif stride-gpt analyze . -o report.html -f html
> すべての分析は、自動的にJSONとHTMLのコンパニオンを`~/.stride-gpt/reports/analyze/`に保存します。そのため、`-o`なしで実行しても、ブラウザで表示可能なビューが常にワンクリックで利用できます。
> **コストに関する注意:** エージェントによる分析は徹底的です。エージェントは調査中に多くのLLM呼び出しを行い、多くのファイルを読み取ります。トークンの使用量とコストは、コードベースのサイズと選択したモデルに応じて拡大し、大規模なリポジトリで最先端のモデルをフル実行すると高額になる可能性があります。実行前にプロバイダのダッシュボードで支出制限を設定し、最初のパスではより高速/安価なモデルを検討してください。
**クイックシングルショットモード** — テキスト説明から脅威モデルを生成します(Streamlit UIと同様ですが、ターミナル上で動作します):```bash
# Read description from a file
stride-gpt quick -i app-description.txt
# Pipe from stdin
echo "A web API that processes payments..." | stride-gpt quick
Interactive REPL — タブ補完と履歴を備えたインタラクティブセッションを起動します:```bash stride-gpt
REPL内で`/help`と入力すると、利用可能なコマンドとフラグが表示されます。バージョンは起動時にASCIIバナーの下に表示されます。完全なコマンドとショートカットのリファレンスについては、以下の[インタラクティブREPLチートシート](#interactive-repl-cheat-sheet)を参照してください。
#### インタラクティブREPLチートシート
`stride-gpt`(引数なし)でREPLを起動し、以下のコマンドとショートカットを使用します。
**コマンド** — プロンプトでスラッシュコマンドを入力します:
| コマンド | 機能 |
|---------|------|
| `/analyze [path]` | コードベースをSTRIDE脅威に対して分析します(ディレクトリパスだけでも可) |
| `/quick` | テキスト説明からクイック脅威モデルを作成 |
| `/reports` | 過去の分析レポートを一覧表示(`/reports <n>`で1件表示) |
| `/config` | 設定(モデル、プロバイダ、APIキー)の表示または変更 |
| `/help` | 利用可能なコマンド、フラグ、例を表示 |
| `/quit` | 終了(エイリアス: `/exit`, `/q`) |
`/analyze`、`/quick`、`/reports`はフラグを受け付けます:`-o`/`--output <path>`、`-f`/`--format <markdown\|json\|sarif\|html>`、`-y`/`--yes`、そして`/quick`の場合は`-i`/`--input <path>`。完全なリストは`/help`と入力してください。
**キーボードショートカット:**
| キー | 動作 |
|-----|------|
| `Tab` | スラッシュコマンドとファイルパスを補完 |
| `↑` / `↓` | コマンド履歴をスクロール |
| `→` / `End` | グレー表示された履歴候補を受け入れる |
| `Ctrl+L` | 画面とスクロールバックをクリア |
| `Ctrl+C` / `Ctrl+D` | REPLを終了 |
**インストールされているバージョンの確認:**```bash
stride-gpt --version # prints e.g. "stride-gpt 0.19.0" and exits
共通フラグ:
| フラグ | 説明 |
|---|---|
--version | インストールされているバージョン(stride-gpt <version>)を表示して終了します |
-o, --output | レポートをファイルに保存します |
-f, --format | 出力形式: markdown(デフォルト)、json、sarif、html |
-i, --input | アプリの説明をファイルから読み取ります(quick のみ) |
-y, --yes | 分析計画を自動承認します(analyze のみ) |
--worker-model | デフォルト階層のモデルで、ほとんどの呼び出しを処理します(例:anthropic/claude-sonnet-4-6)。省略した場合は保存済みの設定を使用します。 |
--architect-model | 計画/合成用のより強力なモデル(例:openai/gpt-5.4)。省略した場合は保存済みの設定を使用します。 |
--no-architect | この実行ではアーキテクト階層をスキップします。ワーカーがすべての呼び出しを処理します。 |
--app-type | プランナーが検出したアプリタイプを上書きします(analyze のみ):auto(デフォルト)、web、genai、agentic。 |
--max-llm-calls | 両階層のLLM呼び出しの合計を制限します(analyze のみ、0 = 無制限)。 |
--max-tool-calls | ツール実行の合計を制限します(analyze のみ、0 = 無制限)。 |
各階層は --worker-api-key / --worker-api-base / --worker-max-tokens(および --architect-* に相当するもの)も受け付けます。完全なリストについては stride-gpt analyze --help または stride-gpt quick --help を実行してください。
構造化中間ファイル — -o <path> が使用されると、3つのJSONファイルがレポートと一緒に書き込まれ、実行を監査したりダウンストリームツールで利用したりできます:
| ファイル | 内容 |
|---|---|
<stem>.plan.json | アーキテクトが作成した AnalysisPlan — サブシステム、重点領域、検出されたアプリタイプ(analyzeのみ)。 |
<stem>.findings.json | サブシステムごとの SubsystemFinding リスト、横断的な脅威、システムレベルのデータフロー図(analyzeのみ)。 |
<stem>.run.json | RunManifest — モデル、プロンプト+設定ハッシュ、エージェントが実際にロードした参照、git SHA、バージョン、タイミング。analyze と quick の両方で出力されます。 |
書式フラグ (-f) はレポート成果物のみを制御します。関連ファイルは常にJSONです。マニフェストと所見のファイルパスは編集されます(作業ディレクトリ以下の場合は ./…、$HOME 以下の場合は ~/…)。そのためマニフェストは安全に共有できます。~/.stride-gpt/reports/{analyze,quick}/ の自動アーカイブには影響しません。関連ファイルは -o を指定した場合のみ出力されます。
過去のレポートを表示:```bash stride-gpt reports # List recent reports stride-gpt reports 1 # View report #1 stride-gpt reports 1 -o r.json -f json # Export a report
### Streamlit Web UI
Web UIはCLIとは別のアプリです。次のコマンドで起動します:```bash
streamlit run apps/web/main.py
提供されたURLをブラウザで開き、画面の指示に従ってください。
Docker```bash
docker run -p 8501:8501 --env-file .env mrwadams/stridegpt
## サンプル出力
`stride-gpt analyze` および `stride-gpt quick` の実行ごとに、デフォルトでマークダウンレポートが出力されます(JSON、SARIF、および自己完結型HTMLビューは `-f` で利用可能)。このマークダウンは脅威をサブシステムごとにSTRIDEテーブルでグループ化し、コンポーネントにまたがる脅威については横断セクションを追加し、最後に実行サマリーで締めくくります。オプションの列(OWASP LLM/ASI、Insider Category、MITRE ATT&CK)は、実行時にデータが投入された場合のみ表示されます。
以下は、架空の決済APIに対する実行結果のマークダウンです。ツールを実行する前に、出力の形式を確認できます。これはモックアップではなく、レポートエンジンからの実際のレンダリングです。
<details>
<summary>サンプルマークダウン脅威モデル(クリックして展開)</summary>````markdown
# STRIDE Threat Model: acme-payments-api
> Generated by STRIDE-GPT on 2026-07-16T09:42:00Z
## Overview
A Python FastAPI service that accepts card payments, stores customer profiles in PostgreSQL, and calls a third-party payment processor. Authentication is handled by JWT bearer tokens issued by an internal auth service; the API is internet-facing behind an API gateway.
## Data Flow Diagram
```mermaid
flowchart LR
Client[Client App] -->|HTTPS + JWT| Gateway[API Gateway]
Gateway --> API[Payments API]
API -->|SQL| DB[(PostgreSQL)]
API -->|HTTPS| Processor[Payment Processor]
Authentication & Authorization
Files Analyzed
app/auth/jwt.pyapp/auth/dependencies.py
Threats
| Threat Type | Scenario | Potential Impact | MITRE ATT&CK |
|---|---|---|---|
| Spoofing | An attacker forges a JWT using a weak or leaked signing secret to impersonate another customer. | Full account takeover and unauthorized access to stored payment methods. | T1550.001 (Application Access Token) |
| Elevation of Privilege | A standard user calls an admin-only refund endpoint that only checks authentication, not role. | Unauthorized refunds and financial loss. | T1068 (Exploitation for Privilege Escalation) |
Recommendations
- Enforce role checks on every privileged route via a shared dependency, not per-handler logic.
- Rotate and store the JWT signing secret in a managed secrets store rather than an env file.
Payments & Data Storage
Files Analyzed
app/payments/routes.pyapp/db/models.py
Threats
| Threat Type | Scenario | Potential Impact | MITRE ATT&CK |
|---|---|---|---|
| Information Disclosure | Full card numbers are logged in request debug logs when a payment fails. | PCI-DSS violation and exposure of cardholder data to anyone with log access. | T1552.001 (Credentials In Files) |
| Tampering | The payment amount is taken from a client-supplied field and not re-validated server-side against the order. | A user pays less than the order total by editing the request body. |
Recommendations
- Redact PANs before logging and route logs through a PCI-scoped sink.
- Derive the charge amount from the server-side order record, never the request body.
Cross-Cutting Threats
| Threat Type | Scenario | Potential Impact | MITRE ATT&CK | Affected Subsystems |
|---|---|---|---|---|
| Denial of Service | No rate limiting on the payment endpoint lets an attacker exhaust the processor quota and DB connections. | Legitimate payments fail during the attack; possible processor throttling. | T1499 (Endpoint Denial of Service) | Authentication & Authorization, Payments & Data Storage |
Summary
- Total threats identified: 5
- Subsystems analyzed: 2
- Cross-cutting threats: 1
- LLM calls: 34
- Tool calls: 58
- Architect model: OpenAI API/gpt-5.4
- Worker model: Anthropic API/claude-sonnet-4-6
</details>
`stride-gpt quick` は、記述から同じテーブル形状を生成しますが、サブシステムごとの結果ではなく、単一の **Application** サブシステムにまとめられます。
## セキュリティのベストプラクティス
STRIDE GPT はローカルでのシングルユーザー展開を想定して設計されています。ツールを使用する際は:
### APIキーの保護
**APIキーは、アカウントに料金が発生する可能性がある機密の認証情報です。**
✅ **推奨事項:**
- UI を通じて API キーを入力する(ブラウザセッション内に留まる)
- 個人のマシンで利便性のために .env ファイルを使用する
- LLM プロバイダーのダッシュボードで支出制限を設定する
- API の使用状況とコストを定期的に確認する
- 共有コンピュータで使用する場合はセッションをクリアする
❌ **禁止事項:**
- .env ファイルをバージョン管理にコミットする(既に .gitignore に含まれています)
- API キーが表示されたスクリーンショットを共有する
- 信頼できない、または侵害されたシステムで STRIDE GPT を実行する
- API キーを他者と共有する
- 予期しない API 料金を無視する
### データプライバシーに関する考慮事項
脅威モデルを生成する際、STRIDE GPT は選択した LLM プロバイダーにデータを送信します:
- アプリケーションの詳細(タイプ、認証方法、アーキテクチャ)
- システムアーキテクチャの説明
- アップロードされたアーキテクチャ図/画像
- 生成された脅威モデルと緩和策
**これが意味すること:**
- OpenAI、Anthropic、Google などは、自社のプライバシーポリシーに従ってこのデータをログとして記録する可能性があります
- デモンストレーションには、汎用的な/架空のシステム詳細を使用することを検討する
- LLM プロバイダーのデータ保持とプライバシーポリシーを確認する
- 機密性の高いシステムの場合は、以下を検討する:
- ローカルモデル(LM Studio)の使用
- より厳格なプライバシー保証のあるプロバイダーの使用
- 入力前にシステムの説明をサニタイズする
### チーム/組織での展開向け
STRIDE GPT を複数のユーザー向けに展開する場合(デフォルトのユースケースではない):
- 認証/認可を追加する(デフォルトでは含まれていません)
- API キーにはシークレット管理サービスを使用する
- VPN または内部ネットワークの背後に展開する
- 追加の考慮事項については [SECURITY.md](https://github.com/mrwadams/stride-gpt/blob/master/SECURITY.md) ドキュメントを確認する
- データレジデンシとコンプライアンス要件を考慮する
- 生成された脅威モデルに対して適切なアクセス制御を実装する
### 依存関係のセキュリティ
依存関係を管理し、脆弱性を監視しています:
- Dependabot によって依存関係が定期的に更新されます
- すべてのコミットで自動セキュリティスキャンが実行されます
- セキュリティアドバイザリは GitHub の Security タブで追跡されます
- ローカルで既知の脆弱性を確認するには `pip-audit` を実行してください
自動セキュリティスキャン、脆弱性報告、セキュアな開発プラクティスを含む包括的なセキュリティ情報については、[SECURITY.md](https://github.com/mrwadams/stride-gpt/blob/master/SECURITY.md) を参照してください。
### セキュリティ問題の報告
セキュリティ問題を発見しましたか?責任を持って報告してください:
- GitHub の [プライベート脆弱性報告](https://github.com/mrwadams/stride-gpt/security/advisories/new) からセキュリティアドバイザリを作成する
- セキュリティ問題を公開しないでください
- 48時間以内に確認します
- 修正は優先的に行われ、迅速にリリースされます
## コントリビューション
プルリクエストは歓迎します。大きな変更の場合は、まず issue を開いて変更内容を議論してください。
## ライセンス
[MIT](https://choosealicense.com/licenses/mit/)
