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 验证

下一篇看什么

最后一篇总结整条源码阅读线。