Skip to main content
Glama

会话接力 SessionRelay

简体中文 | English

CI npm downloads Node MCP 平台 语义检索 License

属于项目、不属于任何厂商的本地记忆层。 Memory is always complete. Retrieval is always yours to shape. 记忆始终完整收录;检索边界由你划定。

你和 AI 聊了 3 天的方案,不应该随关窗消失。它属于项目,属于下一个接手的人。

60 秒演示

会话接力 SessionRelay 演示

GIF 无声音——完整配音版(中文/英文 + 手机竖版)在 Releases · v0.2.2 页面内可直接播放。

Related MCP server: Leteo

它解决什么

痛点

会话接力的答案

跨时间失忆:新会话问"上周讨论的方案?"——AI 不知道

按需检索历史会话,带出处

跨工具断裂:Claude Code 定的方案,ZCode 不知道

双源同库,任何 agent 通过 MCP 查同一份记忆

跨人交接:你和 AI 聊了 3 天,接手的人只能"去看代码"

导出 .hop 交接包,对方的 AI 立刻拥有全部上下文

与 claude-mem 的架构区别:会话级存储

这是最核心的设计决策,不是功能差异,是存储粒度的架构差异:

claude-mem

SessionRelay

存储单位

记忆片段(压缩摘要,跨会话打散混合)

会话(完整对话,有标题/时间线/来源/状态/决策)

AI 看到的

一堆"你之前说过…"碎片

"根据 8 月 28 日 ZCode 会话《数据库选型》第 12 条…"

幻觉风险

高:上下文污染 + 压缩失真 + 无法溯源

结构性抑制:出处强制 + 按需查询 + 原文可回跳

三个反幻觉设计(不是功能,是架构承诺):

  1. 出处强制:AI 回答必须带"哪个会话/哪条消息/哪个 agent"——有源可查,不能瞎编

  2. 按需查询(pull):AI 不问就不查 → 上下文干净,不被无关记忆污染

  3. 原文可回跳:AI 拿到的是原始对话全文,不是压缩摘要——决策的"为什么"完整保留

架构总览

你和任何 AI 工具聊的内容,被统一收进一个项目级数据库;你、AI、同事都能查。换工具不丢记忆,换人可交接。

graph TB
    subgraph Sources["🖥️ 你的 AI 编程工具(各聊各的)"]
        CC["Claude Code<br/>JSONL 文件"]
        ZC["ZCode<br/>SQLite 数据库"]
        CX["Codex<br/>JSONL 文件"]
        QD["Qoder<br/>JSONL 文件"]
        TR["Trae<br/>部分支持*"]
    end

    subgraph Relay["🧠 会话接力(本地记忆层)"]
        DAEMON["守护进程 watch<br/>每 30 秒自动同步"]
        DB[("relay.sqlite<br/>统一记忆库")]
        EXTRACT["结构化提取器<br/>决策 · 话题 · 摘要 · 关键往返"]
    end

    subgraph Consumers["👥 谁来查询记忆"]
        YOU["你(CLI)<br/>search · decisions · history"]
        AGENT["AI Agent(MCP)<br/>16 个工具"]
        TEAM["同事(HOP 交接包)<br/>export → import"]
    end

    CC -->|adapter| DAEMON
    ZC -->|adapter| DAEMON
    CX -->|adapter| DAEMON
    QD -->|adapter| DAEMON
    TR -.->|仅用户提问| DAEMON
    DAEMON --> DB
    DB --> EXTRACT
    DB --> YOU
    DB --> AGENT
    DB --> TEAM

    style Relay fill:#1a1a2e,color:#e94560
    style Sources fill:#16213e,color:#fff
    style Consumers fill:#0f3460,color:#fff

* Trae 的 AI 回复端到端加密,仅能采集用户提问。其他工具不在列表里?写一个自定义适配器即可,零改核心代码。

记忆的生命周期

每个会话在记忆库中经历两阶段判定,宁可多等,不固化没聊完的对话:

stateDiagram-v2
    [*] --> active: 对话开始/守护捕获
    active --> pending_end: 超过10分钟没新消息
    pending_end --> active: 你回来继续聊(复活)
    pending_end --> confirmed: 安静超过6小时
    active --> active: 新消息追加
    confirmed --> active: 追加新消息(回滚+摘要重算)
    confirmed --> archived: srelay archive(归档)
    archived --> active: 新消息到达(复活)

    confirmed: ✅ 已固化
    confirmed: 提取决策/话题/摘要
    confirmed: 进入全文搜索主索引

    archived: 📦 已归档
    archived: 骨架保留(决策/话题)
    archived: 正文已释放(99.4%空间)

为什么需要中间的 pending 状态:对话可以复活(第二天 --resume 继续)。如果直接固化,提取的决策就是残缺的。pending 是 6 小时缓冲带;就算固化了,追加消息也会自动回滚重算。原始会话文件是唯一事实源——库里任何时候都能 srelay rebuild 重建。

核心能力

🖥️ 被动捕获(零打扰)

  • 五源适配:Claude Code · ZCode · Codex · Qoder(完整支持)+ Trae(部分:仅用户提问)+ 自定义适配器(加一个 JS 文件接入新工具,零改核心代码)

  • 三档隐私:full(默认) / meta(只存元数据) / off(仅手动)

  • .sessionrelayignore 硬边界:隐私排除对自动捕获、手动 save、导出全部生效

  • 两阶段判定:active → pending_end → confirmed,resume 自动回滚,原始会话文件是唯一事实源(库随时可 rebuild)

  • 历史回填:srelay init 默认回填近 30 天;srelay sync --backfill all 一条命令全量入库

🔍 中文检索

  • jieba 分词 + FTS5 双索引(正文 + 元数据),AND 覆盖度语义,OR 兜底

  • 语义检索(可选):srelay semantic enable 一键开启——换一种说法也能命中("登录"↔"认证"、"很卡"↔"性能"),本地 CPU 推理(bge-small-zh),字面命中优先、语义只做补充,未启用时行为与纯字面检索完全一致

  • jieba 分词 + SQLite FTS5 双索引(六条中文验收用例门禁)

  • 会话级 AND 覆盖 + OR 兜底:连写词拆分("认证方案"→ 认证+方案)、短语精确匹配("按月分区")

  • 每条结果强制携带出处块(会话 ID / 来源 agent / 日期 / 消息序号 / 摘要片段)

🤖 MCP Server(16 个工具,9 读 + 7 写域)

任何支持 MCP 的 AI agent 接入后,从此在这个项目里不再是失忆的:

工具

回答的问题

search_sessions

"我们之前讨论过 X 吗?"(中文全文 + 元数据过滤)

get_session_detail

"那场讨论具体聊了什么?"(完整消息,支持范围)

list_sessions

"这个项目都聊过哪些话题?"

get_decisions

"为什么决定用 X 而不是 Y?"(全部已确认决策,带出处)

get_file_history

"这个文件为什么这么写?"(跨会话文件讨论史)

suggest_related_sessions

"还有哪些讨论和这个相关?"(算法发现的同主题会话,可解释理由)

get_unresolved

"还有什么没定的?"(未决问题清单)

get_stats

"记忆库什么状态?"(会话数/来源分布/体积)

set_scope

检索边界逃生口

工具

能力

安全边界

annotate_session

给会话打标签 / 写人工摘要

只改元数据,不改写对话

save_note

AI 把结论写成笔记(决策句式直接入决策库)

source=note,可识别可审计

export_handoff

生成 .hop 交接包

只读导出

import_handoff

导入交接包(sha256 校验 + 归化)

默认隔离模式(正文待放行)

release_quarantine

放行隔离会话正文

需显式调用

link_sessions

建立会话关联(continues/related/pinned)

关联可查可撤销

get_linked_sessions

双向查询会话关联(出边/入边)

只读

写域三原则(D21):旁路写入(不碰状态机)· 导入默认隔离 · 笔记可溯源——每条 AI 写入都能被识别、审计、撤销。

🖥️ 本地仪表盘(srelay ui,0.6.0 新增)

第三个薄呈现层:CLI / MCP / 浏览器共用同一批查询函数,核心域零改动、零新增依赖。

  • 总览:注册表内全项目卡片——会话构成、来源分布、磁盘占用、守护存活

  • 项目详情:可交互增长图(消息 + 活跃会话双指标,点柱下钻当天会话)、FTS 全文过滤、健康卡片(含守护日志尾部)

  • 会话详情下钻:元信息、决策、关键问题、分页消息流、会话内关键词搜索——点击命中或决策直接跳到对应消息并高亮

  • 首个写口「会话遗忘」:与 CLI srelay forget 同一核心(事务删除 + 墓碑 + ignore 双防复活 + 审计),确认弹窗防误触;不做消息级删除(会话不可变,遗忘权粒度是会话级)

  • 安全模型:默认关闭 · 仅绑 127.0.0.1 · 一次性令牌 + Host 校验(防 DNS rebinding)· 永不 CORS · 前台生命周期(Ctrl-C 即停)

srelay ui    # 启动本地仪表盘(随机端口 + 一次性令牌,自动打开浏览器)

🎯 Scope 检索边界

  • B 档:scope.json 项目契约(CLI 与 MCP 共用),交集语义只能收窄

  • A 档:auto-scope 兜底(MCP 侧近 30 天可配),防上下文污染

  • attach:开新会话前挂载指定历史会话(最高优先级谓词)

  • 热更新:scope 改动下一次调用立即生效

🧹 遗忘权(srelay forget)

AI(MCP 工具)永远没有删除能力——删除是人的特权。需要时由你亲手执行:

srelay forget a3f8c2d1        # 预览:将删除什么、保留什么
srelay forget a3f8c2d1 --yes  # 执行:整条会话彻底消失(含决策),不可逆
srelay forget --history       # 审计:什么时候删了什么
  • 选型口诀:空间与老化用 archive(保留决策骨架);让一条对话彻底消失、永不回来,用 forget

  • 双防复活闸:.sessionrelayignore 精确规则(主,跨 rebuild 存活)+ 墓碑表(次,防 ignore 被清理)——原始文件还在磁盘,但本库永不重新收录

  • 前缀歧义防护:前缀命中多个会话时列出候选拒绝执行,绝不静默猜一个

  • 注意:forget 是项目级操作;已通过 .hop 交接包交出去的记忆不在管辖内(删除权已随包交出)

📦 HOP 交接协议(hop/1.0,开放格式)

  • 独立协议规格(MIT,产品中立,欢迎第三方实现读取器)

  • sha256 逐文件完整性校验(篡改整体拒绝)

  • 默认密钥脱敏:AWS key / 私钥 / Bearer / 密码赋值 / 数据库连接串 + 脱敏报告

  • 隔离导入(quarantine):只入元数据与摘要,正文经 release 逐条放行——反 prompt 注入的结构性防线

  • HANDOFF.md 自动生成(决策表 / 涉及文件 / 未解决问题 / 时间线 / 页脚署名)

  • 跨项目导入:交接包可导入到任何路径/名称的项目(自动归化,origin_project 溯源)

一次真实的交接是这样流动的:

sequenceDiagram
    participant 张三 as 张三(离开)
    participant 包 as .hop 交接包
    participant 小王 as 小王(接手)
    participant AI as 小王的 AI

    张三->>包: srelay export --all
    Note over 包: 自动:脱敏密钥<br/>生成 HANDOFF.md<br/>逐文件 sha256
    包->>小王: 发送文件(微信/邮件均可)
    小王->>包: srelay import xxx.hop --from 张三
    Note over 小王: 自动:校验完整性<br/>归化 project_id<br/>记入审计
    小王->>AI: "为什么数据库选了 PG?"
    AI->>包: get_decisions()
    包-->>AI: "决定采用 PostgreSQL(出处:张三 08-20 会话)"
    AI-->>小王: 带出处的完整回答

快速开始

要求 Node ≥ 22(Windows / macOS / Linux):

# 方式一:npm 安装(推荐)
npm install -g @ewanjasper/sessionrelay

# 方式二:零安装试用
npx @ewanjasper/sessionrelay init

# 方式三:从源码
git clone https://github.com/EwanJasper/SessionRelay.git
cd SessionRelay && npm install && npm run build && npm link

初始化项目

cd 你的项目
srelay init              # 初始化 + 回填近 30 天(1 分钟内可搜到上月讨论)
srelay sync --backfill all   # 或全量回填所有历史(旧会话自动确认+提取决策)

日常使用

srelay search 中文关键词 [--topic --source --since --json]
srelay decisions         # 全部已确认决策(带出处,可回跳)
srelay history src/db/   # 该文件被哪些会话讨论过
srelay watch --install-service  # Windows 注册守护,登录自启
srelay doctor            # 环境自检

团队交接

srelay export --all      # 交接包(默认脱敏)→ 发给同事
# 同事在他的项目根(任何路径):
srelay import xxx.hop --from 你的名字

👉 完整实操指南(五个场景:项目交接/新人入职/安全导入/跨项目迁移/定期归档):导入导出指南

⚠️ 为什么需要守护进程

ZCode 在上下文压缩时会物理删除旧消息(实测确认:一个 500 条会话压缩后被删 3976 条)。守护进程每 30 秒自动同步,确保消息在被删之前入库。

不开守护的风险:手动 sync 之间的间隔内,如果 AI 触发上下文压缩,被删的原始消息将永久丢失。

srelay watch --install-service   # Windows 注册表自启动(无需管理员)
srelay watch --foreground        # macOS/Linux 前台运行(服务注册开发中)
timeline
    title 不开守护 vs 开守护
    不开守护 : 你聊天(消息进 ZCode 库) : AI 触发上下文压缩 : 💥 消息被 ZCode 物理删除 : 你想起来跑 sync : ❌ 只能拿到压缩摘要,原文永久丢失
    开守护 : 你聊天(消息进 ZCode 库) : 守护 30 秒内自动入库 : AI 触发压缩 : ZCode 删除消息 : 😌 没关系,原文已在记忆库 : 压缩摘要也被捕获

守护的资源开销:CPU 空闲时 ≈ 0%(事件驱动),内存 ~80MB(Node.js 常驻),磁盘 I/O 增量极低,网络零外呼。

MCP 接入指南

Claude Code(一条命令)

claude mcp add sessionrelay --scope user -- srelay serve

注册后在 Claude Code 里输入 /mcp 应看到 sessionrelay 已连接、16 个工具就绪。

ZCode / 其他 MCP 客户端

在项目的 MCP 配置(.mcp.json 或客户端设置)中添加:

{
  "mcpServers": {
    "sessionrelay": { "command": "srelay", "args": ["serve"] }
  }
}

Qoder 用户注意:Qoder 启动 MCP 子进程时不把工作目录设为项目根。0.5.0 起免配置:serve 依次尝试 MCP roots 协议(自动问客户端"工作区在哪")→ 全局项目注册表(恰好一个活跃项目时自动选中);都无法确定时连接照常保持,首次工具调用返回候选项目列表,AI 带 project 参数选一次即可(本连接记住)。下面的环境变量仍是最稳的显式钉法。

最稳兜底(任何 MCP 客户端通吃,绕过 PATH / cwd 问题)

SRELAY_PROJECT_ROOT 显式指定项目根,不依赖子进程的工作目录——PATH 解析不到 srelay、客户端不设 cwd、或多项目并行想钉死某一个时都能救。

{
  "mcpServers": {
    "sessionrelay": {
      "command": "node",
      "args": ["/你的安装路径/SessionRelay/dist/srelay.js", "serve"],
      "env": { "SRELAY_PROJECT_ROOT": "/你的项目路径" }
    }
  }
}

接入后怎么验证

新开一个 AI 会话,问它:

"我们之前为什么决定用 PostgreSQL?"

正确的样子:AI 调用 get_decisions 或 search_sessions,回答里带出处(日期、来源 agent、会话 ID、消息序号)。如果它说"不知道",说明 MCP 未接通——检查 srelay doctor。

16 个工具能回答什么

工具

AI 从此能回答

search_sessions

"我们之前讨论过 X 吗?"(中文全文 + 元数据过滤)

get_session_detail

"那场讨论具体聊了什么?"(可按角色过滤、分页、截断)

list_sessions

"这个项目都聊过哪些话题?"

get_decisions

"为什么决定用 X 而不是 Y?"(全部已确认决策,带出处)

get_file_history

"这个文件为什么这么写?"(跨会话文件讨论史)

suggest_related_sessions

"还有哪些讨论和这个相关?"(算法发现,可解释理由)

get_unresolved

"还有什么没定的?"(未决问题清单)

get_stats

"记忆库什么状态?"(会话数/来源/体积)

set_scope

检索边界逃生口

工具

能力

安全边界

annotate_session

给会话打标签 / 写摘要

只改元数据,不改写对话

save_note

AI 把结论写成笔记

source=note,可识别可审计

export_handoff

生成 .hop 交接包

只读导出

import_handoff

导入交接包

默认隔离模式

release_quarantine

放行隔离正文

需显式调用

link_sessions

建立会话关联

关联可查可撤销

get_linked_sessions

双向查询关联

只读

上下文安全(AI 不会"吃太多")

  • get_session_detail 默认最多 20 条 × 1000 字 ≈ 20KB,硬顶 50KB

  • 超出时返回 truncated: true + 行动建议(role="user" 只看提问 / get_decisions() 直接拿结论 / 翻页)

  • 要更多需显式传参——默认安全,不信任 AI 自觉

Claude Code 生命周期钩子(可选,加速会话确认)

{
  "hooks": {
    "Stop": [{ "hooks": [{ "type": "command", "command": "srelay hook session-end --id $CLAUDE_SESSION_ID" }] }]
  }
}

自定义适配器(新 Agent 接入)

会话接力支持插件化适配器——加新 AI 工具 = 零改核心代码:

.sessionrelay/adapters/my-agent.js   ← 放一个 JS 文件即可
// 最小实现
module.exports = {
  id: 'my-agent',
  displayName: 'My Agent',
  discover(projectRoot, config) {
    // 返回属于该项目的会话列表
    return [{ source: 'my-agent', sourceSessionId: 'xxx', sourceFile: '...', sizeBytes: 1024, mtimeMs: Date.now() }];
  },
  async readNew(ds, cursor, config) {
    // 增量读取新消息(cursor 是你自己定义的水位对象)
    return { messages: [{ role: 'user', content: '...', seqNum: 1 }], badLines: 0, cursor: { offset: 100 } };
  },
};

完整接口和更多能力(watchRoots / healthCheck / detectCompaction)见 Adapter SDK 文档。

隐私设计

  • 本地优先:零云依赖、零运行时网络外呼(遥测 = 本地计数器 + 自愿提交)

  • 三档捕获 + ignore 硬边界 + 导出默认脱敏 + 隔离导入,四层防线

  • 信任模型:交接包内容是数据不是指令,写入 hop/1.0 协议

质量与验证

  • 260 个测试(单元 / 集成 / MCP stdio 真握手契约 / serve 根解析 / 守护服务真装 / UI 安全矩阵 / 端到端),npm test 一键

  • CI 三平台 × Node 22/24 常绿(typecheck + test + build + dist 冒烟)

  • TypeScript strict,npm run typecheck 零错误

  • 每阶段实机验收(含用产品自身记录了自身的诞生过程)

已知限制(诚实清单)

  • 规则提取精度约 60-70%(出处块让你逐条回跳核验;--ai 增强在 Phase 4)

  • 守护服务注册三平台可用(Windows 注册表 Run 键 / macOS launchd / Linux systemd user,均登录自启动)

  • 开新会话的"自动关联重要会话"需要会话身份(branch/PID),Phase 4 落地;当前用 attach 手动挂载

  • 多 agent 同项目并发时 Scope 按 project+cwd 归属

  • Trae 仅部分支持:用户提问可读,AI 回复端到端加密(可用 save_note 补记结论)

  • 目录改名/搬迁的历史会话不被自动发现(用交接包迁移)

  • DSH / Cursor 等其他工具在路线图(当前可用自定义适配器先行接入)

路线图(Phase 4)

--ai 摘要与提取增强 · 会话身份(branch/PID)与自动关联 · DSH / Cursor 官方适配 · HOP 协议第三方推广

文档

上述深读文档的英文翻译正在进行中(README 已双语),欢迎提交翻译 PR——国际用户的第一句话往往是 "docs are Chinese-only",每一篇翻译都在直接降低使用门槛。

License

MIT © 2026 EwanJasper

Available Tools

16 tools
annotate_session注释会话(标签/摘要)A

为会话添加/移除标签、设置人工摘要(进入检索索引)。这是元数据编辑,不改写对话内容

NameRequiredDescriptionDefault
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住
summaryNo人工摘要(覆盖旧值;会成为权威摘要层)
add_tagsNo
session_idYes会话 ID(支持前缀)
remove_tagsNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose two valuable traits: this is metadata-only editing that does not rewrite conversation content, and the summary enters the retrieval index. It says nothing about permissions, failure modes, or whether tag removal is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the actionable operations, then a clarifying scope statement. Nothing is wasted or buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutation tool with no annotations and no output schema, the description covers the essential behavior and the critical non-destructive guarantee. Remaining gaps (return values, error handling on unresolved sessions) are partially mitigated by the schema's project description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60%, with project, summary, and session_id documented in the schema (including prefix support and the unresolved_project condition). The description adds the fact that add_tags/remove_tags exist and that the summary is indexed, but the two tag array parameters remain undocumented beyond their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names concrete operations on a specific resource: adding/removing tags and setting a human summary on a session. This is far more specific than a bare verb, though it does not explicitly differentiate itself from siblings such as save_note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the stated capabilities (want to tag or summarize → use this), but there is no explicit when-to-use/when-not or reference to an alternative tool. The agent must infer that this is the right tool versus save_note for annotation-like work.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_handoff导出交接包B

生成 .hop 交接包(sha256 完整性 + 默认脱敏)或 HANDOFF.md。默认尊重当前 scope

NameRequiredDescriptionDefault
allNo忽略 scope 导出全库
formatNohop
outputNo输出绝对路径(缺省在项目根)
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住
decisions_onlyNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden but does deliver real behavioral facts: sha256 integrity, default redaction (脱敏), and scope-respecting defaults. It omits what happens on file overwrite, whether the export is a write to disk with permissions implications, and what the caller gets back — meaningful gaps for a file-producing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence that front-loads the two output artifacts and then the behavioral qualifiers. Little waste, though the parenthetical detail is dense and would read better separated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter, no-annotation, no-output-schema export tool, the description covers format, integrity, redaction and scope default reasonably well. But it leaves `decisions_only` unexplained and, absent an output schema, does not say what path or confirmation the caller receives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60% and the description only reinforces what the schema already says about scope defaults and the hop/markdown choice. `decisions_only` is undocumented in both schema and description, which is the clearest semantic gap; baseline 3 for mid coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the concrete artifacts produced (.hop handoff package vs HANDOFF.md) and their key properties (sha256 integrity, default redaction), so an agent knows exactly what the tool does. It does not explicitly contrast itself with the inverse sibling import_handoff, which keeps it below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase '默认尊重当前 scope' implies usage context — use it as-is for the current scope, pass `all` for the whole library — but the tool never states when to choose it over import_handoff or when a handoff is warranted. Usage is implied rather than prescribed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_decisions决策列表C

本项目全部已确认技术决策(带出处,可回跳)

NameRequiredDescriptionDefault
topicNo
sourceNo
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden. It correctly signals read-only enumerative semantics and adds genuinely useful result context (each decision has provenance and can be jumped back to). It omits scope/auth behavior, pagination, ordering, and what happens when the project is unresolved — which matters since the project parameter exists precisely for that failure mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact clause, front-loaded with scope ('本项目') before the qualifier about provenance. Zero waste, but it is arguably under-specified rather than concise — the terseness comes at the cost of the missing parameter and usage information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter tool with no annotations and no output schema, the description is too thin. An agent still does not know what topic/source filter on, whether results are paginated or ordered, or how this differs from session-level lookup tools. Only the provenance/backlink hint partially fills the gap left by the absent output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 33%: only the project parameter is documented, and quite well. The description's phrase '本项目' loosely implies project scoping but says nothing about the topic and source parameters, and does not explain how they interact or whether they narrow the 'all' list. With low coverage the description should have compensated, and it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource: all confirmed technical decisions for '本项目' (the current project), and adds that each carries provenance and a backlink. That is more than a restatement of the name. It does not, however, contrast itself with siblings like search_sessions or get_session_detail, which an agent might otherwise reach for when looking for decisions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named. The word '全部' (all) hints that this is an unfiltered enumeration, but the presence of topic and source parameters suggests filtering is possible, and the description never resolves that ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_file_history文件讨论史C

某文件路径被哪些会话讨论过(跨 agent)

NameRequiredDescriptionDefault
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住
file_pathYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses the cross-agent scope, but it says nothing about ordering, pagination, permission requirements, whether missing paths return empty results, or what the response looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence with no wasted wording, and the core purpose is front-loaded. It is terse, but the terseness is a specification issue rather than a conciseness issue.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description should do more to explain return behavior and practical usage. It identifies the conceptual result (sessions that discussed the file), but omits ordering, pagination, project-resolution behavior, and response shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: the 'project' parameter has a useful schema description, while 'file_path' has none. The description implies that 'file_path' is the file being queried, but adds no format or path-resolution details beyond that. This is adequate but not compensating further for the missing schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific query: which sessions discussed a given file path. The parenthetical '跨 agent' adds useful scope by indicating cross-agent history, distinguishing it from a generic session search. It does not explicitly compare against siblings such as search_sessions, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit when-to-use, when-not-to-use, or alternative-tool guidance. An agent can infer that it is useful when investigating file discussion history, but there is no routing guidance among the many session-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_linked_sessions查询会话关联B

某会话的全部关联(双向:它指向的 / 指向它的),带 kind 与方向

NameRequiredDescriptionDefault
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住
session_idYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It usefully discloses that results are bidirectional and include kind and direction, but it omits read-only safety, permissions, pagination, ordering, and whether project scoping affects results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It is efficient, though its terseness leaves little structure or signposting for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read query, it conveys the core scope and returned attributes. However, with no annotations and no output schema, more detail on safe read behavior, result limits, project scoping, and sibling alternatives would be needed for full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: the project parameter is well described in the schema, but the required session_id has no schema description. The description only says 'a certain session' and adds no ID format, requiredness, or project/session relationship detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and scope: all associations of a session, bidirectional, with kind and direction. It is clear what the tool retrieves, but it does not explicitly differentiate itself from siblings such as link_sessions or suggest_related_sessions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It does not state when to use this tool versus alternatives like link_sessions, suggest_related_sessions, or get_session_detail. There are no prerequisites, exclusions, or routing guidance beyond the implied purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_session_detail会话详情A

取某会话的消息(可按角色过滤、限制范围与长度)。默认安全:最多 20 条 × 1000 字 ≈ 20KB。要更多请显式传 start_msg/end_msg 或 max_chars。session_id 支持前缀

NameRequiredDescriptionDefault
roleNo只取该角色的消息(user=用户提问,轻量)
end_msgNo结束消息序号(含)
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住
max_charsNo单条截断长度(默认 1000;需全文时显式传大值如 5000)
start_msgNo起始消息序号(含)
session_idYes
include_exchangesNo附带关键往返(用户提问+AI结论对,约 3KB)——理解"为什么"的中间粒度,省去拉全文

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

没有注解,所以描述承担了披露行为特征的全部责任,并且确实披露了关键操作形态:约 20KB 的默认截断上限、单条截断长度,以及 session_id 支持前缀匹配。缺失的是返回内容形态和权限要求,但对读取工具来说,关键约束已经交代清楚。

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

三段式短句,先说作用,再说默认安全上限,最后说如何扩量,没有废话,并且安全默认值前置。

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

7 个参数、无输出 schema、无注解;描述覆盖了主要行为约束与扩量路径。仍缺少返回结构说明,对首次调用者存在少量不确定,但整体足够调用。

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema 描述覆盖率已达 86%,分数线是 3;描述还补充了 max_chars 的默认值、用 start_msg/end_msg 扩量这一条件,以及 session_id 支持前缀匹配,这些在 schema 中并不都被体现。因此略高于分数线。

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

具体动作加资源:取某会话的消息,并附带过滤范围(按角色过滤、限制范围与长度)。相比 get_linked_sessions、search_sessions 这类兄弟工具,它没有明确区分,但核心目的没有歧义。

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

清楚说明默认安全行为最多 20 条 × 1000 字 ≈ 20KB,并指出需要更多数据时显式传 start_msg/end_msg 或 max_chars 来扩大范围。这给出了明确的分页和扩量上下文,但从未说明什么时候改用 search_sessions 或 list_sessions。

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stats索引统计A

本项目记忆库统计(会话数/状态/来源/体积/当前 scope)。开始处理项目任务前可调用,了解记忆库规模与覆盖范围

NameRequiredDescriptionDefault
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description must carry the behavioral burden. '统计' strongly implies a read-only, side-effect-free operation, but the description never states it is read-only or that it changes nothing. The param's connection-level memory behavior (传一次后本连接记住) lives only in the schema, not the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight clauses: what is returned, then when to call it. The metric list is front-loaded and no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-param read tool with no output schema, the enumeration of returned metrics partly substitutes for missing return documentation. The only shortfall is the absent explicit read-only statement, minor given the tool's nature.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single project parameter is fully documented in the schema, including the unresolved_project trigger condition. The description adds nothing about 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (本项目记忆库统计) and enumerates exactly what is measured: 会话数/状态/来源/体积/当前 scope. That distinguishes it clearly from session-level siblings like list_sessions or get_session_detail, though the verb is implied by the noun phrase 统计 rather than stated as an action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger: 开始处理项目任务前可调用,了解记忆库规模与覆盖范围. This tells the agent when the tool is worth calling. It names no alternative or exclusion, but no sibling overlaps enough to require one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_unresolved未决问题C

会话中提出但(启发式判定)未解决的问题

NameRequiredDescriptionDefault
limitNo
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the entire behavioural burden. It does disclose one non-obvious trait, that 'unresolved' is a heuristic judgement rather than ground truth, but it says nothing about read-only nature, default scoping (current session vs. all sessions), ordering, or what an empty result means.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short sentence with no filler, so it is concise, but it is under-specified rather than efficient — the heuristic caveat is worth keeping, yet the sentence spends its only clause on it and never establishes the action or scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, half-documented parameters, and a session-scoping question left unanswered, the definition is not sufficient for an agent to call this tool confidently. The heuristic caveat is a good start but leaves most of the operational picture missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, and the description adds no parameter information at all. `limit` is undocumented in both schema and description (no default, no max, no semantics), and while `project` has a schema description, the description does not reinforce or explain how scoping changes the results.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (issues raised in a session that remain unresolved) and adds a useful qualifier that resolution is heuristic, but it is a noun phrase with no verb and no differentiation from siblings such as get_decisions or search_sessions. An agent can roughly infer what it returns, yet it cannot tell confidently what it does versus the neighboring retrieval tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool, when not to, or which sibling to prefer for resolved items, decisions, or broader session search. The only usage hint in the whole definition lives in the schema for `project` (pass it when the server signals unresolved_project), not in the description itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_handoff导入交接包(默认隔离)A

导入 .hop 交接包:sha256 全量校验 + 归化到当前项目。经 AI 发起的导入默认走隔离模式(只入元数据与摘要,正文待 release)

NameRequiredDescriptionDefault
fromNo来源人
pathYes包文件绝对路径
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住
quarantineNo默认 true(隔离导入);显式 false 需用户明确要求

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and discloses meaningful behavior: full sha256 verification, normalization to the current project, default quarantine behavior, and that quarantine imports only metadata and summaries while the body awaits release. It does not cover permissions, overwrite behavior, idempotency, or error cases, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with no filler. The core operation, verification step, and default quarantine behavior are front-loaded, and every clause adds useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an import tool with no annotations and no output schema, the description covers the key behavioral facts an agent needs: verification, normalization, default isolation, and the metadata-only nature of quarantine imports. It stops short of explaining result structure or how the release step is performed, but the essential context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters, including the quarantine default and the project unresolved_project case. The description does not add parameter-level detail beyond what the schema 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource: importing a .hop handoff package, with sha256 verification and normalization to the current project. It clearly contrasts with export_handoff by operation. It does not explicitly differentiate itself from release_quarantine or other sibling tools, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states that AI-initiated imports default to quarantine mode and that the body awaits release. This gives useful context about the default path, but it does not explicitly say when to use this tool versus release_quarantine or when to pass quarantine=false beyond the schema note. Usage is implied rather than fully guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sessions列出会话B

按过滤条件列出本项目会话(scope 生效)

NameRequiredDescriptionDefault
tagNo按用户标签过滤
fileNo按涉及文件前缀过滤
limitNo
sinceNoISO 日期下界
stateNoactive|pending_end|confirmed
topicNo按话题过滤(精确)
untilNoISO 日期上界
sourceNo按来源 agent 过滤:claude-code | zcode | …
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does add one genuine behavioral trait – that the current scope is applied to the result set – but omits pagination, default limit, ordering, and what a session record contains, which are relevant for a 9-parameter listing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the scope constraint front-loaded and no wasted words. It is appropriately sized, though the extreme brevity trades away useful detail rather than just trimming noise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required, 9-parameter list tool with no output schema, the description is minimal: it covers purpose and scope behavior but leaves result shape, pagination, and default limit unaddressed. Adequate as a minimum-viable definition but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 89%, so the inline parameter docs already explain tag, file, since, until, state, topic, and source. The description adds no parameter-level detail beyond the schema; '(scope 生效)' loosely relates to the project param but does not elaborate. Baseline 3 when schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb ('列出'/list) and resource ('本项目会话'/this project's sessions) with a filtering scope. However, it does not distinguish itself from the sibling search_sessions, so an agent cannot tell the two apart from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'按过滤条件列出' implies a filtered-listing use case, and the '(scope 生效)' note hints at interaction with set_scope, giving implied usage context. But there is no explicit when-to-use vs when-not, and no mention of the search_sessions alternative for broader queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

release_quarantine放行隔离会话B

把隔离导入的会话正文放行入库(用户确认后使用)

NameRequiredDescriptionDefault
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住
session_id_prefixYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose two things that are not in the schema. First, it is a mutation that writes content into the store (入库). Second, it requires prior user confirmation. However, it says nothing about whether release is reversible, what happens to the quarantine entry afterward, or what happens if no session matches the prefix.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is a single compact sentence with the action front-loaded and the key constraint attached in parentheses. It wastes no words, though it is on the thin side for a mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write tool with no annotations and no output schema, the description is too sparse. It omits the ambiguous-match behavior, which the prefix parameter makes likely; the failure modes; and the effect on the quarantine state. The schema hints that resolved project context may be required, but the description does not explain this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, and the description does not mention either parameter. The 'project' parameter is documented in the schema. But 'session_id_prefix' has no description anywhere, so the agent must guess whether the tool accepts a prefix, a match rule for multiple matches, and whether it is exact. The description does not compensate for this gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action on a specific resource: it releases the body text of quarantined imported sessions into the library (放行入库). This is distinguishable from its siblings (import_handoff, export_handoff, list_sessions), which neither quarantine nor release content. However, it does not explicitly connect the tool to the 'quarantine' concept it shares with the import flow, beyond the words 隔离导入.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(用户确认后使用)' gives a concrete usage hint: call only after the user has confirmed. It does not say when not to use it, what the state before release must be, or how it relates to import_handoff. Therefore, usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_note写入结论笔记B

把结论/备忘写入项目记忆(source=note,origin=manual,立即确认并提取)。笔记中的决策句式会直接进入决策库

NameRequiredDescriptionDefault
tagsNo
titleYes
contentYes
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden, and it does disclose real side effects: the note is immediately confirmed and extracted, and decision sentences are routed into the decision library. However, it says nothing about permissions, whether writes are reversible, or what the response looks like, leaving meaningful behavioral gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is a single compact sentence front-loaded with the core action, with details in a parenthetical. Little waste, though the parenthetical packs several distinct facts (source, origin, confirmation, extraction) that would read better as separate clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations, no output schema, and only 25% schema coverage, the description should cover return behavior and the undocumented parameters. It explains extraction side effects but leaves the response format and most parameters unexplained, so an agent cannot fully predict outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%; the title, content, and tags parameters have no descriptive meaning in either the schema or the description. The description's remark that decision sentences go to the decision library is a faint hint about what content should contain, but it does not compensate for the undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource (写入结论/备忘 into 项目记忆) and pins down source=note, origin=manual, making the action unambiguous. It does not explicitly distinguish itself from note-adjacent siblings like annotate_session or get_decisions, but the writing purpose is clear enough for an agent to select it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by '把结论/备忘写入项目记忆' – the agent can infer this is for recording conclusions/memos, but there is no explicit when-to-use vs when-not, nor any pointer to an alternative tool. The note that decision sentences 'directly enter the decision library' hints at a relationship with get_decisions but does not frame it as an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_sessions搜索历史会话A

搜索本项目的历史会话记忆。何时用:用户问"之前/上次/为什么当时/我们讨论过吗"、接手项目需要背景、实现前确认已有决策、报错排查怀疑有历史结论。何时不调:纯新问题、当前对话刚说过的内容

NameRequiredDescriptionDefault
tagNo按用户标签过滤
fileNo按涉及文件前缀过滤
limitNo
queryYes搜索词,支持 "短语" 精确匹配
sinceNoISO 日期下界
topicNo按话题过滤(精确)
untilNoISO 日期上界
sourceNo按来源 agent 过滤:claude-code | zcode | …
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must explain what the tool does when called. The verb "搜索" implies a safe read, and the project-scope statement clarifies what it covers. However, the description never states whether results are ranked or capped, whether it is paginated, or how results are returned, and it doesn't mention any cost or latency traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is stated first, followed by the clearly labeled 何时用 and 何时不调 blocks; there is no filler. The trigger lists are somewhat long, but each item is a distinct, usable signal, so nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nine-parameter search tool with no output schema, the description explains invocation but not what comes back, so the agent can't anticipate result shape, snippet content, or ranking. Parameter documentation is left almost entirely to the schema; because coverage is high, that is acceptable, but the missing return-value guidance leaves a real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 89%, so the schema already documents nearly all nine parameters, including the tricky project fallback behavior; this establishes a baseline of 3. The description adds no parameter-level detail (query syntax, filter combination semantics) beyond what the schema says, but it doesn't need to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ("搜索本项目的历史会话记忆") and scopes it to the current project up front. It doesn't explicitly contrast itself with the sibling tools list_sessions or get_decisions, so an agent reading only the description must infer whether a scope-based list or a decision lookup would be better.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit list of trigger conditions (the user says "之前/上次/为什么当时/我们讨论过吗", project onboarding, confirming a prior decision, and troubleshooting) and an explicit list of when not to call it (pure new questions, or content from the current conversation). This is exactly the when/when-not structure that makes tool selection unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_scope调整检索边界(逃生口)A

收得太紧时的放宽通道:mode:"full" 解除裁剪(隐私 ignore 永不受影响);或设置新过滤条件

NameRequiredDescriptionDefault
modeNo
filtersNo
projectNo项目根绝对路径。仅当服务端提示 unresolved_project(多项目/未自动识别)时选择传此参;传一次后本连接记住

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses that mode "full" disables clipping and that privacy ignores are never bypassed, which is real behavioral context. It does not disclose the persistence model of the new scope (per-connection? until reset?) or whether it is a mutating call, which matters for a state-changing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence, front-loaded with the triggering situation before the two actions it performs. Nothing is padded, though the terseness borders on cryptic for a tool with an unexplained enum member.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter, nested-object, unannotated, output-schema-less tool, the description covers purpose and the key privacy invariant but leaves the mode enum and filter semantics under-described. An agent could call it but would likely guess at 'predicate' mode.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, so the description must compensate. It explains only the 'full' enum value; the 'predicate' mode is left undefined, and the six filter sub-fields are summarized merely as '新过滤条件' without semantics such as date format for since/until or what files/sources accept. Partial compensation for a low-coverage schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the tool as a relaxation/escape-hatch for retrieval scope, with two concrete effects: mode "full" removes clipping, or new filter conditions are set. That is a specific verb+resource, though it never plainly says 'this sets the scope used by subsequent searches', leaving the agent to infer the resource from the name and title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'收得太紧时的放宽通道' gives a clear triggering condition: use it when results are being over-trimmed. It also names a hard exclusion ('隐私 ignore 永不受影响'), but it does not point to any sibling (e.g. search_sessions) as the alternative when the scope is already fine.

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.

  1. 16 tool updatesv0.6.0
    • First observedannotate_session
    • First observedexport_handoff
    • First observedget_decisions
    • First observedget_file_history
    • First observedget_linked_sessions
    • First observedget_session_detail
    • First observedget_stats
    • First observedget_unresolved
    • First observedimport_handoff
    • First observedlink_sessions
    • First observedlist_sessions
    • First observedrelease_quarantine
    • First observedsave_note
    • First observedsearch_sessions
    • First observedset_scope
    • First observedsuggest_related_sessions

TDQS

B3.4/5.0

Scored across 16 tools

Disambiguation4/5

Most tools target a clearly distinct action+resource (export/import handoff, save_note, link_sessions, get_decisions, get_stats), and descriptions explicitly state when to use and when not to call each one. The only mild overlap is the discovery trio (search_sessions, suggest_related_sessions, list_sessions) and get_linked_sessions vs suggest_related_sessions, but the keyword-vs-algorithmic-vs-filter distinction is spelled out well enough to disambiguate.

Naming Consistency5/5

All 16 names follow a consistent snake_case verb_noun pattern (export_handoff, annotate_session, save_note, get_session_detail, list_sessions, set_scope). Verbs are used predictably: get_/list_ for reads, save_/annotate_/link_/set_ for writes, export_/import_ for package transfer.

Tool Count4/5

16 tools is at the upper end of the ideal 3-15 range but each maps to a real capability in the session-memory/handoff lifecycle rather than being redundant. A few could arguably be folded (set_scope as a config tool, get_linked_sessions into get_session_detail), so it is slightly heavy but reasonable.

Completeness4/5

The surface covers the core lifecycle: capture (save_note, annotate_session), retrieve (search_sessions, get_session_detail, list_sessions, get_decisions, get_file_history, get_unresolved), link/graph, and handoff transfer with quarantine release. Gaps are minor: no delete/forget operation for sessions, notes or decisions, and no explicit add_decision tool (decision capture is only implicit via save_note).

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Persistent memory for AI agents across Claude Code, Cowork, Codex, Cursor and Hermes Agent. Saves, searches and recalls sessions from a local SQLite store through 40+ MCP tools, with auto-save and auto-load hooks, project tagging and export/import. Also a Hermes Agent memory provider plugin in the official catalog. Free: keyword search, 50 sessions. Pro ($8/mo): semantic search and team memory.
    33
    264 PyPI
    12
    Business Source 1.1
  • A
    license
    A
    quality
    A
    maintenance
    Persistent memory for AI coding agents, storing decisions, bug fixes, conventions, and discoveries in a local SQLite database and automatically recalling them when relevant. Works with Claude Code, Codex, Cursor, Gemini CLI, and other MCP-compatible agents.
    22
    4
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Shared, local memory for AI coding tools that stays true to your code. Claude Code, Cursor, and Codex share one memory per project; memories are linked to the files they depend on and retired automatically when those files change. Includes a local dashboard, import from CLAUDE.md/AGENTS.md, and export. Runs entirely on your machine.
    10
    3
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI coding agents to read and write persistent memory directly during sessions, storing decisions, preferences, error patterns, research, and cross-project guidelines in local SQLite databases. Supports semantic search so relevant project and global context can be recalled by meaning, fully offline and without API keys.
    -