ProactiveAgent
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ProactiveAgentRemember that I always use TypeScript with Bun."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ProactiveAgent 🧠
教一次,处处用。 让 Claude Code / Kimi Code / Cline / Cursor / Proma 共享同一份「主动记忆」——它不仅记住你教过的一切,更会在合适的时机主动开口提醒你。一个 MCP 挂载,所有 agent 立即拥有主动能力。
和其他「只会记」的记忆工具不同:ProactiveAgent 会记,也会在想该提醒你的时刻主动开口——纠正、跟进、自动化、待办、技能,五类主动建议。
🎬 验证故事(30 秒看懂它做了什么)
所有内容均为 2026-08-05 真实运行输出,不是演示动画:Claude Code 写入记忆 → Kimi Code 直接召回(100% 命中);行为纠正 / 周期需求 → 主动建议命中并接受。
👉 打开交互式演示页:在线演示(GitHub Pages)(浏览器直接打开即可)
⚠️ GitHub 的
blob页面只是代码查看器、不会执行 HTML 脚本,请使用上方 Pages 链接查看交互演示。
场景 | 实测结果 |
跨工具共享 | Claude Code |
主动建议:纠正 | 「以后提交前先写单元测试」→ |
主动建议:自动化 | 「每天下午 5 点检查项目进展」→ |
Kimi 一条命令接入(8/12 实测) |
|
Kimi 三路主动(8/12 实测) | hooks 恢复后全链路:会话开始注入建议/画像(today-push)→ 过程强信号 |
UMP 互操作(8/12 实测) |
|
Related MCP server: arcane
为什么值得用
🎯 记忆是「用户级资产」,不是「工具级资产」
你在 Claude Code 里教会它的偏好,Kimi Code、Cline 里自动生效——因为记忆存在 ~/.proma-proactive/,所有 agent 通过同一个 MCP server 读写同一份记忆。
告别「每个工具都要重新教一遍」:教一次 TypeScript 偏好,所有 agent 都记得。
💡 主动开口:该沉默时沉默
不是话痨推送,而是有信号才开口、有参数地克制:
你纠正了 agent → 建议把规则写进长期记忆(防重犯)
你重复做同一件事 → 建议自动化 / 沉淀为流程
闲聊、拒绝、打扰时段 → 安静(这就是能力)
克制是有参数的:每日通知上限 6 条、冷却 15 分钟、DND 时段不打扰(建议保留不吞)、画像里说过「不想被打扰」自动降频——防疲劳,也防「记仇」
🔔 关掉终端也会开口:守护进程 + 桌面通知
proactive-mcp daemon --install 一键常驻(launchd/systemd 自启):即使你没有打开任何 agent,它也会巡检待处理建议并通过桌面通知主动开口(macOS 通知中心 / Windows 托盘 / Linux notify-send);点击通知直达主动中心面板,一键接受即落地任务。
🔄 记忆不锁死:UMP 互操作
proactive-mcp ump-export 导出为标准 Universal Memory Protocol 文件,官方 UMP SDK 可加载、可 recall——记忆是你的资产,想迁移到任何 UMP 生态随时可以带走。
🛡️ 防投毒设计,记忆安全有底线
自动提取的记忆默认 pending(待确认),你确认才进入召回——阻断恶意/错误内容注入
LLM 配置同源原则:apiKey 决定信任源,绝不跨源混搭,防 key 劫持
一条记忆/一条纠正,你都能查看、确认、拒绝、删除
🔌 即插即用,一个 MCP 挂所有
标准 MCP 协议(stdio),零代码改动挂载到任何支持 MCP 的 agent。已在 Claude Code、Kimi Code、Proma 三个完全不同的宿主真实验证(8/12:Kimi 另提供一条命令插件安装);Smithery 已上架:npx -y smithery mcp add 1797650355/proactive-agent。
快速开始(< 1 分钟,无需 clone )
✅ 已发布到 npm!一条命令搞定。
方式 A(推荐):npm 直接安装
# 一条命令版(免安装,直接从 npm 拉取,适合快速体验)
npx -y @proactive-agent/mcp init
# 或安装后使用(本地 bin)
npm install @proactive-agent/mcp
npx proactive-mcp init只需 node >= 18。
init会生成指向你本地安装的.mcp.json,零额外依赖。
或者手动挂载(不装包,npx 直接拉取):
# Claude Code
claude mcp add proactive-agent -- npx -y @proactive-agent/mcp方式 B(Kimi Code 用户,一条命令):
/plugins install https://github.com/ConradLu2740/ProactiveAgent/releases/latest/download/kimi-plugin.zip
/reload装完普通 kimi 会话即自动获得主动记忆(无需 --agent);另可 kimi --agent proactive 启用激进模式。详见 Kimi Code 使用指南。
方式 C:clone 仓库(开发 / 自定义)
git clone https://github.com/ConradLu2740/ProactiveAgent.git && cd ProactiveAgent
npm install
npm run start:mcp⚠️
npm run start:mcp启动后终端会保持运行——这是 MCP server 的正常阻塞状态(等待 agent 连接),不是卡死;请保持运行,并打开你的 agent 连接它。
方式 D:起一个本地主动中心面板
# 免安装 / 已安装均可
npx -y @proactive-agent/mcp --today
# 打开 http://127.0.0.1:8737/today —— 建议、场景、画像、统计一目了然(clone 仓库开发时也可用 npm run start:today)

主动中心面板:待处理建议 + 热点场景 + 记忆统计 + 用户画像(15s 自动刷新)
挂载后立刻验证(约 1 分钟):
打开 Claude Code(或你用的 agent;Kimi 用户可
init --kimi)启动会话输入:
以后提交代码前必须先写单元测试→ 应收到“把这条规则写入长期记忆?”建议(suggest_now)再输入:
我偏好用 TypeScript 和 Bun,然后问:我之前的偏好是什么?→ 能召回刚才的记忆 = 记忆已跨工具生效
没生效?
proactive-mcp doctor一键诊断。
LLM 需求速查表
功能 | 需要 LLM key? | 说明 |
| 否 | 纯本地确定性规则,开箱即用 |
| 可选 | 配 |
| 可选增强 | 配 LLM 后自动补充近义词召回;未配用规则同义词兜底 |
可选配置示例(仅 memory_extract 需要):
# ~/.proma-proactive/.env(或项目 .env,建议 chmod 600)
MEMORY_LLM_API_KEY=sk-xxx
MEMORY_LLM_BASE_URL=https://api.deepseek.com/v1
MEMORY_LLM_MODEL=deepseek-chat宿主配置差异
宿主 | init 自动生成 | 主动推送机制 | 额外手动步骤 |
Claude Code |
| 三层 hooks(SessionStart / UserPromptSubmit / Stop) | 无(交互 TUI 生效; |
Kimi Code |
| 提示词驱动( | 需 kimi 登录/API key;与 kimi-plugin 二选一 |
Cursor |
| 官方映射 Claude hooks | 确认 .mcp.json 被识别;开启第三方钩子兼容* |
Cline |
| 手动 | 手动接 |
Codex |
| 手动 | 手动接 |
* 仓库仅实测 Claude Code / Kimi Code / Proma;Cursor / Cline / Codex 项以官方文档为准。
能力总览
Tools(20 个,任何宿主可用)
类别 | 工具 | 干什么 |
🧠 记忆写入 |
| 显式记住一条(偏好/事实/纠正/流程,立即生效;支持 scope: project/global) |
🧠 记忆提取 |
| 把对话交给引擎自动提取(默认待确认,防投毒) |
🔍 记忆检索 |
| 关键词/混合检索,任务开始前注入上下文(默认 auto:项目+全局合并) |
✅ 记忆闭环 |
| 待确认记忆 + 行为纠正的确认/拒绝 |
👤 画像 |
| 读取合并画像(global base + 项目覆盖)/ 手动保存画像 |
🔥 场景 |
| 近期热点场景("你最近在忙什么") |
📊 统计 |
| 记忆系统统计(含记忆动态:今日变更 / 距上次更新天数 / 3 天复查邀请) |
💡 建议 |
| 主动建议评估 + 反馈闭环(频率学习) |
🃏 统一卡片 |
| 跨来源 ActionCard 统一协议视图(当前来源 suggestion,未来 agent/automation/bridge 投递) |
📋 模板 |
| 每日复盘 / 使用说明 |
Resources & Prompts
memory://today— 今日建议 + 热点场景memory://stats、memory://personaPrompts:
daily_review(每日复盘)、onboarding(冷启动引导)
附加能力
记忆维护(0.8.0,对齐 Proma v0.17.0 记忆治理):
memory_stats展示「今日 X 条动态 · 距上次更新 N 天」;记忆超过 3 天未更新时返回复查邀请(清理过时记忆、确认待确认项、必要时重整画像);persona_get在画像超载(>45 行 / >6 章节)时提示精简重整;onboarding_guide提供「先建画像 → 再补证据」两阶段引导。/today Web 面板:本地主动中心(15s 自动刷新),任何宿主都能开浏览器看;
POST /api/evaluate支持宿主把最近消息推过来触发会话中评估;建议卡片支持「接受 / 忽略」一键反馈(ActionCard 闭环,接受即落地本地任务)守护进程(0.5.0 主动出口):
proactive-mcp daemon常驻后台,巡检待处理建议并通过桌面通知主动开口(macOS 通知中心 / Windows 托盘气泡 / Linux notify-send);点击通知打开主动中心面板;--install一键配置登录自启(launchd / systemd);--status/--stop管理;doctor包含 daemon 健康检查与今日疲劳状态(已通知/上限)。巡检间隔PROACTIVE_DAEMON_INTERVAL_MIN(默认 60 分钟),每次最多通知 1 条、同条不重复打扰、DND 时段不打扰且不吞建议(克制信条)。通知疲劳控制(0.8.0):每日通知上限(默认 6 条/天,
PROACTIVE_DAEMON_DAILY_LIMIT覆盖,跨天自动重置)+ 冷却窗口(默认 15 分钟,PROACTIVE_DAEMON_COOLDOWN_MIN覆盖)+ 画像驱动打扰系数——画像含「不要打扰/静默」等规则时上限减半、冷却翻倍(尊重用户「不想被打扰」的表达);达上限/冷却时建议保留不吞,次日继续跨工具感知网(0.6.0):统一事件协议——各工具 hooks 把会话/消息/commit 事件归一化写入
~/.proma-proactive/events/(仅当前用户可读写),daemon 巡检时读取最近事件构造 messages 做真定时评估(完成 0.5 P0-1 遗留);Claude Code / Kimi Code hooks 已内联写事件,Cursor 官方支持加载 Claude Code hooks 自动接入,Codex/Cline 可用dist/hooks/event-capture.js通用入口接入;init打印跨工具接入指引;第三方接入指南见docs/developers/adapter-guide.mdUMP 互操作(0.7.0 L0):
proactive-mcp ump-export导出记忆为 Universal Memory Protocol 文件(.ump/memory.ump.json),ump-import从 UMP 文件导入(默认待确认防投毒)——任何 UMP 客户端可读写 ProactiveAgent 记忆;兼容评估见 .context 文档,L2 MCP store 桥接待生态成熟Claude Code hooks(三层):
SessionStart(today-push):会话开始推送待处理建议 + 热点场景UserPromptSubmit(user-prompt):会话中实时评估——你说"以后都用 pnpm",立即收到纠正建议;弱信号自动沉默Stop(session-end):会话结束沉淀记忆 + 评估建议
⚠️ 非交互模式限制:hooks 仅在 Claude Code 交互式 TUI 会话中触发;
claude -p脚本/CI 模式不触发 hooks。脚本场景请用claude -p --allowedTools "mcp__proactive-agent__*"显式授权 MCP 工具后,让模型直接调用suggest_now/memory_capture(注意:--permission-mode acceptEdits不会授予 MCP 工具权限,必须显式--allowedTools)。Kimi Code hooks(主动转述):
UserPromptSubmit输出对齐 Kimi task 通知范式的<notification>XML——Kimi 模型看到通知后主动向用户转述建议("上次你说 X,要记住吗?"),复用 Kimi externalHooks 通道。⚠️ 前置条件:Kimi Code 需要先完成登录或配置 API key(
kimi首次运行/login,或按 config.toml 配置[providers.<name>]+api_key)。未配置时kimi -p会报No model configured。诊断:kimi doctor/kimi provider list。 Kimi hooks 配置是 TOML(不是 JSON),写在~/.kimi-code/config.toml:[[hooks]] event = "UserPromptSubmit" command = "node <mcp 安装路径>/dist/hooks/kimi-user-prompt.js" timeout = 10字段只允许
event/matcher/command/timeout;UserPromptSubmit用户发消息时触发,hook stdout 附加到上下文,模型看到<notification>后主动转述。
使用场景
场景 1:跨工具共享的长期记忆
今天:在 Claude Code 里说"我偏好用 TypeScript"
明天:打开 Kimi Code 写代码,它自动 recall 到你的偏好,直接按你的习惯来场景 2:从"纠正"到"永不再犯"
你说:"以后提交前先写单元测试"
→ suggest_now 识别为 correction 建议
→ 你点"接受":规则写入记忆 + 回流用户画像
→ 以后所有 agent 都遵守这条规则场景 3:会话中主动建议(0.5.0)
你在 Claude Code 里输入:"以后提交前先跑测试"
→ UserPromptSubmit hook 实时评估(evaluateNow, session_mid)
→ 建议注入当前会话:"记住这个纠正?接受:suggest_accept"
→ 接受后规则写入记忆,所有宿主下次遵守场景 4:时间感知的定时任务建议(0.5.0)
你说:"每天下午5点帮我检查发布状态"
→ 时间解析器识别周期 → cron: 0 17 * * *
→ 建议预填真实 cron,接受后直接建好定时任务场景 5:无人值守的主动守护进程(0.5.0)
proactive-mcp daemon --install # 安装登录自启(macOS/Linux)
→ 每隔 60 分钟巡检待处理建议
→ 有值得开口的建议时,桌面通知弹出来(点击打开主动中心)
→ 在面板点「接受」→ automation/todo 建议直接落地为本地任务
→ 该沉默时沉默:无新建议 / DND 时段(建议保留不吞) / 同条建议不重复打扰架构
flowchart LR
A[Claude Code] -->|MCP stdio| S[proactive-mcp]
B[Kimi Code] -->|MCP stdio| S
C[Cline / Cursor] -->|MCP stdio| S
D[Proma 应用] -->|dogfooding| E[proactive-core]
S --> E[proactive-core 引擎]
E --> F[(~/.proma-proactive 记忆)]@proactive-agent/core:headless 引擎(记忆 + 建议),零运行时依赖,可被任意宿主消费@proactive-agent/mcp:MCP Server 包装层(tools/resources/prompts + 面板 + hooks)
记忆分层模型
L1 Atom 结构化记忆条目(LLM 提取 + 去重 + 优先级)
L2 Scene 场景块(近期主题聚合,主动性时机信号)
L3 Persona 用户画像 markdown(稳定偏好,带来源溯源)
Correction 行为纠正候选(需确认后生效)安全与隐私
设计 | 说明 |
默认 pending | 自动提取的记忆需确认才进入召回,阻断投毒链 |
LLM 同源原则 | apiKey 决定主信任源,baseUrl/model 只从同源取;baseUrl 仅 https |
数据本地优先 | 记忆存在本机 |
用户控制 | 每条记忆/纠正可确认、拒绝、删除、清空 |
免打扰时段 | DND(默认 22:30-08:00)不产生新建议 |
克制原则 | 单次最多 1 条建议、同会话预算限制、"该沉默时沉默" |
FAQ
Q:支持哪些 agent? A:任何支持 MCP 的 agent:Claude Code、Kimi Code、Cline、Cursor、Windsurf、VS Code 等。Proma 原生(dogfooding)。
Q:记忆存在哪?
A:默认 ~/.proma-proactive/,可用 PROACTIVE_DATA_DIR 覆盖。纯本地文件(JSONL/markdown),可随时备份/迁移。
Q:需要 API key 吗?
A:核心功能(memory_capture / memory_recall / suggest_* 等)不需要,纯本地开箱即用;仅 memory_extract 的 LLM 提取可选。详见快速开始「LLM 需求速查表」。
Q:和其他记忆方案有什么区别? A:多数方案是"单工具的被动记忆"。ProactiveAgent 是跨工具共享 + 主动建议——教一次处处用,且只在合适的时机主动开口。
Q:会把我的对话发给外部吗?
A:只有 memory_extract 的 LLM 模式会把当前对话片段发给你自己配置的 LLM(默认 DeepSeek 兼容接口);规则模式零外发。显式 capture/recall 纯本地。
Q:记忆量大后性能会变慢吗?
A:0.5.4 起 memory_recall 使用倒排索引(term → atoms,缓存 + 自动失效 + fail-open),只扫描含查询词的候选集,替代全量扫描——个人/中小项目无感知,上万条记忆也能保持低延迟。同时建议定期用 proactive-mcp stats 观察记忆规模,并用 proactive-mcp archive 做 TTL 归档治理。
Roadmap
守护进程 + 桌面通知主动出口(0.5.0:常驻评估 + 三端通知 + 通知点击打开面板 + launchd/systemd 自启 + ActionCard 闭环按钮)
跨工具感知网(0.6.0:统一事件协议 + 事件落盘 + Claude/Kimi 内联写事件 + Cursor 官方兼容 + event-capture 通用入口 + daemon 真定时评估)
UMP 互操作 L0(0.7.0:ump-export/ump-import + 兼容评估文档 + adapter 接入指南与模板)
通知疲劳控制(0.8.0:每日上限 + 冷却窗口 + 画像驱动打扰系数 + doctor 疲劳状态)
生态分发收尾(0.7.1:Smithery 描述更新 + mcp.so 手动提交 + UMP L2 桥接评估)
通知内反馈回流增强(0.8.1:通知点击统计 → ROI 回流)
通知疲劳控制与个性化(0.8.x:频控 + 画像驱动打扰 + 通知内反馈回流)
事件按项目隔离评估(0.6.1:daemon 按 pk 分组 + core projectHint 路由生效)
核心引擎(记忆 + 建议 + 场景 + 画像)
MCP Server + 面板 + hooks
Proma / Claude Code / Kimi Code 真实验证
npm 发布(@proactive-agent/core + @proactive-agent/mcp)
按项目记忆(0.3.0:项目隔离 + 显式全局共享 + 迁移 + 逃生开关)
主动推送闭环(0.5.0:evaluateNow 统一入口 + 会话中 UserPromptSubmit hooks + Today push 端点)
Kimi 主动转述(0.5.0:
<notification>XML 通知范式,模型主动向用户开口)Action Executor(0.5.2:接受即执行——内置本地任务队列默认执行器,
suggest_accept真实创建定时任务/待办;宿主注入真实执行器时自动覆盖)SessionStart 记忆注入(0.5.2:today-push 自动注入画像摘要 + 高优先级记忆)
建议 ROI 指标(0.5.0:漏斗 + 类型接受率 + 自动降预算)
时间/周期解析(0.5.0:中英文时间表达 → cron/dueAt 预填)
英文信号(0.5.0:correction/automation/followup/todo 英文模式)
Kimi turn.steer 空闲自启新 turn(需 Kimi agent 内部 API,待上游开放)
指标面板:建议接受率 / 打扰率(0.5.0:
suggestionRoiStats漏斗 + 类型接受率 + 自动降预算,Today 面板 ROI 区展示)embedding 本地化(0.1.x:local node-llama-cpp + embeddinggemma / api 双模式,默认 off fail-open)
多语言 README(0.5.3:README.en.md + 中英文切换)
记忆索引化(0.5.4:倒排索引 + 缓存失效 + fail-open,支撑上万条)
自动归档 / TTL 记忆管理(0.5.4:按类型 TTL + env 覆盖 + archive CLI)
贡献
欢迎 PR / Issue!开发环境:Node 22 + TypeScript + Vitest + esbuild。npm install && npm test && npm run build
License
Available Tools
20 toolscard_getGet action card detailARead-onlyIdempotent
Get a single ActionCard by id with full fields (source / priority / target / privacy / duplicateKey / evidence).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ActionCard id (from card_list) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations include readOnlyHint and idempotentHint, signaling no side effects. The description aligns with 'Get', and listing the returned fields provides transparent expectations about the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and focused, using one concise sentence to convey the essential action and returned fields without redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input schema and annotations, the description is sufficient. It specifies the resource, the identifier, and the set of fields returned, covering all necessary operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'id' has a clear description: 'ActionCard id (from card_list)'. This directly explains its meaning and source, achieving full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a single ActionCard by id' with a specific verb and resource. It also lists the full fields returned, making it distinct from a simple list operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives like card_list or other sibling tools. The description only explains what it does, not the appropriate context or conditions for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
card_listList action cardsARead-onlyIdempotent
List unified ActionCards (cross-source action inbox). Current source is suggestion engine; future agent / automation / bridge sources land here. Card status uses unified semantics: pending / accepted / dismissed / resolved.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Card status filter |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, covering the main behavioral aspects. The description adds context about the unified status semantics (pending/accepted/dismissed/resolved) and the current/future sources, which is useful beyond the annotations but not critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, directly to the point, with no redundant information. It efficiently communicates the tool's purpose, scope, and status semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the readOnly/idempotent annotations, the description provides sufficient context: it explains the tool's cross-source nature, the unified status semantics, and the current source. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the only parameter (status) with 100% description coverage, including an enum. The description further clarifies that statuses use unified semantics, so the meaning of the parameter is fully explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'ActionCards', and explicitly differentiates it as a cross-source, unified action inbox. This distinguishes it from sibling tools like suggest_list, which are source-specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (for a unified, cross-source list) versus source-specific alternatives, but it does not explicitly name alternatives or state conditions such as 'use this instead of suggest_list for a consolidated view'. Still, the cross-source and unified phrasing provides adequate guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
correction_confirmConfirm behavior correctionAIdempotent
Confirm a pending behavior correction (from corrections.json, usually extracted by memory_extract rule mode). On confirmation: writes a correction memory and refreshes the persona. ID comes from memory_pending correction entries.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Correction ID (from memory_pending) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effects beyond the idempotentHint annotation: 'writes a correction memory and refreshes the persona.' This gives the agent a clear understanding of what happens on confirmation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that convey purpose, source, and effects without extraneous detail. Well-structured and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool, the description is complete: it specifies the input source, the action, and the effects. No missing information that would prevent an agent from using it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The argument 'id' is well described both in the schema and the tool description as 'Correction ID (from memory_pending)'. Schema coverage is 100%, and the description reinforces the source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Confirm') on a specific resource ('pending behavior correction') and clearly describes the effects. Differentiates from sibling tools by referencing corrections.json and memory_pending entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context on when to use: for pending corrections from memory_extract rule mode, with ID from memory_pending. Does not explicitly contrast with correction_reject but implies it by focusing on confirmation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
correction_rejectReject behavior correctionADestructiveIdempotent
Reject a pending behavior correction (incorrect extraction or poisoned content). ID comes from memory_pending correction entries.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Correction ID (from memory_pending) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already identify this as destructive and idempotent, and the description's 'reject' is consistent with that. The description adds context about why a correction might be rejected but does not describe the mechanism or postcondition of rejection, such as whether the entry is removed or marked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence with a helpful parenthetical and a direct instruction about where to find the ID. There is no redundant information or vague filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter action with an output schema present and safety annotations supplied, the description is sufficient to determine when and how to invoke it. It lacks only a formal statement of what rejection means, but annotations cover the destructive nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single id parameter has a description in the schema ('Correction ID (from memory_pending)'), and the tool description repeats this provenance. With full schema coverage, the description adds no additional parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action ('reject') and the target ('a pending behavior correction'), with explicit rationale for when rejection is appropriate. The ID source is specified, and the name plus 'behavior correction' scope distinguishes it from sibling tools like correction_confirm and memory_reject.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable context by explaining that rejected corrections are those based on incorrect extraction or poisoned content and that the ID comes from memory_pending correction entries. It does not explicitly contrast it with correction_confirm, but the reject/confirm dichotomy is clear from the names and the stated rationale.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_reviewDaily reviewARead-onlyIdempotent
Generate a daily review guide: organize today's work into long-term memories and generate improvement suggestions. The returned template guides you through memory_recall / memory_extract / scene_summary / suggest_now. Suitable at session end or on a daily schedule.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Review date (default today) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description makes clear that the tool returns a template rather than directly performing memory operations, which matches the readOnly and idempotent annotations. It does not explicitly state that no state changes occur, but the 'returned template guides you through' wording conveys a non-destructive, planning-only role.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with two sentences covering purpose, output behavior, and usage context. Every sentence adds useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a simple optional date parameter and an output template, the description provides sufficient context: what it generates, which sub-tools are involved, and when to use it. The output schema is present, so return details need not be spelled out in prose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, date, is fully documented in the schema with a default meaning. The description does not add significant extra semantics beyond that, but no required parameter details are missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: generating a daily review guide that organizes work into memories and produces improvement suggestions. It also specifies the exact sub-tools the template guides through, making the intended function unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says it is suitable at session end or on a daily schedule, providing clear usage context. It does not explicitly contrast with sibling tools, but the mention of the sub-tool flow and the 'daily review' purpose gives enough guidance for when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_captureCapture a memoryAIdempotent
Explicitly store a long-term memory (takes effect immediately, enters recall). Call immediately when the user states an explicit preference/fact/decision/correction (e.g. "以后X", "我喜欢X", "记住X", "不要X") — do not wait for wrap-up. Keep content concise, self-contained, and independently understandable. Types: fact / preference / correction / sop / todo_context / event.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Memory type | fact |
| scope | No | Write scope: project (default) / global | |
| content | Yes | Memory content. Keep negations intact: e.g. "不要用 X" must be stored as-is, never drop 不/不要/别 | |
| priority | No | Importance 0-100, default 50 |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation already provides idempotency, and the description adds behavioral context by noting 'takes effect immediately, enters recall' and emphasizing content preservation (e.g., never drop negations). This goes beyond the annotation to inform the agent of expected side effects and storage behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core action. It avoids unnecessary details and focuses on essential usage and content requirements, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, 1 required, enums, output schema), the description provides sufficient context on when to call and what to store. It does not repeat parameter details already covered by the schema, and the output schema exists, so no further explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with descriptions for all four parameters (type, scope, content, priority). The description does not add extra parameter-level semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (store a long-term memory) and the resource (memory), and explicitly distinguishes when to call it from other memory tools by specifying user statements like '以后X' or '我喜欢X'. This makes it unambiguous for an agent to know its primary purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit 'when' conditions (call immediately on explicit preferences/facts/decisions/corrections) and adds a practical tip (don't wait for wrap-up). It does not explicitly mention alternatives or when-not-to-use, but the strong conditional guidance effectively directs usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_confirmConfirm memoryAIdempotent
Confirm a pending memory (enters recall; correction/preference/sop types also refresh the user persona). Call when the user approves an item listed by memory_pending.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Memory ID (from memory_pending) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation only includes idempotentHint, but the description discloses additional behavioral details such as entering recall and refreshing the persona for correction/preference types, offering transparency beyond the minimal annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two sentences: the first states the primary action and side effects, the second gives the usage condition. It is front-loaded and avoids unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter, the description provides sufficient context: what it does, when to use it, and relevant side effects. No output schema is needed, and the description is complete for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides full coverage for the single parameter 'id' with a clear description ('Memory ID (from memory_pending)'). The tool description does not add extra meaning, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: confirming a pending memory. It also specifies additional effects (enters recall, refreshes persona for certain types), distinguishing it from related tools like memory_reject and memory_pending.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool: 'Call when the user approves an item listed by memory_pending.' This provides clear guidance and indirectly distinguishes it from memory_reject.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_extractExtract memories from conversationAIdempotent
Feed recent conversation messages to the engine for automatic memory extraction (LLM or rule mode). Call it yourself at conversation wrap-up or when enough dialogue has accumulated — do not wait for a host hook. Extracted items default to pending (anti-poisoning), confirm via memory_pending + memory_confirm. Falls back to rule mode (zero external calls) when LLM is not configured.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Candidate write scope: project (default) / global | |
| messages | Yes | Conversation messages (chronological) | |
| sessionId | No | Source session ID (for traceability) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral aspects: extracted items default to pending (anti-poisoning), fallback to rule mode without external calls, and idempotence is implied by the annotation. No contradictions with the idempotentHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using two sentences to cover functionality, usage timing, and default behavior. It avoids unnecessary fluff while retaining all essential information, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full schema coverage and the presence of an output schema (not shown but indicated), the description provides sufficient context for correct invocation. It includes when to call, fallback handling, and default state, leaving no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters (scope, messages, sessionId) have descriptive metadata in the schema. The description also explains the default scope and the chronological nature of messages, enhancing understanding beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: feeding recent conversation messages to the engine for automatic memory extraction. It distinguishes modes (LLM or rule) and is unambiguous about its purpose relative to other memory-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to call the tool (at conversation wrap-up or when enough dialogue accumulates) and instructs not to wait for a host hook. It also mentions fallback behavior to rule mode when LLM is unavailable, giving clear operational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_pendingPending memories & correctionsARead-onlyIdempotent
List automatically extracted but unconfirmed items (anti-poisoning: only enter recall after user confirmation). Two kinds:
Pending memories (atom): handle with memory_confirm / memory_reject
Pending corrections: handle with correction_confirm / correction_reject Call after memory_extract / memory_capture to surface what is waiting for user confirmation, and remind the user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and idempotentHint, so the description need not repeat them. It adds valuable context about anti-poisoning and the requirement for user confirmation, which is additional behavioral guidance beyond the annotations and helps the agent understand the safety implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, uses a clear numbered list for the two types, and includes a direct trigger instruction. No unnecessary fluff, and the structure aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides enough context to call the tool correctly: when to call it, what it lists, and how to handle the results. It also mentions the anti-poisoning rule. Since an output schema exists (though not shown), explaining return values is not required. The tool is fully specified for an agent to use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the schema fully covers them. The description adds no parameter details (irrelevant here). Baseline score for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists automatically extracted but unconfirmed items, and distinguishes two types (memories and corrections) with explicit handling tools. This is a specific verb ('list') and specific resource ('pending memories & corrections'), and it differentiates from siblings like memory_recall by emphasizing the unconfirmed nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to call after memory_extract/memory_capture and provides the exact follow-up tools (memory_confirm/reject, correction_confirm/reject). It also warns against using this for recall until confirmation, which clarifies when not to use it and when to use alternatives like memory_recall.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_recallRecall memoriesARead-onlyIdempotent
Search long-term memories by keywords (keyword + embedding hybrid; falls back to keyword when embedding is unavailable). Returns matching entries with type, importance, and similarity. Call at the start of a new session/task (query = current topic) to restore context; also call whenever the user references past work, project history, or personal preferences.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by type | |
| limit | No | Max results, default 5 | |
| query | Yes | Search keyword/question | |
| scope | No | Read scope: auto merged (default) / project / global |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint and idempotentHint, and the description confirms a read-only search operation with no side effects. The fallback behavior for embedding unavailability is also disclosed, adding transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loads the core purpose, and efficiently includes usage timing and return details without redundancy. It avoids unnecessary filler while still being informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, annotations, and complete parameter descriptions, the description provides enough context for an agent to invoke the tool correctly. It includes return contents, filtering options, and usage scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters are described in the schema with clear meanings: query as the search keyword/question, type as a filter, limit as max results with default, and scope as read scope with auto/project/global options. Coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches long-term memories by keywords and returns matching entries with type, importance, and similarity. The purpose is immediately obvious and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: call at the start of a new session/task to restore context, and call whenever the user references past work, project history, or personal preferences. This leaves no doubt about when to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_rejectReject memoryADestructiveIdempotent
Reject and delete a pending memory (incorrect extraction or poisoned content).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Memory ID (from memory_pending) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation already includes destructiveHint and idempotentHint, and the description adds context by specifying the scope (pending memory) and the rationale. No contradictions are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence with no superfluous words. All key elements are present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: one parameter, no output schema, and annotations. The description fully covers what it does, when to use it, and what parameter to provide. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'id' is described as 'Memory ID (from memory_pending)', which precisely indicates what value to supply and where it originates. Full schema coverage is achieved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (reject and delete) and the target (a pending memory), plus the specific reasons (incorrect extraction or poisoned content). It is immediately obvious what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly specifies when to use the tool: for pending memories that were incorrectly extracted or contain poisoned content. This gives clear guidance without needing to inspect sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_statsMemory statsARead-onlyIdempotent
View memory system statistics (atom count, type distribution, pending items, persona status).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation declares readOnlyHint and idempotentHint, which aligns with the description's 'View' action. The description does not add extra context beyond what the annotations provide, but it is consistent and sufficient for a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that directly conveys the purpose without unnecessary words. It is well-structured and easy to understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lists the kinds of statistics available, which gives a good sense of what to expect. However, it does not specify the exact output format or whether the result is a single object or a list, but this is a minor gap given the simplicity of the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty, meaning there are no parameters to describe. The description does not need to add parameter details, so this dimension is fully satisfied by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (View) and the resource (memory system statistics), and lists specific kinds of statistics provided (atom count, type distribution, pending items, persona status). This is unambiguous and does not require additional context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for viewing memory statistics, but it does not explicitly state when to use it over alternatives. No sibling tools are mentioned or contrasted, so the guidance is minimal but not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onboarding_guideOnboarding guideARead-onlyIdempotent
Cold-start guide: teaches this session how to use ProactiveAgent memory & suggestion tools (when to use memory_capture/recall/extract, how to confirm pending memories, restraint principle). Call once on first mount in a new environment/project.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
ReadOnly and idempotent annotations already indicate safety; the description reinforces this by describing teaching rather than state changes. It does not add detail about side effects, but none are implied and the annotations cover it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single concise sentence with clear front-loaded purpose and a direct usage condition. No wasted words or redundant elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only instructional tool with an output schema, the description fully explains its content and invocation timing. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, there is nothing to document. The description appropriately focuses on what the guide covers and when to invoke it, matching the baseline expectation for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it is a cold-start guide that teaches how to use ProactiveAgent memory and suggestion tools, distinguishing it from the actual tool siblings by framing it as instructional orientation rather than a data operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call once on first mount in a new environment or project, giving a precise condition for use and implying it is not needed for routine operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
persona_getGet user personaARead-onlyIdempotent
Read the L3 user persona markdown (stable summary of user preferences/behavior rules). Call at the start of a new session to load the user profile and preferences. Returns the merged view by default (global base persona + current project overrides, with per-line scope).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Read scope: auto merged (default) / project / global |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description aligns by saying 'Read' and 'Returns'. The description adds useful behavior detail about the merged view and per-line scope, going beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. It packs purpose, usage timing, and return behavior into a compact, readable format. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations and schema, the description is complete. It covers what the tool does, when to use it, and what it returns. No critical information is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'scope' has a full enum with descriptions, and the description explains the default behavior ('merged view by default') and what merging means (global base persona + current project overrides). This adds meaningful context to the schema definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the L3 user persona markdown, a stable summary of preferences, and distinguishes it from writing tools like persona_save. The verb 'Read' and the specific resource 'L3 user persona markdown' make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when-to-use guidance: 'Call at the start of a new session to load the user profile and preferences.' This is concrete and actionable, and the read-only nature implicitly contrasts with writing tools like persona_save.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
persona_saveSave user personaAIdempotent
Manually save/overwrite persona markdown. Defaults to the current project layer (overrides that project part of the merged view); scope=global writes the global base persona. For maintaining the persona or project-specific behavior rules.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Write scope: project (default) / global | |
| content | Yes | Persona markdown content |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that saving overwrites the relevant part of the merged view and clarifies the project vs global behavior. The idempotentHint annotation is consistent with the overwrite semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, directly relevant, and front-loads the core action. No redundant or filler wording is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides enough context for correct invocation, including the critical default-scope behavior and the purpose of the tool. No significant missing details are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already describes content and scope, and the description adds meaningful context about the default scope and its merged-view effect. This goes beyond the basic parameter descriptions without being excessive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool saves or overwrites persona markdown, distinguishing it from persona_get. The description also explains the two scopes and their effect, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains that it defaults to the current project layer and that global writes the base persona, with a stated use case of maintaining the persona or project-specific rules. It does not explicitly contrast with sibling tools, but the context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_summaryRecent hot scenesARead-onlyIdempotent
Read recent hot-scene summaries (timing signal for proactivity: what is being worked on recently, how hot).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of scenes, default 3 |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description's 'Read' aligns with the readOnlyHint annotation. It adds context about the tool's intended role as a proactivity signal, which goes beyond the bare annotations, but it does not detail side effects or error behavior. Since annotations already cover the key behavioral aspects, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it leads with the core action, then provides the contextual purpose in a parenthetical. Every word adds value, and the length is appropriate for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and no complex output schema (though output schema is flagged as present, it is not detailed), the description sufficiently conveys its function and purpose. It could clarify what constitutes a 'hot scene' but the intent is clear enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'limit' is fully described in the schema (default 3, min 1, max 10), and the description does not add extra meaning beyond what the schema provides. With 100% schema coverage, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Read') and the resource ('recent hot-scene summaries'), and adds context about being a timing signal for proactivity. This makes the tool's purpose distinct and easily distinguishable from sibling tools like card_list or memory_recall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool ('timing signal for proactivity: what is being worked on recently, how hot'), providing clear context. However, it does not explicitly mention when not to use it or compare to alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_acceptAccept suggestionAIdempotent
Accept a suggestion. For memory_correction types, writes a behavior correction and refreshes the persona (accept = explicit approval). For automation/todo types, tries to actually create it (requires host-injected executor), otherwise returns executable instructions. Pass host to label the current host (e.g. claude-code / kimi) for fallback wording.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Suggestion ID (from suggest_now / suggest_list) | |
| host | No | Current host name (claude-code / kimi / cline / cursor / proma) for fallback wording |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses side effects: for memory_correction it writes a behavior correction and refreshes the persona, and for automation/todo it attempts creation or returns executable instructions. The idempotentHint annotation is not contradicted. No hidden behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise, containing three sentences that pack essential details without excessive fluff. It is structured logically by type, which aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of sibling tools, the description sufficiently differentiates suggest_accept by explaining the accept action and its consequences. It covers the main branches of behavior and mentions the output fallback, making it complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides clear descriptions for id and host, and the tool description reinforces the source of id and lists example host names. While the description does not add much beyond the schema, it is consistent and clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Accept a suggestion' and explicitly distinguishes between memory_correction and automation/todo types with specific actions for each. The verb and resource are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what happens for each suggestion type and notes the host requirement for fallback wording. It implies when to use this tool but does not explicitly contrast it with sibling tools like suggest_ignore or suggest_list, which could enhance guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_ignoreIgnore suggestionAIdempotent
Ignore a suggestion (counts toward frequency learning: similar suggestions converge in weight; repeated ignores auto-silence that type).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Suggestion ID (from suggest_now / suggest_list) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare idempotentHint, so the description carries the burden of revealing additional behavior. It explains that ignoring counts toward frequency learning and that repeated ignores auto-silence that type, which is valuable context beyond idempotency. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with the core action first and behavioral details in parentheses. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, an output schema, and idempotency annotation, the description covers the tool's effect and learning behavior. It does not mention potential error cases or preconditions, but these are minor for a simple ignore action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description already clarifies the source of the ID. The tool description does not add further meaning to the parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Ignore') and resource ('suggestion'), and the parenthetical adds behavior that distinguishes it from siblings like suggest_accept and suggest_now. An agent can clearly identify what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (when you want to ignore a suggestion) but does not explicitly contrast it with suggest_accept or state conditions for choosing it over alternatives. There is no when-not guidance, leaving some room for inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_listList suggestionsARead-onlyIdempotent
List suggestion records, filterable by status (suggested / accepted / ignored / never).
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Status filter |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and idempotentHint annotations already establish that the tool is non-destructive and side-effect-free. The description's 'list' phrasing is consistent with these hints and adds no new behavioral context, but the existing annotations cover transparency adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no redundant phrases. It directly states the action, resource, and the optional filter, achieving maximum clarity with minimal words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with one optional parameter, the description is sufficient. The read-only nature is corroborated by annotations, and the tool's purpose is fully self-explanatory. No additional context is needed for an agent to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully covers the only parameter (status) with an enum and description. The tool description reiterates the enum values, providing minimal additional context beyond the schema, which meets the baseline but does not elevate it further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function as listing suggestion records and explicitly mentions the filterable status, making its purpose unambiguous. It distinguishes itself from sibling tools like suggest_accept or suggest_now, which imply mutations, by focusing on the read-only 'list' action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit filtering guidance by enumerating the allowed status values (suggested/accepted/ignored/never), which helps the agent understand how to narrow results. However, it does not directly state when to prefer this tool over alternatives like suggest_accept or suggest_now, though the read-only nature is implied by the name and annotations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_nowEvaluate suggestionsAIdempotent
Evaluate whether a conversation excerpt deserves proactive suggestions (correction / followup / automation / skill / todo). Call when the conversation shows signals worth reminding: an unfinished todo, a repeated mistake the user corrected, a follow-up promised, or an automation opportunity. Core principle: silence is also a skill. At most 1 per call, session budget limits, none during do-not-disturb hours. Returns newly created suggestions (may be empty). trigger: session_end (default) / session_mid (realtime, strong signals only, max 1) / manual.
| Name | Required | Description | Default |
|---|---|---|---|
| trigger | No | Trigger point: session_end=end of session (default) / session_mid=realtime (strong signals only) / manual | |
| messages | Yes | Conversation messages (chronological) | |
| sessionId | No | Session ID (for budget dedup) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses that it returns 'newly created suggestions (may be empty)', implying a side effect, and the idempotentHint annotation helps clarify retry safety. It does not fully describe all state changes or error behavior, but the combination of description and annotation is fairly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the core purpose and triggers. The phrase 'Core principle: silence is also a skill' is somewhat aphoristic but still adds meaningful usage guidance and does not feel like filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity and the presence of sibling tools, the description covers the main entry conditions, output nature, and constraints. It could be slightly stronger by explicitly distinguishing when to use suggest_list/suggest_accept/suggest_ignore instead, but it is largely complete for an agent to decide when to call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters, and the description adds useful semantic detail for trigger values (session_end default, session_mid realtime strong signals only, manual). It reinforces the messages and sessionId purposes without contradicting the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Evaluate' and the resource 'proactive suggestions', with explicit examples of signals (unfinished todo, repeated mistake, follow-up promised, automation opportunity). It is easy to distinguish from sibling tools like suggest_list or suggest_accept because it focuses on deciding when to create suggestions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete call conditions: when conversation signals are present, plus explicit constraints such as 'At most 1 per call', 'session budget limits', and 'none during do-not-disturb hours'. The guidance 'silence is also a skill' adds useful judgment context for when not to suggest.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
20 tool updates
v0.10.0- First observed
card_get - First observed
card_list - First observed
correction_confirm - First observed
correction_reject - First observed
daily_review - First observed
memory_capture - First observed
memory_confirm - First observed
memory_extract - First observed
memory_pending - First observed
memory_recall - First observed
memory_reject - First observed
memory_stats - First observed
onboarding_guide - First observed
persona_get - First observed
persona_save - First observed
scene_summary - First observed
suggest_accept - First observed
suggest_ignore - First observed
suggest_list - First observed
suggest_now
TDQS
Scored across 20 tools
Several tools have overlapping purposes, such as card_list vs suggest_list vs memory_pending, and correction_confirm vs memory_confirm. The descriptions clarify some differences, but the boundaries between action cards, suggestions, and pending memories remain confusing for an agent.
Naming is not consistent: some tools use object-action (card_list, memory_capture), others use verb-noun (suggest_list, suggest_accept), and a few are adjective-noun (daily_review, onboarding_guide). All use lowercase underscores, but the pattern is mixed and unpredictable.
20 tools is slightly above the typical 3-15 range. The count is borderline reasonable for a memory/suggestion/persona system, but several tools could be consolidated (e.g., card_list and suggest_list, correction_confirm and memory_confirm).
The surface covers core memory, suggestion, persona, and correction workflows, but lacks explicit update/delete operations for confirmed memories and card status transitions. An agent cannot fully manage the lifecycle of items once they are accepted or resolved.
Maintenance
Related MCP Connectors
Shared memory for coding agents. Stop re-explaining your codebase every session.
Persistent cross-session memory shared by Codex, Claude Code, ChatGPT, and other AI agents.
Shared memory for AI coding agents. Save once, reuse from Cursor, Claude Code, Codex.
Universal memory for AI agents and tools. Save, organize and search context anywhere.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI coding agents to maintain persistent, cross-session memory of codebase architecture, naming conventions, and decisions through MCP tools. Eliminates repetitive project re-explanation by automatically injecting stored context into every session with local-first SQLite storage and optional team sharing capabilities.4MIT
- AlicenseNot gradedqualityCmaintenanceProvides persistent, searchable memory and knowledge capture for AI-assisted development, enabling agents to retain decisions, bugs, and patterns across sessions and projects.MIT
- AlicenseNot gradedqualityCmaintenanceProvides persistent memory for AI coding tools, allowing them to remember corrections, decisions, and preferences across sessions and different tools.8 npm2MIT
- AlicenseNot gradedqualityCmaintenanceShareable memory for AI coding agents. Enables agents to remember and recall durable memories across sessions and share them as importable packs.2 npmMIT