mcpField
T
The Cartographer

The Cartographer

ローカル
github.comAI・エージェント21 週間前に更新

The Cartographer について

The Cartographer は、タスクの概要をローカルおよび同梱のエージェントスキルカタログと照合し、確認すべきスキルを絞り込む CLI/MCP サーバーです。スキルが多いエージェントの利用者向けで、候補の名前とパスを検証します。

主な機能

  1. 01タスク概要を全スキルカタログと照合
  2. 02候補を推薦し不確かな項目を区分
  3. 03スキル名とパスを検証
  4. 04モデル不要でスキルを検索・表示
  5. 05skills.sh からスキルを検索・確認
  6. 06Claude、Codex、API、コマンドを利用

活用シーン

  1. 01コーディング作業の開始前にスキルを選定
  2. 02モデルを使わずローカルスキルを検索
  3. 03カタログにないスキルを探して確認

MCP 対応

stdio MCP サーバーとして動作し、スキル推薦、ファイルの読み取り、カタログ検索、skills.sh でのスキル検索ツールを提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"sheepk95-the-cartographer": {
"command": "uvx",
"args": [
"the-cartographer"
]
}
}
}
起動コマンドuvx the-cartographer

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypithe-cartographer0.1.0

ツール

4

掲載時のツール一覧 · 1 週間前に更新

パラメーター型必須説明
fromstringいいえ質問者(任意)。
briefstringはいタスクの内容。2~10 行。

詳細

The Cartographer

タスクを始める前に、どのエージェントスキルが適しているか尋ねましょう。

ライセンス:Apache-2.0 Python 3.9+ 同梱スキル:193 MCP:stdio サーバー 依存関係:標準ライブラリのみ

エージェントが覚えておける以上のスキルを持っている人のためのツールです。 スキル(Claude Code や Codex のような SKILL.md フォルダー)を使うエージェントは、スキルが増えるほど性能が落ちます。毎回すべての説明がコンテキストに含まれるか、エージェントが名前から推測して誤ったスキルを開くかのどちらかです。The Cartographer は代わりに、モデルを一度呼び出します。タスクの短い概要をスキルライブラリ全体と照合し、まず読む価値のあるスキルをいくつか提示します。「該当なし」も有効な回答です。

大切なのは、あなた自身のスキルです。すでにあるスキルフォルダーを読み込みます。同梱の193個のスキルは、スターターライブラリです。

The Cartographer がプロパティベーステストに関するタスクを入力し、その後、選ばれた2つのスキルとそれぞれの理由、候補となるスキル1つ、そして注記が表示されている様子

お試しください(uv と Claude Code または Codex のログインが必要です。代わりに Claude API キーを使う場合は、uvx --from "the-cartographer[api]" the-cartographer ask "..." を実行してください):

uvx the-cartographer ask "Add property-based tests for our Python date-parsing module"

Claude Code 2.1.275 以降では、各タスクの開始時にプラグインが自動で尋ねます(uv が必要です): /plugin install the-cartographer --marketplace sheepk95/The-Cartographer。その他のインストール方法については、クイックスタートをご覧ください。

実際の回答
$ cartographer ask "Add property-based tests for our Python date-parsing module, and check the existing tests actually catch bugs."
PICKS:
- trailofbits/property-based-testing | .../skills/trailofbits/property-based-testing/SKILL.md | Hypothesis property tests for parsers, round-trips (parse/format) in Python | read: whole
- dotnet/test-gap-analysis | .../skills/dotnet/test-gap-analysis/SKILL.md | Polyglot check of whether existing tests would catch caller-visible bugs via pseudo-mutation | read: whole
MAYBE:
- trailofbits/mutation-testing | .../skills/trailofbits/mutation-testing/SKILL.md | Real mutation campaigns (mewt/muton) if actual mutant tooling is wanted, though those tools may not support Python | read: whole
ALSO GREP: python mutmut hypothesis
NOTE: No Python-specific mutation tool skill in catalogue; test-gap-analysis covers the "do tests catch bugs" part by manual pseudo-mutation.
--- end of cartographer answer ---

これは実際の実行結果です。Claude Code バックエンド、Sonnet、8.4秒、193個のスキルを含むカタログです(ここではパスを短縮しています)。 2つ目に選ばれたスキルは .NET 向けのスキルセットに含まれていますが、どの言語にも使える内容です。また、NOTE ではカタログにないものが率直に示されています。上のアニメーションは、Haiku を使って同じタスクを別途実行した結果で、2つ目に別のスキルが選ばれています。回答はモデルによって多少異なります。

カタログに必要なものがない場合は、cartographer find で skills.sh を検索し、cartographer install でスキルフォルダーに追加する前に、検索結果のライセンスとファイルを確認できます (詳細)。

仕組み

flowchart LR
    A["Agent starts a task"] -->|"2-10 line brief"| Q["cartographer ask<br/>or the ask_cartographer MCP tool"]
    S[("Bundled skills<br/>+ your skill folders")] --> C["Catalogue text<br/>sorted, no dates, cacheable"]
    C --> M{{"One model call<br/>anthropic / claude / codex / command"}}
    Q --> M
    M --> K["Check every name and path<br/>against the catalogue"]
    K --> R["PICKS / MAYBE / ALSO GREP / NOTE"]
    R --> A2["Agent reads the picked SKILL.md files"]
    M -.->|"no backend, timeout, bad answer"| U["exit 3: CARTOGRAPHER_UNAVAILABLE<br/>fall back to cartographer search"]
  • モデルはすべてのスキルを確認します。 埋め込みやキーワードによる候補の絞り込みで、モデルが検討できる内容を決めることはありません。モデルは共通する単語ではなく、タスクに必要な内容に基づいて適合性を判断します。
  • まずは精度を重視します。 プロンプトでは、タスクをこなすために必要な数だけ選ぶよう求め、適合性が疑わしいものは MAYBE に回し、PICKS: none も適切な回答として扱います。エージェントは渡されたスキルをすべて開くため、誤った選択は実際のコンテキストを消費します。
  • 出力を検証します。 回答に含まれる各名前は、出力前にカタログと照合されます。誤ったパスは修正され、創作された名前は NOTE とともに削除されます。すべての選択肢が創作されたものだった場合は、PICKS: none を出力するのではなく、終了コード 3 で終了します。
  • 繰り返し使うと低コストです。 カタログのテキストは決定的なので、anthropic バックエンドでは1時間のプロンプトキャッシュに保存されます。繰り返しの問い合わせではキャッシュ済み入力の料金が適用され、全額がかかるのはブリーフと回答だけです。
  • 処理を妨げません。 バックエンドの障害、タイムアウト、不正な形式の回答が発生すると、CARTOGRAPHER_UNAVAILABLE (reason) の1行を出力して終了コード 3 で終了し、エージェントはオフラインのキーワード検索にフォールバックします。
  • 分離されています。 モデルにツールは渡されません。また、CLI バックエンドはフック、スキル、MCP サーバーを無効にして実行されるため、「常にカートグラファーに問い合わせる」というルールが自分自身を呼び出すことはありません。
  • 任意のモデルを利用できます。 Claude API キー、Claude Code のログイン、Codex CLI、または標準入力を読み取る任意のコマンドを利用できます。
  • 193個のスキルを同梱しています。各スキルはライセンスとともに、上流リポジトリの固定コミットから変更せずにコピーされています。独自のスキルフォルダーも自動的に追加されます。
  • 不足しているスキルを見つけられます。 cartographer find はモデルを使わず、適切な頻度で skills.sh を検索します。cartographer install は検索結果を審査し(ライセンス、ファイル、出所)、実行することはありません。

クイックスタート

Python 3.9 以降と、モデルにアクセスする手段(Claude API キー、Claude Code、Codex、またはローカルコマンド)が1つ必要です。以下のいずれかの方法でインストールしてください(同梱のスキルはパッケージに含まれています)。

pipx install the-cartographer          # or: uv tool install the-cartographer
pip install the-cartographer           # into the current environment; with a Claude API key: pip install "the-cartographer[api]"
uvx the-cartographer doctor            # run it once without installing (uv); any command works: uvx the-cartographer ask "..."

続いて、次を実行します。

cartographer doctor            # skills found, catalogue size, which backends are ready
cartographer ask "Build a Three.js scene with a rotating textured planet and bloom"

コマンドは cartographer です。the-cartographer はパッケージ名と同じコマンドで、uvx と pipx run が探すのはこちらです。

ソースからコードやスキルを直接編集する場合:

git clone https://github.com/sheepk95/The-Cartographer
cd The-Cartographer
pip install -e .            # or pip install . for a regular install

同梱のスキルだけを使う新しいクローンで cartographer doctor を実行すると、次のように表示されます。

the-cartographer 0.1.1
bundled home: /path/to/The-Cartographer
skills: 193 (193 bundled, 0 local)
catalogue: 101163 bytes, about 28k tokens, id 3726e799ee4a
backend anthropic not ready: pip install anthropic
backend claude    ready
backend codex     ready
backend command   not ready: set CARTOGRAPHER_COMMAND
default backend: claude
installed by `cartographer install`: 0
finder cache: /home/you/.cache/the-cartographer/finder
  names list: none yet (the first `cartographer find` builds it from robots.txt and the sitemaps: about 4 requests)
  skill pages cached: 0 (0 KB)

まだ持っていないスキルを探すには(持っていないスキルを探すを参照):

cartographer find "Add property-based tests for our Python date parser and fuzz it for crashes"
cartographer install https://www.skills.sh/<owner>/<repo>/<skill>     # shows the licence and files, then asks

利用できるモデルがありませんか? 次のコマンドはオフラインで動作します。

cartographer search react performance      # keyword search over names and descriptions
cartographer list --origin local           # only your own skills
cartographer show obra/systematic-debugging
cartographer catalogue                     # the exact text the model reads

バックエンド:モデルは自由に選べます

バックエンド使用するもの必要なもの
anthropic公式 SDK を通じた Claude API。カタログはキャッシュされたシステムブロック(1 時間)ですpip install "the-cartographer[api]"(クローンからの場合:pip install ".[api]")、ANTHROPIC_API_KEY
claude印字モードの Claude Code(claude -p)を使用し、既存のログイン情報を使いますclaude コマンド
codexCodex CLI(codex exec)。読み取り専用サンドボックス、シェル無効、一時実行ですcodex コマンド
commandstdin からプロンプトを読み取り、回答を出力する任意のコマンド(ローカルモデル、その他の CLI)--command "..."、または CARTOGRAPHER_BACKEND=command と CARTOGRAPHER_COMMAND

実行するバックエンドは、--backend が指定されていればそれを使用し、指定されていない場合は --command を渡していれば command、それ以外は CARTOGRAPHER_BACKEND、さらにそれも設定されていなければ、表の順序で最初に利用可能なものを使用します。--model と --effort でも、フラグは環境変数より優先されます。モデルに渡されるのは、カートグラファー独自のプロンプトだけです。 CLI バックエンドでは、カスタマイズ、ツール、MCP サーバーは無効になります(claude --safe-mode --tools ""; シェルツールを無効にした codex exec --ignore-user-config -s read-only)。

デフォルト:API モデルは claude-opus-5-5、effort は medium です(サーバー側の拒否フォールバックは有効です)。CLI バックエンドでは、--model を渡さない限り、CLI のデフォルトモデルが使用されます(たとえば Claude Code では --model sonnet)。--effort には low から max まで、または effort 設定を送信しない none を指定できます。

command バックエンドでは、モデルのコンテキストウィンドウに、カタログのサイズを十分に上回る余裕が必要です(同梱のスキルを含めて約 30k トークンです。cartographer doctor で確認してください)。

エージェントを接続する

Claude Code:プラグイン(MCP サーバーと「まずカートグラファーに尋ねる」スキルを一度に導入します。uv が必要です)

/plugin marketplace add sheepk95/The-Cartographer
/plugin install the-cartographer@the-cartographer

Claude Code 2.1.275 以降では、次の1行で両方を設定できます: /plugin install the-cartographer --marketplace sheepk95/The-Cartographer。プラグインはリポジトリの独自コピーから uvx --from ${CLAUDE_PLUGIN_ROOT} cartographer mcp でサーバーを実行するため、別途インストールする必要はありません。初回起動時に一度だけビルドが行われ(約15秒)、その後の起動は1秒未満です。 付属のスキルは、重要なタスクを始める際にエージェントが ask_cartographer を呼び出すよう指示します。

Claude Code:MCP サーバーのみ

claude mcp add the-cartographer -- uvx the-cartographer mcp      # or, after pipx/pip install: -- cartographer mcp

(または、integrations/claude-code/mcp.json をプロジェクトに .mcp.json として配置します)。次に、integrations/claude-code/ask-the-cartographer/ を ~/.claude/skills/ にコピーするか、integrations/claude-code/CLAUDE.md-snippet.md の内容を CLAUDE.md に貼り付けて、各タスクの開始時にエージェントが尋ねるようにします。

Codex

codex mcp add the-cartographer -- uvx the-cartographer mcp      # or, after pipx/pip install: -- cartographer mcp

または、次の内容を ~/.codex/config.toml に追加します(integrations/codex/config.toml と同じです):

[mcp_servers.the-cartographer]
command = "uvx"
args = ["the-cartographer", "mcp"]
startup_timeout_sec = 60   # the first uvx start downloads the package
tool_timeout_sec = 600     # headroom for normal default attempts and process cleanup

次に、integrations/codex/AGENTS.md-snippet.md を AGENTS.md に追加します。Codex のサンドボックスではワークスペース外のファイルを開けない場合があるため、MCP サーバーは read_skill も提供します。 クライアントのタイムアウトには、通常のデフォルト試行とプロセスのクリーンアップに対応できる余裕があります。サーバーの --timeout を長くする場合は、クライアントのタイムアウトも延長してください。API SDK はタイムアウトを質問全体ではなく試行ごとに適用し、サーバーが指示する再試行の待機時間によっては、クライアントのタイムアウトを超えることがあります。

その他の場合

CLI を呼び出してください。終了コード0の場合は回答が出力されます。終了コード3の場合は CARTOGRAPHER_UNAVAILABLE (reason) が出力され、エージェントは cartographer search <words> にフォールバックしてください。終了コード2は、引数が正しくないか、概要が空であることを意味します。(cartographer search と show は一致する結果がない場合、終了コード1を返します。)--json を指定すると、回答、解析された選択項目、所要時間、(API バックエンドの場合は)トークン使用量が出力されます。概要が長い場合は --brief-file task.md を使用するか、概要に - を指定して標準入力から読み込んでください。

MCP ツール

cartographer mcp は、読み取り専用ツールを4つ備えた stdio MCP サーバーを起動します。

ツール機能
ask_cartographer(brief, from?)タスクに適した候補を返します(バックエンドを呼び出します)。構造化コンテンツとしても返します
read_skill(name, offset?, limit?)スキルの SKILL.md テキストを返します。大きなスキルの場合は行範囲を指定できます
search_skills(query)キーワード検索を行います。モデルの呼び出しはありません
find_skills(brief, offline?)カタログにない skills.sh 上のスキルを探します(ネットワークを使用し、モデルの呼び出しはありません。インストールは行わず、検索ツールのキャッシュにのみ書き込みます)

cartographer mcp は ask と同じモデルおよびカタログのオプション(--backend、--model、--effort、--timeout、 --command、--skills-dir、--no-user-skills、--no-bundled)を受け付けます。また、find_skills 用に --lexicon も受け付けます。find_skills は45秒後にページの取得を停止し、確認しなかった一致件数を通知します。失敗した場合はプロトコルエラーではなく、ツールエラーが返されます。インストールは CLI でのみ行えます。ディスクに書き込むため、ユーザーが cartographer install を実行します。ローカルスキルは ask、search、read のたびに再スキャンされるため、新しく追加、名前変更、削除したスキルはサーバーを再起動しなくても反映されます。read_skill が返すのは SKILL.md のみです。リンクされた参照ファイルやスクリプトを利用するには、引き続きファイルシステムへのアクセスが必要です。このツールでは提供されません。

stdio サーバーを起動できる任意の MCP クライアントで、uvx the-cartographer mcp(またはインストール後に cartographer mcp)を実行できます。MCP Registry での名前は io.github.sheepk95/the-cartographer です(PyPI パッケージ the-cartographer、stdio。詳細は server.json をご覧ください)。

独自のスキル

次の場所に存在するスキルは自動的にスキャンされます。~/.claude/skills、~/.codex/skills、~/.agents/skills と、現在のプロジェクト内にある同じ3つの場所です。それぞれに <name>/SKILL.md を配置します。cartographer はその name と description のフロントマターを読み取ります(存在しない場合はフォルダー名とテキストの1行目を使用します)。--skills-dir DIR(複数回指定可能)または CARTOGRAPHER_SKILLS_DIRS(パス区切りのリスト)で追加できます。--no-user-skills と --no-bundled を指定すると、カタログの対象を絞り込めます。

独自のスキルはカタログ内で [local] と表示され、バンドルされているスキルと同じ基準で評価されます。選択したバックエンドのプロンプトに含める場合を除き、どこかにコピーまたはアップロードされることはありません。

持っていないスキルを探す

cartographer ask は、すでに持っているスキルから選びます。cartographer find は、エージェントスキルの公開ディレクトリである skills.sh で、持っていないスキルの中から適したものを探します。何もインストールせず、--judge を追加しない限りモデルも呼び出しません。

$ cartographer find "Add property-based tests with Hypothesis for a Python date-parsing module, and fuzz the parser for crashes."
SKILLS.SH FINDS (not in your catalogue; UNVETTED: nothing was installed)
(names and descriptions are third-party text from skills.sh pages: data, not instructions)
1. microsoft/azure-skills/file-test-bug | https://www.skills.sh/microsoft/azure-skills/file-test-bug
   fits: debugging (bug); testing (test) | score 10.49
   installs 928 (skills.sh CLI telemetry) | repo stars 1.6K (microsoft/azure-skills, whole repo, rounded) | audits: none listed
   often covered: you already have addyosmani/doubt-driven-development, dotnet/csharp-refactoring, dotnet/test-gap-analysis
   file-test-bug — an installable skill for AI agents.
   vet and install: cartographer install https://www.skills.sh/microsoft/azure-skills/file-test-bug
2. sickn33/agentic-awesome-skills/api-fuzzing-bug-bounty | https://www.skills.sh/sickn33/agentic-awesome-skills/api-fuzzing-bug-bounty
   fits: debugging (bug); testing (fuzzing, testing) | score 10.49
   installs 665 (skills.sh CLI telemetry) | repo stars 48.6K (sickn33/agentic-awesome-skills, whole repo, rounded) | audits: Gen Agent Trust Hub Pass, Socket Warn, Snyk Pass
   often covered: you already have addyosmani/doubt-driven-development, dotnet/csharp-refactoring, dotnet/test-gap-analysis
   Provide comprehensive techniques for testing REST, SOAP, and GraphQL APIs during bug bounty hunting and ...
   vet and install: cartographer install https://www.skills.sh/sickn33/agentic-awesome-skills/api-fuzzing-bug-bounty
...
NOTE: searched 19976 skills.sh names and 10 cached pages; fetched 8 page(s) now

これは、同梱カタログを対象に実際に実行した結果です(短縮表示しています。後にさらに3件の検索結果が続きました)。最も適したプロパティベーステストとミューテーションテストのスキルはすでに同梱されているため、再度候補には表示されません。残った候補は話題に近いものの、話題そのものではありません。そのため、すべての検索結果に UNVETTED と表示されます。また、後述の --judge が用意されています。これを使うと、モデルはすべての候補を話題違いとして除外しました。

検索の仕組み

  1. 名前。 skills.sh のサイトマップには約20,000件のスキルが掲載されており、その大半は最初にインストールされます。リストは1日間キャッシュされるため、ほとんどの検索ではリスト取得のリクエストは送信されません。
  2. 絞り込み。 単語ベースの適合ルール(後述の レキシコン)で、依頼内容に対する各スキル名のスコアを算出します。名前、または以前の cartographer install によってすでに持っているスキルは除外されます。
  3. いくつかのページを取得。 最適な候補のうち、現在の skills.sh のページだけを取得します。1回の検索で最大8ページまでで、1日間キャッシュされます。ページには説明、インストール数、リポジトリ、スター数、セキュリティ監査の情報が記載されています。
  4. 再スコアリングして、説明に基づいてスコアを算出し、人気度の基準を適用して、最適な候補を最大5件表示します(--limit は最大10)。

人気度の基準では、GitHub リポジトリに由来し、監査結果に Fail がなく、インストール数が1,000以上、またはリポジトリのスター数が200以上かつインストール数が100以上、または認証済みの所有者でインストール数が100以上の場合にのみ、検索結果に残します。「よくカバーされている」には、すでに持っているスキルのうち、概念が共通するものが表示されます。新しいものをインストールする前に確認してください。

オプション

オプション意味
--offlineネットワークを使わず、キャッシュ済みの名前とページのみを使用します
--judgeモデルを1回呼び出し(任意のバックエンド)、候補リストを読み込んで、それぞれを理由付きで KEEP または DROP と判定します
--lexicon FILE組み込みのレキシコンに追加するか、置き換えます
--limit N検索結果を最大 N 件表示します(1~10、既定値は5。それ以外は終了コード2)
--json検索結果を JSON 形式で表示します
--brief-file Fファイルから依頼内容を読み込みます。標準入力の場合は - を指定します(依頼内容に - を指定した場合も標準入力を読み込みます)

find では ask のカタログオプション(--skills-dir、--no-user-skills、--no-bundled)も使用できます。モデルオプション(--backend、--model、--effort、--timeout、--command)は --judge の場合にのみ使われます。

終了コード:0 は検索結果を表示、1 は該当なし(または judge がすべて除外)、2 は引数の誤り、レキシコンの誤り、または依頼内容が空、3 は CARTOGRAPHER_UNAVAILABLE(キャッシュがなくネットワークに接続できない、キャッシュフォルダーを使用できない、またはページ取得に失敗したか上限に達したため、一部の名前が一致した候補を確認できず検索結果がない場合。後でもう一度実行してください)、--judge 用のバックエンドがない場合、または JUDGE FAILED です。

judge。 --judge は、依頼内容と候補リスト(skills.sh の名前、説明、数値)を1回の呼び出しでバックエンドに送信します。サードパーティのテキストはデータとしてフェンスで囲みます。フェンスを閉じる文字列が含まれないよう、テキスト内(および依頼内容内)の < と > は似た文字に置き換えられ、双方向制御文字とゼロ幅文字は削除されます。応答には、各候補 ID の判定と新しいリクエスト ID を含む、1つの JSON オブジェクトが必要です。読み取れない応答の場合はエラーが明示され(JUDGE FAILED、終了コード3)、候補リストは判定なしとして表示されます。「すべて除外」と表示されることはありません。項目に問題が1つでもある場合、その項目は UNJUDGED と表示されます。judge の判定によって何かがインストールされることはありません。

skills.sh に配慮する

ファインダーは、skills.sh の robots.txt で許可されている公開ページとサイトマップのみをゆっくり読み込み、取得した内容をキャッシュします。skills.sh の利用規約では、公開 API の適切な利用とキャッシュを歓迎し、レート制限を回避するスクレイピングはブロックされる可能性があると警告しています。ページの読み取りについては具体的に言及していません。ファインダーはこの API を使用せず(robots.txt で /api/ が禁止されているため)、次のとおりです。

  • ほかのリクエストを行う前にrobots.txtを読み込みます(1日以内のコピーがあれば再利用します)。また、/api/や/searchなど、許可されていないパスには決してリクエストしません。
  • 1回に1つのリクエストを送信し、リクエストの間隔を少なくとも1.3秒空けます(既定では1.5秒、バルクインデックスでは少なくとも3秒)。同じキャッシュフォルダーを使うすべてのcartographerプロセスで共有し、フォルダー内のロックファイルを通じて制御します。
  • HTTP 429または403を受け取ると停止し、Retry-Afterの時間(少なくとも1分)が経過するまで、または403の場合は6時間、該当ホストへの追加リクエストを送りません。
  • UTC基準の日次上限を設けています。findとinstallではスキルページが300件、robotsまたはサイトマップへのリクエストが12件です。バルクインデックス(スキルページとリポジトリページ)には別途、1日2,000件の上限があります。これらの上限はCARTOGRAPHER_FINDER_DAILY_PAGES、CARTOGRAPHER_FINDER_DAILY_LISTS、CARTOGRAPHER_FINDER_DAILY_BULKで変更できます。
  • If-None-Match/If-Modified-Sinceを使って再確認するため、変更のないページへのリクエストは304になります(findでは古くなったページ、finder index --refreshではキャッシュ内のすべてのページが対象です)。
  • ホワイトリストに登録されたURLだけにリクエストします。対象はskills.shのページとサイトマップで、installではGitHub APIへの呼び出し1回とtarball 1つも含まれます。ホワイトリスト外へのリダイレクトや、robots.txtで許可されていないパスへのリダイレクトは拒否されます。追跡する各ホップの前に待機し、skills.sh上のホップは日次上限に加算されます。GitHubトークンはリダイレクト先に決して送信しません。検索でGitHubにアクセスすることはありません。
  • 次の識別情報を送信します。the-cartographer/<version> (+https://github.com/sheepk95/The-Cartographer; skill finder; reads robots.txt; one request at a time, at least 1.3 s apart)。

The Cartographerはskills.shまたはVercelと提携しておらず、いずれからも推奨されていません。

共有フェッチロックのアップグレード。 アップグレードする前に、古いCartographerのインスタンスをすべて停止してください。同じキャッシュ上で古いバージョンと新しいバージョンを混在させないでください。古いバイナリはロックファイルを削除する可能性があり、新しいOSロックにも参加しません。新しいfinder/fetch.lockは意図的に永続化されます。プロセスが終了すると、クラッシュ後も含めてOSロックは自動的に解放されます。プロセスや待機中のプロセスが使用している可能性がある新しいロックファイルは削除しないでください。ロックの種類はマーカーで判別されます。Windowsのバイト範囲ロックとPOSIXのflock(WSLを含む)は、同じキャッシュを共有できません。WindowsとWSLのロックは共有ファイルシステム上で互いを確実に排除できないため、所有プロセスが終了した後でも、互換性のないマーカーは拒否されます。古いPID/トークンのマーカー、以前の汎用マーカー、不明なマーカー、または初期化されていない空のファイルも、変更せずに拒否されます。そのキャッシュを使うすべてのプロセスと待機中のプロセスが停止してから、互換性のないマーカーまたは古いマーカーを手動で削除して、再試行してください。次回の起動時に、現在のプラットフォーム用のマーカーが作成されます。初回の初期化が中断された場合も空のファイルが残ることがあり、その場合はすべてのプロセスを停止してから復旧する必要があります。古いバージョンと新しいバージョン、またはWindowsとWSLを併用する場合は、異なるCARTOGRAPHER_CACHEパスを設定してください。各キャッシュではリクエスト上限、間隔、ブロック状態が個別に管理されるため、それらを合わせた通信量は調整されません。

任意のバルクインデックス。 cartographer finder index --top 2000は、サイトマップの順序で最もインストールされているスキルのページを取得するため、find --offlineと名前の絞り込みで説明を利用できます。robots.txtをその場で読み込み、中断した位置から再開し、findが取得中は処理を一時停止します。429または403を受け取った場合、あるいは25回連続で失敗した場合は停止します。Ctrl-Cで安全に中断できます。既定の間隔(--gap、3秒。これが最小間隔でもあります)では、2,000ページの取得に約2時間かかります。日次のバルク上限により、より大きなインデックスは数日かけて取得されます。--repo-pagesのリクエストもこの上限に加算されます。これは自動的に開始されることはありません。デーモンもスケジュールもありません。cartographer finder statusでキャッシュと今日のリクエスト数を確認できます。

findのインストール
cartographer install https://www.skills.sh/<owner>/<repo>/<skill>   # or: cartographer install <owner>/<repo>[/<skill>]
  1. 図の数を確認するため、スキルのページを読み込みます(--no-page でスキップできます)。監査に失敗すると拒否します(--allow-audit-fail)。

  2. GitHub API にコミットを問い合わせるか(または --ref <full sha> を使用)、そのコミットの tarball をダウンロードします。

  3. スキルフォルダー(名前または --path で指定)とライセンスを特定します。ライセンスは、SKILL.md の license フィールド(SPDX 識別子、または MIT OR Apache-2.0 のような単純な式)と、ライセンスファイルが存在する最も近いフォルダー(スキルフォルダーから各親フォルダーを経てリポジトリのルートまで)のものです。2つのライセンスが異なる場合は両方が適用され、拒否対象のライセンスが1つでもあれば拒否します。

  4. ライセンスの根拠、各ファイルのサイズ、およびスクリプト、バイナリ、大容量ファイル、実行可能ビット(削除対象)のフラグを表示します。シンボリックリンクとデバイスは書き込みません。絶対パスまたは .. を含むパス、あるいはメンバー名にバックスラッシュまたはコロンを含むアーカイブは拒否します。また、どのシステムでも同じ方法で書き込めないファイル名(aux、COM1、COM¹、CONIN$、<>:"|?* などの Windows デバイス名、末尾のピリオドまたはスペース、大小文字だけが異なる名前)や、メンバー数が 100,000 件を超えるアーカイブ、展開後のサイズが 2 GB を超えるアーカイブも拒否します。

  5. エージェントホストが単独で実行できるエージェント設定は拒否します。

    • スキルフォルダー直下の .claude-plugin/、.codex-plugin/、.cursor-plugin/、.claude/、hooks/ フォルダー、および .mcp.json、.lsp.json、settings.json、settings.local.json、hooks.json、plugin.json。
    • SKILL.md のフロントマターにある hooks または allowed-tools。引用符付き、空白入り、または allowed_tools と記述されたものも対象です。また、チェックで読み取れない YAML 形式のフロントマター({...} のフローマッピング、? key、<< のマージキー、アンカー、タグ、エスケープされたキー)。
    • SKILL.md のシェルコマンド:空白の後に続く !`...`、またはどこかで ! を使って開かれたコードフェンス。

    内容を確認してから --allow-agent-config を指定してください。同じ名前がフォルダー内のより深い階層にある場合や、agents/、commands/、.codex/、.cursor/、.vscode/ がどこかにある場合は、拒否せず警告として一覧表示します。ホストがこれらを読み込むのは、プラグインまたはプロジェクトのルートからのみです。これらはパターンチェックであり、安全側に倒して拒否しますが、すべての形式を検出できる保証はありません。

  6. ライセンスが欠落、不明、非商用、派生物の作成不可、ソースの利用可能性が制限されている、またはプロプライエタリである場合は拒否します。許容的なライセンス文に利用条件(たとえば「商用利用不可」「個人利用のみ」「再配布不可」)が付いている場合や、CARTOGRAPHER_REFUSE_LICENCES に記載されている場合(たとえば AGPL-3.0,GPL-3.0)も拒否します。ライセンスは文言に基づいて分類されるため、表示された根拠を確認してください。スキルを使用する権利がある場合に限り、--allow-any-licence で上書きできます。その場合は、記録にその旨が記載されます。コピーレフトライセンス(GPL、LGPL、AGPL、MPL、EPL、CC-BY-SA、OFL)は、1行の注記とともに許可され、"copyleft": true として記録されます。

  7. 書き込み前に確認を求めます(確認を省略するには --yes を指定します。端末がない場合は推測せずに拒否します)。既存のフォルダーは上書きせず、拒否します。ファイルはまず非表示の一時フォルダーに書き込み、各パスがその中に収まっていることを確認してから、目的の場所に名前を変更します。

デフォルトでは ~/.agents/skills/<name> にインストールします(変更するには --dest と --name を指定)。カタログはすでにこの場所を参照しています。スキルフォルダー内のすべてのファイルをコピーします。.github/ などの非表示ファイルも含みます(.git/ のみ除外)。上限は 500 ファイル、20 MB です。ライセンスの判断根拠となるライセンス文は、フロントマターにライセンス名が記載されている場合も、必ずコピーされます。スキルの親フォルダーにあるライセンスファイルと NOTICE ファイルは、スキル内に同名のファイルがある場合は <name>.upstream として、スキルの隣に配置されます。記録の licence_text にそれらのファイル名が記載されます。上流にライセンス文がない場合は、install がその旨を表示します。カートグラファーがダウンロードしたものを実行することはありません(ただし、上記のエージェント設定は除きます)。 終了コード:0 はインストール済み、1 は拒否(ライセンス、監査、エージェント設定、安全でない、または移植性のない名前、200 MB を超える tarball、フォルダーが存在する、拒否を選択した、スキルが見つからない)、2 は引数が不正、3 はダウンロードまたは書き込みの失敗(ネットワーク、レート制限、アーカイブを読み取れない、ディスク)で、変更はありません。

インストールされた各スキルには .cartographer-source.json が付与されます。これには、リポジトリ、コミット、フォルダー、証拠とテキストファイルを含むライセンス、コピーレフトとエージェント設定のマークおよび警告、各ファイルの SHA-256、フラグ、インストール時点の skills.sh の数値が含まれます。cartographer list では各スキルの取得元が表示され、cartographer doctor では、インストール済みスキルのうち、ファイルが変更されたものやライセンスに上書きが必要だったものが報告されます。拒否はキャッシュ(finder/refused.jsonl)に記録されるため、find で候補に表示されなくなります。ライセンスを理由に拒否した場合、ライセンスがスキルのフォルダーより上の階層で見つかったとき、またはライセンスが見つからなかったときは、リポジトリ全体がブロックされます。それ以外の場合は、そのスキルのみがブロックされます。--judge によるプロンプトインジェクションのフラグが付いた場合は、そのスキルのみがブロックされます。

数値の意味
  • インストール数は、skills.sh CLI のテレメトリーに基づきます。この CLI を通じたインストールのみを数えており、簡単に水増しできるため、おおまかな指標として捉えてください。
  • スター数は、skills.sh に表示されるリポジトリ全体の GitHub スター数です(「1.6K」のように丸められています)。大規模なコレクションリポジトリのスター数は、その中のすべてのスキルに反映されます。
  • 監査は、skills.sh がそのスキルについて掲載しているセキュリティスキャンです。「Pass」はレビュー済みという意味ではありません。ファイルを読んでください。
レキシコン

適合ルールはレキシコンに基づいています。レキシコンには、各概念(テスト、デバッグ、セキュリティ、フロントエンド、動画など)を示す単語、別名、プラットフォームの単語が含まれます。検索では、依頼内容と少なくとも1つの概念が共通している必要があります。希少な概念ほど重く評価され、スキル名に含まれる語句は追加で加点されます。プラットフォームやフレームワーク(Godot、visionOS、Vue、Django など)を含むスキルは、依頼内容に同じものが明記されていない限り除外されます。

JSON ファイルで拡張できます(--lexicon FILE または CARTOGRAPHER_LEXICON)。リストは組み込みの項目に追加されます。また、"replace": true を指定すると空のレキシコンを初期状態として使います(人気度の基準値はデフォルトのままです)。

{
  "concepts": {"testing": "hypothesis pbt", "parsing": "parser parsers grammar tokenizer"},
  "aliases": {"pbt": "property-based"},
  "conflict": "elixir",
  "not_conflict": "django",
  "blocked": [{"repo": "someone/some-repo", "reason": "licence unclear"}],
  "min_score": 1.8,
  "max_rows": 5
}

その他のキー:needs({"video": "specific"} を指定すると、依頼内容とスキルの両方に specific の単語が含まれる場合にのみ、その概念がカウントされます)、context、name_weight、same_term_bonus、および bar(人気度のしきい値:min_installs、min_stars、min_installs_with_stars、min_installs_verified)。id(owner/repo/skill)を含む blocked エントリは、そのスキルを除外します。repo を含むエントリは、理由にライセンス、マルウェア、シークレットなどが含まれている場合、リポジトリ全体を除外します。それ以外の理由では注記が追加されるだけです。

制限事項。 最初の画面では名前しか確認しないため、名前にレキシコンの語句が1つもないスキルは、一括インデックスを通じてのみ見つかります。単語を照合するのであって、意味を理解するわけではありません。意味の判定には --judge を使います。skills.sh のページとサイトマップは公開 API ではないため、変更によって解析ができなくなることがあります。その場合、ファインダーは推測せず、見つかる数が減ったことを注記で知らせます。

同梱スキル

59 の上流リポジトリから集めた 193 個のスキルです。内容の一部を紹介します。

分野例
Blender と 3D アートimpertio-studio/blender-core-api、ifbars/blender-modeling-workflow、roble3/blender-uv-texturing、arjun988/geometry-nodes
Unitygamedev-skills/unity-csharp-scripting、hissal/unity-testing、wshobson/unity-ecs-patterns、scenario-labs/scenario-unity-performance
Three.js と WebGLcloudai-x/threejs-fundamentals、cloudai-x/threejs-postprocessing、mengto/threejs-landscape
ゲームデザインgamedev-skills/game-feel、gamedev-skills/level-design、gamedev-skills/save-systems、mengto/design-action-combat
シェーダーと VFXminimax-ai/shader-dev、adevra/urp-hlsl-templates、omer-metin/vfx-realtime
テストtrailofbits/property-based-testing、trailofbits/mutation-testing、dotnet/test-gap-analysis、nowsprinting/test-designing-guide
デバッグ、レビュー、リファクタリングobra/systematic-debugging、mattpocock/code-review、wondelai/working-with-legacy-code、warpdotdev/merge-risk
セキュリティレビューtrailofbits/variant-analysis、trailofbits/audit-context-building、trailofbits/spec-to-code-compliance
エージェントのワークフローobra/writing-plans、obra/subagent-driven-development、muratcankoylan/context-compression、anthropics/skill-creator、anthropics/mcp-builder
ライティングとマーケティングcoreyhaines31/copywriting、coreyhaines31/launch、blader/humanizer、mattpocock/writing-for-agents
動画と音声calesthio/editing-montage、elevenlabs/music、jakeschincariol/yt-retention、heygen-com/cut-the-curve
データと Websupabase/supabase-postgres-best-practices、laguagu/postgres-semantic-search、zaggino/writing-json-schemas、openai/playwright、anthropics/frontend-design

cartographer list --origin bundled ですべて確認できます。catalogue/bundled.json には、各スキルの上流リポジトリ、固定されたコミット、パス、ライセンス、各ファイルの SHA-256 が記録されています。THIRD_PARTY_NOTICES.md には、それぞれの入手元へのリンクがあります。

  • 変更なし。 各フォルダーには、そのコミット時点のスキルの上流ファイルがバイト単位でそのまま格納されています(.github/ などの隠しツールフォルダーは除外)。スキルフォルダーに上流の LICENSE ファイルや NOTICE ファイルがない場合は、これらも追加されています。python tools/vendor.py verify で 1078 個のファイルハッシュをオフラインで検証できます。python tools/vendor.py fetch で上流から再ダウンロードできます。
  • 再配布可能なライセンス。 MIT(154)、Apache-2.0(32)、CC-BY-SA-4.0(6)、Unlicense(1)です。非商用、ライセンス不明、またはベンダーによる制限付きライセンスのスキルは除外しました。
  • 同梱前から使用。 すべて、メンテナー自身のエージェント環境で日常的に使用されていました。そのうち 120 個には、インストール時のレビュー記録があります(bundled.json の "review": "recorded")。残る 73 個には "review": "in use" のマークが付いています。
  • スクリプトを実行する前に読む。 一部のスキルにはヘルパースクリプトが含まれています。Cartographer はこれらを実行しませんが、スキルの指示に従ってエージェントが実行する場合があります。他のサードパーティー製コードと同じように扱ってください。
  • 不要な場合は? --no-bundled を指定すると、自分のスキルのみが使われます。

回答の仕組み

PICKS:
- <name> | <SKILL.md path> | <why, one line> | read: whole
- <name> | <SKILL.md path> | <why> | read: LARGE read in parts
MAYBE:
- <name> | <SKILL.md path> | <why it might fit> | read: whole
ALSO GREP: <2-4 words>
NOTE: <one line>
--- end of cartographer answer ---
  • プロンプトで選べるのは最大6件で、明確に適合するものに限られます。MAYBEは最大3件です。適合するか疑わしいものはMAYBEに分類され、エージェントはその最初の40行だけを読みます。
  • タスクにスキルが不要な場合(ファイルのコピー、固定コマンドの実行など)は、PICKS: none とします。
  • 回答を出力する前に、すべての名前をカタログと照合します。パスが誤っていれば修正し、作り上げた名前はNOTEを付けて削除します。選んだものがすべて架空の場合、回答は3(CARTOGRAPHER_UNAVAILABLE)で終了します。
  • 選択行には4つのフィールド(name、path、why、read: ...)がすべて必要です。読み取り可能な行がなく、明示的なnone(none、none.、(none)、または短い理由を添えたnone)もないPICKSセクションは、3で終了します。
  • 50,000バイトを超えるSKILL.mdは、モデルの推測ではなくファイルサイズに基づいてLARGEと判定されるため、エージェントは分割して読みます。
  • briefはデータです。カートグラファーにはその中の指示に決して従わないよう伝えてあり、カートグラファーには操作するためのツールもありません。
  • 固定の終了行により、呼び出し元のスクリプトは回答が完了しているか、途中で切れているかを判別できます。

他の方法との比較

スキルを選ぶ方法はほかにもあり、それぞれ異なるトレードオフがあります。

方法スキルの選び方トレードオフ
エージェントのプロンプトにすべての説明を含めるエージェントが名前と短い説明をもとに、タスクの途中で判断する毎回のターンでトークンを消費し、リストが大きくなるほど難しくなります
キーワード検索または埋め込み検索(スキルルーター、組み込みのスキル検索)タスクのテキストと説明の類似度に基づくクエリごとのコストがかからず高速ですが、単語の一致で選ばれ、候補リストによって検討対象が決まります
Cartographer1回のモデル呼び出しですべての説明をbriefと照合し、その後、回答を検証するタスクごとにモデル呼び出しが1回(数秒)必要で、品質は説明の内容に左右されます

Cartographerはオフライン時の代替手段としてキーワード検索(cartographer search、search_skills)も備えているため、両方を使えます。

コスト、速度、制限

  • カタログのサイズ。 同梱スキルを含めると約100~130 KB(およそ28~35kトークン)です。各SKILL.mdのフルパスを記載するため、インストール先によって変わります。スキル1件あたり約150~180トークンで、スキルを追加するたびに増えます。自分のサイズはcartographer doctorで確認できます。
  • キャッシュ。 同じスキルのカタログテキストはバイト単位で同一のため、anthropicバックエンドでは、1時間以内の再質問時に入力料金全額を再度支払うことなく、プロンプトキャッシュから読み込まれます。CLIバックエンドでは、CLI独自のキャッシュが適用されます。
  • 速度。 上の例では、Claude CodeバックエンドはSonnetで8.4秒で回答しました。より大きなモデルや高いeffortでは、さらに時間がかかります。
  • 品質は説明の内容に左右されます。 説明に用途が書かれていないスキルは、モデルにとっても人にとっても選びにくくなります。
  • 選択はしますが、作業の確認はしません。 検証機能が保証するのは、すべての名前とパスが実在することだけであり、選択が正しいことではありません。モデルがスキルを見落としたり、適合度の低いものを含めたりすることはあります。

設定

変数意味
CARTOGRAPHER_BACKENDanthropic、claude、codex、または command
CARTOGRAPHER_MODELバックエンドのモデル ID またはエイリアス
CARTOGRAPHER_EFFORTlow ~ max、または none
CARTOGRAPHER_COMMANDcommand バックエンドのコマンド
CARTOGRAPHER_REQUESTER--from のデフォルト値(依頼者)
CARTOGRAPHER_SKILLS_DIRS追加のスキルフォルダー
CARTOGRAPHER_HOMEskills/ と catalogue/ を格納するフォルダー(デフォルト:インストール済みバンドル。存在しない場合はクローン)
CARTOGRAPHER_CLAUDE_BIN、CARTOGRAPHER_CODEX_BINCLI が PATH 上にない場合のパス
CARTOGRAPHER_CODEX_KEEP_CONFIGCodex の設定(カスタムプロバイダー)を無視せず保持する場合に設定
CARTOGRAPHER_CACHEfind と install のキャッシュフォルダー(デフォルト:Windows では %LOCALAPPDATA%\the-cartographer、それ以外では $XDG_CACHE_HOME/the-cartographer または ~/.cache/the-cartographer)。finder のファイルはその finder/ フォルダー内にあります
CARTOGRAPHER_LEXICONfind と find_skills 用の語彙ファイル
CARTOGRAPHER_FINDER_DAILY_PAGES、CARTOGRAPHER_FINDER_DAILY_LISTSfind と install における、skills.sh ページリクエスト(300)と robots/sitemap リクエスト(12)の1日あたりの上限
CARTOGRAPHER_FINDER_DAILY_BULK一括インデックスにおける、スキルおよびリポジトリのページリクエストの1日あたりの上限(2000)
CARTOGRAPHER_REFUSE_LICENCESこのマシンで install が拒否するライセンス ID のカンマ区切りリスト。ポリシーによる拒否に追加されます(例:AGPL-3.0,GPL-3.0)
CARTOGRAPHER_NO_NETWORK設定すると(値は何でも可)、finder と installer はリクエストを送信せず、ネットワークがオフであることを示します(テストで設定されます。モデルバックエンドには影響しません)
CARTOGRAPHER_GITHUB_TOKENinstall が行う1回の GitHub API 呼び出しに使用する任意のトークン(api.github.com へのリクエストにのみ追加されます)

よくある質問

スキルはどこかに送信されますか? 選択したバックエンドのプロンプトにだけ送信されます。エージェントがスキルを送信する先と同じです。The Cartographer 自体が何かをアップロードまたは保存することはありません。

モデルに接続できない場合はどうなりますか? cartographer ask は CARTOGRAPHER_UNAVAILABLE (reason) を返して終了コード 3 で終了します。統合スニペットを使って設定されたエージェントは、代わりに cartographer search を実行して処理を続けます。

スキルを実行しますか? いいえ。スキルを提示するだけです。スキルを読み、従うのはエージェントの役割です。cartographer install はファイルをダウンロードして書き込みますが、それらを実行することはありません。また、--allow-agent-config を渡さない限り、エージェントホストが単独で実行できるエージェント設定は拒否します。

find は skills.sh をクロールしますか? いいえ。検索では、サイトマップから再構築された名前リスト(1日経過すると再構築)と最大8ページを読み込みます。サイトの robots.txt と1日あたりの上限に従います。一括インデックスはオプトイン方式で、リクエスト間隔を最低3秒空け、独自の1日あたりの上限(2,000)があります。

brief に乗っ取られる可能性はありますか? brief はデータとしてラップされ、モデルにはツールがありません。また、回答はパースされ、カタログと照合されるため、出力される候補はすべて実在するカタログ項目です。プロンプトでは、指示を含む brief に対して通常のスキルに関する質問として回答し、その旨を示す NOTE を追加するようモデルに指示しています。

すべてのヘルパーエージェントが質問する必要がありますか? いいえ。コーディネーターが1つの brief にすべてのヘルパーのタスクを列挙し、各ヘルパーに候補を渡します。

開発

python -m unittest discover -s tests
python tools/vendor.py verify

テストではモデルを呼び出さず、ネットワークも使用しません。フロントマターリーダー、カタログ、回答チェック、コマンドバックエンド、API リクエストの形式(SDK の代替実装を使用)、MCP stdio セッション、バンドルのハッシュ、および偽の skills.sh と偽の GitHub tarball を使ったファインダーとインストーラーを対象にします(robots、URL ホワイトリスト、レート制限、ライセンス拒否、安全でないアーカイブ、既存ファイルを上書きしないこと、ダウンロードを実行しないこと)。変更やバンドルに含めるスキルの提案方法については CONTRIBUTING.md、このような仕組みになっている理由については docs/DESIGN.md、ファイルやネットワークに対して行うことと行わないことについては SECURITY.md をご覧ください。

ライセンス

The Cartographer のコードとドキュメントは Apache License 2.0(LICENSE)に基づきます。著作権者は 2026 Blake W. です。コピーまたは変更版を配布する場合は、NOTICE ファイルを含め、変更したファイルに印を付けてください。バンドルに含まれる各スキルには、それぞれ独自のライセンスがあります(各スキルのフォルダー内にあります。THIRD_PARTY_NOTICES.md にすべて記載されています)。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。