完整的 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 行为约束
目标 providerTARGET_PROVIDERS与实际使用的 provider id 一致(默认 ["openai"])
多 providerTARGET_PROVIDERS = ["openai", "anthropic"]同时 hook 多个 provider

相关页面