端点(Model endpoint)
一个模型的 HTTP 接口(base URL + API key),说两种格式之一:OpenAI 兼容(Chat Completions),或 Anthropic 兼容(Anthropic 的 Messages,Anthropic 自己和不少厂商、转发都提供)。格式在端点上选,没选的是 OpenAI 兼容;应用自己的循环和判断在两种格式上一样跑,只是发出去的样子不同。Anthropic、小米 MiMo、千问(阿里云百炼)和 DeepSeek 是内置连接器:添加时选它就只填密钥,应用拿 key 依次问这家各套餐的地址,用认它的那个;地址是这些套餐之一的端点都按那家显示,带它的 LOGO。Anthropic 自己的地址可以带一个 Anthropic 工作区 ID(wrkspc_…,不限定工作区的个人 key 必须带),随每个请求发出;它和 Bot 干活的工作区无关。应用不自带模型。可以配置多个端点;其中一个是默认。补全打到模型所属的那个端点。你在设置里加,Bot 也能用工具加。新建或改已有端点的 URL、格式或 Anthropic 工作区 ID 是危险动作。默认端点不能改 URL / 格式 / 密钥 / 删除。细节见行为说明·补全、ADR 0066 和 ADR 0072。输入框语音输入用的语音识别服务不是端点:它单独在设置里配、只有一个、Bot 用不到(ADR 0073)。
行为细节
每一跳请求都带 max_tokens:取这个模型在端点名单里的 max_output,没填就是 32768,推理 token 也算在里面。没有上限时,2026-09-29 有三跳把同一句话写到了端点默认的 128,000 token(其中一跳写了 17 分钟,同一句 3,457 遍),被当成收尾发了出去;在 Bot↔Bot 私聊里还叫醒了对方,对方的下一跳又把整段读了一遍。32768 是看过花费记录定的:正常的一跳输出最多三万出头,超过 32768 的只有那三次复读,再低就会截断写大文件的正常跳。端点不认 max_tokens、在 400 里点名要 max_completion_tokens 的(OpenAI 的推理模型就是这样),马上换这个字段重发一次,这个模型之后都用它。模型能写的比这少的(DeepSeek 的 deepseek-chat 最多 8192,OpenAI 的 gpt-4o 最多 16384),端点会用 400 拒掉这个上限:报错里写了模型自己的上限,马上按那个数重发;没写,就不带上限重发;这个模型之后都这么发。没有上限时这些请求本来能过,所以这种拒绝不能让这一轮失败,而上限在设置里也改不了。提示词加上上限超过了模型的上下文(报错里写着「32768 in the completion」,或者点名上限、说的却是上下文长度,vLLM 就是这样)时,只有这一次不带上限重发,下一跳照样先带上限。
流式输出时,应用只看正文,不看工具参数、代码块和表格:在最近 6000 字符里按句切(句号、问号、感叹号、分号、省略号、换行,英文句点后面跟空格),每句只比字母和数字、不分大小写,数字照比(「镜头 11」和「镜头 12」是两句)。同一句(8 个字以上)连着出现第 5 次,或者最近至少 20 句里不同的句子不到两成,就当场掐断这次补全,记为复读,通常只要几秒。「连着」是说两次之间没有新句子,只隔着前面出现过的句子:复读的两遍之间只有复读本身;逐项的审片结论(每行一句「Shot 03:通过。画面稳定,无需返工。」)两遍之间隔着这一项自己的名字,不算复读。不同句子占比这一条不看句子长短,20 行一模一样的「- [x] 完成」、哪一行都没写是哪一项,照样算复读。写完的回复发出之前,再按同样的规则看一遍。
这几种补全算失败,不算回复:
- 复读:见上。
- 拒答:端点给的结束原因是
content_filter或 Gemini 的SAFETY一类;或者整条回复不超过 300 字、没有工具调用,又是一句套话式的拒答(自称语言模型并说做不到,或者只有一句「I can't help with that」「抱歉,我无法协助处理这个请求」)。Bot 自己说明哪一步做不了、为什么,不算拒答。之前 Gemini 的拒答有两次被当成 Bot 的消息发了出去。 - 不完整:没写完就关了连接(既没有结束原因,也没有
[DONE];端点或中间的代理半路断开连接就是这样),结束原因说要调用工具、却没有一个完整的工具调用,或者工具调用的参数不是完整的 JSON。客户端先把同一个请求最多试三次,还是不完整才算失败。 - 超时:一次请求从发出到流结束最多这么久:10 分钟和「
max_output÷ 这个模型实测的 p10 吞吐 × 1.5」里较大的那个。吞吐取名单里的stream_tps_p10,没测过就是 10 分钟(本机或局域网的模型服务没测过时按每秒 10 token 算,见下面「本机和局域网的模型服务」)。等端点空位的时间、工具执行的时间、合盖睡着的时间都不算。
失败的补全什么都不发出、不进回路,也不叫醒谁。同一个模型带一句说明原因的提示再来一跳(复读的那句是:别复述,也别写收尾话,要做的事直接调用工具去做);连着再失败,这一轮以失败结束,会话里留一行「这一轮没写完:……」,你在场时还有一条失败通知。中间只要有一跳正常,下一次失败就还能再来一次。连不上端点、端点忙、端点报错、流中途没了下文(连接还开着,却等不到下一段)这几种不在此列:客户端已经把同一个请求重发过,这一轮直接结束。没了下文要等满空闲时限(3 分钟)才知道,三次就是 9 分钟,再来一跳会再翻一倍;连接半路断开几秒就知道,所以算不完整,多来一跳也不贵。流中途没了下文或者断开时,前半截以前会当成回复发出、或者拿去执行里面的工具调用,现在一概不用。
结束原因不分大小写,经代理转来的 Gemini 原样结束原因也认:STOP 就是 stop,max_tokens、MAX_TOKENS 和 Mistral 的 model_length 都当作 length。空字符串不算结束原因:有的端点每个数据块都带一个 "",直到最后一块。客户端不认识的结束原因(比如 eos)说明模型自己写完了,这条流是完整的,不会当成半截流重发,回复照样按上面的规则判断。error 例外:OpenRouter 在它后面的模型半路出错时用它结束,前面到的只是半截,算不完整。结束原因到了之后流没了下文(端点没发用量和 [DONE],也没关连接),等过空闲时限就当回复收下:模型已经写完,缺的只是端点最后那几个包。
写到输出上限被截断(结束原因是 length)、又没有复读的,接着写一跳:截下来的那部分不发出,但留在回路里让它接着写,提示它要做的事直接调用工具、长内容写进文件并分块写;截断发生在工具调用的参数里时,那次调用不执行,提示它分块写。接着写的那一跳又写到上限,这一轮以「写到输出上限」失败结束。
流式输出不再算作这一轮在推进:以前每来一段就刷新一次这一轮的动静,一跳写多久都不会被当成卡住。现在补全由自己的时间上限管,卡住清扫(20 分钟没有任何动静)只管补全之外的时候。
名单里的 max_output 在设置里看不到;stream_tps_p10 由模型属性里的「测一下」写入,context_window(上下文窗口,token)在模型属性里能看能改。Bot 用 update_endpoint 也能改 context_window、input_image 和 max_output,用 measure_model 测速,用 update_model_settings 改默认端点、内置模型(builtin_models,只能是端点上的模型或不设)和模型阶梯,都直接执行(ADR 0014)。从设置再保存名单时,没带的这几个值照旧保留,通过接口传 null 才会清掉(窗口栏清空就是传 null)。存着的名单里这几个值哪个不合法(比如 0 或者字符串),只忽略这一个值,模型照常留在名单里,用它的 Bot 也不受影响。
Anthropic 兼容的端点。 端点的格式选了 Anthropic 兼容(ADR 0066),这一节的规矩照旧,只是发出去的样子不同:
- 地址和密钥:请求发到 base URL 后面的
/v1/messages;base URL 已经以/v1结尾的只补/messages。所以填的就是 Claude Code 的ANTHROPIC_BASE_URL那种地址(https://api.anthropic.com、https://api.deepseek.com/anthropic)。密钥放在x-api-key,带anthropic-version: 2023-06-01;被 401 或 403 拒掉就改放Authorization: Bearer再发一次(有些厂商和转发只认这种),成了,这个端点之后都这么发;两种都被拒,就是密钥不对。 - 消息:应用内部照旧按 Chat Completions 的样子组织回路,发出前转换:所有 system 消息合进顶层
system;工具结果变成用户回合里的tool_result,同一回合里结果排在文字前面;相邻的同角色消息合成一个回合;开头是 Bot 自己那句时,前面补一个只有「…」的用户回合;工具调用的 id 只留字母、数字、_和-(回路里可能有 OpenAI 兼容端点给的 id);图片的 data URI 变成 base64 图片块。 - 思考档:先按 Anthropic 新模型的形式发,
thinking: {type: "adaptive"}加output_config.effort(none只发effort: low:新模型的思考关不掉,没有thinking字段的旧模型本来就不想);400 里点名 thinking、effort、budget_tokens 这几个字段的,退到thinking: {type: "enabled", budget_tokens}(低 2048、中 8192、高 16384,不超过输出上限的一半,不到 1024 就不发);再被拒,就不带思考字段。退到的那一档发成功了,这个端点上的这个模型之后都用它;退了还是被拒,不记。说的是回路里的思考块(「Expectedthinking… but foundtool_use」、签名对不上)的 400 不算拒思考字段,不退。输出上限小到放不下思考的判断调用(256、512 token),新形式只发effort,旧形式不发预算。 - 思考块跟着工具调用:模型想过之后调工具的,它的思考块(连同签名)原样跟着那次调用留在这一轮的回路里,下一跳一起发回去,不然下一跳会被拒。只发回给写它的那个端点和模型:中途换了模型(提档换阶梯、看图换模型)的那一跳不带。
- 上限:这个格式每次都要带
max_tokens,所以没有「不带上限重发」这一步。报错说上下文满了(「190000 + 32768 > 200000」这样写着已用的、上限和上下文),只这一次按剩下的空间重发;报错里写了模型自己的上限的,照上面的规矩以后都按那个数发。上限处理完还说提示词本身太长(「prompt is too long」),是上下文满了,不是笼统的「端点拒绝」;流停在model_context_window_exceeded也是上下文满了(Mistral 的model_length一样),不当成写到输出上限去接着写。两种都先压缩回路(见上下文窗)。 - 判断类调用不带
temperature: 0:Anthropic 的新模型不接受任何采样参数。 - 缓存:系统提示词末尾打一个缓存标记,一跳的回路末尾再打一个,下一跳就能从缓存读到那里。Anthropic 不打标记就不缓存;自己会缓存的转发不理这个标记。
- 用量:读缓存和写缓存的 token 都算进输入,读缓存的同时记为缓存命中,和 Chat Completions 的口径一样,花费照旧按名单里的单价估算。
- 结束原因:
end_turn记为正常结束,tool_use是要调工具,max_tokens是写到上限,refusal算拒答。流里来了error事件(常见的是overloaded_error),这一次算没写完,按上面的规矩再试。 - 模型名单从
…/v1/models?limit=1000拉,密钥的放法同上。不少兼容端点没有这个接口,拉不到就手填模型名。
本机和局域网的模型服务。 端点地址是 loopback、localhost、*.local 或内网地址(10/8、172.16/12、192.168/16、链路本地)的,当作本机或局域网里的模型服务(Ollama、LM Studio、llama.cpp 的 llama-server),这一节的规矩加上这些(ADR 0067):
- 密钥选填。没有密钥照样能选来跑、能完成向导,请求不带密钥头;Bot 加这样的端点时审批卡上的密钥栏也可以不填。
- 截断:这种服务装不下提示词时不报错,截掉开头照常回答(Ollama 0.40 一超过窗口就只留最后一半,HTTP 200)。所以本地请求回来后,应用拿发出的字节数比报告读入的 token 数:平均每 token 超过 6.5 字节,或者超过这个模型之前完整请求(16 KB 以上的)的读数的 1.6 倍,就当作被截断(16 KB 以下的请求不判断,图片不算字节);同一个对话(同一个会话里同一个 Bot)里,提示词比上一次长、读入的 token 反而比上一次少的,也是被截断——Ollama 在提示词刚超窗口时会丢掉最早的几条消息凑进去,读数只差几个百分点(带的图片数和上一次不同时不比),这一步作废、不原样重发:这一轮的回路里有可压的,先压成摘要再走一次(见上下文窗);压不了,或者压完还放不下,这一轮以「提示词超出了模型的上下文窗口」失败结束,后面写明这一步约多少 token、端点只读进了多少、服务的窗口是多少;那个窗口同时记进这个模型的条目。条目里已经有窗口、估出来超过它一成以上的,这一步干脆不发。任何端点(Anthropic 兼容的也是)400 的原文说提示词超出上下文的,也按这个记。
- 窗口和能力:拉这种端点的模型名单时顺便问服务每个模型的窗口(Ollama:已加载的实际窗口,否则 Modelfile 的
num_ctx,否则模型上限;LM Studio、llama.cpp 同理)、能不能看图、能不能调工具,填进模型属性(你填过的不覆盖),不能调工具的在名单上标「不支持工具」。 - 时限:等第一个字最多 15 分钟(加载模型、排在别的请求后面、读几万 token 都要时间),中途空闲最多 5 分钟;同一个服务一次只发一条流式请求,其余在应用里排队、不计时;没人等着的短调用至少等 10 分钟,读句仍是 20 秒,等不到就退回词表。
- 短调用不思考:整理、判断、读句这类短调用没指定思考档时,发
reasoning_effort: "none";不然会思考的模型把 256 个 token 全用来想、一个字不答(qwen3:8b 实测)。模型拒了这个值,就去掉重发并记住。 - 思考不进回复:回复正文开头的
<think>…</think>去掉(所有端点都是),只有</think>的连它前面一起去掉;本地模型单独发来的思考也过复读检测,只认同一个长句反复出现。 - 测速:模型属性里「测一下」发两次短请求,量首字时间和每秒 token,再看给了工具会不会调;速度记六成进
stream_tps_p10。它不在应用里排在 Bot 的一跳后面,但服务一次只处理一个请求时,要等那一步写完。
回避:供应商目录, Binder, 晚绑定, 每 Bot 一套端点, 把 Anthropic 兼容端点当成 Claude Agent, 把内置连接器当成另一种端点存下来, 把 Anthropic 工作区 ID 填进密钥, 把语音识别服务当成端点
Claude Agent
一个 Bot 的运行方式之一:它的每一轮不走应用自己的循环,而由你本机安装并登录的 Claude Code(通过 Agent SDK)来跑,用 Claude Code 自己的工具干活,用它登录的账号(Claude 订阅或 API key)计用量。应用照旧管权限模式和你的批准、Stop、收尾契约、交付和审查,自己的协作工具以 mcp__deskfolk__ 交给它;应用自己的判断仍用端点。只有你能在 Bot 面板里切换运行方式;应用不提供 Claude 登录、不碰它的凭据,只在设置里显示它用的是哪种凭据。账号的额度用完时,同一轮换到你列出的另一个登录着、没用完的 Claude 账号开新会话接着做;都用完了,失败行写明什么时候、到时自己接着做(ADR 0110)。细节见行为说明·Claude Agent和 ADR 0061。
行为细节
开启:Bot 面板「运行方式」选「Claude Agent(你本机的 Claude Code)」,新建 Bot 时也能选;只有你能改,Bot 改自己或别的 Bot 会被拒。之后在面板里选 Claude 模型和思考强度。模型列的是这个 Bot 所用账号的 Claude Code 在自己的 /model 里能选的那些(显示它的叫法,旁边是取值,比如 Opus 5.5 · opus),最上面是 Claude Code 的默认;问不到列表时退回 sonnet、opus、haiku、fable 这几个别名。思考强度(默认、低…最大)只列所选模型支持的,模型不支持就不显示;换到不支持当前强度的模型时,强度一起回到默认。新建 Bot、向导、分工里的 Claude 模型、模型阶梯和任务的模型也都列这份完整列表(ADR 0095)。端点上钉的模型不动:应用自己关于这个 Bot 的判断(群里要不要接话这类)仍跑在端点上,所以端点照样要配。
找你的 Claude Code:依次看设置里填的路径、守护进程的 PATH、常见安装位置(~/.local/bin、/opt/homebrew/bin、/usr/local/bin、npm 全局目录…)、你的登录 shell。Windows 上看 PATH(原生的 claude.exe 和 npm 的 claude.cmd 都认)、%USERPROFILE%\.local\bin\claude.exe 和 %APPDATA%\npm\claude.cmd,没有登录 shell 这一步。设置 › Agent 里的「Claude Agent」卡片写着找到的位置、版本、账号(Claude 订阅、长期令牌、API key、第三方平台)和网络(直连,或经哪个代理),并提醒:没登录、按 API key 计费(每一轮按 token 收钱)、设了 ANTHROPIC_BASE_URL、版本比应用带的 Agent SDK 旧。应用只运行它、问它 claude --version 和 claude auth status,不提供登录,也不读它的凭据;没登录就在终端里运行 claude 登录。这张卡片和这些接口只在这台 Mac 上有。
几个账号:Claude Code 把每个账号的登录放在一个配置目录里——CLAUDE_CONFIG_DIR 没设时是 ~/.claude,设了就是它指的目录——所以一台电脑可以同时登录几个账号。Claude Agent 卡片按账号分块:位置、版本、网络在上面,「账号」下每个账号一块——套餐和邮箱、它读的目录、它的用量(有 Bot 用它时),默认账号带「默认」标记,其他账号带「移除」;卡片和「账号」的说明收在标题旁的「?」里,悬停或点一下看。在「账号」下面填别的账号的目录(完整路径,可以 ~/ 开头;不能是根目录、主目录或它上面的目录),卡片对每个目录用它跑一次 claude auth status,列出套餐和邮箱,没登录的写着登录命令(比如 CLAUDE_CONFIG_DIR=~/.claude-b claude auth login)。然后在 Bot 面板的「Claude 账号」里给 Bot 选:没选的用上面那个默认账号(应用自己的环境里 Claude Code 找到的那个,和以前一样)。选了某个目录,这个 Bot 的每一轮、开跑前的登录检查和它的用量都用那个目录跑 Claude Code;目录是 ~/.claude 本身时去掉 CLAUDE_CONFIG_DIR 而不是写明——写明会让 Claude Code 去找另一条钥匙串记录,读成没登录。那个账号没登录时,这一轮开跑前就停下,写明是哪个目录。只有你能改 Bot 的账号(Bot 改会被拒),手机上能在列出的账号之间换;有 Bot 在用的目录要先把 Bot 换走才能移除;往列表里加、移除,在电脑和手机上都行(PUT /v1/runtime/claude-code/accounts);Claude Agent 卡片整张在手机上也有,路径、重新检测都能用,只有登录要在电脑的终端里做。列表里的每个目录和 ~/.claude 一样,Bot 的文件工具和命令都碰不到。应用记下目录,只在你要接着终端里的会话开项目会话时读里面 projects/ 下的会话记录(列出、导入),不读登录、设置和别的东西。
网络:守护进程环境里有 HTTPS_PROXY / ALL_PROXY 就原样传给 Claude Code(NO_PROXY 能把 Anthropic 排除在外);一个都没有时,把系统设置里的 HTTPS 代理(Mac 上是 系统设置 › 网络 › 代理,Windows 上是 设置 › 网络和 Internet › 代理,浏览器用的那个)作为 HTTPS_PROXY 交给它。从访达、开始菜单或开机启动的应用拿不到你终端里的代理变量,而有的网络只能经代理连上 Anthropic,不这样就每个请求都被拒。只设 HTTPS_PROXY,Bot 自己访问本机的 http:// 地址照样直连。PAC 文件和只开了 SOCKS 的代理不认。
一轮怎么跑:一轮起一个新的 Claude Code 会话,当前目录是本轮工作目录(还没归到一件事时是工作区根),能读写整个工作区。它收到的第一条消息是局面块和转录窗口(和别的 Bot 一样,自己的话标「【你】」,图片原样带上;工作目录写成这台机器上的完整路径,因为 Claude Code 的文件工具只认这种路径);系统提示是 Claude Code 自己的,加上这个 Bot 的人设、技能、记忆和应用给每个 Bot 的系统指令。你在 ~/.claude 里的设置、hooks、插件和 CLAUDE.md 不进 Bot 的会话(SDK 的隔离模式);钥匙串里的登录和环境里的 API key 照样用。只开 Read、Write、Edit、NotebookEdit、Glob、Grep、Bash、WebFetch、WebSearch、Agent(子任务)、TodoWrite;不能后台运行,转录里的 /命令 和 @路径 不会被展开。
边界和批准:读随便读;写、改文件和跑命令按这个 Bot 的权限模式:自动、全部允许下直接跑,改动先问下出一张和别的 Bot 一样的批准卡,只读下拒绝,和在不在工作区里无关(ADR 0092)。Claude Code 自己要问的(比如受保护的文件)也按模式答;递归搜家目录照样被拒;顶层目录都不存在的路径(多半是把工作区里的路径当成了 /work/… 这种绝对路径)直接拒掉,并告诉它工作区在哪,不出卡——Windows 上是没有盘符的文件路径;Claude Code 自己的设置和凭据(~/.claude、~/.claude.json、钥匙串)一律拒绝,不出卡,只有它记下的项目记忆(~/.claude/projects/*/memory/)例外:Read、Glob、Grep 能读,改和命令照旧拒绝(ADR 0102)。Stop、停住、只读轮照常生效:停住时有效果的动作被拒,只读轮只能看不能动;Stop 结束的是 Claude Code 和它起的所有命令(Windows 上用 taskkill /T 结束整棵进程树)。
协作:发进度、收尾、交付、审查、委派、问你、回看、拆任务、记忆、技能、批注,用的是和别的 Bot 一样的工具(在它那边叫 mcp__deskfolk__…),规则也一样;问你只能用 ask_user。最后一条不调工具的回复就是它发到会话里的消息,和别的 Bot 一样先过收尾自检、交出引用的文件、按收尾契约结束;被退回的那句送回同一个会话再答一次。和工具调用写在同一条消息里的文字只在它干活时显示,不会发出。挂在整件事上的段,命令或写文件落进它自己任务的文件夹时,和别的 Bot 一样立刻转到那张任务上,这样带着这些文件的回复会先发出、再替它交付;之前要到它调 submit 才转,回复被结束契约退回时就跟着被扣下了。审图时它用自己的 Read 看,应用记作看过。
记录:每一轮在选路里记一行(端点为空,原因 claude_code;沿阶梯爬到 Claude 级的轮次,原本的原因记作 escalation_model),花费按模型记,端点名「Claude Agent」,金额是估算(订阅不按 token 收费);跑过的命令、写过的文件、有效果的调用和别的 Bot 一样记下。
用量(ADR 0080):所有本机 Agent 的用量收在一处。宽窗口右上角浮着一个用量球:一个小圆球,圆环是所有账号里用得最多的那个窗口已用多少(向下取整,没用完就不会显示 100%,用了一点就写「<1%」不写 0%;用到四分之三起标黄、用到九成起标红,球的描边也跟着变色)。按住能拖到任何地方;放在离左右边缘不到 24px 的地方就吸附在那条边上,藏起一半,指针移上去滑出来。指针移到球上,球变形展开成一列 Agent 小圆标(同一个形状从球长成竖条,圆标一个接一个淡入;球在窗口下半时往上长):每个圆标是 Agent 的标志,外圈是这个 Agent 所有账号里最紧的窗口,只有今天记录的 Agent 是虚线圈。指针移到某个 Agent 上,它旁边(朝窗口中间)从圆标长出一张卡片:这个 Agent 今天在这里跑了几轮、用了多少 token,下面它的每个账号(套餐名是一枚小标签,后面淡色的邮箱,几个账号时带目录名,Codex 有余额时写在后面;几个账号时每个账号各占一块描边浅底的框,它的窗口都在框里)每个窗口一行——名字、多久后重置、已用多少,下一行一条按已用画的条;只有今天记录的 Agent 写一句为什么没有更多。卡片底部是几点查的和「刷新」。换到别的 Agent,卡片从那个圆标重新长出来;从圆标移到卡片的途中不会收起,都离开一会儿才折回球。点球把它固定展开(触屏也靠这个),点 Agent 固定它的卡片;Esc 或点外面收起。系统开了「减少动态效果」时不播动画。右键球可以「隐藏用量挂件」;用量标签页底部的「显示用量挂件」把它找回来。工具菜单的「用量」和菜单栏的「查看全部用量…」在工作台里打开一个用量标签页:顶栏是几点查的、「刷新」(挂件隐藏时还有「显示用量挂件」);下面每个账号一张卡片,在整页宽度上排成网格,一个 Agent 的几个账号并排、头上是 Agent 的名字和今天的轮数,宽屏时几个 Agent 排在同一行(同一行的卡片一样高、标题对齐),窄窗格就一列;卡片里每个窗口一行:窗口名(模型的窗口写「Fable · 7 天」,放得下就一行;Antigravity 那种长模型名会换行显示全名,「· 7 天」不拆开)、↻ 多久后(或哪天几点)重置、已用多少,下面一根按已用画的条;只有今天记录的 Agent 在最底下排成一行小胶囊;它和花费一样只有一个,开着时再点只是切过去,没开着时放在哪按 设置 › 行为 ›「窗口打开方式」里「用量」那一行(默认新标签页)。没有工作台的宽窗口(比如远程连上的平板)仍然展开挂件。没有任何连接上的本机 Agent 时挂件不出现。手机上没有挂件:工具菜单的「用量」打开列表里的一页,排法和用量标签页一样、只是一列(每个 Agent 一段标题,下面每个账号一张卡片),但每个窗口画成圆环表盘:环里是已用多少,下面是窗口名(长模型名同样换行显示全名)、再下面 ↻ 重置时间;一张卡的表盘在卡片里居中,最多三个一排,四个起两个一排(Antigravity 是 2 × 2),底部是几点查的和「刷新」;左上角返回;它和「已归档」那页都跟日程一样是网址里的一页(?o=usage、?o=archived),手机的返回键就退回列表,从已归档里点开的会话返回时也先回到已归档。设置 › Agent 里每个账号下面只有一行简要用量(「5h 38% · 7d 19%」,都是已用,圆环同上)。菜单栏图标的菜单顶上每个账号一行:图标是这家 Agent 的标,外面一圈细环按用得最多的窗口已用多少画(没登录、没查到的只有标),文字是名字和 5 小时、7 天各用了多少(各模型的窗口只在面板里);不报套餐的 Agent 合成一行「Grok 12 轮 · OpenCode 0 轮」;最多八行,下面一行「查看全部用量…」打开窗口和用量标签页(菜单图标不随深浅色切换,所以选了两种菜单上都看得清的颜色)。Claude 的数据是你本机的 Claude Code 自己去 claude.ai 拉的(它 /usage 背后的那份,经 Agent SDK 的 get_usage 起一个不发提示词的会话来问,问完就关),不经过任何模型、不花额度,应用也不读它的凭据;Codex 的是它自己的 app-server 答的。列哪些账号:连接上的(设置 › Agent 里找到了、没登出)和有东西在用的(Bot、模型阶梯上的 Agent 档、内置调用)都列,没有 Bot 用也列;每个账号问一次(两条其实是同一个目录的只问一次)。守护进程每份回答留 5 分钟,挂件和菜单栏每分钟左右问一次,所以最多每 5 分钟起一次 claude;什么都不跑在 Claude 上时什么都不问。「今天」按 Agent 算(花费表里那个 Agent 名下、今天零点以后的行,轮数数不同的轮次),不分账号。Claude 的接口 SDK 标着是实验性的,Claude Code 改了它,那个账号就写明没查到(GET /v1/usage,手机经中继也能读;旧的 GET /v1/claude-usage、GET /v1/agent-usage 留给还没更新的客户端)。
失败:没找到 Claude Code、没通过认证(没登录,或请求被拒,带上 Claude Code 自己的那句报错)、用量额度用完(写明什么时候重置;开了额外用量时越过额度照常跑,不算;有别的账号或知道重置时间时见下面「额度用完」)的失败只有你能解决,监督器不替你重试,也不叫回这个 Bot,等它有一轮以别的方式结束(2026-11-11 起);作业结果、回看这类别的叫醒又让它同样失败时,和会话里最后一行一字不差、而那一行的「继续」还没用过的失败行不再显示,只留给 Bot,也不另发通知;按了「继续」又同样失败的照常显示;Claude Code 中途退出算应用这边的问题,同样带上它的报错。请求失败时 Claude Code 写的那句报错不会被当成 Bot 的回复发出去。步数不设上限:和应用自己的循环一样,一段干多久都行,工具不会被收起,也不会因为走了多少步记成卡住了。2026-10-17 之前步数跟着引擎的跳数上限走(默认 160,视频 200),到了收起全部工具,再走 40 步记作卡住了;2026-10-12 之前是固定的 200 步。长时间渲染的活因此半路停下。见 ADR 0061。
额度用完(2026-11-12 起,ADR 0110):一次请求被套餐的 5 小时或每周额度挡下(开了额外用量接着跑的不算),应用记下这个账号用完、到它报的重置时间为止(重启也记得;没报时间的计费错误、账号暂停先当一小时,到时再试),然后在同一轮里换到「几个账号」里列出的另一个用 Claude 套餐登录着(claude.ai 登录或长期令牌;按 token 计费的 API key、第三方平台不换过去)、没用完的账号,开一个新会话接着做:开头是这一轮原本的输入,加一段应用提示——原先的账号额度用完、换了账号,上一个会话这一轮已经做了哪些(调用、结果、说过的话,取最近的约 6000 字),文件都还在、不要重做。会话里不出任何行、不发通知,轮次不算失败;工作记录里记 agent.account_switched。读同一个目录、或登录同一个邮箱的两个写法算一个账号,换过去没用。之后开跑的轮次,如果 Bot(或它爬到的阶梯档)的账号还记着用完,一开始就跑在别的账号上;Bot 面板里的账号不变,额度回来就回到它自己的账号。跑在 Claude 上的内置调用(读句、整理器等)也这样挑账号。所有账号都用完时,失败行照旧显示一次,写明什么时候自动接着做(「这一轮没写完:Claude 的用量额度用完了(11/5 13:10 重置,到时自动接着做)」;先回来的是另一个账号时写它的时间),不发通知;到了那个时间过一分钟,应用像你按了那一行的「继续」一样接着做——你的叫停照样拦住它;你已经按过「继续」、这件事之后有过一轮不是因为额度结束的(你说了话并且跑通了、你叫停了、它正在干),就不再接着做。Codex 报了重置时间的也这样到点接着做(它没有换账号);别的本机 Agent 报不出时间,照旧等你。项目会话也这样,见那一节的「额度用完」。
回避:Claude Code 引擎(品牌名不当功能名), 用订阅令牌直连接口, 在应用里登录 Claude, 把 Claude Code 当成补全端点, Bot 自己切换运行方式, 额度用完转到别的 Agent, 额度用完改掉 Bot 的账号设置
本机 Agent(Local agent)
一个 Bot 的运行方式:它的每一轮由你本机安装并登录的一个 Agent 程序来跑——Claude Code(即 Claude Agent)、Codex、Grok、OpenCode、ZCode、Antigravity,或者你自己列的一个讲 ACP 的命令——用那个 Agent 自己的工具干活、用它登录的账号计用量。应用照旧管权限模式和你的批准、Stop、收尾契约、交付和审查:能在调用前拦的都拦,拦不住、事后才知道的,按权限模式本该问或不许的就停下这一轮;应用自己的协作工具通过 MCP(Codex 是它的 dynamic tools)交给它。只有你能在 Bot 面板里切换;应用不提供登录、不碰凭据、不改它的配置。内置调用和模型阶梯也能选这些 Agent 的模型。细节见行为说明·本机 Agent和 ADR 0079。
回避:把 Agent 当补全端点, 在应用里登录 Agent, 改写 Agent 的配置文件, 读 Agent 的令牌, Bot 自己切换运行方式, 拿不到工具时假装交付
模型(Model)
某个端点认的一个补全名字,每个端点有自己的名单和默认。模型和思考等级一起钉,不单独存在:要么两个都不钉、由应用定,要么钉一个模型并同时定下它的等级。用户不每轮自选。引擎 7 级起(默认 8 级)一轮用哪个模型按固定的顺序定,不再每轮先挑:任务上指定的 → 你钉的 → Bot 的默认模型 → 端点默认,每轮记下是哪一条;需要看图的活不落到标着看不了图的模型上(钉的除外),同一件活连着没过或一轮里接连调错就提一档思考,交付连着没过而思考档用完时再沿你排的模型阶梯往上换(钉的和任务指定的不换);阶梯上的一级也可以是你本机 Agent 的模型(Claude、Codex、Grok…),爬到那一级的轮次由那个 Agent 来跑;任务上指定的也可以是 Agent 的模型,那张任务就由那个 Agent 来做(ADR 0076、ADR 0079)。7 级以下(数据目录被还不读版本闸的旧安装版挡在低级别时)每开一轮仍先由 agent 挑一次,看这条消息、这个 Bot 的人设、候选名单和最近的复盘结论,答出模型、思考等级和一句理由。细节见行为说明·模型。
行为细节
某个端点认的一个补全名字。每个端点有自己的名单和默认,名单上的名字可带选路参考价、可选计费单价、支持的思考等级和擅长领域。选路参考价是应用挑模型时用的相对数;计费单价是 USD / 百万 token,输入和输出一起配,缓存输入可单配,留空沿用输入价。计费单价用于缺实报金额的花费估算;探测模型名单不会自动填单价。用户发消息开一轮时,应用只在 Bot 钉的端点(没钉端点就是默认端点)的名单里选模型和思考等级,不会因为设置里多了一个端点就把它的模型算进别的 Bot;Bot 钉了仍在名单上的名字则模型名受约束,钉的名字只在别的端点上时照钉的用。Bot 也可以钉思考等级(补全的 reasoning_effort):档名以该模型名单为准(常见 none / low / medium / high,端点广告了还会有 xhigh、max 等)。探测 /models 时若对象带了思考档就自动写进该模型的 thinking_levels,设置里仍可手改。思考等级和模型一起钉,不单独存在:要么两个都不钉、模型和等级都由应用每条消息挑,要么钉一个模型并同时定下它的等级。钉模型时没给等级就落到该模型的默认档(应用对普通消息的偏好顺序);换成不支持原档的模型会落到新模型的默认档;清掉模型一并清掉等级;没钉模型却给等级会被拒。你在 Bot 面板里点一下就能改,Bot 也能用工具改自己的。和它私聊时输入框底部也能改,选择器和项目会话的一样一级一级展开:先是「自动」和各个端点,点一个端点展开它的模型,再展开这个模型的思考等级,点一个等级就把模型和等级一起钉上,点「自动」两个都不钉;收起时写着钉的模型和等级,有不止一个端点时端点名跟在后面、字小一号。本机 Agent 跑的 Bot 在那里选的是那个 Agent 的模型和思考强度(Claude Code 配了不止一个账号时最前面还有账号),和项目会话的选法一样,列的是它这个 Agent 支持的档位。改的都是 Bot 自己的设置,和在 Bot 面板里改是同一回事:它在群里、在别的会话里也按这个跑。空钉不是「永远用端点默认模型」,而是应用可从该端点名单里挑;要用别的端点必须显式钉端点。谁来挑(7 级以下;7 级起见下面的「默认模型」):每开一轮先由 agent 挑一次,它看这条消息、这个 Bot 的人设、候选名单、这个 Bot 最近的复盘结论(带当时那条消息和类别,对不上就当没看见)和最近干净做完的例子,答出模型、思考等级和一句理由;它自己固定跑在默认端点的默认模型上,答不出或答了不存在的东西就落回规则兜底,不让用户卡在选路上。用户后续说的每一句都原样留着(不按关键词筛),落在被引用的那一轮、@ 的那个 Bot 最近的一轮,或会话里最近可见的一轮上;连着围绕同一件事的若干轮算一条纠正链。链结束时(换了话题或静默一段时间)复盘一次;没有后续发言,但这一轮是端点拒绝、回复不完整或工具错误不少于两次,也复盘一次。复盘看的是整段加上这一轮实际做了什么:这到底是模型不行、事情本身难、还是需求没说清,只有判成模型不行才留成这个 Bot 的经验,并说明该往更强 / 更轻 / 更快 / 更便宜哪个方向调。留下的是结论不是分数,没有权重、抵扣和封顶;被照做两次仍没有更干净的结论退出选路,记录还在。经验归 Bot 自己,删除 Bot 一并删掉。每轮选了什么、怎么结束、做了多少、收到哪些反馈都留有记录。用户不每轮自选。判断调用和轮次补全用同一个解析结果。
默认模型(7 级起,默认就是 8 级;ADR 0048):不再每轮开头调一次模型来挑。一轮用什么,按固定顺序定:你给 Bot 钉的模型;没钉时用这个 Bot 的默认模型;没有默认时用端点默认。思考档用钉的那一档,模型不支持或没钉档时按这条消息的类别取它支持的最近一档;只钉了端点的 Bot 只在那个端点的名单里选;钉的模型已经不在名单上时先用端点默认,并告诉你一次;钉一直留着,模型回到名单上就照钉的用,Bot 面板里它显示为「不在名单上」,改别的字段照常保存(之前在端点设置里把模型从名单上去掉会当场清掉所有钉它的 Bot 的钉,什么都不说,2026-10-03 视频组两个 Bot 就这样从 claude-opus 换到了别的模型;7 级以下仍是清掉)。默认模型在第一次要用时定下:取它最近 7 天实际跑得最多、端点名单上还在的模型(改了名或下架的不算),思考档取它在这个模型上最常用的那一档;定下就一直用,不出卡片问你:想换就给它钉一个模型(2026-10-04 起;之前在你和它的私聊里出一张「之后默认用 X(思考档 Y),这是它最近 7 天用得最多的(N 轮)」[就用这个][用端点默认],附一条「等你回答」通知,2026-10-03 开 7 级那天四个 Bot 各来一张——问的不是要你定的事,你不答它也照用)。工作记录里记一条 model.default_inferred。以前出过的卡片照样能按:选端点默认就不再推断。看板上还可以给一张任务指定模型,排在钉和默认模型前面(ticket_override),只用于负责人的轮次,审它的 Bot 照用自己的。指定的可以是端点的模型,也可以是你本机 Agent 的模型(ADR 0079):任务的模型决定谁来做——Agent 的模型,这些轮次由那个 Agent 跑,像爬到阶梯上那一级;端点的模型,在应用自己的循环里跑,即使这个 Bot 平时由 Agent 跑。每轮的选路记录里多一列原因:ticket_override、pin、default、endpoint_default、pin_unlisted、capability_filter 或 escalation。复盘与学习照旧,到 8 级换成质量事件与教训。
看图与提档(7 级起;ADR 0049):模型在端点设置里可以标「能看图 / 看不了图 / 不确定」(不确定按能看图对待)。一轮由带图片的话开起,或者 Bot 审的任务有关于画面的必查要求时,选出来的模型如果标着看不了图:钉的照用、告诉你一次;没钉的换到标着能看图的模型(capability_filter)。一轮中途读到图片、而这一轮的模型看不了图时,图不发给它,工具结果写明。同一件活自上次提档以来连着 2 次交付没过,就跑高一档思考(escalation),到模型的顶档为止,整张任务通过后复位;你钉了思考档时不提,模型测出提档没用时不提档。
模型阶梯与一轮之内的提档(7 级起;ADR 0054):工具 → 分工 → Bot 一轮里可以把几个模型从弱到强排成阶梯(最多 8 个)。思考档用完(或模型测出提档没用)还要往上时,下一轮换到阶梯上往上一级的模型(escalation_model),跳过端点不再列出的、以及要看图而标着看不了图的;爬到最后一级还要往上就停在那里,告诉你一次。只有应用替 Bot 选的模型会沿阶梯换,你钉的和任务指定的只提思考档;没排阶梯或模型不在阶梯上时,到顶告诉你一次。除了交付连着没过,回复重试后仍失败、工具参数连续两次不是 JSON、同一工具连续三次调错(参数不对、被拦下还照调这类模型自己的错;文件不存在、超时、MCP 服务报错不算),也让这件活往上走一步,两次交付之间最多一步,而且只提思考档、不沿阶梯换模型;后两种在这一轮剩下的跳里就换上新的思考档。选路记录留着原本为什么选这个模型,流程图上读作「这张任务指定的 · 提了一档思考」。爬到阶梯上的轮次、任务指定模型的轮次不算进 Bot 默认模型的推断。
阶梯上的 Claude 模型(ADR 0076):本机的 Claude Code 装好并登录后,阶梯上也能排 Claude Code 自己 /model 列出的 Claude 模型(问不到时是 sonnet、opus、haiku、fable),每一级各自选思考强度(默认、低…最大,只列这一级的模型支持的)和账号(列了几个账号时);同一个模型换个思考强度可以再排一级,比如 opus 高、opus 最大。用应用自己循环的 Bot 爬到这一级时,下一轮交给你的 Claude Code、按这一级的模型、思考强度和账号来跑,跑法和 Claude Agent 的 Bot 一样;再往上一级是端点上的模型,就回到应用自己的循环。Claude 模型都能看图,看图的活不跳过它。Claude Agent 的 Bot 自己的 Claude 模型是你钉的,不沿阶梯换;它一轮里出的错交给 Claude Code 自己处理,不提档。只有你能把 Claude 模型排上阶梯:Bot 用 update_model_settings 只能保留、挪动或拿掉已经排上的,不能新加;阶梯上某一级用着的账号,要先把那一级拿掉或换个账号,才能从列表里删掉。
内置模型(ADR 0077):应用自己发起的模型调用,各有一个模型可选,都在「分工」页上(工具 → 分工;ADR 0082,ADR 0083 起是单独的一页、不在设置里;ADR 0075 先让整理器、书记员和看图判定有了自己的模型,ADR 0077 把九个调用收到模型服务里的一页,ADR 0082 又把这一页和这些调用的提示词合成「分工」)。页面上方选看哪个引擎(通用、视频、代码和你建的,默认的带 ★),可以设为默认、以它为底新建、看修改记录;下面是这个引擎画成的一张图,照流程图的样子:每件引出环节的事是一张底色卡片——「你的一句话」「群里没点名的一句」「Bot 的一轮」「交上来」「你接受交付」「你推翻放行」「你按 ✨」——它引出的环节是挂在它下面的虚线小卡,用线连着;宽到每件事的环节都排得下一行时并排在卡片下面,否则都沿左边一根线往下挂。每张环节卡写着它现在的模型(会调模型的;没设就写跟默认模型或跟 Bot 的模型)或它的第一个数,关着的变淡、写「已关」,锁着的带一把锁,和内置不同的带一个点,提示词有冲突或回答读不懂的点是警示色。宽窗上图在左,选中的环节在右,两边各自滚动,点一张卡只换右边,不跳动,↑ ↓ 键在环节之间挪;窄的时候(手机上,或宽窗里分窄了的标签、列表的位置——按这一页自己的宽度,不足 720px)图独占一页,点卡片进到它自己的一页;没有页头的标签里,这一页最上面有「回到图上」。右边是它做什么、它在这个引擎里开不开(能关的有开关,锁着的写「总是跑」)、它的数(改了当场存成这个引擎的新版本,旁边写着内置的值,有「恢复内置」),会调模型的再往下是它的模型和它用的那几段内置提示词(读句四段,看图判定四段,其余各一段),点一段就在同一个编辑页里改。连着还没有引擎的旧版 Mac 时,图照样画、每个环节都开着,不能改。Bot 一轮是虚线框:它跑在 Bot 自己的模型上、按模型阶梯往上换,带每一轮的提示词;点它,右边就是模型阶梯,可以在这里直接排(ADR 0082,原来在模型服务里),每一轮的提示词仍在提示词页,节点里放着去那里的链接。选模型和纠偏复盘、学习(7、8 级起不跑)、语音识别(有自己的服务和密钥)和测速不在这页上。每个调用可以选端点上的模型,或你经本机 Claude Code 跑的 Claude 模型(Claude Agent 那一组;列了几个账号时可选账号),或不设。不设就和以前一样:前三组跟默认端点的默认模型,输入建议跟默认端点里名字带 flash、mini、lite 或 fast 的那个,以 Bot 身份的四个跟 Bot 自己的模型(压缩上下文跟这一轮自己的模型),这几处都不指定思考档。选了模型才指定思考档,按调用要的来:有人等着的(读句、输入建议、判断下场)取最轻的一档;常跑的(书记员、压缩上下文)取 low,没列就取 none 以上最轻的一档;要读整份、要判准的(整理器、看图判定、反思、完工复盘)取 high(模型没列 high 就取它列出的、不超过 high 的最高一档;只列了更高的,取其中最轻的)。Claude 模型在你本机的 Claude Code 上跑一次,没有工具、只有一轮、用你选的账号;思考强度对应成 Claude Code 的:最轻的不指定,low、high 照给。读句以外的调用另有 3 个名额,不占读句的 2 个,一次长整理拖不住下一句话的读句;一次最多等这个调用原来的首字时限再加 180 秒;花的是那个 Claude 套餐的额度,花费照这个调用原来的类别和用途记、标着 Claude Agent,价格是估算。Claude Code 没装或没登录、出错、超时,各调用照它原来对失败的处理走。要发图的调用把图作为同一条消息里的图片块发过去;Claude 模型都能看图,所以看图判定选了 Claude 模型就全用它;选的是端点上的模型时,判定要发图(样片的帧、接缝的前后两张)就要它在模型属性里标了「能看图」,没标或标了看不了图都改用默认模型,只比文字的判定不受限。整理器要读整份规划、写回整份规划,选强模型:在 opus 上一次整理大约输入 20k、输出 6k token,花费比读句高得多,每个规划静下来还要再整理一次;选了才花,不选一个字不变。选的模型从端点名单上拿掉、或端点删掉后,这个调用读成不设,模型回到名单上又照选的用。之前选过的整理模型,升级时一次性抄给书记员和看图判定,现在各自能改;organizer_model 从此只指整理器。改过的调用(选了模型的、提示词改过的)在分工图上那个调用的节点旁有标记,有提示词冲突时是警示色(设置里不再有「分工」);提示词页只剩每一轮、Claude Agent 和工具说明三组,上面一行指向「分工」(连着还没给提示词标调用的旧版 Mac 时,应用自己的调用那一组照旧留在提示词页)。Bot 用 list_endpoints 看得到 builtin_models,用 update_model_settings 也能改,但只能改成端点上的模型或不设,不能改成你的 Claude 模型(花的是你的套餐),和读句一样。
只用 Claude Code 完成向导(ADR 0078):向导第 2 步可以选「用本机 Claude Code」代替端点。找到已登录的 Claude Code 才能往下走;第 3 步从 Claude Code 自己 /model 列出的模型里选一个(默认 sonnet)和账号,保存时全部内置调用(今天是十个)都设成它,不建端点,最后一步建的 Bot 都是 Claude Agent。工作区加上除压缩上下文和自定义环节外的八个内置调用都是 Claude 模型,向导就算完成(自定义环节没选就跟看图判定,2026-11-04 加上它时不把已经装好的人送回向导);没有端点时把其中一个改回跟随默认,向导会重新出现。这样设置、又没有能用的端点时,新建 Bot 没说谁来跑就是 Claude Agent,账号用读句的那个,Bot 用 create_bot 雇的队友也一样;「新建 Bot」表单默认选 Claude Agent;明说要应用自己跑的照办,加了端点后不再自动换。这台电脑上还找到已登录的别的 Agent(Codex、Grok……,ADR 0079)时,第 2 步在 Claude Code 旁边列出它们,选一个就照上面的样子用它:第 3 步选它的模型,第一个 Bot 和之后新建的 Bot 都由它跑。没有端点时,判断下场、反思、完工复盘照样在选的 Claude 模型上跑;端点上的 Bot、模型阶梯、从一串对话里学记忆和技能要等加了端点才有。
回避:供应商目录, 判断用另一个名字, 每轮自选, 思考等级永远只由应用选, 不钉模型只钉思考等级, 钉了模型却不定思考等级, 名册级共享的路由经验, 用关键词认模型反馈, 一句话就把一个模型永久钉死, 把选模型做成打分公式
默认模型(Default model)
引擎 7 级起,一个 Bot 在你没给它钉模型时用的模型和思考档:第一次要用时,按它最近 7 天实际跑得最多的、端点名单上还在的那个模型(和它在这个模型上最常用的思考档)定下,之后就一直用,不出卡片问你(想换就给它钉一个模型)。以前出过的卡片[就用这个][用端点默认]照样能按:选端点默认就不再推断。它取代了每轮开头调一次模型来挑。细节见行为说明·模型。
行为细节
某个端点认的一个补全名字。每个端点有自己的名单和默认,名单上的名字可带选路参考价、可选计费单价、支持的思考等级和擅长领域。选路参考价是应用挑模型时用的相对数;计费单价是 USD / 百万 token,输入和输出一起配,缓存输入可单配,留空沿用输入价。计费单价用于缺实报金额的花费估算;探测模型名单不会自动填单价。用户发消息开一轮时,应用只在 Bot 钉的端点(没钉端点就是默认端点)的名单里选模型和思考等级,不会因为设置里多了一个端点就把它的模型算进别的 Bot;Bot 钉了仍在名单上的名字则模型名受约束,钉的名字只在别的端点上时照钉的用。Bot 也可以钉思考等级(补全的 reasoning_effort):档名以该模型名单为准(常见 none / low / medium / high,端点广告了还会有 xhigh、max 等)。探测 /models 时若对象带了思考档就自动写进该模型的 thinking_levels,设置里仍可手改。思考等级和模型一起钉,不单独存在:要么两个都不钉、模型和等级都由应用每条消息挑,要么钉一个模型并同时定下它的等级。钉模型时没给等级就落到该模型的默认档(应用对普通消息的偏好顺序);换成不支持原档的模型会落到新模型的默认档;清掉模型一并清掉等级;没钉模型却给等级会被拒。你在 Bot 面板里点一下就能改,Bot 也能用工具改自己的。和它私聊时输入框底部也能改,选择器和项目会话的一样一级一级展开:先是「自动」和各个端点,点一个端点展开它的模型,再展开这个模型的思考等级,点一个等级就把模型和等级一起钉上,点「自动」两个都不钉;收起时写着钉的模型和等级,有不止一个端点时端点名跟在后面、字小一号。本机 Agent 跑的 Bot 在那里选的是那个 Agent 的模型和思考强度(Claude Code 配了不止一个账号时最前面还有账号),和项目会话的选法一样,列的是它这个 Agent 支持的档位。改的都是 Bot 自己的设置,和在 Bot 面板里改是同一回事:它在群里、在别的会话里也按这个跑。空钉不是「永远用端点默认模型」,而是应用可从该端点名单里挑;要用别的端点必须显式钉端点。谁来挑(7 级以下;7 级起见下面的「默认模型」):每开一轮先由 agent 挑一次,它看这条消息、这个 Bot 的人设、候选名单、这个 Bot 最近的复盘结论(带当时那条消息和类别,对不上就当没看见)和最近干净做完的例子,答出模型、思考等级和一句理由;它自己固定跑在默认端点的默认模型上,答不出或答了不存在的东西就落回规则兜底,不让用户卡在选路上。用户后续说的每一句都原样留着(不按关键词筛),落在被引用的那一轮、@ 的那个 Bot 最近的一轮,或会话里最近可见的一轮上;连着围绕同一件事的若干轮算一条纠正链。链结束时(换了话题或静默一段时间)复盘一次;没有后续发言,但这一轮是端点拒绝、回复不完整或工具错误不少于两次,也复盘一次。复盘看的是整段加上这一轮实际做了什么:这到底是模型不行、事情本身难、还是需求没说清,只有判成模型不行才留成这个 Bot 的经验,并说明该往更强 / 更轻 / 更快 / 更便宜哪个方向调。留下的是结论不是分数,没有权重、抵扣和封顶;被照做两次仍没有更干净的结论退出选路,记录还在。经验归 Bot 自己,删除 Bot 一并删掉。每轮选了什么、怎么结束、做了多少、收到哪些反馈都留有记录。用户不每轮自选。判断调用和轮次补全用同一个解析结果。
默认模型(7 级起,默认就是 8 级;ADR 0048):不再每轮开头调一次模型来挑。一轮用什么,按固定顺序定:你给 Bot 钉的模型;没钉时用这个 Bot 的默认模型;没有默认时用端点默认。思考档用钉的那一档,模型不支持或没钉档时按这条消息的类别取它支持的最近一档;只钉了端点的 Bot 只在那个端点的名单里选;钉的模型已经不在名单上时先用端点默认,并告诉你一次;钉一直留着,模型回到名单上就照钉的用,Bot 面板里它显示为「不在名单上」,改别的字段照常保存(之前在端点设置里把模型从名单上去掉会当场清掉所有钉它的 Bot 的钉,什么都不说,2026-10-03 视频组两个 Bot 就这样从 claude-opus 换到了别的模型;7 级以下仍是清掉)。默认模型在第一次要用时定下:取它最近 7 天实际跑得最多、端点名单上还在的模型(改了名或下架的不算),思考档取它在这个模型上最常用的那一档;定下就一直用,不出卡片问你:想换就给它钉一个模型(2026-10-04 起;之前在你和它的私聊里出一张「之后默认用 X(思考档 Y),这是它最近 7 天用得最多的(N 轮)」[就用这个][用端点默认],附一条「等你回答」通知,2026-10-03 开 7 级那天四个 Bot 各来一张——问的不是要你定的事,你不答它也照用)。工作记录里记一条 model.default_inferred。以前出过的卡片照样能按:选端点默认就不再推断。看板上还可以给一张任务指定模型,排在钉和默认模型前面(ticket_override),只用于负责人的轮次,审它的 Bot 照用自己的。指定的可以是端点的模型,也可以是你本机 Agent 的模型(ADR 0079):任务的模型决定谁来做——Agent 的模型,这些轮次由那个 Agent 跑,像爬到阶梯上那一级;端点的模型,在应用自己的循环里跑,即使这个 Bot 平时由 Agent 跑。每轮的选路记录里多一列原因:ticket_override、pin、default、endpoint_default、pin_unlisted、capability_filter 或 escalation。复盘与学习照旧,到 8 级换成质量事件与教训。
看图与提档(7 级起;ADR 0049):模型在端点设置里可以标「能看图 / 看不了图 / 不确定」(不确定按能看图对待)。一轮由带图片的话开起,或者 Bot 审的任务有关于画面的必查要求时,选出来的模型如果标着看不了图:钉的照用、告诉你一次;没钉的换到标着能看图的模型(capability_filter)。一轮中途读到图片、而这一轮的模型看不了图时,图不发给它,工具结果写明。同一件活自上次提档以来连着 2 次交付没过,就跑高一档思考(escalation),到模型的顶档为止,整张任务通过后复位;你钉了思考档时不提,模型测出提档没用时不提档。
模型阶梯与一轮之内的提档(7 级起;ADR 0054):工具 → 分工 → Bot 一轮里可以把几个模型从弱到强排成阶梯(最多 8 个)。思考档用完(或模型测出提档没用)还要往上时,下一轮换到阶梯上往上一级的模型(escalation_model),跳过端点不再列出的、以及要看图而标着看不了图的;爬到最后一级还要往上就停在那里,告诉你一次。只有应用替 Bot 选的模型会沿阶梯换,你钉的和任务指定的只提思考档;没排阶梯或模型不在阶梯上时,到顶告诉你一次。除了交付连着没过,回复重试后仍失败、工具参数连续两次不是 JSON、同一工具连续三次调错(参数不对、被拦下还照调这类模型自己的错;文件不存在、超时、MCP 服务报错不算),也让这件活往上走一步,两次交付之间最多一步,而且只提思考档、不沿阶梯换模型;后两种在这一轮剩下的跳里就换上新的思考档。选路记录留着原本为什么选这个模型,流程图上读作「这张任务指定的 · 提了一档思考」。爬到阶梯上的轮次、任务指定模型的轮次不算进 Bot 默认模型的推断。
阶梯上的 Claude 模型(ADR 0076):本机的 Claude Code 装好并登录后,阶梯上也能排 Claude Code 自己 /model 列出的 Claude 模型(问不到时是 sonnet、opus、haiku、fable),每一级各自选思考强度(默认、低…最大,只列这一级的模型支持的)和账号(列了几个账号时);同一个模型换个思考强度可以再排一级,比如 opus 高、opus 最大。用应用自己循环的 Bot 爬到这一级时,下一轮交给你的 Claude Code、按这一级的模型、思考强度和账号来跑,跑法和 Claude Agent 的 Bot 一样;再往上一级是端点上的模型,就回到应用自己的循环。Claude 模型都能看图,看图的活不跳过它。Claude Agent 的 Bot 自己的 Claude 模型是你钉的,不沿阶梯换;它一轮里出的错交给 Claude Code 自己处理,不提档。只有你能把 Claude 模型排上阶梯:Bot 用 update_model_settings 只能保留、挪动或拿掉已经排上的,不能新加;阶梯上某一级用着的账号,要先把那一级拿掉或换个账号,才能从列表里删掉。
内置模型(ADR 0077):应用自己发起的模型调用,各有一个模型可选,都在「分工」页上(工具 → 分工;ADR 0082,ADR 0083 起是单独的一页、不在设置里;ADR 0075 先让整理器、书记员和看图判定有了自己的模型,ADR 0077 把九个调用收到模型服务里的一页,ADR 0082 又把这一页和这些调用的提示词合成「分工」)。页面上方选看哪个引擎(通用、视频、代码和你建的,默认的带 ★),可以设为默认、以它为底新建、看修改记录;下面是这个引擎画成的一张图,照流程图的样子:每件引出环节的事是一张底色卡片——「你的一句话」「群里没点名的一句」「Bot 的一轮」「交上来」「你接受交付」「你推翻放行」「你按 ✨」——它引出的环节是挂在它下面的虚线小卡,用线连着;宽到每件事的环节都排得下一行时并排在卡片下面,否则都沿左边一根线往下挂。每张环节卡写着它现在的模型(会调模型的;没设就写跟默认模型或跟 Bot 的模型)或它的第一个数,关着的变淡、写「已关」,锁着的带一把锁,和内置不同的带一个点,提示词有冲突或回答读不懂的点是警示色。宽窗上图在左,选中的环节在右,两边各自滚动,点一张卡只换右边,不跳动,↑ ↓ 键在环节之间挪;窄的时候(手机上,或宽窗里分窄了的标签、列表的位置——按这一页自己的宽度,不足 720px)图独占一页,点卡片进到它自己的一页;没有页头的标签里,这一页最上面有「回到图上」。右边是它做什么、它在这个引擎里开不开(能关的有开关,锁着的写「总是跑」)、它的数(改了当场存成这个引擎的新版本,旁边写着内置的值,有「恢复内置」),会调模型的再往下是它的模型和它用的那几段内置提示词(读句四段,看图判定四段,其余各一段),点一段就在同一个编辑页里改。连着还没有引擎的旧版 Mac 时,图照样画、每个环节都开着,不能改。Bot 一轮是虚线框:它跑在 Bot 自己的模型上、按模型阶梯往上换,带每一轮的提示词;点它,右边就是模型阶梯,可以在这里直接排(ADR 0082,原来在模型服务里),每一轮的提示词仍在提示词页,节点里放着去那里的链接。选模型和纠偏复盘、学习(7、8 级起不跑)、语音识别(有自己的服务和密钥)和测速不在这页上。每个调用可以选端点上的模型,或你经本机 Claude Code 跑的 Claude 模型(Claude Agent 那一组;列了几个账号时可选账号),或不设。不设就和以前一样:前三组跟默认端点的默认模型,输入建议跟默认端点里名字带 flash、mini、lite 或 fast 的那个,以 Bot 身份的四个跟 Bot 自己的模型(压缩上下文跟这一轮自己的模型),这几处都不指定思考档。选了模型才指定思考档,按调用要的来:有人等着的(读句、输入建议、判断下场)取最轻的一档;常跑的(书记员、压缩上下文)取 low,没列就取 none 以上最轻的一档;要读整份、要判准的(整理器、看图判定、反思、完工复盘)取 high(模型没列 high 就取它列出的、不超过 high 的最高一档;只列了更高的,取其中最轻的)。Claude 模型在你本机的 Claude Code 上跑一次,没有工具、只有一轮、用你选的账号;思考强度对应成 Claude Code 的:最轻的不指定,low、high 照给。读句以外的调用另有 3 个名额,不占读句的 2 个,一次长整理拖不住下一句话的读句;一次最多等这个调用原来的首字时限再加 180 秒;花的是那个 Claude 套餐的额度,花费照这个调用原来的类别和用途记、标着 Claude Agent,价格是估算。Claude Code 没装或没登录、出错、超时,各调用照它原来对失败的处理走。要发图的调用把图作为同一条消息里的图片块发过去;Claude 模型都能看图,所以看图判定选了 Claude 模型就全用它;选的是端点上的模型时,判定要发图(样片的帧、接缝的前后两张)就要它在模型属性里标了「能看图」,没标或标了看不了图都改用默认模型,只比文字的判定不受限。整理器要读整份规划、写回整份规划,选强模型:在 opus 上一次整理大约输入 20k、输出 6k token,花费比读句高得多,每个规划静下来还要再整理一次;选了才花,不选一个字不变。选的模型从端点名单上拿掉、或端点删掉后,这个调用读成不设,模型回到名单上又照选的用。之前选过的整理模型,升级时一次性抄给书记员和看图判定,现在各自能改;organizer_model 从此只指整理器。改过的调用(选了模型的、提示词改过的)在分工图上那个调用的节点旁有标记,有提示词冲突时是警示色(设置里不再有「分工」);提示词页只剩每一轮、Claude Agent 和工具说明三组,上面一行指向「分工」(连着还没给提示词标调用的旧版 Mac 时,应用自己的调用那一组照旧留在提示词页)。Bot 用 list_endpoints 看得到 builtin_models,用 update_model_settings 也能改,但只能改成端点上的模型或不设,不能改成你的 Claude 模型(花的是你的套餐),和读句一样。
只用 Claude Code 完成向导(ADR 0078):向导第 2 步可以选「用本机 Claude Code」代替端点。找到已登录的 Claude Code 才能往下走;第 3 步从 Claude Code 自己 /model 列出的模型里选一个(默认 sonnet)和账号,保存时全部内置调用(今天是十个)都设成它,不建端点,最后一步建的 Bot 都是 Claude Agent。工作区加上除压缩上下文和自定义环节外的八个内置调用都是 Claude 模型,向导就算完成(自定义环节没选就跟看图判定,2026-11-04 加上它时不把已经装好的人送回向导);没有端点时把其中一个改回跟随默认,向导会重新出现。这样设置、又没有能用的端点时,新建 Bot 没说谁来跑就是 Claude Agent,账号用读句的那个,Bot 用 create_bot 雇的队友也一样;「新建 Bot」表单默认选 Claude Agent;明说要应用自己跑的照办,加了端点后不再自动换。这台电脑上还找到已登录的别的 Agent(Codex、Grok……,ADR 0079)时,第 2 步在 Claude Code 旁边列出它们,选一个就照上面的样子用它:第 3 步选它的模型,第一个 Bot 和之后新建的 Bot 都由它跑。没有端点时,判断下场、反思、完工复盘照样在选的 Claude 模型上跑;端点上的 Bot、模型阶梯、从一串对话里学记忆和技能要等加了端点才有。
回避:每轮重新挑, 为一个不用你定的默认出卡片问你, 拿已经改名或下架的模型当默认
内置模型(Built-in models)
应用自己发起的每个模型调用各选一个模型:读句、整理器、书记员、看图判定、输入建议,以及以 Bot 身份的判断下场、反思、完工复盘、压缩上下文(ADR 0075、ADR 0077)。在「分工」页上(ADR 0082;ADR 0083 起是工具里单独的一页,不在设置里):一张图按什么时候跑把这九个调用和 Bot 自己的一轮画出来,点开一个调用,它的模型和它用的内置提示词在同一处设。每个都能选端点上的模型,或你经本机 Claude Code 跑的 Claude 模型;不设就和以前一样(跟默认模型,输入建议跟默认端点的 flash、mini、lite 或 fast 模型,以 Bot 身份的几个跟 Bot 自己的模型)。选了模型才指定思考档:有人等着的取最轻,书记员和压缩上下文取 low,整理器、看图判定、反思、完工复盘取 high。整理器要读整份规划、写回整份规划,所以这里要用强模型,一次整理在 opus 上约输入 20k、输出 6k token;看图判定选了端点上的模型,要发图时只用标了「能看图」的,没标就改用默认模型,Claude 模型都能看图。Claude 模型花的是你 Claude 套餐的额度,花费仍按原来的类别和用途记;Bot 只能把它们换成端点上的模型或不设。细节见行为说明·模型。
行为细节
某个端点认的一个补全名字。每个端点有自己的名单和默认,名单上的名字可带选路参考价、可选计费单价、支持的思考等级和擅长领域。选路参考价是应用挑模型时用的相对数;计费单价是 USD / 百万 token,输入和输出一起配,缓存输入可单配,留空沿用输入价。计费单价用于缺实报金额的花费估算;探测模型名单不会自动填单价。用户发消息开一轮时,应用只在 Bot 钉的端点(没钉端点就是默认端点)的名单里选模型和思考等级,不会因为设置里多了一个端点就把它的模型算进别的 Bot;Bot 钉了仍在名单上的名字则模型名受约束,钉的名字只在别的端点上时照钉的用。Bot 也可以钉思考等级(补全的 reasoning_effort):档名以该模型名单为准(常见 none / low / medium / high,端点广告了还会有 xhigh、max 等)。探测 /models 时若对象带了思考档就自动写进该模型的 thinking_levels,设置里仍可手改。思考等级和模型一起钉,不单独存在:要么两个都不钉、模型和等级都由应用每条消息挑,要么钉一个模型并同时定下它的等级。钉模型时没给等级就落到该模型的默认档(应用对普通消息的偏好顺序);换成不支持原档的模型会落到新模型的默认档;清掉模型一并清掉等级;没钉模型却给等级会被拒。你在 Bot 面板里点一下就能改,Bot 也能用工具改自己的。和它私聊时输入框底部也能改,选择器和项目会话的一样一级一级展开:先是「自动」和各个端点,点一个端点展开它的模型,再展开这个模型的思考等级,点一个等级就把模型和等级一起钉上,点「自动」两个都不钉;收起时写着钉的模型和等级,有不止一个端点时端点名跟在后面、字小一号。本机 Agent 跑的 Bot 在那里选的是那个 Agent 的模型和思考强度(Claude Code 配了不止一个账号时最前面还有账号),和项目会话的选法一样,列的是它这个 Agent 支持的档位。改的都是 Bot 自己的设置,和在 Bot 面板里改是同一回事:它在群里、在别的会话里也按这个跑。空钉不是「永远用端点默认模型」,而是应用可从该端点名单里挑;要用别的端点必须显式钉端点。谁来挑(7 级以下;7 级起见下面的「默认模型」):每开一轮先由 agent 挑一次,它看这条消息、这个 Bot 的人设、候选名单、这个 Bot 最近的复盘结论(带当时那条消息和类别,对不上就当没看见)和最近干净做完的例子,答出模型、思考等级和一句理由;它自己固定跑在默认端点的默认模型上,答不出或答了不存在的东西就落回规则兜底,不让用户卡在选路上。用户后续说的每一句都原样留着(不按关键词筛),落在被引用的那一轮、@ 的那个 Bot 最近的一轮,或会话里最近可见的一轮上;连着围绕同一件事的若干轮算一条纠正链。链结束时(换了话题或静默一段时间)复盘一次;没有后续发言,但这一轮是端点拒绝、回复不完整或工具错误不少于两次,也复盘一次。复盘看的是整段加上这一轮实际做了什么:这到底是模型不行、事情本身难、还是需求没说清,只有判成模型不行才留成这个 Bot 的经验,并说明该往更强 / 更轻 / 更快 / 更便宜哪个方向调。留下的是结论不是分数,没有权重、抵扣和封顶;被照做两次仍没有更干净的结论退出选路,记录还在。经验归 Bot 自己,删除 Bot 一并删掉。每轮选了什么、怎么结束、做了多少、收到哪些反馈都留有记录。用户不每轮自选。判断调用和轮次补全用同一个解析结果。
默认模型(7 级起,默认就是 8 级;ADR 0048):不再每轮开头调一次模型来挑。一轮用什么,按固定顺序定:你给 Bot 钉的模型;没钉时用这个 Bot 的默认模型;没有默认时用端点默认。思考档用钉的那一档,模型不支持或没钉档时按这条消息的类别取它支持的最近一档;只钉了端点的 Bot 只在那个端点的名单里选;钉的模型已经不在名单上时先用端点默认,并告诉你一次;钉一直留着,模型回到名单上就照钉的用,Bot 面板里它显示为「不在名单上」,改别的字段照常保存(之前在端点设置里把模型从名单上去掉会当场清掉所有钉它的 Bot 的钉,什么都不说,2026-10-03 视频组两个 Bot 就这样从 claude-opus 换到了别的模型;7 级以下仍是清掉)。默认模型在第一次要用时定下:取它最近 7 天实际跑得最多、端点名单上还在的模型(改了名或下架的不算),思考档取它在这个模型上最常用的那一档;定下就一直用,不出卡片问你:想换就给它钉一个模型(2026-10-04 起;之前在你和它的私聊里出一张「之后默认用 X(思考档 Y),这是它最近 7 天用得最多的(N 轮)」[就用这个][用端点默认],附一条「等你回答」通知,2026-10-03 开 7 级那天四个 Bot 各来一张——问的不是要你定的事,你不答它也照用)。工作记录里记一条 model.default_inferred。以前出过的卡片照样能按:选端点默认就不再推断。看板上还可以给一张任务指定模型,排在钉和默认模型前面(ticket_override),只用于负责人的轮次,审它的 Bot 照用自己的。指定的可以是端点的模型,也可以是你本机 Agent 的模型(ADR 0079):任务的模型决定谁来做——Agent 的模型,这些轮次由那个 Agent 跑,像爬到阶梯上那一级;端点的模型,在应用自己的循环里跑,即使这个 Bot 平时由 Agent 跑。每轮的选路记录里多一列原因:ticket_override、pin、default、endpoint_default、pin_unlisted、capability_filter 或 escalation。复盘与学习照旧,到 8 级换成质量事件与教训。
看图与提档(7 级起;ADR 0049):模型在端点设置里可以标「能看图 / 看不了图 / 不确定」(不确定按能看图对待)。一轮由带图片的话开起,或者 Bot 审的任务有关于画面的必查要求时,选出来的模型如果标着看不了图:钉的照用、告诉你一次;没钉的换到标着能看图的模型(capability_filter)。一轮中途读到图片、而这一轮的模型看不了图时,图不发给它,工具结果写明。同一件活自上次提档以来连着 2 次交付没过,就跑高一档思考(escalation),到模型的顶档为止,整张任务通过后复位;你钉了思考档时不提,模型测出提档没用时不提档。
模型阶梯与一轮之内的提档(7 级起;ADR 0054):工具 → 分工 → Bot 一轮里可以把几个模型从弱到强排成阶梯(最多 8 个)。思考档用完(或模型测出提档没用)还要往上时,下一轮换到阶梯上往上一级的模型(escalation_model),跳过端点不再列出的、以及要看图而标着看不了图的;爬到最后一级还要往上就停在那里,告诉你一次。只有应用替 Bot 选的模型会沿阶梯换,你钉的和任务指定的只提思考档;没排阶梯或模型不在阶梯上时,到顶告诉你一次。除了交付连着没过,回复重试后仍失败、工具参数连续两次不是 JSON、同一工具连续三次调错(参数不对、被拦下还照调这类模型自己的错;文件不存在、超时、MCP 服务报错不算),也让这件活往上走一步,两次交付之间最多一步,而且只提思考档、不沿阶梯换模型;后两种在这一轮剩下的跳里就换上新的思考档。选路记录留着原本为什么选这个模型,流程图上读作「这张任务指定的 · 提了一档思考」。爬到阶梯上的轮次、任务指定模型的轮次不算进 Bot 默认模型的推断。
阶梯上的 Claude 模型(ADR 0076):本机的 Claude Code 装好并登录后,阶梯上也能排 Claude Code 自己 /model 列出的 Claude 模型(问不到时是 sonnet、opus、haiku、fable),每一级各自选思考强度(默认、低…最大,只列这一级的模型支持的)和账号(列了几个账号时);同一个模型换个思考强度可以再排一级,比如 opus 高、opus 最大。用应用自己循环的 Bot 爬到这一级时,下一轮交给你的 Claude Code、按这一级的模型、思考强度和账号来跑,跑法和 Claude Agent 的 Bot 一样;再往上一级是端点上的模型,就回到应用自己的循环。Claude 模型都能看图,看图的活不跳过它。Claude Agent 的 Bot 自己的 Claude 模型是你钉的,不沿阶梯换;它一轮里出的错交给 Claude Code 自己处理,不提档。只有你能把 Claude 模型排上阶梯:Bot 用 update_model_settings 只能保留、挪动或拿掉已经排上的,不能新加;阶梯上某一级用着的账号,要先把那一级拿掉或换个账号,才能从列表里删掉。
内置模型(ADR 0077):应用自己发起的模型调用,各有一个模型可选,都在「分工」页上(工具 → 分工;ADR 0082,ADR 0083 起是单独的一页、不在设置里;ADR 0075 先让整理器、书记员和看图判定有了自己的模型,ADR 0077 把九个调用收到模型服务里的一页,ADR 0082 又把这一页和这些调用的提示词合成「分工」)。页面上方选看哪个引擎(通用、视频、代码和你建的,默认的带 ★),可以设为默认、以它为底新建、看修改记录;下面是这个引擎画成的一张图,照流程图的样子:每件引出环节的事是一张底色卡片——「你的一句话」「群里没点名的一句」「Bot 的一轮」「交上来」「你接受交付」「你推翻放行」「你按 ✨」——它引出的环节是挂在它下面的虚线小卡,用线连着;宽到每件事的环节都排得下一行时并排在卡片下面,否则都沿左边一根线往下挂。每张环节卡写着它现在的模型(会调模型的;没设就写跟默认模型或跟 Bot 的模型)或它的第一个数,关着的变淡、写「已关」,锁着的带一把锁,和内置不同的带一个点,提示词有冲突或回答读不懂的点是警示色。宽窗上图在左,选中的环节在右,两边各自滚动,点一张卡只换右边,不跳动,↑ ↓ 键在环节之间挪;窄的时候(手机上,或宽窗里分窄了的标签、列表的位置——按这一页自己的宽度,不足 720px)图独占一页,点卡片进到它自己的一页;没有页头的标签里,这一页最上面有「回到图上」。右边是它做什么、它在这个引擎里开不开(能关的有开关,锁着的写「总是跑」)、它的数(改了当场存成这个引擎的新版本,旁边写着内置的值,有「恢复内置」),会调模型的再往下是它的模型和它用的那几段内置提示词(读句四段,看图判定四段,其余各一段),点一段就在同一个编辑页里改。连着还没有引擎的旧版 Mac 时,图照样画、每个环节都开着,不能改。Bot 一轮是虚线框:它跑在 Bot 自己的模型上、按模型阶梯往上换,带每一轮的提示词;点它,右边就是模型阶梯,可以在这里直接排(ADR 0082,原来在模型服务里),每一轮的提示词仍在提示词页,节点里放着去那里的链接。选模型和纠偏复盘、学习(7、8 级起不跑)、语音识别(有自己的服务和密钥)和测速不在这页上。每个调用可以选端点上的模型,或你经本机 Claude Code 跑的 Claude 模型(Claude Agent 那一组;列了几个账号时可选账号),或不设。不设就和以前一样:前三组跟默认端点的默认模型,输入建议跟默认端点里名字带 flash、mini、lite 或 fast 的那个,以 Bot 身份的四个跟 Bot 自己的模型(压缩上下文跟这一轮自己的模型),这几处都不指定思考档。选了模型才指定思考档,按调用要的来:有人等着的(读句、输入建议、判断下场)取最轻的一档;常跑的(书记员、压缩上下文)取 low,没列就取 none 以上最轻的一档;要读整份、要判准的(整理器、看图判定、反思、完工复盘)取 high(模型没列 high 就取它列出的、不超过 high 的最高一档;只列了更高的,取其中最轻的)。Claude 模型在你本机的 Claude Code 上跑一次,没有工具、只有一轮、用你选的账号;思考强度对应成 Claude Code 的:最轻的不指定,low、high 照给。读句以外的调用另有 3 个名额,不占读句的 2 个,一次长整理拖不住下一句话的读句;一次最多等这个调用原来的首字时限再加 180 秒;花的是那个 Claude 套餐的额度,花费照这个调用原来的类别和用途记、标着 Claude Agent,价格是估算。Claude Code 没装或没登录、出错、超时,各调用照它原来对失败的处理走。要发图的调用把图作为同一条消息里的图片块发过去;Claude 模型都能看图,所以看图判定选了 Claude 模型就全用它;选的是端点上的模型时,判定要发图(样片的帧、接缝的前后两张)就要它在模型属性里标了「能看图」,没标或标了看不了图都改用默认模型,只比文字的判定不受限。整理器要读整份规划、写回整份规划,选强模型:在 opus 上一次整理大约输入 20k、输出 6k token,花费比读句高得多,每个规划静下来还要再整理一次;选了才花,不选一个字不变。选的模型从端点名单上拿掉、或端点删掉后,这个调用读成不设,模型回到名单上又照选的用。之前选过的整理模型,升级时一次性抄给书记员和看图判定,现在各自能改;organizer_model 从此只指整理器。改过的调用(选了模型的、提示词改过的)在分工图上那个调用的节点旁有标记,有提示词冲突时是警示色(设置里不再有「分工」);提示词页只剩每一轮、Claude Agent 和工具说明三组,上面一行指向「分工」(连着还没给提示词标调用的旧版 Mac 时,应用自己的调用那一组照旧留在提示词页)。Bot 用 list_endpoints 看得到 builtin_models,用 update_model_settings 也能改,但只能改成端点上的模型或不设,不能改成你的 Claude 模型(花的是你的套餐),和读句一样。
只用 Claude Code 完成向导(ADR 0078):向导第 2 步可以选「用本机 Claude Code」代替端点。找到已登录的 Claude Code 才能往下走;第 3 步从 Claude Code 自己 /model 列出的模型里选一个(默认 sonnet)和账号,保存时全部内置调用(今天是十个)都设成它,不建端点,最后一步建的 Bot 都是 Claude Agent。工作区加上除压缩上下文和自定义环节外的八个内置调用都是 Claude 模型,向导就算完成(自定义环节没选就跟看图判定,2026-11-04 加上它时不把已经装好的人送回向导);没有端点时把其中一个改回跟随默认,向导会重新出现。这样设置、又没有能用的端点时,新建 Bot 没说谁来跑就是 Claude Agent,账号用读句的那个,Bot 用 create_bot 雇的队友也一样;「新建 Bot」表单默认选 Claude Agent;明说要应用自己跑的照办,加了端点后不再自动换。这台电脑上还找到已登录的别的 Agent(Codex、Grok……,ADR 0079)时,第 2 步在 Claude Code 旁边列出它们,选一个就照上面的样子用它:第 3 步选它的模型,第一个 Bot 和之后新建的 Bot 都由它跑。没有端点时,判断下场、反思、完工复盘照样在选的 Claude 模型上跑;端点上的 Bot、模型阶梯、从一串对话里学记忆和技能要等加了端点才有。
回避:让后台调用只能跟默认模型走而不能各自指定, 用看不了图的模型做照样片判定, 给书记员用最高思考档, 把读句模型当成整理器的模型, 让 Bot 把内置调用换成你的 Claude 模型
引擎(Engine)
应用怎么包着一个会话:跑不跑一件件事(jobs:归属、规划和任务、工作目录、结束契约、委派、交付审查、大活、监督器,一起开关),书记员、收尾自检、整理、模型升级、完工复盘、反思、等你放行、大活先拆、能力天花板、监督器接手、按你的话加的检查各自开不开,排队上限、跳数节奏、整理前静多久、回看的间隔和次数、监督器接手、能力天花板这些数是多少,也能带自己的一份系统指令、少给几组工具,还能在应用已有的时机上加你自己的环节(调用之前或之后、一轮收尾时、交上来时、交付放行后、你退回后),按规则、命令或模型判过不过,「不过」做什么只能从这个时机的固定清单里选(ADR 0085、ADR 0103、ADR 0105)。底线不在里面:你的话按顺序进来、Stop 和叫停、权限模式和批准、花费账本和上限、压缩。站在 jobs 上的环节随它一起停;读句只有 jobs 关着时才能关,放行要读你的话。内置四套:通用(默认:不要书记员和反思)、视频、代码是同一套工作方式的三个模板;自由不用它:你的话不开事,Bot 直接干,做完算不算数由你看。你改的只存和内置不同的几项,每改一次留一条修改记录,也能以一套为底另建。关于一件事的调用照那件事所在会话的引擎,别的照它所在的会话,会话没指定就用设置里的默认。在分工页上按流程图的样子看和改,在群设置和私聊里 Bot 的「操作」里给会话选。和引擎级别(engine_level,见「版本闸」)不是一回事。细节见行为说明·引擎。
行为细节
ADR 0085、ADR 0103。应用怎么包着一个会话:底线(你的话按顺序进来、Stop 和叫停、权限模式和批准卡、花费账本和每日上限、压缩上下文、输出上限和复读防护、原话存档)是代码;跑不跑一件件事、挂在上面的环节和它们的数是引擎。和引擎级别(engine_level,见词条「版本闸」)不是一回事:那是数据目录升级到哪一级,引擎是你选的跑法。
环节(PLAYBOOK_STEPS,按它们挂在哪里):
| 挂在哪 | 环节 | 能关 | 数(默认) |
|---|---|---|---|
| 你的一句话 | 排队上限 | 否 | 前一句还没处理完时最多等 45 秒 |
| 读句 | 只有一件件事关着时 | — | |
一件件事(jobs) |
是 | — | |
| 书记员 | 是 | 一句话最多记 8 条 | |
| 按你的话加的检查 | 是 | — | |
| 大活先拆 | 是 | — | |
| 群里没点名的一句 | 判断下场 | 是 | — |
| Bot 的一轮 | 跳数节奏 | 是 | 每 40 跳问一次进展(只问,不收工具) |
| 压缩上下文 | 否 | — | |
| 收尾自检 | 是 | — | |
| 整理 | 是 | 一件事静下来 30 秒再整理 | |
| Bot 自己约的回看 | 否 | 最短 5 分钟,每件活每小时最多 6 个 | |
| 监督器接手 | 是 | 没人管 2 分钟后叫回,每件活每小时最多接 3 次 | |
| 交上来 | 验收检查和看图判定 | 否 | — |
| 等你放行 | 是 | — | |
| 模型升级 | 是 | 连续没过 2 次升一档 | |
| 能力天花板 | 是 | 同一条连续 3 次,或没过超过 6 次 | |
| 你接受交付 | 完工复盘 | 是 | — |
| 你推翻放行 | 反思 | 是 | — |
| 你按 ✨ | 输入建议 | 否 | — |
书记员、按你的话加的检查、大活先拆、收尾自检、整理、监督器接手、验收检查、等你放行、模型升级、能力天花板、完工复盘、反思都站在一件件事上:它关了它们不跑,你给它们设的值留着,再打开时照旧。不能关的环节,一件件事开着时关了内核就不成立:验收检查不跑,一份绑着你检查的交付就永远等着;读句不跑,等你放行的交付也永远等着。读句、判断下场、压缩、输入建议、看图判定、整理、书记员、反思、完工复盘用的模型和提示词仍是全局的,在同一张图上设(内置模型、内置提示词)。数都是整数、有范围(比如整理前静 10 到 600 秒)。一轮连续调工具多少跳都行,不设上限(2026-10-17 起;之前 160 跳、视频 200 跳收起工具,你存过的这个数读的时候略过)。基准测试的开关(ablation)照旧有效,并且压过引擎。
内置的四套(前三套是同一套工作方式的三个模板,按截至 2026-10-11 的对话记录调过,数字见 ADR 0085):
- 通用(默认):不要书记员和反思——不在你背后记要求、出提议卡片;其余照默认,完工复盘也跑(2026-10-14 起:Bot 交付之后改进自己的记忆和技能,是应用承诺的一部分)。整理照旧:它让一件事的看板对得上。书记员关着时,只有你挑已交付成果毛病的那句照旧作为提议条目留下(和书记员读不出东西时的兜底一样)。
- 视频:书记员照旧;整理静下来 60 秒再整理,一批镜头交上来只整理一次;Bot 自己约的回看最短 15 分钟、每小时最多 3 个;不升级模型;没过的交付超过 5 次就停下来问你。
- 代码:不要书记员;其余照默认。
- 自由:不用这套工作方式,只留底线。一件件事和问进展关着;读句和判断下场开着。
不跑事的引擎(一件件事关着,比如自由):这个会话的话永远不开事。不读这句话在说哪件事,引用和路径也不把它归到哪件事上;每一轮都在桌面段,不绑事,第一次有副作用的调用照样不开事,壳在工作区根。Bot 拿不到 work_on、delegate、submit、review、plan_items,硬调也被拒绝;系统指令是同一份文字去掉只在事里成立的部分,局面块不出桌面段,始终写工作区根;你改过的全局系统指令和 Agent 前言是为那套写的,这里不用,其余提示词照用。收尾不读 Bot 的话,不查义务和承诺,没有进度条数上限,不拦「请点头」的提问;只留一条:你的话在你和它的私聊里一句没回,退回一次,还不回就告诉你。没有规划、任务、交付、审查、流程图上的事和监督器,「做完」算不算数由你看。叫停照旧:打「停下」能停(关掉读句的引擎里只有 Stop 按钮能停),批准卡、权限模式和花费上限都照旧。日程照跑,是无事的一轮,不开常驻规划。回看能约能响。Bot 开的私聊静下来后照旧把它叫回。
一件件事开着时能单独关的规矩:只放开关掉之后的路径本来就有的。工作项、结束契约和交付是一个整体,不能拆开。等你放行关掉:交付走日程那条路,门禁过了直接放行;你挑毛病照样退回,审查者打回照样打回。大活先拆关掉:不读这件事大不大,不拦生成和交付,拆不拆、有没有样片由负责人定。能力天花板关掉:接着改,不停下来问。监督器接手关掉:被打断的活等你按继续,没人推的任务不追;交付的检查和放行照跑,重启修复也照跑。按你的话加的检查关掉:不再提议,你确认过的照旧量。
引擎自己的系统指令和工具:分工页点开「Bot 的一轮」,在这个引擎里单独写一份系统指令(从它现在读的那份开始改),按语言存,整段是你的,应用升级不改它、也不合并新东西;恢复内置就回去。优先级是引擎自己的,然后不跑事的那份(不跑事时)或你改过的全局那份,然后内置的。校验和改内置提示词一样(GET /v1/playbooks/:id/system 读它现在的)。同一处能关掉几组工具:名册和会话、日程、端点模型和 MCP、提示词和本机记录。关掉的组 Bot 拿不到,硬调被拒绝,内置文字里讲它的那段也去掉;你自己写的文字不动。文件、发言、人设、技能、记忆和批注总是有的,规划和交付跟着一件件事。这些都记在引擎的差别里,修改记录照旧,以它为底另建时一起带走。
你自己的环节(ADR 0105):一个引擎还能在应用已有的时机上挂你自己的环节,最多 12 个,存在引擎的差别里,修改记录照旧,以它为底另建时一起带走。分工页上它们排在所在那一组的内置环节后面,标着「你的」,第二行写时机和不过时做什么;每组末尾的「+ 加一个环节」打开起步模板(不许动 .env、写完 TS 跑 lint、收尾前跑测试、交上来的视频先量一下、照我的规矩看一遍)和空白环节,新的先是关着的草稿,存了才算。
| 时机 | 不过时能做什么 | 默认超时(最长) | 需要一件件事 |
|---|---|---|---|
| 调用之前(写文件、删文件、命令、MCP 工具) | 拒掉这次调用,理由给 Bot;或放行,把输出附给 Bot | 10 秒(60) | 否 |
| 调用之后 | 附在这次调用的结果旁边给 Bot | 10 秒(60) | 否 |
| 一轮收尾时(说完成或回答了的结尾) | 退回接着做;或告诉你 | 120 秒(600) | 否 |
| 交上来时 | 像没过的检查一样退回,算进能力天花板 | 120 秒(600),和检查共用跑道 | 是 |
| 交付放行后(你、审查的 Bot、应用按检查放行都算) | 告诉你 | 120 秒(600),调度器下一拍在后台跑 | 是 |
| 你退回后(推翻已经放行的也算) | 告诉你 | 同上 | 是 |
怎么判:规则只看命中,命中就算不过;命令退出码 0 算过,否则输出的末尾当理由,在工作区里跑(默认工作区根,可设子目录),环境变量和验收检查一样干净,stdin 收到一份 JSON(时机、调用、路径、回复、交上来的文件、会话和 Bot),另有 DESKFOLK_EVENT、DESKFOLK_STEP、DESKFOLK_PATHS(一行一个)、DESKFOLK_COMMAND、DESKFOLK_WORKSPACE,碰到工作区外的命令不跑;模型拿你写的规矩和发生了什么去问过不过、为什么,跑在分工页「自定义环节」这个调用的模型上(没选就跟看图判定),花费记成 step。看哪些只用工具种类(调用前后)和相对工作区的路径 glob:调用前后是这次调用的文件,收尾时是这一轮写过的文件,交上来和之后是交付里的文件;要看话里说什么就用模型环节,不用词表。判不了(超时、起不来、模型没答或答案读不出)就放行,流程图上记成出错。收尾时的退回和结束契约共用这一段的两次,用完了这一轮照常收尾、告诉你哪一步还是没过;要退回的回复先发出去,Bot 再听到退回。「告诉你」是会话里一条对 Bot 隐藏的系统行。交上来的环节能把交付挡回去,不算「你的」检查,所以不能替没人担保的交付放行。调用之前被拒记成 step_refused,不算这一轮的失败。外部 agent 事后才告诉应用的调用没有「之前」,只有调用之后的环节看得到。不跑事的引擎里,需要一件件事的环节画成灰的、写明原因、值留着。面板上「拿样例试一次」(POST /v1/playbooks/:id/custom-steps/try)不拦、不退回、不告诉谁、不进流程图,没填的样例取最近的;模型环节试一次也记花费。每次判断记一条 call_runs(role = custom_step,带 custom_step 和交上来时的 submission_id),流程图上同一步合在一张卡下,没过的算异常。手机上也能加和改,和命令类验收检查一样。
换引擎:已开的事停在原地,不叫醒、不删除,也不接新话,别处的话引用它也不归给它;监督器跳过它,工作记录写明 no_jobs;约在它上面的回看不作废,一直等着,换回来就响;正在跑的这一轮跑完。把有没收口的事的对话,或默认引擎,换到不跑事的引擎时先提示影响多少(GET /v1/playbooks/impact)。事的页面写明它为什么停着。
改和另建:改的是一个引擎,只存你和它的内置不同的几项(playbooks.diff);没改过的跟着内置的新默认走,「和内置不同」和恢复一步都直接从这里来。每改一次是一条只增不删的修改记录(playbook_revisions:改之前和之后、谁改的),带版本号,两个窗口同时改时后到的那次被拒、提示你刷新。可以以任何一个为底另建一个自己的,起名字、改名、删掉;删掉时它不能是默认,用它的会话回到默认。宽窗上这些都在分工页左边的引擎列表里做,和会话列表一样:一个引擎一行(名字、默认的带星、最后改的时间、一行说明),选中的那行带底色,右边是它的图;列表头上的 + 以正在看的那个为底新建,右键一行或点它的 ⋯ 是设为默认、以此为底新建、改名、修改记录、删除,起名和改名就在那一行里输入,回车存、Esc 放弃,删除先问一句,修改记录显示在图右边原来放环节的地方。窄的时候(手机、窄标签)还是图上面一排引擎标签。
哪个引擎管这一次:关于一件事的调用(整理、检查、天花板、复盘……)照那件事所在会话的引擎,哪怕话是在别处说的;不关于事的照它所在的会话;Bot 之间的私聊和一件事的线程照它们从哪个会话来。那个会话指定了就用它(sessions.playbook_id),没有就用设置里的默认(default_playbook),再没有就是通用。删掉的自定义引擎当成默认。每用一次内置调用写的调用记录都记着当时的引擎和它改过几次(playbook_id、playbook_revision),流程图上点开一步写「引擎 视频 · 第 2 版」。
升级时:没指定引擎的会话都是通用,也就是书记员和反思在那里不跑了;要哪个会话照原来那样记要求,给它选视频,或在分工页上把通用的这几项打开。完工复盘 2026-10-14 起在通用里重新开着,以通用为底另建的引擎也跟着开(只存差别,没改过这一项的就随内置);这之前因为引擎不跑而略过的交付不补跑。
在哪里选:一个会话的引擎在群的「操作」和私聊里 Bot 的「操作」里选(「引擎」一行:跟默认(写着默认是哪套),或选一套;PUT /v1/sessions/:id/playbook),显示的是 Mac 上这个会话现在用的;连着还没有引擎的旧版 Mac 时没有这一行。新建 Bot 时可以给它的私聊选引擎;新建群的请求也收 playbook_id。
Bot 模板和第一次启动:每套内置引擎备好几个 Bot 模板(通用:助理、翻译官、检索助手;视频:视频导演、故事编剧、字幕校对师、审片员;代码:开发助手、前端工程师、后端工程师、设计师;自由沿用通用的),职责和边界取自记录里用得最多的 Bot。向导保存设置后名册还空,最后一步是「选工作方式和第一批 Bot」:四套引擎各一张卡片,选一张就列出它的模板,预先勾上的是通用的助理,视频的导演、编剧、字幕校对(审片员不勾:一位导演加你审片比多一个审片 Bot 好),代码的开发助手(一个开发群里六个 Bot 每句都上场)。每个都能展开改名字、职责、边界;勾着的哪个没填全,按钮就灰着,字段下写原因,收起的那行写「要填完整」。建的时候按顺序一个个建,每个的私聊用选的引擎;守护进程拒了哪个(比如重名),就停在那里、展开它、字段下写原因,之前建好的打上 ✓、不再重建,引擎也不能再换。一个就打开它的私聊;两个以上再建一个群(通用叫「助手们」,视频叫「视频制作」,代码叫「开发」),用同一个引擎,负责人是打头的那位(PUT /v1/sessions/:id/lead),打开这个群;群没建成就打开第一个 Bot 的私聊并说一句。设置里的默认引擎不变,仍是通用。这一步能跳过。这台电脑上列得出你在终端里用过的 Claude Code 会话时,这一步叫「怎么开始」,上面多两张卡片:「建 Bot 一起干活」(默认,就是上面这些)和「接着终端里的会话」;选后者,下面换成导入面板里同一份按目录的列表,挑一个按「接着聊」就导入成项目会话,向导收起并打开它,不建 Bot(ADR 0095);切回来 Bot 的草稿还在。「新建 Bot」最上面也是这些模板,一套引擎一行:点一个填好名字、职责和边界,下面的「引擎」选上它那一套(就是默认那套时写「跟默认」),还能改。
Bot:能用 query_data 读 playbooks 和 playbook_revisions,不能改引擎;Bot 自己新建队友时不能给它的私聊指定引擎。
回避:把底线做成能关的环节, 单独拆开工作项、结束契约和交付, 把引擎和引擎级别混为一谈, 让 Bot 不经你同意改引擎, 按 Bot 而不是按会话选引擎, 升级时替你换引擎, 让你自己的环节直接写状态, 用词表当环节的条件, 让你的环节替没人担保的交付放行
模型选择记录(Model choice log)
一轮跑在哪个模型和思考等级上、为什么(任务指定、你钉的、默认模型、端点默认,提了档或沿阶梯换了模型也写明)、这条消息算哪类、这轮怎么结束(补全失败带失败种类)、用了多久做了几跳;引擎 8 级以下还有后来落在这一轮上的模型反馈、这条纠正链的复盘和记下的经验。它挂在流程图上那一轮的卡片上,不再有单独的入口和页面:Bot 卡片底下一行写着模型、思考等级和类别,有反馈、归咎模型、补全失败各有记号;点这一行在卡片下面展开全部,反馈点一下跳回原话。流程图工具条可以把有反馈或复盘归咎模型的卡片点亮、其余变暗,整件事的形状不变。按这件事看而不是按会话看:一件事跨了几条会话,它的选择都在同一张图上。不进主转录,也不展示 token 或花费;本机接口仍可逐会话列出。
回避:路由日志, 单独的模型选择记录页, 会话顶栏上的记录按钮, 进主转录, 塞进当前对话设置, 在这里放花费统计, 把对内容的批评当模型反馈
调用记录(Call record)
应用自己发起的模型调用——读句、整理器、书记员、判断下场、看图判定、输入建议、压缩上下文、反思、完工复盘——每用一次记一条(ADR 0083):是哪个调用,照的是哪段内置提示词的哪一版,跑在哪个模型和思考档上,关于哪句话、哪一轮、哪件事、哪张任务、哪个 Bot,结局(成了、没成、回答读不懂)和结论,原始回答(截断保留),用了多久。同一段 Bot 的话在另一轮里再读,也记一条(沿用上次的读法,不再调模型)。流程图上它们是「环节」:你的一句话下面先是读句、归属、书记员,再是它叫醒的轮次;群里没点名的一句,每个 Bot 的判断各是一步,接下的 Bot 的那一轮挂在它的判断下面;一轮里的压缩、对 Bot 的话的读句、之后的整理挂在那一轮下面;看图判定、反思、完工复盘挂在它之前的最后一张卡下面。每一步写着结论;没成或说「不」的用警示色,计进那一轮的异常数,可以一键点亮;点开在流程旁边的详情栏里(窄的时候从底部拉起)看模型、提示词版本、用时和原始回答,「改这个调用」在那里展开这个调用的模型和提示词,就地改。一件事的流程平时只画没成或说「不」的环节,一键画出全部(读句、归属都在里面);一句话自己的流程总是画全。没归到任何一件事的话,右键也能打开它自己的流程。删掉或清空会话时一并删掉,每个会话留最近 2000 条;Bot 能经本机记录读到。只在流程图上,不进主转录,也不回读给整理器。细节见行为说明·调用记录。
行为细节
ADR 0083。应用自己的模型调用每用一次写一条 call_runs(你自己的环节每判一次也写一条,命令和规则的也算,ADR 0105):role(哪个调用)、prompt_id 和 prompt_revision(照的哪段内置提示词、哪一版;没改过是默认)、提供方、模型和思考档,关于的 message_id、turn_id、task_id、ticket_id、bot_id、check_run_id,outcome(ok、failed、unreadable)和 fail_kind,verdict(每种调用一个形状的结论 JSON),原始回答(最多 4000 字),对应的花费行和用时。读句的词表兜底也记,结论标「按词表」;Bot 的同一段话在另一轮里再读,从缓存拿上次的读法,照样记一条(cached,不再调模型),所以每个用到读法的地方都看得到。看图判定一次检查跑几批,每批一条,都带着那次检查的运行 id。
流程图从 GET /v1/tasks/:id/trace 的 steps 里拿到这件事的、以及关于它的话和轮次的记录(不带原始回答,点开一步时 GET /v1/call-runs/:id 再取)。点开的一步不挂在它的卡片下面,而在流程旁边的详情栏里,占满那一栏、自己滚动(2026-10-12 起,ADR 0086;之前浮在流程右侧);窄的时候详情栏是从底部拉起的面板,手机上返回键先收起它。面板盖住了那一步的卡片时,画布滑开到卡片露出来为止。面板里的原始回答一打开就是展开的,收起之后换一步也保持收起,也就不去取。「改这个调用」在面板里展开这个调用的设置,和分工里那个调用的一样(模型、Claude 账号、它的提示词),上面写着改的是哪个调用、对之后每一次都生效;点开提示词,编辑器盖在整个窗口上(手机上是一页),Esc 或返回键先关编辑器、再收起面板;模型选择器的 Esc 也只关它自己。分工页照旧从工具菜单打开。原始回答整段是 JSON(或包在一个代码块里的 JSON)时画成可折叠的树(svelte-json-discovery),颜色跟应用的浅色、深色走;不是 JSON、或被截到 4000 字断在半中间的,照原文显示。环节放在卡片旁边,不混进卡片:整理器和规划事实把卡片读回给模型,读的还是原来那些。没归到任何一件事的话,GET /v1/messages/:id/trace 画出它自己的一张:它叫醒的轮次、那些轮次再叫醒的,和关于它们的记录;它谁也没叫醒时,图上只有它自己和它的环节。手机上同样能读这两个接口。2026-10-17 起(ADR 0094),一件事的流程平时只画没成或说「不」的环节:一件长的活里绝大多数环节是对 Bot 的话的读句(「还在做」),画出来比轮次还多。没画的环节原来挂着的轮次挂到上面最近一个还画着的环节或卡片下面。工具栏「显示全部环节」画出全部、「只留异常环节」收回,按浏览器记住(real-bot-trace-steps-all;以前的 real-bot-trace-steps 不再读,所以每个浏览器都换到新的默认);「环节有异常 N」两种时候都在。一句话自己的流程(右键一句没归到任何事的话打开)只有你那张卡和它的环节,总是画全,也没有这个切换。
记录随会话删除、清空一起删除(原始回答可能转述了你的话),每个会话只留最近 2000 条,写的时候删掉更早的。写入在每个引擎级别都做,新的一条推 call_run.created,打开着的流程图据此刷新。Bot 能经本机记录(query_data)读到 call_runs,复盘可以引用。
回避:只记失败的调用, 把环节塞进整理器读的卡片, 只看得到有归属的话的读法, 不说照的是哪版提示词
MCP
名册级服务器:stdio(command / args)或 HTTP / Streamable HTTP(url + 可选 headers)。所有 Bot 都能调已配工具。你在设置里加,Bot 也能用工具增删改。新增或改 command·args / url / headers 是危险动作。HTTP 的 Authorization 在批准卡上贴,进钥匙串,不进工具参数。删除 MCP 不是危险动作。应用记下服务器自带的用法说明;你或 Bot 还可给每台服务器写一条用法备注(做什么、何时用、何时不用),进每一跳的「本轮 MCP」段并排在服务器自带说明前面,服务器说明够用时留空即可。改备注不是危险动作,改连接也不清掉它。已启用且连接成功的服务器全部工具对所有 Bot、私聊、群和日程持续可用,不按消息关键词或语言筛掉。新增、修改或重新启用后,当前轮次下一跳及其他 Bot 的后续补全即可使用;停用或删除后不可再调用。要把工作区里的图片交给只收图片 URL 或 data URI 的参数,Bot 在参数里写 workspace://<相对工作区根的路径>,应用发出前换成这张图的 data URI(超过半兆先缩小),转录和下一跳里仍是这条短引用;远端服务器读不到本机磁盘,模型也抄不出整张图的 base64。
回避:每 Bot 一套 MCP, 把 Bot 当工具权限边界, 按关键词隐藏已配能力, 只在安装当轮可用, 只认 stdio, 手改服务器自带的 instructions
向导
设置的空态:工作区路径,加上一个能用的端点(URL 和已有密钥,本机地址不要密钥),或者本机已登录的 Agent(内置调用都选了这个 Agent 的模型,ADR 0078、ADR 0079),即完成。名册还空时多一步:选一种工作方式(引擎)和第一批 Bot(Bot 模板),两个以上还建一个用这个引擎的群(ADR 0085);这台电脑上有终端里的 Claude Code 会话时,这一步也能改成挑一个接着聊,导入成项目会话(ADR 0095);这一步能跳过。没有单独路由;滑出只盖侧栏,不抢主转录。
回避:/setup, 全屏 onboarding, 把设置做成主转录
日程(Routine)
挂在某个 Bot 上、按日历触发的重复工作。v1 只有日程,没有事件触发。每条日程有一个常驻规划(不占会话的当前规划,不经整理跳),每次到点在它下面新开一个任务 NN-<日期>,那一轮就在这个任务目录里干活(私聊用不跑事的引擎时没有这些,那一次是无事的一轮)。到点时守护进程在你↔该 Bot 的私聊插一条该 Bot 名下的系统行「日程「<名字>」:<要做的事>」叫醒它,和回看一样,不以你的名义发消息。日程本来就是无人值守地跑:每次交出来的东西门禁都过就直接放行,不出卡片问你放不放行;结果不对时你说一句,读句读出你在挑毛病就照样直接转回返工。回看不是日程,见「回看」。
回避:cron 作业(对外不说), skill 包自动化, 以你的名义发出日程内容, 每天出卡片让你放行日程交出的东西
技能(Skill)
挂在某个 Bot 上的一条具名工序:短说明(何时用)+ Markdown 正文(怎么干)。只属于该 Bot(引擎 8 级起你可以把它的一份副本共享给所有 Bot,那份是项目技能),不是工作区文件,也不是 MCP。启用中的技能以目录形式进入该 Bot 每一跳的 system;正文按需用工具读进本轮回路。技能是工序,MCP 是能力:Bot 先看技能目录,命中就读正文照做,正文点到的 MCP 工具按名调用;没有命中的技能才直接从「本轮 MCP」段挑工具。技能不新增工具,也不替代 MCP。技能可声明正文依赖的 MCP 服务器名;本轮未连接的会在目录里标出,正文照做不了时直说或提问,不拿别的工具凑。读正文时,正文里写的 mcp_ 工具名若不在本轮工具里会被标出来,Bot 按「本轮 MCP」段找现名并改正文。Bot 可用工具增删改自己的技能,你也可在人设里改;改完不插转录条。引擎 8 级起,完工复盘也会改它自己的技能:只在原文后补一句、末尾追加或改正一句,原有的命令、文件名和反引号里的名字一个不丢,每处你都能撤销。技能不能取消批准、不能新增工具、不能放宽权限模式。
回避:skill 包, /skill, plugin, 工作流, 把人设当工序, 不经你确认的共享, 按关键词自动塞正文
项目技能(Project skill)
引擎 8 级起,你把某个 Bot 的一条技能共享给所有 Bot 后的那份副本:每个 Bot 的技能目录里都有它(标着来自谁),按名读、照着做,但改不了;原 Bot 之后再改,要你在「项目共享技能」卡上再共享一次才更新。Bot 自己有同名技能时用它自己的。细节见 ADR 0052。
回避:Bot 自己把技能共享出去, 原技能一改就自动同步给别人, 把项目技能当成谁的私有技能
记忆(Memory)
某个 Bot 自己记下的一条跨会话仍然成立的事实:一个主题 + 一句结论。只属于该 Bot,只进它自己的上下文(别的 Bot 能经本机记录查到,但不会读进上下文,也写不了),删除 Bot 一并删掉,归档保留。Bot 用工具自己写。引擎 8 级起(默认)没有学习跳:出了问题记成质量事件,教训由应用执行,事件本身都不写进记忆;你接受的一件事交付之后,做过它的 Bot 做一次完工复盘,可以记、改写、合并、删掉自己的记忆(一次至多记三条、删三条,每处你都能在流程图上撤销),写下的是做法、默认值和跨事成立的偏好,不是这件事的要求。8 级以下,链结束之后的学习跳也可以写一条:复盘归咎模型、踩过工具错误但做完了,或需求没说清且用户纠正了不止一轮(这种只记用户补上的口径——交付形态、范围、给谁看、默认值——不改技能);学习跳看得到你随后的原话和这条链里失败过的调用,只记落在具体东西上的结论,不调用就不留。记忆不是后台替它蒸馏转录,也不是把转录摘要进人设。启用中的全部记忆进入该 Bot 每一跳的 system,没有检索、没有相关度排序,按最后写下的先后排,最新的在最后。记忆是以前的结论,不是事实来源:与本轮转录冲突时以转录为准,不再成立就改掉或删掉。同一个主题再记一次是覆盖,不并列第二条;新开一个主题时,Bot 会看到这个会话最近一天里自己记过的别的记忆,是在改其中一条就删掉旧的。条数有上限,满了要 Bot 自己先取舍,不静默挤掉。你能看、能改、能停用、能删,但不替 Bot 新建;每条都带记下它的那条消息,可跳回去;完工复盘写的标着是哪件事的复盘。三者分工:人设是你是谁,技能是怎么做,记忆是你学到了什么;每个 Bot 都照做的工作方式在内置提示词里。
回避:检索式记忆, 向量库, 原始转录回灌, 后台蒸馏转录, 把记忆当事实来源, 跨 Bot 共享记忆, 用户手动新建记忆, 无上限的记忆目录
内置提示词(Built-in prompt)
应用写给模型的固定的话:每一轮的系统指令、技能 / 记忆 / MCP 段的开头、Claude Agent 前言、每个工具的说明,以及应用自己的调用(整理跳、读句、书记员、参与判断、输入建议、收窄的反思、完工复盘、衔接检查、照样片检查)。它们是开发者那套工作方式的默认值:你在设置「提示词」里能改、恢复默认,每一次修改都能撤销;Bot 也能用 edit_prompt / reset_prompt 提出修改,这是改应用配置:按它的权限模式,在批准卡上由你放行,全部允许下直接改,只读下拒绝。应用自己的调用里,代码要读的输出格式锁着,你的文字只决定它插在哪({format})。改了从下一次调用起对所有 Bot 生效(引擎带了自己的一份系统指令,或者不跑事的引擎,就不读你改的这份系统指令);应用升级带来新的默认时,按行合并进你的版本,合不上就留着你的、标出冲突让你选。只关于一个 Bot 的做法写进它的技能,学到的事实是记忆,你的要求在需求台账里——都不写进提示词。批准、叫停、门禁、检查这些应用壳是代码,提示词放宽不了。细节见行为说明·内置提示词和 ADR 0064。
行为细节
应用写给模型的固定的话,每段是一个槽位(apps/daemon/src/prompts/registry.ts):每一轮的系统指令(turn.system),技能 / 记忆 / MCP 段的开头(turn.skills / turn.memory / turn.mcp),Claude Agent 前言(agent.preface),每个工具的说明(tool.<名字>,参数说明不在内),以及应用自己的调用(call.*)。没改过时用的是按引擎级别和 shell 渲染出的默认,和改造前一字不差;你的版本替换渲染后的整段。只有中文的那几段(整理跳、读句、书记员、参与判断、输入建议)不论应用用什么语言都用它。
- 在哪改:设置「提示词」页签(在「MCP 扩展」后面)。和「模型服务」一样分块:每一轮的系统指令、Claude Agent、应用自己的调用、工具说明各一块。宽窗在搜索框下面是一排标签,每块一页,标签上写着这一块改过几条(有和新默认冲突的就是警示色);手机上先列出这几块,每行写着几条、改过几条、有没有冲突,点一行进到那一块,返回先回到这张列表。每条一行:标题和一句说明;工具说明在自己那一页直接排成一格格工具名,按工具是做什么的分成九块:文件和命令、发言和收尾、规划和交付、名册和会话、人设·技能和记忆、日程、批注、端点·模型和 MCP、提示词和本机记录。默认的不加标记,只有改过的标着谁改的(你 / 哪个 Bot / 应用合并了新默认)、新默认有没有冲突、回答读不懂几次;有改过的时,搜索框旁多一个「全部 / 已改」筛选。搜索框固定在上面,搜的是所有块:输了字或开着「已改」时不分标签,找到的按块列在一起。点开是编辑页,分「内容」「对比默认」「修改记录」三个视图,切换语言时停在同一个视图:内容里文字占满整页,下面一行列着占位符,输出格式收着;停手一秒自动保存(离开「内容」时立刻存),同一次打开里接着打字的保存合成一条修改记录,但改回这一条开始前的样子时,改回去另记一条,之后再改又是新的一条(加个空格再删掉,就是两条);对比里一行中改了的那几个字会标出来,连一个空格也看得见;保存带着你看到的那次修订,别处改过就载入最新、你没保存的能复制走;能撤销最新一次、恢复任何一版、恢复默认(先确认)。手机上同样能看能改。
- 输出格式锁住:应用自己的调用里,代码要读的输出格式不在你的文字里,你的文字只放一个
{format}标出它插在哪(恰好一次)。上下文压缩(call.compact)的回答就是摘要本身,代码不解析,所以它没有{format},整段都能改。衔接检查和照样片检查另有{item}、{rules},Claude Agent 前言有{workspace}、{cwd};占位符缺了、多了、写了没有的,都不让存。参与判断和输入建议的回答从第一个{读起,所以它们拼好后不能有{。 - Bot 提改动:
list_prompts/read_prompt随时能用(叫停中也能读)。edit_prompt的改法和完工复盘改技能一样:替换恰好出现一次的原文、在它后面补一句、末尾追加一段;reset_prompt恢复默认。两者都先在当前文本上套一遍、校验,再出批准卡(种类prompt-edit),卡上逐处列出删了什么、加了什么、Bot 写的理由,以及这次改动影响多大(「影响:所有 Bot 每一步都读」之类)。这是改应用配置:权限模式是全部允许的 Bot 不出卡直接改,只读的被拒,其余照常出卡(ADR 0092);每次修改照样记下、能撤销。只关于某类活或某几个 Bot 的教训,Bot 不该提到这里,那是它们自己的技能。你放行时它在那一刻的文本上重新套一遍,等卡期间原文变了就退回让 Bot 重读。放行之后卡上有「撤销这次修改」(只在它还是最新一次时)和「在设置里看」:后者打开那条提示词的编辑页,停在「修改记录」,这次改动已经展开。 - 新的默认:应用升级带来新默认时,开库(和引擎级别抬高)时按行三方合并进你的版本:合得干净就作为「应用」的一次改动写入,能撤销;合不上就留着你的版本,标「默认已更新 · 有冲突」,你选「保留我的版本」或「换成新的默认」。启动日志写明每段怎么处理了,以及哪些段改过。
- 读不懂的回答:应用自己的调用回答来了却读不了(不算超时、端点出错、写到上限被截断),工作记录里记一条
prompt.parse_failed,写明哪段、哪个修订;设置里显示「自这次修改起读不懂 N 次」,没改过的显示近 7 天。 - 东西放哪:每个 Bot 都该照做的写进内置提示词;只关于一个 Bot 的做法写进它的技能;学到的事实是记忆;你的要求留在需求台账里、以你的原话为准。Bot 只在你要它分析、改进时才提这类改动,没有后台定时调优;要定期做就设一个日程。
回避:不经你批准就让 Bot 改提示词, 把你的要求改写进提示词, 用提示词放宽批准或门禁, 每个 Bot 一套系统指令, 后台定时自我调优, 改代码要读的输出格式
补全(Completion)
一轮里对端点的一次流式 HTTP 请求:Chat Completions,Anthropic 兼容的端点上是 Messages。一轮的工具回路可以有多次补全。补全失败不是中断,也不回放历史工具。每次补全都有输出上限(模型名单里的 max_output,没填是 32768 token)和只算补全本身的时间上限。开始复读、只有一句套话式拒答、没写完就断了、写过了时间上限,这次补全算失败、不算回复:什么都不发出,也不叫醒谁,再来一次;连着再失败,这一轮就以失败结束。写到输出上限被截断、但没有复读的,接着写一次。细节见行为说明·补全。
行为细节
每一跳请求都带 max_tokens:取这个模型在端点名单里的 max_output,没填就是 32768,推理 token 也算在里面。没有上限时,2026-09-29 有三跳把同一句话写到了端点默认的 128,000 token(其中一跳写了 17 分钟,同一句 3,457 遍),被当成收尾发了出去;在 Bot↔Bot 私聊里还叫醒了对方,对方的下一跳又把整段读了一遍。32768 是看过花费记录定的:正常的一跳输出最多三万出头,超过 32768 的只有那三次复读,再低就会截断写大文件的正常跳。端点不认 max_tokens、在 400 里点名要 max_completion_tokens 的(OpenAI 的推理模型就是这样),马上换这个字段重发一次,这个模型之后都用它。模型能写的比这少的(DeepSeek 的 deepseek-chat 最多 8192,OpenAI 的 gpt-4o 最多 16384),端点会用 400 拒掉这个上限:报错里写了模型自己的上限,马上按那个数重发;没写,就不带上限重发;这个模型之后都这么发。没有上限时这些请求本来能过,所以这种拒绝不能让这一轮失败,而上限在设置里也改不了。提示词加上上限超过了模型的上下文(报错里写着「32768 in the completion」,或者点名上限、说的却是上下文长度,vLLM 就是这样)时,只有这一次不带上限重发,下一跳照样先带上限。
流式输出时,应用只看正文,不看工具参数、代码块和表格:在最近 6000 字符里按句切(句号、问号、感叹号、分号、省略号、换行,英文句点后面跟空格),每句只比字母和数字、不分大小写,数字照比(「镜头 11」和「镜头 12」是两句)。同一句(8 个字以上)连着出现第 5 次,或者最近至少 20 句里不同的句子不到两成,就当场掐断这次补全,记为复读,通常只要几秒。「连着」是说两次之间没有新句子,只隔着前面出现过的句子:复读的两遍之间只有复读本身;逐项的审片结论(每行一句「Shot 03:通过。画面稳定,无需返工。」)两遍之间隔着这一项自己的名字,不算复读。不同句子占比这一条不看句子长短,20 行一模一样的「- [x] 完成」、哪一行都没写是哪一项,照样算复读。写完的回复发出之前,再按同样的规则看一遍。
这几种补全算失败,不算回复:
- 复读:见上。
- 拒答:端点给的结束原因是
content_filter或 Gemini 的SAFETY一类;或者整条回复不超过 300 字、没有工具调用,又是一句套话式的拒答(自称语言模型并说做不到,或者只有一句「I can't help with that」「抱歉,我无法协助处理这个请求」)。Bot 自己说明哪一步做不了、为什么,不算拒答。之前 Gemini 的拒答有两次被当成 Bot 的消息发了出去。 - 不完整:没写完就关了连接(既没有结束原因,也没有
[DONE];端点或中间的代理半路断开连接就是这样),结束原因说要调用工具、却没有一个完整的工具调用,或者工具调用的参数不是完整的 JSON。客户端先把同一个请求最多试三次,还是不完整才算失败。 - 超时:一次请求从发出到流结束最多这么久:10 分钟和「
max_output÷ 这个模型实测的 p10 吞吐 × 1.5」里较大的那个。吞吐取名单里的stream_tps_p10,没测过就是 10 分钟(本机或局域网的模型服务没测过时按每秒 10 token 算,见下面「本机和局域网的模型服务」)。等端点空位的时间、工具执行的时间、合盖睡着的时间都不算。
失败的补全什么都不发出、不进回路,也不叫醒谁。同一个模型带一句说明原因的提示再来一跳(复读的那句是:别复述,也别写收尾话,要做的事直接调用工具去做);连着再失败,这一轮以失败结束,会话里留一行「这一轮没写完:……」,你在场时还有一条失败通知。中间只要有一跳正常,下一次失败就还能再来一次。连不上端点、端点忙、端点报错、流中途没了下文(连接还开着,却等不到下一段)这几种不在此列:客户端已经把同一个请求重发过,这一轮直接结束。没了下文要等满空闲时限(3 分钟)才知道,三次就是 9 分钟,再来一跳会再翻一倍;连接半路断开几秒就知道,所以算不完整,多来一跳也不贵。流中途没了下文或者断开时,前半截以前会当成回复发出、或者拿去执行里面的工具调用,现在一概不用。
结束原因不分大小写,经代理转来的 Gemini 原样结束原因也认:STOP 就是 stop,max_tokens、MAX_TOKENS 和 Mistral 的 model_length 都当作 length。空字符串不算结束原因:有的端点每个数据块都带一个 "",直到最后一块。客户端不认识的结束原因(比如 eos)说明模型自己写完了,这条流是完整的,不会当成半截流重发,回复照样按上面的规则判断。error 例外:OpenRouter 在它后面的模型半路出错时用它结束,前面到的只是半截,算不完整。结束原因到了之后流没了下文(端点没发用量和 [DONE],也没关连接),等过空闲时限就当回复收下:模型已经写完,缺的只是端点最后那几个包。
写到输出上限被截断(结束原因是 length)、又没有复读的,接着写一跳:截下来的那部分不发出,但留在回路里让它接着写,提示它要做的事直接调用工具、长内容写进文件并分块写;截断发生在工具调用的参数里时,那次调用不执行,提示它分块写。接着写的那一跳又写到上限,这一轮以「写到输出上限」失败结束。
流式输出不再算作这一轮在推进:以前每来一段就刷新一次这一轮的动静,一跳写多久都不会被当成卡住。现在补全由自己的时间上限管,卡住清扫(20 分钟没有任何动静)只管补全之外的时候。
名单里的 max_output 在设置里看不到;stream_tps_p10 由模型属性里的「测一下」写入,context_window(上下文窗口,token)在模型属性里能看能改。Bot 用 update_endpoint 也能改 context_window、input_image 和 max_output,用 measure_model 测速,用 update_model_settings 改默认端点、内置模型(builtin_models,只能是端点上的模型或不设)和模型阶梯,都直接执行(ADR 0014)。从设置再保存名单时,没带的这几个值照旧保留,通过接口传 null 才会清掉(窗口栏清空就是传 null)。存着的名单里这几个值哪个不合法(比如 0 或者字符串),只忽略这一个值,模型照常留在名单里,用它的 Bot 也不受影响。
Anthropic 兼容的端点。 端点的格式选了 Anthropic 兼容(ADR 0066),这一节的规矩照旧,只是发出去的样子不同:
- 地址和密钥:请求发到 base URL 后面的
/v1/messages;base URL 已经以/v1结尾的只补/messages。所以填的就是 Claude Code 的ANTHROPIC_BASE_URL那种地址(https://api.anthropic.com、https://api.deepseek.com/anthropic)。密钥放在x-api-key,带anthropic-version: 2023-06-01;被 401 或 403 拒掉就改放Authorization: Bearer再发一次(有些厂商和转发只认这种),成了,这个端点之后都这么发;两种都被拒,就是密钥不对。 - 消息:应用内部照旧按 Chat Completions 的样子组织回路,发出前转换:所有 system 消息合进顶层
system;工具结果变成用户回合里的tool_result,同一回合里结果排在文字前面;相邻的同角色消息合成一个回合;开头是 Bot 自己那句时,前面补一个只有「…」的用户回合;工具调用的 id 只留字母、数字、_和-(回路里可能有 OpenAI 兼容端点给的 id);图片的 data URI 变成 base64 图片块。 - 思考档:先按 Anthropic 新模型的形式发,
thinking: {type: "adaptive"}加output_config.effort(none只发effort: low:新模型的思考关不掉,没有thinking字段的旧模型本来就不想);400 里点名 thinking、effort、budget_tokens 这几个字段的,退到thinking: {type: "enabled", budget_tokens}(低 2048、中 8192、高 16384,不超过输出上限的一半,不到 1024 就不发);再被拒,就不带思考字段。退到的那一档发成功了,这个端点上的这个模型之后都用它;退了还是被拒,不记。说的是回路里的思考块(「Expectedthinking… but foundtool_use」、签名对不上)的 400 不算拒思考字段,不退。输出上限小到放不下思考的判断调用(256、512 token),新形式只发effort,旧形式不发预算。 - 思考块跟着工具调用:模型想过之后调工具的,它的思考块(连同签名)原样跟着那次调用留在这一轮的回路里,下一跳一起发回去,不然下一跳会被拒。只发回给写它的那个端点和模型:中途换了模型(提档换阶梯、看图换模型)的那一跳不带。
- 上限:这个格式每次都要带
max_tokens,所以没有「不带上限重发」这一步。报错说上下文满了(「190000 + 32768 > 200000」这样写着已用的、上限和上下文),只这一次按剩下的空间重发;报错里写了模型自己的上限的,照上面的规矩以后都按那个数发。上限处理完还说提示词本身太长(「prompt is too long」),是上下文满了,不是笼统的「端点拒绝」;流停在model_context_window_exceeded也是上下文满了(Mistral 的model_length一样),不当成写到输出上限去接着写。两种都先压缩回路(见上下文窗)。 - 判断类调用不带
temperature: 0:Anthropic 的新模型不接受任何采样参数。 - 缓存:系统提示词末尾打一个缓存标记,一跳的回路末尾再打一个,下一跳就能从缓存读到那里。Anthropic 不打标记就不缓存;自己会缓存的转发不理这个标记。
- 用量:读缓存和写缓存的 token 都算进输入,读缓存的同时记为缓存命中,和 Chat Completions 的口径一样,花费照旧按名单里的单价估算。
- 结束原因:
end_turn记为正常结束,tool_use是要调工具,max_tokens是写到上限,refusal算拒答。流里来了error事件(常见的是overloaded_error),这一次算没写完,按上面的规矩再试。 - 模型名单从
…/v1/models?limit=1000拉,密钥的放法同上。不少兼容端点没有这个接口,拉不到就手填模型名。
本机和局域网的模型服务。 端点地址是 loopback、localhost、*.local 或内网地址(10/8、172.16/12、192.168/16、链路本地)的,当作本机或局域网里的模型服务(Ollama、LM Studio、llama.cpp 的 llama-server),这一节的规矩加上这些(ADR 0067):
- 密钥选填。没有密钥照样能选来跑、能完成向导,请求不带密钥头;Bot 加这样的端点时审批卡上的密钥栏也可以不填。
- 截断:这种服务装不下提示词时不报错,截掉开头照常回答(Ollama 0.40 一超过窗口就只留最后一半,HTTP 200)。所以本地请求回来后,应用拿发出的字节数比报告读入的 token 数:平均每 token 超过 6.5 字节,或者超过这个模型之前完整请求(16 KB 以上的)的读数的 1.6 倍,就当作被截断(16 KB 以下的请求不判断,图片不算字节);同一个对话(同一个会话里同一个 Bot)里,提示词比上一次长、读入的 token 反而比上一次少的,也是被截断——Ollama 在提示词刚超窗口时会丢掉最早的几条消息凑进去,读数只差几个百分点(带的图片数和上一次不同时不比),这一步作废、不原样重发:这一轮的回路里有可压的,先压成摘要再走一次(见上下文窗);压不了,或者压完还放不下,这一轮以「提示词超出了模型的上下文窗口」失败结束,后面写明这一步约多少 token、端点只读进了多少、服务的窗口是多少;那个窗口同时记进这个模型的条目。条目里已经有窗口、估出来超过它一成以上的,这一步干脆不发。任何端点(Anthropic 兼容的也是)400 的原文说提示词超出上下文的,也按这个记。
- 窗口和能力:拉这种端点的模型名单时顺便问服务每个模型的窗口(Ollama:已加载的实际窗口,否则 Modelfile 的
num_ctx,否则模型上限;LM Studio、llama.cpp 同理)、能不能看图、能不能调工具,填进模型属性(你填过的不覆盖),不能调工具的在名单上标「不支持工具」。 - 时限:等第一个字最多 15 分钟(加载模型、排在别的请求后面、读几万 token 都要时间),中途空闲最多 5 分钟;同一个服务一次只发一条流式请求,其余在应用里排队、不计时;没人等着的短调用至少等 10 分钟,读句仍是 20 秒,等不到就退回词表。
- 短调用不思考:整理、判断、读句这类短调用没指定思考档时,发
reasoning_effort: "none";不然会思考的模型把 256 个 token 全用来想、一个字不答(qwen3:8b 实测)。模型拒了这个值,就去掉重发并记住。 - 思考不进回复:回复正文开头的
<think>…</think>去掉(所有端点都是),只有</think>的连它前面一起去掉;本地模型单独发来的思考也过复读检测,只认同一个长句反复出现。 - 测速:模型属性里「测一下」发两次短请求,量首字时间和每秒 token,再看给了工具会不会调;速度记六成进
stream_tps_p10。它不在应用里排在 Bot 的一跳后面,但服务一次只处理一个请求时,要等那一步写完。
回避:把一次补全当成一轮, 把补全超时当中断, 把截断或复读的回复当收尾发出, 把半截流当回复, 把流式输出算作这一轮在推进
上下文窗(Context window)
一轮里模型实际看到的:人设、启用中的技能目录、系统指令、本轮 MCP、这个 Bot 的记忆、局面块、最近一段转录,以及本轮的工具回路。其中系统指令、技能 / 记忆 / MCP 段的开头和工具说明是内置提示词,你改过的从下一跳起生效。完整历史只存在库里,给你翻、给搜索,不整段塞进模型;判断调用用另一套更短的窗口,不含图。过大的工具结果先把完整 JSON 留在工作区,窗口里只放受限预览和 full_result_path。一轮的回路长到放不下时(端点拒成上下文满,或已知窗口时到了 75%),较早的几跳由这一轮的模型(工具 → 分工里给「压缩上下文」选了的,用那个)压成摘要替换掉,最近几跳原样留着,用的提示词是能改的内置提示词「上下文压缩」。细节见行为说明·上下文窗。
行为细节
一轮里模型实际看到的:人设、启用中的技能目录、系统指令、本轮 MCP、这个 Bot 的记忆、局面块(群里有在场成员、其他人各自做什么(职责,截短)、用户确认的群负责人是谁(对负责人本人写成它的活:要别人做的先用 plan_items 拆成任务再委派到那张任务上)、活轮、谁叫醒、用户最近一句——2026-10-04 用真模型跑,负责人只看得到别人的名字时,四次里有两次自己写了宣传语,告诉它之后就先拆活了;每一轮都有这件事的名字和规划要点(目标、流程与分工、进展)、你在这件事里的原话(最早 4 句和最新 6 句)、需求台账里适用的要求、验收检查、任务清单、本轮任务、已交出的文件、经过(在别的会话做的那步标明在哪)、自己待回看的那一次,规划开在别的会话时写明开在哪,还有此刻别的会话里做这件事的轮和这个 Bot 别的活轮,还没整理出要点时退回最初的要求,第一轮标「这是这件事的第一轮」;全部从库里已有的行读出,轮次本身不叫模型摘要)、最近一段转录(别人的行属于另一件事或另一个任务时,在说话人后面带 〔规划「…」· 任务 NN〕,Bot 自己的行不带,免得它学着写;含栅格附件的像素,只取最新的一份额度;带批注的用户消息在正文后面逐条展开每条批注的 id、交给哪个 Bot、路径、位置、引文或裁图和意见(页面和你写的文字折成一行或逐行缩进,冒充不了下一条),裁图和栅格附件花同一份额度、作为像素发给模型,额度用完的裁图只留批注的文字),以及本轮的工具回路。完整历史只存在库里,给你翻、给搜索,不整段塞进模型;判断调用用另一套更短的窗口,不含图。过大的工具结果先把完整 JSON 留在工作区,窗口里只放受限预览和 full_result_path;Bot 可继续用 shell 提取所需字段或解码文件,不把预览截断当作原始结果丢失。
一轮放不下时压缩回路(ADR 0068):每一跳都把本轮的工具回路整个重发,长的一轮会越过模型的上下文。两种时候压:一跳被拒成上下文满了(任何端点 400 说提示词超出上下文、本地服务截断或发前拦下、流停在上下文满),压完这一跳再走一次;模型条目里有上下文窗口(本地服务自动填,云端模型可以在模型属性里填)、这一轮的跳报了用量时,下一跳按这一轮的「字节/token」读数估到窗口的 75%,先压再发。没有窗口的云端模型不估 token,只在被拒之后压。压的是回路里较早的几跳:在 Bot 自己的一行处切开,最近几跳原样留着(不超过放得下的五分之一,工具调用和结果、思考块都在一起),上一跳之后读进来的提示和消息也留着;其余的写成一份记录(每条标明是 Bot 说的、调了什么、哪个工具的结果、提示或收到的消息,工具结果一档档截短、留开头也留结尾,再放不下就从最早的略去,上一次的摘要放最前面),连同这一轮的起因发给这一轮自己的模型(工具 → 分工里给「压缩上下文」选了模型的,用那个,思考档取 low;切分仍按这一轮自己的模型的窗口算),不带工具。它用的话是内置提示词「上下文压缩」(call.compact),能改;回答就是摘要,装在一条应用提示里(说之前的原文已不在上下文、要细节就重新读文件,大的工具结果在 tool-results/ 里有全文)替换那几跳,Bot 从摘要接着做;再压一次时,上一份摘要并进新的。「放得下」是窗口乘这一轮的读数;不知道窗口时用这一轮成功过的最大请求(一个下限)。压完到下一跳成功之前又撞上,或者指令、转录和工具定义本身就占了四分之三、能压的不到 8000 字节,或者摘要调用没给回东西,这一轮照旧以「提示词超出了模型的上下文窗口」失败。摘要调用记在花费里这一轮下面(「上下文压缩」),8 级起工作记录写一条 turn.compacted;聊天里不发行。跳数照算,压缩不把它清零。Claude Agent 的轮由 Claude Code 自己压缩,不走这里。
回避:自动摘要进人设, 语义检索记忆层, 后台蒸馏器, 按 token 估算, 把历史轮次的工具结果再喂进去
花费(Spend)
本机只增不减的调用账本,八类端点调用各记一行:轮次补全、判断、开轮前选路、纠正链复盘、复盘后的每一跳学习、输入建议、整理、验收检查;和别的调用共用一类的另记用途,视图里单列一行(书记员、读句和完工复盘记在整理一类下,验收检查里看图的那几次是看图判断,项目会话每一轮的花费记在轮次一类下、单列「项目会话」)。供应商给出 cost_in_usd_ticks 时记实报;没有实报、输入与输出 token 齐全且配置了计费单价时算估算。应用里有独立花费视图;会话顶栏、列表行、设置和模型选择记录都不放花费数字。一天花到多少就停下所有 Bot,是另一个词条「花费上限」。细节见行为说明·花费。
行为细节
本机只增不减的调用账本。八类端点调用各记一行:轮次补全、判断、开轮前选路、纠正链复盘、复盘后的每一跳学习、输入建议、整理、验收检查。和别的调用共用一类的另记用途(purpose):书记员记在「整理」一类下、用途是书记员,衔接一致检查送帧的那几次记在「验收检查」一类下、用途是看图判断;读句、反思和完工复盘也记在「整理」下、各单列一项;上下文压缩的摘要调用记在「轮次补全」下、单列「上下文压缩」,挂在它压的那一轮上,和轮次补全一起算轮次;项目会话每一轮的花费也记在「轮次补全」下、单列「项目会话」,挂在那一轮上,不归任何 Bot,会话名是项目会话的名字:Claude Code 每个 result 按模型记一行,价格是它报的估价,来源标「Claude Agent」(它续接会话时总数接着以前各轮的算,只记这一轮多出来的);Codex 每次模型调用记一行,只有 token,没有价格。选路和整理属于决策路由;复盘、学习跳、反思和完工复盘合为反馈路由;判断单列,输入建议、验收检查、书记员和看图判断归其他;输入建议、整理、书记员和验收检查都不归任何 Bot。内置模型选了 Claude 模型的调用照原来的类别和用途记,来源标「Claude Agent」,价格是 Claude Code 报的估价。视图的类别明细里,一项用途单独成一行,「整理」只剩整理跳自己的调用;按类别或某一行筛选时也这样分,还没记过的用途不占一行;所选时间范围里没有调用的类别和行,视图里也不列。每行存实际模型、端点、思考等级及写入时的会话和 Bot 名称;删会话、清空历史、删 Bot 都保留,已删除对象用名称快照并标「已删除」,迁移时找不到模型的显示「未记录模型」。token 只用端点 usage,缺了显示「—」。供应商给出 cost_in_usd_ticks 时记实报;没有实报、输入与输出 token 齐全且配置了计费单价时算估算;估算跟着现在配置的单价走,设、改或清空某个模型的单价会重算它在该端点上所有没有实报的调用,从名单里去掉的模型保留原有估算。缓存输入使用缓存单价(留空沿用输入价,缓存 token 缺了当 0);推理 token 已含在输出里,不重复加。实报与估算分开合计,覆盖不全会说明;视图里一行只写它有的那一边,整段时间里都没有数的那一边不占位置。应用里有独立花费视图:桌面一个窗格标签,窄屏和手机一个浮层,可按时间、模型、会话、Bot 及调用类别筛选、看趋势与逐次明细;明细可跳回触发消息。会话顶栏、列表行、设置和模型选择记录都不放花费数字。时间范围和维度只保存在本机。
回避:把估算当实报或混成一个金额, 用分词器估算缺失 token, 把判断并进轮次, MCP 工具自身账单
花费上限(Spend cap)
你在花费视图「概览」里填的一个美元数,按天算:从运行守护进程那台电脑的本地零点起,实报加估算的花费到了这个数,应用就用一条自己的叫停停下所有 Bot,正在跑的轮次当场结束,日程、回看和监督器的叫回都被挡住。这条叫停不随你的下一句话结束,列在侧栏「叫停中」里,写着上限是多少,只有你按「解除」才放开;解除之后当天不再拦,改了上限或到了第二天才重新算。没有单价的调用不算;本机 Agent 跑的按它报的估算价算,项目会话里的也算,但上限只停 Bot。不设就没有上限。细节见行为说明·花费上限和 ADR 0088。
行为细节
一天最多花多少,在花费视图「概览」最上面的「每日上限」里填一个美元数;清空或按「不设上限」就没有上限,默认没有(ADR 0088)。
- 怎么算:从运行守护进程那台电脑的本地零点起,每次调用有实报算实报、没有算估算,加起来到了上限就算到。没有单价、没有实报的调用不算。本机 Agent(Claude Code、Codex……)跑的按它报的估算价算,哪怕它花的是订阅额度;项目会话里的也算进去(Codex 不报价,所以算不进)。到了只停 Bot,项目会话没有叫停,正在跑的照样跑。
- 到了以后:守护进程每 15 秒看一次,到了就用一条应用自己的叫停(
source: spend_cap)停下所有 Bot:正在跑的轮次当场结束,日程、回看、监督器的叫回和 Bot 之间的话都被挡住,和「停下所有 Bot」一样。最多晚 15 秒,这段时间里正在跑的那一跳还会再花一点。 - 怎么接着做:这条叫停不随你的下一句话结束,你对 Bot 说话,它只能只读地回答。它列在侧栏「叫停中」里,写着上限是多少;按「解除」才放开,被它停下的活和别的叫停解除时一样接着做。
- 一天只拦一次:解除之后当天不再拦,哪怕又花了更多;改了上限(调高或调低)就按新的数重新算,第二天零点也重新算。
- 不做的:按会话、按 Bot 或按一件事的上限;到了之前的提醒;把 MCP 工具另收的钱算进去。
回避:预算, 日限额, 熔断, 自动停机, 按会话或按 Bot 的上限, 你说一句话就解除