引言
你的工作电脑、家里的台式机、笔记本和手机,本来就该属于同一个人。
这是"一天一个开源项目"系列的第 250 篇文章。今天带你了解的项目是 Cindy(makecindy/cindy)。
当下的 AI 编程助手大多是"一台电脑上的一个终端":Claude Code 在这台机器上,Codex 在那台机器上,换台设备就要重新开一个会话,手机上基本只能看。Cindy 想解决的就是这个断层:它不替换你已有的 Agent,而是把它们和你的设备连起来。
README 的第一句话是:"Cindy 是一个开箱即用、可以自己塑造的开源 AI Agent。"副标题则是中文那句:想到,就能做到。
你将学到什么
- Cindy 是什么,以及它为什么选择"整合已有引擎"而不是自造一个
- 多设备接力、模型共享和手机远程桌面是怎么设计的
- 伙伴(Bot)、群聊、Orca 多智能体协同分别解决什么问题
- 插件与 Skill 体系,以及"存量插件兼容是红线"这样的工程治理
- 隐私与遥测的实际情况(README 写得相当直白)
- 仓库的结构、规则文档的组织方式,以及适用边界
前置知识
- 了解 Claude Code 或 Codex 这类编程 Agent 的基本用法
- 知道 MCP、Skill 大致是什么
- 如果想读源码:了解 Electron、React Native / Expo 和 pnpm monorepo
项目背景
项目简介
Cindy 是一个 AI Agent 客户端,覆盖 macOS、Windows、Linux、iOS 和 Android。仓库里包含桌面端和手机端两个开源客户端及其共享包。
它的核心主张是三件事:
- 所有设备,一个 Cindy:在另一台设备上打开同一个任务、继续对话、访问它的文件
- 保留你喜欢的 Agent:Claude Code、Codex 和 Pi 并存,一个任务可以换引擎
- 在真实工具里做真事:操作你的文件、浏览器和应用,回答里可以带图表、交互控件和富 HTML
作者与团队
- 组织:makecindy
- 创建时间:2026-07-22
- 贡献者:提交量靠前的有 dashhuang、zqchris、MagicLizi、DavidShenXD(各 1000 以上)
- 官网:cindy.app
- 版本节奏:从 v0.1.108 到 v0.1.118 在两周内连续发布,包含稳定版和 beta 版
README 里还说明了一件事:后端服务在另一个仓库,不属于这个 monorepo。开源的是客户端。
项目数据
数据取自 2026-10-27 的 GitHub,仅供参考:
- ⭐ GitHub Stars: 约 7,100
- 🍴 Forks: 约 850
- 🐛 Open Issues: 约 2,080
- 📦 最新版本: v0.1.118-beta(最近的稳定版是 v0.1.115)
- 📄 License: Apache-2.0
- 🌐 官网: cindy.app
- 💻 语言构成: TypeScript 为绝对主体,另有 JavaScript、Swift、Python、Rust、Kotlin 等
主要功能
核心作用
Cindy 的定位是一个统一的工作界面,下面接着多个 Agent 引擎,旁边连着你所有的设备:
| 层 | 内容 |
|---|---|
| 引擎 | Claude Code、Codex、Pi(一个精简、开源、可扩展、支持多家模型供应商的 Agent) |
| 设备 | 工作电脑、家用台式机、笔记本、手机,通过同一账号互联 |
| 工具 | 文件、浏览器、应用、MCP、Skill、插件 |
| 角色 | 伙伴(Bot)、群聊、多 Agent 协同团队 |
使用场景
-
在手机上接着做电脑上的事
- 打开另一台设备上的任务,继续对话并访问其文件,不必把东西复制进新对话
-
借用另一台电脑上的模型
- 使用配置在另一台电脑上的供应商,包括订阅、API 和本地模型
-
聊天不够用时直接操作整台电脑
- 手机里内置远程桌面,可以打开应用、输入、操作
-
让一个"队长"带一队 Agent
- 不同 Agent 分别负责规划、并行实现和独立评审,目标和验收标准共享
-
定时任务与聊天渠道接入
- 用自动化建立例行工作,通过 Slack、Telegram 等渠道交办
快速开始
普通用户:到 cindy.app/download 下载客户端。Linux 用户可参考仓库里的 docs/linux.md(覆盖 Ubuntu、Arch Linux 和 Omarchy)。
登录页有一个 Skip Sign-In(跳过登录)选项:可以只用本地 Agent,此时应用会显示"未登录",依赖服务端的能力不可用。
开发者:
git clone https://github.com/makecindy/cindy.git
cd cindy
git lfs pull
pnpm install环境要求:Node.js 22.x、pnpm 10.x(暂不支持 v11)、Git LFS。
启动桌面端开发(连接官方服务):
# 中国大陆账号
pnpm restart:desktop:remote --region=cn
# 全球账号
pnpm restart:desktop:remote --region=globalREADME 强调:用 cn 还是 global 要明确指定,不要依赖内部默认值。
模型与费用
README 对这点写得很清楚:
- 客户端免费
- 可以授权你已经付费的订阅(包括 Claude Code 或 Codex 的套餐)、接入自己的 API Key、使用本地模型,也可以用 Cindy 的托管模型服务
- 供应商限额和计费照常适用,免费的客户端不等于无限的模型用量
核心特性
-
多设备接力
- 同账号的设备互相发现,任务可在设备间继续;项目文件留在原电脑上,不是整盘同步
-
跨设备共享模型
- 把一台电脑上的供应商共享给自己的其他设备,甚至通过分享链接共享给其他账号
-
手机远程桌面
- 内置,有独立的权限控制
-
三引擎并存
- Claude Code、Codex、Pi,会话保留在 Cindy 里;切换引擎时是交接或重建引擎上下文,而不是让它们的内部状态完全一致
-
伙伴与群聊
- 可以给伙伴设定角色、指令、Skill 和周期性工作,也可以把多个伙伴放进群聊协作
-
Orca 协同
- 一个 Lead 会话拆任务、派活、验收,多个 Worker 会话并行或串行执行
-
插件、Skill 与 SkillHub
- 在 SkillHub 里发现 Skill 和插件,也有官方插件仓库
cindy-official-plugins
- 在 SkillHub 里发现 Skill 和插件,也有官方插件仓库
-
富回答
- 图表、交互控件和富 HTML,而不是一堵文字墙
项目优势
| 对比项 | Cindy | 单独使用 Claude Code / Codex | 自建远程方案(SSH 加 tmux 等) |
|---|---|---|---|
| 多引擎 | 三个引擎同一界面,可切换 | 各用各的 | 自己拼 |
| 多设备 | 账号互联,手机可操作 | 以单机终端为主 | 要自己搭链路 |
| 服务器 | 你的电脑就是服务器,不用租也不用自建 | 不涉及 | 需要自己维护 |
| 手机体验 | 原生手机客户端,含远程桌面 | 弱 | 终端体验差 |
| 开放性 | 客户端 Apache-2.0,可审计可 Fork | 视引擎而定 | 完全自控 |
为什么值得看?
- 它选了一条不同的路:不卷"自己造一个更强的 Agent",而是做 Agent 之上的设备、角色与协作层
- 仓库本身就是一份大型 AI 辅助开发项目的工程治理样本,
AGENTS.md写得非常细 - 隐私说明几乎是"把一切摊开讲",包括已知例外
项目详细剖析
仓库结构
README 里的表格:
| 路径 | 说明 |
|---|---|
apps/desktop | Electron 桌面客户端 |
apps/mobile | Expo / React Native 手机客户端 |
packages/* | 共享的客户端能力(认证、设备互联、Agent 编排、模型供应商等) |
apps/*-bin | 随桌面端分发的工具二进制(Claude Code、Codex、ripgrep、Pi) |
这些二进制都没有提交进仓库:Claude Code、Codex 和 ripgrep 由 pnpm install 按平台下载,Android platform-tools 则在 Windows 打包前以固定版本和 sha256 校验方式获取。
packages/ 下有三十多个包,值得留意的有:
maker-core:核心,Agent 抽象(BaseAgent)、会话编排与事件流,零 Electron 依赖device-link与device-link-protocol:设备互联与协议orca-workflow:多 Agent 协同工作流model-providers、model-compat、anthropic-compat-proxy、responses-anthropic-bridge、responses-chat-bridge:模型供应商与各种协议之间的桥接maker-cc-manager、maker-pi-manager、maker-remote-ssh:在远程 SSH 机器上运行的 Claude Code 与 Pi 守护进程maker-scheduler:cron 引擎与定时任务plugin-protocol、lizi-mcps:插件协议与内置 MCPdesign-tokens:设计 Tokenvoice-input-core:语音输入
架构不变量
docs/dev-rules/architecture-invariants.md 收拢了影响面很大的几条规则:
- package 要与 render / main 解耦:package 是未来可以单独提供能力的模块,不得 import Desktop Renderer 组件,也不得反向 import Desktop Main;相关部分通过初始化或运行时配置、回调注入
- main 进程禁止运行时动态
import():依赖一律用顶层静态 import,原因是动态 import 带来打包、加载时机与错误路径的不确定性 - 主界面布局树:布局真身是全局递归的 split / pane 树;面板身份只认
panelKind,禁止用"左栏 / 右栏"这样的位置充当业务身份;chat-main在整棵树中必须恰好一个、始终可见、不可关闭、不可折叠,最小宽度 400px - 布局是用户级配置而非 session 数据,启动时必须随首帧同步就位,禁止先画默认布局再跳成用户布局
其中还有一条体贴的设计:未注册、沉睡或已抽离的面板允许保留在存档里但不渲染,重新注入后必须原位恢复,不要用清理未知 panelKind 的方式破坏位置记忆。
多设备互联:device-link
跨设备的一切都建立在 device-link 上:一个带 relay 的协议,手机与桌面、桌面与桌面都走它。
以"供应商分享"的契约文档为例(docs/provider-sharing-contract.md),可以看到它的协议设计很严格:
- relay 的信封里有一个可选的
providerShare范围字段,同一帧不得同时带sharedTask与providerShare - 能力协商:客户端在 hello 里声明
provider-share-v1,relay 回同名能力,双方都声明才能通信,否则回VERSION_MISMATCH source字段只由 relay 写入,永不信任发送方提供的值- 邀请链接是一次性口令:43 位 base64url(
randomBytes(32)),5 分钟过期,服务端只存 sha256;受邀者的申请 24 小时过期,带 4 位配对码 - 被拒绝的帧回
relay-error,错误码统一用DEVICE_OFFLINE,不暴露原因 - 分享不随分享者离线关闭
供应商分享和"共享任务"是两套独立的授权,并且产品规则里允许中国大陆版与 Global 互享。
另外,remote-desktop.md 对远程桌面的描述也体现了很强的产品细节:悬停时不会启动桌面抓取,也不会抢走别的查看者的控制;窗口关闭确认只在连接建立后才出现;关闭窗口会立刻"退役"本地输入与心跳权限,租约清理在后台进行,远端不回复也不会让窗口一直关不掉。
引擎整合:Claude Code、Codex、Pi
Cindy 对引擎的态度是整合,不是替代。这一点在 AGENTS.md 的红线里最明显,其中关于 Pi 有一条:
Pi 原生能力非退化是红线:Pi 原生允许的安装、更新、扩展加载与 Agent 自助修复,Cindy 不得以静态分析、兼容提示、内容指纹、宿主审批或新增的"安全增强"为由拒绝、停用或变成不可逆流程;显式用户命令即授权。Cindy 只能增加可跳过的提示和更顺畅的 GUI,不能让 Cindy Pi 比同版本原生 Pi 更难用。
这是一个很克制的产品原则:套壳不能让底层引擎变差。
桌面端内置的四个二进制(claude、codex、ripgrep、pi)版本由 tools/<kind>/latest.json 固定,并由 tools/update.mjs 更新。
Orca:多 Agent 协同
docs/dev-rules/orca-team-architecture.md 是 Orca 的唯一权威文档,体量超过 12 万字符。核心模型:
- 一个 Lead 会话负责拆任务、派活、验收与汇总
- 多个 Worker 会话并行或串行执行
- Worker 是完整会话,不是一次性 subagent:它有自己的模型、effort、工具调用流、上下文和可见历史
目前已实现的有:多 Worker(可设角色、标签、聚焦切换、软硬限制、归档)、Lead 与聚焦的 Worker 并排的分屏视图、本地 Claude Code / Codex / Pi 都能做 Lead 或 Worker,SSH 远端会话也可以。远端的 Codex 通过 SSH remote-forward 连接本机的 MCP bridge。
文档也直接写出了当前边界:
- Orca Team 仍严格绑定单个 Lead 会话,不支持跨 Lead 共享 Worker
- Worker 的聚焦切换是"单 Worker 面板替换",不是多个并排
- Worker 归档后 UI 里没有取消归档的入口
workflow_run/ CC Workflow 编排尚未纳入- 通过 device-link 的协同,Lead / Worker / team 全部在被控端进程内编排,控制端只经隧道路由
文档的第二部分是"未来规划":执行单元愿景、三态拆分、Worker 生命周期分型、Side Chat、控制面的九大机制。
伙伴(Bot)与能力继承
伙伴是有身份的 Agent:角色、指令、Skill、周期性工作。docs/dev-rules/agent-capabilities.md 里有一个体现设计演进的细节:
- 新伙伴默认继承 Cindy 已启用的工具和连接(
toolsetMode: inherit、mcpMode: inherit),创建时的显式选择优先 - 旧格式无法可靠判断名单是用户设的还是系统生成的,所以 2026-10-02 产品确认:旧名单统一放开,不再靠"空 / 非空"去猜
- 现有的 ask / auto / 完全访问档位保持原值
- 文档如实写了已知边界:群专线、其他伙伴及自动化转来的消息沿用该 Agent 的能力与权限档,目前没有"按触发来源整轮降低权限"的实现
这类写法很罕见,不只记录"是什么",还记录"为什么这样裁决"和"哪里还没做"。
插件系统与"存量兼容红线"
插件(.cindy)的规则在 docs/dev-rules/plugin-security-and-authoring.md(近 10 万字符)。AGENTS.md 里摘出的红线是:
存量插件兼容是红线:任何插件系统改动(含批准状态 schema、指纹格式、manifest 校验、安装布局、包格式)都必须向下兼容,用户升级后什么都不做,已装、已批准、已启用的插件必须照旧可用,绝不允许要求用户重新安装、重新确认权限或重新配置。做不到就必须自带从旧版数据的自动迁移;漏迁移等于 P0。
并且改到插件基座的 PR,一律走白名单确认门,需要放行人明确 Approve 才能合并,不看 diff 大小。
插件发现采用渐进式:ghost_list → ghost_info → ghost_call,用 ghost-progressive-discovery.md 规范。最新的 v0.1.118 里,"获准的插件现在能查看任务的运行状态与消息、接收关键事件,并在允许范围内触发整理或中断;插件通过宿主发起的操作也会统一计入用量"。
日志上传与脱敏:三条不变量
log-upload-and-redaction.md 里的三条不变量也值得一看,它们体现了对隐私的态度:
- 记录边界:写侧的续行转义和读侧的切分是同一条不变量的两半,破坏任何一侧都会让隐私逃逸
- 白名单方向:deny-by-default,不得改成黑名单,因为调试级别的功能日志是用户内容的主要泄漏源
- 标记代次加原子清除:并发实例下仅靠时间戳会误删另一个实例刚写的新崩溃标记
脱敏规则只增不减,放宽任何一条都视为隐私变更,需要重新评审。
工程治理:给 AI 协作者的入口
整个仓库对"AI 如何参与开发"设了一套明确的入口:
AGENTS.md是 Codex 和 Claude Code 共用的项目指令正本,CLAUDE.md只保留@AGENTS.md,避免两处维护- 规则分三类:开发规则放
docs/dev-rules/,产品规则放docs/product-rules/,设计规则放docs/design-rules/ - 根
AGENTS.md只保留所有任务都适用的规则、风险入口和文档索引,模块专属规则放嵌套的AGENTS.md - 每类改动都有"必须先读"的文档,比如改 Orca 前必须读
orca-team-architecture.md,改日志上传前必须读脱敏规则 - 测试有"价值门槛":新增测试必须通过真实生产入口验证可观察结果,说明依据、覆盖缺口和最小失败输入;
pnpm check:test-hygiene在 CI 里阻断违规,基线只减不增 - 提交需要 DCO 签名(
git commit -s),不需要 CLA
还有一个小细节:产品术语有统一的术语表(i18n/GLOSSARY.md),"任务 / 对话 / 消息"这三个词的边界被明确规定:session 面向用户叫"任务","对话"只用于任务内的交流,单条往来叫"消息","任务"与 task 同句出现时必须消解歧义。
隐私与遥测
README 对此写得相当坦率,这里摘要几点:
- 官方发行版内置 TapDB 使用统计,包括设备标识、系统与应用版本、启动与活动事件;登录后事件会关联账号 ID,所以不是完全匿名。TapDB 不采集聊天内容、文件内容和工作目录数据
- 可以不改代码关闭:桌面端在 设置 → 关于 → 使用统计;手机端在设置里的使用统计。默认开启
- 已知的手机端例外:企业 SSO 登录会跳过隐私政策接受步骤。如果没有同意记录,并且该登录在重启后恢复,当前的迁移逻辑可能把一个全新安装也标为已同意;TapDB 配置存在且统计开启时,上报可能在没有明确接受政策的情况下开始。关闭"使用统计"可阻止这次迁移启用上报。README 直接链接了相关源码
- 在线心跳和诊断日志是独立的机制,不受"使用统计"开关影响。桌面端只在已验证的云端登录期间向 Cindy 服务发送心跳(账号 ID、平台、版本);本地模式不发送
- 桌面原生崩溃转储只留在本地,不会自动上传。诊断日志可手动上传,另有默认关闭的自动崩溃日志上传选项
- 从源码构建不要求保留统计:桌面开发构建默认不初始化 TapDB
默认连接官方云服务,这是有意为之:外部开发者不需要自己搭服务器,用自己的 Cindy 账号登录开发版,就可以直接对着官方服务器开发和测试。
适用范围与局限
- 后端不开源:开源的是客户端,服务端在另一个仓库。很多能力(云端伙伴同步、设备互联的 relay、托管模型服务)依赖官方服务;"Skip Sign-In"模式下这些能力不可用
- 默认连官方服务:端点清单在
config/endpoint.json与endpoint.global.json,桌面自动更新也来自官方 CDN - 有遥测:官方发行版默认开启使用统计,可关闭,但也有上面提到的手机端已知例外
- 项目非常年轻且迭代极快:2026 年 7 月创建,两周内发了十多个版本,约 2000 个未关闭的 issue,beta 版和稳定版并行。适合愿意跟着走的人,不适合期待"稳定不变"的场景
- 费用不等于免费:客户端免费,模型用量仍按供应商计费
- 权限面很大:Agent 能操作文件、浏览器、应用,甚至整个远程桌面。设备互联需要保持在线、同账号登录并启用对应权限;远程访问不是整盘同步
- Orca 的当前边界:单 Lead 绑定、Worker 聚焦切换不能并排、归档不可撤销等(见上文)
- 文档以中文为主:
AGENTS.md、docs/dev-rules/里的规则文档多为中文,README 和贡献指南有英文版
项目地址与资源
官方资源
- 🌟 GitHub: https://github.com/makecindy/cindy
- 🌐 官网: https://cindy.app
- ⬇️ 下载: https://cindy.app/download
- 💰 服务定价: https://cindy.app/pricing
- 🐛 Issues: https://github.com/makecindy/cindy/issues
相关资源
- 官方插件: makecindy/cindy-official-plugins
- 贡献指南: 仓库内
CONTRIBUTING.en.md - 仓库地图: 仓库内
docs/dev-rules/repo-map.md - Orca 架构: 仓库内
docs/dev-rules/orca-team-architecture.md - Linux 安装: 仓库内
docs/linux.md
总结与展望
核心要点回顾
- 整合而不是替换:Claude Code、Codex 和 Pi 并存,Cindy 做的是设备、角色与协作层
- 你的电脑就是服务器:多设备接力、模型共享、手机远程桌面,不需要租服务器或自建
- 多 Agent 协同有明确模型:Orca 的 Lead 加完整会话的 Worker,而不是一次性的子 Agent
- 工程治理很重:架构不变量、"必须先读"的规则索引、存量兼容红线、测试价值门槛,是一个 AI 参与开发的大仓库如何保持秩序的样本
- 隐私说明坦率:包括遥测、关闭方式和已知的手机端例外,但后端不开源、默认连官方服务这两点需要自己权衡
适用人群
- 同时在多台电脑和手机上使用 Claude Code、Codex,希望任务能跨设备接力的开发者
- 想把多个 Agent 组织成"队长加队员",并做独立评审的人
- 想研究"大型 AI 辅助项目如何写规则文档"的工程师,
AGENTS.md加docs/dev-rules/的组织方式很有参考价值 - 想做 Agent 插件或 Skill,并接入一个现成客户端的人
使用建议
先下载客户端,用"Skip Sign-In"跑一遍本地 Agent,感受一下界面和引擎切换;再决定是否登录体验多设备能力。如果在意隐私,第一件事是去 设置 → 关于 里关掉使用统计,并仔细读 README 的 Privacy & telemetry 一节。想读源码的话,从 docs/dev-rules/repo-map.md 的"按用户行为定位"表开始,比直接翻目录高效得多。
探索 PrimeSkills —— 精选 AI agent 和技能工具,每一个都经过真实工作流验证。没有炒作,只有真正好用的工具。
访问我的个人主页,获取更多见解和有趣的产品。