# Cindy 客户端仓:Agent 工作入口 > 本文件是 Codex 与 Claude Code 共用的项目指令正本。`CLAUDE.md` 只保留 > `@AGENTS.md`,不要在两处重复维护规则。 ## 仓库边界 - 本仓库只负责 desktop、mobile 及其共享 packages。 - 服务端位于独立仓库;除非用户明确要求,不要跨仓修改服务端。 - 开始工作前先检查工作区状态和相关源码,不覆盖、不回退用户已有改动。 ## 规则组织 - 开发与工程规则统一放在 `docs/dev-rules/`。 - 产品行为与体验规则统一放在 `docs/product-rules/`。 - UI 视觉、交互与内容设计规则统一放在 `docs/design-rules/`,权威视觉规范正文为 `docs/design-rules/DESIGN.md`(根目录 `DESIGN.md` 仅为跳转入口),目录索引为 `docs/design-rules/cindy-design-system.md`。 - 根 `AGENTS.md` 只保留所有任务都适用的规则、风险入口和文档索引。 - 目录或模块专属规则优先放到对应目录的嵌套 `AGENTS.md`;需要跨目录复用的 专题说明放在 `docs/`,并由本文件写明触发条件。 ## 按模块进入 开发、启动、调试或验证对应模块前,先读下表入口,再按改动触发条件读专题;根级规则始终适用。 跨模块行为先从[仓库地图的行为导航](docs/dev-rules/repo-map.md#按用户行为定位)查找公共入口与测试, 不要只修改最先找到的页面或渠道。 | 修改范围 | 模块规则入口 | 开发与架构正本 | | --- | --- | --- | | Desktop:main、renderer、preload、数据库、个人 IM / 官方 hook | [apps/desktop/AGENTS.md](apps/desktop/AGENTS.md) | [Desktop 开发](docs/dev-rules/desktop-development.md) | | Mobile:Expo 页面、远程调用、原生配置与模块 | [apps/mobile/AGENTS.md](apps/mobile/AGENTS.md) | [Mobile 开发与冷更边界](docs/dev-rules/mobile-development.md) | | maker-core:Agent 编排、prompt、工具、translator、用量 | [packages/maker-core/AGENTS.md](packages/maker-core/AGENTS.md) | [Agent 行为](docs/dev-rules/maker-core-and-agent-behavior.md) | ## 当前规则索引 - 首次接触本仓、需要定位功能代码位置或判断新代码归属模块时,先读仓库地图 `docs/dev-rules/repo-map.md`。 - 只为检查界面而需要启动 Desktop 或 Mobile 模拟器、且不需要真实账号时,用 `--mock` 免登录模拟数据启动;新增或修改模拟任务、`--mock` 行为前先读 `docs/dev-rules/ui-mock-data.md`。 - 首次安装、修复依赖或准备新 worktree 时,必须先读 `docs/dev-rules/environment-setup.md`。 - 首次理解模型配置架构,新增模型/供应商,更新模型窗口/价格/推理档位/默认值/本地推荐, 或排查目录下发与显示错误前,必须先读 `docs/dev-rules/model-catalog-maintenance.md`: 先看结构、覆盖顺序与修改位置,再按其中导航读取专题规则和实际代码;Server 正本与客户端 离线副本需协调更新,客户端已支持、Server 已实现和生产已部署必须分别核验。 - 修改凭证或授权信息处理、文件落盘位置、用户持久数据、临时文件或测试目录前,必须 先读 `docs/dev-rules/credentials-and-local-storage.md`。 - 新增或修改媒体生成、导入、缓存、附件、持久化、协议解析或回收逻辑前,必须先读 `docs/dev-rules/media-storage-and-protocols.md`。 - 新增或调整产品功能、判断能力应进入 Core / Skill / 插件、设计人机交互或多端体验 前,必须先读 `docs/product-rules/core-product-principles.md`。 - 新增或修改 Agent 管理用户自己的任务、定时任务、项目、伙伴的工具(`cindy_helper` / `cindy_scheduler` 等),或调整工具索引、工具的作用范围说明前,必须先读 `docs/product-rules/agent-user-parity.md`:用户本人能做的(含跨电脑)Agent 也要能做并能在 索引第一步发现;改完把现状台账写回去。 - 修改共享任务、跨账号访客邀请、共享上下文或共享成员权限前,必须先读 `docs/product-rules/shared-task-mode.md`;复用 device-link,同账号远控行为不变。 - 修改 IM 工具授权、来源消息、多端确认或暂停期间的确认回执,或新增 IM 渠道前, 必须先读 `docs/product-rules/im-permission-confirmation.md`;Desktop、Mobile 与共享 packages 共用同一最终决定,渠道收到回答不代表执行已恢复。 - 新增或修改代输入(`request_input_handoff`、宿主步骤读取与执行、代输入卡、终端 askpass、 单窗口实时画面、设备码识别,或任何经手主人填写值的路径)前,必须先读 `docs/product-rules/input-handoff.md`:主人填写的值只交给宿主执行,不进模型、记录、日志、IM 与推送。 - 修改账号用量上限的判定、重置时刻来源,或普通任务/目标模式撞上限额后的等待与自动继续前, 必须先读 `docs/product-rules/usage-limit-auto-continue.md`。 - 新增或修改自动发送/远程发送消息的路径、消息来源标签,或发给模型的来源说明前,必须先读 `docs/product-rules/message-source.md`:界面标签与模型说明同源,两侧一起改。 - 修改伙伴(Bot)的身份、Session 生命周期、模型 fallback、工作目录、Skill / MCP 装配、 委派协作或伙伴设置前,必须先读 `docs/product-rules/cindy-bots-runtime.md`。 - 修改伙伴调用任务写工具的身份判定(主人代办 / 受托 / 自主)、自主轮可做的范围、转达主人原话的 核实凭证,或伙伴提示词里对应的说法前,必须先读 `docs/product-rules/teammate-authority.md`。 - 修改伙伴的跨电脑身份、主力电脑(登记、接管、交出、降级)、云端对话层与资料上传,或 `apps/desktop/src/main/companion-cloud/`、Chat Server 的伙伴 actor/1:1 房间合同前,必须先读 `docs/product-rules/cloud-companions.md`。 - 新增或修改伙伴群聊的数据、发言编排、群专线 Session、分工(负责人、安排、分工 Session、群工作目录)、 群聊界面或手机端群聊(`bot-groups` 远程资源、群推送深链)前,必须先读 `docs/product-rules/bot-group-chat.md`。 - 新增或修改 `/review`、Reviewer 任务、成果快照、Finding 协议、复核入口、结果呈现或 复核生命周期前,必须先读 `docs/product-rules/review-product-direction.md`。 - 新增或修改按区域(`cn` / `global`)分支的逻辑、构建身份与命名、端点选择、区域相关 UI 标注,或涉及两个版本关系的对外文案前,必须先读 `docs/product-rules/region-and-editions.md`:**无限定词身份归 Global,未显式指定 区域一律落在 `global`,只标注中国大陆版**。 - 新增或修改供应商分享(把远程供应商分享给其他账号)、分享链接、分享申请与审批、 分享管理页,或受邀者使用分享供应商的任何路径前,必须先读 `docs/product-rules/provider-sharing.md`;它为远程 Agent 通道新增跨账号授权,并允许 中国大陆版与 Global 互享,与共享任务是两套独立授权。 - 新增或修改供应商组(把多台电脑上的同一个供应商合成一组)、组策略、组内电脑的添加与状态、 经供应商组的任务分配或转发,或「远程与分享」页的组与用量前,必须先读 `docs/product-rules/provider-groups.md`:Agent 始终在被选中的组内电脑上运行,组所在电脑 只选电脑与转发,并负责按使用方隔离。 - 新增或修改任何界面、组件、布局、样式、动效或 UI 文案前,必须先读权威设计规范 `docs/design-rules/DESIGN.md`;设计文档索引见 `docs/design-rules/cindy-design-system.md`。 - 做 UI 圆角分类或点击目标尺寸审查时,必须同时读 `docs/design-rules/DESIGN.md §5` 与 `docs/design-rules/design-governance.md §13`;普通 UI 改动同样适用,不限于设计系统迁移 PR。 - 新增或修改设计 Token、主题系统、标准 UI 组件(primitive / pattern)、视觉类门禁脚本, 或参与设计系统迁移 PR 前,必须先读治理合同 `docs/design-rules/design-governance.md`:真相源边界、兼容红线、两级证据合同与 PR 风险分类均以它为准;视觉规则本身仍以 `DESIGN.md` 为准。 - 新增或修改任何 UI 文案里的**产品术语**前,必须先查术语表 `i18n/GLOSSARY.md`:已裁决 的术语照用,不自造译法;表里没有或拿不准的,在 `i18n/glossary.json` 加 `status: "proposed"` 条目再讨论。门禁为 `pnpm check:i18n-glossary`,规则见 `docs/dev-rules/engineering-conventions.md` §5.1。 - 新增或修改**任一 Telegram bot 的用户可见行为**(命令、消息呈现、收口策略、群行为、 权限口径、附件与表情)前,必须先读能力台账 `docs/product-rules/telegram-bot-parity.md`: 两个 bot 是两套架构,差异可以有但必须登记在表里;表里标「有意不同」的行**不要去 "统一"**,动它要先推翻对应裁决。改完记得把对应行写回去。 - 文案里出现**任务 / 对话 / 消息**这几个词时,必须先读 `docs/product-rules/task-and-conversation-naming.md`:`session` 面向用户叫「任务」, 「对话」只用于任务内的交流过程与内容,单条往来叫「消息」;**「任务」与 `task` 同句出现 时必须消解歧义**。这三个词的边界拿不准会直接做出用户能看见的不一致。 - 所有新增或修改的 UI 必须同时**实现** Light 与 Dark 两种模式(颜色一律走语义 token, 禁止只适配一种模式的硬编码或条件补丁);只实现一种模式视为未完成。**两种模式的实机 目检不是硬性门槛**——能目检更好,做不到时如实写明哪种模式未验证,不得把「复用了 themed 样式」当成「双模式已验证」。具体要求以 `docs/design-rules/DESIGN.md` 的双模式交付门槛 为准。 - 修改 Orca 多 Agent 协同时,必须先读 `docs/dev-rules/orca-team-architecture.md`。 - 修改任何进入模型 system 段的提示词前(无论文件位于哪个模块),必须先读 `docs/dev-rules/maker-core-and-agent-behavior.md`。 - 修改 PI harness 集成(`packages/maker-core/src/agents/pi/**`、`pi-host.ts`、 `piEnvironment.ts`)、PI 会话权限/配置/system prompt/桥接,或 PI 相关的上线判断前, 必须先读 `docs/dev-rules/pi-harness.md`(含设计原则、维护不变量与上线清单)。其中 **Pi 原生能力非退化是红线**:Pi 原生允许的安装、更新、扩展加载与 Agent 自助修复,Cindy 不得以静态分析、TUI/RPC 兼容提示、内容指纹、宿主审批或新增的“安全增强”为由拒绝、停用 或变成不可逆流程;显式用户命令即授权。Cindy 只能增加可跳过的提示和更顺畅的 GUI,不能让 Cindy Pi 比同版本原生 Pi 更难用。完整裁决见 `docs/dev-rules/pi-harness.md`「Pi 上游 GUI 非退化红线」。 - 修改插件(`.cindy`)运行时、沙箱、权限、能力 slot、面板供片、网络/凭证/文件交接, 或身份卡、管子协议、打包与编写手册前,必须先读 `docs/dev-rules/plugin-security-and-authoring.md`。其中**存量插件兼容是红线**:任何 插件系统改动(含批准状态 schema、指纹格式、manifest 校验、安装布局、包格式)都必须 向下兼容——用户升级后什么都不做,已装、已批准、已启用的插件必须照旧可用,**绝不允许 要求用户重新安装、重新确认权限或重新配置**。做不到就必须自带从旧版数据的自动迁移; 自动迁移也做不到时,必须有明确提示 + 一次性批量恢复入口,且不丢用户已存的凭证与偏好。 漏迁移 = P0,规则正文见该文件第 5 节。**改到插件基座**(运行时/沙箱、批准状态记录、 能力 slot、打包与内容判据、manifest 契约、装入与权限确认 UI、已装列表投影)的 PR 一律 走白名单确认门,需放行人明确 Approve 才能合并,不看 diff 大小、不因「是 bugfix/纯技术 改动」豁免。 - 修改插件发现链(花名册注入、`ghost_list` / `ghost_info` / `ghost_call`)、插件运行期 可见性门禁或 FORGE_GUIDE 作者契约前,必须先读 `docs/ghost-progressive-discovery.md`。 - 新增或修改插件持久 Library(library 槽、binding / 目录选择、随时迁移、 回收站删除、SQLite 语句门或 `/library/` 面板投影)前,必须先读 `docs/dev-rules/plugin-library-storage.md`。 - 修改客户端自动更新链路(`cindy-updater` 或 Electron 侧更新服务)前,必须先读 `docs/dev-rules/cindy-updater.md`。 - 新增或修改 Desktop 日志、IPC 错误处理、main 侧业务逻辑与测试、跨平台(macOS/ Windows)行为,或任何 UI 文案的 i18n 落地前,必须先读 `docs/dev-rules/engineering-conventions.md`。 - 新增或改写任一测试前,必须先读 `docs/dev-rules/engineering-conventions.md` §3.2「新增测试的价值门槛」。测试必须通过 真实生产入口验证可观察结果,并说明 Bug/规则依据、现有覆盖缺口、最小失败输入和 tier; 没有新的结果、错误、权限、持久化、协议或时序差异时停止增加用例。纯跨文件安全、 权限、协议或设计契约才进入 guard;不得为了覆盖率、测试数量或复制常量/JSX/CSS/ 源码字面量而新增测试。同时遵守该节「性能预算」:新文件单独运行本机 5 秒内并在 PR 填实测耗时;被测模块只加载一次,不在 `beforeEach`/逐用例 helper 里 `vi.resetModules()`; 不做 ≥100ms 真实等待;同一模块的用例并入已有文件。`pnpm check:test-hygiene` 在 CI 阻断违规,基线只减不增,不得手改基线放行。 - 修改客户端日志采集/脱敏/上报链路(`apps/desktop/src/main/log-upload/**`)、`logger.ts` 的 main 日志行格式、崩溃判定或待补传标记前,必须先读 `docs/dev-rules/log-upload-and-redaction.md`。其中三条是**不变量**:**记录边界**(写侧 续行转义与读侧切分是同一条不变量的两半,破坏任一侧即隐私逃逸)、**白名单方向** (deny-by-default,不得改成黑名单——调试级别的功能日志是用户内容的主要泄漏源)、 **标记代次 + 原子清除**(并发实例下仅靠时间戳会误删另一实例刚写的新崩溃标记)。 脱敏规则**只增不减**,放宽任一条视为隐私变更、需重新评审。 - 修改本地协议 package、插件分发来源边界或 device-link 协议/relay/隧道 payload/IPC allowlist,或任何改动跨端 wire protocol 前,必须先读 `docs/dev-rules/protocol-compatibility.md`。 - 修改 package 依赖方向、main 进程模块加载方式,或主界面布局树结构前,必须先读 `docs/dev-rules/architecture-invariants.md`。 - 新增或修改 Settings UI、配置文件、本地偏好、运行时 profile,或 agent/MCP/provider 开关前,必须先读 `docs/dev-rules/configuration-and-overrides.md`。 - 新增或修改涉及 workdir 文件、agent 进程、会话数据的功能,新增 IPC channel/推送事件, 或修改 device-link 的重试/超时/断链恢复逻辑前,必须先读 `docs/dev-rules/remote-and-mobile-adaptation.md`;其中恢复路径改动必须回答该文件的 「故障半径三问」。 - 在 Cindy 内嵌 worktree 会话里工作、准备提交或直推、或做 code review 前,必须先读 `docs/dev-rules/development-workflow.md`。 ## 通用工作流程 1. 先确认用户目标、仓库边界、当前分支、worktree 和工作区状态。 2. 尊重开发者或宿主已经提供的 Git 工作流。已有任务分支或 worktree 时直接复用, 不嵌套创建;没有隔离方案时,可以建议新功能使用独立分支或 worktree,但不要 擅自搬动或混用现有工作区。 3. 根据任务类型读取 `docs/dev-rules/`、`docs/product-rules/` 与 `docs/design-rules/` 中相关规则。 4. 先读实际代码和测试,再决定实现;不要只依赖文档猜测现状。 5. 修改时保持范围最小,保护用户已有改动,不使用破坏性 Git 命令。 6. 完成后运行与风险匹配的检查,并 review 整体 diff。 7. 如实报告已验证、未验证、风险和需要用户决定的事项。 ## Git 与交付 - 本仓默认 PR-first。代码和文档通常从非默认分支通过 PR 进入 `main`;只有仓库 维护者明确选择例外时才允许直推主干。 - commit、push 和创建 PR 的执行时机由开发者或 Codex、Claude Code、Cindy 等宿主 工作流决定;仓库规则本身不额外授权外部写操作。 - 提交 PR 时遵循 `.github/PULL_REQUEST_TEMPLATE.md`,如实说明改动、验证和风险。 - 非 fork 的非 draft PR 会触发自动 code review(`.github/workflows/pr-code-review.yml`), 审阅口径见根目录 `REVIEW.md`。它是**建议性**检查,不替代人工 review,也不替代 `client-ci` 的机器门禁;改动上述两份文件前先读 `REVIEW.md` 开头的说明。 - **DCO 签名(硬性要求)**:本仓每个 commit 都必须带 `Signed-off-by` trailer,且其中的 名字与邮箱都要与 commit 的 author(或 committer)一致,用 `git commit -s` 生成; agent 的自动提交同样适用。PR 上的 DCO check(DCO GitHub App,配置见 `.github/dco.yml`)会拦下漏签的 commit。`git commit` 没有自动签名的配置项,一次配好 可跑 `pnpm dco:install-hook` 装 `.githooks/prepare-commit-msg`;提交前自查用 `pnpm check:dco`。DCO 全文见根目录 `DCO`,贡献者说明见 `CONTRIBUTING.md`。 对自动 code review 环境的说明:review 沙箱 checkout 出的 HEAD 可能是平台合成的 瞬时 commit(不存在于本仓库、GitHub 上查不到该 SHA);对这类合成 SHA 跑 `check:dco` 的失败结果不构成缺签证据,不要据此报告 DCO 问题。判定 DCO 是否通过, 一律以 PR 上的 DCO App check 与真实提交范围(`origin/main..PR head`)的结果为准。 - **提交前验证**:提交前必须完成与改动风险匹配的测试和相关 package 的类型检查。 默认使用根 `pnpm test:unit:related` 选测;已按影响面完成等效定向验证时,不要求为了 commit 重跑整仓测试。相关 package 运行 `pnpm --filter <包名> run --if-present typecheck`(包名以该 package 的 `package.json` 为准)。已执行检查的失败必须修复或明确说明既有故障,未执行项和原因须如实记录。 本机资源预算、并发与跨任务排队由使用者或宿主决定,仓库不强制多个 session 串行。 GitHub CI 保留完整单测与合并门禁;细则见 `docs/dev-rules/development-workflow.md`。 - 按风险追加验证:跨模块、高风险或基础设施改动追加更广泛验证(如 `pnpm test:all`),最终以 CI 门禁为准。不得通过跳过、删除或弱化测试制造通过。 ## 绝对安全底线 - 用户凭证、令牌、授权文件和密钥不得写入仓库或任何可能被 Git 跟踪的路径。 - 未经用户明确授权,不执行删除数据、覆盖改动、推送、发布、合并等外部或难以 恢复的操作。 - 发现任务会触及系统提示词、更新器、协议兼容、数据库历史 migration、权限边界 或用户数据安全时,必须先停下来核对专项规则,并在动手前向用户说明风险或 请求确认。