Cairn
MCP server that allows AI agents to read and update project progress across different AI coding tools and sessions, maintaining a single source of truth in a PROGRESS.md file.
README
Cairn
跨 AI 编程工具、跨会话的项目进度中枢 —— 每个 agent、每个会话,干活前先读"走到哪了",干完自动堆上新的进度标记。
Cairn 在 ~/.cairn/ 维护一份每项目的 PROGRESS.md,作为 Claude Code / Codex / Cursor 等 AI 编程工具共用的"事实来源"。
- Web Console 把当前任务(NOW)、下一步(NEXT)、里程碑时间线、Todos、各工具的 token / session 用量集中到一个深色仪表盘。
- MCP server 暴露
cairn_read_progress/cairn_write_progress/cairn_add_activity/cairn_mark_milestone等工具,让 agent 一上来就读、干完就写。 - SessionEnd hook(目前覆盖 Claude Code)会话结束时自动追加进度。
- 文件级单一事实源:所有写入落到
PROGRESS.md,没有任何隐藏状态,能git diff看清楚。
当前为 MVP:单工具闭环(Claude Code)已通;Codex / Cursor 走日志扫描 + MCP 读写,未接 SessionEnd hook。详见 路线图。
目录
核心理念
- 进度是文档,不是数据库。
PROGRESS.md用 YAML frontmatter + 几节 Markdown 描述「正在做 / 接下来 / 里程碑 / Todos / 活动流」。AI 工具可以直接读,人也可以直接编辑。 - 跨工具共享同一份记忆。 Claude Code 干一半,明天用 Codex 继续 —— 只要它接了 Cairn MCP,第一件事就是
cairn_read_progress,自然衔接。 - 会话结束自动落账。 SessionEnd hook 抽 transcript 要点写进活动流,不靠用户记得。
- 派生数据隔离。 Token / session 统计放在
db.sqlite里,是缓存,可以随便删 ——PROGRESS.md才是源。
快速上手
需要 Node ≥ 18,推荐 pnpm。
# 克隆并构建
git clone https://github.com/Zrzzzz/Cairn.git
cd Cairn
pnpm install
pnpm build
# 把当前项目接入 Cairn
node dist/cli/index.js init ~/dev/my-project
# 把 Cairn 注册到 Claude Code / Codex / Cursor 的 MCP 配置里
node dist/cli/index.js mcp-install --all
# 启动 Console(默认 http://127.0.0.1:3737)
node dist/cli/index.js serve
打开浏览器访问 http://127.0.0.1:3737,就能看到这个项目和其它已接入项目的进度仪表盘。
需要后台常驻:
node dist/cli/index.js serve -d # daemon 模式
node dist/cli/index.js status # 查看 pid / url
node dist/cli/index.js stop # 停掉后台
CLI 命令
| 命令 | 作用 |
|---|---|
cairn init [path] |
接入项目:写 ~/.cairn/projects/<id>/PROGRESS.md、注入 CLAUDE.md / AGENTS.md / .cursorrules、注册 Claude Code SessionEnd hook |
cairn serve [-p PORT] [--tools ...] [-d] |
启动 Console Web + SSE;--tools 选要扫的工具日志,省略走交互式 |
cairn stop / cairn status |
管理后台 daemon |
cairn hook session-end |
Claude Code SessionEnd 调用:把会话总结追加到当前项目的活动流 |
cairn mcp |
在 stdio 上启动 MCP server,供 agent 接入 |
cairn mcp-install [-t ...|-a] [-s user|project] |
把 Cairn MCP 注册到 Claude Code / Codex / Cursor 的配置里,省略 -t 走交互式 |
cairn mcp-uninstall [-t ...|-a] |
反操作 |
cairn init 关键 flag:
--id <slug>覆盖项目 id(默认从目录名 slugify)--name <name>友好名称--tool claude-code,codex,cursor一次性接入多个工具--no-hook不写 Claude Code 的 SessionEnd hook--force覆盖已有PROGRESS.md
MCP 集成
跑过 cairn mcp-install 之后,agent 在每个新会话开始时应当:
- 调
cairn_list_projects找到当前 cwd 对应的项目(或显式project参数)。 - 调
cairn_read_progress读取 Now / Next / Milestones / Todos。 - 干活过程中用
cairn_add_activity/cairn_mark_milestone回写。
可用工具:
| Tool | 说明 |
|---|---|
cairn_list_projects |
列出已接入项目(带 cwd 命中标记) |
cairn_read_progress |
读 PROGRESS.md(结构化输出 frontmatter + sections) |
cairn_write_progress |
部分更新 Now / Next / Milestones / Todos |
cairn_add_activity |
追加一条活动流 |
cairn_mark_milestone |
把里程碑标成 done / current / blocked / next |
cairn_list_todos |
列出未完成 Todos |
在 CLAUDE.md / AGENTS.md 里建议加这段提醒(cairn init 已自动写入):
## Cairn 进度
本项目接入了 Cairn 跨工具进度中枢。会话开始前,请先通过 MCP 工具
`cairn_read_progress({ project: "<project-id>" })` 读取当前进度。
推进工作后,用 `cairn_add_activity` / `cairn_mark_milestone` / `cairn_write_progress` 回写。
数据布局
~/.cairn/
├── projects/
│ └── <project-id>/
│ └── PROGRESS.md # 单一事实源
├── db.sqlite # 派生缓存:token / session 统计
└── config.json
PROGRESS.md 示例:
---
schema: cairn/v1
id: my-project
name: My Project
repo: ~/dev/my-project
tools: [claude-code, codex]
last_activity: 2026-06-19T20:11:00.000Z
created: 2026-06-18T09:30:00.000Z
---
## Now
把仪表盘的数据抓取从 fetch 换成 SWR + suspense
## Next
迁移登录页 · 灰度 10% 用户
## Milestones
- [x] 设计系统 — 6/02
- [x] 认证流 — 6/10
- [~] 仪表盘 — 进行中
- [ ] 上线
## Todos
- [ ] 设计 token 颜色梳理 <!-- src:web 2026-06-19 -->
- [x] 接通 SSE 实时刷新
## Activity
- 2026-06-19T20:11:00.000Z · claude-code · 把 ProjectCard 重写为时间线版
db.sqlite 只是用来撑仪表盘的派生数据,删了 cairn serve 下一次扫描会重建。
架构
┌───────────────────────────────────────────────────────────┐
│ ~/.cairn/projects/<id>/ │
│ PROGRESS.md │ <- 单一事实源
└────^──────────────────────────────────────^───────────────┘
│ 文件监听 (chokidar) │ 读 / 写
│ │
┌────┴──────────────┐ ┌──────────────────┴──────────────┐
│ cairn serve │ │ cairn mcp (stdio) │
│ · Hono + SSE │ │ · Claude Code / Codex / Cursor │
│ · React Console │ │ · cairn_read_progress 等 │
└────────^──────────┘ └─────────────────────────────────┘
│ HTTP / SSE
│
浏览器 Dashboard
- 后端:
src/web用 Hono 起 HTTP 服务,文件变更走 chokidar → SSE 推到前端。 - MCP server:
src/mcp走@modelcontextprotocol/sdk的 stdio transport。 - 派生统计:
src/core/jsonl.ts/codex.ts/cursor.ts定时扫各工具的本地 transcript,把 token / session 聚合写入db.sqlite。 - 前端:
ui/是独立的 Vite + React 工程,构建产物被cairn serve直接 mount。
开发
pnpm install
# 前端热更(默认 http://localhost:5173)
pnpm dev:ui
# 后端 + MCP 热更
pnpm dev:server
# 一键类型检查
pnpm typecheck
# 全量构建
pnpm build
代码组织:
src/
├── cli/ # cairn 子命令:init / serve / hook / mcp / mcp-install ...
├── core/ # 进度文件解析、文件监听、各 AI 工具日志扫描
├── hook/ # SessionEnd hook 实现
├── mcp/ # MCP server + tools
├── shared/ # 前后端共享类型 (api.ts)
└── web/ # Hono routes + SSE
ui/ # React + Vite 控制台
templates/ # PROGRESS.md / CLAUDE.md / AGENTS.md / .cursorrules 模板
scripts/ # 构建辅助
详细贡献流程见 CONTRIBUTING.md。
路线图
- [x] PROGRESS.md schema + 解析器
- [x] CLI
init/serve/mcp/mcp-install - [x] React Console(时间线 / 当前任务高亮 / 工具筛选 / 搜索)
- [x] Claude Code SessionEnd hook
- [x] Claude Code / Codex / Cursor 日志扫描
- [ ] Codex / Cursor 的"会话结束"等价 hook
- [ ] 多项目里程碑联动视图
- [ ] 远程 Console(认证 + 多用户)
- [ ]
PROGRESS.mdschema 版本号兼容机制
贡献
欢迎 issue / PR。开始之前请读一下 CONTRIBUTING.md 和 行为准则。
License
MIT © 2026 Zrzzzz
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。