com um clique
worktree
// 创建 Git worktree 隔离开发环境,含 Redis 6398 安全配置。 Use when: 开始任何代码修改、新功能开发、bug fix。 Not for: 纯文档修改(≤5 行)、不涉及代码的讨论。 Output: 隔离的 worktree + 正确的 Redis/环境配置。
// 创建 Git worktree 隔离开发环境,含 Redis 6398 安全配置。 Use when: 开始任何代码修改、新功能开发、bug fix。 Not for: 纯文档修改(≤5 行)、不涉及代码的讨论。 Output: 隔离的 worktree + 正确的 Redis/环境配置。
AI 图片生成:原生 tool call(Codex/Antigravity)或浏览器自动化(Gemini/ChatGPT)。 Use when: 需要 AI 生成概念图、UI 参考、像素画素材、完整 PPT 页面、复杂架构图、信息图或视觉 mock。 Not for: 已有图片的展示(用 media_gallery rich block)、硬要求可编辑/native text 的 PPT/图表(用 PPT/HTML 管线)。 Output: 生成图片自动发布,或作为完整视觉 mock / 图像素材进入后续交付。
PPT 制作全链路:内容分析 → 分页规划 → 低保真 MD → imagegen 精美图。 架构猫写低保真 MD(ASCII art 结构图 + 视觉指引),imagegen 猫逐页出精美图。 Use when: 做 PPT、做演示文稿、做 slide、帮朋友做 PPT、画架构图、画技术蓝图。 Not for: 纯代码开发(用 worktree/tdd)、纯文档写作(直接写)。 Output: 低保真 MD + AI 原生精美图(raster PNG)。
处理 reviewer 反馈:Red→Green 修复 + 技术论证(禁止表演性同意)。 Use when: 收到 review 结果、reviewer 提了 P1/P2、需要处理反馈。 Not for: 发 review 请求(用 request-review)、自检(用 quality-gate)。 Output: 逐项修复确认 + reviewer 放行。
向跨家族 peer-reviewer 发送 review 请求(含五件套)。 Use when: 自检通过后准备请其他猫 review。 Not for: 收到 review 结果(用 receive-review)、自检(用 quality-gate)。 Output: Review 请求信(存档到 review-notes/)。
铲屎官健康提醒:三猫撒娇打断 hyperfocus。 Use when: hook 触发提醒、用户输入 /hyperfocus-brake。 Not for: 正常工作流程、非铲屎官用户。 Output: 三猫温柔提醒 + typed check-in。
大任务的主动拆解与多 thread 并行编排。 Use when: 任务涉及 2+ 个独立可交付子任务,需要不同猫参与、不同 thread 并行推进。 Not for: 单一任务(直接做)、已有 thread 之间的被动协调(用 cross-thread-sync)、单 session 内 subagent 并行(CLI 内置能力)。 Output: 子 thread 创建 + 选猫 + 各 thread 交付 + 主 thread 汇聚报告。
| name | worktree |
| description | 创建 Git worktree 隔离开发环境,含 Redis 6398 安全配置。 Use when: 开始任何代码修改、新功能开发、bug fix。 Not for: 纯文档修改(≤5 行)、不涉及代码的讨论。 Output: 隔离的 worktree + 正确的 Redis/环境配置。 |
| triggers | ["开始开发","新 worktree","开 worktree"] |
| renamed-from | using-git-worktrees |
开始任何非 trivial 的功能开发前,必须拉 worktree 隔离,不要直接在 main 上改代码。
拉 worktree 前,先用记忆系统搜一下相关上下文(见 CLAUDE.md 记忆系统段落):
search_evidence("{feature关键词}")
search_evidence("{topic}", scope="all")
不搜就开工 = 从零开始,可能重蹈覆辙。
Cat Cafe 项目:../cat-cafe-{feature-name}(relay-station/ 同级)
git worktree add ../cat-cafe-{feature-name} -b feat/{feature-name}
.worktrees/ 子目录)cat-cafe-runtime 是生产环境,绝对不能删/清理! 它不是开发 worktreecat-cafe-runtime 里执行 pnpm start / pnpm runtime:start(会先 kill 旧 API,等于把在线 runtime 踢掉)localhost:3003/3004 默认属于 cat-cafe-runtime。如果你要验证当前 worktree 的未合入改动,浏览器 / Playwright / curl 不能直接打这两个端口,除非你明确是在做 runtime 验收而不是开发验证其他项目:先查 CLAUDE.md / AGENTS.md 有没有指定位置 → 有就用 → 没有再问用户。
开 worktree 前必须确认 main 与 origin/main 完全同步(双向)。其他猫看的是 origin/main,不同步 = 信息不对称。
# Step 1: 检查是否有未提交的文档变更
git status --porcelain docs/ | head -5
# 如果有输出 → 先 commit 再继续
# Step 2: 检查 main 与 remote 双向同步
git fetch origin main --quiet
AHEAD=$(git rev-list --count origin/main..main)
BEHIND=$(git rev-list --count main..origin/main)
echo "ahead=$AHEAD behind=$BEHIND"
# ahead > 0 → 先 git push origin main
# behind > 0 → 先 git pull origin main
# 两者都 = 0 → 可以继续
如果 main 与 remote 不同步:
git add docs/ + commit(如有未提交变更)git pull origin main(如果 behind > 0,先拉取其他猫的更新)git push origin main(如果 ahead > 0,推送本地更新)# 1. 创建 worktree
git worktree add ../cat-cafe-{feature-name} -b feat/{feature-name}
cd ../cat-cafe-{feature-name}
# 2. 安装依赖(必须清除 NODE_ENV,否则跳过 devDeps 导致 build 失败!)
env -u NODE_ENV pnpm install
# 3. 创建 .env(Redis 隔离,必须!)
cat > .env <<EOF
REDIS_URL=redis://localhost:6398
NEXT_PUBLIC_API_URL=http://localhost:3102
EOF
# 4. 验证 Redis 隔离
echo $REDIS_URL # 必须是 redis://localhost:6398,不能是 6399
# 5. 验证基线测试通过
pnpm test
| Redis | 端口 | 用途 |
|---|---|---|
| 用户 Redis | 6399 | 铲屎官的数据,🔴 圣域,只读 |
| 开发 Redis | 6398 | 猫猫开发测试,随便折腾 |
Worktree 中启动服务 = 必须用 6398。 不设置 REDIS_URL 就启动服务 = 回落到 6399 = 数据丢失风险(LL-015)。
F182 大赛 / 多猫并发开发时,6 个 worktree 同时跑各自服务不打架。
OFFSET 必须 ≤ 0(向下减避 production Redis (sacred)),范围 [-100, 0],10 倍数。offset=0 留给 alpha 默认。
| OFFSET | Redis | API | Web | NEXT_PUBLIC_API_URL |
|---|---|---|---|---|
| 0(alpha 默认) | 6398 | 3102 | 5102 | http://localhost:3102 |
| -10 | 6388 | 3112 | 5112 | http://localhost:3112 |
| -20 | 6378 | 3122 | 5122 | http://localhost:3122 |
| ... | ... | ... | ... | ... |
| -60 | 6338 | 3162 | 5162 | http://localhost:3162 |
派生公式:非 Redis = base - OFFSET(OFFSET 是负数 → 端口向上加),Redis = 6398 + OFFSET(向下减)。
# 1. .env 设置 OFFSET + 禁用 sidecar(多猫并发 worktree 默认)
cat > .env <<EOF
WORKTREE_PORT_OFFSET=-10
PREVIEW_GATEWAY_PORT=0
ANTHROPIC_PROXY_ENABLED=0
ASR_ENABLED=0
TTS_ENABLED=0
LLM_POSTPROCESS_ENABLED=0
EMBED_ENABLED=0
EMBED_MODE=off
EOF
# 2. 启动用 pnpm dev:direct 或 bash scripts/start-dev.sh
# ⚠️ 不要用 `pnpm dev`!它走 pnpm -r --parallel run dev,绕过 OFFSET preflight
pnpm dev:direct
OFFSET 非 0 时,派生值优先级高于 .env 和 CAT_CAFE_RESPECT_DOTENV_PORTS。即使 .env 里硬写了 REDIS_URL=...:6398 也会被派生值覆盖。这是 LL-015 防回归——避免"端口数字看起来对了但 ioredis 实际连了 6399"的事故。
pnpm check:worktree-port-offset # 验证全部 7 个大赛 OFFSET 派生 + 端口无冲突
诊断脚本是 CI 用,不是唯一 gate——唯一 gate 是 start-dev.sh 内置 preflight(启动时主动派生端口、强制 export sidecar=0、unset Redis dir 让重派生;OFFSET 派生失败 / Redis 圣域 6399 拒绝启动)。
多 worktree 并发默认全禁用 sidecar(Preview Gateway / Anthropic Proxy / Whisper / TTS / LLM Postprocess / Embedding)。OFFSET 模式下 preflight 会主动 export 0 这些 sidecar 标志(不依赖用户 .env),即便用户配置了 EMBED_MODE=on 或 profile=dev 想拉起 proxy 也会被覆盖——无需用户手动禁用。启用 sidecar 但又不 offset 化 → 端口冲突。
详细设计见 (internal reference removed)。
分支合入 main 后当场清理,不要留到下次:
git worktree remove ../cat-cafe-{feature-name}
git branch -d feat/{feature-name}
git worktree prune
检查是否有积压未清理:
git worktree list # 列出所有 worktree
git branch --merged main # 哪些分支已合入
apply_patch 陷阱(开发猫必读)apply_patch 落点由会话默认工作目录决定,不跟着 cd 走。
避免方式:
sed/perl 在目标 worktree 执行“我以为我在测 dev,实际打到了 runtime” 这种事故,根因通常不是命令本身,而是CWD / worktree / URL 三者脱钩。
验证当前 worktree 改动前,必须先明确两件事:
pwdgit branch --show-currentlocalhost:3003/3004,默认按 runtime 处理一句话铁律:未合入改动的验证,不得拿 runtime 的 3003/3004 冒充开发环境。
创建前:
git status --porcelain docs/ 无输出 + ahead=0 + behind=0,F073 门禁)*-runtime 命名.env 包含 REDIS_URL=redis://localhost:6398cat-cafe-runtime 的运行态验收会话(验收会话默认只读,不做重启命令)3003/3004,你知道自己在打 runtime,而不是当前 worktree 的本地改动清理前:
git branch --merged main)cat-cafe-runtime(永远不删)→ 直接加载 tdd(在 worktree 里开始实现)。SOP 链条自动推进(§17)。