
Claire 的角色定位
Claire 是为 Zadig 打造的专职技术支持 AI 工程师,本质上是运行在 OpenClaw 框架之上的一个领域型 Agent。她的两个核心职责是:
技术支持:围绕 Zadig 的安装、运维、工作流、环境、集成等问题做源码级诊断与排障。
社区知识运营:对飞书群中的技术交流进行结构化沉淀,形成每日总结、FAQ 和文档改进建议。
在这套体系中:
Claire 负责“理解与决策”:根据源码、文档、FAQ 和历史记忆,给出可执行的诊断方案。
OpenClaw 负责“基础设施与编排”:统一管理多家模型 Provider,控制工具与权限,接入飞书渠道,并加载工作区规则(如 `AGENTS.md`、`IDENTITY.md`、skills 等)。
本文将围绕 ~/.openclaw/openclaw.json 与 Claire 工作区中的配置文件,系统拆解 Claire 在 OpenClaw 上的技术实现。
1.整体架构
Claire 是一个跑在 OpenClaw 运行时上的领域 Agent。OpenClaw 负责模型调用、工具编排、渠道接入、会话生命周期管理;Claire 的"个性"与"行为边界"完全由工作区内的配置文件定义,与运行时解耦。

OpenClaw 是纯粹的编排层,不参与回答内容的生成;模型推理与工具使用由 Agent 在 workspace 上下文约束下驱动。
2.关键配置解析
2.1 模型 Provider 抽象
OpenClaw 通过 models.providers 统一注册多个模型来源,对 Agent 暴露为 "<provider>/<model_id>" 格式的引用:
"models": {"providers": {"claude": {"baseUrl": "claude url","api": "anthropic-messages","authHeader": true,"models": [{ "id": "claude-opus-4-6", "contextWindow": 200000, "maxTokens": 16000 }]},"minimax-portal": {"baseUrl": "minimax url","api": "anthropic-messages","models": [{ "id": "MiniMax-M2.5", "contextWindow": 600000 },{ "id": "MiniMax-M2.5-highspeed", "contextWindow": 600000 },{ "id": "MiniMax-M2.5-Lightning", "contextWindow": 600000 }]}}}
两个 Provider 都实现了 anthropic-messages 协议,因此 Agent 侧无需感知差异,切换模型时只改 ID 即可。
2.2 模型路由与降级
"agents": {"defaults": {"model": {"primary": "clauddy/claude-opus-4-6","fallbacks": ["minimax-portal/MiniMax-M2.5-highspeed","minimax-portal/MiniMax-M2.5-Lightning"]}}}
OpenClaw 按 primary → fallbacks[0] → fallbacks[1] 的顺序做透明降级。主模型限流或超时时自动切换,对 Agent 无感。
2.3 上下文压缩策略
"contextPruning": {"mode": "cache-ttl","ttl": "1h"},"compaction": {"mode": "safeguard","reserveTokensFloor": 20000,"maxHistoryShare": 0.7,"memoryFlush": {"enabled": true,"softThresholdTokens": 10000}}
cache-ttl:超过 1h 的对话轮次从活跃 context 中淘汰。
safeguard:在 prompt 拼装阶段,历史最多占 70%,剩余空间留给当前轮次输入/输出。
reserveTokensFloor: 20000:兜底保证至少 2 万 token 可用,防止长对话把当前输入空间压死。
memoryFlush:当可用 token 低于 softThresholdTokens 时,触发"flush"——把近期对话中有价值的内容写入 MEMORY.md 后从 context 移除。
2.4 工具配置与 deny list
"tools": {"profile": "full","deny": ["bash", "process", "browser", "canvas", "gateway", "cron", "nodes", "apply_patch", "image"],"web": {"search": { "enabled": false },"fetch": { "enabled": true, "maxChars": 50000 }},"fs": { "workspaceOnly": true },"loopDetection": {"enabled": true,"warningThreshold": 10,"criticalThreshold": 20,"globalCircuitBreakerThreshold": 30},"exec": { "host": "gateway", "security": "allowlist", "ask": "off" }}
deny: ["bash", "process", "browser", "canvas", "gateway", "cron", "nodes", "apply_patch", "image"] 拒绝高危工具。
fs.workspaceOnly:Agent 读文件只能读工作区路径,无法访问宿主机其他目录。
web.search 关闭,web.fetch 开启:强制 Agent 优先走本地知识,必要时才 fetch 指定 URL,避免幻觉式搜索。
loopDetection:工具调用次数到达阈值后分级熔断,防止提示注入或异常循环耗尽资源。
exec.security: "allowlist":exec 工具只执行预定义命令白名单(如 grep、find、ls),不允许任意 shell。
2.5 飞书 channel 配置
"channels": {"feishu": {"connectionMode": "websocket","requireMention": true,"streaming": true,"blockStreaming": true,"replyMode": { "group": "streaming", "direct": "streaming" },"dmPolicy": "pairing","threadSession": true,"footer": { "elapsed": true, "status": true }}}
connectionMode: "websocket":长连接接收事件,不轮询。
requireMention: true:群聊必须 @ 机器人才触发,避免抢答所有消息。
threadSession: true:飞书线程 → openclaw session 一一映射,同一线程内的多条消息共享上下文。
dmPolicy: "pairing":私聊按 user-peer 维度绑定 session,不跨人混用。
2.6 内部 Hooks
"hooks": {"internal": {"enabled": true,"entries": {"boot-md": { "enabled": true },"bootstrap-extra-files": { "enabled": true },"command-logger": { "enabled": true },"session-memory": { "enabled": true }}}}
boot-md:每次会话启动时把 AGENTS.md(以及通过 channel-context 注入的 USER.md)作为系统提示头部加载。
session-memory:会话结束或触发 flush 时,把有价值的对话片段写入当天的记忆文件。
command-logger:记录工具调用日志,用于审计和调试。
3.工作区配置文件的作用机制
3.1 AGENTS.md 运行时行为准则
AGENTS.md 由 boot-md hook 在每次会话启动时注入系统提示。它的内容对模型来说等同于最高优先级指令,包含:
身份覆盖:强制将模型的角色锁定为 Claire,防止用户通过提示工程改写身份。
工具使用约束(语义层):与 `openclaw.json` 的工具 deny-list 配合,形成双层防护——`deny-list` 是硬性技术限制,`AGENTS.md` 是软性语义约束。
文件写入白名单(语义层):规定哪些路径可以写,配合 `fs.workspaceOnly` 共同限制写操作范围。
Prompt Injection 防护话术:对常见攻击模式(角色扮演、指令注入、权限提升)预定义拒绝策略。
3.2 多 Channel 隔离的实现
channels/registry.md ← 登记所有 channel_id<channel_id>/USER.md ← 该 channel 的用户画像(顶部注入 CHANNEL_CONTEXT)MEMORY.md ← 长期记忆memory/YYYY-MM-DD.md ← 当日技术支持记录daily-summary/YYYY-MM-DD.md ← 当日总结

channel-context hook 在 session 启动时:
根据消息来源(群 ID / 用户 ID)推算 channel_id。
将<!-- CHANNEL_CONTEXT_START -->...<channel_id>...<!-- CHANNEL_CONTEXT_END --> 注入 USER.md 顶部。
AGENTS.md 要求 Agent 会话开始后必须先读取这段标记,才能确定后续所有读写的路径前缀。
由此实现多租户数据隔离,不同群的技术支持历史在文件系统层完全分开。
3.3 Skills — 领域知识的结构化封装
skills/ 目录下的每个 skill 是一个独立的 SKILL.md,在系统提示中按需加载。Claire 当前的 skill 体系:
skill | 作用 |
zadig-doc-nav | 220+ 文档文件的路径索引,防止 Agent 猜路径调 read 工具找不到路径造成 ENOENT |
zadig-source-nav | 源码搜索标准流程:SOURCE_INDEX → read → grep 兜底 |
zadig-error-patterns | 常见错误日志 → 根因 → 修复的 lookup table |
zadig-cluster-ops | K8s 诊断命令模板与输出分析指南 |
feishu-daily-summary | 每日总结的数据结构规范、生成流程、输出模板 |
skill 的加载方式:OpenClaw 在拼装系统提示时,把所有启用的 skill 的 SKILL.md 内容拼接到提示中。skill 本质上是"被 include 的提示片段",不是独立进程或函数。
4.请求处理链路

几个实现细节:
配置流式输出:OpenClaw 拿到第一个 token 就开始回推飞书,飞书侧逐字刷新消息,延迟感低。
工具调用是同步阻塞的:Agent 在调用工具期间暂停生成,等工具返回后把结果追加到 context 再继续。多个工具调用串行执行,除非 Agent 显式并发(`sessions_spawn`,但在 claire 配置中已禁用 `sessions_spawn`)。
memory 写入:`session-memory` hook 在会话结束(或 flush 触发)时写文件,不是每条消息都写。写入格式由 `feishu-daily-summary/SKILL.md` 规定,结构化为 Markdown 条目。
5.工具调用的安全分层
用户请求│▼[语义层] AGENTS.md 规则 — 软约束,告诉模型"不该做什么"│▼[运行时层] openclaw tools.deny — 硬约束,deny-list 中的工具根本不暴露给模型│▼[文件系统层] fs.workspaceOnly — 即使模型尝试读写,OS 路径被限制│▼[exec 层] exec.security: "allowlist" — exec 工具只执行预定义命令
bash 工具被 deny,exec 工具被允许但走 allowlist。两者的区别:
bash:任意 shell 命令,高风险。
exec:OpenClaw 维护一个命令白名单(如 grep、find、ls),只有白名单内的命令才能执行,且参数经过校验。
claire 的 exec 主要用途:在本地 repo 中做只读搜索(grep -rn、find、ls),作为 read + 索引文件的兜底手段。
6.每日总结的数据流

feishu-daily-summary/SKILL.md 定义了这套数据结构与处理规则,包括:
分类标签优先级:[Bug反馈] > [功能需求] > [问题] > [解答] > [讨论]
FAQ 补充触发条件:同一问题出现 ≥ 2 次 且 当前 faq/faq.md 未覆盖
飞书消息中的 @ 格式与本地 Markdown 中的记录格式分开处理(避免存储 lark 私有标记)
7.问题诊断决策树(检索顺序)

源码的查阅流程遵循固定链路:
SOURCE_INDEX.md→ 找到文件路径→ read handler 文件,找到入口函数→ 追踪调用到 service 层→ 追踪调用到 core 层→ 理解错误返回的条件与分支→ 有针对性地建议用户执行 kubectl 命令→ 分析用户回传的日志输出→ 得出结论
每次诊断通常涉及 3-5 个文件的 read,不是靠关键词匹配,而是真正读懂代码逻辑后才给结论。
8.关键设计取舍(保证安全)

总结与展望
综合来看,Claire 是一个运行在 OpenClaw 上的、配置驱动的 Zadig 技术支持 Agent:
通过 openclaw.json 中的模型与工具配置,实现了多 Provider 支持、模型路由与上下文管理。
通过 IDENTITY.md 与 AGENTS.md,将身份、职责与安全边界固化为工程化规则。
通过 TOOLS.md 与多种 Zadig skills,将领域知识与诊断经验结构化注入 Agent 行为。
通过 channels/<channel_id>/memory/ 与 feishu-daily-summary,实现了从单次对话到每日总结的知识沉淀闭环。
对希望在自家产品中使用 OpenClaw 构建类似“专职技术支持 Agent”的团队而言,这套实现提供了一个清晰的思路:
用通用的 Agent 运行时(如 OpenClaw)处理模型、工具、渠道与会话。
用可版本化的本地文件(IDENTITY、AGENTS、TOOLS、skills)塑造 Agent 行为与边界。
用企业 IM 作为入口,用按 Channel 隔离的记忆体系承载一线知识。
在此基础上,未来可以进一步扩展:
基于每日总结自动生成内部周报或改进 backlog,更系统地驱动文档与产品迭代。
将类似的 Agent 模式复制到其他子领域(如“运维顾问”“性能优化助手”),形成协同工作的多 Agent 体系。


点击“阅读原文”预约咨询

夜雨聆风