mcpField
C
Coders Talk

Coders Talk

远程服务
coders.talk开发工具16 天前更新

关于 Coders Talk

Coders Talk 现名为 KeepPlain,面向 Claude Code、Codex、Cursor 和 Pi 用户。插件将编码会话保存为私有草稿供审核,并让 Agent 查询其他开发者的会话和操作手册。

主要功能

  1. 01将编码会话保存为私有草稿
  2. 02审核并发布会话记录
  3. 03从 Agent 查询会话库
  4. 04将已发布操作手册用作技能或规则
  5. 05通过命令行选择和管理会话
  6. 06支持 Claude Code、Codex、Cursor 和 Pi

适用场景

  1. 01发布前审核 Agent 会话
  2. 02查找他人处理相似任务的经验
  3. 03将已发布的操作手册加入代码仓库

MCP 相关

KeepPlain 通过 MCP 服务向 Agent 提供会话库访问能力。Codex、Cursor 等客户端可连接该服务;插件也会为受支持的 Agent 配置 MCP。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://coders.talk/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

适用于 Claude Code、Codex、Cursor 和 Pi 的 KeepPlain

将你正在使用的 Claude Code、Codex、Cursor 或 Pi 会话发送到 KeepPlain,保存为草稿 Build:其中包含重要的提示词、干预和失败记录,原始日志则放在下一层。插件绝不会发布内容。草稿是私密的:只有你能看到;如果会话是在团队的某个仓库中运行的,你的团队也能看到。你可以在网站上逐一查看每个时刻,并在愿意时发布。

反过来,插件会向你的 Agent 提供 KeepPlain 知识库:在处理非简单任务之前,或经历几次失败尝试之后,它可以查找其他开发者做过类似工作的会话,以及他们遇到的问题(参见你的 Agent 中的知识库)。而 /keepplain:use 会将已发布 Build 的操作指南,也就是该会话历经摸索学到的经验,作为技能或规则放入你的仓库(参见操作指南)。

安装

从 Coders Talk 迁移

KeepPlain 在 2026 年 10 月之前名为 Coders Talk,插件不会接管旧插件:请先移除旧插件,否则它的钩子会与新插件的钩子一起运行。

  1. coders-talk disable 会将其从 Claude Code、Codex、Cursor 和 Pi 中移除。
  2. 删除 ~/.coders-talk 以及 shell 配置文件中的 # Coders Talk CLI 行(在 Windows 上,还要从 PATH 中移除 %USERPROFILE%\.coders-talk\bin)。
  3. 如果你是从 Claude 的插件目录添加 Coders Talk 的,请在“Customize → Plugins”中将其移除;Coders Talk 桌面应用则在“Settings → Apps”中移除。
  4. 新插件不会处理旧代码块:请删除 CLAUDE.md 或 AGENTS.md 中的 `` 代码块,以及 git hooks 中的 # >>> coders-talk 代码块。

然后按下文安装,并使用 /keepplain:login(或 keepplain login)重新登录。

从终端安装
curl -fsSL https://keepplain.com/install.sh | sh        # macOS and Linux
irm https://keepplain.com/install.ps1 | iex              # Windows, in PowerShell
keepplain login

这会将 keepplain(一个无需 Node.js 的单文件程序)安装到 ~/.keepplain/bin,并将该文件夹添加到 PATH(shell 的 rc 文件;在 Windows 上则添加到用户 PATH)。安装程序会从此仓库的 releases 中下载适用于你平台的文件,并根据对应版本的 SHA256SUMS 进行校验。无需 sudo 或管理员权限。KEEPPLAIN_VERSION=0.16.0 可安装该版本;KEEPPLAIN_NO_MODIFY_PATH=1 则不会修改 PATH。

keepplain login 会在终端中等待,直到你在浏览器中点击 Connect;通过 SSH 使用时,它会打印链接和验证码,供你在其他地方打开。keepplain update 会在校验最新版本的 SHA256 后替换该文件。你输入的命令会用一行提示有新版本发布,每天最多提示一次;它不会为了提示而等待网络响应,钩子也不会检查更新。KEEPPLAIN_NO_UPDATE_CHECK=1 可关闭此功能。

然后,keepplain enable 会连接 Claude Code、Codex、Cursor 和 Pi。它会说明发现了什么以及将要执行什么,征求你的同意,然后通过各 Agent 自己的插件系统安装插件:它会将插件放入 ~/.keepplain/plugin,并将该文件夹添加为本地市场 keepplain-local(claude plugin marketplace add、claude plugin install keepplain@keepplain-local;codex plugin marketplace add、codex plugin add),再通过 pi install 从该文件夹安装 Pi 的软件包。Cursor 没有安装插件的命令,因此插件的各个组成部分会作为独立文件放入其文件夹 ~/.cursor,与已有内容并存:钩子放在 hooks.json,命令作为技能放在 skills/keepplain-*,知识库放在 mcp.json。它只会修改其中属于我们的内容;无法读取的文件(例如含注释或语法错误的文件)会保持原样,并打印需要添加的行。这与下文介绍的插件相同,但它的钩子和技能会通过绝对路径调用 keepplain,因此无需 Node.js,桌面应用也能在不依赖 shell PATH 的情况下找到它。安装过程中,它会:

  • 替换 GitHub 市场中的插件(keepplain@keepplain),或 Pi 的 git 软件包(pi install git:github.com/keepplain/keepplain-plugin),否则其钩子会运行两次;
  • 保留 Claude 插件目录中的插件(keepplain@synced),不在 Claude Code 中为其旁边再安装一份;该目录中的副本会在 claude.ai 上移除,而不是由 disable 移除;
  • 查找你手动添加的 KeepPlain MCP 服务(claude mcp add、Codex 的 config.toml 中的 mcp_servers,或 ~/.cursor/mcp.json 中的条目)并将其移除,或者保留它,并为该 Agent 安装不带自身服务的插件;
  • 对找到的每个 Agent 询问一次是否启用自动模式(除非你明确选择,否则默认关闭)。Codex 只有在你通过 /hooks 信任这些钩子后才会运行;enable 不会替你完成此操作。Cursor 和 Pi 无需此操作;
  • 如果位于 git 仓库中,询问是否要将 KeepPlain git 钩子添加到该仓库(默认不添加,除非它们已经存在;参见 Git 钩子);
  • 询问一次是否将你过去 30 天的会话导入私人草稿(除非你拒绝,否则默认导入;参见 过往会话)。

keepplain enable --yes 会跳过询问并直接执行,可通过 --agent=claude-code,codex,cursor,pi、--auto=off|on|team|push、--mcp=remove|keep、--git-hooks、--no-git-hooks 或 --no-trailers 指定选项,并可通过 --import-past(搭配 --import-days=N)指定导入选项;不加 --import-past 则不会导入任何内容。keepplain status 会显示文件、登录状态、每个 Agent 的 KeepPlain 插件和自动模式,以及当前所在仓库的 git 钩子。keepplain disable 会从 Claude Code 和 Codex 卸载插件及其市场,从 Pi 移除软件包,从 ~/.cursor 中移除它写入的钩子、技能和库条目,并从 enable 添加了钩子的所有仓库中移除这些 git 钩子;登录状态、你的设置和文件都会保留。keepplain update 会以新版本重新部署插件,并在各 Agent 中更新它,因此插件版本始终与文件版本一致。

若要发送会话而不重新打开它,请在会话运行所在的文件夹中运行 keepplain sessions(或在任意位置运行 keepplain sessions --all,查看过去 30 天内所有项目的会话):它会按时间从新到旧列出该文件夹中的 Claude Code、Codex、Cursor 和 Pi 会话(也包括在其仓库根目录运行的会话),并显示每个会话包含多少条提示词、第一条提示词的开头,以及该会话是否已发送。随后运行 keepplain build 2,会显示与 /keepplain:build 相同的摘要和隐私检查,询问 [y/N] 后发送;单独运行 keepplain build 会选择最新会话,也可以使用会话 ID。它接受相同的选项(--private、--team=<slug>、--keep=<numbers>、--continues=<link>)。它仅在终端中运行:Agent 和脚本都无法回答其问题,也没有 --yes 选项。在脚本中,使用 keepplain preview <id> 和 keepplain send <id>(对于其他 Agent,使用 --agent=codex、--agent=cursor 或 --agent=pi)执行这两个步骤。

你的组织在 claude.ai 中添加的 KeepPlain 连接器在你的电脑上不可见,因此 enable 无法找到它。如果 Agent 随后将库的工具列出两次,请在 /mcp 中关闭其中一个服务。

程序使用 --json 读取命令:status、sessions、preview、send、discard、login、whoami、logout、enable、disable、auto、rules、nudge、privacy 和 import-past 会每行打印一个 JSON 对象;较长的命令会在每个步骤输出一个 {"event": …},失败时则会在 stdout 输出 {"error": "…"}。预览结果仅按编号和类型显示,绝不显示值。login --json 会等待 Connect,直到代码过期。

桌面应用

KeepPlain 应用 是 macOS 和 Windows 上同一组命令的窗口界面:三步欢迎流程(找到的 Agent、登录,以及默认勾选的 enable,用于导入过去的会话)、每个 Agent 都有一个开关、最近发送的会话、每个项目的近期会话(sessions --all),每次发送前都会显示确认界面,以及设置。它附带已发布的 keepplain 文件,并会在 ~/.keepplain/bin 中缺少该文件或文件版本较旧时安装该文件。

从 Claude 插件目录安装

KeepPlain 已列入 Claude 插件目录。在 claude.ai 或 Claude 桌面应用中,打开 Customize → Plugins,找到 KeepPlain 并点击 Add,然后开始新会话;桌面应用会使用 Node.js 20 或更高版本运行插件脚本。如果终端中的 Claude Code 登录的是同一个账户,也会获得该插件,名称为 keepplain@synced。然后按下文所述运行 /keepplain:login。只保留一个副本:keepplain enable 会保留这个副本,且不会在 Claude Code 中安装自己的副本;但如果同时使用下方的 marketplace,hooks 就会运行两次。

从 Agent 安装
  1. 在 Claude Code 中:

    /plugin marketplace add keepplain/keepplain-plugin
    /plugin install keepplain@keepplain
    
  2. 将其连接到你的账户:/keepplain:login。这会在浏览器中打开 KeepPlain;确认页面显示的代码与 Claude Code 中的代码相同,然后点击 Connect。插件会直接从网站获取令牌,并将其保存在 ~/.keepplain/credentials.json 中,只有你能读取。无需复制令牌,令牌也绝不会经过聊天。登录请求只会注明发起请求的程序(Claude Code、Codex、Cursor、Pi 或 KeepPlain CLI)及其版本,不会注明你的电脑;网站会在 Settings → Agent plugins 下以该名称列出令牌。

需要 Node.js 20 或更高版本,无其他依赖。

Codex
codex plugin marketplace add keepplain/keepplain-plugin
codex plugin add keepplain@keepplain

开始新会话,然后运行 $keepplain:login 和 $keepplain:build(与下文相同的命令,只是用 $ 代替 /)。对于知识库,还需在终端中运行一次 codex mcp login keepplain。Codex 会询问是否要在其沙盒外运行插件命令:插件需要网络才能访问 KeepPlain,还需要访问你的主目录才能登录。会话通过 ~/.codex/sessions(或 CODEX_HOME)中的 CODEX_THREAD_ID 查找;其开始时的 HEAD 来自 rollout 的 session_meta,因此 Codex 不需要为此安装 hook。Codex 只会在自动模式下运行插件的 hooks(见自动模式),并且只有在 /hooks 中信任这些 hooks 后才会运行。

Cursor

keepplain enable(见上文)是接入方式:Cursor 无法通过脚本安装插件,因此它会将插件写入 ~/.cursor,IDE 和 agent CLI 每次启动时都会读取该目录。hooks.json 会获得四个 hooks(sessionStart、beforeSubmitPrompt、stop 和 sessionEnd,每个都会运行 keepplain hook cursor <event>),skills/keepplain-<name>/SKILL.md 会获得命令,mcp.json 会获得知识库。重启 Cursor(或运行 "Developer: Reload Window"),在 Settings → MCP 中点击 keepplain 旁的 Connect,然后输入 /keepplain-login 和 /keepplain-build:这些命令与下文相同,只是用连字符代替冒号,因为 Cursor 中的 skill 名称不能包含冒号。

Cursor 的对话记录(~/.cursor/projects/<folder>/agent-transcripts/<id>/<id>.jsonl)包含提示词、回答和工具调用,但不包含工具结果、令牌数量,也不记录具体时间,只记录分钟。hooks 会补上缺失的信息:beforeSubmitPrompt 和 stop 会记录每轮对话的时间、模型、每个回答的令牌数,以及每个工作区所属的对话(保存在 ~/.keepplain/cursor/ 中:只保存时间和数量,绝不保存文本),这样 keepplain preview 就能找到其运行目录所属的对话,无需额外指定。每轮对话做出的更改来自 Agent 自己的编辑调用和 git 快照。Cursor 并不总会调用 sessionEnd(例如窗口关闭或发生崩溃时);下次 sessionStart 会发送剩余内容。

Pi

keepplain enable 会通过 pi install 安装。也可以直接从此仓库安装,而无需文件:

pi install git:github.com/keepplain/keepplain-plugin

这会使用 Node.js 运行脚本,Pi 本身也需要 Node.js(22.19 或更高版本)。输入 /reload 或重新启动 Pi,然后运行 /keepplain:login 和 /keepplain:build。该插件是一个扩展(pi/extensions/keepplain.js,由 package.json 的 pi 键指定)。它的命令在 Pi 自身进程中运行,因此不会有任何内容进入会话;“发送此会话?”是 Pi 自己的对话框。它的事件(session_start、agent_start、agent_settled 和 session_shutdown)会运行其他 Agent 使用的相同钩子:自动模式、git 快照和分享建议。会话是 Pi 保存在 ~/.pi/agent/sessions 中的文件(或保存在 PI_CODING_AGENT_DIR、PI_CODING_AGENT_SESSION_DIR 指定的位置,或由 sessionDir 设置指定的位置);扩展会告知 keepplain 使用哪个文件,就像 Pi 为自身运行的命令设置环境变量(PI_SESSION_ID、PI_SESSION_FILE)一样。Pi 不支持 MCP,因此扩展会自行注册该库的三个工具;这些工具会使用你的登录信息,通过 keepplain mcp-call 请求网站。分支(/fork、/clone)会生成一个注明父会话的新文件:它会作为独立草稿发送,并链接到原会话。Pi 只会在你信任的项目中读取仓库自带的 .agents/skills(use 会将操作手册放在此处)。

一个仓库

一个仓库服务于全部四个 Agent:Claude Code 会读取 .claude-plugin/ 和 skills/;Codex 会读取 .codex-plugin/、.agents/plugins/marketplace.json、codex/skills/ 和 codex/hooks.json(其清单指向该位置,因此 Codex 不会读取 hooks/hooks.json;相同脚本会使用 --agent=codex 运行);Pi 会加载 package.json 的 pi 键指定的扩展;cursor/skills/ 则存放 enable 复制到 ~/.cursor 的技能。Codex 不会在技能中展开 ${CLAUDE_PLUGIN_ROOT} 或 ${CLAUDE_SESSION_ID},因此其技能会使用相对于技能文件的脚本路径,并传入 --agent=codex。

网页版 Claude Code

claude.ai/code 上的会话会将完整记录保存在其云端机器的 ~/.claude/projects/… 中。将会话迁移到你的电脑时,只会带上最近一次压缩之后的部分,因此在那里运行 /keepplain:build 会发送一段缺少开头的长会话。不过,云端机器不会安装插件,只有在环境允许时才能访问 KeepPlain。因此,云端会话会通过另一种方式自行发送,无需在环境中进行任何设置:

  1. 在 claude.ai 中连接 KeepPlain 连接器(连接器设置)。同一个连接器也会为 Agent 提供资源。在连接器支持发送会话之前建立的连接只能读取:断开连接后重新连接(上传工具会提示这一点)。
  2. 添加 KeepPlain 技能:从最新版本下载 keepplain-skill.zip,并在 claude.ai 的技能设置中上传。云端会话会自动加载你在 claude.ai 上启用的技能。
  3. 在云端会话中询问:“将此会话发送到 KeepPlain”(或者,如果你的 claude.ai 账户上启用了此插件,则运行 /keepplain:build:在没有自身令牌的云端机器上,它会自动采用同一条路径)。该技能会在云端机器上运行此插件的脚本:查找会话(即那里的最新记录),展示将发送的内容和隐私检查结果,并征求确认。随后,连接器的 start_session_upload 会在网站的存储空间(Cloudflare R2,云端默认网络列表允许访问)中提供一次性上传链接(有效期为 15 分钟),keepplain send --connector --upload=<link> 会将会话上传到该处,而 finish_session_upload 则会创建草稿并返回其链接。

该技能通过 node scripts/skill.mjs 构建(生成 dist/keepplain-skill.zip:其中的 SKILL.md 来自 web-skill/SKILL.md),每个版本发布包都会包含它。

云端机器的代理会使用自己的 CA 检查 TLS 内容。除 Node 自带的 CA 和 NODE_EXTRA_CA_CERTS 外,该插件还会信任 SSL_CERT_FILE、REQUESTS_CA_BUNDLE、CURL_CA_BUNDLE、系统证书存储(Node 22.15 及更高版本)或 ~/.ccr/ca-bundle.crt;网页版 Claude Code 会将证书保存在此处。如果代理拒绝访问 KeepPlain 本身,插件会说明这一点,并指出在网页版 Claude Code 中需要设置哪个环境变量才能放行。

使用

所有 Agent 中的命令都相同,只是输入方式有所不同:在 Claude Code 和 Pi 中使用 /keepplain:build,在 Codex 中使用 $keepplain:build,在 Cursor 中使用 /keepplain-build。下表均使用第一种命令。

命令功能
/keepplain:build显示将要发送的内容(项目文件夹、提示词、时间跨度、大小)、发送到哪里以及隐私检查的结果,征求确认后发送,并打印草稿链接。
/keepplain:build --private同上,但即使在团队的代码库中,草稿也只对你可见。
/keepplain:build --team <slug>同上,但草稿会发送给该团队(团队链接中 /t/ 后面的部分)。
/keepplain:auto on从现在起,这台电脑上此 Agent 的每个会话都会在运行期间和结束时自动发送(参见“自动模式”)。
/keepplain:auto team同上,但仅适用于团队要求发送会话的代码库。
/keepplain:auto off停止自动发送。单独运行 /keepplain:auto 会显示自动发送是否开启以及上次发送的内容。
/keepplain:auto session on仅自动发送此会话,即使自动模式已关闭也是如此。session off 会让此会话在此电脑上始终保持关闭,不受模式影响;单独运行 session 会显示当前适用的设置。
/keepplain:login通过浏览器连接此电脑,或显示此电脑已连接的账号。
/keepplain:logout清除此电脑上的令牌(可在网站的 Settings → Agent plugins 中撤销)。
/keepplain:lookup <task>在 KeepPlain 知识库中搜索类似任务的会话,并显示搜索结果。Agent 也会自动执行此操作(见下文)。
/keepplain:use <link>将已发布 Build 的操作手册作为此 Agent 的技能展示:包括完整文本、应用位置以及与此处版本相比的更改。征求确认后写入。使用 --as rule 或 --as prompt 可采用另外两种形式;使用 --team <team> --stack <stack> 可应用团队规则(参见操作手册)。
/keepplain:rules显示此代码库中的会话开始时会应用哪些规则以及原因:包括其技术栈和代码库所属方(参见每个会话中的规则)。使用 on 或 off 可为此电脑启用或停用这些规则;--refresh 会立即向网站获取最新规则。
/keepplain:handoff [agent]为此电脑上的另一个 Agent 生成本次会话摘要,并将其放入剪贴板和文件中,同时提供启动该 Agent 并继续会话的命令(参见在另一个 Agent 中继续)。使用 on、off 或百分比,可设置插件在限制临近时自动提供接续选项的时机。

再次发送同一会话会更新其草稿,直到你将其发布。

两条规则:

  • 发送会话的命令(build 和 auto,以及与它们配合使用的 login 和 logout)仅会在你输入时运行。Agent 绝不会自行调用这些命令(在 Cursor 中,这些技能已标记为仅供你调用;在 Pi 中,它们是仅供你输入的扩展命令)。
  • 将操作手册写入代码库(use)也仅会在你输入时运行。知识库可以告知 Agent 某个会话带有操作手册;Agent 只能将此信息转告给你。
  • 搜索知识库是 Agent 会在任务需要时自动执行的操作(通过 lookup 技能和 keepplain MCP 服务)。它只会发送任务的简短描述和技术栈,绝不会发送会话。可在 /mcp(Claude Code)、~/.codex/config.toml(Codex)或 Settings → MCP(Cursor)中将其关闭;参见Agent 中的知识库。

分支会话(在 Claude Code 中使用 /branch 或 --fork-session,在 Codex 中创建分支,或在 Pi 中使用 /fork 或 /clone)会作为独立草稿发送,插件会告知网站它源自哪个会话,以及源会话停在何处。随后,该分支的 Build 会标明自己是分支,并链接到原始会话的 Build;原始会话的 Build 也会链接到其分支。无论哪一个先发送,只要两者都在网站上,链接就会显示。Claude Code 会在分支继承的行中写入原始会话 ID;Codex 会在 rollout 的 session_meta 中标明原始会话,Pi 则会在新文件的标头中标明,因此无需钩子。Cursor 的记录不会标明对话是否为分支。 如果隐私检查发现了内容,预览会按编号列出;除非你指定编号,否则这些内容会被替换为 [REDACTED],并使用 --keep=<numbers> 重新运行预览(参见哪些内容会离开你的设备)。

如果无法访问 KeepPlain,或 KeepPlain 返回服务器错误,发送步骤会在浏览器中打开 keepplain.com/new,并打开文件管理器且选中已准备好的 .jsonl.gz 文件,同时打印链接和路径:将文件拖到页面上即可。该文件就是预览中所述的、经过检查的文件。文件会保留 30 分钟,因此网站恢复后重新发送也可以;之后,下次运行 keepplain(或下次会话启动时)会将其删除。设置 KEEPPLAIN_NO_BROWSER=1 后,浏览器和文件管理器会保持关闭;链接和路径仍会打印。被拒绝的令牌或请求绝不会上传到那里:请重新登录。

自动模式

自动模式默认关闭,且按计算机、网站和 Agent 分别设置:在 Claude Code 中使用 /keepplain:auto on,绝不会发送 Codex、Cursor 或 Pi 会话,反过来也一样。开启后,每个会话都会像使用 /keepplain:build 那样发送,无需询问:如果仓库属于团队,则发送到团队空间;否则发送到你的私人 Builds。使用 /keepplain:auto team 时,只有要求启用此功能的团队(通过团队设置)中的仓库会话才会发送,其他内容都不会离开你的设备。团队可以提出要求,但绝不能替你开启此功能。

单个会话可以自行选择。/keepplain:auto session on 会按 on 的方式发送当前会话,即使计算机的自动模式已关闭;其他会话不受影响。无论当前模式如何,/keepplain:auto session off 都会让当前会话留在计算机上,包括 git hooks 的 push(已发送的内容仍会保留为草稿)。此选择会随会话保存在 auto-sessions.json 中,因此恢复的会话会保留该设置;而 /keepplain:auto off 不会清除它。KEEPPLAIN_AUTO=0 仍会阻止所有发送。

以下钩子负责发送,每个都在后台进程中运行,因此 Agent 无需等待上传:

  • Stop,在 Agent 回复后触发:当会话有新增内容且上次发送已过去五分钟时,会将其作为进行中的会话发送。草稿会保持最新状态,即使程序崩溃,最多也只会丢失这几分钟的内容。短于五分钟的会话只会在结束时发送。
  • PostToolUse(Claude Code),在每次工具调用后触发:进行相同的检查,因此 Agent 处理一小时的轮次会在运行过程中发送,而不只是回复后才发送。Claude Code 不会等待它完成(async),且只会加载自动模式所需的内容。
  • SessionEnd:会话会再次发送,并标记为已结束。Codex 也会在闲置 30 分钟后结束会话,这也是其桌面应用中会话结束的方式。
  • SessionStart:对于从未声明结束(例如崩溃或终端关闭)且自上次发送后有新增内容的会话,会在下次启动时发送,每次最多三个。闲置半小时的会话会标记为已结束;较新的会话则会标记为进行中。只会考虑自动模式开启期间记录的会话,或自行开启自动模式的会话,不会处理更早的历史记录:这就是一次性导入(过往会话)。

当插件声明会话已结束,或半小时内没有任何新内容时,网站会向模型询问该会话的关键时刻。之后如果会话继续进行,只要你没有自行更改时间线,就会在下次结束时基于整个会话再次询问。发送仍在进行中的会话不收费,也不计入每日限额。 Claude 应用中的一段对话可能包含多个会话:每当你编辑自己发送的消息,或继续一段对话时,应用都会启动一个新会话,并将之前的对话内容复制过来。插件会将这条会话链作为一个会话发送,使用最新会话的 ID,并标注之前的会话(chain),这样网站就会持续更新同一条草稿。如果对话已在后续会话中继续,而较晚才发送之前的会话,则会将其忽略(skipped: the conversation went on in a later session)。

插件不会发布任何内容。已发布的会话会被忽略。每次发送都会在 ~/.keepplain/auto.log 中记录一行:已发送或已同步(附草稿链接)、已跳过及原因,或失败。日志最多保留最近 500 行,且不会保留超过 30 天的内容。~/.keepplain/auto-sessions.json 会记录自动模式处理过哪些会话,以及每个会话发送了多少内容,但绝不会记录会话内容;/keepplain:auto off 会清除这些记录。在环境变量中设置 KEEPPLAIN_AUTO=0,即可关闭当前 shell 的自动模式。

在 Cursor 中,钩子就是 enable 写入 ~/.cursor/hooks.json 的那些钩子(sessionStart、stop 和 sessionEnd,以及只记录轮次信息的 beforeSubmitPrompt);无需信任任何内容。IDE 不会每次都调用 sessionEnd,因此网站也会在 30 分钟没有新内容后请求快照,下次 sessionStart 时则会发送剩余内容。在 Pi 中,扩展会运行 session_start、agent_settled(回答完成后)和 session_shutdown 钩子;Pi 会等待最后一个钩子,因此上传会在 Pi 退出前于后台启动。

在 Codex 中,钩子位于 codex/hooks.json。Codex 只有在你信任插件钩子后才会运行它们:输入 /hooks,然后信任 KeepPlain 的三个钩子($keepplain:auto on 会提醒你)。在 Windows 上,Codex 会通过 PowerShell 运行钩子,并自行将插件文件夹写入 ${PLUGIN_ROOT}。Codex CLI 退出时也会终止由其钩子启动的任务,因此会话结束钩子最多等待三秒,等待上传完成;未能上传的内容会在下次启动时发送,而且网站无论如何都会在 30 分钟没有新内容后请求快照。

过往会话

你的记忆一开始是空的:search_my_work 和“为什么改了这个”只能找到网站上已有的内容。你的 Agent 仍会保留插件运行前的会话(Claude Code 在 ~/.claude/projects 中保存约 30 天,Codex 在 ~/.codex/sessions 中保存,Cursor 在 ~/.cursor/projects 中保存,Pi 则保存在它的会话文件夹中),因此 keepplain enable、桌面应用的欢迎界面和 keepplain import-past 都会提供导入选项。每个账户只能运行一次导入:网站会导入从第一条过往会话起 14 天内的会话,此后插件将不再提供导入选项。

  • 它会查找过去 30 天内(--days=N,最多 90 天)包含提示词、已静默半小时、既非从这台电脑发送也不在自动模式记录中的会话(sent.json、auto-sessions.json;你用 auto session off 关闭的会话永远不会被导入),告知各项目的会话数量,并询问 [Y/n]。没有终端时,它不会询问,也不会发送任何内容,除非明确收到同意:keepplain import-past start、import-past --yes、enable --yes --import-past(应用中的勾选框)。import-past --json 会按 Agent 和项目说明找到的内容,以及网站是否仍接受这些会话。
  • 同意后,会像自动模式那样发送这些会话(auto-send <id> --past):进行相同的精简,并应用这台电脑上的相同脱敏规则,以及 privacy.json 中的词语。无论仓库属于谁,它们都会进入你的私人草稿;团队只能看到你分享给它的会话(见下文)。网站会将其作为 trigger=backfill 接收:日期按每个会话运行的时间计算,而非发送时间;通过 Batch API 标记,并计入单独的额度(每天 100 个,即使你向团队分享了一些会话也是如此),不会计入自动模式或团队的额度。空会话会被丢弃且不会发出通知。
  • 后台会按从旧到新的顺序处理,每 15 秒发送一个(网站每分钟最多接收 5 次发送)。当天额度用完后,会暂停到 UTC 午夜,并在下一个 Agent 会话开始时继续,也会在运行 keepplain login 或 keepplain import-past 时继续。网站繁忙时会等待一分钟;无法访问时会等待半小时;网站持续处理失败的会话会重试 3 次,然后跳过。不再被网站接受的登录状态会让导入回到等待 keepplain login 的状态,不会丢失任何内容。由多个会话组成的 Claude 应用对话会合并为一份草稿,与自动模式相同。自动模式会忽略这些会话,直到你继续其中某个会话。
  • 会话的提交记录仅包括会话结束前、在会话运行时所在分支上的提交(如果该分支仍存在),而非截至今天的 HEAD 上的所有提交。
  • Cursor 的转录记录不会标明会话在哪个文件夹中运行。文件夹会根据 Cursor 工作区(其 workspaceStorage)确定;或者根据名称中包含 Cursor 文件夹名的其他 Agent 会话确定。文件夹始终无法确定的对话会被跳过,计数中会说明这一点。
  • 尚未登录时(先运行 enable,再运行 login),导入会等待,并在登录后开始。
  • 在你某个团队的仓库中运行的会话(网站根据团队的 GitHub 所有者进行路由)会被推荐分享给该团队,每个团队询问一次,在导入问题之后立即于终端中询问(或者,如果你在登录前已同意,则在运行 keepplain login 时询问):“这些会话中有 14 个是在 Acme 的仓库中运行的。也要与 Acme 分享吗?”只有当你的自动模式已将这台电脑上的会话发送到该团队(已开启,或该团队要求时设为 team),且团队不需要征得你新的同意时,默认答案才为“是”;否则为“否”。桌面应用会显示列表,并为每项提供勾选框。你分享的会话会在导入后立即移入团队(POST /api/v1/teams/<team>/sessions);已导入的会话则会立即移入。对于条款已变更而你尚未同意的团队,不会移入任何内容。import-past teams --json 会列出这些团队;import-past share --team=<slug> --stdin 会接收要分享的会话 ID([] 表示全部保留为私人会话)。之后加入团队时,网站会在通知铃铛和团队同意页面中提供同样的选项,每批会话提供一次。

keepplain import-past status 会说明处理进度及等待原因;keepplain import-past stop 会停止导入,已导入的内容仍会保留在草稿中。~/.keepplain/past-import.json 保存导入会话的信息(ID、文件、文件夹、项目名称和仓库地址,但绝不包含会话内容)及其计数;导入结束 30 天后,这些列表会被删除。与自动模式一样,auto.log 会为每个会话记录一行。enable 会记住你的否定选择,不再询问;想导入时,运行 keepplain import-past 即可再次询问。

私人和团队草稿

草稿是私人的:它会出现在你的 我的构建 中,不会出现在信息流、搜索引擎或你的个人资料中。如果你在 KeepPlain 上属于某个团队,且会话是在该团队指定的某个 GitHub 组织的仓库中运行的,草稿就会转到团队空间:团队成员可以看到,其他人看不到。发送任何内容之前,预览会说明草稿将发送到哪里;--private 和 --team <slug> 可以覆盖此设置。在网站上发布到社区始终是单独的一步;团队草稿只有在团队允许的情况下才能发布。

Agent 中的知识库

此插件会为 Claude Code、Codex 和 Cursor 提供一个 MCP 服务 keepplain(https://keepplain.com/mcp),并为没有 MCP 的 Pi 提供与扩展自身相同的工具。这些工具共有三个,且均为只读:search_coding_agent_sessions 用于查找执行过类似任务的已发布会话,get_coding_agent_session 用于读取其中一个会话,find_coding_agent_failures 用于查找 Agent 在类似问题上失败的情况,以及人类采取了哪些操作。lookup 技能会告诉 Agent 何时使用这些工具(在处理已知技术栈上的非简单任务之前、连续失败两三次之后,或你询问其他人如何完成某件事时)、查询中可以包含和不能包含哪些内容,并提醒它将返回结果视为他人的经验:未经你允许,它绝不会运行结果中的命令。如果某个会话提供了帮助,它会附上链接并说明这一点。

  • 登录。 在 Claude Code 中,服务使用 /keepplain:login 的登录状态:.mcp.json 会在每次连接时通过 headersHelper 请求 scripts/keepplain.mjs mcp-headers 获取令牌,因此令牌不会存入任何配置文件,也不会经过聊天内容。如果尚未登录,服务会在 /mcp 中要求你通过浏览器登录。Codex 会在会话文件夹中以空环境运行插件的标头助手,而插件无法在其中找到自己的脚本,因此服务会在 Codex 中自行登录:运行一次 codex mcp login keepplain。Cursor 也会自行登录,登录到写入 ~/.cursor/mcp.json 的服务 enable:Settings → MCP → keepplain → Connect。Pi 的工具使用 /keepplain:login 的登录状态。搜索知识库无需账户;登录后,服务也会搜索你的团队会话,并解除访客限制:参见 keepplain.com/for-agents。

  • 搜索会发送的内容。 查询(关于任务的几个词,或失败的症状)、技术栈和 Agent 名称。系统会告知 Agent,绝不能在查询中加入代码、路径、仓库、公司或客户端名称、主机名、URL 或机密信息。网站会保留查询文本、筛选条件和找到的结果数量 180 天,但不会将其与你或你的 IP 地址关联。会话本身绝不会随查询发送。

  • 关闭。 Claude Code:/mcp,选择 keepplain,然后禁用。Codex:在 ~/.codex/config.toml 中

    [plugins."keepplain@keepplain".mcp_servers.keepplain]
    enabled = false
    

    Cursor:Settings → MCP,或从 ~/.cursor/mcp.json 中删除 keepplain。Pi:对软件包运行 pi remove,或运行 keepplain disable。

  • 另一个站点。 插件的服务器始终指向 https://keepplain.com/mcp:Claude 桌面应用会比较它显示的地址和会话中的地址,而且不会展开变量,因此 ${…} 地址会导致登录失败。要使用另一个站点,请添加自己的服务器并关闭插件:在 Claude Code 中运行 claude mcp add --transport http keepplain-dev http://…/mcp;在 Codex 的 config.toml 中添加 [mcp_servers.keepplain-dev],并设置 url = "http://…/mcp";在 Cursor 的 mcp.json 中添加另一个条目。Pi 的工具会访问 KEEPPLAIN_URL 指定的站点。发送会话时仍会使用 KEEPPLAIN_URL 和插件选项 url。

  • 会话使用了哪些 Builds。 发送会话时,插件会统计 Agent 在会话中对这些工具的调用次数,并收集其回答链接到的 Builds(/b/<slug>?ref=agent,最多 20 个),以及 Agent 使用过其 playbook 的 Builds:Agent 运行过的 kp-<slug> 技能(重命名前为 ct-<slug>;通过 Skill 工具调用,或在 Claude Code 中输入 /kp-…;在 Codex 或 Pi 中使用 <skill> 块,或由 Agent 阅读技能的 SKILL.md;在 Cursor 中输入 /kp-…),依据技能文本末尾的 Build 链接确定。Cursor 的会话记录不会保留工具结果,因此只能知道 Cursor 会话中的调用次数,无法知道这些调用返回了哪些 Builds。写入 AGENTS.md 或 CLAUDE.md 作为规则的 playbook 会出现在每个会话中,无论它是否发挥了作用,因此不会计入。预览中会显示这些 Builds。你发布后,站点会将草稿关联到这些 Builds:你的页面会显示“从知识库使用过”和“使用 @author 的 playbook 构建”,对方的页面会显示“帮助发布了 N 个会话”和“N 个会话使用其 playbook 构建”。发送的只有次数和 slug,不会发送查询内容:在会话本身中,每次知识库调用都会以工具名称发送,查询内容和回答均替换为 [library call — not kept]。次数和 slug 会在发送前从你电脑上的会话文件中提取。

  • 分享建议。 每个会话中最多提示一次;当 Agent 从知识库获取了 Builds,且会话中代码有所更改时,Stop hook 会在回答后显示一行提示:“你的 Agent 在本次会话中使用了 KeepPlain 的 2 个 Builds。分享你的内容:/keepplain:build”。它不会发送任何内容,开启自动模式时也不会显示。读取会话时,hook 会从上次停止的位置继续,并在 ~/.keepplain/nudges/ 中保存该位置、次数和 slug。可通过 KEEPPLAIN_NUDGE=0 或运行 node <plugin folder>/scripts/keepplain.mjs nudge off 关闭。在 Codex 中,只有在 /hooks 中信任插件的 hooks 后,该 hook 才会运行。

操作手册

已发布的 Build 可以附带操作手册:记录它的会话带来了哪些经验,并从 Build 页面为 Agent 编写(何时使用、采用的方法、注意事项、检查项,以及更好的首条提示词)。/keepplain:use <link or slug>(在 Codex 中为 $keepplain:use,在 Cursor 中为 /keepplain-use,在终端中为 keepplain use)会完整显示手册,说明它将写入何处,以及与当前已有版本相比有哪些变化,并且只有在你确认后才会写入。

--asClaude CodeCodex、Cursor 和 Pi
skill(默认).claude/skills/kp-<slug>/SKILL.md.agents/skills/kp-<slug>/SKILL.md
ruleCLAUDE.md 中的一个代码块AGENTS.md 中的一个代码块
prompt显示,不写入显示,不写入
  • 路径位于当前所在代码库的根目录,或代码库之外的文件夹中。技能独占一个文件夹:删除该文件夹即可将其移除。任务符合技能描述时,Agent 会自行打开它;其前置元数据仅包含名称和描述,不含其他内容,因此不涉及工具权限。
  • 规则是 与 之间的代码块;文件的其余部分保持原样,包括换行符。如果 CLAUDE.md 导入了 @AGENTS.md,代码块只会写入一次 AGENTS.md,两个 Agent 都会读取。如果两个文件都存在但没有导入关系,代码块会写入你选择的 Agent 所对应的文件,输出会说明另一个 Agent 看不到它。
  • 代码库中的 .keepplain/uses.json 会记录写入的内容:Build、版本、格式和 Agent。它不会自动更新:再次运行 use 会显示变化并再次征求确认。
  • 在终端中,写入前会询问 [y/N];如果这台电脑上同时有两个 Agent,还会询问要用于哪个 Agent。编写脚本时,--agent=claude|codex|cursor|pi 和 --write 可一并回答这两个问题。
  • 它会向网站请求一个公开文件 /b/<slug>/use/<format>.md,并附带 via=cli 和 Agent 信息;写入时发出的请求还会添加 write=1,网站会将其计为一次使用(每天一次)。请求不会包含你的代码库信息,也不含令牌:只有当文件不是公开文件时(即团队的 Build 尚未发布),它才会再次使用你的登录信息发起请求,而且只有该网站能收到这些信息。团队自己的 Build 不计入使用次数。
  • 团队规则:按团队页面所示,运行 use --team=<team> --stack=<stack>。团队为该技术栈合并的规则会写在 CLAUDE.md 或 AGENTS.md 中的一个代码块里(``),写入方式与规则相同。规则只有在团队于网站上合并提案后才会更改,因此每位成员获得的代码块都相同。此功能仅供成员使用,因此需要登录。如果此处的代码块版本较旧,use --team 会列出其后合并的提案。
  • 保持更新:在包含团队代码块的代码库中,每次会话开始时,SessionStart 钩子都会用一行提示说明,自代码块写入后团队是否合并了提案,并告知上次检查的发现结果。它本身绝不会访问网络:上次检查超过六小时后,它才会在后台启动一次检查(GET /t/<team>/rules/<stack>.md,附带 If-None-Match 和你的登录信息;如果没有合并,网站会返回 304),并将结果记录到 ~/.keepplain/team-rules.json。它绝不会重写代码块:只有在你运行 use --team 时才会重写。
  • 写入完成后,它会打印 Build 的链接并附带 ?ref=use:等你的 Agent 使用操作手册完成工作后,打开此链接并告知效果如何。
在另一个 Agent 中继续

当当前 Agent 的使用限额即将用尽时,插件会提供切换到这台电脑上另一个已安装 Agent 的选项,并为它提供一份会话摘要,让你不必从头开始。任何内容都不会离开这台电脑,也无需登录。

  • 何时触发。 在 Claude Code 中,插件的 hooks 模块会读取 Claude Code 在状态行中显示的数值(Pro 或 Max 订阅的 5 小时和 7 天窗口);超过 90% 后,它会在提示词上方显示一次提示条:“Claude 的 5 小时限额已使用 92%,14:30 重置。继续使用:[1 Codex] [2 Pi] [0 暂不]”,在空提示词中输入数字即可按下对应按钮。如果某轮恰好在限额用尽时结束,也会显示一行相同的提示。在 Codex 中,Stop hook 会读取 Codex 写入会话文件的限额,并显示一行命令。Pi 和 Cursor 不会在本地报告限额:你需要在那里自行输入 /keepplain:handoff。
  • 摘要。 在这台电脑上根据会话文件生成,不使用模型(限额用尽时也无法使用模型):任务(你的首条提示词)、你在过程中提出的要求、修改过的文件、运行过的命令及失败的命令、最后一条答复(以及中断位置),还有仓库的分支和未提交的更改。内容约为几屏 Markdown,保存在 ~/.keepplain/handoff/<agent>-<session>.md 中。
  • 交接。 在 Claude Code 中按下按钮,或在任意位置输入 /keepplain:handoff codex:摘要会复制到剪贴板,插件会打印启动另一个 Agent 的命令,并将摘要作为它的首条消息,命令如下:codex "$(cat ~/.keepplain/handoff/….md)"(在 Windows 上为 codex (Get-Content -Raw '…'))。--open 会尝试打开一个运行该命令的新终端窗口。若 Cursor 未安装 cursor-agent,则只会复制到剪贴板:将内容粘贴到聊天中即可。
  • hooks 模块运行的内容。 hooks/handoff.tsx 是一个 Claude Code mod。它只读取 session.measure 中的使用量数值;按下按钮时,还会读取会话的 id;它只运行一个程序:插件自带的脚本 node <plugin>/scripts/keepplain.mjs(执行 keepplain enable 安装单文件版 keepplain 后,则会运行该程序)。它只会以以下两种方式运行,不会执行其他操作:当某个窗口的使用率超过 50% 时,运行 handoff --targets --json,以获取是否切换、使用率以及这台电脑上找到的 Agent;按下按钮时,运行 handoff <agent> --session=<id> --no-copy --json,以生成摘要。该命令会读取会话文件,在仓库中运行 git 以获取分支和未提交的更改,并将摘要写入 ~/.keepplain/handoff/;随后 mod 会通过 Claude Code 将摘要放入剪贴板。mod 和该命令都不会发起网络请求,也不会读取任何令牌:没有内容会离开这台电脑。
  • 登录后, 下一个 Agent 无需摘要:在该 Agent 中运行 /keepplain:resume,即可从这台电脑或另一台电脑上的 KeepPlain 读取整个会话,并在一个 Build 中继续工作。
  • 关闭。 keepplain handoff off(或 KEEPPLAIN_HANDOFF=0)会停止提示;keepplain handoff 80 会更改提示的百分比。该命令本身始终可用。
每次会话中的规则

记录 Agent 之前哪里出错,让你不必一再用同样的方式纠正它。你自己的规则位于网站上的 /rules:每天有一次,模型会综合阅读你的会话,只推荐在两次或更多对话中反复出现、且并非某一项任务特有的错误;你可以一键添加规则,应用于选定的技术栈或每次会话,也可以自行编写。团队规则则是成员通过提案合并的规则。

先处理任务,再应用相关规则。SessionStart 钩子会将适用于每次会话的规则(Everywhere)加入会话上下文,方式与读取 CLAUDE.md 相同。技术栈规则会随其适用的提示词一同加入:提示词钩子(Claude Code 和 Codex 中的 UserPromptSubmit,Pi 中的扩展)会根据规则的关键词和词语,逐一匹配这台电脑上的每条提示词,并将相关规则加入会话,每条规则每个会话仅添加一次。提示词不会发送到任何地方,也不会被保存。Cursor 的提示词钩子无法添加上下文,因此 Cursor 会在开始时获取所有规则。不会向代码仓库写入任何内容。

同一个钩子(Claude Code、Codex、Pi 和 Antigravity,需登录)会在提示词询问代码来源时添加一行提示(“откуда взялся X”、“who added this”、“why was this changed”、“в каком коммите”):git 会显示改动内容,而作出改动的会话会说明原因,因此 Agent 会在运行 git log 或 git blame 后,使用文件和提交信息(其 Agent-Session trailer 及提交说明,即提交消息的第一行)调用 search_my_work。匹配仅在这台电脑上进行,和规则一样;提示词不会发送到任何地方。

  • 适用哪些技术栈:根据代码仓库的清单文件判断(composer.json、package.json、pyproject.toml、requirements.txt、Gemfile、go.mod、Cargo.toml、Gradle 和 Maven、.NET 项目、pubspec.yaml、Package.swift、Dockerfile 或 compose 文件),检查仓库根目录及其下一级目录。没有这些文件的仓库不会获得规则。
  • 适用于谁:你自己的规则适用于所有地方。在属于你某个团队的仓库中(其 GitHub 所有者是该团队),如果所有者或管理员已在团队设置中启用“Add the rules to every session”,也会先应用团队规则。双方都有的规则只会显示一次,并使用团队的措辞。仓库自身文件中已有的团队规则块(使用 use --team)不会重复显示。
  • 何时获取:钩子不会访问网络。它会读取上次获取的内容,并在内容已过期一小时或仓库的技术栈发生变化时,在后台启动新一轮获取,因此网站上的更改会在之后的下一次会话中生效。仓库中的首次会话不会应用规则。
  • 你会看到什么:规则发生变化时,会在开始处显示一行提示(“KeepPlain added 3 rules to this session: Laravel (2 yours, 1 from Acme)”);使用 /keepplain:rules 可查看规则文本。Cursor 不会显示这行提示(它没有用于此提示的通道);Pi 会将规则加入系统提示词。
  • 关闭:在这台电脑上运行 keepplain rules off,或在 shell 中设置 KEEPPLAIN_RULES=0。
谁编写了每一行

keepplain blame <file> 是 git blame,但会显示每一行背后的 Agent 会话:在行号栏中显示 Agent 和会话名称,每个会话编写的代码块各显示一次,并提供指向作出更改的轮次的链接。

● Claude Code · Harden the webhook   4 │ const TOLERANCE_SEC = 300;
○ Pi · Seat count sync              19 │ await syncSeats(event.data, { lock: 'team' });
● Codex · maya, private             22 │ await markPaid(event.data.id, { notify: true });
  no session found                  25 │ return new Response('ok');
  • ● 表示该会话创建了提交或其中的编辑;○ 表示该 Agent 在手动创建的提交之前编辑了文件,或它只是查看了该提交。+1 表示该提交还涉及其他会话。
  • Git 在你的电脑上运行,代码也留在本地。网站会获取文件路径及其提交(哈希、每次提交中的文件名、标题、Agent-Session 尾注、日期),并返回你可以阅读的会话;如果你在团队列表中看到队友的会话,但无权阅读,系统只会显示其作者姓名。系统会查询文件最新的 300 个提交,每次请求 100 个。
  • 如果尾注中指定的会话不在网站上,系统会在这台电脑上查找:行号栏会显示其名称或首条提示词,相关内容不会发送到任何地方。如果你未登录,就只能看到这些信息,以及其余提交的标题。
  • -L <from>,<to> 标记指定行,--rev=<commit> 标记文件在该提交时的状态,-w 忽略空白字符,--color=always|never 控制颜色(默认仅在终端中显示,且设置了 NO_COLOR 时绝不显示),--json 适用于脚本和桌面应用。
在 GitHub 上

已发布的 Build 可以告诉审查拉取请求的人这项更改是如何构建的:/keepplain:share(Codex 中使用 $keepplain:share,Cursor 中使用 /keepplain-share,终端中使用 keepplain share)。

  • 单独运行 share 会显示此会话的 Build(或你通过链接或 slug 指定的 Build):相关数字、它当前所在的位置,以及拉取请求代码块。仍处于草稿状态的 Build 不会被分享:命令会先提供链接,让你发布它。
  • share --pr 会将“How this change was built”代码块添加到该会话的拉取请求描述中:优先选择 Build 链接的拉取请求,其次是该会话分支上的开放拉取请求,最后是此处当前检出的分支上的开放拉取请求;使用 --pr=<link> 可指定目标。代码块位于 和 之间,再次运行会替换该代码块;描述的其余部分保持不变。该命令会使用你自己的 GitHub CLI(gh,且已登录):KeepPlain 绝不会写入 GitHub。如果 Build 尚无拉取请求,它会链接到此处指定的拉取请求。
  • share --readme 会在仓库的 README 中写入“Built with AI”部分,位于 `` 标记之间。对于公开仓库,其徽章会统计该仓库的公开会话,并链接到这些会话,因此无需再次编辑即可保持最新。不会创建任何提交。
  • 两种方式都会先显示将要更改的内容。Agent 的技能会询问你;在终端中会显示 [y/N];脚本则需传入 --write。
  • 拉取请求自动模式:运行 share auto on(或在网站上选择“Settings → GitHub”)后,每次在 github.com 上某个仓库中启动的会话,都会在后台每小时最多检查一次过去两周内从该仓库发布、但尚未关联到拉取请求的 Build,并使用你的 gh 将每个 Build 添加到相应的开放拉取请求中。下次启动会话时,会用一行文字说明执行了什么操作。默认关闭;运行 share auto off 可关闭此功能。在这台电脑确认已启用之前(通过 share auto on,或网站通过 whoami 或预览告知),该仓库的地址不会因此发送到网站。
Git hooks

仅适用于你选择启用 keepplain enable(或 --git-hooks)的仓库;绝不会全局启用。包含两个 hook,每个都是位于首行之后、由 # >>> keepplain 和 # <<< keepplain 包围的代码块,因此已有 hook 会保留自己的内容,disable 也会原样保留:

  • prepare-commit-msg 会为包含某个会话工作成果的提交添加 Agent-Session: <session id>。Agent 创建的提交只会标明它自己的会话:Claude Code、Codex 和 Pi 会告知它们运行的命令当前所属的会话。你在自己的终端、IDE 或 Cursor 中创建的提交,会标明 Claude Code、Cursor 或 Pi 会话——这些会话的回答更改了一个已暂存且此后尚未提交的文件(可通过 git 快照判断);或者标明 Codex 会话——自动模式会在此仓库中跟踪该会话,并且自上次提交以来有内容写入该会话。合并和压缩提交不会被处理,也不会重复添加相同的尾注。--no-trailers 会跳过此 hook。会话 ID 会成为仓库历史的一部分:在公开仓库中,所有人都能看到它。
  • pre-push 会根据提交的尾注,以及 Claude Code、Cursor 和 Pi 中包含这些提交的快照,查找这些提交对应的会话。如果自动模式为 on、team 或 push,它会在后台将这些会话作为已结束会话发送。如果未启用自动模式,则会打印一行,说明有多少个会话对应此次推送。推送不会等待网络,也不会因 KeepPlain 而失败;快照引用(refs/keepplain/…)绝不会被推送。

自动模式为 push 时,仅当会话的提交被推送时才会发送该会话;从未推送代码的会话会留在你的电脑上。在此模式下,Agent 自己的 hook 不会发送任何内容。

如果仓库的 hook 存放在其他位置(core.hooksPath:husky、lefthook、共享文件夹),enable 不会添加 hook:它会打印需要你自行添加到这些 hook 中的代码行。

哪些内容会离开你的设备

  • 默认情况下,仅记录你运行 /keepplain:build 的会话,而且必须先经你确认。
  • 开启自动模式后,无需询问即可记录这台计算机上该 Agent 的每个会话;只有你能开启此模式。(使用 team 时,仅记录团队要求记录的仓库中的会话;使用 push 时,仅记录你推送其提交的会话。)无论哪种情况,都不会发布任何内容。
  • 在仓库中使用 git hooks 后,会话 ID 会作为 Agent-Session trailer 写入你的提交,因此每次推送这些提交时,它也会随之发送到你推送的任何位置。会话本身不会发送。
  • 会话的 .jsonl 文件,不含截图、思考块和 Agent 的记账行;工具输出最多保留 60 行,并进行 gzip 压缩。对 KeepPlain 库的调用只记录工具名称,不记录查询和回答。插件自身的运行记录会从末尾截去。大文件会逐行读取:一个包含大量截图、大小为 417 MB 的 Codex rollout,最终约为 200 KB。Pi 会话不包含其 system 消息(提示词和工具的 schema)、你用 ! 自己运行的 shell 命令及其记账条目;Cursor transcript 不含工具输出,仅包含提示词、回答和工具调用。
  • 如果会话是在 git 仓库中运行的:当 origin 地址指向 GitHub 时,会记录该地址、分支,以及会话所创建提交的标题、哈希和大小(文件数、+/-);网站会为每个提交添加 GitHub 链接,但不会发送提交本身。私有仓库的地址只会显示给草稿的受众(你或你的团队),并会在发布 Build 时移除。在 Claude Code、Cursor 和 Pi 中,启动 hook(SessionStart、sessionStart、session_start)会在 ~/.keepplain/sessions/ 中记下每个会话开始时的 HEAD,供此用途;它不会发送或打印任何内容。
  • 对于会话中添加的每个文件夹(Claude Code 的 /add-dir、Codex 的工作区根目录),如果该文件夹本身也是一个仓库,则同样记录会话打开期间在其中创建的每个提交,并以文件夹名称标识,绝不记录其路径。最多记录五个这样的文件夹。
  • 如果 Agent 在会话文件夹之外通过 shell 提交到某个仓库(例如 cd ../api && git commit、git -C ../api commit),且该操作可从会话的 shell 命令中识别,则该仓库计为五个文件夹之一,但记录内容更少:只发送 Agent 在该仓库中创建的提交,包括 git commit 命令指定标题的提交(通过 -m 或 heredoc 的首行指定),或 git 在回复中打印了哈希的提交。期间其他人手动或通过另一个会话在该仓库中创建的提交不会发送,连哈希也不会发送;更改大小也不会发送,因为这会将它们计算在内。如果无法确定 Agent 创建的提交(例如 git commit -q -F file,或只有 git push 或 git merge),则完全不会发送该仓库的信息。插件会从这台计算机上的会话文件中读取这些信息,并且只读取该仓库的历史记录,不会写入其中。
  • 发生更改的文件,以 diff 形式记录(每个文件最多 300 行;环境变量、密钥和凭据文件、锁文件及构建产物只记录文件名)。插件根据文件名识别环境变量和凭据文件:.env 和 .env.*(不包括 .example、.sample、.dist、.template)、*.env、.envrc、.dev.vars、.npmrc、.netrc、.pypirc、.pgpass、auth.json、credentials*、.git-credentials、id_rsa 和其他 SSH 密钥、.ssh/ 下的任何文件、*.pem、*.key、*.p12、*.pfx、*.jks、*.keystore、kubeconfig、.kube/config、.docker/config.json、secrets.yml/.yaml/.json/.toml、*.tfvars、*.tfstate、*.tfstate.backup、.terraformrc、.htpasswd、application_default_credentials.json、local.settings.json、.vault-token、.s3cfg、.boto、*.kdbx、*.gpg、*.ovpn。会话也不会保留这些文件的任何内容:读取、搜索或编辑其中某个文件的工具调用(Read、Grep、提及该文件的 Bash 或 PowerShell 命令;在 Codex 中,还包括提及该文件的补丁或命令)会将其输出替换为 [content not shown, the file may hold secrets];在 Codex 中,其输入也会被替换。其他名称的文件无法识别,因此请检查预览。在 Claude Code、Cursor 和 Pi 中,插件的 hooks(在 Claude Code 中为 scripts/snapshot.mjs)会在会话开始、每次提示词提交后以及每次回答后运行,并为工作树创建 git 快照:在 ~/.keepplain/snapshots/ 中使用临时索引,记录已跟踪的更改和不超过 1 MB 的新文件,并在 refs/keepplain/<session> 的 reflog 中链式记录快照树;此 ref 指向你的 HEAD,因此 git log --all 不会列出这些快照。不会触碰你的分支、索引或文件,普通的 git push 也不会发送该 ref。构建步骤会将相邻快照转换为 Agent 在每轮中所做的更改(包括 Bash 和子 Agent)、你在其回答之间手动所做的更改,以及每轮的提交。如果创建快照耗时超过 3 秒,则会在本次会话中关闭快照功能。同一仓库中,超过 14 天的快照及其 ref 会在下次会话开始时删除;运行 keepplain build、keepplain status 或 pre-push hook 时也会删除(参见插件写入仓库的内容)。如果没有 git,或使用 Codex,则 diff 来自 Agent 在会话中自行进行的编辑。
  • 隐私检查可识别的机密信息:密钥、令牌、连接字符串、URL 中的密码、电子邮件地址、公网 IP 地址,以及符合其规则的内部主机名,都会在这台计算机上被替换为 [REDACTED:TYPE],之后才会发送;会话、分支名称和提交标题中的信息也一样。基于模式的检查无法识别未覆盖的内容(明文密码、格式特殊的令牌、你未列出的客户端名称等),这些内容会原样发送:请在发布前检查预览和网站上的草稿。路径中的主目录(C:\Users\you、/Users/you、/home/you)会替换为 ~。预览会按编号和类别列出每项发现,但不会显示其值;--keep=<numbers> 会原样发送指定项,且只会将其 SHA-256 值发送到网站,因此网站自己的第二次检查会跳过这些内容。保留的值会以哈希形式记在 ~/.keepplain/kept.json 中。要在每个会话中隐藏的词语(例如客户端名称或内部服务名称),请写入 ~/.keepplain/privacy.json,格式如下:{"redact": ["Globex", "billing-core"]}。规则与网站自身规则相同(scripts/lib/privacy.mjs,由 KeepPlain 生成),并会使用 test/fixtures/privacy 中的相同案例进行检查。
  • 会话按模型统计的令牌用量(输入、输出、缓存读取和写入),在会话文件精简前统计(对于没有 transcript 的 Cursor,则使用 Cursor 在每次回答后告知 stop hook 的用量)。只记录数量;这些数据会显示在 Build 和团队统计中。
  • 对于分叉的会话(Claude Code、Codex、Pi),会记录其源会话的 ID 和分叉时间,以便网站关联两个 Build。
  • 如果 Agent 在会话中使用了 KeepPlain 库:会记录调用次数以及获取到的 Build slug(最多 20 个)。
  • 使用 share 时,只会发送到 GitHub 的内容:由你的 gh 写入、包含 Build 链接的区块。网站会记录它发布到了哪里(拉取请求或仓库的地址)。开启 share 自动模式时,每小时最多记录一次会话开始所在 GitHub 仓库的 origin 地址。
  • 除会话外:Agent 自行发起的库搜索(简短的任务描述和技术栈;参见Agent 中的库),以及 use,后者只会获取公开的 playbook(Playbooks)。
  • 该令牌可以发起导入并读取库。你可以随时在 Settings 中撤销它。 每次网络调用,以及随其发送的内容:
调用何时发送内容
POST /api/v1/device/codes, /device/tokenlogin程序的名称(Claude Code、Codex、Cursor、Pi 或 KeepPlain CLI)和版本;然后是设备代码。不发送令牌或计算机名称。
GET /api/v1/mewhoami、auto、share auto、预览(用于说明草稿将发送到哪里)令牌。
POST /api/v1/imports, GET /api/v1/imports/{id}你确认后执行 build/send;自动模式精简并经过检查的会话;agent、session_id、client_version、trigger;Git 上下文(GitHub origin、分支、提交标题、哈希和大小、各提交的创建时间及其文件名,以及一个包含你列表中被省略词语的名称);令牌计数;隐私摘要(按类型统计数量、保留值的哈希);space、continues、fork、library(数量及最多 20 个 slug)。令牌。
/mcpAgent 搜索知识库时(在 Pi 中通过 keepplain mcp-call)查询和 Agent 编写的技术栈,以及令牌。绝不发送会话。
/mcp start_session_upload、向其返回的链接发送 PUT、/mcp finish_session_upload你确认后,通过 KeepPlain 连接器在云端会话中执行 build(Web 版 Claude Code)与 POST /api/v1/imports 相同的会话和字段,置于一个 JSON 文件中,并通过一次性链接(15 分钟有效)上传到 KeepPlain 的存储空间(Cloudflare R2,*.r2.cloudflarestorage.com);使用连接器在 claude.ai 上自己的登录信息,绝不使用机器上的令牌。草稿生成后或一天后,网站会删除该文件。
GET /b/<slug>/use/<format>.md、/t/<team>/rules/<stack>.mdusevia=cli、Agent,以及写入时的 write=1。仅在使用团队自己的 Build 或规则时发送令牌。
GET /t/<team>/rules/<stack>.md、/t/<team>/rules/<stack>.json?since=<version>SessionStart(在后台执行,每六小时最多一次)、use --teamvia=hook、带有代码库中版本的 If-None-Match、令牌。仅用于包含团队区块的代码库。
GET /api/v1/rulesSessionStart(在后台执行,每个代码库每小时最多一次)、rules代码库的技术栈(laravel,php)、其 GitHub 所有者(acme,其他主机不发送任何内容)、其文件中已有的团队区块名称、带有上次版本的 If-None-Match;令牌。不发送代码库名称、路径或文件。关闭规则时不会发送。
POST /api/v1/blameblame代码库的项目密钥(对其 origin 地址或路径进行哈希得到)、文件路径,以及该文件每个提交的哈希、该文件在该提交中的名称、提交消息的第一行、其 Agent-Session 尾注,以及该提交和此前该文件提交的创建时间(最多 300 个,每次请求 100 个)。令牌。绝不发送代码。退出登录时不会发送。
GET /api/v1/share、POST /api/v1/share/attachmentsshareBuild 的 slug 或此会话的 id;更改后,拉取请求或代码库的地址。令牌。
PATCH /api/v1/share/settings、GET /api/v1/share/pendingshare auto on|off;启用分享自动模式时的 SessionStart(在后台执行,每个代码库每小时最多一次)开关状态;代码库的 GitHub origin 地址。令牌。
gh pr view、gh pr list、gh pr edit(你的 GitHub CLI)你确认后执行 share --pr;分享自动模式拉取请求的新描述,包含该区块。使用你自己的 GitHub 登录信息:插件无法看到这些信息。
GitHub Releasesupdate,以及终端每日至多一次的后台检查获取发行版的请求,用户代理为 keepplain/<version>;不包含任何关于你或你的会话的信息。
插件读取的凭据

有两种,各自只发送到一个地方:

  • 你的 KeepPlain 令牌。 按以下顺序读取:KEEPPLAIN_TOKEN、Claude Code 中的插件选项 token(sensitive,保存在系统钥匙串中;除非你粘贴令牌,否则为空),或 /keepplain:login 为该站点保存到 ~/.keepplain/credentials.json 的令牌(只有你能读取)。这是 KeepPlain 自己的令牌,只会发送到签发该令牌的 KeepPlain 站点,并在上表所列的调用中作为 Authorization: Bearer … 传递(scripts/keepplain.mjs、scripts/lib/hooks.mjs)。插件的 MCP 服务也以相同方式获取令牌:每次连接时,.mcp.json 都会运行 node <plugin>/scripts/keepplain.mjs mcp-headers,为服务自己的站点(https://keepplain.com/mcp)输出请求头,不会为任何其他站点输出请求头;如果尚未登录,则会输出 {},并由服务提示你通过浏览器登录。
  • 代理的 user:password,如果你的 HTTPS_PROXY(或 HTTP_PROXY、ALL_PROXY,或在 Windows 上通过 Internet Settings 设置的手动代理)中包含此信息。它只会发送到该代理,在隧道建立时作为 Proxy-Authorization 传递(scripts/lib/http.mjs),绝不会发送到 KeepPlain。

不会读取其他任何凭据。你的 GitHub 登录信息仍由 gh 管理,插件会在执行 share 时运行它;.github/workflows 中的 GH_TOKEN 是 GitHub Actions 上发布任务自己的令牌,不会到达你的计算机。桌面应用本身不会读取任何令牌:它运行的是同一个 keepplain。在测试(test/)中,每个令牌都是虚构的(ct_kkkk…),每个主目录都是临时目录。

插件在你的电脑上保留的内容

~/.keepplain(或 KEEPPLAIN_HOME)仅你本人可读取:该文件夹及其中的每个文件夹权限均为 0700,每个文件权限均为 0600(Windows 则通过用户配置文件保持私密)。

文件内容保留时间
credentials.json, login-pending.json每个站点的令牌;等待 Connect 的登录信息直到执行 logout;直到登录结束
auto.json, auto-sessions.json, auto.log自动模式的选择、检测到的会话(路径、大小、时间)、发送的内容直到你更改设置;每个会话在最后一次检测到 14 天后;500 行,且不保留 30 天以前的内容
sent.json你手动发送的会话及其草稿链接90 天
sessions/<id>.jsonClaude Code、Cursor 或 Pi 会话的运行位置,以及会话开始时的 HEAD30 天
cursor/<id>.json, cursor/current/Cursor 钩子记录的内容:每轮的时间、模型、令牌数,以及每个工作区所属的对话。不含文本30 天
snapshots/<id>.json, .indexClaude Code、Cursor 或 Pi 会话的 Git 快照14 天
nudges/Stop 钩子停止读取的位置,以及找到的计数和 slug14 天
kept.json, privacy.json你选择发送的值的哈希;要隐藏的内容直到你编辑
share.json分享自动模式是否开启、上次检查各个仓库的时间、自上次启动以来执行的操作检查记录保留 30 天;备注保留至下一次启动显示
rules.json按仓库(通过其路径)记录:询问过的技术栈和所有者、网站回答的规则文本及时间;以及这台电脑上是否关闭规则每个仓库在其最后一个会话后保留 30 天;开关状态保留至你更改
rules-given.json按会话记录:已提供给提示词的技术栈规则 ID,确保每条规则只提供一次。不含提示词7 天
enable.json, plugin/, update.json, nudge.json, handoff.jsonenable 的回答、其部署的插件、更新检查、建议开关、交接开关和百分比直到执行 disable,或下次执行 enable/update
handoff/<agent>-<id>.md, handoffs/为另一个 Agent 准备的会话摘要;告知会话的限制窗口14 天

预览会写入 <temp folder>/keepplain/<session>.jsonl.gz 和 .json(位于私有文件夹中的私有文件):发送后、你拒绝时(执行 build,或 Agent 构建技能中的 discard 步骤),以及其他情况下预览后 30 分钟,会在下一次运行 keepplain 或下一次会话开始时删除。

插件会在仓库中写入的内容

  • Git hooks 和 Agent-Session trailer:仅当你在该仓库中运行 keepplain enable --git-hooks(或对 enable 的提问回答 yes)时启用。.git/hooks/prepare-commit-msg 和 pre-push 中会写入一段由 # >>> keepplain 和 # <<< keepplain 包围的代码;此后你创建的提交中都会加入该 trailer。运行 disable 会移除这些代码块;已经写入提交的 trailer 会保留在历史记录中。
  • 快照引用(Claude Code、Cursor 和 Pi):每个会话在仓库的 .git 中都有一个 refs/keepplain/<session>,指向你的 HEAD;使用临时索引创建的快照提交位于其 reflog 中(git reflog refs/keepplain/<session>),git gc 会保留它们,而 git log --all 不会查找它们。普通的 git push 不会推送这些引用。14 天后这些引用会被移除(见上文);其对象会留在 .git 中,直到你自己的 git gc 将其清理,插件不会运行该命令。
  • share --readme --write:在 README.md 中的 "Built with AI" 部分,位于 `` 标记之间。不会提交。
  • use --write:技能(.claude/skills/kp-<slug>/SKILL.md 或 .agents/skills/kp-<slug>/SKILL.md),或 CLAUDE.md/AGENTS.md 中的规则块,以及 .keepplain/uses.json:每个 Build、格式、Agent 和路径对应一条记录,包含 Build 的 slug、版本(hash)、格式(skill 或 rule)、Agent(claude、codex、cursor 或 pi)、写入的路径、时间(at),以及团队规则对应的团队和技术栈。仅包含这些信息:不包含用户名或令牌。你可以提交此文件,也可以将其添加到 .gitignore。
  • 在 Agent 各自的文件夹中:仅在运行 keepplain enable 时写入(运行 disable 后会移除):对于 Cursor,会在 ~/.cursor 中写入 hooks、技能和库条目(hooks.json、skills/keepplain-*、mcp.json);对于 Pi,则由 pi install 在 ~/.pi/agent 下的 settings.json 中写入一行 package 配置。

配置

设置项位置默认值
站点地址KEEPPLAIN_URL,或在 Claude Code 中设置插件选项 url(启用插件时会询问)。在 Codex 中,将变量设置在 ~/.codex/config.toml 中:[shell_environment_policy] set = { KEEPPLAIN_URL = "https://…" }。Cursor 的钩子和 Pi 的扩展会获取启动 Agent 时所在环境中的变量https://keepplain.com
令牌/keepplain:login 会为每个站点保存一个令牌;KEEPPLAIN_TOKEN 或 Claude Code 中的插件选项 token(作为机密保存)会覆盖它(适用于 CI,或手动在 Settings 中创建的令牌)无
数据文件夹KEEPPLAIN_HOME~/.keepplain
建议分享使用过该库的会话KEEPPLAIN_NUDGE=0 可在当前 shell 中关闭;keepplain.mjs nudge off 可在此电脑上关闭开启
每个会话中的规则KEEPPLAIN_RULES=0 可在当前 shell 中关闭;keepplain rules off 可在此电脑上关闭开启
接近限制时建议转到另一个 Agent 继续KEEPPLAIN_HANDOFF=0 可在当前 shell 中关闭;keepplain handoff off 可在此电脑上关闭;keepplain handoff <percent> 或 KEEPPLAIN_HANDOFF_AT 可更改百分比开启,阈值为 90%
代理HTTPS_PROXY(站点使用 http:// 时用 HTTP_PROXY,两者都使用时用 ALL_PROXY),要直接连接的主机用 NO_PROXY。小写名称也有效。代理可以是 http:// 或 https://,如需身份验证,可使用 user:password@;也支持 SOCKS5 代理(socks://、socks5://、socks5h://)。在 Codex 中,如果变量未传递给插件,请按上文所示将其添加到 set 中无:直接连接

在 Windows 上,如果未设置代理变量,CLI 和 Agent 钩子会在每次请求前从 Internet Settings 读取已启用的手动代理。支持共享代理和按协议配置的 HTTP/SOCKS5 代理、ProxyOverride 通配符、端口和 ;环回地址仍直接连接。禁用 ProxySettingsPerUser 策略时,会使用计算机范围的设置。显式设置的代理变量和 NO_PROXY 优先级更高。读取设置时,每次注册表查询的超时时间为两秒;设置缺失或无法读取时会直接连接。配置的代理不可用时会报错,不会重试直接连接。CLI 不会执行 PAC/WPAD 脚本;此类网络请使用显式代理变量,或使用桌面应用的 Chromium 解析器。

Node 自带的 fetch 会忽略代理变量,因此插件会自行建立代理的 CONNECT 隧道。某些网络会在直连站点传输首个 16 KB 后重置连接,导致 whoami 可以正常运行,但无法上传;在这种情况下,代理才能让会话成功传出。

脚本会从 Claude Code 自己的 settings.json(pluginConfigs)读取 url 选项。它不会依赖技能中的 ${user_config.url} 或 CLAUDE_PLUGIN_OPTION_* 变量:测试时,桌面应用没有展开该占位符,而且变量也没有传递给模型运行的命令。

支持、隐私和许可证

  • 问题和故障:发送邮件至 [email protected],或在此代码库中提交问题。隐私和安全报告:发送邮件至 [email protected]。
  • KeepPlain 存储哪些内容及其原因:隐私政策。网站使用规则:条款。
  • 插件发送内容的所有位置都列在哪些内容会离开你的设备中;插件只会与 KeepPlain、用于上传云端会话的 KeepPlain 自有存储、你分享时通过自己的 gh 连接的 GitHub,以及用于更新的 GitHub Releases 通信。
  • 插件代码采用 MIT 许可证(见 LICENSE)。

开发

npm test                              # node --test, no dependencies
claude plugin validate . --strict
claude --plugin-dir .                 # try it in a real session
npm run build                         # dist/keepplain-<platform>-<arch>, needs Bun
npm run test:binary                   # the command and hook tests again, on that file

这个单文件是使用 bun build --compile 编译的同一组脚本(scripts/build.mjs):keepplain.mjs 是入口,钩子通过 keepplain hook <claude-code|codex|cursor|pi> <session-start|prompt|stop|session-end> 运行(scripts/lib/hooks.mjs;hooks/hooks.json 中的脚本调用相同代码)。enable 布置的插件由此仓库中的技能和清单构成,并打包进该文件(scripts/lib/plugin.mjs):Claude Code 的钩子采用 exec 形式(command 和 args,不使用 shell),Codex 的钩子和技能在 Windows 上面向 PowerShell(& '…'),在其他平台上面向 sh;MCP 的 headersHelper 面向 Windows 上的 cmd.exe;Pi 的扩展中写入了程序;Cursor 的技能和钩子在 Windows 上面向 PowerShell,在其他平台上面向 sh。Pi 的扩展是 pi/extensions/keepplain.js,Cursor 的技能是 cursor/skills/*/SKILL.md(在 enable 布置之前,脚本文件夹使用 <plugin>);npm test 会预加载 test/isolate.mjs,将 Cursor 和 Pi 的文件夹指向一个临时目录,因此测试不会读取或写入真实文件夹。node scripts/build.mjs all 会构建所有平台的版本:Linux x64 和 arm64、macOS x64 和 arm64、Windows x64。该文件不会读取其运行目录中的 .env 或 bunfig.toml。标记为 keepplain--vX.Y.Z 的版本会在每个平台上构建、测试并签名文件,然后将文件连同 SHA256SUMS 作为发行版发布(.github/workflows/release.yml)。

scripts/lib/slim.mjs、scripts/lib/usage.mjs 和 test/fixtures/slim 根据网站仓库(resources/js/lib/slimSession.ts、resources/js/lib/sessionUsage.ts)生成,因此插件精简会话和统计令牌的方式与网站的上传页面完全一致。请在网站仓库中修改这些文件,然后运行 npm run plugin:sync。

使用的 API:POST /api/v1/device/codes 和 POST /api/v1/device/token(浏览器登录,无需令牌);POST /api/v1/imports(multipart:file、agent(claude-code、codex、cursor 或 pi)、session_id、client_version、可选的 git(commits.shas 与 commits.subjects 并列)、usage、privacy(本地检查按类型脱敏的内容,以及有意保留的值的 SHA-256 哈希,不包含实际值)、continues、fork({"session_id", "at"}:此会话从哪个会话分叉而来,以及分叉时间;截至 at 的行属于原会话)、library({"calls", "slugs"}:Agent 调用知识库的次数,以及它获取到的最多 20 个 Builds 的 slug;未知 slug 会被丢弃)、trigger(manual 或 auto)和 space:personal 或团队 slug;响应会在 space 中说明草稿的去向,在 forked_from 中返回原会话的 Build({slug, title, url},如果尚未发布到网站则为 null);自动发送已发布的会话时会返回 {"status": "skipped"});GET /api/v1/imports/{id};GET /api/v1/me(账户及其团队、各团队的 GitHub 所有者,以及各团队是否要求自动发送),以上请求使用 Authorization: Bearer <token>。MCP 服务位于 /mcp(Streamable HTTP,使用相同令牌;mcp-headers 会为 Claude Code 输出令牌)。错误以 {"error": {"code", "message"}} 的形式返回。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。