Hi Krill,
I have setup openclaw and want to add a different chat where I use the same model but with a custom system prompt and one tool (skill or mcp) I don't need all the "you're an ai assistant here is your sould and here that of your human". is that possible with openclaw?
openclaw@ubuntu ~ openclaw --version
OpenClaw 2026.5.22 (a374c3a)
#Separate chat with different prompt
1 messages · Page 1 of 1 (latest)
Yes. The clean way is a second OpenClaw agent bound to that Discord thread/channel.
A separate agent gets its own workspace, sessions, prompt files, auth store, skill allowlist, and tool policy. If you want the same model, omit model on the new agent so it inherits your default, or set it to the same provider/model explicitly.
Minimal shape in ~/.openclaw/openclaw.json:
{
agents: {
list: [
{
id: "clean",
workspace: "~/.openclaw/workspace-clean",
// Replaces the normal OpenClaw-assembled system prompt for this agent.
systemPromptOverride: "You are a concise assistant for X. Follow only these instructions...",
// Optional: expose only one skill to this agent.
skills: ["your-skill-name"],
// Optional: hard-limit regular OpenClaw tools too.
tools: {
allow: ["message"], // replace with the actual tool(s) you want
deny: ["exec", "browser", "cron", "nodes"]
}
}
]
},
bindings: [
{
agentId: "clean",
match: {
channel: "discord",
peer: { kind: "channel", id: "1508541253506175179" }
}
}
]
}
Then restart:
openclaw gateway restart
openclaw agents list --bindings
Two important caveats:
systemPromptOverrideis the “full override” knob. It removes the usual SOUL/USER/AGENTS prompt stack for that agent, but OpenClaw still has runtime/tool mechanics around the model.- Skills are easy to scope per agent with
agents.list[].skills. MCP server definitions live undermcp.servers; for “only one MCP”, keep that registry narrow or pair it with tool policy depending on how that MCP is surfaced by your runtime.
Docs I checked:
https://docs.openclaw.ai/concepts/multi-agent
https://docs.openclaw.ai/concepts/agent-workspace
https://docs.openclaw.ai/tools/skills-config
https://docs.openclaw.ai/gateway/configuration-reference#agents-defaults-systempromptoverride
Relevant redacted excerp from my openclaw.json.
{
"agents": {
"defaults": {
"workspace": "/home/openclaw/.openclaw/workspace",
"models": {
"<OPEN AI PROVIDER>/gpt-oss-120b": {
"alias": "<ALIAS>",
"params": {
"stream": false
}
}
},
"heartbeat": {
...
},
"sandbox": {
"mode": "all",
"scope": "session",
"workspaceAccess": "none",
"docker": {
"image": "openclaw-sandbox-common:bookworm-slim",
"network": "mcp-net-internal"
}
},
"model": {
"primary": "<OPEN AI PROVIDER>/gpt-oss-120b"
},
"contextInjection": "always",
"bootstrapMaxChars": 20000,
"bootstrapTotalMaxChars": 150000
}
}
...
"tools": {
"profile": "coding",
"elevated": {
"enabled": false
},
"sandbox": {
"tools": {
"alsoAllow": [
"group:messaging",
"bundle-mcp"
]
}
},
"web": {
"search": {
"provider": "searxng",
"enabled": true,
"openaiCodex": {}
},
"fetch": {
"enabled": false
}
},
"deny": [
"web_fetch",
"browser"
]
},
...
"channels": {
"nextcloud-talk": {
"enabled": true,
"baseUrl": "<NEXTCLOUD PUBLIC URL>",
"botSecret": "<TOKEN>",
"webhookHost": "0.0.0.0",
"webhookPort": 8788,
"webhookPath": "/nextcloud-talk-webhook",
"dmPolicy": "disabled",
"groupPolicy": "allowlist",
"groupAllowFrom": [
"users/<MY USER>"
],
"rooms": {
"<MY MAIN CHANNEL I USE FOR HEARTBEATS, CRON AND CHATTING>": {
"requireMention": false
}
}
}
}
...
I have created a new nextcloud room and activated the bot there. I would like it to use that with a custom prompt and have access to only a few tools from a specifc mcp and messaging
First check the running version with openclaw --version, because these per-room knobs depend on a recent Nextcloud Talk plugin build.
For the shape you want, use the room token as the key under channels.nextcloud-talk.rooms. That token is usually the Talk room/call token from the room URL, not the display name.
Example:
{
channels: {
"nextcloud-talk": {
enabled: true,
baseUrl: "<NEXTCLOUD PUBLIC URL>",
botSecret: "<TOKEN>",
webhookHost: "0.0.0.0",
webhookPort: 8788,
webhookPath: "/nextcloud-talk-webhook",
dmPolicy: "disabled",
groupPolicy: "allowlist",
groupAllowFrom: ["users/<MY USER>"],
rooms: {
"<OLD ROOM TOKEN>": {
requireMention: false
},
"<NEW ROOM TOKEN>": {
requireMention: false,
allowFrom: ["users/<MY USER>"],
systemPrompt: "You are the assistant for this room. <custom instructions here>",
tools: {
allow: [
"group:messaging",
"<exact_mcp_tool_name_1>",
"<exact_mcp_tool_name_2>"
],
deny: [
"browser",
"web_fetch"
]
}
}
}
}
}
}
Important bit: don’t use bundle-mcp in that room if you only want a few MCP tools. bundle-mcp grants the bundled MCP plugin-owned tools as a set; for a tight room, list the exact exposed tool names instead. group:messaging is fine for the message tool.
If you want a totally separate “brain” too, add an agents.list[] entry with its own systemPromptOverride, workspace, tools, etc., then add a bindings[] route for channel: "nextcloud-talk" and peer { kind: "group", id: "<NEW ROOM TOKEN>" }. But for just a room-specific prompt + room-specific tool policy, the room config above is the simpler path.
After editing:
openclaw doctor
openclaw gateway restart
Docs:
do I really need allowFrom: ["users/<MY USER>"],
if I already have groupAllowFrom: ["users/<MY USER>"],
the other chat worked without it
No, you don’t need the per-room allowFrom if groupAllowFrom already covers the same user.
For Nextcloud Talk groups, it’s layered like this:
groupAllowFrom= channel/account-wide allowlist for room sendersrooms["<room-token>"]= room allowlist / room-specific settingsrooms["<room-token>"].allowFrom= optional extra sender restriction for that one room
So if your config has:
groupPolicy: "allowlist",
groupAllowFrom: ["users/<MY USER>"],
rooms: {
"<NEW ROOM TOKEN>": {
requireMention: false,
systemPrompt: "...",
tools: { allow: [...] }
}
}
that should be enough, assuming the sender ID matches users/<MY USER>.
Only add per-room allowFrom if you want that room to be stricter or different from the global groupAllowFrom, for example one room only allowed for Alice while another is allowed for Alice + Bob. If both are present, think of room allowFrom as an extra gate, not a replacement.
okay. how do I find the exact tool names?
Best way: ask the running agent for its effective list in the room/session you care about:
/tools
/tools verbose
Use the names exactly as shown there. The Connected tools section is where MCP/plugin tools show up. /tools verbose is useful because it also shows descriptions, so you can tell which MCP tool is which.
For bundle MCP specifically, OpenClaw exposes names like:
<serverName>__<toolName>
Example: MCP server key vigil-harbor with tool memory_search becomes:
vigil-harbor__memory_search
A couple of gotchas:
- the prefix is the MCP server key from config, not necessarily the package name
- unsafe chars get sanitized, and long names can be capped
- if you already locked the new room down too tightly,
/toolsin that room may only show the restricted set; run it from your existing unrestricted/main room first, or temporarily allowbundle-mcp, run/tools verbose, then replace it with the exact tool names
Docs: https://docs.openclaw.ai/plugins/bundles and https://docs.openclaw.ai/gateway/configuration