# 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** —— 认领后读源码发现这篇独立成页价值低,写一行理由,@ owner(Naiyuan)决策。 ### 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**。 分配给 agent 会**立即**入队一个 task。详见 [Tasks](/docs/tasks)。 ### 状态(Status) | Status | 含义 | 默认 | |---|---|---| | backlog | 还没规划 | ✓ | | todo | 准备开工 | | | in_progress | 正在做 | | | ... | ... | | **注意**:状态转换无强制约束——任意状态可以直接互转。 ## 操作 ### 创建 Issue(CLI) ```bash multica issue create \ --title "Fix login bug" \ --assignee @alice ``` ### 分配给 Agent(触发自动执行) ```bash multica issue assign --agent ``` 分配给 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**:`...`。warning 用于陷阱(如固定测试验证码),info 用于补充说明,tip 用于最佳实践 - **代码块**:shell 命令用 \`\`\`bash;配置用 \`\`\`yaml / \`\`\`env;JSON 用 \`\`\`json - **Cross-link**:用 markdown 链接 `[显示文字](/docs/page-slug)`,不要写成 "详见 Tasks 章节" - **表格**:有 3 行以上对照才用表格,不要 1-2 行也用 - **标题层级**:H1 只能一个(等于页面 title),H2 是主要分段,H3 是小节 --- ## 二、版本规划 ### V1(25 篇,第一次 ship) 覆盖所有核心功能,让新用户能"5 分钟懂产品 + 10 分钟跑起来 + 30 分钟用上 agent"。 ### V2(24 篇 Pending) 深度 reference / 开发者向 / 高级部署。等 v1 ship + 用户反馈后再补。 ### V1 篇目清单 | 板块 | V1 篇数 | V2 推迟篇数 | |---|---|---| | 1. Welcome & Quickstart | 4 | 0 | | 2. Workspace & Team | 4 | 0 | | 3. Agents | 3 | 1(MCP)| | 4. How Agents Run | 3 | 0 | | 5. Working with Agents | 4 | 0 | | 6. Staying Informed | 1 | 2(Subscriptions 合并 / Realtime)| | 7. Administration | 3 | 5(Self-Host Overview / Docker Compose / Storage / Email / Upgrading / Signup Controls)| | 8. Reference | 3 | 13(CLI 各子命令详细页)| | **合计** | **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 | --- ## 板块 1:Welcome & 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 字 + 一张架构图): - 一张架构图(Mermaid):server ↔ 你的 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**: – --- ## 板块 2:Workspace & 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 prefix(2-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 assignee(member/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 lead(member/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_id,CASCADE) - @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**: – --- ## 板块 3:Agents > **板块叙事**:新物种登场。读者已经理解 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**、有 visibility(workspace / 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)、MCP(v2 推,在 §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 skill(daemon 扫描本机) - 导入:新建 / GitHub / ClawHub / 本机目录 - 挂载到 agent(junction 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 独立页): > MCP(Model 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**: – --- ## 板块 4:How 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 = 本地 worker,poll + 执行 + 汇报 - **Heartbeat 15s** / **45s offline**(⚠️ 旧 plan 写错过,必须代码核实) - Poll 频率 3s - max_concurrent_tasks(daemon 20 + agent 1,双层 gate) - Recover-orphans(启动时把 dispatched/running 转 failed) - Legacy daemon_id migration(hostname → 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_id,attempt 重置为 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 Code(feature-complete)/ Codex(主流替代) - **商业主流**:Cursor / Copilot / Gemini - **ACP 生态**:Hermes(Nous Research)/ Kimi(Moonshot AI) - **开源替代**:OpenCode(SST)/ Pi(minimalist)/ OpenClaw - **大对照表**: | Provider | 厂商 | Session Resume | MCP | Skill 注入路径 | custom_args | 备注 | - 每个 provider 一小段(80-150 字):核心定位 + 用户画像 + 官网链接 + Multica 兼容性 - **Session resume 精确现状**: - ✅ 真用:Claude / Hermes / Kimi / OpenCode / Copilot - ⚠️ Codex:代码有 thread/resume 但 unreachable(future feature) - ❌ 不支持:Pi / Gemini / OpenClaw - ❓ 未审:Cursor - **不写**: provider 官方使用文档(外链)、MCP 协议本身 - **写前要验证**: - 认领者**必须逐个打开 `server/pkg/agent/*.go`** 确认 - Session resume 实现细节(flag vs thread API) - 新 provider 加入 / 旧 provider 删除 - **⚠️ 动笔前必读**: - ⚠️ 这是最容易过时的一页,provider 代码频繁变动 - 精确到 "代码里这个 flag 传给这个 CLI" 级别,不模糊说"支持" - Codex "unreachable" 状态必须明确(不是承诺) - **Owner**: – --- ## 板块 5:Working 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 字): - UI:issue 详情页选 agent as assignee - CLI:`multica issue assign --agent ` - 分配后立刻入队 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**: – --- ## 板块 6:Staying 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_added(issue + 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**: – --- ## 板块 7:Administration > **板块叙事**:给 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 → allow;false → 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 连不上 server(token 过期 / network / server 挂) - 任务一直 queued(runtime 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 记录 - **⚠️ 动笔前必读**: - 每个问题:症状 → 可能原因 → 怎么查 → 怎么修(四段式) - 这页应不断 append,v1 先写最高频的 6-8 个 - **Owner**: – --- ## 板块 8:Reference ### 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(开发中)" - **不写**: 每条命令的深入 reference(v2)、shell completion - **写前要验证**: 命令总数;每条最常用 flag - **⚠️ 动笔前必读**: - 不做 14 页详细 reference,cheatsheet 级足够 - 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`,HttpOnly,30 天)—— 浏览器 - **PAT**(`mul_` 前缀)—— CLI / 脚本 - **Daemon Token**(`mdt_` 前缀)—— daemon 专用 - **Token 适用矩阵**: | 路由 | JWT | PAT | Daemon Token | |---|---|---|---| | `/api/user/*` | ✓ | ✓ | ✗ | | `/api/workspaces/:id/*` | ✓ | ✓ | ✗ | | `/api/daemon/*` | ✗ | ✓ | ✓ | | `WS /ws` | ✓(cookie)| ✓(首条消息)| - | - 登录 flow(email + code / OAuth) - PAT 创建 / 撤销 / 管理(UI 在 Settings,CLI 通过 `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 Release;Windows 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 Realtime(WebSocket 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 Storage(S3 / CloudFront / 本地 disk 三模式对比) - 7.7 Email(Resend 配置 / 邮件场景 / 未配置 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 - 推 v2:MCP / Realtime / Storage / Email / Upgrading / Self-Host Overview / Docker Compose 深入 / CLI 详细 reference - 保留独立成页:所有用户高频感知的功能(Chat / Routines / Inbox / Skills / Providers Matrix / Desktop App / Self-Host Quickstart) - (后续更新 append 到此处)