Files
multica/docs/docs-outline.md
David Zhang 8ba1ef2dce MUL-3319: Update Codex and Cursor resume docs
Update provider documentation to reflect working Codex and Cursor session resumption.
2026-06-16 16:48:18 +08:00

913 lines
46 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Multica Docs 执行大纲
> 这份是**执行文档 + 协作 tracker**。每篇文档都有独立条目,委派出去的人直接在对应条目里认领、更新状态。
>
> 战略思路(产品定位、读者画像、设计原则、视觉方向)保留在 [`docs-rewrite-plan.md`](./docs-rewrite-plan.md)。
>
> **语言**:只写中文版。英文版暂不做。
> **V1 目标**25 篇覆盖所有核心功能。v2 留 24 篇深度/边缘内容 pending。
---
## 一、协作规则(接手任何一篇前必读)
### 1.1 写作守则(硬约束)
1. **源码优先**:每一条事实陈述必须能在源码里找到对应位置。不能从"产品宣传册"、"直觉"、"上一版本的文档"或"记忆"出发。
2. **代码里没有的功能一律不写**。即使 UI 疑似有、DB 有字段、handler 有接口但 service 层无真实读写逻辑,都视为"未实装"。遇到边界不确定的情况,标 ⚠️ 让 reviewer 再看一眼,不要硬写。
3. **下笔前先读源码验证本文件里的"写什么"清单**。这个清单是指引,不是真相。可能已过时、可能当时调研就不准。
4. **跨篇共通事实集中写**(例如 10 provider 矩阵写在 §4.3 Providers Matrix其他篇 cross-link 过去),避免同一事实分散在多篇里。
5. **服务于产品定位**Multica 的核心差异化是 **"BYO-agent 的 Linear—— agent 跑在你自己的机器,你掌控计算和 provider 选择"**。每篇的语气和深度都应该为这个叙事服务。
6. **为目标读者写**。不同读者期待不同深度。P0 新用户不关心 SQL 字段P1 开发者愿意看架构图P2 agent 读者需要命令自包含能复制。
7. **v1 认领优先**:先把 v1 的 25 篇 ship 出去,再开 v2。
### 1.2 目标读者分级
| 级别 | 读者 | 期待 |
|---|---|---|
| P0 | 新用户 / Evaluator | "这是啥5 分钟跑起来" |
| P0 | 自托管运维 | "怎么部署?出问题怎么查?" |
| P1 | 团队管理员 / Workspace owner | "怎么配 agent管权限设 routines" |
| P1 | 重度 CLI / 开发者用户 | "CLI 全集?架构细节?" |
| P2 | Agent 本身(被人类指向某页)| "每步命令要完整、可独立复制执行" |
### 1.3 状态码
- ⬜ Not started
- 🔍 Source research正在读源码验证
- ✍️ Drafting正在写初稿
- 👀 In review待 review
- ✅ Shipped
### 1.4 Flag只在需要决策时填
- 🤔 **Propose merge/drop** —— 认领后读源码发现这篇独立成页价值低,写一行理由,@ ownerNaiyuan决策。
### 1.5 分工流程
1. **认领**:把 `Owner` 改成你的名字,`Status` 改成 🔍
2. **读源码**:用本条目的 "Source files" 作为起点,扩展看相关代码
3. **验证"写什么"清单**:发现过时/缺失/错误,直接改这个条目
4. **写初稿**`Status` 改成 ✍️
5. **提 review**`Status` 改成 👀,发消息 @ reviewer
6. **交付**`Status` 改成 ✅
### 1.6 每篇目标字数
| 页面类型 | 字数范围 | 理由 |
|---|---|---|
| Concept 页§2-§6 多数)| 800-1500 字 | 讲清一个概念 + 示例 + 关联 |
| Quickstart / Tutorial§1.3-§1.4 / §2.1| 500-1200 字 | 命令优先,解释从简 |
| Reference 页§4.3 / §7-§8 多数)| 1000-2500 字 | 对照表 / env 清单 / 命令 cheatsheet信息密度高 |
| Overview / Welcome§1.1| 300-600 字 | 定位 + 导航,不展开 |
**原则**:写到目标字数上限还没写完,说明该拆页或该压缩;写到下限还不够,说明内容薄,考虑合并。
### 1.7 Review Checklist提 review 前自查)
- [ ] 每条事实陈述都能在 Source files 里找到对应代码位置
- [ ] 所有代码示例shell / CLI可以独立复制、独立运行不依赖"把上面那个替换一下"
- [ ] 术语和其他页一致workspace / agent / runtime / daemon / task / skill / routine
- [ ] 所有 cross-link 指向的目标页存在(不是死链)
- [ ] 字数在目标范围内
- [ ] 本条目"不写"清单里的字段没被写进去
- [ ] 没有从记忆或旧文档复制过来的未验证事实
### 1.8 MDX 样例模板
> 这是 §2.3 Issues 的 mdx skeleton用来统一标题层级 / callout / code block / cross-link 风格。所有 v1 文档按这个骨架写。
```mdx
---
title: Issues
description: Issue 是 Multica 的核心工作对象——人和 agent 都能被分配、评论、改状态。
---
# Issues
## 什么是 Issue
Issue 是 Multica 的核心工作对象……1-2 段话说清楚"是什么"
## 关键概念
### Polymorphic Assignee
Issue 的 assignee 可以是 member或 agent。这是 Multica 和传统 task manager
最重要的区别——**agent 是 first-class assignee**。
<Callout type="info">
分配给 agent 会**立即**入队一个 task。详见 [Tasks](/docs/tasks)。
</Callout>
### 状态Status
| Status | 含义 | 默认 |
|---|---|---|
| backlog | 还没规划 | ✓ |
| todo | 准备开工 | |
| in_progress | 正在做 | |
| ... | ... | |
**注意**:状态转换无强制约束——任意状态可以直接互转。
## 操作
### 创建 IssueCLI
```bash
multica issue create \
--title "Fix login bug" \
--assignee @alice
```
### 分配给 Agent触发自动执行
```bash
multica issue assign <issue-id> --agent <agent-slug>
```
分配给 agent 时Multica 会立刻入队一个 task 到对应 runtime。详见
[Assigning Issues to Agents](/docs/assign-agents)。
## 删除和级联
删除 issue 会级联删除:
- 所有评论 / reactions硬删除
- 该 issue 上 queued / dispatched 的 task取消
- 附件(异步清理 S3
## Related
- [Comments](/docs/comments)
- [Projects](/docs/projects) —— Issue 的容器
- [Assigning Issues to Agents](/docs/assign-agents)
- [Tasks](/docs/tasks)
```
**关键约定**
- **Callout**`<Callout type="info|warning|tip">...</Callout>`。warning 用于陷阱如固定测试验证码info 用于补充说明tip 用于最佳实践
- **代码块**shell 命令用 \`\`\`bash配置用 \`\`\`yaml / \`\`\`envJSON 用 \`\`\`json
- **Cross-link**:用 markdown 链接 `[显示文字](/docs/page-slug)`,不要写成 "详见 Tasks 章节"
- **表格**:有 3 行以上对照才用表格,不要 1-2 行也用
- **标题层级**H1 只能一个(等于页面 titleH2 是主要分段H3 是小节
---
## 二、版本规划
### V125 篇,第一次 ship
覆盖所有核心功能,让新用户能"5 分钟懂产品 + 10 分钟跑起来 + 30 分钟用上 agent"。
### V224 篇 Pending
深度 reference / 开发者向 / 高级部署。等 v1 ship + 用户反馈后再补。
### V1 篇目清单
| 板块 | V1 篇数 | V2 推迟篇数 |
|---|---|---|
| 1. Welcome & Quickstart | 4 | 0 |
| 2. Workspace & Team | 4 | 0 |
| 3. Agents | 3 | 1MCP|
| 4. How Agents Run | 3 | 0 |
| 5. Working with Agents | 4 | 0 |
| 6. Staying Informed | 1 | 2Subscriptions 合并 / Realtime|
| 7. Administration | 3 | 5Self-Host Overview / Docker Compose / Storage / Email / Upgrading / Signup Controls|
| 8. Reference | 3 | 13CLI 各子命令详细页)|
| **合计** | **25** | **24** |
---
## 三、大纲概览v1 导航)
| # | 板块 | 定位 | 篇数 |
|---|---|---|---|
| 1 | [Welcome & Quickstart](#板块-1welcome--quickstart) | 这是什么 + 5 分钟跑起来 | 4 |
| 2 | [Workspace & Team](#板块-2workspace--team) | 人能理解的部分Linear-like | 4 |
| 3 | [Agents](#板块-3agents) | 引入 agent 这个新物种 | 3 |
| 4 | [How Agents Run](#板块-4how-agents-run) | 执行架构daemon / runtime / task / providers | 3 |
| 5 | [Working with Agents](#板块-5working-with-agents) | **4 种触发方式——产品核心特色** | 4 |
| 6 | [Staying Informed](#板块-6staying-informed) | Inbox + Subscriptions | 1 |
| 7 | [Administration](#板块-7administration) | Env / Auth Setup / Troubleshooting | 3 |
| 8 | [Reference](#板块-8reference) | CLI / Tokens / Desktop | 3 |
---
## 板块 1Welcome & Quickstart
### 1.1 Welcome — 👀 In review [v1]
- **Source files**: `README.md`, `docs/docs-rewrite-plan.md`(定位段), `apps/docs/content/docs/index.mdx`(现状)
- **目标读者**: P0 新用户 / evaluator第一次听说 Multica
- **叙事位置**: 第一页。定义整个产品。读完应该能回答"这是啥"。
- **Punch line推荐**: **"Your agents, your machine, your backlog."**
> The task manager where AI teammates run on your own laptop.
- **写什么**300-600 字):
- Punch line + 副标题
- 三段展开:
1. Agent 是 first-class能被分配 / 评论 / 改状态 / 作为 project lead
2. Agent 跑在你自己的 daemon 上——你掌控计算和 API key
3. Provider-agnostic支持 Claude Code / Codex / Cursor CLI / Copilot 等 10 种
- 一句借势:"Speaks MCP natively. Compatible with Anthropic Agent Skills."
- 3 种部署形态导航Cloud / Self-Host / Desktop
- **不写**:
- 不用 "AI-native"(已贬值)
- 不用 "autonomous"(撞 Autopilot 大军)
- 不暗示对标 Devin分类不同
- 架构细节(下一页)
- **写前要验证**: 产品定位文案和团队当前 positioning 是否一致
- **⚠️ 动笔前必读**:
- 不要写"human + AI agent first-class"——Linear 2026 CEO 已宣布 "issue tracking is dead",这叙事不再独特
- 真正独特点:**本地 daemon + BYO provider**SaaS 结构性做不到)
- 不超过 600 字。这是 landing page不是说明书
- **Owner**: Claude
- **Flag**:
- **交付位置**: `apps/docs/content/docs/index.mdx`v1 暂平铺,未迁 `zh/`
### 1.2 How Multica Works — ⬜ Not started [v1]
- **Source files**: `server/cmd/multica-daemon/`, `packages/core/`, 战略 plan 的"产品定位"段
- **目标读者**: P0 新用户(想先建立心智模型再动手)
- **叙事位置**: 第二页。一张大图把 User / Issue / Agent / Runtime / Daemon / Task / Trigger 串起来。
- **写什么**800-1200 字 + 一张架构图):
- 一张架构图Mermaidserver ↔ 你的 daemon ↔ 你的 provider CLI
- 三段话解释:
1. Server 维护 workspace / issue / agent 元数据
2. Daemon 跑在你的机器上poll server 领任务、调本地 provider CLI、汇报结果
3. 4 种触发方式让 agent 开工(导到 §5 各篇)
- **不写**: API 细节、具体 provider 差异
- **写前要验证**: 架构图反映最新代码(有没有新组件)
- **⚠️ 动笔前必读**:
- 这页灵魂是**架构图**。图画不好等于没写
- 图里每个 box 点进去能到后续哪一篇cross-link 要全)
- **Owner**:
### 1.3 Quickstart (Cloud) — ⬜ Not started [v1]
- **Source files**: `apps/docs/content/docs/cloud-quickstart.mdx`(现有), `server/cmd/multica/cmd_setup.go`, `cmd_login.go`, `cmd_agent.go`, `cmd_issue.go`
- **目标读者**: P0 新用户(想 5 分钟跑起来)
- **叙事位置**: 第三页。
- **写什么**600-1000 字):
- Signup → install CLI → `multica login``multica setup cloud` → 创建第一个 agent → 创建第一个 issue → 分配给 agent → 看它工作
- 每步命令可独立复制运行
- 末尾一句:"如果你想用 desktop app参见 [Desktop App](/docs/desktop-app)"
- **不写**: self-host下一篇、daemon 深入配置
- **写前要验证**: `cmd_setup.go` 真实 flow各命令最新 flag
- **⚠️ 动笔前必读**:
- 时间承诺5 分钟。如果步骤超过 5 分钟,减步骤或老实写更长
- 每条命令要可复制运行
- **Owner**:
### 1.4 Quickstart (Self-Host) — ⬜ Not started [v1]
- **Source files**: `Makefile`selfhost target, `docker-compose.selfhost.yml`, `.env.example`, `server/cmd/multica/cmd_setup.go`
- **目标读者**: P0 self-host 评估者
- **叙事位置**: Cloud Quickstart 的姐妹篇。
- **写什么**800-1200 字):
- `make selfhost` vs `make selfhost-build` 差异
- 自动生成 JWT_SECRET
- Migration 启动自动执行(**zero-touch upgrade** 是卖点)
- 第一次启动后 `multica setup self-host`
- 最小可行配置(必填 env
- **⚠️ 提醒 `APP_ENV=production` 的陷阱**(详细讲在 §7.2
- **不写**: 完整 env 表§7.1、Storage/Email 进阶配置v2
- **写前要验证**: `selfhost` vs `selfhost-build` 实际差异
- **⚠️ 动笔前必读**:
- 目标 10 分钟跑起来。超时就砍步骤
- 不和 §7 Administration 写重复:这里是 happy path§7 是 reference / 排错
- **Owner**:
---
## 板块 2Workspace & Team
> **板块叙事**:先讲"人的世界"——和 Linear 基本同构的部分。让读者在熟悉的土壤上建立心智,为板块 3 引入 agent 做铺垫。
### 2.1 Workspaces — ⬜ Not started [v1]
- **Source files**: `server/internal/handler/workspace.go`, `server/pkg/db/queries/workspace.sql`, `server/migrations/001/006/020`, `server/internal/validation/workspace.go`slug + reserved 列表)
- **目标读者**: P0 新用户、P1 团队管理员
- **叙事位置**: 板块 2 第一篇。定义"你在哪工作"。
- **写什么**800-1200 字):
- Workspace = 多租户边界(所有查询按 workspace_id 过滤)
- Slug 约束(正则 `^[a-z0-9]+(?:-[a-z0-9]+)*$` + reserved 列表)
- Issue prefix2-5 大写字符)+ issue counter per-workspace 自增
- Workspace context 字段(给 agent 读的 workspace-level 上下文)
- 硬删除级联
- **不写**: 创建 workspace 的 desktop/web UI 细节
- **写前要验证**:
- Slug 正则现值
- Reserved slug 完整列表
- Context 字段是不是真的被 agent 读(确认用途)
- **⚠️ 动笔前必读**:
- Reserved slug 列表给代码引用链接,不手写(代码会演进)
- Context 字段如果用途不明就标 ⚠️ 问清楚再写
- **Owner**:
### 2.2 Members & Roles — ⬜ Not started [v1]
- **Source files**: `server/internal/handler/invitation.go`, `workspace.go`member 部分), `server/pkg/db/queries/invitation.sql`, `server/migrations/041`
- **目标读者**: P1 团队管理员
- **叙事位置**: Workspace 之后。
- **写什么**1000-1500 字):
- 三级权限矩阵owner / admin / member—— 用表格
- **邀请双路径**`CreateInvitation` vs `CreateMember`
- 邮箱自动创建(邀请不存在邮箱时)
- **至少保留 1 owner 约束**
- 角色提升约束(非 owner 不能邀请为 owner
- 7 天邀请有效期
- **不写**: 邮件模板内容、OAuth§7.2
- **写前要验证**: 权限矩阵每行对应 handler邀请有效期邮件失败行为
- **⚠️ 动笔前必读**: 权限矩阵表 + 邀请流程图是必需的
- **Owner**:
### 2.3 Issues & Projects — ⬜ Not started [v1]
> **合并说明**Project 在代码里非常薄9 字段),合并进 Issues 一页讲。用"Project 作为容器"一节处理。
- **Source files**:
- Issues: `server/internal/handler/issue.go`, `server/pkg/db/queries/issue.sql`, migrations 001/015/017/018/020/050
- Projects: `server/internal/handler/project.go`, `server/pkg/db/queries/project.sql`
- **目标读者**: P0 新用户、P1 团队管理员
- **叙事位置**: 核心工作对象。
- **写什么**1500-2000 字):
- **Issues 部分**:
- Polymorphic assigneemember/agent/null——第一次正式提"可以分配给 agent"
- Status 枚举backlog/todo/in_progress/in_review/done/blocked/cancelled**无强制 FSM**
- Priority / Label / Subscription / Reaction / Dependency / Bulk 操作
- Issue number per-workspace 自增
- Comment reply 树、@mention
- 删除级联
- **Projects 部分**(末尾一节):
- 9 字段、polymorphic leadmember/agent
- Issue 关联project_id 可 NULL
- 删除 project 不删 issue只把 project_id → NULL
- **不写**(源码未实装):
- `acceptance_criteria` JSONB无读写
- `context_refs` JSONB无读写
- **写前要验证**:
- Status / Priority 枚举真实值
- Label color 格式
- `position``first_executed_at` 确实在用(⚠️ 旧 plan 误说未实装)
- **⚠️ 动笔前必读**:
- 字数在 1500-2000 之间;超出就拆 Projects 回独立页
- 第一次提"agent 可以是 assignee"**不要展开 agent 机制**(板块 3 讲)
- **Owner**:
### 2.4 Comments — ⬜ Not started [v1]
- **Source files**: `server/internal/handler/comment.go`, `server/pkg/db/queries/comment.sql`, migrations 017/018, `server/cmd/server/notification_listeners.go`mention 解析)
- **目标读者**: P0 新用户、P1 重度用户
- **叙事位置**: 板块 2 最后一篇。用 @agent 为板块 5 铺垫。
- **写什么**800-1200 字):
- Comment 创建 / 编辑 / 删除(作者 = member 或 agent
- Reply 树parent_idCASCADE
- @mention member 或 agent
- **⚠️ @all 展开到全 workspace member**(误用会炸 inbox
- Emoji reaction
- Mention dedup**单 comment 内生效**
- **不写**: @agent 触发 task 的机制§5.2 讲)
- **写前要验证**: mention dedup 作用域
- **⚠️ 动笔前必读**:
- 板块 2 到板块 5 的桥梁,末尾预告"评论里 @agent 能触发任务,详见 [Mentioning Agents](/docs/mentioning-agents)"
- @all 警告必须醒目
- **Owner**:
---
## 板块 3Agents
> **板块叙事**:新物种登场。读者已经理解 workspace/issue/project/comment 之后,正式引入 agent。重点agent 是 first-class 团队成员。
### 3.1 What is an Agent — ⬜ Not started [v1]
- **Source files**: `server/internal/handler/agent.go`, `server/pkg/db/queries/agent.sql`, migrations 001, `server/cmd/server/notification_listeners.go`"agent 不收 inbox" 过滤)
- **目标读者**: P0 新用户(第一次接触 agent 概念)
- **叙事位置**: 板块 3 首篇。用"agent 像人又不像人"建立心智。
- **写什么**1000-1500 字):
- Agent 作为 first-class 成员(可分配 issue / 评论 / 改状态 / project lead
- 和 human 相似点 vs 差异点(对照表):
- 相似:出现在 assignee / commenter / subscriber
- 差异:绑 provider、需要 runtime 在线、**永远不收 inbox**、有 visibilityworkspace / private、可 archive
- **不写**: provider 细节§3.2、skill/MCP§3.3、daemon 机制§4.1
- **写前要验证**: "agent 不收 inbox" 的过滤实现位置visibility 默认值
- **⚠️ 动笔前必读**:
- 这页的灵魂是"和人对比"——用两列对照表最清晰
- 末尾预告:绑 provider 在 §3.2、挂 skill 在 §3.3、真的跑起来在板块 4
- **Owner**:
### 3.2 Creating & Configuring Agents — ⬜ Not started [v1]
- **Source files**: `server/internal/handler/agent.go`, `server/pkg/db/queries/agent.sql`, `packages/views/agents/`, `server/cmd/multica/cmd_agent.go`
- **目标读者**: P1 团队管理员
- **叙事位置**: 怎么创建一个 agent。
- **写什么**1200-1800 字):
- Provider 选择——列主流 5 个Claude Code / Codex / Cursor / Copilot / Gemini+ 提示"完整对比见 [Providers Matrix](/docs/providers)"
- Model静态 vs 动态发现)
- Instructions系统提示词
- **`custom_env`**:⚠️ DB 明文存储,非 owner redact**覆盖而非合并**
- `custom_args`pass-through
- `visibility`workspace / private
- `max_concurrent_tasks`(默认 1
- Archive / restore
- **不写**: skill§3.3、MCPv2 推,在 §3.3 末尾提一句、provider 完整 matrix§4.3
- **写前要验证**: custom_env 明文存储合并策略max_concurrent_tasks 默认
- **⚠️ 动笔前必读**:
- ⚠️ `custom_env` 明文存储必须用 warning block否则用户会把生产 token 扔进去
- Provider matrix 只列 5 个主流,完整表 cross-link 到 §4.3
- **Owner**:
### 3.3 Skills — ⬜ Not started [v1]
- **Source files**: `server/internal/handler/skill.go`, `server/pkg/db/queries/skill.sql`, `server/internal/daemon/execenv/context.go`(各 provider skill 注入路径), `server/cmd/multica/cmd_skill.go`
- **目标读者**: P1 重度用户、P2 agent
- **叙事位置**: 强化 agent 能力。
- **写什么**1200-1800 字):
- **开篇借 Anthropic 比喻**
> "Skill 是 agent 的'员工专业知识'——程序性知识模块MCP 是 agent 的'工具通道'——外部系统连通性。" (引自 Anthropic 官方博客)
- **兼容性宣示**
> "Multica Skill 采用 [Anthropic Agent Skills 开放标准](https://agentskills.io) 的 `SKILL.md` 格式。所有符合该规范的 skill包括 Anthropic 官方仓库、ClawHub、skills.sh 上发布的包)都可以直接导入使用。"
- Skill 文件结构SKILL.md + config + 任意支持文件)
- 来源workspace skill云端vs local skilldaemon 扫描本机)
- 导入:新建 / GitHub / ClawHub / 本机目录
- 挂载到 agentjunction table `agent_skill`
- **10 provider 注入路径矩阵**(或 cross-link §4.3
- Skill 在 task dispatch 时同步
- **⚠️ ClawHavoc 警示**2026-2 曝过 "ClawHavoc" 恶意包事件。ClawHub 已集成 VirusTotal 扫描,但安装第三方 skill 前务必检查 SKILL.md 和附带脚本。
- **末尾一段"Skills vs MCP"**v2 再开 MCP 独立页):
> MCPModel Context Protocol是另一层概念——让 agent 连外部工具(数据库、文件系统、第三方 API。Multica 支持 `mcp_config` 字段,但目前**仅 Claude Code 真实消费**,其他 provider 接收但未传递。详见 v2 的 MCP 专页(开发中)。
- **不写**: skill 内部 DSL不存在、MCP 深入v2
- **写前要验证**:
- 10 provider 路径是否还都对execenv/context.go 最新值)
- Skill 大小限制1 MB/file
- path traversal 检查
- **⚠️ 动笔前必读**:
- 开篇必须用 Anthropic 比喻 + agentskills.io 兼容声明(借势生态最大化)
- ClawHavoc 警示是必写——不警示用户可能装到恶意包
- **Owner**:
---
## 板块 4How Agents Run
> **板块叙事**agent 怎么真的动起来——分布式执行、用户自己跑 daemon。这是 Multica 结构上区别于 Linear/Jira 的关键部分。
### 4.1 Daemon & Runtimes — ⬜ Not started [v1]
> **合并说明**Daemon 和 Runtime 概念耦合紧密runtime = daemon × provider放一页讲更连贯。
- **Source files**:
- Daemon: `server/internal/daemon/daemon.go`, `server/cmd/multica-daemon/main.go`, `server/cmd/multica/cmd_daemon.go`, `server/pkg/db/queries/daemon.sql`
- Runtime: `server/pkg/db/queries/runtime.sql`, `server/internal/handler/runtime.go`, `server/migrations/004`, `server/cmd/server/runtime_sweeper.go`
- **目标读者**: P0 运维、P1 开发者
- **叙事位置**: 板块 4 第一篇。"为什么我的 agent 不工作" 的答疑总枢。
- **写什么**1500-2000 字):
- **Daemon 部分**:
- Daemon = 本地 workerpoll + 执行 + 汇报
- **Heartbeat 15s** / **45s offline**(⚠️ 旧 plan 写错过,必须代码核实)
- Poll 频率 3s
- max_concurrent_tasksdaemon 20 + agent 1双层 gate
- Recover-orphans启动时把 dispatched/running 转 failed
- Legacy daemon_id migrationhostname → UUID 自动迁移)
- 配置优先级CLI flag > config file > env
- CLI`multica daemon install/login/start/stop/status/logs`
- **Runtime 部分**:
- Runtime = daemon × provider
- 唯一约束 `(workspace_id, daemon_id, provider)`
- 自动注册 + 重启复用
- Sweeper 每 30s 扫描7 天 offline 自动删除
- **不写**: provider 执行细节§4.3、task 状态机§4.2
- **写前要验证**:
- ⚠️ Heartbeat 是 15s 不是 30s
- ⚠️ Offline 阈值是 45s 不是 75s
- Sweeper 间隔 + 自动删除阈值
- **⚠️ 动笔前必读**:
- 旧 plan 的 heartbeat / offline 数字是错的,认领者必须代码级核实
- 这页是 support 减压神器,写好能避免大量"agent 不工作"咨询
- Runtime 概念反直觉,建议用图:一个 daemon 可以有多个 runtime每 provider 一个)
- **Owner**:
### 4.2 Tasks — ⬜ Not started [v1]
> **合并说明**:原 §5.5 Rerun 合并进来作为最后一节。
- **Source files**: `server/internal/service/task.go`, `server/pkg/db/queries/task.sql`, `server/internal/handler/task.go`, `task_lifecycle.go`, `runtime_sweeper.go`timeout
- **目标读者**: P0 新用户、P1 开发者
- **叙事位置**: runtime 之后。一个 agent 的"一次工作" = 一个 task。
- **写什么**1500-2200 字):
- 状态机queued → dispatched → running → completed/failed/cancelled
- `session_id` mid-flight pinning
- `attempt` / `max_attempts`(默认 2
- **Retryable reasons**runtime_offline / runtime_recovery / timeout
- **Non-retryable**agent_error / 手动失败
- **自动重试仅对 issue-sourced 和 chat-sourced**——**Routines 任务不自动重试**
- **Dispatch timeout 5min / Running timeout 2.5h**
- Priority 来源issue priority / chat 硬编码 2 / routine priority
- Per-issue serialization
- **Rerun**(最后一节):
- 入口UI / CLI
- 行为cancel 当前 active 任务 → 新 task继承 session_idattempt 重置为 1
- vs auto-retry系统自动的区别
- **不写**: 触发入口详情§5 每篇讲一种、provider session resume§4.3
- **写前要验证**: max_attempts 默认timeout 数值retryable reasons 清单
- **⚠️ 动笔前必读**:
- 用状态机图Mermaid
- ⚠️ Routines 任务不自动重试、chat priority 硬编码 = 2这两条容易漏
- Retryable vs non-retryable 用表格
- **Owner**:
### 4.3 Providers Matrix — ⬜ Not started [v1]
- **Source files**: `server/pkg/agent/*.go`10 个 provider 文件), `server/internal/daemon/execenv/context.go`skill 路径)
- **目标读者**: P1 重度用户(选 provider
- **叙事位置**: 板块 4 最后一篇。10 provider 能力大表。
- **写什么**1500-2500 字):
- **分组列出**(不按字母序):
- **新手首选**Claude Codefeature-complete/ Codex主流替代
- **商业主流**Cursor / Copilot / Gemini
- **ACP 生态**HermesNous Research/ KimiMoonshot AI
- **开源替代**OpenCodeSST/ Piminimalist/ OpenClaw
- **大对照表**:
| Provider | 厂商 | Session Resume | MCP | Skill 注入路径 | custom_args | 备注 |
- 每个 provider 一小段80-150 字):核心定位 + 用户画像 + 官网链接 + Multica 兼容性
- **Session resume 精确现状**:
- ✅ 真用Antigravity / Claude / Codex / Copilot / Cursor / Hermes / Kimi / Kiro CLI / OpenCode / OpenClaw / Pi
- ❌ 不支持Gemini
- **不写**: provider 官方使用文档外链、MCP 协议本身
- **写前要验证**:
- 认领者**必须逐个打开 `server/pkg/agent/*.go`** 确认
- Session resume 实现细节flag vs thread API
- 新 provider 加入 / 旧 provider 删除
- **⚠️ 动笔前必读**:
- ⚠️ 这是最容易过时的一页provider 代码频繁变动
- 精确到 "代码里这个 flag 传给这个 CLI" 级别,不模糊说"支持"
- Codex fallback 语义必须明确:`thread/resume` 可用,但 stale / missing thread 会回退到 fresh thread
- **Owner**:
---
## 板块 5Working with Agents
> **板块叙事**这是产品最有特色的部分。4 种触发方式对应不同协作场景。
>
> **板块开头必须加 intro**4 种方式的对比表,让读者一页看懂再点进去细节。
>
> | 方式 | 何时用 | 是否自动重试 | Session 复用 | Priority 来源 |
> |---|---|---|---|---|
> | [Assignment](/docs/assign-agents) | 最常见;分配 issue | ✓ | ✓ | issue priority |
> | [Mention](/docs/mentioning-agents) | "帮我看下这条" | ✓ | ✓ | issue priority |
> | [Chat](/docs/chat) | 独立对话,不绑 issue | ✗ | ✓ | hardcoded=2 |
> | [Routines](/docs/routines) | 定时 / 自动触发 | ✗ | ✓ | routine priority |
### 5.1 Assigning Issues to Agents — ⬜ Not started [v1]
- **Source files**: `server/internal/handler/issue.go`UpdateIssue assign, `server/internal/service/task.go``EnqueueTaskForIssue`
- **目标读者**: P0 新用户
- **叙事位置**: 最常见触发方式。
- **写什么**600-1000 字):
- UIissue 详情页选 agent as assignee
- CLI`multica issue assign <id> --agent <agent-slug>`
- 分配后立刻入队 task
- Private agent 仅 owner/admin 可分配
- 取消分配:**不自动取消订阅**
- Per-issue serialization
- **不写**: task 内部机制§4.2、subscription§6.1
- **写前要验证**: `EnqueueTaskForIssue` 最新逻辑
- **⚠️ 动笔前必读**: 最常见触发——尽可能简洁;旧 assignee 不自动取消订阅要说明
- **Owner**:
### 5.2 Mentioning Agents in Comments — ⬜ Not started [v1]
- **Source files**: `server/cmd/server/notification_listeners.go`mention 解析), `server/internal/service/task.go``EnqueueTaskForMention`, `subscriber_listeners.go`(防自触发)
- **目标读者**: P0 新用户、P1 重度用户
- **叙事位置**: 第二种触发。"这个 agent 帮我看一下"。
- **写什么**800-1200 字):
- 在 comment 里 `@agent-slug`
- 触发:`EnqueueTaskForMention`,带 `trigger_comment_id`
- **Dedup 按 agent**(不同 agent 可以被并行 @
- **防自触发 guard**`HasAgentCommentedSince`
- 和 assignment 的区别:不改 assignee、不改 status、task 带 trigger_comment_id
- **不写**: inbox mention 通知§6.1)、@all§2.4
- **写前要验证**: 防自触发 guard 条件dedup 作用域
- **⚠️ 动笔前必读**: 用真实场景开头("你想让 X agent 分析一下这条 issue"
- **Owner**:
### 5.3 Chat — ⬜ Not started [v1]
- **Source files**: `server/internal/handler/chat.go`, `server/pkg/db/queries/chat.sql`, `server/internal/service/task.go``EnqueueChatTask`, `packages/views/chat/`
- **目标读者**: P1 重度用户
- **叙事位置**: 第三种触发。"直接和 agent 对话,不绑 issue"。
- **写什么**1000-1500 字):
- Chat session = agent × user × workspace 独立对话
- 发消息 → `EnqueueChatTask`(无 issue_id
- Session 复用session_id + work_dir COALESCE 持久化)
- **⚠️ 完全沙盒**chat 里的 agent **不能发 comment 到 issue**
- Priority 硬编码 = 2**不自动重试**
- Session 软删除(`status='archived'`
- **不写**: provider 层 session 机制§4.3
- **写前要验证**: chat vs issue comment 隔离性unread_since 用途
- **⚠️ 动笔前必读**:
- "沙盒"是 chat 最重要的产品语义,不说清用户会误以为 chat agent 能动 issue
- 和 §5.2 mention 的区别要对比清楚
- **Owner**:
### 5.4 Routines — ⬜ Not started [v1]
> **改名说明**:原 Autopilot 改名 Routines。理由GitHub Copilot 2026-04 已推 "Autopilot mode"(语义是"自主度"两者正面撞且语义不同。Routines 更贴切(= standing orders / 定期指令)。
- **Source files**: `server/internal/handler/autopilot.go`, `server/pkg/db/queries/autopilot.sql`, `server/internal/service/autopilot.go`, `service/task.go``CreateAutopilotTask`
- **目标读者**: P1 管理员
- **叙事位置**: 第四种触发。"让 agent 自己定期开工"。
- **写什么**1200-1800 字):
- **开篇用类比**:
> "Routine 就是给 agent 的 **standing order**——像给 human teammate 设一个'每周一早上做 standup summary'的长期指令。"
- Routine = agent × schedule/trigger × 执行模式
- **两种模式**(用用户心智词,不说"run_only":
- **Quietly run in the background**(对应代码 `run_only`fire-and-forget不留 issue 痕迹。适合静默维护、数据抓取
- **Create a tracked issue first**(对应代码 `create_issue`):先建 issue 再跑,留可追溯 audit trail。适合周期 audit、每周工作报告
- **Trigger**:
- `schedule`cron + timezone
- `api`(手动 POST 触发)
- ~~webhook~~(字段存在但**未接入路由**,不写)
- Concurrency policy 只对 "Quietly run" 模式生效
- **⚠️ Routine 任务不自动重试**
- Run 历史查看
- **不写**: webhook trigger未接入Label 字段(用途不明,先验证)
- **写前要验证**:
- Webhook 是否还未接入
- Label 字段用途
- Cron 格式兼容性
- **⚠️ 动笔前必读**:
- ⚠️ 全文 **用 Routines不用 Autopilot**(避免和 GitHub Copilot Autopilot 混淆)
- 数据库/代码里还叫 `autopilot_*` —— 文档里对读者说 Routines但引用代码位置可以括号说明"代码表名 autopilot"
- 两种模式用用户心智词,不要直接暴露 `run_only` / `create_issue`
- **Owner**:
---
## 板块 6Staying Informed
### 6.1 Inbox & Subscriptions — ⬜ Not started [v1]
> **合并说明**Subscription 是 Inbox 通知的前置规则,放一页讲逻辑更顺。
- **Source files**:
- Inbox: `server/cmd/server/notification_listeners.go`, `server/pkg/db/queries/inbox.sql`, `packages/core/inbox/`, `packages/views/inbox/`
- Subscriptions: `server/cmd/server/subscriber_listeners.go`, `server/pkg/db/queries/issue_subscriber.sql`, migrations 015
- **目标读者**: P0 所有用户、P1 重度用户
- **叙事位置**: 板块 6 唯一一篇。"agent 在背后干活,怎么知道发生了什么"。
- **写什么**1500-2000 字):
- **Inbox 部分**:
- **10 种实际触发的通知**:
1-3. issue_assigned / unassigned / assignee_changed
4. status_changed**唯一冒泡到 parent issue**
5-6. priority_changed / due_date_changed
7-8. new_comment / mentioned
9. reaction_addedissue + comment
10. task_failed
- **⚠️ @all 展开到全 workspace member**
- Mention dedup 单 comment 内
- **Agent 永远收不到 inbox**(即使在 subscriber 表)
- 操作:查看 / 已读 / 批量已读 / 归档 / 过滤
- **Subscriptions 部分**:
- 自动订阅规则creator / assignee / commenter / @mentioned
- 手动订阅 / 取消
- **Parent 冒泡只对 status_changed**
- **取消分配不自动取消订阅**
- **不写**:
- 4 种已定义但无触发逻辑的通知review_requested / task_completed / agent_blocked / agent_completed
- WebSocket event 清单v2 Realtime 页)
- **写前要验证**:
- 通知类型清单最新值
- mention dedup 作用域
- @all 展开时机
- **⚠️ 动笔前必读**:
- 旧 plan 说 "10 种通知",代码有 14 个定义——**只讲 10 个实际触发的**4 个 planned 可以脚注
- "agent 不收 inbox" 和 §3.1 呼应
- **Owner**:
---
## 板块 7Administration
> **板块叙事**:给 self-host 运维 + 开发者。语气 reference 向,不讲故事。
>
> **V1 砍掉**Self-Host Overview合并进 §1.4/ Docker Compose 深入(简化到 §1.4/ Storage / Email / Upgrading / Signup Controls合并进 §7.2/ Authentication & Tokens拆到 §8.2
### 7.1 Environment Variables — ⬜ Not started [v1]
- **Source files**: `.env.example`, `server/internal/config/`
- **目标读者**: self-host 运维
- **叙事位置**: self-host 部署的 reference 页。
- **写什么**1500-2500 字):
- 按类别分组:
- **必填**DATABASE_URL / PORT / JWT_SECRET / APP_ENV / FRONTEND_ORIGIN
- **Email**RESEND_API_KEY未配置→code 落 stderr
- **OAuth**GOOGLE_CLIENT_ID / _SECRET / _REDIRECT_URI
- **Storage**S3_BUCKET / CloudFront 等(默认本地 `./data/uploads`
- **Signup 控制**ALLOW_SIGNUP / ALLOWED_EMAIL_DOMAINS / ALLOWED_EMAILS**三级优先级**
- 每个变量:默认值 / 来源 / 何时必填
- **不写**: Storage / Email 深入配置v2
- **写前要验证**: `.env.example` 里的变量穷尽吗(可能有 code-level 但没进 example 的)
- **⚠️ 动笔前必读**:
- reference 页,完整性第一
- Signup 三级优先级 EMAILS > DOMAINS > ALLOW_SIGNUP 必须说清
- **Owner**:
### 7.2 Authentication Setup — ⬜ Not started [v1]
> **合并说明**:原 7.3 Auth Setup + 7.10 Signup Controls 合并。
- **Source files**: `server/internal/handler/auth.go`(固定测试验证码 + checkSignupAllowed, `.env.example`auth 相关注释)
- **目标读者**: self-host 运维
- **叙事位置**: self-host 的 auth 配置。
- **写什么**1500-2000 字):
- **🚨 超醒目 warning block**:生产环境必须保持 `MULTICA_DEV_VERIFICATION_CODE` 为空;固定测试验证码只用于非 production 私有测试
- Email + verification code 登录流程(依赖 Resend
- Google OAuth 配置步骤(创建 OAuth client → redirect URI → 填 env
- **Signup 白名单三层优先级决策树**:
1. ALLOWED_EMAILS 命中 → allow
2. ALLOWED_EMAIL_DOMAINS 命中 → allow
3. ALLOW_SIGNUP=true → allowfalse → deny
- 典型场景:开放给公司域 / 限定几个邮箱 / 完全关闭 signup
- 和邀请的关系signup 关了也能通过邀请加人)
- **不写**: JWT 实现、token 类型§8.2 讲)
- **写前要验证**: 固定测试验证码的 env 条件OAuth 流程最新Signup 优先级
- **⚠️ 动笔前必读**:
- ⚠️⚠️ **固定测试验证码风险必须最醒目**(红色 warning block这是 self-host 最大坑
- OAuth 给外部步骤截图,别假设读者懂 GCP Console
- 决策树建议用 Mermaid 图
- **Owner**:
### 7.3 Troubleshooting — ⬜ Not started [v1]
- **Source files**: 各 handler error / daemon log / server log
- **目标读者**: self-host 运维 + 所有遇到问题的用户
- **叙事位置**: 板块 7 最后一篇。
- **写什么**1200-2000 字v1 先覆盖 Top 6-8 问题):
- Daemon 连不上 servertoken 过期 / network / server 挂)
- 任务一直 queuedruntime offline / max_concurrent 满 / agent 配错)
- WebSocket 连不上cookie / CORS / proxy
- Email 没收到Resend 未配置 → 看 stderr
- 固定测试验证码不工作APP_ENV / MULTICA_DEV_VERIFICATION_CODE 检查)
- Port 冲突
- 日志位置daemon / server / browser console
- **不写**: 深度 bug report去 GitHub issue
- **写前要验证**: Top 问题列表反映真实 support 记录
- **⚠️ 动笔前必读**:
- 每个问题:症状 → 可能原因 → 怎么查 → 怎么修(四段式)
- 这页应不断 appendv1 先写最高频的 6-8 个
- **Owner**:
---
## 板块 8Reference
### 8.1 CLI Cheatsheet — ⬜ Not started [v1]
> **合并说明**v1 不做 14 页 CLI 详细 reference用一页 cheatsheet 覆盖核心命令 + 认证入口。V2 再按命令组拆详细页。
- **Source files**: `server/cmd/multica/main.go`(命令树), 各 `cmd_*.go`
- **目标读者**: P1 开发者、P2 agent
- **叙事位置**: Reference 板块首篇。
- **写什么**2000-2500 字):
- **认证入口**(开头一段):
- `multica login` → 拿 PAT`mul_` 前缀)
- PAT 存 `~/.multica/config.json`
- 详细 token 机制见 [Authentication & Tokens](/docs/auth-tokens)
- **命令总览**(按功能分组,每条一行):
- **Auth**`login / auth status / auth logout`
- **Setup**`setup cloud / setup self-host`
- **Workspace**`workspace list / get / members`
- **Issue**`issue list / get / create / update / assign / status / search / runs / rerun` + 嵌套 `issue comment` / `issue subscriber`
- **Project**`project list / get / create / update / delete / status`
- **Agent**`agent list / get / create / update / archive / restore / tasks` + 嵌套 `agent skills`
- **Skill**`skill list / get / create / update / delete / import` + 嵌套 `skill files`
- **Autopilot**(命令名保留,文档里叫 Routines`autopilot list / get / create / update / delete / runs` + 嵌套 `autopilot trigger`
- **Repo**`repo checkout`
- **Daemon**`daemon install / login / start / stop / status / logs`
- **Runtime**`runtime list / usage / activity / ping / update`
- **Misc**`config / version / update / attachment download`
- 每条命令1 行描述 + 最常用 flag
- 末尾指引:"完整 flag / exit code / examples 见 v2 详细 CLI reference开发中"
- **不写**: 每条命令的深入 referencev2、shell completion
- **写前要验证**: 命令总数;每条最常用 flag
- **⚠️ 动笔前必读**:
- 不做 14 页详细 referencecheatsheet 级足够
- CLI 叫 `autopilot` 但用户文档里说 Routines加一行说明"CLI 子命令名为 `autopilot`(将在后续版本统一)"
- **Owner**:
### 8.2 Authentication & Tokens — ⬜ Not started [v1]
- **Source files**: `server/internal/handler/auth.go`, `server/internal/middleware/auth.go`, `server/internal/middleware/daemon_auth.go`, `server/cmd/multica/cmd_auth.go`
- **目标读者**: P1 管理员、P1 开发者(用 API / CLI / daemon
- **叙事位置**: Reference 板块。讲"三种身份证"。
- **写什么**1200-1800 字):
- **3 种 token**:
- **JWT Cookie**`multica_auth`HttpOnly30 天)—— 浏览器
- **PAT**`mul_` 前缀)—— CLI / 脚本
- **Daemon Token**`mdt_` 前缀)—— daemon 专用
- **Token 适用矩阵**:
| 路由 | JWT | PAT | Daemon Token |
|---|---|---|---|
| `/api/user/*` | ✓ | ✓ | ✗ |
| `/api/workspaces/:id/*` | ✓ | ✓ | ✗ |
| `/api/daemon/*` | ✗ | ✓ | ✓ |
| `WS /ws` | ✓cookie| ✓(首条消息)| - |
- 登录 flowemail + code / OAuth
- PAT 创建 / 撤销 / 管理UI 在 SettingsCLI 通过 `multica login`
- Daemon token 生成时机(`multica daemon login`
- Logout删本地 token不撤销 server session
- **不写**: self-host 时的 auth setup§7.2、CLI 具体命令§8.1
- **写前要验证**: Daemon Token 在 WS 的行为JWT 过期后重连
- **⚠️ 动笔前必读**:
- Token 矩阵是灵魂——一张表解决
- Daemon Token 不能命中 user-scoped 路由必须明确
- **Owner**:
### 8.3 Desktop App — ⬜ Not started [v1]
- **Source files**: `apps/desktop/src/main/`, `apps/desktop/src/renderer/src/stores/tab-store.ts`, `stores/window-overlay-store.ts`, `apps/desktop/src/main/updater.ts`, `scripts/package.mjs`
- **目标读者**: 使用 desktop 版的用户
- **叙事位置**: Reference 最后一篇。桌面版独有能力。
- **写什么**1000-1500 字):
- **Desktop vs Web 对比表**(开篇)
- **多 tab 系统**per-workspace 隔离localStorage 持久化,跨 workspace 切换时恢复上次活跃 tab
- **自动更新**electron-updater + GitHub ReleaseWindows arm64 特殊处理 `latest-arm64.yml`app quit 时安装)
- **Daemon 不内置**desktop 只是窗口daemon 要单独 `multica daemon start`desktop package 里 bundle 了 CLI
- 安装macOS .dmg / Windows .exe / Linux .AppImage
- **不写**:
- Window Overlay实现细节用户无感知
- Electron 框架本身
- **写前要验证**:
- Tab system 持久化机制
- 自动更新平台矩阵
- CLI 确实 bundle 进 desktop 包
- **⚠️ 动笔前必读**:
- 重点是"为什么选 desktop 而不是 web"
- Desktop vs Web 对比表是核心
- **Owner**:
---
## 四、V2 Pending 清单24 篇v1 ship 后再动)
> 这些篇不在 v1 scope但位置已规划。等 v1 ship + 有用户反馈后再开写。
- **板块 3**: 3.4 MCP独立页深入 MCP 协议 + 各 provider 支持矩阵)
- **板块 6**: 6.2 RealtimeWebSocket event 完整清单、push-only 模型、41 event types、reconnection
- **板块 7**self-host 深度):
- 7.4 Self-Hosting Overview决策树Cloud / Self-Host / Hybrid
- 7.5 Docker Compose 深入部署(镜像 / 端口 / 数据卷 / 生产参数)
- 7.6 StorageS3 / CloudFront / 本地 disk 三模式对比)
- 7.7 EmailResend 配置 / 邮件场景 / 未配置 fallback
- 7.8 Upgrading版本 tag / migration 自动执行 / 回滚策略)
- **板块 8**CLI 详细 reference从 8.1 cheatsheet 拆开):
- 8.4 multica auth / login 详细
- 8.5 multica setup 详细
- 8.6 multica workspace 详细
- 8.7 multica issue+comment / subscriber详细
- 8.8 multica project 详细
- 8.9 multica agent+skills详细
- 8.10 multica skill 详细
- 8.11 multica autopilot 详细
- 8.12 multica repo 详细
- 8.13 multica daemon 详细
- 8.14 multica runtime 详细
- 8.15 multica config / version / update / attachment 详细
---
## 五、进度汇总v1 25 篇)
| 板块 | 总数 | ✅ | 👀 | ✍️ | 🔍 | ⬜ |
|---|---|---|---|---|---|---|
| 1. Welcome & Quickstart | 4 | 0 | 1 | 0 | 0 | 3 |
| 2. Workspace & Team | 4 | 0 | 0 | 0 | 0 | 4 |
| 3. Agents | 3 | 0 | 0 | 0 | 0 | 3 |
| 4. How Agents Run | 3 | 0 | 0 | 0 | 0 | 3 |
| 5. Working with Agents | 4 | 0 | 0 | 0 | 0 | 4 |
| 6. Staying Informed | 1 | 0 | 0 | 0 | 0 | 1 |
| 7. Administration | 3 | 0 | 0 | 0 | 0 | 3 |
| 8. Reference | 3 | 0 | 0 | 0 | 0 | 3 |
| **V1 合计** | **25** | **0** | **1** | **0** | **0** | **24** |
---
## 六、决策点记录append-only
- **2026-04-23** 初始大纲49 篇8 板块v2 版)
- **2026-04-23** 生态调研后修正:
- Autopilot → **Routines**(避免撞 GitHub Copilot Autopilot mode
- Welcome positioning 换成 **"Your agents, your machine, your backlog."**(不打 "human + agent first-class"Linear 自己已是)
- Skill 开篇加 Anthropic 比喻 + agentskills.io 兼容声明 + ClawHavoc 警示
- MCP 推 v2目前仅 Claude Code 真用v1 在 §3.3 末尾提一句)
- **2026-04-23** v1 scope 收敛到 25 篇:
- 合并Projects → Issues / Runtime → Daemon / Rerun → Tasks / Subscriptions → Inbox / Signup → Auth Setup / CLI 14 页 → Cheatsheet
- 推 v2MCP / Realtime / Storage / Email / Upgrading / Self-Host Overview / Docker Compose 深入 / CLI 详细 reference
- 保留独立成页所有用户高频感知的功能Chat / Routines / Inbox / Skills / Providers Matrix / Desktop App / Self-Host Quickstart
- (后续更新 append 到此处)