20 KiB
可持续对话(本地 MCP · 长连接)
id: G22b
name: 可持续对话
member: 金仓
trigger:
- 可持续对话
- persistent chat
- 卡住续跑
- wait_for_user_input
- 13458
- Cursor持久对话
- 安装持久对话
- 长连接
- 自动续跑
- 优化续跑
- Auto模式
- Cursor Auto
- Agent模式
- 不间断
- 持续运作
- 长时间对话
- 持续对话
- persistent MCP
version: 1.6.51
updated: 2026-06-14
heat: 🔴 热
related:
- 02_卡人(水)/水桥_平台对接/MCP管理/SKILL.md
- 04_卡火(火)/火炬_全栈消息/持续执行闭环/SKILL.md
- 04_卡火(火)/火炬_全栈消息/前端开发/私域银行统一前端模块/README.md
一句话
Cursor Agent 永不中断:本地 MCP + Hub 长轮询 + 浏览器面板 http://127.0.0.1:13458;单对话可配 复盘 / 直通 / 优化 三模式;UI 对齐 卡若AI Glass UI Kit;无卡密、无第三方 API。
与 G26 持续执行闭环:用户要 把需求/代码做到验收(不限挂起)→ 先读 04_卡火/火炬_全栈消息/持续执行闭环/SKILL.md;本 Skill 只管 wait 循环与 13458 面板。
Cursor Auto / Agent + persistent-chat(默认不间断)
用户不必每次粘贴提示词。 install.sh 会在项目写入 .cursor/rules/persistent-chat.mdc(alwaysApply: true)。
| 步骤 | 操作 |
|---|---|
| 1 | 对话模式选 Auto、Agent 或 Composer(本机 Cursor 任意 Agent 类模式;不限制 LLM 模型) |
| 2 | MCP persistent-chat 绿点;面板 http://127.0.0.1:13458 自动续跑 开 |
| 3 | 详情区模式:直通(连续 ▶下一步)或 优化(总结→检索→开发) |
| 4 | 第一条消息直接写任务;Agent 自动 select_conversation → verify_karuo_ai_gate → 执行 → wait_for_user_input |
完整说明 + 可粘贴启动词(仅换机/规则未生效时):references/Cursor_Auto与持久MCP不间断.md
禁止:因「任务已完成」停止 wait;wait 只是挂起传输,不是终点;仅用户明确 「结束持久对话」 可停。
模型无关(v1.6.50 · 不限制)
| 层 | 是否限制模型 |
|---|---|
| MCP server.js | ❌ 无 model 参数、无白名单 |
| Hub hub.js | ❌ 只认 ct_ / composerId,不认 LLM |
| 13458 面板 | ❌ |
| Cursor 侧 | 你选 Auto / Agent / Composer / Claude / GPT … 均可 |
| 不可用 | Plan / Ask(无 Agent 工具,调不了 wait) |
composerId = Cursor 对话框 ID(防串线),≠ Composer 模型产品;任意模型对话框都有 composerId。
文档索引
| 文档 | 用途 |
|---|---|
| 本文件 SKILL.md | 安装、用法、三模式、MCP 工具 |
| references/Cursor_Auto与持久MCP不间断.md | Cursor Auto/Agent + persistent-chat 默认不间断(提示词、配置、与 G26 叠加) |
| references/不间断开发_G22b叠加G26.md | 九条铁律:每轮读需求 + 开发至验收 + 边打勾 + 优化沉淀(与 G26 叠加真源) |
| 开发需求_不间断开发叠加_20260605.md | 本 Skill 自身进行中需求(每轮循环 Read 入口) |
| 部署与长连接接入.md | 跨科室部署、HTTP API、长轮询时序、踩坑 |
| 图文教程/零基础安装指南.md | 新手图文 |
| package/故障排查_输入闪退与发送状态.md | 面板异常 |
| package/故障排查_工具中断interrupted.md | Read/GenerateImage/MCP 误报 interrupted |
| 图文教程/功能说明图/ | MCP 产品三张图(概念/落地/形态代价 PNG + 说明 MD) |
架构(长连接)
┌─────────────┐ stdio ┌──────────────┐ HTTP ┌─────────────────┐
│ Cursor Agent│◄──────────►│ server.js │◄─────────►│ hub.js :13458 │
│ MCP 工具 │ │ (MCP 客户端) │ │ 唯一 HTTP 进程 │
└─────────────┘ └──────────────┘ └────────┬────────┘
│
┌──────────────────────────────────────────┤
│ panel.html(浏览器) │
│ /api/wait/poll 28s 长轮询 renewal │
│ /api/reply 用户回复 │
└──────────────────────────────────────────┘
长连接本质:MCP 侧对 /api/wait/poll 循环长轮询;面板 2s 拉 /api/state;用户回复经 /api/reply 唤醒 poll。
一键安装
bash "/Users/karuo/Documents/个人/卡若AI/01_卡资(金)/金仓_存储备份/Cursor持久对话/install.sh"
bash install.sh --project "/path/to/repo" # 指定项目
bash install.sh --all-karuo # 卡若多根工作区
# 改 package 后同步运行时
bash "脚本/sync-runtime.sh"
# 打可分发安装包(插件 + 网站桥接 zip)
bash "脚本/build_package.sh"
安装后 Cmd+Q 退出 Cursor 再开 → Settings → MCP → persistent-chat 绿点 → 打开 http://127.0.0.1:13458
验收
bash check-mcp.sh
bash "脚本/check-mcp-link.sh" ct_xxx # v1.6.51 MCP↔Hub 链接 + verify_mcp_status
bash "脚本/check-continuous-loop.sh" ct_xxx # 发消息+续跑不停(v1.6.40)
bash "脚本/check-optimize-fullchain.sh" ct_xxx # 优化模式四步 Hub 验收(v1.6.47)
curl -s http://127.0.0.1:13458/api/health # panelVersion ≥ 1.6.17
curl -s "http://127.0.0.1:13458/api/link/status?token=ct_xxx" # pendingWait/linked
MCP 链路检测(v1.6.51 · wait 前必调)
| 工具 / API | 用途 |
|---|---|
verify_mcp_status |
MCP 工具:Hub 在线 + ct_ 链接;须 [MCP_LINK] PASS |
/api/link/status |
pendingWait / connectionHeld / linked / cursorOccupied |
| 占用态铁律 | 每 turn 最后 tool = wait;[RENEWAL] 同 turn 零正文再 wait |
单轮 REQ 与 renewal 链(v1.6.71 · 防 interrupted)
| 铁律 | 说明 |
|---|---|
| 单轮少 REQ | 先执行后 wait;禁止 wait 前堆砌 Shell/Read/并行 tool |
| MCP 预算 | select + gate + 一次 wait;gate 10min 缓存;勿与改码/生图/Shell 同批并行 |
| RENEWAL 零工 | [RENEWAL] → 立刻 renewalOnly 再 wait;禁止 其间任何 Read/Shell/verify |
| 禁止多级 renewal 工 | 同 turn:wait →(RENEWAL)→ renewalOnly wait → 收 turn;禁止 RENEWAL 后再执行又第三次 wait |
| 大任务拆轮 | 单轮 ~25s 可完成量;超出则复盘+wait,下轮续跑 ▶ |
多标签并行(v1.6.72 · Cursor/Codex/VS Code 通用)
| 项 | 说明 |
|---|---|
| 一套 Hub | 所有客户端共用 :13458;每标签独立 ct_,可并行多项目 |
| 三开三 wait | 每窗口末 tool 必须各自 wait;A 挂起不能代替 B |
| 断链诊断 | bash 脚本/check-multi-tabs.sh → dialogueState=OFF = Agent 未 wait |
| OFF 一键排队 | bash 脚本/repair-off-tabs.sh → 开 turbo+保活并为 OFF 会话排队续跑 |
| composer 防串 | rebuild 只取最新 thread;禁止验收脚本污染 composer 绑定 |
发消息后不停(v1.6.40 · 科室必验)
| 步骤 | 预期 |
|---|---|
面板发消息 / /api/reply |
未 wait 时 queued,connectionHeld 仍为 true |
/api/continue |
未 wait 时排队续跑,不 404 |
Hub postDeliverWatchdog |
消息送达后 10s 内 Agent 未 re-wait → 再排队续跑 |
| Agent 每轮 | 处理完面板消息 → 必须再 wait_for_user_input |
bash "脚本/check-continuous-loop.sh" ct_ca405c05
单对话三模式(v1.6.13+ · 默认自动续跑开)
在面板选中对话 → 详情区顶部配置(非全局):
| 模式 | 值 | 行为 |
|---|---|---|
| 复盘 | standard |
挂起后:追问 → 检索 → 执行;需 [卡若复盘] 五块 |
| 直通 | turbo |
不等复盘,Hub 直推 ▶下一步 直到目标完成 |
| 优化 | optimize |
自动四步:①总结聊天 → ②WebSearch+GitHub → ③补开发文档 → ④按文档开发 |
API:
curl -X POST http://127.0.0.1:13458/api/session/config \
-H 'Content-Type: application/json' \
-d '{"token":"ct_xxx","continueMode":"optimize","sessionAutoContinue":true}'
定时回复(v1.6.17+ · 默认「自动」)
| 项 | 默认 |
|---|---|
| 自动续跑延迟 | 10 秒 |
| 间隔 | 自动(仅走续跑规则) |
| 固定保活 | 30 秒 · 4 分钟 · 9 分钟 |
自动:约 10 秒后按复盘/直通/优化规则续跑。
固定间隔:到点发保活文案(直通 ▶=无 时选 4 分钟/9 分钟)。
curl -X POST http://127.0.0.1:13458/api/session/config \
-H 'Content-Type: application/json' \
-d '{"token":"ct_xxx","timedReplyIntervalMs":0}'
# 0=自动 · 30000/240000/540000=固定
完整 Token 绑定铁律(v1.6.30)
- 计划真源是完整
ct_xxxxxxxx,禁止前缀匹配、禁止按标题猜 token。 - 每次挂载先用完整 token 查 Hub 会话库、
bindings.json、thread-bindings/;能恢复就必须恢复原 token。 - 只有完整 token 在库里找不到时,才允许
init_conversation(newPlan:true, cursorTitle=标签名, planLabel=计划名)新建。 newPlan不归档旧计划;旧计划继续holding/waiting,所有计划可并行保活。- 同一 Cursor 标签下多计划用
planLabel区分;消息写入必须命中对应 token 的 wait 或 steerQueue,不能串到其它计划。
对话框 ID 垂直绑定(v1.6.42 · composerId 真源)
根因:仅靠 cursorTitle(标签名)绑定时,vscdb 可能读到「最近更新」的其它标签 → TOKEN_TITLE_MISMATCH / 标签变来变去。
| 真源 | 说明 |
|---|---|
composerId |
Cursor 对话框 ID(CURSOR_CONVERSATION_ID);一个对话框 ↔ 一个 ct_ |
composer-bindings.json |
Hub 权威:工作区::composer:{id}@IP → ct_ |
/api/binding/sync-title |
wait/select 时按 composerId 对齐;标签改名自动 migrateBindingRename |
| 标签名 | 仅展示/迁移用;禁止用标签猜 token |
Agent 行为:select/wait/verify 必须带当前对话框 composerId;标签与 token 不一致时 先 sync composer,不要弹错绑选项。
同步:bash "…/Cursor持久对话/脚本/sync-runtime.sh"
防 interrupted 融合(v1.6.47 · 6/14 绑定 + 6/12 poll)
| 保留(6/14) | 回退(6/12) |
|---|---|
| composerId↔ct_ 垂直绑定、sync-title | 单次 hubPollOnce(~10s renewal 即归还 Cursor) |
| offWait / postDeliverWatchdog / perpetualDev | 禁止 hubPollUntilReply 内循环 ≤24s |
| steerQueue 续跑 | [RENEWAL] 续期跳过 sync/verify HTTP |
根因:6/14 内循环 poll + 前置 verify ≈ 30~40s → 超过 Cursor MCP 单工具超时 → interrupted → 任务像自动停止。
部署:bash 脚本/sync-runtime.sh → Cmd+Q 重启 Cursor → grep 1.6.47 ~/.persistent-chat-local/server.js
对话不断(v1.6.49 · 复盘永不停止 · 硬修 interrupted)
用户诉求:对话保持在场,不要 interrupted / 「关掉 turn 再续」。
| 项 | v1.6.49 做法 |
|---|---|
| MCP | 仅 hubPollOnce ~10s;禁止 while ≤24s(interrupted 根因) |
| RENEWAL | 跳过 sync/verify;Hub 错也 renewal 不断环 |
| Hub neverStop | 1.2s 续跑;【对话续接】;不 flush steerQueue |
| Agent | [RENEWAL] 静默立刻再 wait;续接=复盘+wait 同 turn;禁 meta 收工句 |
bash "脚本/sync-runtime.sh" && bash "脚本/一键重载MCP.sh"
# 必须 Cmd+Q 重启 Cursor → grep 1.6.49 ~/.persistent-chat-local/server.js
保活显示与不跳转规则(v1.6.32)
waiting只表示 Agent 当前真的在wait_for_user_input等回复。holding表示计划 token 已绑定并保持连接态;当前没有 wait 时,面板消息先进入排队,等 Agent 下次 wait 自动送达。/api/state会把所有未结束计划维持为connectionHeld=true;只有用户明确发「结束持久对话」才清掉保活。- 面板列表按创建时间稳定排序,不因 active/waiting 变化置顶;用户点选后轮询只刷新状态,不自动跳到其它会话。
- 左侧徽标:
续跑=有 pending wait 自动续跑;挂起=等用户;保活=计划连接保持、可排队。
未挂起断链修复(v1.6.39 · Hub)
现象:Cursor Agent 跑完一轮没调 wait → 面板「计划保活中(未挂起)」→ 续跑/保活文案进不了 Cursor → 任务像「直接结束」。
| 层 | 机制 |
|---|---|
| Hub | triggerOffWaitKeepAlive:绑定会话且未 wait 时,每 10s 把续跑文案写入 steerQueue;/api/continue 无 wait 时也排队而非 404 |
| Agent | 每轮必须 复盘 → wait_for_user_input;G26「不要停/直到完成」禁止无 wait 收工 |
| 开发任务 | 面板切 直通(turbo),跳过复盘三段式阻塞;curl 见下 |
# MBTI 等开发任务切直通 + 自动续跑
curl -s -X POST http://127.0.0.1:13458/api/session/config \
-H 'Content-Type: application/json' \
-d '{"token":"ct_1d4a71eb","continueMode":"turbo","sessionAutoContinue":true}'
steerQueue 送达:Agent 下次 wait 后,排队续跑自动注入 Cursor(poll 首包 dequeue)。
同步 Hub:bash "…/Cursor持久对话/脚本/sync-runtime.sh"
永续等待 + 中文回复(v1.6.41 · 强制)
可持续对话 = 一直保持等待/保活,不因出错、超时、任务中断而结束。
| 铁律 | Agent / Hub |
|---|---|
| 每轮 wait | 每轮末尾 必须 wait_for_user_input;挂起 = 待命,不是结束 |
| 出错仍 wait | [RENEWAL]、Hub 超时、连接异常 → 立即同一 pchat-token 再 wait |
| 不关进度 | 禁止说「对话结束」「停止等待」;禁止清 ct_/关面板会话 |
| 唯一停机 | 仅用户当轮 「结束持久对话」 |
| renewal 静默 | [RENEWAL] 不展示给用户,直接再 wait |
| 中文回复 | 凡涉及可持续对话/面板/wait/续跑/挂起/ct_ 的回复 一律中文(Cursor/MCP/Hub 等专有名词除外) |
| Hub perpetualWait | 新会话默认 perpetualWait=true;绑定会话不因 2h 无 wait 归档 |
出错时 Agent 动作
Hub 异常 / wait 失败 / 收到 RENEWAL
→ 不向用户宣布结束
→ 中文简短说明(若需)
→ 立即再 call wait_for_user_input(同一 pchat-token + title)
→ 永不因 retry 次数而停
MCP 工具一览
| 工具 | 用途 |
|---|---|
select_conversation |
选/绑 ct_;冲突时 ask_user_question |
init_conversation |
新建;新计划 newPlan:true + cursorTitle |
wait_for_user_input |
挂起;须同一 pchat-token + cursorTitle |
verify_karuo_ai_gate |
每对话至少一次门禁 |
verify_binding / apply_binding_choice |
垂直绑定校验 |
铁律:一 Cursor 标签 ↔ 一 ct_ ↔ 一 IP;cursorTitle 必填。
中文标识(强制):cursorTitle / planLabel / 面板 title / prompt / 续跑文案 一律中文;标签为英文时 Agent 须 rename_chat 改中文。细则见 package/templates/persistent-chat.mdc §中文标识铁律。
卡若复盘 + 续跑节奏
| 步骤 | 复盘模式 | 直通/优化 |
|---|---|---|
| ⓪ 读需求 | 每轮 Read 进行中 MD + references/不间断开发_G22b叠加G26.md |
同左 |
| ① 执行 | Agent 改代码;边打勾;bug 当场修 | 同左 |
| ② 复盘 | [卡若复盘] 🎯目标/✅结果/📊达成率 → 🧭过程 → 🔍反思 → 📌总结 → 🚀下一步执行 | 直通可省略;优化在 Hub 侧补 |
| ③ wait | wait_for_user_input |
同左 |
| ④~⑥ | 追问→检索→执行 | 优化=总结→检索→补文档→执行 |
| ⑦ 验收 | 清单全 ✅ → 全量测试页面/细节 → 全绿才 100% | 同左 |
面板快捷:追问完成 · 检索完成 · ▶ 继续开发
不间断开发叠加 G26(v1.6.36)
用户说 一直继续 / 不要停 / 直接开发直到完成 / 每轮读需求 时:
- G22b 管
wait循环与 13458 续跑(仅「结束持久对话」可停)。 - G26 管需求做到验收(见
持续执行闭环/SKILL.md)。 - 每轮 先 Read 项目
{项目}_进行中_*.md+ 本目录references/不间断开发_G22b叠加G26.md。 - 优化方法 写入需求 MD「优化沉淀区」与共享文档。
- 开发至全绿:全部子项 ✅ + 全量回归通过;否则 ▶ 写下一修复/下一子项。
面板 UI(v1.6.14 · 卡若AI Glass)
- 视觉:
kir-glass毛玻璃 + 蓝紫渐变品牌色(与私域银行统一前端模块一致) - 顶栏:已连接 + ⋯(新计划/清理/复制提示词)
- 侧栏:增量渲染不闪;显示模式标签
- 详情:自动续跑开关 + 复盘/直通/优化;消息区智能滚底
UI 真源:04_卡火(火)/火炬_全栈消息/前端开发/私域银行统一前端模块/
与其他 MCP / 工具并存
| 场景 | 做法 |
|---|---|
| 只用持久对话 | install.sh 即可,不必 MCPfinder |
| 再加数据库/飞书等 MCP | 走 MCP管理 SKILL 搜索安装,与 persistent-chat 并列 |
| 外部脚本发回复 | POST http://127.0.0.1:13458/api/reply |
| Codex/类似工具 | 对接同一 Hub API,见 部署与长连接接入.md §四 |
成功 / 失败判定
✅ 成功
- MCP 绿点;面板「已连接」
wait_for_user_input出现在 Cursor 工具调用- 面板回复后 Agent 立刻继续
- 左侧选中会话不闪;滚底正常
❌ 常见故障
| 现象 | 动作 |
|---|---|
| 两个 persistent-chat | bash 脚本/清理重复MCP.sh |
| 发错 ct_ | 面板 token 须与 Cursor pchat-token 一致 |
| 面板离线 | bash 脚本/sync-runtime.sh |
| 左侧 idle 堆满 | ⋯ → 清理旧会话 |
| 优化不跑 | 详情区切「优化」+ 开自动续跑 |
| wait 后进程自己退出 | server.js 已改:stdin 关闭后,只要还有活跃会话/连接态就不退出;同步运行时后生效 |
| 续跑断链 / 未挂起 | Agent 未 wait → Hub v1.6.39 已排队续跑;须 Agent 下轮调 wait 送达;开发任务切 直通 |
| 发消息后停了 | bash 脚本/check-continuous-loop.sh ct_xxx;确认 connectionHeld 仍为 true |
| 等待被中断 | v1.6.47:回退 6/12 单次 poll;Hub 异常也 renewal 不断环;须 Cmd+Q 重载 MCP |
文件布局
| 路径 | 说明 |
|---|---|
package/hub.js |
Hub 源码真源 |
package/panel.html |
面板源码真源 |
package/server.js |
MCP 客户端 |
~/.persistent-chat-local/ |
运行时(sync 同步) |
~/.cursor/mcp.json |
全局 MCP |
<项目>/.cursor/rules/persistent-chat.mdc |
Agent 规则 |
Mongo karuo_site.持久对话会话 |
备份 |
版本记录
| 版本 | 要点 |
|---|---|
| 1.6.36 | 不间断开发叠加 G26:每轮读需求、边打勾、开发至全绿、优化沉淀;共享文档 references/不间断开发_G22b叠加G26.md |
| 1.6.17 | 自动续跑默认 10秒;定时间隔默认 自动,固定 30s/4min/9min |
| 1.6.16 | 定时回复:预设与 Hub 调度;修 panel duplicate let |
| 1.6.14 | 卡若AI Glass UI;Skill+部署文档完善 |
| 1.6.13 | 单对话三模式(复盘/直通/优化);/api/session/config |
| 1.6.12 | 侧栏增量渲染;智能滚底;顶栏精简 |
| 1.6.3 | 垂直绑定铁律 |
| 1.5 | 自动续跑默认开;恢复对话 |
卸载
rm -rf ~/.persistent-chat-local
# 编辑 ~/.cursor/mcp.json 删除 persistent-chat