task-checkpoint
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., "@task-checkpointresume my last coding task and show me the next step"
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.
Task Checkpoint MCP
给长任务做“做一步、存一步”的存档:中断后新会话能接着做,做错了能退回任意一步。
一个 stdio MCP 服务器,只用 Python 标准库,不装任何第三方包。
为什么不直接用 git stash 或随手 commit 一下
做法 | 缺什么 |
| 一次性的,不能命名、不能跨会话交接,也没有“这一步在做什么、结论是什么” |
随手一个 commit | 会污染真实历史;半成品未必允许 commit;还得你记得先 commit |
手写进度笔记 | 和文件状态脱钩,回退时要自己对着时间线拼 |
本工具 | 文件变化后台自动记(变更层),步骤语义由模型声明(任务层);只额外加 |
值得装:多步、可能被中断、需要能退回的编码或文档任务。 不值得装:一次能做完、不需要回退也不需要交接的改动。
Related MCP server: Session Handoff MCP
装之前先知道
需要 Python 3.10 或更新,只用标准库。
不碰你的 git 历史:不 commit、不 reset、不 clean、不动已有分支和 HEAD,只额外加
refs/checkpoints/...引用。不是 git 仓库也能用,功能一样,只是少了那层 git 引用。
不保存聊天记录,只保存工作区文件和模型主动声明的步骤说明。
存档默认写在工作区的
.checkpoints/;指定外部store时,工作区仅留一个不含文件内容的.task-checkpoint-store.json路径指针。敏感文件识别是路径黑名单,盖不全。 别把凭据放在被扫路径里 —— 详见「使用限制」。
安装
方式一:装成命令(推荐)
pipx install "git+https://github.com/qddfxp/task-checkpoint-mcp"
# 或
pip install "git+https://github.com/qddfxp/task-checkpoint-mcp"装完在客户端里用 tc-mcp 启动:
{
"mcpServers": {
"task-checkpoint": { "command": "tc-mcp", "args": [] }
}
}方式二:直接用源码(不用安装)
git clone https://github.com/qddfxp/task-checkpoint-mcp{
"mcpServers": {
"task-checkpoint": {
"command": "/absolute/path/to/python",
"args": ["/absolute/path/to/task-checkpoint-mcp/scripts/tc_mcp.py"]
}
}
}command 要写解释器的绝对路径,不要写 python —— 客户端不一定能解析到你要的那个。装过之后也可以直接 python -m tc_mcp。
怎么用
最重要的一条:文件变化由后台线程自动记录,但“这一步在做什么、结论是什么、下一步干什么”只有模型主动调 tc_save 才会留下。
所以要让 Agent 每完成一步就存一步 —— 这份约束写在 SKILL.md 里,得把它装进 Agent 的技能目录(见下面「把 SKILL.md 装进 Agent 的技能目录」)。不装它,文件回退点照常产生,但没人知道当初要干什么、下一步该干什么。
典型流程:
tc_init 开任务
tc_save 每完成一步存一次(带 conclusion 和 next)
tc_resume 新会话开头先调这个接上进度
tc_restore 退回去(先 apply:false 预览,再 apply:true)工具
9 个。第一个参数都是 root,指工作区目录(通常是当前项目的绝对路径)。
工具 | 什么时候用 | 必填 |
| 长任务开工。已有活动任务会被挂起而不是关闭 |
|
| 每完成一步 |
|
| 新会话开头、接手别人中断的工作(只读) |
|
| 想看有哪些步骤 / 变更记录 |
|
| 退回某一步或某条变更记录。先预览再执行 |
|
| 想立刻记一次文件变化(不等后台线程) |
|
| 回到之前挂起的任务 |
|
| 导出交接包给另一个目录 / 另一台机器 |
|
| 存档太大了,回收旧变更层空间 |
|
tc_save 的完整参数:
title(必填)——这一步一句话标题,写“做了什么”,不写“改了什么”conclusion——这一步的结论。最有价值的字段next——下一步要干什么。接续工作的关键description——为什么这么做(决策理由,事后没人记得)verified——已验证项列表(跑了什么测试、确认了什么事实)open_questions——还没解决、留给后面的问题close: true——收尾时用。关闭后不能再存档,但还能读
回退操作本身也会被记成一条变更记录,返回里的 recovered 就是它的 drift_id —— 退错了可以再用它退回来。
把 SKILL.md 装进 Agent 的技能目录
SKILL.md 是这个项目的另一半功能,不是可选文档:MCP 服务器负责存取,SKILL.md 负责让模型每完成一步真的去调 tc_save。
复制到客户端扫描的技能目录,目录名即技能名:
客户端 | 放这里 |
Claude Code |
|
多客户端共用的 agents 目录 |
|
ZCode |
|
mkdir -p ~/.claude/skills/task-checkpoint
cp SKILL.md ~/.claude/skills/task-checkpoint/SKILL.mdWindows 路径形如 C:\Users\<你>\.claude\skills\task-checkpoint\SKILL.md。各客户端的技能目录可能不同,以它自己的文档为准;要求只有一条:文件落在技能目录下的 <技能名>/SKILL.md。重启客户端后生效。
自检(可选)
在克隆下来的仓库里跑一遍回归测试:
python -m unittest discover -s tests -p "test_*.py" -v最后一行是 OK 就对了。测试同样只用标准库(unittest),不需要 pytest。
确认服务器能起来 —— 会回一行带 serverInfo 的 JSON:
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18"}}' | python scripts/tc_mcp.py从 pip 装的版本没有 scripts/,用 python -m tc_mcp 代替。
环境变量
变量 | 默认 | 说明 |
|
| 存档目录 |
|
| 设成 |
|
| 后台检查间隔(秒) |
|
| 静默期上限(秒) |
|
| 设成 |
|
| 建引用前后对比 git 指纹,自证“没动过用户 git”。设成 |
|
| mtime+size 没变的文件不再重读、直接复用索引里的 sha。风险见「使用限制」 |
使用限制
敏感文件:黑名单,盖不全
敏感文件不存内容、连哈希都不存,只能看出 mtime 和 size 变了没有。判定按路径匹配,所以两头都会漏:
漏判:名字无辜的凭据抓不到。
config/database.yaml、docker-compose.yml、config.json会被当普通文件明文存进payload/。别把凭据放在被扫路径里,或者用state.exclude自己加。误拦:被误判为敏感的源码永远拿不到内容副本,回退时会静默跳过(只出现在
plan.unrestorable里)。名单分两层就是为压低误拦。
拦的范围:
目录名(整个目录都不存)
.ssh.aws.gnupg.docker.kube.env.envdir.secrets.tokens,或名字含secret/credential/token的目录。无歧义文件名
dotenv:
.env.env.**.env*.env.*.envrc私钥:
*.pem*.key*.p12*.pfx*.p8*.jks*.keystore*.kdbx*.ppk*.ovpn*_rsa*_dsa*_ed25519*_ecdsa*_key凭据:
.netrc.git-credentials.npmrc.pypirc.pgpass.htpasswd.my.cnfmy.cnfpasswdshadow云与基础设施:
kubeconfig*.kubeconfig*.tfstateterraform.tfvars*.tfvars*.jwt通配:
credentials*creds*secret*secrets.jsontokentoken.jsontoken.txt*.token*_tokenauth.json框架配置:
settings.pylocal_settings.pysettings.xmlwp-config.phpweb.configwrangler.toml.dev.vars
高歧义子串,只在文件名以配置类后缀结尾时才拦
子串:
*secret**password**passwd**credential**api_key**apikey**token**auth_token*后缀:
.json .yaml .yml .toml .ini .cfg .conf .config .properties .xml .txt .env .envrc .cnf .sh .ps1 .bat .cmd .sql .php所以
prod_credentials.json拦;src/password_policy.py、src/tokenizer.py、docs/secrets.md不拦。
这条能力不构成隐私保护或合规保证。 存档目录的访问权限由你自己管;别把未排除的凭据、令牌、私钥、个人资料放进被扫路径。
时间与粒度
静默期最长约 60 秒。文件一直在写时,中间那条记录标
partial: true。进程突然死掉后、下次
tc_save/tc_capture之前,最后那段改动只在tc_resume的未落档路径里,还不是一条变更层记录。
变更层只看 mtime+size
tc_capture 和后台线程用 mtime+size 判断变化。内容改了但 mtime 和长度都没变时(cp -p、rsync -t、tar -x 会保留 mtime),它不会觉得文件变了。
任务层 tc_save 默认按内容算 sha,不受此限;但 TC_SHA_REUSE=on 会把任务层也拉到同一判据上 —— 见下面那条。
回退
会一并还原文件权限位(POSIX 可执行位),不还原 mtime —— 把旧时间戳写回去会让 make 类工具误以为文件没变。注意:只改权限、内容没变时不会触发重写(回退只重写内容不同的文件),那种情况下权限位也回不去。
不能还原的文件会被跳过(敏感文件、超过 100 MB 未存内容、payload 已丢),其余照退;跳过的列在返回的
plan.unrestorable里。预览和实际执行用同一份清单,所以一个.env不会让整次回退失效。二进制能还原,但不能做行级 diff;不合并并发编辑。
大文件
不超过 100 MB 的文件原样按 sha 存进 payload/,相同内容只存一份;超过 100 MB 只记流式哈希和元数据,不保存内容,因而不能回退内容。
存档不会自动缩
旧变更层的内容会一直留着,用 tc_compress 手动回收。它的默认参数是保留 7 天,所以小工作区上默认调用往往是 converted: 0(什么都没回收)—— 返回值里带 keep_seconds / minimum / maximum / eligible / bytes_freed,看得出“为什么没回收”。想真的清就用小一点的 keep_seconds(步骤基线和 recovered 层永远不动)。
TC_SHA_REUSE=on 的风险(默认关的原因)
任务层默认每次都按内容算 sha,不信任 mtime,所以一次 save 会读完工作区里所有非敏感文件(不保留内容,内存占用与工作区大小无关)。
开了 TC_SHA_REUSE=on 之后,mtime+size 没变的文件不再重读、直接复用索引里的 sha。遇到 mtime 被还原(os.utime)、文件系统 mtime 粒度粗(FAT、部分网络盘)、或有工具保留 mtime(cp -p、rsync -t、tar -x、部分生成器)时,内容改动会被完全漏掉:不读盘、不存新内容,却把旧 sha 记进步骤,回退时静默给出旧内容。默认关闭时这条路径不存在。
tc_resume 和 tc_show 无论哪种模式都不读文件内容(只看 mtime+size),因此也可能漏掉“保留 mtime 的改动”。
参数与状态约束
tc_restore必须且只能传index或drift_id其中一个;apply=true不允许修改已关闭任务。tc_save传了task_id(而且不是当前活动任务)时,会先把活动任务切过去(原任务置为 suspended)再存这一步;返回值里的active_task_changed: true就是告诉你这件事发生了,想切回去用tc_switch。tc_save在已有基线且检测到未落档变化时,会先把该变化挂到本次 save 的 manifest 上,再写任务步骤。tc_export的交接包导入会校验任务 id 和工作区路径,拒绝重复任务、..穿越与符号链接目标;导入失败会撤销已写入的目标文件。store不得等于工作区根目录;自定义store位于工作区内时会被扫描器自动排除。
git 相关
在 git 仓库里每次 tc_save 会多花几百毫秒(建引用的 git 子进程开销)。不想付这笔开销就 TC_GIT=off 或 TC_GIT_VERIFY=off。
实现备注
只有改这份代码的人才需要关心:
归档目录里的
.git/index字节数会被 git 自己刷新(status/ls-files会更新 stat cache),但 HEAD、分支、暂存内容都不会变 —— 自证就是拿status/ls-files的输出前后对比的。refs/checkpoints/下已有同名引用时拒绝覆盖。tc_show/tc_resume只在读取状态快照时持有短锁;工作区扫描和文件读取不长期阻塞写入操作。manifest 是增量链,每 20 份强制一个全量锚点。
存储
<工作区>/.checkpoints/
├── current.json 活动任务指针,按工作区 root 分键(同一个 store 可服务多个工作区)
├── state.lock 并发锁
├── server.log 日志(不会写到 stdout,stdout 只走 MCP 帧)
├── payload/<sha前两位>/ 内容寻址的文件副本(多个任务/步骤共享,按 sha 去重)
└── tasks/<task_id>/
├── state.json
├── index.json 基线索引:每个文件的 mtime/size/sha256
├── steps/sNNNN.json 任务层:每一步的说明
├── drifts/dNNNN.json 变更层:文件变化
└── manifest/mNNNN.json 一致性清单(增量链,每 20 份一个全量锚点)活动指针和基线索引都按范围隔离:同一个 store 被几个工作区共用时,互不串味。
目录结构
.
├── README.md 本文件
├── SKILL.md 给 Agent 看的使用约束(功能的一部分,不是可选文档)
├── LICENSE MIT
├── pyproject.toml 打包配置,源码不改成包目录
├── MANIFEST.in sdist 包含哪些文件
├── scripts/
│ ├── tc.py 业务核心
│ └── tc_mcp.py stdio MCP 适配层
├── tests/
│ └── test_tc.py 回归测试,只用 unittest
└── dist/ 构建产物(已 gitignore);正式发行版在 GitHub ReleasesAvailable Tools
9 toolstc_captureA
立即记录当前文件变化,不等静默期。
| Name | Required | Description | Default |
|---|---|---|---|
| root | Yes | 工作区根目录 |
Output Schema
| Name | Required | Description |
|---|---|---|
| reads | Yes | |
| partial | Yes | |
| waiting | Yes | |
| captured | Yes | |
| drift_id | Yes | |
| skipped_paths | Yes | skipped paths (e.g. symlinks pointing outside the workspace) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does add useful behavioral context by saying the tool records immediately and does not wait for a quiet period. However, it does not disclose effects on existing state, prerequisites, or any failure/side-effect behavior beyond that.
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, purposeful sentence with no filler. It front-loads the core behavior and then adds the key timing nuance, making it appropriately sized 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?
Given the low parameter count, full schema coverage, and presence of an output schema, the description is mostly sufficient. However, the many sibling tools (tc_init, tc_save, tc_show, etc.) create a need for more workflow context, and the description does not explain how capture fits in or what happens after capture.
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 description coverage is 100%, with the single parameter 'root' already described as '工作区根目录' (workspace root directory). The description adds no additional meaning to the parameter, but the baseline of 3 applies because the schema already fully documents it.
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 clear action and resource: '立即记录当前文件变化' (immediately record current file changes). It also distinguishes the tool's behavior with '不等静默期' (not waiting for quiet period), but it does not explicitly differentiate it from the sibling tools like tc_save or tc_init.
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 phrase '不等静默期' implies this tool should be used when an immediate capture is needed rather than waiting for a quiet period. However, there is no explicit guidance on when to prefer this tool over alternatives such as tc_save, nor any exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tc_compressA
回收存档空间:删掉超过保留期的变更层内容。被回收的变更层不能再 restore,步骤基线不受影响。
| Name | Required | Description | Default |
|---|---|---|---|
| root | Yes | 工作区根目录 | |
| maximum | No | 每条路径最多保留几份变更层,默认 50 | |
| minimum | No | 每条路径至少保留几份较旧的变更层,默认 20 | |
| keep_seconds | No | 保留最近多少秒内的变更层,默认 7 天 |
Output Schema
| Name | Required | Description |
|---|---|---|
| maximum | Yes | |
| minimum | Yes | |
| eligible | Yes | 通过了保护检查、可以考虑回收的数量 |
| converted | Yes | 本次真的删掉的 payload 数 |
| bytes_freed | Yes | 释放的字节数 |
| already_gone | Yes | 已标为不可回退但 payload 本来就不在的数量 |
| keep_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses destructive behavior (deleting layers), irreversibility (cannot restore), and a safety guarantee (step baseline unaffected). This is strong for a delete operation, though it could further mention any locking or concurrent effects.
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 short sentences front-load the core purpose, then add key consequences. No filler or redundancy — every clause 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?
For a destructive tool with 4 parameters, the description covers purpose, effect, and non-target impact; the schema handles parameters and output schema exists for return details. It does not explain the default values or parameter interactions, but those are already in the schema, so the overall context is sufficient.
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 description coverage is 100%, so the parameters are already well documented. The description adds minimal parameter-specific value beyond the schema, only aligning 'retention period' with keep_seconds. Baseline 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?
Description states 'reclaim archive space' and 'delete change layers older than retention period' — a specific verb and resource. It also differentiates from the sibling tc_restore by explicitly noting that recycled layers cannot be restored, making it clear this is the pruning counterpart.
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 usage context (when you need to reclaim archive space) and mentions the retention period, but does not explicitly state when to use this tool vs alternatives such as tc_save or tc_clean. It names restore only as a consequence, not as a decision point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tc_exportB
导出交接包到一个已存在的目录。敏感文件内容不会导出。
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | 已存在的导出父目录 | |
| root | Yes | 工作区根目录 |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | 交接包目录 |
| files | No | |
| filtered | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does add a meaningful behavioral constraint: '敏感文件内容不会导出' (sensitive file contents will not be exported), and it implies the destination must already exist. However, it does not disclose overwrite behavior, failure modes, or what happens if the directory does not exist.
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 short sentences with no wasted words. The primary action is stated first, and the sensitive-content caveat is a valuable second sentence that 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?
The tool has an output schema, so return values need not be described. However, for an export operation with no annotations, the description omits important context such as whether files are overwritten, whether the directory must be empty, and how this relates to sibling tools like tc_compress. It is adequate but not complete.
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 description coverage is 100%, so the schema already documents both parameters. The description adds no new parameter-level meaning 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb '导出' (export), the resource '交接包' (handover package), and the destination '已存在的目录' (existing directory). It is specific enough to understand the tool's core function, but it does not explicitly differentiate itself from siblings like tc_save or tc_capture.
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 guidance is given about when to use this tool versus alternatives such as tc_capture, tc_save, or tc_compress. The description only states what the tool does, not under what circumstances it should be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tc_initA
创建任务。已有活动任务会挂起而不是关闭。
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | 任务目标 | |
| name | Yes | 任务名 | |
| root | Yes | 工作区根目录 | |
| store | No | 存档目录;省略时用工作区内 .checkpoints | |
| constraints | No | 约束 |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | 任务名 |
| note | Yes | 存档位置提示 |
| store | Yes | 存档目录 |
| task_id | Yes | 新任务 id |
| prev_suspended | No | |
| store_is_external | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It discloses a key side effect: existing active tasks are suspended rather than closed. This adds value beyond the name. However, it does not cover other traits like idempotency, failure modes, or whether the operation is destructive beyond the suspension note. The disclosure is partial but meaningful.
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 short sentences, front-loaded with the core purpose and immediately followed by the key behavioral caveat. No wasted words or redundant details.
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 that the schema fully documents parameters and an output schema exists, the description covers the essential behavioral context (creation and suspension of active tasks). It does not explain relationships to sibling tools, but that is not strictly required for invocation. The description is sufficiently complete for a create operation.
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 description coverage is 100%, so every parameter already has a description in the input schema. The tool description does not add any parameter-specific meaning. Per the baseline rule for high coverage, a 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 states '创建任务' (create task), a specific verb and resource, and the additional sentence about suspending active tasks distinguishes it from sibling tools like tc_capture, tc_switch, etc. which imply other operations. The purpose is unambiguous and clearly differentiated.
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 clear context that this tool is for creating a task and discloses a relevant condition (active tasks will be suspended). However, it does not explicitly name alternatives or state when not to use it, so it stops short of full guidance. The behavioral note gives useful context for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tc_restoreB
按任务层序号或变更层编号恢复。index 与 drift_id 二选一;apply=false 只预览。
| Name | Required | Description | Default |
|---|---|---|---|
| root | Yes | 工作区根目录 | |
| apply | No | true 才写工作区 | |
| index | No | 任务层序号 | |
| drift_id | No | 变更层编号,例如 d0001 |
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | Yes | |
| applied | Yes | |
| recovered | Yes | 本次自动保全的变更层编号 |
| skipped_paths | Yes | skipped paths (e.g. symlinks pointing outside the workspace) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It usefully discloses the preview mode ('apply=false 只预览') and implies apply=true writes the workspace. However, it does not describe what gets modified, overwritten, or whether the action is reversible, which is notable for a restore/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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence states the core action first, then the two most important usage constraints. Every piece of information earns its place with zero 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?
The description adequately covers the internal logic of the tool (how to select a target and preview vs apply), and an output schema exists. However, it lacks guidance on tool selection among siblings and does not disclose the side effects of apply=true, leaving an agent to infer the restore behavior's full impact.
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 description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by stating that index and drift_id are mutually exclusive and that apply=false means preview only—constraints and behavioral semantics not present in the individual parameter descriptions.
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 uses a specific verb '恢复' (restore) and resource (task-layer/change-layer), and explains the two identifier modes (index vs drift_id). It is clear and unambiguous, though it does not explicitly differentiate from siblings like tc_resume or tc_switch.
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 guidance is given on when to use this tool versus sibling tools such as tc_resume, tc_switch, or tc_export. The description only provides internal usage constraints (choose index or drift_id, apply=false for preview), not tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tc_resumeA
只读返回目标、当前步骤、未落档路径和下一步。
| Name | Required | Description | Default |
|---|---|---|---|
| root | Yes | 工作区根目录 | |
| task_id | No | 任务 id。省略时使用当前活动任务 |
Output Schema
| Name | Required | Description |
|---|---|---|
| goal | Yes | 任务目标 |
| head | Yes | |
| last | No | |
| next | No | 下一步 |
| store | No | 存档目录 |
| health | Yes | |
| handoff | Yes | 可粘贴给新会话的文本 |
| skipped | No | |
| active_task | Yes | 活动任务 |
| constraints | No | 约束 |
| drift_paths | Yes | |
| open_questions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states '只读' (read-only), clearly indicating the tool has no mutating side effects. It also enumerates what is returned. It does not cover edge cases such as a missing active task, but for a read-only status query this is largely 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 a single, front-loaded sentence with no redundancy. It leads with the read-only safety property and then lists the returned items compactly. Every word 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?
The tool is simple and has an output schema alongside fully described parameters, so the description does not need to explain the return format. However, it omits when to use this tool and uses domain-specific terms like '未落档路径' without clarification, leaving some ambiguity for correct selection and invocation.
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 description coverage is 100%, so the schema already documents both root and task_id. The description adds no parameter-level detail beyond the schema; it only describes the overall operation, so the baseline score of 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 concrete action: read-only return of four specific state items (target, current step, un-archived path, next step). This is a specific verb-plus-resource statement, not a tautology. However, it does not differentiate from sibling tools such as tc_show, which may also return state.
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 no guidance on when to use tc_resume versus alternatives like tc_show or tc_capture, and no exclusions or prerequisites are mentioned. Correct usage must be inferred from the tool name and the listed fields, which is not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tc_saveB
保存一个任务层步骤。close=true 时关闭任务且不再接受保存。
| Name | Required | Description | Default |
|---|---|---|---|
| next | No | 下一步 | |
| root | Yes | 工作区根目录 | |
| close | No | ||
| paths | No | 预留路径范围参数;当前必须为空数组 | |
| title | Yes | 步骤标题 | |
| task_id | No | 任务 id。省略时使用当前活动任务 | |
| verified | No | ||
| conclusion | No | 这一步的结论 | |
| description | No | 为什么这么做 | |
| open_questions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| git | Yes | 这一步的 git 指针。git 是增强:ok 为 false 或 reason 说明没建 ref(不是仓库、TC_GIT=off、ref 重名等)时存档仍然有效 |
| index | Yes | |
| title | Yes | 步骤标题 |
| closed | Yes | |
| groups | Yes | |
| status | Yes | open / suspended / closed |
| task_id | Yes | 任务 id。省略时使用当前活动任务 |
| idempotent | Yes | |
| skipped_paths | Yes | skipped paths (e.g. symlinks pointing outside the workspace) |
| active_task_changed | Yes | 本次调用是否把活动任务切走了(传了 task_id 且不是当前活动任务时会发生) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It does disclose a meaningful behavioral trait: close=true closes the task and rejects further saves. However, for a save/mutation tool with zero annotations, it doesn't mention persistence semantics, error behavior, or what happens on overwrite, leaving significant gaps.
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 short, front-loaded sentences with zero filler. The primary action is stated first, followed by the important close behavior. Appropriately sized for the tool's role, though it could be slightly more informative without becoming verbose.
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 10 parameters, 70% schema coverage, and an output schema present, the description is thin. It captures the core purpose and the close semantics but omits context around the step-save workflow (e.g., what constitutes a valid step, interaction with active task selection) that would help an agent invoke it correctly. The output schema reduces the return-format burden, but the overall guidance is minimal.
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 70% with 10 parameters. The description adds value by clarifying the close parameter's behavioral effect (closes task, no further saves), which goes beyond the bare boolean schema type. However, it doesn't address the undocumented parameters (verified, open_questions, paths constraint) beyond what the schema's descriptions provide.
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 action ('保存一个任务层步骤' – save a task-layer step) with a clear verb and resource. It is distinguishable from siblings like tc_capture, tc_init, and tc_switch, though it doesn't explicitly name any alternative. The close=true semantic adds useful context to the 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 provides no guidance on when to use this tool versus its siblings (tc_capture, tc_restore, tc_compress, etc.). The only behavioral note is the close=true behavior, which is a parameter effect rather than usage guidance. An agent gets no direction on choosing this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tc_showA
列出任务层步骤;include_drift=true 时同时列出变更层。index 可精确查看单步。
| Name | Required | Description | Default |
|---|---|---|---|
| root | Yes | 工作区根目录 | |
| index | No | ||
| limit | No | ||
| cursor | No | ||
| task_id | No | 任务 id。省略时使用当前活动任务 | |
| include_drift | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| head | Yes | |
| steps | Yes | |
| drifts | No | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It mentions the effect of include_drift and that index views a single step, but it doesn't describe return value structure, pagination behavior, or side effects (none expected). It covers some behavior but is incomplete given the absence of 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?
The description is two short sentences, front-loading the main purpose and then adding a key option. Every word contributes, with no wasted text.
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 has an output schema and 6 parameters, the description is moderately complete. It covers the main use and two key parameters, but because there are no annotations, it should also explain the output format (though output schema exists) and the effects of limit/cursor for pagination, which are 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?
Schema description coverage is only 33%: only root and task_id have descriptions. The description adds meaning to index (precise viewing of a single step) and include_drift (lists change layer too), which helps. However, it doesn't explain limit and cursor parameters, but the description partially compensates for the coverage gap.
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 the primary purpose ('列出任务层步骤') and mentions the optional include_drift to also list the change layer, which distinguishes it from siblings that likely manage tasks rather than view them. However, it doesn't explicitly name sibling tools or contrast with them, so it's clear but lacks explicit differentiation.
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 usage for listing task steps and mentions when to use include_drift, but it does not explicitly say when to use this tool versus alternatives like tc_switch or tc_save. It provides some context but lacks clear exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tc_switchB
切换活动任务。closed 任务会被拒绝。
| Name | Required | Description | Default |
|---|---|---|---|
| root | Yes | 工作区根目录 | |
| task_id | Yes | 要激活的任务 id |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | open |
| task_id | Yes | 任务 id。省略时使用当前活动任务 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
没有 annotations,描述承担了行为披露责任。它披露了 closed 任务会被拒绝这一重要行为,但没有说明切换时原活动任务是否被取消、是否持久化、失败时的返回形式等。仅有部分行为透明。
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?
描述非常简短,一句话内包含了核心操作和关键约束,没有冗余信息。虽然信息量偏少,但结构上做到了高效。
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?
对于只有两个参数的工具,描述提供了基本可用的信息,且存在 output schema 可补充返回结构。但缺少对“活动任务”概念的解释、切换的副作用以及 closed 状态如何判定,整体处于最低可用水平。
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 覆盖率为 100%,root 和 task_id 都已有说明,因此达到基线 3。描述本身没有为参数增加额外语义,例如 task_id 的格式或 root 的约束。
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?
描述明确说明了工具行为:切换活动任务,并补充了 closed 任务会被拒绝的限制。但与 tc_resume、tc_restore 等兄弟工具的差异没有明确说明,agent 仍需通过名称推断边界。
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?
描述没有说明何时使用本工具而非其他兄弟工具,也没有给出使用前提或替代方案。唯一的行为约束是 closed 任务会被拒绝,但这不足以指导 agent 在多个相似工具间做选择。
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.
9 tool updates
v0.1.1- First observed
tc_capture - First observed
tc_compress - First observed
tc_export - First observed
tc_init - First observed
tc_restore - First observed
tc_resume - First observed
tc_save - First observed
tc_show - First observed
tc_switch
TDQS
Scored across 9 tools
Each tool has a distinct role: capture handles drift recording, save commits task-layer steps, show lists, restore recovers, resume reports status, and export/compress manage archival. There is no meaningful overlap between tool responsibilities.
All tools follow a consistent tc_ prefix plus a clear lowercase verb (capture, init, switch, save, show, restore, resume, export, compress). The naming pattern is uniform and predictable.
Nine tools is well-scoped for a checkpointing server. Each tool covers a necessary operation without redundancy or bloat.
The tool set covers the full task-checkpoint workflow: creation, activation, capture, saving, inspection, restore, status, export, and cleanup. There are no obvious dead ends or missing lifecycle operations.
Maintenance
Related MCP Connectors
Agent checkpoints. Resume after context resets and handoffs with retry-safe, versioned saves.
Resume the work, not the conversation. A checkpoint by one model is resumable by another.
Durable agent-to-agent handoffs and shared scratchpad for multi-agent workflows.
Durable background job execution, async task scheduling, and state persistence for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides operational continuity for AI coding agents, preserving task state, decisions, checkpoints, and project context across sessions and model switches via MCP.1Apache 2.0
- AlicenseNot gradedqualityBmaintenancePreserves continuity between coding agent sessions (e.g., Claude Code and Codex) via local, structured checkpoints, enabling a checkpoint → clear → resume workflow.MIT
- AlicenseAqualityAmaintenanceLocal-first working-state checkpoints and portable handoff packets for AI coding agents. Continuation checkpoints recover Claude Code sessions after rate limits, crashes, and compaction; packets hand tasks across tools, repos, and machines — Markdown on disk, no cloud, no telemetry.2322 npm4MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to persist and restore checkpoint state, supporting crash recovery and replay for LangGraph-based workflows.8-