完整的 ProviderPlugin 实现,用于向 sub-agent system prompt 注入额外约束,对主 agent 无影响。原理说明见 subagent-system-prompt。
文件结构
extensions/subagent-prompt-inject/
├── package.json
├── openclaw.plugin.json
└── index.ts
package.json
{
"name": "@openclaw/subagent-prompt-inject",
"version": "1.0.0",
"private": true,
"type": "module",
"openclaw": {
"extensions": ["./index.ts"]
}
}openclaw.plugin.json
{
"id": "subagent-prompt-inject",
"name": "Subagent Prompt Inject",
"description": "Injects extra instructions into subagent system prompts only",
"activation": { "onStartup": true },
"configSchema": { "type": "object", "additionalProperties": false }
}index.ts
import { definePluginEntry, type OpenClawPluginApi } from "openclaw/plugin-sdk/plugin-entry";
const SUBAGENT_CONTEXT_MARKER = "# Subagent Context";
// 按需修改:填入你实际使用的 provider id
// OpenClaw 默认 provider 是 "openai"(src/agents/defaults.ts)
const TARGET_PROVIDERS = ["openai"];
// 按需修改:填入你想要的 sub-agent 约束
const SUBAGENT_EXTRA_INSTRUCTIONS = `
## Extra Constraints
- Always respond in the same language as the task description
- Keep your final answer concise and structured
`.trim();
export default definePluginEntry({
id: "subagent-prompt-inject",
name: "Subagent Prompt Inject",
description: "Injects extra instructions into subagent system prompts only. No effect on main agent.",
register(api: OpenClawPluginApi) {
for (const providerId of TARGET_PROVIDERS) {
api.registerProvider({
id: `subagent-prompt-inject-hook-${providerId}`,
label: `Subagent Prompt Inject (${providerId} hook)`,
// hookAliases 让此 plugin 响应目标 provider 的 hook,不注册完整 provider,不冲突
hookAliases: [providerId],
// hook-only plugin,不提供模型,auth 为空
auth: [],
transformSystemPrompt(ctx) {
// 主 agent promptMode = "full",直接跳过
if (ctx.promptMode !== "minimal") return null;
// cron session 也是 "minimal",但没有 subagent marker
if (!ctx.systemPrompt.includes(SUBAGENT_CONTEXT_MARKER)) return null;
// 只有 sub-agent 才追加
return `${ctx.systemPrompt}\n\n${SUBAGENT_EXTRA_INSTRUCTIONS}`;
},
});
}
},
});启用方式
在 ~/.openclaw/openclaw.json 里加载:
{
"plugins": {
"load": ["./extensions/subagent-prompt-inject"]
}
}自定义说明
| 修改点 | 位置 | 说明 |
|---|---|---|
| 约束内容 | SUBAGENT_EXTRA_INSTRUCTIONS | 填入你想要的 sub-agent 行为约束 |
| 目标 provider | TARGET_PROVIDERS | 与实际使用的 provider id 一致(默认 ["openai"]) |
| 多 provider | TARGET_PROVIDERS = ["openai", "anthropic"] | 同时 hook 多个 provider |