mcpField
L
local-delegate

local-delegate

本地服务
github.com/ZahiriNatZukeAI 与智能体7今天更新

关于 local-delegate

local-delegate 是一款 MCP 服务,可将文本处理任务交给本地 OpenAI 兼容大模型,帮助 Claude 用户节省订阅额度。它在服务端读取文件并仅返回精简结果,避免大型输入进入 Claude 上下文。

主要功能

  1. 01摘要、分类与字段提取
  2. 02翻译与代码说明
  3. 03服务端读取文件
  4. 04分块处理长文档
  5. 05stdio 与共享 HTTP 守护进程

适用场景

  1. 01总结大型日志而不占用 Claude 上下文
  2. 02从本地文件提取结构化字段
  3. 03分块翻译长文档
  4. 04根据规格生成样板代码

MCP 相关

通过 stdio 或共享 HTTP 守护进程提供 MCP 工具。MCP 客户端可将任务委托给 OpenAI 兼容端点。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"zahirinatzuke-local-delegate": {
"command": "uvx",
"args": [
"local-delegate-mcp"
],
"env": {
"LOCAL_DELEGATE_BASE_URL": "<LOCAL_DELEGATE_BASE_URL>",
"LOCAL_DELEGATE_API_KEY": "<LOCAL_DELEGATE_API_KEY>"
}
}
}
}
启动命令uvx local-delegate-mcp
需要配置的环境变量
LOCAL_DELEGATE_BASE_URLOpenAI-compatible endpoint (llama-swap, Ollama, LM Studio, vLLM). Default http://127.0.0.1:9292/v1
LOCAL_DELEGATE_API_KEY密钥Bearer token for the endpoint, if it requires one.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypilocal-delegate-mcp0.44.2

工具

11

收录的工具列表 · 更新于 今天

参数类型必填说明
pathany否
textany否
focusany否
max_wordsinteger否

详细介绍

local-delegate

将机械性的文本到文本任务委派给本地 LLM,节省 Claude 订阅的额度。 一个 MCP 服务(stdio 或共享 HTTP 守护进程),可作为任意 OpenAI-compatible 端点的通用客户端 — llama-swap、Ollama、LM Studio、vLLM。

PyPI CI License: MIT

zahirinatzuke.github.io/local-delegate — 在一个页面中介绍 它的功能和设计缘由(西班牙语/英语)。源文件位于 site/。

演示

local-delegate 节省用量仪表板

内嵌仪表板(示例数据):本地后端状态(已加载的模型、正在进行的委派及其分块进度、MCP 工具)、系统 RAM/VRAM 及各进程用量、节省的上下文令牌数、各工具和模型节省的用量、计算运行位置 — 本机或远程后端 — 以及按本地时间分页显示的近期活动。服务地址为 http://127.0.0.1:9393。

为什么要用?

当 Claude 需要总结大型日志、分类、提取字段或生成样板代码时,会把订阅额度花在机械性工作上。local-delegate 将这些任务作为运行在本地 LLM 上的 MCP 工具提供:传入 path 而不是 text,文件会在服务端读取,因此大型内容永远不会进入 Claude 的上下文。只有简短的结果会返回:文档不会占用你的上下文窗口,也不会由 Claude 处理。

快速安装

使用 uv 无需安装任何内容:uvx 会下载并在隔离环境中运行软件包。

将它以兼容 stdio 的模式添加到 MCP 配置中(Claude Desktop / Claude Code):

{
  "mcpServers": {
    "local-delegate": {
      "command": "uvx",
      "args": ["local-delegate-mcp"]
    }
  }
}

完整模板请参阅 examples/。

也可以用一条命令让软件包为你配置所有内容 — MCP 条目、hooks、skill,以及全局 CLAUDE.md/AGENTS.md 中的委派规则:

uv tool install local-delegate-mcp          # deja `local-delegate` en el PATH
local-delegate install --dry-run            # muestra exactamente qué tocaría
local-delegate install                      # aplica

也可以使用 uvx local-delegate-mcp install 进行试用,无需安装任何内容。但请注意,uvx 不会让命令持续可用:它会创建一个临时环境,并在结束后删除,因此之后运行 local-delegate doctor 会得到“command not found”。如果检测到这种情况,install 会提醒你。

此操作是幂等的,会为修改过的文件创建 .bak 备份,不会更改其他配置,并且可以通过 local-delegate uninstall 撤销。详情和选项请参阅集成安装。

想要为子命令、选项和值启用 Tab 自动补全?运行 local-delegate install --shell-completion,即可在 PowerShell、zsh 或 bash 的配置文件中启用补全(需主动选择,可通过 uninstall --shell-completion 撤销);运行 local-delegate completion powershell|zsh|bash 可输出脚本, 方便你自行加载。请参阅 Shell 自动补全。

如果你在同一台机器上使用多个会话或多个客户端,建议只运行一个守护进程:

uvx local-delegate-mcp serve

守护进程会在 http://127.0.0.1:9393/mcp 提供 MCP 服务,并在 http://127.0.0.1:9393/ 提供仪表板。Codex、Claude Code、opencode 以及任何兼容 Streamable HTTP 的客户端都可以共用该 URL,无需启动重复的 MCP 进程。使用本地 llama-swap 时,安装额外依赖 [llamaswap] 并将 LLAMASWAP_CONFIG 指向其 config.yaml 后,守护进程还会轮流分配后端: 两个模型会互相驱逐的委派任务不会冲突,第二个任务会等待(面板会将其显示为本地等待)。完整指南:共享守护进程。 一次委派可能会叠加排队等待和推理耗时,而有些客户端会更早超时:Codex 会在 60 s 后中止所有 MCP 工具调用(在 config.toml 的 [mcp_servers.local-delegate] 中设置 tool_timeout_sec 可延长超时时间,但每次 install/update 后都需要重新设置,因为这两个命令会重写该配置块);Claude Code 会在 5 min 无响应后中止 HTTP 调用(设置变量 CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT,单位为 ms,可延长超时时间,且该设置在 install 后仍然有效)。详情见集成安装。

若要使用另一台机器的 GPU,同时保留客户端的本地路径,请使用一个指向远程后端的本地 MCP:Mac → PC 指南和完整技术方案。

不要为了「稳定」固定到旧版本。 固定版本(==X.Y.Z)也会冻结该 wheel 声明的依赖版本范围,而这些范围会随时间变得不合适:0.12.2 之前的版本要求 mcp 不设上限,因此如今会解析到 SDK 2.x,并且在导入时就会崩溃。如果需要固定版本,请固定到当前版本,并在新版本发布时升级。

在 Windows 上,如果将其注册为登录时启动的任务,请运行安装了软件包的环境中的 pythonw.exe,并传入 -m local_delegate serve --log-level warning。pythonw 不会创建控制台或任务栏按钮。任务归 Windows 用户所有,而非 Codex 或 Claude:所有本地客户端共用同一个 daemon。dashboard 会用 DAEMON MCP 徽章标识这个唯一进程;连接的会话是 HTTP 客户端,并非额外的 MCP 进程。

在 Windows 上更新时,请先停止 daemon,再运行 uv tool install --force。 daemon 运行时,重新安装可能会在中途失败(因为它打开着环境中的文件),并导致环境损坏;schtasks /End 不够用,因为启动器已脱离,因此请停止 daemon 的 pythonw 进程,完成安装后再重新启动。之后,local-delegate update 会重新写入 hooks、skill,以及过时的 CLAUDE.md/AGENTS.md 配置块。

0.36.0 支持西班牙语或英语,并会跟随系统语言。 如果系统语言为英语,你会看到英语;若要继续使用西班牙语,请运行 LOCAL_DELEGATE_LANG=es local-delegate install(或 update)。_local_delegate 中的键和工具标记会改为英语(这是一个不兼容变更);对照表见 CHANGELOG 和语言。

0.35.0 将命令、变量、skill 和数据文件重命名为英语。 旧名称自 0.35.0 起仍可使用,但会显示警告;在 0.38.0 中已移除,不再生效。local-delegate doctor 会列出仍在使用的旧名称(直到 0.40.x),而 local-delegate update 会迁移可迁移的名称。不支持回退到旧版本。完整对照表见 CHANGELOG。

要求

Python 3.11+ — 使用 uvx 时无需自行安装,它会处理;只有在自建环境中使用 pip 安装时才需要关心这一点。

此外,还需要一个已运行且可访问 LOCAL_DELEGATE_BASE_URL 的 OpenAI 兼容端点(默认值为 http://127.0.0.1:9292/v1)。以下任意一个都可以:

  • llama-swap — 请参阅 Blackwell GPU 配置示例。
  • Ollama — http://127.0.0.1:11434/v1。
  • LM Studio、vLLM,或任何支持 OpenAI API 的服务端。

默认情况下,软件包不会启动任何后端(LOCAL_DELEGATE_AUTOSTART=0)。llama-swap 自动启动为可选功能(请参阅配置表)。

要了解该使用哪些版本的 llama-server/llama-swap,以及如何安排工作区,请参阅后端版本和参考工作区(经过验证的建议,并非要求)。local-delegate doctor 会将你的安装与这些版本进行比较,同时检查其余基础设施——钩子、技能、记忆、MCP 条目和守护进程——且不会写入任何内容(每项检查的内容)。

工具

传入 path(而非 text)会让 MCP 在服务端读取文件:内容不会进入 Claude 的上下文,因此可以节省资源。

工具功能模型角色(默认)
local_summarize总结文本或文件;可选的 focus 用于指定要保留的内容(例如「配置数值」)机械 / 长文本(自动)
local_classify从列表中返回一个标签机械
local_extract提取字段 → 经过验证的对象,而非需要解析的字符串机械 / 长文本(自动)
local_boilerplate根据规范生成代码并写入 target;仅返回回执代码
local_delegate通用的文本→文本转交工具机械(或你指定的角色)
local_lint_summary总结 lint / 测试 / CI 日志机械 / 长文本(自动)
local_commit_msg根据 diff 生成提交信息代码
local_translate翻译文本或文件机械 / 长文本(自动)
local_explain_code用文字解释代码代码
local_describe_image描述图片或回答有关图片的问题(图片→文本)视觉
local_status只读诊断:后端、目录、日志、VRAM、系统 RAM—(不调用聊天后端)

本地模型不使用工具调用:服务端会构建提示词 + 安全防护规则,向端点发送 POST 请求,并且只返回文本。

长文档。 local_translate(以及输入较长时的 local_delegate)会按自然边界拆分文本——Markdown 标题、段落、行——每次调用处理一个片段,遵循 max_tokens 上限,按顺序拼接输出,并在拼接处保留格式。超过 20 000 个字符的文档也会完整返回,不会在中途截断。日志会记录 chunks: N,运行时仪表板会显示进度(片段 3/7)。从 0.43.0 开始,「进行中」还会显示阶段:合并部分结果时显示「正在合并 3 个片段……」,重新拆分被截断的片段时显示「正在重试片段 n/total」;活动信息还会区分片段数与后端调用数(3 +1:三个片段和一次合并)。

超长文档摘要。 当输入超出模型可处理范围时,local_summarize 和 local_lint_summary 会执行映射-归约:先总结每个部分,再总结这些摘要,必要时逐层处理。以前会截断输入——例如,对超长 CI 日志进行摘要时,只会总结开头部分,并静默丢弃其余内容,而错误往往就在被丢弃的部分中——现在则会读取完整内容。如果某个片段因 max_tokens 而被截断,结果会发出提示,日志会记录 finish_reason: length。从 0.43.0 开始,被截断的部分结果不再视为有效:系统会丢弃它,拆分片段(或重新分组后的组)并重试,最多处理两层;如果仍有片段被截断,提示会指出具体片段及其行号。 从 0.36.1 开始,当日志无法在一次调用中处理完时,local_lint_summary 只会输入提及次数最多的十个文件(并说明还有多少个文件),最终摘要中的数值由程序填写,而不是由模型生成。 从 0.36.0 开始,local_commit_msg、local_explain_code(按顶层 def / class 拆分,并在最后一步提供名称清单)和 local_extract(每个片段生成一个部分对象,再在最后一步通过 schema 将其合并)也会读取完整输入。

配置

所有配置都通过环境变量设置;没有硬编码值。默认模型 ID 仅供参考——请替换为你的后端所用的 ID。

变量默认值描述
LOCAL_DELEGATE_BASE_URLhttp://127.0.0.1:9292/v1OpenAI 兼容端点
LOCAL_DELEGATE_API_KEY(空)Bearer 令牌;如果端点要求
LOCAL_DELEGATE_BACKEND_ORIGINautolocal/remote 强制指定计算来源;auto 根据主机推断。如果通过隧道(ssh -L、端口转发)访问后端,请设置此项:通过 loopback 访问时会被视为本地
LOCAL_DELEGATE_TIMEOUT180HTTP 超时时间(秒)
LOCAL_DELEGATE_MAX_CONCURRENT_REQUESTS2每个进程的最大背压;由守护进程的所有客户端共享
LOCAL_DELEGATE_ASK1通过 elicitation 询问用户,而不是直接失败:后端不可用、模型不在目录中、output_format 为空。设为 0 可禁用
LOCAL_DELEGATE_ASK_TIMEOUT30等待响应的秒数;超时后,工具会继续执行,就像没有询问过一样
LOCAL_DELEGATE_LOG_DIR(用户数据目录)按月轮换的 usage-YYYYMM.jsonl 和 clients.jsonl 所在目录
LOCAL_DELEGATE_LOG(空 = 启用轮换)如果设置,则指定一个不轮换的 usage.jsonl 路径(兼容性用途)
LOCAL_DELEGATE_MODEL_MECHANICALgemma3-4b用于分类、提取和简短摘要的模型
LOCAL_DELEGATE_MODEL_LONGgemma4-26b-a4b用于长文档的模型
LOCAL_DELEGATE_MODEL_CODEqwen36-35b-a3b用于代码的模型
LOCAL_DELEGATE_MODEL_VISIONgemma4-12blocal_describe_image 使用的视觉模型
LOCAL_DELEGATE_MAX_IMAGE_MB8local_describe_image 的图像大小上限
LOCAL_DELEGATE_DUMP_CHUNK_NOTES(空:关闭)本地目录;每个分块操作都会在此保存各步骤的输出。仅用于测量,不会离开本机
LOCAL_DELEGATE_LONG_INPUT_CHARS6000机械型↔长文档的阈值
LOCAL_DELEGATE_CHUNK_CHARS3500拆分长文档时的分块大小(local_translate、local_delegate)
LOCAL_DELEGATE_CHUNK_MAX_TOKENS2048每个分块的 max_tokens 上限
LOCAL_DELEGATE_CHUNK_MIN_CHARS400最小分块大小:低于此值时不再拆分
LOCAL_DELEGATE_JSON_SCHEMAautolocal_extract 中带 schema 的 response_format:auto/on/off
LOCAL_DELEGATE_FEEDBACK1当 source=path 时附加到结果中的节省信息行(设为 0 可关闭)。local_extract 不会将其附加到文本中——否则会破坏 JSON:它会放在 _local_delegate 中
LOCAL_DELEGATE_ALLOWED_DIRS(空 = 不限)path 的允许根目录,以 ; 分隔
LOCAL_DELEGATE_WEB1stdio 模式下的内嵌 Web 界面(设为 0 可禁用)。从 0.42.0 起,如果设置了 LOCAL_DELEGATE_WEB_TOKEN,则需要提供该令牌,与守护进程相同
LOCAL_DELEGATE_WEB_HOST / _PORT127.0.0.1 / 9393Web 界面或守护进程的主机/端口。留空视为未设置
LOCAL_DELEGATE_WEB_ALLOWED_HOSTS(空)该端口允许在 Host 标头中使用的额外名称,以逗号分隔(例如 tailscale serve 使用的名称)。默认仅允许 loopback 和 WEB_HOST,以防 DNS 重绑定(从 0.42.0 起:未设置此项时,通过其他名称访问会返回 421);* 可禁用检查
LOCAL_DELEGATE_WEB_FONTS1从 Google Fonts 加载品牌字体(0 = 不向第三方发送请求)
LOCAL_DELEGATE_AUTOSTART0自动启动 llama-swap(可选启用)
LLAMASWAP_EXE / LLAMASWAP_CONFIG / LLAMASWAP_LISTEN—仅当 AUTOSTART=1 时使用;LLAMASWAP_CONFIG 还会启用守护进程的轮转和亲和性(需安装额外项 [llamaswap])
LLAMASWAP_WATCH_CONFIG0设为 1 时,会为自动启动的后端添加 -watch-config
LOCAL_DELEGATE_FALLBACK1模型间回退:如果某个角色的模型因自身原因失败,则由其链中的下一个模型响应(_MAX_HOPS=2;链使用 _<ROL>,见 wiki)。设为 0 可关闭
LOCAL_DELEGATE_COOLDOWN1按模型冷却:连续失败 3 次(_FAILURES)后暂停 120 秒(_S),并逐步加倍,最长 900 秒(_MAX_S)。设为 0 可关闭
LOCAL_DELEGATE_BACKEND_BREAKER1后端不可达时熔断:连续连接失败 3 次(_FAILURES)后,local_* 会立即响应“后端不可达,你来处理”,持续 60 秒(_S),并逐步加倍,最长 600 秒(_MAX_S),且不计为委派;到期后,下次调用会重试。设为 0 可关闭
LOCAL_DELEGATE_COST_FALLBACK(空 = 子 Agent 中的 claude-opus-5-5)用于评估未指定模型的委派任务的模型和线程:模型 或 模型:main|subagent。无效值不会导致任何问题:面板会使用已声明的模型并说明原因
LOCAL_DELEGATE_COMMIT_LANGUAGE(空 = 当前语言)local_commit_msg 消息的语言:es、en、fr、pt、de、it 或自定义名称。留空:产品当前语言;diff:diff 文本中占主导地位的语言
LOCAL_DELEGATE_OUTPUT_LANGUAGE(空 = 当前语言)自由文本工具(local_summarize、local_lint_summary、local_explain_code、local_describe_image)要求模型使用的回复语言:fr、pt、português……不会更改界面或 local_commit_msg
LOCAL_DELEGATE_TURN_MAX_S600llama-swap 中发生冲突的模型之间的守护进程轮转:如果队列首个请求已等待这么多秒,且守护进程在同样长的时间内没有任何后端调用开始或结束,则仍会授予轮次(日志中显示 turn: "forced")
LOCAL_DELEGATE_SLOW_THRESHOLD0.5如果调用生成速度低于其模型正常速度的这一比例,就会被标记为“慢”(日志中为 slow,面板中显示“慢 ×0,37”)
LOCAL_DELEGATE_AFFINITY_MARGIN_S5亲和性:只有当已加载模型的 TTL 至少还剩这么多秒时,才会复用该模型
LOCAL_DELEGATE_BACKEND_PARAMS(空)对 backend-params.json 中各角色参数(采样和推理)的逐键临时覆盖:角色.键=值;…,例如 code.top_k=20。需要重启守护进程;更改文件无需重启
每次发送到后端的请求中携带的按角色参数(top_k、temperature、enable_thinking 及其预算……)都保存在 backend-params.json 中,并通过 `local-delegate backend-params showsetunset

节省指标

MCP 会将每次调用记录到按月轮转的日志中,并在 http://127.0.0.1:9393 提供一个仪表板,支持范围选择器,并显示正在进行的委派。 保留的上下文 = 服务端读取的输入(source=path 且成功的调用)减去工具返回给你的内容;即使 MCP 将其拆分,也会按每次委派计数一次。 指标以字符数衡量,并通过按分词器系列和内容类型(散文、代码、日志、结构化数据、diff)测得的密度表换算成 Claude tokens:.md 和 .json 的计数方式不同,Haiku 4.5 和 Opus 5.5 的计数方式也不同。图片不计入该数值——没有图片尺寸,就无法知道它们会消耗多少 Claude tokens——而是单独显示。与之相对,本地成本 = GPU 实际消耗的 tokens 总数,包括所有调用:拆分后的委派会在每个片段中重复系统提示词,这种差异就是拆分的成本。这里使用后端报告的实际 token 数;当后端未提供时,chars ÷ 4 仅作为本地模型的后备估算。详情见 wiki。

面板还会显示一个按 API 定价估算的等值费用:如果 Claude 按标价读取同样的上下文,需要花费多少;结果介于一个下限和一个估算值之间,后者会计入因缓存而重新读取该内容的请求。这不是你省下的钱:你的订阅是固定费用。此估算会公开其假设(将每次委派归因于哪个模型、后续有多少请求、使用了哪种密度),且不会扣除对同一文件的重复读取。旁边还有一个配额区块;在收集到至少三次来自不同窗口的 statusline 测量值之前,它会显示“未校准”,且在完成校准前绝不显示百分比。若要为历史记录归因并填充这两个区块,请不时运行 local-delegate recompute-cost(它会在本地读取你的 transcripts,且只写入汇总数据);如果有委派即将失去对应的 transcript,doctor 会发出提醒。

测试不计入指标:脚本中 mcp 客户端发起的委派、基准测试的委派,以及发生在测试窗口内的委派,都会从面板和 local_status 中排除。在 MCP 或守护进程上进行实时测试之前,请标记时间段并保存打印出的 ID:

local-delegate test-window start --label "prueba del lunes"   # imprime el id
local-delegate test-window stop <id>
local-delegate test-window list                               # ventanas y filas en cada una

点击面板工具栏中的测试按钮即可重新显示这些委派;其 ⓘ 会说明排除了多少条记录。

面板会根据浏览器的语言显示西班牙语或英语;标题栏中的 ES/EN 选择器可以切换语言(设置会保存在该浏览器中)。参见 Savings & metrics。

范围、图表中的日期和表格中的时间均使用你的时区(日志以 UTC 写入,这是一个没有歧义的时刻;时区转换仅用于显示)。仪表板还会区分计算运行的位置:如果后端监听在 loopback 地址,则标为 local;如果推理任务发送到了另一台机器,则标为 remote——例如,这台 Mac 使用 PC 的 GPU。v0.11.0 之前的事件不包含此字段,因此会显示为 n/d。

范围/非目标

local-delegate 刻意限定为文本/图像→文本:组装提示词(或多模态负载),向 /chat/completions 发送 POST 请求,并且只返回文本。它不会刻意实现以下功能:

  • 本地工具调用。 本地模型不会调用工具或执行代码;这些仍由 Claude 完成。添加此功能会让这个包变成一个并行的编排器,这不是它的目标。
  • 图像生成或编辑。 local_describe_image 仅用于图像→文本(描述、读取可见文本、回答特定问题);不用于生成或编辑图像。
  • 音频。 转录请使用配套项目 whisper-transcribe-mcp, 而不是试图把音频处理塞进这里。
  • 替代订阅。 目标是通过委派范围明确的机械步骤来节省配额,而不是把所有工作都路由到本地模型。

与客户端集成:hooks、skill 和记忆

local-delegate install 会在你的 HOME 中设置好完整集成:

组件位置功能
MCP 入口Claude Code 配置/~/.codex/config.toml/~/.config/opencode/opencode.json[c]注册服务(通过 uvx 使用 stdio,或通过 HTTP 连接 daemon)
HooksClaude Code 插件 local-delegate@local-delegate(或 ~/.claude/hooks/local-delegate/ + settings.json)建议进行委派;如果启用,读取类 hook 还可以拒绝完整读取文档;其中一个 hook 会记录每次委派由哪个 Agent 发起
Skill~/.claude/skills/local-delegation/ 和 ~/.config/opencode/skill/local-delegation/黄金法则和工具目录
记忆~/.claude/CLAUDE.md、~/.codex/AGENTS.md 和 ~/.config/opencode/AGENTS.md 中的托管区块将规则保存在一条始终加载的简短备注中

默认只配置已安装的客户端;也可以使用 --clients claude|codex|opencode 手动选择。Hooks 仅适用于 Claude Code:opencode 通过 TypeScript 插件扩展,这是另一个扩展接口;Claude Desktop 则完全没有 hooks。每个组件都可以排除(--no-hooks、--no-skill、--no-memory、--no-mcp)。

所有内容均提供西班牙语或英语版本。install 和 update 会将运行时的会话语言(LOCAL_DELEGATE_LANG=es|en,或系统语言)保存到 language.json,供 daemon 和 hooks 使用,并以该语言写入 skill、记忆区块和子 Agent 目录。优先级以及如何恢复为跟随系统语言,请参阅: 语言。

只有三个 hook 会自动执行:UserPromptSubmit(机械性意图)、SubagentStart(提醒每个子 Agent 加载 local_* 工具并按范围读取)以及 record_call.py(针对 local-delegate 工具的 PreToolUse)。它不会提醒或阻止操作,而是记录每次委派由哪个 Agent 发起、使用了多少 effort,以便将等效成本归因到该 Agent 使用的模型。两个读取类 hook——PreToolUse/Read 和 PreToolUse/Bash|PowerShell——默认关闭;只有使用 --enable-read-hook 才会同时启用(--disable-read-hook 或 uninstall 会将它们关闭)。它们必须一起启用,因为它们是在两条路径上执行同一条规则:封锁 Read 工具,却放任 cat informe.md,只会让行为换个地方发生,并不会改变它。

这两个 hook 只会发出提醒;拒绝读取则是另一项功能,需单独启用,并且默认关闭(LD_HOOK_READ_BLOCK)。它只会拦截后端正常响应时对大型 .md 或 .txt 文件的完整读取;拒绝提示会指出适用的工具和紧急替代方案:按范围读取永远不会被拦截。之所以提供这项功能,是因为已经实测了四次:仅作提醒并不会改变行为。 参阅集成安装和 docs/recipes/claude-code-hooks.md。

Claude Code 插件、mod 命令和 Claude Desktop

从 0.40 版起,如果已通过 uv tool 安装 Claude Code 2.1.292 或更高版本,install 会将钩子作为一个插件(local-delegate@local-delegate)交付,而不是写入 settings.json,并自动迁移旧安装,同时保留读取锁定。如果不满足这些条件,则继续使用 settings.json 并说明原因;--claude-delivery settings 可手动切回,update 也会遵守该设置。MCP 不会包含在插件中。

插件还附带一个mod,可在 Claude Code 内运行,不消耗模型轮次:

  • /local-summarize <ruta>、/local-commit(根据 git diff --cached 提议提交消息;只会显示消息)和 /local-lint <fichero|comando> 会直接调用本地工具。
  • 将 local_summarize、local_extract、local_lint_summary 和 local_commit_msg 固定为可用工具,让模型无需通过 ToolSearch 查找它们。
  • 在提示词上方显示 local-delegate 在当前会话中的状态条:在终端中,是带背景的一行状态栏,包含状态标签(● LISTO、◐ DELEGANDO、○ CAÍDO)、模型、正在运行的工具及其进度片段(7/9)和已用时长(3 min 16 s)、本次会话的委派次数和节省情况,以及读取模式(选项 status_style:bar 或 line,即一条横线);在 Claude Desktop 中,则显示单行双色文本,没有药丸状标记或链接。委派运行期间每秒自动刷新。这里不显示 Claude 配额:它属于状态栏。
  • 从 0.41 版起,读取 mod(默认开启,选项 read_mod_enabled)会使用 local_summarize 总结完整读取的大段文本,并将摘要作为该工具自身的结果返回;交互模式下会先询问。总结后,未经实际读取,不允许写入该文件。运行期间会暂时停用会话的读取钩子。它会向 daemon 查询每次调用读取的内容,不会启动进程(测得的每次 Bash 调用开销处于噪声范围内)。没有保存的值时,视为开启;如果你在 0.40.0 版中将其关闭,它会在插件的设置菜单中重新开启。
  • 更新后,请开启一个新的 Claude Code 会话:mods 会在会话开始时加载。

在 Windows 上,install --desktop 会为 Claude Desktop 添加聊天功能:写入一个条目,用于启动 local-delegate desktop-bridge,这是一个通往 daemon 的 stdio 桥接程序,由它自行读取 token,因为 Desktop 不会将其环境传递给 MCP。若要降级到 0.39 版,请先运行 uninstall。详情请参阅Claude Code 插件交付。

llama-swap 分组(可选)

安装 pip install "local-delegate-mcp[llamaswap]" 后,即可使用用于管理 llama-swap 分组的 CLI(轮流使用的池,以及仅在你提出要求时才保持加载的模型),并内置 VRAM 和系统 RAM 防护机制(--ram-gb 是可选项:即使计算完全由 GPU 完成,llama-server 也会将 GGUF 映射到 RAM,因此在内存少于 32 GB 的机器上,即使目录中的模型都能放进 VRAM,也仍可能耗尽 RAM):

local-delegate check-llamaswap --config config.yaml --vram-gb 16 --ram-gb 32
local-delegate init-llamaswap --config config.yaml --swap gemma3-4b,gemma4-26b-a4b,qwen36-35b-a3b --vram-gb 16 --ram-gb 32
local-delegate llamaswap residency            # qué se queda cargado y con qué TTL; no escribe
local-delegate llamaswap residency --none --ttl gemma3-4b=120   # volver a «ningún residente»

推荐不设置常驻模型:通过守护进程轮流调度,相互冲突的模型可以共享后端而不会争抢;如果某个工具有已批准的单元格,则会复用已加载的模型(见 工具)。常驻模式需主动启用: init-llamaswap --resident ID 或 llamaswap residency --pin ID 会将该模型留在 persistent 分组中,并设置 ttl: 0,从而永久占用其 VRAM(--pin 会通过 --vram-model ID=GiB 请求每个模型的实测 VRAM,如果与其他模型最坏情况下的占用总和放不下,就会拒绝执行)。--ttl-resident 默认值为 0:如果使用 persistent 并设置大于 0 的 TTL,模型仍会被卸载,因此并非真正常驻。

该软件包绝不会自行修改你的 config.yaml——只有你主动调用这些命令时才会运行。init-llamaswap 会在写入前运行相应的防护检查(如果 VRAM 不足,或你指定了 --ram-gb 且 RAM 不足,则不会写入任何内容),并且除非指定 --force,否则绝不会覆盖文件(同时会创建副本 <config>.<AAAAMMDD-HHMMSS>.bak)。llamaswap residency 只编辑发生变化的行,保留同样的带日期副本,不会在有正在进行的委派任务时写入(除非指定 --now),并会说明 llama-swap 如何处理重新加载。完整详情、经 llama-swap 代码验证的 groups 语义,以及应用流程,请参阅 docs/recipes/llama-swap-groups.md。

链接

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。