把 Claude Code 的默认上游从 Anthropic 直连改到 DeepSeek 的 Anthropic 兼容端点 (`https://api.deepseek.com/anthropic`),使容器内 agent 直接复用 DeepSeek API 而无需 Anthropic 账号。 - docker-compose.yml: 透传 ANTHROPIC_BASE_URL / ANTHROPIC_SMALL_FAST_MODEL; 默认值 deepseek-v4-pro (主) + deepseek-v4-flash (子任务) - README.md: "前置条件" 改为 DeepSeek 优先;"切到 API Key 模式" 写明 DeepSeek 端点和原生 Anthropic 两种填法 - scripts/bootstrap.sh: 自动生成 .env 时的提示语对齐新文案 仍兼容原 Anthropic 直连:清空 ANTHROPIC_BASE_URL 即可回退。 .env 已 gitignored,未提交真实 key。 注:.env.example 的同步 rewrite 因 pre-commit-check.sh 误报旧占位符 (sk-ant-xxxxx...),将单独提交。 Made-with: Cursor
ai-ops —— 六仓库企业矩阵的 Agent 工作站
给 chat-gw / xiaoshou / gongdan / casdoor-internal / CloudCostbrank / lobechat-enterprise
这六个仓库提供一个开箱即用的 Claude Code 容器化工作环境。
每个团队成员在自己的机器上跑自己的容器,用自己的 Claude Max/Pro 订阅登录。 共享的只是这份仓库里的 Dockerfile / CLAUDE.md / settings.json。
前置条件
- macOS / Linux,装好 Docker Desktop(>= 4.30)并能拉公网镜像
- 有 DeepSeek API Key(默认)或 Claude Max/Pro 订阅 / 原生 Anthropic API Key
- 能访问 6 个业务仓库的 GitHub 权限(已配好 ssh-key 或 gh auth login)
快速上手(3 分钟)
# 1. clone 本仓库(ai-ops)到你想放的地方,例如 ~/work
cd ~/work
git clone git@github.com:your-org/ai-ops.git
cd ai-ops
# 2. 一键初始化:clone 6 个业务仓库 + 构建镜像
make bootstrap
# 3. 进容器并登录
make enter
# 容器内:
/login # 浏览器完成 Claude Max/Pro 授权
/status # 确认登录成功
完成后,容器里 /workspace 下能看到 7 个目录(6 个业务仓库 + ai-ops 本身)。
目录约定
默认布局(REPOS_DIR 不设时):
~/work/ ← 任意名字
├── ai-ops/ ← 本仓库
├── chat-gw/
├── xiaoshou/
├── gongdan/
├── casdoor-internal/
├── CloudCostbrank/
└── lobechat-enterprise/
如果你 6 个仓库放在别处,编辑 .env:
REPOS_DIR=/Users/alice/projects
然后 make build && make enter 即可。
常用命令
make enter # 交互进入 Agent
make task CMD="扫描 6 仓库的 CVE 并提 PR" # 非交互单任务
make logout # 清除登录状态
make build # 重新构建镜像(改了 Dockerfile 后)
权限模型
- 容器内的 Agent 按
.claude/settings.json的 allow/deny 列表行事:- ✅ 允许:git 操作、
pytest/npm test/make/gh pr - ❌ 拒绝:
git push --force、rm -rf /、读.env、alembic downgrade、生产数据库操作
- ✅ 允许:git 操作、
- 你宿主机的
~/.ssh和~/.gitconfig只读挂载到容器内,git push 能用,但 Agent 改不了你本机配置 - 登录凭证存在 docker volume
claude-home,不要把这个 volume 导出给队友——每人各自/login自己的订阅
Agent 团队阵容
启动 make enter / ./scripts/enter.sh 时,banner 会列出全部已加载 agent 和命令。当前:
13 个专家 Subagent(主 Agent 根据任务自动派遣)
| 专家 | 负责仓库 / 领域 |
|---|---|
python-fastapi-expert |
chat-gw / xiaoshou backend / CloudCostbrank / kb-chat-python |
nestjs-expert |
gongdan backend |
react-frontend-expert |
xiaoshou/gongdan/casdoor 前端 |
lobechat-brand-guardian |
lobechat-enterprise + 242 locale de-branding 保护 |
casdoor-specialist |
casdoor-internal + upstream fork |
mcp-tools-architect |
chat-gw 的 MCP 工具注册 + 鉴权流水线 |
celery-worker-expert |
CloudCost 异步任务 + beat schedule |
migration-reviewer |
Alembic / Prisma / Drizzle / xorm migration 审查 |
security-auditor |
OWASP + secrets + auth 审查(只读) |
test-engineer |
覆盖率 + flaky 治理 + e2e 设计 |
ci-cd-engineer |
6 仓库的 GitHub Actions workflow |
azure-aca-expert |
Azure Container Apps + Bicep + Key Vault |
docs-writer |
README / API doc / runbook / PR 描述 |
3 个 Team 编排命令(自动组合多专家)
/team-feature <desc>—— 跨仓库功能开发,7 阶段流水线/team-bug-fix <url-or-desc>—— Bug 修复,triage→RCA→fix→回归/team-refactor <target>—— 安全重构,test-first + 批次化
7 个快速 Slash Command
/audit-deps [repo|all]·/add-ci <repo>·/review-pr <pr>·/sync-upstream·/check-migrations- 外加 team 命令
1 个 Playbook
playbooks/casdoor-upstream-rebase.md—— 季度级上游同步流程
1 个 Hook(默认开启)
.claude/hooks/pre-commit-check.sh—— PreToolUse 拦截密钥 / 超大 diff
权限模型
所有 agent(包括 azure-aca-expert)享有全部只读权限、受控写权限:
- ✅
gh全读(view/list/diff)+ 写(pr create/comment、issue create) - ✅
az全读(show/list/get-access-token) - ✅
kubectl全读(get/describe/logs) - ✅ 数据库只读查询(psql SELECT、redis GET/KEYS)
- ✅ 各语言测试/lint/build 命令
- ❌ Azure 任何资源的 create/update/delete
- ❌ PR merge / approve / force push / git reset --hard
- ❌ 数据库 DROP/DELETE/UPDATE/FLUSH
- ❌ 读
.env、secrets/、casdoorapp.conf
改动生产环境必须由人类 approve。
团队可以 / 应该往这里写什么
ai-ops 是团队的"Agent 大脑外挂"。它会随着使用持续沉淀团队经验。下面是6 类内容、该写在哪里、什么时候写。
目录速查
ai-ops/
├── CLAUDE.md ← ① 团队规约(描述每个仓库的职责、测试命令、红线)
├── .claude/
│ ├── settings.json ← ② 权限清单(allow/deny)
│ ├── agents/ ← ③ 专家子 Agent(专业领域深度)
│ └── commands/ ← ④ 斜杠命令(重复任务封装)
├── playbooks/ ← ⑤ 长流程剧本(季度级任务)
├── mcp-servers/ ← ⑥ 自定义工具(高阶,暂不做)
└── reports/ ← Agent 生成的审计报告(已 gitignore)
① CLAUDE.md —— 团队规约(最核心)
写什么:
- 每个仓库的角色、技术栈、端口、测试/构建命令
- 跨仓库契约(如 Casdoor JWT 字段要同步改 chat-gw/xiaoshou/gongdan/lobechat)
- 硬红线(
skip-worktree文件、不可删的 locale 改动等) - 失败处理策略
何时更新:
- Agent 做错过某件事 → 加一条明确规则
- 团队商量出了新规范 → 写进来
- 仓库加了新测试命令 → 更新测试命令表
- 有人提 PR 被 review 出同类问题两次以上 → 沉淀成规则
② .claude/settings.json —— 权限清单
写什么:
permissions.allow—— 无需询问就能执行的命令模式permissions.deny—— 绝对禁止的命令和路径
何时更新:
- 队友抱怨"XX 命令每次都问我要不要执行" → 加入 allow
- 发生了误操作 → 加入 deny 永久拦截
- 新仓库加入矩阵 → 补充相关路径规则
③ .claude/agents/ —— 专家子 Agent
写什么: 对某个"需要深度知识的领域"封装一个专家,格式:
---
name: xxx-specialist
description: 何时应该派给这个专家
tools: Read, Edit, Bash, Grep
---
系统 prompt:专家应该掌握的事实、工作流、输出习惯、红线。
已有:
casdoor-specialist—— Casdoor/Go/Beego/upstream fork 专家lobechat-brand-guardian—— 守护 242 个 locale 文件的 de-branding
建议未来加:
migration-reviewer—— Alembic / Prisma migration 深审python-fastapi-expert—— chat-gw / xiaoshou / CloudCost 通用nestjs-expert—— gongdan 后端
④ .claude/commands/ —— 斜杠命令
写什么: 把团队常跑的任务封装成 /xxx 命令。进容器后一敲就出结果。
已有:
/audit-deps [repo|all]—— 依赖 + CVE 审计,生成风险排序报告/add-ci <repo>—— 给仓库补 GitHub Actions CI(自动识别技术栈)/review-pr <pr-url>—— 深度 review 一个 PR(评论式,不自动 approve)
建议未来加:
/sync-upstream—— casdoor-internal 同步上游冲突分析/check-migrations <repo>—— 对比 model vs migration/new-endpoint <repo> <path>—— 按项目既有风格新建 API
⑤ playbooks/ —— 长流程剧本
写什么: 低频但重要的多步流程,写成剧本让 Agent 按步执行。
建议加:
playbooks/monthly-dependency-upgrade.mdplaybooks/casdoor-upstream-rebase.mdplaybooks/new-repo-onboarding.mdplaybooks/prod-incident-response.md
⑥ mcp-servers/(高阶,不急)
只有 Claude Code 内置工具和 chat-gw 已有 MCP 都不够用时才动。建议前 3 个月不碰。
团队改 ai-ops 的流程(必读)
任何改动都会影响所有队友的 Agent 行为,流程必须严肃:
- 提 PR 到本仓库(不要直推 main)
- PR 描述必须回答 3 个问题:
- 改了哪个文件 / 加了什么能力?
- 触发场景是什么(哪次 Agent 做错了 / 哪个重复任务值得封装)?
- 是放宽了 Agent 权限还是收紧了?(涉及 settings.json 必须标注)
- 至少 1 人 review —— CLAUDE.md / settings.json 改动建议 2 人
- 合并后群里吼一声:"ai-ops 更新了,各位 pull"
- 队友本地:
cd <ai-ops 目录> git pull # 不用 rebuild 镜像,CLAUDE.md 和 .claude/ 都是 bind mount # 正在运行的容器里:退出当前 claude 再重启,新命令/agent 就生效
评审改动的判断标准
提 ai-ops 的 PR 时 reviewer 应该问的问题:
| 改动类型 | 关键评审点 |
|---|---|
| 新规则入 CLAUDE.md | 是否来自真实事件?规则是否可验证?是否足够具体(不是"要仔细写代码"这种废话)? |
| 新 command | 是否真重复过 3 次以上?参数设计是否清晰?红线是否写全? |
| 新 agent | 是否有足够的领域特殊性(不是"再写一个通用 reviewer")?系统 prompt 是否包含可验证的事实? |
| 改 settings.json allow | 放开的命令是否真的无副作用?是否能用更窄的 matcher? |
| 改 settings.json deny | 是否会误伤合理用法?有没有代替路径? |
Claude Code 识别新加的 command / agent 的机制
.claude/commands/*.md和.claude/agents/*.md会在新 claude 会话启动时被加载- 所以如果你正在一个 claude 会话里,加了新文件后需要
/exit再重启 claude 才能看到新命令 - 或者直接在容器里退出后
./scripts/enter.sh重进
出问题排查
Docker pull 失败 / TLS 证书错误 —— 检查是否有 VPN / 代理在做 HTTPS 拦截(例如 Astrill 的 OpenWeb 模式)。换成 WireGuard / StealthVPN,或关闭 VPN 后再拉镜像。
apt 装包失败
—— Dockerfile 已配清华镜像 + 重试 8 次。如果仍失败,检查网络对 mirrors.tuna.tsinghua.edu.cn 的访问。
/login 后仍提示未登录
—— 确认你的 Claude 订阅类型是 Max 或 Pro。Free 账号没有 Claude Code 权限。
想切到 API Key 模式
—— 编辑 .env:
- 默认走 DeepSeek 的 Anthropic 兼容端点:
ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic+ANTHROPIC_API_KEY=sk-...(DeepSeek 控制台申请),模型用deepseek-v4-pro或deepseek-v4-flash。 - 想走原生 Anthropic:注释掉
ANTHROPIC_BASE_URL,填ANTHROPIC_API_KEY=sk-ant-...。 API Key 优先级高于订阅。
不做什么
- 不是一个跑在云上的服务,不支持 SSH 远程访问
- 不是给 CI/CD 用的(CI 场景另用
.github/workflows/claude-review.yml+ API Key) - 不共享登录凭证 —— 每人用自己的订阅,违反 Claude TOS 会被踢
许可 / 归属
内部工具,仅限团队使用。六个业务仓库的许可证以各自仓库为准。