关于 turntax
turntax 是命令行和浏览器工具,可测量不同编码 Agent 每轮读取仓库指令文件产生的 token 成本。它会列出潜在节省并提供带保护的修复,支持先预览再应用更改。
主要功能
- 01测量各 Agent 每轮的指令文件 token
- 02按模型统计 token 并估算成本
- 03发现重复、冲突和失效引用
- 04建议缩小作用范围或精简指令文件
- 05预览并应用选定的安全修复
- 06检查本地目录或公开 GitHub 仓库
适用场景
- 01估算编码 Agent 的持续上下文成本
- 02查找不必要加载的指令文件
- 03修改仓库文件前审阅修复提议
- 04比较指定模型下的指令文件成本
MCP 相关
README 将 turntax 描述为 MCP 服务审计工具:它读取 Agent 的 MCP 配置,并列出各 Agent 启动的服务及其工具定义,以纳入上下文成本分析。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
2收录的工具列表 · 更新于 4 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 否 | 要审计的文件夹(默认:项目文件夹)。该文件夹中的 turntax.config.json 会生效。 |
| tools | array | 否 | 要报告的 Agent(默认:包含文件的 Agent)。 |
| models | array | 否 | 要定价的模型(默认:claude-sonnet-5.5、gpt-6.1-sol、gemini-3.8-flash)。 |
详细介绍
turntax
编码 Agent 每一轮都会重新发送其指令文件。turntax 会测量每个会读取这些文件的 Agent 在某个代码库中每轮固定产生的成本,并指出可以从哪里精简。
npx turntax
在浏览器中试用,无需上传任何内容:https://torutdev.github.io/turntax/ — 拖入一个文件夹,或输入一个公开的 GitHub 代码库。像 https://torutdev.github.io/turntax/?repo=owner/name 这样的链接会直接打开该代码库的报告。
Agent 指令文件现状:看看 turntax 在 100 个热门代码库中发现了什么;每月发布一期新版,附带固定提交版本和复现脚本(scripts/state-of.mjs)。
只需一条命令,即可设置 GitHub Action 和配置文件:
npx turntax init
支持的 Agent
每个 Agent 的文档加载规则决定了每轮会发送哪些内容、Agent 在某个文件夹中工作或访问匹配文件时才会加载哪些内容,以及哪些内容会被忽略。
| Agent | 从仓库读取的文件 |
|---|---|
| Aider | .aider.conf.yml 中 read: 下列出的文件(仅当列入其中或通过 --read 传入时才读取 CONVENTIONS.md) |
| Amp | AGENTS.md(或 AGENT.md / CLAUDE.md)、嵌套的 AGENTS.md、通过 @ 提及的文件、.agents/skills、.claude/skills |
| Augment Code | 各级目录中的 AGENTS.md 和 CLAUDE.md、.augment-guidelines、按 type 分类的 .augment/rules/、.augment、.claude、.agents 中的技能 |
| Claude Code | CLAUDE.md、CLAUDE.local.md、.claude/rules、技能、命令、子 Agent;没有 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 Droid | AGENTS.md / CLAUDE.md(也包括 .factory、.agents、.agent 中的文件)、DESIGN.md、.factory/skills、.agents/skills、.factory/droids |
| Gemini CLI | GEMINI.md、.agents 和 .gemini 中的技能 |
| GitHub Copilot | .github/copilot-instructions.md、.github/instructions/、AGENTS.md、CLAUDE.md、.claude/rules、.github、.claude、.agents 中的技能(VS Code Local harness 默认设置) |
| Goose | .goosehints、AGENTS.md、通过 @ 引入的文件、.agents、.goose、.claude 中的技能 |
| Google Jules | 根目录下的 AGENTS.md |
| JetBrains Junie | .junie/AGENTS.md,或 AGENTS.md 与 .junie/rules/,或 .junie/guidelines;.junie、.agents 中的技能 |
| Kilo Code | 以下文件中的第一个:AGENTS.md、AGENT.md、CLAUDE.md、CONTEXT.md、.kilo/rules、.kilocode/rules、模式规则、.kilocoderules、技能 |
| Kiro | .kiro/steering/、AGENTS.md(包括嵌套文件,每轮都会读取)、.kiro/skills |
| OpenAI Codex | AGENTS.md、AGENTS.override.md、.agents/skills |
| OpenCode | AGENTS.md;若不存在,则读取 CLAUDE.md;.opencode、.claude、.agents 中的技能 |
| Roo Code | .roo/rules/、.roo/rules-{mode}/、.roorules、AGENTS.md、.roo、.agents 中的技能 |
| TRAE | .trae/rules/(alwaysApply、globs、description;三个文件夹层级)、.trae/skills |
| Warp | WARP.md;否则读取 AGENTS.md;.agents、.warp、.claude 及其他七个文件夹中的技能 |
| Windsurf Cascade | .devin/rules/、.windsurf/rules/、.windsurfrules、AGENTS.md、技能(旧版 Agent;新对话使用 Devin Local) |
| Zed | 以下文件中的第一个:.rules、.cursorrules、.windsurfrules、.clinerules、.github/copilot-instructions.md、AGENT.md、AGENTS.md、CLAUDE.md、GEMINI.md;.agents/skills |
如果 Agent 从两个文件夹读取同名技能,则只计为一个,并按该 Agent 文档所述的顺序(或该 Agent 的假定顺序)计算。
加载完全相同文件的 Agent 在报告中共用一行(仅作为 /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-oss | 使用 o200k_base 离线统计(OpenAI 的 tiktoken 将这些模型映射到此编码) | 精确 |
| OpenAI GPT-6.x | 使用 o200k_base 离线统计;OpenAI 尚未发布更新的编码 | 估算 |
| Claude | 仅使用 Anthropic 的 count_tokens API,需提供密钥并使用 --claude-api | API 计数 |
| Gemini | 仅使用 Google 的 countTokens API,需提供密钥并使用 --gemini-api | API 计数 |
Claude 的分词器并未公开,而且 Anthropic 的文档指出,对于相同文本,较新的 Claude 模型生成的令牌数明显多于较旧的模型。turntax 绝不会将 OpenAI 的统计结果显示为 Claude 或 Gemini 的统计结果:没有密钥时,这些行会显示“需要 API 密钥”。o200k 列是所有文件都标注的参考统计值。
每 N 轮的成本 = 每轮令牌数 × N × 输入价格。“缓存”列假设每轮都从提示词缓存读取上下文。价格来自带有每个模型来源链接的注明日期的表格(turntax --list-models);使用 --prices my-prices.json 可使用自定义价格。
查看 docs/how-it-counts.md,了解各 Agent 的加载规则及其来源。
建议
所有检查结果都是确定性的。每项都会显示每轮预计节省的 o200k 令牌数。
- duplicate:两个文件中存在相同行。仅当某个工具同时加载这两个文件时,每轮才能节省令牌;否则会标记为偏移风险。
- contradiction:同一 Agent 遇到相互冲突的规则(包管理器、缩进、引号、分号)。
- scopable-section:某个章节主要与一个目录相关,可以仅在该目录下加载(嵌套文件、路径范围规则、
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 会处理四类建议:
- duplicate:如果每个会读取某个文件的 Agent,每轮也会从另一个文件读取相同内容,则从该文件中删除这些行。技能、命令和子 Agent 文件会保持完整。
- scopable-section:将某个章节移至与其内容相关的文件夹:移至该文件夹下同名文件(
packages/api/CLAUDE.md)、嵌套的AGENTS.md,或带有paths:的 Claude Code 规则。相关文件夹必须已存在;带有@imports或相对链接的章节会保留原处。章节及其子章节会一起移动。 - oversized-section:将较长的流程(至少达到
--section-tokens,默认值为 600 个 token;其标题需指明发布、部署、设置或类似流程,或者内容主要由编号步骤组成;每个子章节也必须符合条件)移入新技能:Claude Code 使用.claude/skills/<name>/SKILL.md,Codex 使用.agents/skills/<name>/SKILL.md,并在原处保留标题和一行指引。每轮只会加载技能名称和描述。现在许多 Agent 会读取其中一个或两个文件夹,但并非所有 Agent 都会读取(例如,Zed 只读取.agents/skills),因此默认情况下常会拒绝此修复;--tools可将检查范围限制为你使用的 Agent。 - misconfigured:将
.cursor/rules中的.md文件重命名为.mdc。
保留修复前,会在应用更改后重新分类文件:每个 Agent 仍必须读取之前读取的每一行,包括通过 @imports 引用的文件,且读取频率不能降低。移动的文本除外:移入文件夹的章节可能只有在 Agent 在该文件夹中工作时才会加载;移入技能的流程则只有在使用该技能时才会加载。否则会跳过修复并打印原因。移动的章节可能会被之前未读取该章节的 Agent 读取(嵌套的 AGENTS.md 会被比 CLAUDE.md 更多的 Agent 读取);摘要会列出这些 Agent。默认情况下,检查会涵盖所有受支持的 Agent,因此 AGENTS.md 中的章节通常会保留原处,因为有些 Agent 只读取根目录下的文件。--tools codex,claude-code 可将检查范围限制为你使用的 Agent。
预览时,差异会输出到 stdout,可与 git apply 配合使用;摘要会输出到 stderr。使用 --write 时,摘要会输出到 stdout。--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:要排除的指令文件 glob,路径相对于被审计文件夹(文件夹名称内的 * 和 ?、跨文件夹匹配的 **,以及表示整个文件夹的尾随 /)。被忽略的文件也会从 --compare 中排除,且永远不会被 --fix 修改。未知的键和 ID 会导致错误。
MCP 服务
每个由 Agent 启动的 MCP 服务都会将其工具定义(名称、描述、输入架构)加入上下文。turntax 会读取 Agent 的 MCP 配置,并列出每个 Agent 启动的服务:
| Agent | 项目配置 | 用户配置 |
|---|---|---|
| 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 |
| OpenCode | opencode.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 Code | kilo.json(c)、.kilo/kilo.json(c)、opencode.json(c) | ~/.config/kilo/kilo.json(c) |
| Warp | (项目配置不会自行启动) | ~/.warp/.mcp.json |
如果某个 Agent 在多个配置中找到同名服务,则根据该 Agent 文档规定的优先级(或按配置顺序,标记为推定)只计数一次;其他副本会列为已覆盖。配置中的工具筛选器(Codex 的 enabled_tools/disabled_tools、Gemini 的 includeTools/excludeTools、Factory 的 enabledTools/disabledTools、Copilot 的 tools,以及 Kiro、Roo 和 Windsurf 的 disabledTools)都会应用。
统计工具定义需要启动服务,因此这项功能默认不启用:
npx turntax --mcp
--mcp 会使用配置中的命令启动每个 stdio 服务(在仓库文件夹中;环境变量会像 Agent 自身一样展开到仓库配置定义的命令、URL 和标头中),并连接到可流式传输的 HTTP 服务,调用 tools/list,再将定义作为 JSON 使用 o200k 进行计数。多个 Agent 共用的服务只启动一次。配置中的环境变量(${VAR}、${VAR:-default}、${env:VAR}、{env:VAR}、${workspaceFolder})会被展开;需要 VS Code 的 ${input:...} 提示、使用旧版 SSE 或 WebSocket 的服务,以及发生故障或超时的服务(--mcp-timeout,默认值为 30 s)会连同原因一并列出,且不会计入统计。
Claude Code 默认会延迟加载 MCP 工具定义(工具搜索):在使用工具之前,只有工具名称会进入上下文,因此该行只统计名称,并另行显示完整大小。设置了 alwaysLoad: true 的服务,或标记了 _meta["anthropic/alwaysLoad"] 的工具,会按完整定义计数。会话开始时会加载服务说明;Claude Code(按其行为截断至 4,096 个字符)、Gemini CLI、Codex 和 Kilo Code 的服务说明也会计入,因为其文档说明这些内容会进入上下文。
MCP 令牌数是基于 o200k 的估算值,不计入模型成本列。
用户级文件
在每个项目中,Agent 也会读取你主目录中的指令文件。--include-user 会将它们添加到单独的 user/turn 列和 total 中:
npx turntax --include-user
它只读取 Agent 文档中列出的位置(各 Agent 的完整列表见 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),按 Agent 和文件分别统计,并列出新增或移除的 MCP 服务。它绝不会修改工作树。
GitHub Action
该仓库也提供一个 Action;运行 npx turntax init 会为你写入此工作流和一个 turntax.config.json。在拉取请求中,它会与基分支进行比较,发布一条评论(每次推送都会更新),将报告写入作业摘要,并在拉取请求中已更改文件的相关行上标记发现的问题(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
评论开头会以表格列出各 Agent 和各文件的变更情况。当 --fix 有安全修复时,评论会说明修复数量和可节省的 token 数,并折叠显示差异;完整报告会在下方折叠显示。仓库中的 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)
Agent 和 MCP
turntax mcp(MCP Registry:io.github.TorutDev/turntax)是一个只读 MCP 服务,提供两个工具:audit(文件夹报告)和 fix_preview(--fix 差异,绝不写入)。它像 CLI 一样读取 turntax.config.json,不会启动 MCP 服务或调用厂商 API。
claude mcp add turntax -- npx -y turntax mcp
对于 Cursor 和带有 mcpServers 映射的客户端,请将 { "mcpServers": { "turntax": { "command": "npx", "args": ["-y", "turntax", "mcp"] } } } 添加到其 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 服务,就像 Agent 自己会做的那样。仅在你信任其配置的仓库中运行它。turntax 会在启动每条命令前打印出来。--include-user 会读取你主目录中的文件,且绝不会将其发送到任何地方。只有 --fix --write 会修改文件,且仅修改仓库文件。
网页
web/ 是一个静态网页,可在浏览器中使用仅离线的分词器运行相同的引擎。拖入仓库文件夹或粘贴文件;不会上传任何内容。
它还可以加载公开的 GitHub 仓库:网页会使用 GitHub API(api.github.com,无需身份验证,每小时 60 次请求)列出文件,并仅从 raw.githubusercontent.com 下载指令文件及其通过 @import 引用的文件。这些是网页发出的唯一网络请求,且仅在你加载仓库或打开 ?repo= 链接时发出。
npm run build:web
徽章
npx turntax --badge
徽章显示找到的工具中始终加载的最大总量,按 o200k_base 计算:仓库文件加上测得的项目 MCP 工具,不包括用户级文件。
限制
- 假定 Agent 从仓库根目录启动。只有使用
--include-user才会统计用户级文件;应用设置或团队控制台中保存的规则(Cursor 用户规则、Copilot 组织指令)不会纳入统计。 - 统计指令文件,以及使用
--mcp时的 MCP 工具定义;不统计 Agent 自身的系统提示词或内置工具。 - 加载规则会发生变化。每条规则都附有供应商页面和核验日期;若规则已过时,请提交 issue。
贡献
加载规则和价格可能会过时。附上供应商页面链接的更正最有帮助;请参阅 CONTRIBUTING.md。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。