1. 一人公司最怕的不是没活,是 Key 散落在十几个工具里
ClawHub 这套「AI 龙虾军团」的思路,本质是把产品、研发、测试、运维拆成多个有独立身份的 AI 代理,每个代理跑在独立的 OpenClaw 实例里,再通过群聊和定时任务统一调度。一个人指挥一群代理,从需求文档一路走到部署链接,听起来确实像一人公司的完全体。
但真正上手之后,最先卡住你的往往不是代理会不会写代码,而是凭证管理。前端龙虾要调 Claude Code,后端龙虾要推 Git,运维龙虾要触发 CI/CD 的 MCP 服务,测试龙虾要跑浏览器自动化。每只龙虾背后至少挂着一个模型通道和一个外部服务凭证。如果每只龙虾都单独配一份 Key,你会遇到三个很现实的问题:一是 Key 散落在各个实例的配置文件里,改一次要登好几台机器;二是不同代理共用同一个 Key 时,额度消耗和调用来源完全分不清;三是某只龙虾的 Key 泄露或失效,排查起来像大海捞针。
我试过最原始的做法,就是给每只龙虾手写一份配置,结果第三天就放弃了——光是把新 Key 同步到五只龙虾上就花了半小时。后来我把所有代理的模型调用统一收口到 TaoToken 的 API 通道,用一套 Key 管理多租户下的所有龙虾,CI/CD 流水线才真正跑顺。这篇就按 ClawHub 的编排场景,把 config.toml 和 settings.json 的可复制骨架、以及一条能跑通的流水线验证动作讲清楚。
TaoToken 在这里扮演的角色很单纯:它是一个统一的模型 API 入口,把 Claude Code、通义千问、DeepSeek 这些不同来源的模型调用收敛到一个 base_url 和一套 Key 体系下。对 ClawHub 这种多租户、多代理的架构来说,意味着你不需要为每只龙虾单独申请和维护凭证,而是在平台层做一次集中配置,所有龙虾通过同一个通道取用。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数,配置时直接写这个。
2. 前置准备:在 TaoToken 侧把多租户的 Key 体系搭起来
在动 ClawHub 的配置文件之前,先把 TaoToken 这边的凭证结构理清楚。多租户场景下,我建议按「公司/项目」维度建 Key,而不是按「龙虾」维度建。原因很简单:龙虾是会频繁增减的,今天加一只测试龙虾,明天停一只运维龙虾,如果 Key 跟着龙虾走,每加一只就要新建一个凭证,管理成本反而更高。按项目建 Key,然后让同一项目下的龙虾共用,配合调用日志就能区分是哪只龙虾在消耗额度。
具体操作路径是:登录后进入控制台,在 API Keys 页面创建凭证。你可以先建一个给开发环境用,一个给生产环境用,这样 CI/CD 流水线里跑测试的龙虾和真正部署的龙虾在额度上天然隔离。创建完成后把 Key 复制出来,注意它只在创建时完整显示一次。
这里有个容易踩的坑:很多人会把 Key 直接写进 ClawHub 的 config.toml 然后提交到 Git。千万别这么干。正确做法是把 Key 放进环境变量,配置文件里只引用变量名。ClawHub 的每只龙虾实例在启动时会读取宿主机的环境变量,这样即使配置文件进了版本库,凭证也不会泄露。
如果你还没决定用哪些模型,可以先到模型对话页面测一下不同模型在代码生成和工具调用上的表现,再决定给哪类龙虾配哪个模型。Claude Code 这类偏编码的代理,对工具调用和长上下文的要求比较高,选模型时优先看这两项。
3. 可复制配置:config.toml 与 settings.json 骨架
ClawHub 的配置分两层:一层是平台级的 config.toml,管的是全局的模型通道、多租户隔离和 MCP 服务注册;另一层是每只龙虾的 settings.json,管的是这只龙虾的身份、技能和它引用哪个模型通道。下面这两份骨架可以直接拿去改。
先看平台级 config.toml。核心是把 TaoToken 的 API 地址作为统一的 provider 注册进去,然后按租户划分不同的 Key 引用。
# config.toml - ClawHub 平台级配置骨架 [server] host = "0.0.0.0" port = 8080 # 多租户模式,每个公司/项目独立隔离 multi_tenant = true [providers.taotoken] # 统一 API 通道,所有龙虾的模型调用都走这里 base_url = "https://taotoken.net/api" # 从环境变量读取,不要硬编码 api_key = "${TAOTOKEN_API_KEY}" # 默认模型,可被单只龙虾覆盖 default_model = "claude-sonnet" timeout = 120 max_retries = 3 [providers.taotoken.models] # 按用途声明可用模型,龙虾的 settings.json 里引用这里的别名 claude-sonnet = "claude-sonnet-4" qwen-coder = "qwen3-coder" deepseek-chat = "deepseek-v3" [tenants.dev] name = "开发环境" api_key_env = "TAOTOKEN_API_KEY_DEV" allowed_models = ["claude-sonnet", "qwen-coder"] [tenants.prod] name = "生产环境" api_key_env = "TAOTOKEN_API_KEY_PROD" allowed_models = ["claude-sonnet"] [mcp.cicd] # CI/CD 的 MCP 服务注册,运维龙虾会调用它 command = "npx" args = ["-y", "@clawhub/mcp-cicd"] env = { GIT_TOKEN = "${GIT_TOKEN}", DEPLOY_TARGET = "staging" } [mcp.browser] # 浏览器自动化测试的 MCP 服务 command = "npx" args = ["-y", "@clawhub/mcp-browser"]再看单只龙虾的 settings.json。每只龙虾一个文件,放在它自己的实例目录下。关键是 model_provider 指向上面注册的 taotoken,然后通过 tenant 字段决定它用哪套 Key。
{ "lobster_id": "frontend-01", "identity": "前端工程师", "description": "负责前端页面开发、组件编写和样式调整", "model_provider": "taotoken", "model": "claude-sonnet", "tenant": "dev", "skills": [ "code-generation", "git-commit", "browser-test" ], "knowledge_base": [ "./kb/product-requirement.docx", "./kb/design-system.md" ], "mcp_servers": ["cicd", "browser"], "env": { "TAOTOKEN_API_KEY": "${TAOTOKEN_API_KEY_DEV}" } }这两份配置的关系是:config.toml 定义「有哪些通道、哪些租户、哪些 MCP 服务」,settings.json 定义「这只龙虾是谁、用哪个通道、挂哪些技能」。新增一只龙虾时,你只需要复制一份 settings.json 改掉 lobster_id 和 identity,不用碰平台配置。新增一个项目时,在 config.toml 里加一个 tenant 段,然后给这个租户配一个环境变量即可。
环境变量的设置方式,在 Linux 服务器上可以写进 systemd 的 service 文件,或者用 .env 文件配合启动脚本加载。本地开发时直接在 shell 里 export 就行:
export TAOTOKEN_API_KEY_DEV="sk-你的开发环境Key" export TAOTOKEN_API_KEY_PROD="sk-你的生产环境Key" export GIT_TOKEN="你的Git访问令牌"4. 跑通验证:一条从编码到部署的流水线动作
配置写完之后,别急着让所有龙虾一起上。先用一只龙虾跑一条最小流水线,确认模型通道、Git 提交和 CI/CD 触发这三步都通。下面这条验证动作可以直接在 ClawHub 的群聊里下达,也可以写成定时任务。
第一步,确认模型通道可用。在群聊里 @ 前端龙虾,让它做一个最简单的代码生成:
@前端龙虾 用 Python 写一个冒泡排序函数,保存到 dev/bubble_sort.py,然后 git commit 并 push 到 dev 分支这一步验证的是 TaoToken 通道是否通、Claude Code 是否能正常调用、Git 凭证是否有效。如果模型通道有问题,你会看到调用超时或 401;如果 Git 有问题,会在 push 阶段报错。
第二步,确认 CI/CD 的 MCP 服务能被触发。前端龙虾 push 完成后,@ 运维龙虾:
@运维龙虾 检测到 dev 分支有新提交,触发 CI/CD 流水线,部署到 staging 环境运维龙虾会通过 config.toml 里注册的 mcp.cicd 服务去调用你的流水线。这一步验证的是 MCP 服务注册和凭证传递是否正确。
第三步,确认浏览器自动化测试能跑。@ 测试龙虾:
@测试龙虾 对 staging 环境的部署结果跑一轮冒烟测试,检查首页是否正常加载测试龙虾通过 mcp.browser 启动浏览器自动化,访问部署链接并返回结果。
三步都跑通之后,你可以在 ClawHub 的统计分析页面看到这次流水线的完整调用记录:哪只龙虾、在什么时间、调用了哪个模型、消耗了多少 token。因为所有调用都走 TaoToken 的统一通道,这些数据是集中可见的,不需要去每个模型厂商的后台分别查。
如果你想更省事,可以把这条流水线写成定时任务,让 ClawHub 在每次 dev 分支有提交时自动触发。这样你只需要在群聊里下达一次开发指令,后面的编码、提交、部署、测试全部由龙虾军团自动完成。
5. 本篇常见错排查
报错一:401 Unauthorized,模型调用被拒。最常见的原因是环境变量没加载。ClawHub 的龙虾实例在启动时读取环境变量,如果你是在启动之后才 export 的,实例读不到。解决方法是重启龙虾实例,或者把环境变量写进启动脚本。另一个可能是 config.toml 里的 api_key 引用写错了变量名,检查${TAOTOKEN_API_KEY}和实际 export 的名字是否一致。
报错二:多租户下龙虾串了 Key。如果你发现开发环境的龙虾消耗了生产环境的额度,检查 settings.json 里的 tenant 字段和 env 字段是否匹配。tenant 是 dev,env 里却引用了 TAOTOKEN_API_KEY_PROD,就会串。建议在 config.toml 的 tenant 段里用 api_key_env 明确绑定,settings.json 里只写 tenant 名,不直接写环境变量名,减少手误。
报错三:MCP 服务启动失败,运维龙虾无法触发 CI/CD。先确认 config.toml 里 mcp.cicd 的 command 和 args 是否正确,npx 能否在龙虾实例的运行环境里找到。如果是在容器里跑,容器内可能没有 Node.js 环境。另外 GIT_TOKEN 这类敏感变量通过 env 传给 MCP 服务时,注意不要打印到日志里。
报错四:模型返回超时,但 Key 是有效的。检查 config.toml 里的 timeout 设置。Claude Code 这类代理在生成较长代码时,响应时间可能超过默认的 60 秒。把 timeout 调到 120 或更高。如果还是超时,可能是模型选择的问题,换一个响应更快的模型试试。
报错五:Git push 成功但 CI/CD 没触发。这通常不是 TaoToken 的问题,而是你的流水线触发条件没配对。检查 CI/CD 配置里监听的分支是否和龙虾 push 的分支一致。有些流水线默认只监听 main 分支,而龙虾 push 的是 dev 分支,自然不触发。
6. 把 Key 收口之后,龙虾军团才真正可运维
一人公司用 ClawHub 编排 AI 代理,最大的价值不是让一只龙虾多能干,而是让一群龙虾能协同。而协同的前提是凭证和通道的统一。当所有龙虾的模型调用都走 TaoToken 这一个入口,你才能在一个地方看到谁在干活、谁在摸鱼、谁消耗了多少额度。新增一只龙虾只是复制一份 settings.json,新增一个项目只是在 config.toml 里加一个 tenant 段,运维成本不会随着代理数量线性增长。
如果你准备把这条流水线接到长期运行的编码代理上,可以了解一下 Coding Plan,它更适合需要持续调用、按周期结算的场景。配置过程中遇到接入问题,API Keys 页面和接入文档里有更细的参数说明。先把一只龙虾跑通,再复制成一群,这条路我走过,比一上来就铺十只龙虾要稳得多。