Starlog について
Starlogは、コーディングエージェント向けのローカルなパッケージ審査用MCPサーバーとCLIです。日付付きの脆弱性、ライセンス、メンテナンス情報に加え、パッケージ検索や独自実装の移行提案を提供します。
主な機能
- 01CVE・ライセンス・保守状況の確認
- 02機能に基づくパッケージ検索
- 03独自実装の移行提案
- 04インストール時の情報表示フック
- 05ローカルCLIとMCPサーバー
活用シーン
- 01エージェントの推奨前に依存パッケージを確認
- 02機能に合う候補ライブラリを検索
- 03パッケージ導入時にリスクを把握
- 04組織のポリシーに沿って内部パッケージを審査
MCP 対応
MCPクライアントに `starlog_facts`、`starlog_search`、`starlog_advise` ツールを公開します。パッケージ情報の照会、候補の検索、独自実装の移行やパッケージ化に関する提案に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | はい | 必要なもの。例:"auth for Next.js SaaS" や "background job queue for Node.js" |
| stack | string | いいえ | 技術スタックとの適合性で絞り込みます。例:"next.js"、"python"、"react" |
| top_k | integer | いいえ | 返す結果の最大数。1~50(デフォルト:5) |
| context | string | いいえ | 自作と購入の比較分析に使用するプロジェクトの背景。例:"B2B SaaS on Next.js + Postgres, small team, needs SSO soon" |
| category | string | いいえ | カテゴリで絞り込みます。既知のカテゴリ:authentication、feature-flags、caching、realtime、background-jobs、email、orm-database。その他の文字列も動的カテゴリとして受け付けます(CLI と同等)。 |
| diversity_lambda | number | いいえ | 多様性と関連性のトレードオフ(0=多様性最大、1=関連性のみ)。省略するとデフォルトの多様性再ランキング(0.5)を使用します。 |
詳細
Starlog
AI コーディングエージェントがパッケージを使用する前に審査できます。CVE、ライセンス、メンテナンス状況などの信頼できる事実を、無料で、ローカルで、アカウント不要で確認できます。
コマンドを 1 つ実行するだけでパッケージを審査できます。インストールも API キーもアカウントも不要です。
npx starloghq facts ua-parser-js
次に、コーディングエージェント(Claude Code、Cursor、Copilot、Codex)に接続します。
npx starloghq init
ソース公開ライセンス BUSL-1.1 の下で、無料で使用、変更、セルフホストできます。2030 年に Apache-2.0 へ移行します。詳細 ↓
理由
AI コーディングエージェント(Claude Code、Cursor、Copilot)は、学習時の記憶からライブラリを選びます。これは、スクレイピングされたコードのスナップショットで、ある日付で固定され、タスクに合うか、現在安全かではなく、どれだけ頻繁に選択肢が現れたかで順位付けされています。その記憶では先週公開された CVE を知ることはできず、社内ライブラリを目にしたこともありません。それでも、エージェントはどちらの場合も同じ自信を持って推奨します。
この問題は数値で示されています。調査によると、AI が提案する依存関係の約 49%には既知の脆弱性があり、約 34%は完全な幻覚です。つまり、そのパッケージ自体が存在しません。また、認証など特定のカテゴリでは、エージェントは審査済みのライブラリを選ぶのではなく、独自コードを一から実装する傾向があります。
プロンプトを工夫しても、記憶の問題は解決できません。Starlog は、判断する時点でエージェントに信頼できる日付付きの事実を提示します。中心となる機能は名前を指定した審査です。starlog facts <package> を実行すると、既知の CVE/インシデント、SPDX ライセンスとリスク、メンテナンス状況(または正直に「記録されている事実はありません」)が返されるため、インストールするか、避けるか、選ぶかの判断を、記憶ではなく事実に基づいて行えます。API キーも登録も不要で、MCP サーバーおよびパッケージインストールフックとして、すべてお使いのマシン上で動作します。付属の starlog_search では、機能に合う候補パッケージを検索できます。事実を確認して、選んだパッケージを審査しましょう。
**実際にエージェントの判断は変わるのでしょうか。**はい。重要な対象(プライベートライブラリとカットオフ日以降のアドバイザリ)で、導入前後を測定しています。→ 検証済みの結果。
得られるもの
starlog_factsMCP ツール — エージェントがパッケージを推奨する前に、特定のパッケージに関する信頼できる事実を調べます。既知の CVE/サプライチェーンインシデント、SPDX ライセンスとライセンスリスク、メンテナンス状況(アクティブ/非推奨/放棄済み/侵害済み)、影響範囲が対象です。4 モデルのベンチマークでは、エージェントはパッケージを判断する際に、このツールを促されることなく呼び出し(再現率 100%、特異度 98%)、正しいインストール/回避/選択の判断に近づきました。すべてのレコードには情報源があり、検証済みで、日付が記載されています。各結果には「<date>時点」という行が表示されるため、古い「既知の脆弱性なし」を最新情報と誤認することはありません。レコードのないパッケージには、正直に「記録されている事実はありません」と返します。事実は独立した 3 つのレイヤーで構成され、クエリ時に組み合わされます。L1 機能/影響範囲(不変)、L2 評判/脆弱性/ライセンス/メンテナンス(可変。「as of」の鮮度情報を含む)、L3 組織ポリシー(適合性の判断)。STARLOG_PRIVATE_FACTSにl1/l2の独立した配列を含む JSON ファイル(内部パッケージ、ライセンス判断など)を指定し、STARLOG_POLICYに組織ポリシー({ org, rules })を指定することで、各レイヤーをローカルで上書きまたは拡張できます。STARLOG_API_KEYを設定すると、組織限定のオーバーレイとポリシーはホスト型の事実 API から取得されます(ローカルコーパスはオフライン時のフォールバックです)。starlog facts pushは、組織のオーバーレイとポリシーをアップロードします。docs/FACTS-CONTRACT.md をご覧ください。- パッケージインストールフック — エージェントが
npm install/pnpm add/yarn add/pip installを実行した瞬間に起動し、そのパッケージの事実(既知のインシデント、ライセンス、メンテナンス)を、エージェントがその上に何かを構築する前に提示します。これはアドバイザリー機能です。次の行動の参考情報を提供しますが、インストールをブロックするものではありません。レコードのないパッケージは、カバレッジ対象としてキューに追加されます。 starlog_searchMCP ツール — ディスカバリー:機能に対応する候補パッケージを見つけ(組織公認の選択肢を優先)、その後starlog_factsで指定した候補を評価します。ディスカバリーで既存の選択肢を見つけ、ファクトで評価します。starlog_adviseMCP ツール — エージェントが自作コードや繰り返し使われる機能コードを見つけたとき、安全なライブラリへのMIGRATE(例:自作の認証ではなく Clerk/Auth0/Supabase)を提案します。安全なコーパスの代替手段がない場合に限り、PACKAGEIZEを提案します。パターンは.starlog/patterns.jsonで追跡します。starlog facts/starlog search/starlog advise/starlog patternsCLI — 同じ事実、ディスカバリー、MIGRATE または PACKAGEIZE のアドバイスをターミナルから利用できます。- お使いのマシン上で動作 — エンジンとコーパスはローカルにあります。デフォルト(キー不要)の方法では、アカウント、API キー、ネットワークのいずれも必要ありません。
STARLOG_API_KEYを設定すると、ホスト型のファクト/検索ティアが有効になります(ローカルフォールバック付き)。starlog.dev でキーを取得し、starlog init --api-key <key>で設定してください。それ以外に送信されるのは、匿名のオプトアウト可能な使用状況テレメトリのみです。テレメトリをご覧ください。
このリポジトリには、エンジンに加えて、厳選された事実コーパスと、7 カテゴリにわたる 26 件の機能マニフェストを含むディスカバリーコーパスが含まれています(移行用の認証プレイブックを含む)。
クイックスタート
npx starloghq init
これにより、Starlog を Claude Code に接続し(Cursor、Copilot、Codex 用の指示ファイルも追加します)、次の設定を行います。
- MCP サーバーを
~/.claude/settings.jsonに追加します。starlog_facts(名前でパッケージを審査)、starlog_search(候補を検索)、starlog_advise(DIY パターンの移行またはパッケージ化を提案)を公開し、プロジェクトごとのプライベートオーバーレイ(${CLAUDE_PROJECT_DIR}/.starlog/*)をエージェントに接続することで、各プロジェクトで内部パッケージのファクトと検索を自動的に利用できるようにします。 - PostToolUse フックをインストールします。パッケージのインストール時に、そのファクトを表示します。
- 変更内容をすべてプレビューし、書き込み前に確認を求めます。冪等性があり、安全に再実行できます。
npx を入力せずに starlog コマンドだけを使いたい場合は、グローバルにインストールします。
npm install -g starloghq
starlog init
starlogの実行時にcommand not foundと表示される場合、npm のグローバル bin ディレクトリがPATHに含まれていません(npm の設定でよくある問題で、Starlog の問題ではありません)。export PATH="$(npm prefix -g)/bin:$PATH"を実行する(永続化するにはシェルのプロファイルに追加する)か、npx starloghq init/npx starloghq facts <pkg>を引き続き使用してください。これらはPATHの設定なしで常に動作します。インストール時にEACCES/権限エラーが表示された場合、インストールは完了していません。npm の prefix を修正するか、npxを使用してください。
--project を追加すると、プロジェクトの CLAUDE.md にも Starlog のガイダンスを追加できます。書き込まずにプレビューしたり、きれいに削除したりすることもできます。
starlog init --project
starlog init --dry-run
starlog init --uninstall
コーディングエージェントにセットアップを任せたい場合は、starlog init --agent-prompt を実行すると、そのまま貼り付けて使えるプロンプトが表示されます(プレビュー → キーを任意で設定 → 適用 → doctor → 再起動 → デモ)。このプロンプトに沿って、Claude Code、Cursor、Copilot、または Codex を非対話形式でセットアップできます。何も書き込みません。
Starlog の日付付きファクトと並行して、依存関係をリアルタイムにスキャンしたい場合は、starlog init --with-socket を実行すると、Socket の無料ホスト型 MCP サーバー(depscore)も接続できます。これにより、ファクトの「基準日」以降に開示された情報もエージェントが検出できます。エージェントがチェックするパッケージ名を socket.dev に送信することになるため、この機能はオプトインです。自分で設定した既存の socket エントリーが上書きされることはありません。また、--uninstall で削除されるのは Starlog が書き込んだエントリーだけです。
組織全体を一度にオンボーディングする
すべての社内リポジトリについてファクトを手作業で作成する必要はありません。チェックアウト済みのリポジトリがあるディレクトリを Starlog に指定すると、まとめてファクトを導出できます。
starlog org sync ~/code/my-org
検出された各公開パッケージ(npm の package.json および Python の pyproject.toml)について、次の情報を導出します。
- L2 ファクト →
.starlog/private-facts.json— ライセンスとライセンスリスク(マニフェストから取得するか、LICENSEファイルから検出)、git の最終コミット日時に基づくメンテナンス状況、source: analyzerと日付付きのas ofを記録します。エージェントは名前で審査します。 - 検索用コーパス →
.starlog/private-corpus.json— 各マニフェストの説明とキーワードを取り込み、エージェントが名前で審査するだけでなく、starlog_searchを使って機能から社内パッケージを検索できるようにします。 - 推奨ポリシー →
.starlog/policy.suggested.json— シグナルに基づいて候補にフラグを付けます(例:強いコピーレフト、ライセンス未宣言)。これらはエージェントが読み取らない提案です。内容を確認し、信頼できるものをstarlog facts policy <pkg> flagで採用してください。
ソースがマシンの外に出ることはなく、書き込まれるのは導出されたファクトだけです。既存のファクトに統合して提案を再生成するため、いつでも再実行して最新の状態にできます。公開名がないリポジトリや説明のないリポジトリは報告されますが、内容を捏造することはありません。既知の脆弱性のスキャンと、リモート GitHub 組織の列挙は今後のロードマップに含まれています。
ソースから
git clone https://github.com/starloghq/index.git starlog-index
cd starlog-index && npm install
npx tsx src/cli.ts facts ua-parser-js
MCP を手動で設定する
starlog init を実行すると、これが自動的に書き込まれます。手動で設定するには、~/.claude/settings.json に追加します。
{
"mcpServers": {
"starlog": {
"command": "npx",
"args": ["-y", "starloghq", "mcp"]
}
}
}
これは、MCP レジストリで使用されるものと同じ起動コマンドです。(ローカルのソースクローンから実行する場合は、代わりに node の参照先を dist/mcp.js にします。グローバルインストールの場合は $(npm root -g)/starloghq/dist/mcp.js、それ以外はクローンのパスを指定してください。)サーバーは 2 つのツールを公開します。starlog_facts(CVE、ライセンス、メンテナンス状況など、パッケージごとの信頼できる事実を照会)と、starlog_search(任意の category、stack、top_k フィルターを指定できる、自然言語による機能検索)です。
CLI の使い方
名前を指定してパッケージを審査する — これが主な用途です。ローカルで完結し、キーもネットワークも不要です。
starlog facts ua-parser-js
## ua-parser-js (npm)
**Effect surface:** Parses User-Agent strings; pure data transformation, in-process.
**Capabilities:** parsing
**Maintenance:** active
**License:** MIT (risk: none)
**Known vulnerabilities / incidents:**
- INCIDENT:ua-parser-js-2021 [critical] affected: 0.7.29, 0.8.0, 1.0.0 — Maintainer account hijacked (Oct 2021); these versions shipped a password stealer and cryptominer. Treat installs as account-compromise.
**Transitive risk:** Frequently a transitive dep — pin away from the three bad versions.
**Source:** GitHub Security Advisory; CISA alert Oct 2021 (hand)
**Verified:** as of 2026-06-01
記録のないパッケージには、推測ではなく、正直に 「記録されている事実はありません」 と返します。独立した l1/l2/l3 レイヤーを含む機械可読形式の出力には、--format json を追加します。
候補を検索して機能に合うものを見つけたら、名前を指定して facts で審査します。
starlog search "auth for a Next.js app"
# Library Category Score Solves
--------------------------------------------------------------------------------
1 Auth0 Next.js SDK authentication 71.36 Implements user authentication in Next.js applications using Auth0 ...
2 Clerk authentication 60.64 Provides a fully managed authentication and user management platfor...
検索では、キーワードランカーを使ってローカルで順位付けします。スコアは絶対評価で、強く一致するものは 70~80 点台になります。そのため、インデックスに含まれるカテゴリから外れたクエリには、確信ありげな誤回答ではなく、「強い一致なし」 と返します。キーがない場合、候補は同梱コーパスから取得され、ネットワークは使われません。STARLOG_API_KEY を設定すると、候補はホストされた完全なコーパス(api.starlog.dev/search)から取得され、同じローカルエンジンで順位付けされます。つまり、キーによって広がるのは検索対象であり、スコアの付け方ではありません。ホスト側で問題が起きた場合は、通知なしで同梱コーパスにフォールバックします。
--category <cat> Filter by category (authentication, feature-flags, etc.)
--stack <stack> Filter by stack affinity (e.g., "next.js", "python")
--top-k <n> Number of results (default: 5)
--format <type> Output format: table or json
--context <desc> Project context to tailor the "vs custom" rationale
社内パッケージ — 2 つのコマンドで実現する主な用途
モデルは、非公開の @acme/* パッケージの存在を構造的に知ることができません。そのため、事実情報を加えることで最も多くの判断が変わります(自作から組織公認ライブラリの利用へ)。JSON を手書きする必要はありません。2 つのコマンドでオーバーレイを作成でき、starlog init により、エージェントがすでにプロジェクトごとに読み込むよう設定されています。
# Make it discoverable — search will surface it (private-first) for a capability:
starlog corpus add @acme/flags --solves "Feature flags + remote config for Acme Node services" \
--category feature-flags --stack node --best-for "gradual rollout,kill switches"
# Make it vet clean — facts confirms it's active/maintained:
starlog facts add @acme/flags --status active --license MIT
これらのコマンドは、プロジェクト内に .starlog/private-corpus.json(検索用)と .starlog/private-facts.json(審査用)を書き込みます。starlog init によって ${CLAUDE_PROJECT_DIR}/.starlog/* が MCP サーバーの環境変数に設定されるため、コーディングエージェントはそのプロジェクト内で自動的にこれらを読み込みます。シェルでの export も、再実行も不要です。starlog doctor で設定を確認できます(接続設定と、各プロジェクトで作成された内容が表示されます)。完全な l1/l2 配列、組織の STARLOG_POLICY による許可/拒否判定、starlog facts push を使ったホスト API への送信など、より高度なオーバーレイについては、docs/FACTS-CONTRACT.md を参照してください。
仕組み
Starlog は、パッケージを独立した 3 つのレイヤーとして審査し、クエリ時に組み合わせます。「曖昧な単一のスコア」にまとめることはありません。
| レイヤー | 答える問い | 可変性 |
|---|---|---|
| L1 機能/作用範囲 | コードは何をするのか? | 不変 |
| L2 評判オーバーレイ | 何が知られているのか? — CVE、ライセンス、メンテナンス状況 | 可変。日付付きの as of(基準日)を保持 |
| L3 組織ポリシー | ここで許可されているか? | お客様のルールに基づき、許可/拒否/要確認 |
starlog facts <pkg> は、呼び出し元向けに 3 つのレイヤーを組み合わせて返します。情報がなければ、その旨を正直に返します。利用できるのは、MCP サーバー、CLI、またはインストールフックです。コーパスはローカルにあり、キャッシュ可能です。STARLOG_PRIVATE_FACTS(内部パッケージ、ライセンスの判断)と STARLOG_POLICY で、いずれのレイヤーも上書きまたは拡張できます。契約の詳細は、docs/FACTS-CONTRACT.md をご覧ください。
ディスカバリー(starlog_search)は独立した機能です。ローカルのキーワードランカーで、各ライブラリの solves/best_for/stack_affinity に照らして機能マニフェストをランク付けします。絶対スコアを報告するため、コーパスにない項目を検索した場合も、無理に候補を返すのではなく「有力な一致なし」と表示します。候補セットにはバンドルされたコーパスを使います。また、STARLOG_API_KEY が設定されている場合はホストされた全コーパスを使いますが、どちらの場合も同じローカルエンジンでランク付けします。エージェントがまだマニフェストのないパッケージをインストールすると、フックがそれを .starlog/pending.json に追加し、カバレッジ拡充のためにキューへ登録します。
全体像(各機能、エンジン、データソース、マシン外に送信されるテレメトリー)については、図解付きの docs/ARCHITECTURE.md をご覧ください。
エージェントの判断は変わりますか?
ファクトツールの真価は「データを返すか」ではなく、「エージェントの判断が変わるか」です。導入前後で測定しました(対照条件=想起のみ、処置条件=同じプロンプト+Starlog facts)。
- プライベートパッケージ(本領を発揮するケース): 有効な内部ライブラリが存在するという情報のみを与えた場合(「必ず使うこと」という指示はなし)、エージェントは独自実装をやめ、内部ライブラリを選びます。2/2 件で、独自実装から内部ライブラリへ移行。情報だけで実現しました。 モデルは構造上、お客様のプライベートな
@acme/*パッケージを思い出せません。存在を知る手段が facts です。 - 学習データのカットオフ後に判明したサプライチェーン情報:
posthog-nodeでは、facts が「悪意のある 4.18.1/5.11.3/5.13.3 を避けてバージョンを固定する」という情報を追加します。アドバイザリーMAL-2025-190925はモデルの学習データのカットオフ後に公開されたため、モデルには知り得ませんが、facts なら伝えられます。 - 不要な判断変更はありません: 安全な対照パッケージ(
zod、fastify)では判断は変わりません。また、曖昧で正解が確認できないnode-cacheは、意図的に成功として数えていません。あらゆる変更を成果として計上するツールは、信頼できません。
4 社のモデルベンダーを対象とした十分な検出力のあるベンチマークで裏付けられています。正しい採用/回避の判断は 約 20% から約 78% に向上し、促されない状態での採用率は 100% でした。
導入前後の全結果、誠実な適用範囲、そして破棄した実験 → docs/VALIDATION.md。
対応範囲
Facts コーパス — 42 パッケージ。 厳選され、日付が付けられています。既知のサプライチェーンインシデント(xz、event-stream、ua-parser-js、node-ipc、…)、注目すべき非推奨化、安全性の確認されたベースラインを収録し、それぞれに SPDX ライセンスとリスク、メンテナンス状況、as of(基準日)が記載されています。公開セットに手を加えず、STARLOG_PRIVATE_FACTS を使って組織向けに拡張できます(内部パッケージに対応)。
ディスカバリーコーパス — 7 カテゴリーにわたる 25 個の機能マニフェスト:
| カテゴリー | 例 |
|---|---|
| 認証 | Clerk、Auth0 |
| リアルタイム | Socket.IO、Ably、Pusher、Supabase Realtime、ws |
| ORM/データベース | Prisma、Drizzle、Kysely |
| バックグラウンドジョブ | BullMQ、Inngest、Bree |
| メール | Resend、SendGrid、Nodemailer |
| 機能フラグ | LaunchDarkly、PostHog、Flagsmith、ConfigCat、DevCycle |
| キャッシュ | ioredis、Upstash Redis、Keyv、Cacheable |
注: facts とマニフェストのデータは特定時点の情報です。情報源と日付は明示されていますが、あくまで意思決定を支援するものであり、絶対的な真実ではありません。判断の根拠として重要な情報は必ず確認してください。修正のプルリクエストも歓迎します。
テスト
npx vitest run
ユニットテストと E2E テストでは、スキーマ検証、コーパスの読み込みと整合性、facts/format の出力、起動した CLI の往復処理、検索ランキングをテストします。すべて API キーや外部バイナリなしで実行できます。
テレメトリー
Starlog は、どのコマンド、ツール、パッケージが使われているかを把握するため、匿名でオプトアウト可能な使用状況分析情報を収集します。送信される情報は、実行したコマンド/ツール(init/facts/search/doctor と、starlog_facts/starlog_search MCP ツール)、CLI/Node/OS のバージョン、検出されたエージェント、大まかな結果件数、検索した公開パッケージ名、検索クエリ/プロジェクトコンテキストです。メールアドレス、シークレット/トークン、絶対ファイルパス、IP アドレスは送信前に除去されます。
プライベートオーバーレイの使用時にブール値へ置き換えられる、組織内限定のパッケージ名、ユーザー名/ホスト名、ファイルの内容が送信されることは決してありません。また、CI とテストの実行時には自動的に無効になります。
初回実行時に通知が表示され、開示内容が変更されるたびに再表示されます(そのため、収集範囲の拡大が黙って行われることはありません)。MCP ツール経由では、サーバーは最初のツール結果に開示内容を含め(エージェントがユーザーに伝えます)、次の呼び出しから記録を開始します。そのため、MCP の分析情報が収集内容の提示前に収集されることはありません。いつでもオプトアウトできます。
starlog telemetry disable # persistent opt-out
starlog telemetry status # see current state + anonymous id
export STARLOG_TELEMETRY=0 # env opt-out
export DO_NOT_TRACK=1 # honored too
starlog <command> --no-telemetry # one-off
リンク
- ウェブサイト:starlog.dev
ライセンス
Business Source License 1.1 に基づくソース利用可能なライセンスです。詳細はLICENSEをご覧ください。OSI 認定のオープンソースライセンスではありませんが、自由に使用、変更、セルフホストできます(競合しない用途)。2030-06-01 に Apache-2.0 へ変更されます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。