以下目录结构为长期约束,后续修改 AGENTS.md 时不得删除,只能增补:
.
├── .codex/ # Codex 项目级配置:subagent、项目运行参数等
│ ├── config.toml
│ └── agents/ # 项目级 Codex custom agents
├── AGENTS.md # 行为规则,可按任务优化但需保留路径规范
└── docs-linhay/ # 项目文档系统目录:开发计划、需求文档、技术文档等
├── spaces/ # 以 feature / topic / milestone 为单位的工作空间根目录
│ └── <space-key>/
│ ├── README.md # 当前 space 的需求背景、目标、范围、验收标准
│ ├── plans/ # 开发计划、迭代规划、里程碑
│ └── screenshots/ # 截图,按日期/模块分层存放
├── dev/ # 研发文档(架构、技术方案、测试策略、数据字典等)
├── memory/ # 记忆系统(MEMORY.md + 每日日志)
├── references/ # 参考项目、外部资料归档
└── scripts/ # 自动化脚本及其说明文档
补充约束:
spaces为正式目录名,后续所有文档落位和引用都以该路径为准。<space-key>采用可追踪的英文 slug,优先使用<YYYYMMDD>-<topic>或稳定功能名,禁止空格、中文、latest、final。- 每个
space的入口文档固定为README.md。 - feature 开发用的 Git
worktree不放在仓库目录内,统一放在主仓库同级目录../GetTokens-worktrees/。 - 单个 feature
worktree的推荐路径为../GetTokens-worktrees/<space-key>/;默认与对应space共享同一个<space-key>。 worktree是临时执行环境,space是长期文档资产;需求完成后可删除worktree,不得删除对应space历史。- 单个
space的单期设计稿默认只保留一个 HTML 文件;若存在多稿对比,也必须收敛在同一个 HTML 文件内,不再为同一期拆分多个option-*.html。
- BDD + TDD 必须先行:先场景与验收标准,再失败测试,再实现。
- 全程中文沟通。
- 小步提交、可回归验证,避免大块不可控改动。
- E2E 场景覆盖核心功能,单元测试覆盖边界条件。
- 文档与记忆同步更新,保持信息一致性。
- 任何改动都要考虑对后续维护者的可理解性和可操作性。
- 涉及 Web / 前端体验优化时,默认由 Gemini 主导前端实现;Codex 负责业务逻辑、接口契约、状态流转、测试门禁、回归验收与最终集成。
- 前端改动若影响后端接口、领域模型或关键交互闭环,必须先由 Codex 明确边界,再交给 Gemini 落地,避免只改视觉不改业务完成度。
- 当一次会话中出现“有用且重复出现”的行为模式、排障路径或交付动作时,必须先识别复用边界,再优先新增或更新项目级
skills;只有当规则已经上升为 repo-wide、长期稳定的约束时,才同步更新AGENTS.md。 - 当用户明确说“整理”且语境指向刚完成的一轮工作会话时,默认触发一次会话沉淀流程:先按
gettokens-session-skill-distill提炼可复用模式,再按是否 repo-wide 决定是否同步更新AGENTS.md、docs-linhay/dev/、docs-linhay/memory/。 - 多份独立需求稿并行推进时,默认按“一个需求单元一个
space,必要时再配一个同 key 的 branch 与worktree”组织,不按个人姓名或临时阶段单独命名工作目录。 - 当用户明确要求“由 subagent 去做、主控 agent 负责监督”时,主控 agent 必须承担需求边界、任务拆分、集成、验收、文档与最终完成判断,不得在“代码已改完”但截图、实机验证、文档写回等验收环节仍未完成时提前停止。
- 当某个
space的需求施工结束并进入整理期时,默认执行一次行为保持的收尾整理:识别大文件和大数据结构,优先按稳定边界拆分文件;同步提取可复用流程到项目级skills,仅把 repo-wide 且长期稳定的规则写入AGENTS.md;最后更新 space、dev 文档与 memory。 - 本地 Web / Wails 预览验收默认使用无头浏览器、DOM 断言和文件截图;除非用户明确要求可见窗口,否则不得把 Playwright、Chrome 或其他浏览器验收窗口打开到用户当前激活显示器。确需可见窗口时必须先询问,或放到非激活副屏。
- 通用看板产品线按固定节奏推进:新建
space-> 设计需求 -> 技术细节补充 -> 回到需求调整 -> 调整设计系统的稿子 -> 执行开发 -> 冒烟测试 -> 交付用户测试。 - sidecar 是 GetTokens 运行态自治层。账号选择、rate-limit、route guard、live sessions、usage attribution、system proxy、Codex WebSocket 等热路径状态优先在
CLIProxyAPI#gettokens/sidecar内闭环,不通过前端或 Wails 临时补偿来伪造 sidecar 已处理状态。 - 从账号与凭证 SQLite 统一存储版本开始,GetTokens sidecar 不再跟随 CLIProxyAPI 上游做合并式同步。上游提交和功能只能作为参考输入;需要的能力必须在 GetTokens sidecar 边界内重新设计、实现、补窄测试并重建 sidecar。management API 可以按 GetTokens 需求破坏性调整,不为了上游兼容保留旧合约。
- GetTokens 是 macOS/Wails 桌面工作台产品,默认不做移动端适配、移动端截图或 375/390px 宽度验收。前端与视觉改动默认按桌面窗口、Wails 容器和可用的桌面浏览器预览验收;只有用户在当前需求中明确提出移动端目标时,才增加移动端布局与截图门禁。
- 项目级 Codex subagent 配置统一放在
.codex/agents/,默认命名为gettokens_*;除非正在验证模型路由能力,否则 agent 默认继承父会话模型,只用职责、sandbox 和 reasoning effort 区分任务面。 - 主控 agent 可根据任务判断自主新增、删除或修改
.codex/agents/*.toml,不需要逐次请求授权;但必须说明判断依据,验证 TOML 可解析,并更新docs-linhay/dev/20260530-codex-project-subagents.md与 memory。 - 工作台内详情类或调试类 modal 默认必须使用覆盖整个应用窗口视口(包括 sidebar 区域)的遮罩层,面板四周保留可见遮罩与投影间距,并具备可恢复的独立 hash 路由。打开 modal 时写入
detail=<id>或modal=<route>,关闭时只移除对应标记;全局 hash canonicalizer 不得丢弃仍属于当前 frame/workspace 的 modal/detail 参数。 - 上下游自身限制不由 GetTokens 默认兜底:若根因属于 Codex CLI / Codex upstream 的协议行为、请求体限制或服务端限制,而非 GetTokens sidecar 引入的重复、放大、错误转换或本地限制,默认只做定位、证据保留和规避建议;只有确认是 GetTokens 转发层自身 bug,或用户明确授权做兼容层,才进入 GetTokens 侧实现。
- 未经用户明确授权,不得触碰正式版 GetTokens:修复与验证默认只在 dev 环境、本仓库构建产物或明确指定的测试环境中进行;禁止擅自修改
/Applications/GetTokens.app正式版二进制、重启/kill 正式版进程、替换正式版 sidecar 或改动正式版配置。 - 正式版数据可拷贝到 dev 环境用于复现问题:允许从
/Users/linhey/.config/gettokens/拷贝 SQLite 数据库、配置文件等数据到/Users/linhey/.config/gettokens-dev/进行测试,但必须先在 dev 目录备份原有数据,验证完成后恢复。
- 明确需求边界与验收条件。
- 先补测试并确认失败(红灯)。
- 最小实现让测试通过(绿灯)。
- 必要重构并保持测试通过。
- 更新相关文档与记忆。
- 若本次任务提炼出可复用的项目动作、流程或知识边界,新增或更新对应
skills;若同时形成长期稳定规则,再更新AGENTS.md。 - 若用户以“整理”作为收尾指令,且本轮存在稳定可复用模式,不需要额外追问是否沉淀,直接进入
skills/AGENTS/ docs / memory 的整理流程。 - 若某个需求将进入并行开发、多日实现或与其他需求同时切换,先补齐对应
space,再创建同 key 的 branch /worktree。 - 若需求采用
subagent交付,标准完成顺序必须覆盖:需求边界确认、subagent 分工、主控集成、自动化验证、Wails/桌面验收(如适用)、截图或其他验收产物、文档与记忆写回;未跑完这一整链,不得宣称需求完成。 - 通用看板产品线每轮都必须先更新对应
space的需求与验收,再补技术细节;技术约束反推需求后,需要回到space调整需求,再进入设计系统稿、开发、冒烟和用户测试。
- 任何功能改动都要有对应测试(新增或更新)。
- 未运行测试时必须明确说明原因与风险。
- 禁止“只改代码不验证”。
- 纯文档或治理规则调整若无可执行测试,至少要完成结构自检、路径校对与引用校对,并在交付说明中明确写明“未运行自动化测试”的原因。
docs-linhay/ 是项目文档系统目录,按类型分文件夹:
docs-linhay/spaces/<space-key>/README.md:单个需求空间的背景、目标、范围、验收标准、相关链接。docs-linhay/spaces/<space-key>/plans/:该需求空间下的开发计划、迭代规划、里程碑。docs-linhay/spaces/<space-key>/screenshots/:该需求空间下的截图归档。docs-linhay/dev/:研发文档、技术方案、治理说明。docs-linhay/memory/:记忆系统(MEMORY.md+ 每日日志YYYY-MM-DD.md)。docs-linhay/references/:参考项目、外部资料归档。docs-linhay/scripts/:自动化脚本及其说明文档。
Git worktree 治理:
space负责需求背景、计划、截图和验收;worktree只负责该需求的代码执行上下文。- 默认映射为:
space = docs-linhay/spaces/<space-key>/、branch = feat/<space-key>、worktree = ../GetTokens-worktrees/<space-key>/。 - 只讨论、不落代码的需求稿只建
space,不建worktree。 - 一次性小修或当天即可完成的短改动,可直接在主工作区开短分支,不强制建
worktree。 - 会并行推进、会持续多天、会频繁切换上下文的需求,必须使用独立
worktree。 - release、打包、一次性验证类短命工作区可继续放在
/private/tmp/,但常规 featureworktree不得放在/tmp。 - 禁止在主仓库目录内嵌套创建 feature
worktree,避免污染搜索、索引和脚本扫描范围。 - 合并完成后删除对应
worktree,保留space文档、截图和计划历史。
设计稿治理:
- 设计稿 HTML 默认落在对应
space根目录,作为该期视觉/交互方案的唯一入口。 - 单个
space的单期设计稿只保留一个 HTML 文件,文件名应语义化且可追踪,例如design-preview.html、usage-dashboard-design-v01.html。 - 同一期内若需要展示多方案对比、多个状态或多个区域稿,统一放在同一个 HTML 文件中,用分节、锚点或标签页组织,不再拆成多个平行 HTML 文件。
- 只有跨期迭代时才允许新增下一版 HTML,例如从
*-v01.html演进到*-v02.html;同一期内禁止出现option-a/b/c平行文件。 - 既有多 HTML 设计稿视为历史遗留;后续新增或重构时按本规则收敛,不要求本次治理整理顺手迁移所有旧稿。
文档落位硬约束:
- 需求变更先写对应
space,再改代码。 - 技术方案和治理说明放
docs-linhay/dev/。 - 截图、计划材料必须跟着对应
space走。 - 外部参考资料统一归档到
docs-linhay/references/。 - 完整源码型本地参考项目默认不进入 git;
docs-linhay/references/只提交根部 Markdown 索引、调研摘要和必要的小型资料,参考项目源码目录由.gitignore忽略。既有已跟踪参考目录视为历史遗留,后续新增参考项目必须遵循“不提交源码目录,只提交调研结论”的规则。
项目级 skills:
- 涉及
space创建、命名、README 模板或截图归档时,优先使用gettokens-ops-governance。 - 涉及文档写回或 memory 写回时,优先使用
gettokens-ops-governance。 - 涉及 AGENTS 级长期治理规则时,优先使用
gettokens-ops-governance;若用户明确说“整理”,同时使用gettokens-session-skill-distill。 - 涉及账号池、quota、视觉系统、前端调试归因或 CLIProxyAPI fork 维护时,优先使用
gettokens-domain-engineering。 - 涉及 Codex 账号列表、请求顺序、路由探测、OAuth/openai-compatible 模型映射时,优先使用
gettokens-codex-account-list。 - 涉及“主控 agent 监督、subagent 实做、直到完整需求闭环才停止”的执行模式时,优先使用
gettokens-ops-governance中的Subagent Delivery Loop。 - 若用户希望用显式 skill 名称触发该模式,使用
gettokens-subagent-supervision;它是监督交付模式的轻量触发入口。 - 涉及 Codex Skills / MCP Servers、
[[skills.config]]、tk://github.com/tk://gitlab.comSkill source、~/.codex/config.tomlMCP 解析与保存时,优先使用gettokens-codex-extensions-management。 - 涉及项目级 Codex custom agents、
.codex/config.toml、.codex/agents/*.toml或 subagent 任务分工配置时,优先参考docs-linhay/dev/20260530-codex-project-subagents.md。 - 涉及项目级 Codex subagent 的新增、删除、合并、拆分、验证或生命周期治理时,优先使用
gettokens-subagent-lifecycle。
出现以下情况必须写入记忆:关键决策、行动项、偏好变化、里程碑、风险结论。
- 写入
docs-linhay/memory/YYYY-MM-DD.md - 每周合并到
docs-linhay/memory/MEMORY.md(只保留稳定高价值信息)
- 新建
space时优先使用docs-linhay/scripts/create-space.sh <space-key>。 - 提交前或调整治理规则后,运行
docs-linhay/scripts/check-docs.sh做结构校验。 - 新建 feature
worktree时,默认使用git worktree add ../GetTokens-worktrees/<space-key> -b feat/<space-key> master;若当前集成分支不是master,以当轮基线分支替换末尾参数。 - 采用
subagent交付的需求,主控 agent 收尾前默认补做一次 DoD 自检:测试、桌面验收、截图、文档、memory、必要时check-docs.sh。
- 验收场景满足。
- 相关测试通过,或已说明阻塞、未测原因与风险。
- 文档已更新到正确目录。
- 有意义变更已写入记忆并可追溯。
- 若本次工作产生了可复用且重复出现的行为模式,已完成对应
skills/AGENTS.md的新增或更新,或已明确说明为何暂不沉淀。