Technical Guide
19. 二开路线:想改 OpenClaw 时从哪里下手
把常见二开目标映射到 OpenClaw 源码目录,避免一上来改错层。
这篇解决什么问题
OpenClaw 源码大,二开前先判断层级。
你要改的是 CLI、Gateway、Channel、Agent Runtime、Tool、Skill、Plugin、MCP,还是配置?
层级判断错了,改动会越来越乱。
常见目标对应目录
改 CLI 命令
openclaw.mjs
src/cli/
src/commands/
先确认是 launcher 问题还是子命令实现问题。
改 Gateway 行为
src/gateway/
src/cli/gateway-cli/
src/commands/gateway-status/
src/daemon/
适合处理常驻服务、路由、状态、投递、gateway API。
新增或修改 Channel
src/channels/
extensions/<channel>/
src/config/types.<channel>.ts
src/pairing/
注意 allowlist、pairing、平台限流和附件能力。
改 Agent Runtime
src/agents/embedded-agent-runner/
src/agents/sessions/
src/agents/agent-hooks/
src/agents/runtime/
packages/agent-core/
这是核心层,改前要先跑相关测试。
改模型 Provider
src/llm/
src/llm/providers/
src/agents/agent-model-discovery.ts
src/agents/auth-profiles/
不要在 Gateway 或 channel 里写 provider 特殊逻辑。
新增工具
src/agents/agent-tools.ts
src/agents/agent-tools*.ts
src/agents/tools/
src/plugins/tools.ts
先判断它是 core tool、OpenClaw tool、channel tool、plugin tool,还是 MCP tool。
新增 Skill
skills/
src/config/types.skills.ts
src/agents/sessions/
Skill 是流程知识,不是代码能力。
写 Plugin
src/plugin-sdk/
src/plugins/
extensions/
插件应该用 openclaw/plugin-sdk/* 契约,不要直接 import src/** internals。
接 MCP
src/mcp/
src/config/mcp-config-normalize.ts
src/agents/agent-bundle-mcp-*.ts
二开前问三个问题
这是入口层、运行层、能力层,还是配置层?
这个能力是否会接触本地文件/命令/密钥?
它应该进 core、plugin、skill,还是 MCP?
答不清就先别写。
推荐练习路线
1. 从源码跑通 openclaw --version
2. 前台启动 gateway
3. 用 openclaw agent 发一条消息
4. 找到工具面生成位置
5. 新增一个只读工具或 skill
6. 加上最小测试或 build 验证
下一篇看什么
最后一篇总结整条源码阅读线。