mcpField
T
turntax

turntax

ローカル
torutdev.github.io開発ツール05 日前に更新

turntax について

turntax は、対応するコーディングエージェントごとに、リポジトリの指示ファイルが各ターンで消費するトークンを測るコマンドライン・ブラウザツールです。削減候補を示し、変更前に確認できる安全策付きの修正を提供します。

主な機能

  1. 01エージェントごとのターン当たりトークン測定
  2. 02モデル別のトークン数とコスト推定
  3. 03重複、矛盾、古い参照の検出
  4. 04指示ファイルの範囲縮小や簡素化の提案
  5. 05選択した安全な修正のプレビューと適用
  6. 06ローカルフォルダーや公開 GitHub リポジトリの監査

活用シーン

  1. 01コーディングエージェントの継続的なコンテキスト費用の推定
  2. 02不要に読み込まれる指示ファイルの特定
  3. 03リポジトリ変更前の修正案の確認
  4. 04指定モデルでの指示ファイル費用の比較

MCP 対応

README では turntax を MCP サーバーの監査ツールとして説明しています。エージェントの MCP 設定を読み取り、各エージェントが起動するサーバーとそのツール定義を、コンテキスト費用分析に含めます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"torutdev-turntax": {
"command": "npx",
"args": [
"-y",
"turntax"
]
}
}
}
起動コマンドnpx -y turntax

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

パッケージ
npmturntax0.7.2

ツール

2

掲載時のツール一覧 · 4 日前に更新

パラメーター型必須説明
pathstringいいえ監査するフォルダー(デフォルト:プロジェクトフォルダー)。フォルダー内の turntax.config.json が適用されます。
toolsarrayいいえ報告対象のエージェント(デフォルト:ファイルがあるエージェント)。
modelsarrayいいえ価格を算出するモデル(デフォルト:claude-sonnet-5.5、gpt-6.1-sol、gemini-3.8-flash)。

詳細

turntax

コーディングエージェントは、ターンごとに指示ファイルを再送信します。turntax は、リポジトリごとに、指示ファイルを読み込むすべてのエージェントについて、このターンごとに発生する固定コストを測定し、削減できる箇所を示します。

npx turntax

何もアップロードせずにブラウザーでお試しいただけます:https://torutdev.github.io/turntax/ — フォルダーをドロップするか、公開 GitHub リポジトリを入力してください。https://torutdev.github.io/turntax/?repo=owner/name のようなリンクを開くと、そのリポジトリのレポートが直接表示されます。

エージェント指示ファイルの現状:turntax が人気のある 100 のリポジトリで検出した内容を掲載しています。ピン留めされたコミットと再現用スクリプト(scripts/state-of.mjs)を含む新しい版を毎月公開します。

GitHub Action と設定を 1 つのコマンドでセットアップできます:

npx turntax init

対応エージェント

各エージェントのドキュメントに記載された読み込み規則によって、毎ターンに送信される内容、エージェントがフォルダー内で作業する場合や該当するファイルに触れる場合にのみ読み込まれる内容、無視される内容が決まります。

エージェントリポジトリから読み込むファイル
Aider.aider.conf.yml の read: に記載されたファイル(CONVENTIONS.md は、記載されている場合、または --read で渡された場合のみ)
AmpAGENTS.md(または AGENT.md/CLAUDE.md)、ネストされた AGENTS.md、@-mentioned ファイル、.agents/skills、.claude/skills
Augment Codeすべての階層の AGENTS.md と CLAUDE.md、.augment-guidelines、.augment/rules/(type 別)、.augment、.claude、.agents 内のスキル
Claude CodeCLAUDE.md、CLAUDE.local.md、.claude/rules、スキル、コマンド、サブエージェント、CLAUDE.md がない場合は AGENTS.md
Cline.clinerules/、.cline/rules/、.cline、.clinerules、.claude 内のスキル
Continue.continue/rules/
Cursor.cursor/rules/*.mdc、.cursorrules、AGENTS.md、CLAUDE.md、.agents、.cursor、.claude、.codex 内のスキル
Devin Local / Devin CLIすべての階層の AGENTS.md、AGENTS.local.md、AGENT.md、.windsurfrules、CLAUDE.md、.devin/rules/、.windsurf/rules/、.cursor/rules/、スキル
Factory DroidAGENTS.md/CLAUDE.md(.factory、.agents、.agent 内も対象)、DESIGN.md、.factory/skills、.agents/skills、.factory/droids
Gemini CLIGEMINI.md、.agents と .gemini 内のスキル
GitHub Copilot.github/copilot-instructions.md、.github/instructions/、AGENTS.md、CLAUDE.md、.claude/rules、.github、.claude、.agents 内のスキル(VS Code Local ハーネスの既定値)
Goose.goosehints、AGENTS.md、@ でインクルードされたファイル、.agents、.goose、.claude 内のスキル
Google Julesルートの AGENTS.md
JetBrains Junie.junie/AGENTS.md、または .junie/rules/ を含む AGENTS.md、または .junie/guidelines、.junie、.agents 内のスキル
Kilo CodeAGENTS.md、AGENT.md、CLAUDE.md、CONTEXT.md、.kilo/rules、.kilocode/rules、モード規則、.kilocoderules のうち最初に該当するもの、スキル
Kiro.kiro/steering/、AGENTS.md(ネストされたものも含め、毎ターン読み込み)、.kiro/skills
OpenAI CodexAGENTS.md、AGENTS.override.md、.agents/skills
OpenCodeAGENTS.md、または存在しない場合は CLAUDE.md、.opencode、.claude、.agents 内のスキル
Roo Code.roo/rules/、.roo/rules-{mode}/、.roorules、AGENTS.md、.roo、.agents 内のスキル
TRAE.trae/rules/(alwaysApply、globs、description。フォルダーは3階層)、.trae/skills
WarpWARP.md、なければ AGENTS.md、.agents、.warp、.claude およびその他7つのフォルダー内のスキル
Windsurf Cascade.devin/rules/、.windsurf/rules/、.windsurfrules、AGENTS.md、スキル(旧エージェント。新しい会話では Devin Local を使用)
Zed.rules、.cursorrules、.windsurfrules、.clinerules、.github/copilot-instructions.md、AGENT.md、AGENTS.md、CLAUDE.md、GEMINI.md のうち最初に該当するもの、.agents/skills

エージェントが同じスキル名を2つのフォルダーから読み込む場合、ドキュメントに記載された順序(またはそのエージェントについて注記された想定順序)に従い、1つとして数えます。

まったく同じファイルを読み込むエージェントは、レポート内で1行にまとめられます(/command としてのみ読み込まれるファイルは、ターンごとのコストがないため、行を分けません)。

always  o200k/turn  on-demand  model                tokens/turn  counted by                   100 turns  cached   agents
4       272         53         (no selected model)                                                                Claude Code
1       63          0          GPT-6.1 Sol          63           estimate (o200k_base proxy)  $0.01      $0.0006  OpenAI Codex, Roo Code, Kiro, JetBrains Junie
1       17          0          (no selected model)                                                                Gemini CLI
5       311         59         GPT-6.1 Sol          311          estimate (o200k_base proxy)  $0.06      $0.0031  Cursor
4       307         55         GPT-6.1 Sol          307          estimate (o200k_base proxy)  $0.06      $0.0031  GitHub Copilot
2       75          0          GPT-6.1 Sol          75           estimate (o200k_base proxy)  $0.01      $0.0008  Windsurf Cascade
2       21          32         GPT-6.1 Sol          21           estimate (o200k_base proxy)  $0.0042    $0.0002  Cline
1       11          0          GPT-6.1 Sol          11           estimate (o200k_base proxy)  $0.0022    $0.0001  Zed
3       84          32         GPT-6.1 Sol          84           estimate (o200k_base proxy)  $0.02      $0.0008  Goose, OpenCode, Kilo Code
3       84          51         GPT-6.1 Sol          84           estimate (o200k_base proxy)  $0.02      $0.0008  Amp
3       108         32         GPT-6.1 Sol          108          estimate (o200k_base proxy)  $0.02      $0.0011  Warp
2       282         19         GPT-6.1 Sol          282          estimate (o200k_base proxy)  $0.06      $0.0028  Factory Droid
4       303         51         GPT-6.1 Sol          303          estimate (o200k_base proxy)  $0.06      $0.0030  Augment Code
1       63          0          (no selected model)                                                                Google Jules
7       330         69         GPT-6.1 Sol          330          estimate (o200k_base proxy)  $0.07      $0.0033  Devin Local / Devin CLI

Advice (savings are estimates in o200k tokens per turn)
  HIGH duplicate CLAUDE.md, AGENTS.md [saves ~48 tokens/turn]
    3 identical lines are loaded twice every turn by cursor, copilot, factory-droid, augment, devin. Keep them in one file.
  HIGH contradiction AGENTS.md, CLAUDE.md [saves ~11 tokens/turn]
    Conflicting package manager: "Always use npm for installs and scripts in this repository." (AGENTS.md:3) vs "Always use pnpm for installs and scripts in this repository." (CLAUDE.md:5). (Removing the outdated line.)
  MEDIUM scopable-section CLAUDE.md:12 [saves ~128 tokens/turn]
    Section "API package" is mostly about packages/api/. Move it to packages/api/AGENTS.md (or CLAUDE.md), a path-scoped rule, or an instructions file ...

(--models gpt-6.1-sol を指定した test/fixtures/mixed の出力抜粋。)

カウント対象と方法

モデルファミリートークンのカウント方法ラベル
OpenAI GPT-5.x, gpt-osso200k_base(OpenAIのtiktokenがこれらのモデルに割り当てるエンコーディング)を使ってオフラインでカウント正確
OpenAI GPT-6.xo200k_baseを使ってオフラインでカウント。OpenAIは新しいエンコーディングを公開していません推定
ClaudeAnthropicのcount_tokens APIのみ。ご自身のキーと--claude-apiが必要ですAPIカウント
GeminiGoogleのcountTokens APIのみ。ご自身のキーと--gemini-apiが必要ですAPIカウント

Claudeのトークナイザーは非公開です。また、Anthropicのドキュメントによると、新しいClaudeモデルは同じテキストでも以前のモデルより大幅に多くのトークンを生成します。turntaxは、OpenAIのカウントをClaudeやGeminiの数値として表示することはありません。キーがない場合、該当する行には「APIキーが必要」と表示されます。o200k列には、すべてのファイルについて参照用のカウントがラベル付きで表示されます。

Nターンあたりのコスト = 1ターンあたりのトークン数 × N × 入力料金。「キャッシュ済み」列は、すべてのターンでプロンプトキャッシュからコンテキストを読み込むことを前提としています。料金は、モデルごとの出典リンクがある日付付きの表から取得されます(turntax --list-models)。独自の料金を使うには、--prices my-prices.jsonを渡してください。

各エージェントの読み込みルールと出典については、docs/how-it-counts.mdをご覧ください。

アドバイス

すべてのチェックは決定論的です。それぞれに、1ターンあたりのo200kトークンの推定削減数が表示されます。

  • duplicate:2つのファイルに同一の行があります。1つのツールが両方を読み込む場合に限り、1ターンあたりの削減になります。それ以外の場合は、ルールの不整合リスクとして警告されます。
  • contradiction:同じエージェントに適用されるルールが競合しています(パッケージマネージャー、インデント、引用符、セミコロン)。
  • scopable-section:主に1つのディレクトリに関するセクションで、そのディレクトリだけで読み込める可能性があります(ネストされたファイル、パスでスコープされたルール、applyTo)。
  • oversized-section:常に読み込まれる大きなセクションで、オンデマンドのスキルにできる可能性があります。
  • size-limit:文書化されている上限(CLAUDE.mdは200行未満、Codexの上限は32 KiB、Windsurfはルールあたり12,000文字、グローバルルールは6,000文字、Cursorは500行、Factoryは80,000文字、Augmentは49,512文字)。
  • misconfigured:.cursor/rules内の.mdファイルや、triggerのないWindsurfルールなど、ツールが無視するファイルです。
  • stale-reference:参照されているファイルやnpm runスクリプトが存在しなくなっています。
  • non-english:英語以外のセクションです。トークン倍率は、指定された英語版(--english CLAUDE.md=CLAUDE.en.md)との比較でのみ計測されます。または、オプトインした場合はClaudeによる翻訳版(--translate)と比較されます。

修正

npx turntax --fix            # print a diff of the safe fixes; nothing is changed
npx turntax --fix --write    # apply them

--fix は、次の4種類のアドバイスに対応します。

  • duplicate:ファイルを読むすべてのエージェントが、毎回同じ行を別のファイルからも読んでいる場合、そのファイルから該当する行を削除します。スキル、コマンド、サブエージェントのファイルはそのまま残します。
  • scopable-section:セクションの対象となるフォルダーにセクションを移動します。移動先は、そのフォルダーにある同名のファイル(packages/api/CLAUDE.md)、ネストされた AGENTS.md、または paths: を指定した Claude Code のルールです。対象のフォルダーはすでに存在している必要があります。また、@imports や相対リンクを含むセクションは移動しません。セクションはサブセクションと一緒に移動します。
  • oversized-section:大きな手順(--section-tokens 以上のセクション。既定値は600で、見出しにリリース、デプロイ、セットアップなどの手順名が含まれるか、ほとんどが番号付きの手順であることが条件です。各サブセクションも同じ条件を満たす必要があります)を新しいスキルに移動します。Claude Code の場合は .claude/skills/<name>/SKILL.md、Codex の場合は .agents/skills/<name>/SKILL.md に移動し、見出しは1行の案内文に置き換えます。毎回読み込まれるのはスキル名と説明だけです。多くのエージェントは現在どちらか一方、または両方のフォルダーを読み込みますが、すべてのエージェントがそうするわけではありません(たとえば Zed が読むのは .agents/skills だけです)。そのため、既定ではこの修正が拒否されることがよくあります。--tools を指定すると、使用するエージェントにチェックを限定できます。
  • misconfigured:.cursor/rules 内の .md ファイルを .mdc に名前変更します。

修正を確定する前に、変更を適用した状態でファイルを再分類します。すべてのエージェントが、@imports 経由で読み込まれるファイルも含め、変更前に読み込んでいたすべての行を、変更前と同じ頻度で引き続き読み込める必要があります。例外は、移動したテキストです。フォルダーに移動したセクションは、エージェントがそのフォルダーで作業するときにのみ読み込まれる場合があります。また、スキルに移動した手順は、そのスキルが使用されるときにのみ読み込まれる場合があります。それ以外の場合、修正はスキップされ、その理由が表示されます。移動したセクションは、変更前には読んでいなかったエージェントからも参照される場合があります(ネストされた AGENTS.md は CLAUDE.md より多くのエージェントに読まれます)。その場合、要約に該当するエージェント名が表示されます。既定では、このチェックはサポート対象のすべてのエージェントを対象とするため、エージェントによってはルートファイルしか読まないことから、AGENTS.md のセクションは通常そのまま残されます。--tools codex,claude-code を指定すると、使用するエージェントにチェックを限定できます。

プレビューでは、差分が標準出力に出力され、git apply で適用できます。要約は標準エラー出力に表示されます。--write を指定すると、要約は標準出力に表示されます。--write は読み込み後にファイルが変更されていないことを確認し、変更されていた場合は何も書き込みません。シンボリックリンクされたファイル、そのリンク先、およびシンボリックリンクされたフォルダー内のファイルは変更されません。矛盾や古くなった参照は人が判断する必要があるため、--fix では変更されません。人が読む文書でもあるファイル(DESIGN.md、CONTEXT.md、agents.md、Agents.md、Claude.md)は変更されません。また、これらのファイル名と大文字小文字だけが異なる名前のファイルも作成されません。

ウェブページでは、読み込んだリポジトリの修正内容が同じように表示され、fix.patch をダウンロードできます。

設定ファイル

監査対象フォルダーにある turntax.config.json に既定値を設定するか、--config <file> を渡します。コマンドラインフラグは設定ファイルより優先されます。

{
  "tools": ["claude-code", "codex", "cursor"],
  "models": ["claude-sonnet-5.5", "gpt-6.1-sol"],
  "maxTokens": 8000,
  "maxIncrease": 500,
  "ignore": ["docs/agents/archive/", "**/*.draft.md"]
}

キーは tools、models、turns、maxTokens、maxIncrease(--compare または --baseline を指定した場合のみ適用)、sectionTokens、および ignore です。ignore には、監査対象フォルダーを基準とした、対象外にする指示ファイルの glob を指定します(フォルダー名内の * と ?、フォルダーをまたぐ **、フォルダー全体を指定する末尾の / が使えます)。無視されたファイルは --compare の対象からも除外され、--fix で変更されることもありません。不明なキーや ID はエラーになります。

MCP サーバー

エージェントが起動する MCP サーバーごとに、そのツール定義(名前、説明、入力スキーマ)がコンテキストに追加されます。turntax はエージェントの MCP 設定を読み込み、各エージェントが起動するサーバーを一覧表示します。

エージェントプロジェクト設定ユーザー設定
Claude Code.mcp.json~/.claude.json(ユーザーおよびプロジェクトごとのサーバー)
Cursor.cursor/mcp.json~/.cursor/mcp.json
GitHub Copilot.mcp.json、.github/mcp.json、.vscode/mcp.json(非推奨)~/.copilot/mcp-config.json
Gemini CLI.gemini/settings.json~/.gemini/settings.json
Kiro.kiro/settings/mcp.json~/.kiro/settings/mcp.json
Roo Code.roo/mcp.json
OpenAI Codex.codex/config.toml(信頼済みプロジェクト)~/.codex/config.toml
OpenCodeopencode.json、opencode.jsonc~/.config/opencode/opencode.json
Zed.zed/settings.json
Windsurf Cascade~/.config/devin/mcp_config.json
Devin Local / Devin CLI.devin/mcp_config.json、.devin/mcp_config.local.json。.mcp.json、.cursor/mcp.json、opencode.json、.zed/settings.json をインポート~/.config/devin/mcp_config.json。Claude Code、Windsurf、OpenCode、Zed のユーザー設定をインポート
Augment Code.augment/settings.json、.augment/settings.local.json~/.augment/settings.json
Factory Droid.factory/mcp.json~/.factory/mcp.json
Kilo Codekilo.json(c)、.kilo/kilo.json(c)、opencode.json(c)~/.config/kilo/kilo.json(c)
Warp(プロジェクト設定だけでは起動しません)~/.warp/.mcp.json

複数の設定でエージェントが同じサーバー名を見つけた場合は、エージェントのドキュメントに記載された優先順位(または推定と明記された設定順)に基づいて一度だけ数え、その他の設定にあるものは上書きされたものとして一覧表示します。設定内のツールフィルター(Codex の enabled_tools/disabled_tools、Gemini の includeTools/excludeTools、Factory の enabledTools/disabledTools、Copilot の tools、Kiro、Roo、Windsurf の disabledTools)も適用されます。

ツール定義の数を数えるにはサーバーを実行する必要があるため、これはオプトイン方式です。

npx turntax --mcp

--mcp は、設定に記載されたコマンドを使って各 stdio サーバーを起動し(リポジトリのフォルダー内で実行し、リポジトリ設定で定義されたコマンド、URL、ヘッダー内の環境変数をエージェント自身と同じように展開します)、ストリーミング可能な HTTP サーバーに接続して tools/list を要求し、定義を JSON として o200k で数えます。複数のエージェントが共有するサーバーは一度だけ起動します。設定内の環境変数(${VAR}、${VAR:-default}、${env:VAR}、{env:VAR}、${workspaceFolder})は展開されます。VS Code の ${input:...} プロンプトが必要なサーバー、レガシー SSE サーバー、WebSocket サーバー、および失敗またはタイムアウトしたサーバー(--mcp-timeout、デフォルトは 30 秒)は、その理由とともに一覧表示され、数には含まれません。

Claude Code はデフォルトで MCP ツール定義を遅延させます(ツール検索)。そのため、ツールが使用されるまではツール名だけがコンテキストに含まれます。したがって、その行では名前を数え、全体のサイズは別に表示します。alwaysLoad: true が設定されたサーバー、または _meta["anthropic/alwaysLoad"] が付与されたツールは、全体を数えます。サーバーの指示はすべてのセッションの開始時に読み込まれ、コンテキストに含まれると各ドキュメントに記載されている Claude Code、Gemini CLI、Codex、Kilo Code について数えられます(Claude Code と同様に、4,096 文字で切り詰めます)。

MCP のトークン数は o200k による推定値であり、モデルのコスト列には含まれません。

ユーザーレベルのファイル

エージェントは、すべてのプロジェクトでホームディレクトリ内の指示ファイルも読み取ります。--include-user を指定すると、これらのファイルが個別の user/turn 列と total 列に追加されます:

npx turntax --include-user

エージェントがドキュメントに記載している場所のみを読み取ります(エージェントごとの完全な一覧はdocs/how-it-counts.mdにあります)。たとえば、~/.claude/、~/.codex/AGENTS.md、~/.agents/、~/.gemini/、~/.copilot/、~/.cursor/skills、Windsurf と Devin の global_rules.md および ~/.config/devin/、Cline のグローバルルール、~/.roo/、~/.kiro/、~/.junie/、~/.config/goose/、~/.config/amp/、~/.config/opencode/、~/.config/zed/AGENTS.md、~/.factory/、~/.augment/、~/.config/kilo/、~/.warp/、~/.trae/skills、および前述のユーザー MCP 設定です。ユーザーレベルのファイルとリポジトリのファイルの間にある矛盾や重複は報告されます。ユーザーレベルのファイルはバッジや --max-tokens の対象にならないため、実行する人によって結果が変わることはありません。

ベースラインとの比較

npx turntax --compare origin/main            # instruction files at a git ref, read with git show
npx turntax --json --out before.json         # or save a report ...
npx turntax --baseline before.json           # ... and compare with it later
npx turntax --compare origin/main --max-increase 200   # exit 1 when any agent grows by more than 200 tokens

比較対象はエージェントごと、ファイルごとのリポジトリ指示ファイル(o200k)で、追加または削除された MCP サーバーも一覧表示します。作業ツリーが変更されることはありません。

GitHub Action

このリポジトリは Action としても利用できます。npx turntax init を実行すると、このワークフローと turntax.config.json が作成されます。プルリクエストではベースブランチと比較し、コメントを 1 件投稿し(プッシュのたびに更新)、ジョブのサマリーにレポートを書き込み、プルリクエストの変更ファイル内で該当箇所に指摘を表示します(GitHub では各ステップにつき警告 10 件、通知 10 件まで表示されます):

name: turntax
on: pull_request
permissions:
  contents: read
  pull-requests: write
jobs:
  turntax:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: TorutDev/[email protected]
        with:
          max-increase: 500      # optional: fail when an agent grows by more than 500 tokens per turn
          # max-tokens: 8000     # optional: absolute budget
          # args: --tools claude-code,cursor
          # annotations: false   # optional: no findings on the changed lines

コメントの冒頭には、エージェントごと、ファイルごとの変更を示す表が表示されます。--fix で安全に修正できる項目がある場合は、修正数と節約できるトークン数が表示され、差分は折りたたまれます。その下には完全なレポートが折りたたまれて表示されます。リポジトリ内の turntax.config.json も読み込まれます。フォークからのプルリクエストでは読み取り専用トークンが使われるため、コメントのステップはスキップされますが、ジョブのサマリーにはレポートが表示されます。

オプション

turntax [path]
  --tools <ids>             agents to report (default: every agent that reads a file); see --help
  --models <ids>            see --list-models (default: claude-sonnet-5.5, gpt-6.1-sol, gemini-3.8-flash)
  --turns <n>               cost projection (default 100)
  --json | --md | --badge   output format (default: terminal table)
  --pr-comment              Markdown for a pull request comment (change first, fixes and full report folded)
  --annotations             GitHub Actions annotations, one per finding (--path-prefix <dir> for a subfolder)
  --out <file>              write the output to a file
  --max-tokens <n>          exit 1 when any tool loads more than n o200k tokens per turn (CI gate)
  --include-user            add user-level files and MCP servers from your home directory
  --mcp                     start the configured MCP servers and count their tool definitions
  --mcp-timeout <s>         seconds to wait for each MCP server (default 30)
  --baseline <file.json>    compare with an earlier --json report
  --compare <git-ref>       compare with the instruction files at a git ref
  --max-increase <n>        exit 1 when any tool grows by more than n tokens per turn vs the baseline
  --claude-api              exact Claude counts (ANTHROPIC_API_KEY)
  --gemini-api              Gemini counts (GEMINI_API_KEY)
  --english <file=en>       measure a language multiplier against your English version
  --translate               opt-in Claude translation for that measurement (needs --claude-api)
  --prices <file.json>      your own price table
  --section-tokens <n>      threshold for oversized sections (default 600)
  --fix                     print a diff of the safe fixes (--tools limits the agents whose context is kept)
  --write                   with --fix, apply the changes
  --config <file>           read defaults from this file (default: turntax.config.json, if any)

選択したモデルの価格が 90 日以上前に確認されたものである場合、turntax はその旨を stderr に表示します。ソースを確認するか、--prices を指定してください。

turntax init [path]         add .github/workflows/turntax.yml and turntax.config.json (--tools, --max-increase,
                            --force, --dry-run); existing files are kept unless --force
turntax mcp                 run turntax as an MCP server over stdio (see below)

エージェントと MCP

turntax mcp(MCP Registry:io.github.TorutDev/turntax)は、2 つのツール(フォルダーのレポートを返す audit と、書き込みを行わない --fix の差分を返す fix_preview)を備えた読み取り専用 MCP サーバーです。CLI と同様に turntax.config.json を読み込みますが、MCP サーバーを起動したり、ベンダー API を呼び出したりすることはありません。

claude mcp add turntax -- npx -y turntax mcp

Cursor および mcpServers マップを使用するクライアントでは、MCP 設定に { "mcpServers": { "turntax": { "command": "npx", "args": ["-y", "turntax", "mcp"] } } } を追加してください(VS Code の .vscode/mcp.json では、このマップの名前は servers です)。ネイティブ Windows では、クライアントから npx を直接起動できない場合、cmd /c npx -y turntax mcp を通じて実行してください。

このリポジトリは Claude Code プラグインのマーケットプレイスとしても利用できます。このプラグインはサーバーと /turntax:context-tax コマンドを追加します:

/plugin marketplace add TorutDev/turntax
/plugin install turntax@turntax

VS Code

vscode/ は同じエンジンを使用する VS Code 拡張機能です。ステータスバーには開いているフォルダーのターンあたりの最大コストが表示され、Problems パネルには指摘が表示されます。レポートは Markdown プレビューとして表示され、安全な修正は差分で確認でき、Apply を選択した場合にのみ書き込まれます。オフラインで動作し、設定はフォルダーの turntax.config.json のみです。

VS Code Marketplace からインストールするか、次のコマンドを実行してください:

code --install-extension torut.turntax

プライバシー

デフォルトではオフラインです。ネットワーク通信もテレメトリもありません。ファイルの内容が送信されるのは、--claude-api、--gemini-api、または --translate を指定した場合のみで、その場合も該当ベンダーの API にのみ送信されます。キーは環境変数から読み込まれ、リクエストヘッダーでのみ送信されます。

--mcp は検出した MCP 設定内のコマンドを実行し、設定された HTTP サーバーに、エージェント自身と同じように接続します。信頼できる設定があるリポジトリでのみ実行してください。turntax は各コマンドの実行前に表示します。--include-user はホームディレクトリ内のファイルを読み込みますが、どこにも送信しません。ファイルを変更するオプションは --fix --write のみで、変更対象もリポジトリ内のファイルに限られます。

Web ページ

web/ は、オフラインのトークナイザーのみを使って、同じエンジンをブラウザー上で実行する静的ページです。リポジトリのフォルダーをドロップするか、ファイルを貼り付けてください。何もアップロードされません。

公開 GitHub リポジトリを読み込むこともできます。GitHub API(api.github.com。認証なしの場合、1時間あたり60リクエスト)でファイル一覧を取得し、指示ファイルと、それらが @import するファイルのみを raw.githubusercontent.com からダウンロードします。ページが行うネットワークリクエストはこれだけで、リポジトリを読み込むか、?repo= リンクを開いた場合にのみ発生します。

npm run build:web

バッジ

npx turntax --badge

コンテキスト税(o200k)

このバッジは、o200k_base でカウントした、検出されたツールの常時読み込み合計の最大値を示します。リポジトリ内のファイルと測定済みのプロジェクト MCP ツールが対象で、ユーザーレベルのファイルは含みません。

制限事項

  • エージェントがリポジトリのルートから開始することを前提としています。ユーザーレベルのファイルがカウントされるのは --include-user を指定した場合のみです。アプリの設定やチームのダッシュボードに保存されたルール(Cursor のユーザールール、Copilot の組織向け指示)はカウントされません。
  • 指示ファイルと、--mcp を指定した場合は MCP ツール定義をカウントします。エージェント独自のシステムプロンプトや組み込みツールは対象外です。
  • 読み込みルールは変更されることがあります。各ルールにはベンダーのページと確認日が記載されています。情報が古くなっている場合は、issue を作成してください。

コントリビューション

読み込みルールや価格は古くなることがあります。ベンダーのページへのリンクを添えた訂正が、最も役立つコントリビューションです。CONTRIBUTING.md をご覧ください。

ライセンス

MIT

コメント

MCP は初めてですか?

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

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