# FFAI Agent vs CC / OC / OCW — 能力对齐矩阵

**目的**：把 Claude Code (CC) / OpenClaude (OC) / OpenClaw (OCW) 三家成熟 AI agent 实现的能力**摊开**，跟 FFAI Agent 当前状态对照，给出**测试方式** + **逐步对齐路线**。

**用法**：
- 读这份决定下个迭代做什么 / 不做什么
- 每完成一项更新本表对应行的"FFAI 现状"
- 不要在这里写实现细节（去 `02-architecture.md` / `03-implementation-comparison.md`）

**最新更新**：2026-05-17

---

## 一、对照口径

| 简称 | 全称 | 定位 |
|---|---|---|
| **CC** | Claude Code | Anthropic 官方 CLI agent，闭源 |
| **OC** | OpenClaude | 开源复刻，TypeScript |
| **OCW** | OpenClaw / openclaw | 多渠道 IM + 多 Agent + 多 Provider 商业级开源 |
| **FFAI** | 我们 | 企业内部 SaaS，多租户，Web/Teams/Desktop 三 surface |

**能力状态**：
- ✅ 完成（可演示 + 已通过对应测试）
- 🟡 部分（接口/骨架在但实现不全 / 没覆盖测试）
- ❌ 缺失

---

## 二、用户可感知能力（功能层）

下面每个能力的核心问题：**"用户进了 /agent 能做这件事吗？"**

### 1. 对话基础

| 能力 | CC | OC | OCW | FFAI 现状 | 验收测试 |
|---|---|---|---|---|---|
| 流式对话（typing 动效） | ✅ | ✅ | ✅ | ✅ | 手测：发消息看光标动 |
| Markdown 渲染（粗体/列表/链接/代码块） | ✅ | ✅ | ✅ | ✅ | 手测：发 `**bold** [link](url)` |
| 代码块语法高亮 | ✅ Shiki | ✅ | ❌ TUI 受限 | ✅ highlight.js/lib/common ~35 语言（GitHub 主题） | 手测：发 ts/py code |
| 复制 / 重新生成助手回复 | ✅ | ✅ | ❌ | ✅ | hover action bar |
| 用户消息编辑（在原位重发） | ✅ | ✅ | ❌ | ✅ rewind + re-submit（后端 POST /sessions/:id/rewind） | hover 用户气泡 ✎ Edit |
| 多会话切换 | ✅ | ✅ | ✅ | ✅ | sidebar 会话列表 |
| Cancel / Stop（流到一半停） | ✅ | ✅ | ❌ | ✅ Send 流式中变 ⬜ Stop；前端 AbortSignal + 后端 /cancel | 手测 stream + 点 Stop |
| 暗色 / 浅色主题 | ✅ | ✅ | ✅ | ✅ | prefers-color-scheme |

### 2. 文件 / 代码操作（Desktop / Local）

| 能力 | CC | OC | OCW | FFAI 现状 | 验收测试 |
|---|---|---|---|---|---|
| 读文件 | ✅ FileRead | ✅ | ✅ | ✅ File.read | L1 + 手测 |
| 写 / 编辑文件 | ✅ FileEdit/Write | ✅ | ✅ | ✅ File.write | L1 + 手测 |
| Glob / Grep | ✅ | ✅ | ✅ | ❌ | L1 |
| Notebook 编辑 | ✅ NotebookEdit | ✅ | ❌ | ❌ | 手测 |
| LSP 接入（go-to-def 等） | ✅ LSPTool | ✅ | ❌ | ❌ P2 | 手测 |
| Symlink 防逃逸 | ✅ | ✅ | ✅ | ✅ realpath 二次校验 | L1 |
| 大文件分块 | ✅ | ✅ | ✅ | ✅ 8MB cap | L1 |

### 3. Shell / 命令执行

| 能力 | CC | OC | OCW | FFAI 现状 | 验收测试 |
|---|---|---|---|---|---|
| Shell 执行 | ✅ Bash | ✅ + PowerShell | ✅ shell（tree-sitter-bash 解析） | 🟡 Shell.exec 已声明，Desktop 端拒绝执行（待 PR13 真实化） | L2 + 红队 |
| OS 沙箱（macOS sandbox-exec / Linux landlock） | ✅ | ✅ + Docker / Termux | 用户自配 | ❌ Desktop 待 PR13 | 红队 25 case 0 逃逸 |
| 服务端 CLI（Docker per-tenant） | ❌ | ❌ | ❌ | 🟡 CliExecutor skeleton（PR15）+ git.log/kubectl.get/psql/adp.cli 4 个白名单 | L2 + 隔离测试 |
| REPL（Python / Node 交互） | ✅ | ✅ | ❌ | ❌ P2 | 手测 |
| 解释器白名单 + egress 控制 | ❌ | ❌ | ✅ MITM TLS proxy + URL allowlist | 🟡 Docker 网络层（V1） | 网络隔离测试 |

### 4. Web 检索

| 能力 | CC | OC | OCW | FFAI 现状 | 验收测试 |
|---|---|---|---|---|---|
| Web 搜索 | ✅ WebSearch（Anthropic 内置） | ✅ + 多 provider | ✅ exa/brave/tavily/ddg/perplexity/searxng 多 provider auto-detect | ✅ web_search（Tavily 优先 / DDG HTML 兜底） | L1 + 手测真实 query |
| Web Fetch（抓 URL HTML） | ✅ WebFetch | ✅ | ✅ firecrawl + web-readability | ✅ web_fetch（Tavily /extract 优先 / native fetch + HTML 剥离兜底） | curl + 手测真 URL |
| 引用源（answer + sources[]） | ✅ | ✅ | ✅ | 🟡 web_search 卡片有 URL，knowledge_query 接口预留 sources 但 RAGFlow 未配 | 手测 |
| 内外路由（内部知识库 vs 外部公网） | N/A | N/A | N/A | ✅ system prompt 工具选择红线 + 工具描述精准化 | L2 验证 LLM 选对工具 |

### 5. 内部数据查询

| 能力 | CC | OC | OCW | FFAI 现状 | 验收测试 |
|---|---|---|---|---|---|
| 公司内部知识库 | N/A | N/A | N/A | 🟡 knowledge_query 接 RAGFlow，dev 未配 | RAGFlow 配 + L2 |
| 项目数据查询 | N/A | N/A | N/A | ✅ project_query（DevTracker） | L1 |
| 审批 / 流程提交 | N/A | N/A | N/A | ✅ approval_submit | L1 |
| RBAC 隔离（跨 org 拦截） | N/A | N/A | N/A | ✅ INV-1 / org id 校验 | L1 + 红队 |

### 6. 计划 / 任务管理

| 能力 | CC | OC | OCW | FFAI 现状 | 验收测试 |
|---|---|---|---|---|---|
| Plan mode（先列计划再执行） | ✅ EnterPlanMode/Exit | ✅ | ❌ | ✅ Plan mode 已落 | L1 |
| TODO 列表（持续追加 / 完成） | ✅ TodoWrite | ✅ | ❌ | ✅ TodoWrite tool（不持久化，LLM 整数组重写）+ 前端 checklist 卡片（进度条 + checkbox） | API 测 + MCP 浏览器 |
| Task 创建 / 更新 / 列出 / 杀 | ✅ Task* 6 个 | ✅ | ❌ | ✅ Task{Create,Update,List,Stop} 4 个工具复用现有 TaskTrackerService + 前端任务卡片（状态徽章 + 进度条） | API 测 |
| Sleep / Monitor（长任务等待） | ✅ | ✅ | ❌ | ❌ P2 | L1 |
| Cron / 定时 | ✅ CronCreate 等 | ✅ | ✅ cron 中枢 | ✅ AgentCron 表 + 4 工具（Create/List/Update/Delete） + NestJS @Cron 30s 心跳 + 多副本 batch 上限 + per-user/org 配额（10/50）| API 70s 心跳验证 2 次触发 |

### 7. 多 Agent / 子 Agent / 团队

| 能力 | CC | OC | OCW | FFAI 现状 | 验收测试 |
|---|---|---|---|---|---|
| 派生子 Agent | ✅ Agent.spawn | ✅ | ❌ | ✅ delegate_task（同步 fire-and-wait；child 跑独立 runTurn 返回 reply） | API + 内存测试 |
| Agent 间通信 | ✅ SendMessage | ✅ | ❌ | ✅ SendMessage tool（targetSessionId + prompt → 目标 session 跑一轮） | API E2E 通过 |
| Team / 多 Agent 组 | ✅ Team* | ✅ | ❌ | ❌ P3（无业务驱动） | — |
| Agent 身份（JWT） | ❌ | ❌ | ✅ agent-identity | ❌ 待 P2 | contract |
| Agent 拓扑持久化（parent-child 边） | ✅ coordinator/ | ✅ | ✅ agent-graph-store | ✅ AgentSession.parentSessionId 显式字段 + delegate_task 写入 + sidebar 显示 ↳ 前缀 | DB + UI 验证 |

### 8. 用户工作区（FFAI 特色，CC/OC/OCW 没有同语义）

| 能力 | FFAI 现状 | 验收测试 |
|---|---|---|
| **Memory**（per-user 持久事实/偏好） | ✅ CRUD + sidebar UI | L1 + 手测 |
| **Persona / Agent**（系统预设 + 用户自创） | ✅ 7 个系统预设 + 用户 CRUD | L1 + 手测 |
| **Project**（folder/workspace） | ✅ CRUD + 会话归组 | L1 + 手测 |
| **会话项目分组** | ✅ session.projectId 过滤 | L1 |
| 注入到 system prompt | ❌ 关键 follow-up | L2（看 LLM 是否吸收） |

### 9. 协议接入

| 能力 | CC | OC | OCW | FFAI 现状 | 验收测试 |
|---|---|---|---|---|---|
| MCP client（调外部 MCP server） | ✅ | ✅ | ✅ | ✅ @modelcontextprotocol/sdk 1.29 + McpManagerService + AgentMcpServer 表 + admin controller + onModuleInit lazy boot（FFAI_MCP_ENABLED=true 启用） | admin API + 接 filesystem MCP |
| MCP server（被外部 agent 调） | ❌ | ❌ | ✅ 双向 | ❌ 业务无驱动留 P3 | contract |
| Plugins（工具集合） | ✅ | ✅ | ✅ Marketplace 9 国际 SaaS | 🟡 skill 框架（等价覆盖；MCP client 接入后获百个开源 tools 形成 marketplace 替代） | 集成 |
| Hooks（生命周期事件） | ✅ ~6 个 | ✅ | ✅ 8 个含 PostCompact | ✅ 6 事件（OnTurnStart/PreToolUse/PostToolUse/OnAssistantText/PostCompact/OnTurnEnd）+ HooksRegistry 优先级排序 + 内置 audit hook | unit test |
| Skills（markdown frontmatter 模板） | ✅ | ✅ | ✅ 双层 | ✅ .agents/skills/ | 手测 |
| IDE 桥接（VSCode / IntelliJ） | ✅ HTTP poll | ✅ gRPC | ❌ | ❌ P3 | 手测 |

### 10. IM / 多渠道

| 能力 | CC | OC | OCW | FFAI 现状 | 验收测试 |
|---|---|---|---|---|---|
| Web UI（聊天主界面） | ❌ CLI | ❌ CLI | ✅ Lit | ✅ Next.js | 视觉验收 |
| Desktop 客户端 | ❌ | ❌ | ✅ Tauri/Electron | 🟡 Electron 壳已落 PR11 | L2 |
| Teams Inbox 集成 | ❌ | ❌ | ✅ 25+ 渠道 normalize | 🟡 teams-webhook skeleton（PR14） | L2 |
| Discord / Slack / WeChat / 飞书 | ❌ | ❌ | ✅ | ❌ P2-P3（按需） | 集成 |
| Mobile（iOS/Android 原生） | ❌ | ❌ | ✅ | ❌ P3 | 手测 |
| 推送通知 | ❌ | ❌ | ✅ | 🟡 Notify.push tool 已声明 | L2 |

---

## 三、平台 / 后端能力（非用户直接感知，但必须）

### A. Provider / Routing

| 能力 | CC | OC | OCW | FFAI 现状 | 验收 |
|---|---|---|---|---|---|
| 多 Provider | 1（Anthropic） | 11 vendor × 18 gateway | OpenAI + Bedrock + Ollama | 🟡 Qwen + Anthropic + OpenAI registered | contract |
| 模型路由（5 信号 → primary+fallbacks） | 无（直绑） | descriptor + adapter 三层 | model-catalog + provider-runtime | ✅ ModelRouter 5 信号 | L1 routing decisions |
| Cost tracking | ✅ Anthropic billing | ✅ 多 vendor 计价 | ✅ OTEL | ✅ per-turn token + cost 持久化 | 审计查询 |
| Failover | 无 | 无 | provider-runtime 自动切换 | ❌ 待 P1 | 压力测试 |
| Quota / 配额 | ✅ | ✅ | ✅ | ✅ QuotaService 硬/软上限 | L1 |

### B. 状态 / 持久化

| 能力 | CC | OC | OCW | FFAI 现状 | 验收 |
|---|---|---|---|---|---|
| 会话历史 | JSONL 本地 | + SQLite | message-history + rollout-trace（event sourcing 12k LoC） | ✅ PG 持久化 | L1 |
| Compaction（长会话压缩） | reactive max_tokens | 同 | ✅ + PostCompact hook | ✅ 三层 compaction（layer 1/2/3/5）+ scratchpad | L1 长会话 |
| Artifact（结构化输出） | ❌ | ❌ | ❌ | ✅ TABLE / CHART / FILE / LINK / TEXT 5 类 | L1 |
| Trajectory（事件流） | ❌ | ❌ | ✅ rollout-trace | ✅ TrajectoryService + 哈希链 | L1 |
| 多租户 RLS | N/A | N/A | N/A | ✅ row-level + INV-1 | L1 跨 org 红队 |

### C. 安全 / 权限 / 审计

| 能力 | CC | OC | OCW | FFAI 现状 | 验收 |
|---|---|---|---|---|---|
| 工具权限 ask（运行前确认） | ✅ 三态 allow/deny/ask | ✅ | ✅ execpolicy v2 声明式 | 🟡 Plan REQUIRED / READ_ONLY 已有；ask-every-time 未做 | 权限测试 |
| Tool 调用审计 | 三态弹窗用户确认 | 同 | declarative policy + 网络规则 | ✅ TrajectoryEvent 全审计 | L1 审计日志 |
| Secret redaction | ❌ | ❌ | ✅ secrets crate（age 加密） | 🟡 envelope encryption skeleton；redact log 待做 | L1 + 审计 |
| 跨 org 防越权 | N/A | N/A | N/A | ✅ org id 校验全链路 + DataScope | L1 + 红队 |
| Network egress 控制 | 无 | 无 | ✅ MITM TLS proxy + URL allowlist（9.3k LoC） | 🟡 Docker 网络层 V1 | 网络隔离 |
| 凭据管理 | OS keyring / env | profile 文件 | login + keyring + AWS + secrets 四件套 | 🟡 vault/KMS 接入 待 | 安全测试 |

### D. 工程纪律

| 能力 | CC | OC | OCW | FFAI 现状 | 验收 |
|---|---|---|---|---|---|
| Project README / AGENTS.md | ✅ CLAUDE.md | ✅ | ✅ 17k 字 AGENTS.md | ✅ CLAUDE.md / AGENTS.md / docs/standards/ | 入口对齐检查 |
| 三层测试金字塔 | 私有 | 公开 unit | 公开 unit + e2e | ✅ L0a/L0b/L0c/L1/L2/L3 | quality-gates.yml |
| 契约校验（前后端类型对齐） | ❌ | ❌ | ❌ | ✅ contract-check.ts | L0a/b CI |
| Migration 流程 | N/A | N/A | N/A | ✅ Prisma migrate + 一 PR 一迁移 | CI 检查 |

---

## 四、测试方法分层（FFAI 现有）

每个能力在矩阵右列标了验收测试。本节定义具体怎么跑：

| 层 | 范围 | FFAI 工具 | 触发场景 |
|---|---|---|---|
| **L0a** | 契约（前后端字段名） | `testing/scripts/contract-check.ts` | CI gates，每次 PR |
| **L0b** | 契约（后端 DTO ↔ Prisma） | 同 | 同上 |
| **L0c** | 响应快照 | `testing/scripts/response-snapshot-check.ts` | L2 CI |
| **L1** | 集成（HTTP → DB） | `testing/backend/integration/agent/*.test.ts` | 本地 + CI develop merge |
| **L1c** | 数据质量（fixture / seed） | data-quality-check.ts | L3 staging |
| **L2** | E2E（Playwright MCP） | 手 AI 走，UAT 阶段 | UAT 验收 |
| **L3** | 人工验收 | 浏览器双语 + 边界 | 上线前 |

**特别能力 → 专用测试**：

| 能力 | 测试方式 |
|---|---|
| Tool 失败回退 / Provider failover | L1 + chaos test（mock provider 抛 500） |
| Symlink 逃逸防护 | L1 fixture：`ln -s /etc/passwd evil` 然后 read |
| Shell 沙盒红队 | 25 case 0 逃逸（macOS sandbox-exec + Linux landlock） |
| Web search provider 兜底 | L1：Tavily 500 → fallback DDG → 看 results |
| 多 agent 并发 / Redis lock | 压力测试：同一 session 并发 5 个 prompt 看顺序 |
| 跨 org 越权 | L1：A org session id 用 B org token 调 → 403 |
| Markdown 渲染嵌套列表 | L2 视觉验收（MCP 截图比对） |
| 工具描述路由（内 vs 外） | L2：发"查 Freddie Future 融资" 看 LLM 选 web_search |

---

## 五、对齐路线（按优先级）

### 已完成（develop merged + 本地未推）

- ✅ 三栏 → 双栏 + 全屏沉浸
- ✅ ChatGPT 风格 hero / composer / chip / disclaimer
- ✅ Memory / Persona / Project sidebar 四层模型
- ✅ Markdown 渲染（assistant text）
- ✅ 工具调用 / 结果友好卡片
- ✅ web_search 工具 + system prompt 路由
- ✅ 乐观渲染发送 + 流式自动跟随底部
- ✅ Lazy session create（无空孤儿）

### P1（下个迭代要做的）

| 序 | 工作项 | 参考源 | 验收 | 估算 |
|---|---|---|---|---|
| 1 | **接通 Memory + Persona 注入 system prompt** | OCW ext/memories | L2 看 LLM 是否吸收"我在 EAI 工作"等记忆 | 1d |
| 2 | **session.personaId 持久化**（当前只前端 state） | — | L1 | 0.5d |
| 3 | **TodoWrite 工具 + 前端 task panel** | CC TodoWrite | L1 + 手测 | 2d |
| 4 | **Glob / Grep 工具**（项目内搜索） | CC Glob/Grep | L1 | 1.5d |
| 5 | **Tool 健康检查**（RAGFlow 没配则 knowledge_query 不注册给 LLM） | — | L1 | 0.5d |
| 6 | **Web Fetch 工具**（抓 URL HTML + readability） | OCW firecrawl + web-readability | L1 | 1.5d |
| 7 | **用户消息编辑**（点 user 气泡 → 编辑 → 重发） | CC / OC | L2 | 1d |
| 8 | **Agent 身份（JWT） + 拓扑（parent-child 边）** | OCW agent-identity / agent-graph-store | L1 contract | 3d |
| 9 | **MCP server 角色**（让外部 agent 调 FFAI） | OCW dual MCP | contract | 3-5d |
| 10 | **Provider failover**（primary 失败自动 fallback） | OCW provider-runtime | 压力测试 | 1.5d |

### P2（按业务驱动决定时机）

11. 代码块语法高亮（Shiki）
12. Plan mode `/plan` UI 改善（可视化 plan tree）
13. Notebook tool（Jupyter / colab）
14. LSP 集成（go-to-def / hover）
15. Teams webhook 真实化 + Adaptive Card 投影
16. 飞书 / 钉钉 / 企微 channel adapter
17. Hook 系统（PreToolUse / PostToolUse / PostCompact 等）
18. CLI Sandbox Docker 真实化（git.log / kubectl.get / psql / adp.cli）
19. macOS sandbox-exec + Linux landlock 红队
20. Cost tracking 用户级 dashboard

### P3（未来）

- 移动原生客户端
- gRPC API + Python SDK
- 国际渠道（Discord / Slack）
- IDE 扩展
- Marketplace 国内 SaaS 接入

---

## 六、如何用这份文档

1. **planning 会前**：扫这表确定下个 sprint 选哪几条
2. **PR 验收时**：对照"验收测试"列，标✅ / 🟡 / ❌ 更新
3. **新人 onboard**：读 § 二 + § 三 5 分钟理解 FFAI 全貌
4. **跟外部对比 PRD 改动时**：以本表为 source of truth，避免每次重新调研

下个 sprint 默认从 § 五 P1 序号 1-5 开始。
