#Agents setup
1 messages · Page 1 of 1 (latest)
Nope, not required.
What matters is the workspace:
- same workspace = same
SOUL.md,AGENTS.md,USER.md, etc. - different workspace = separate personality, memory, notes, identity
So if you want each agent to feel like a separate “me”, give each one its own workspace. If you just want multiple routes/accounts with basically the same brain, they can share.
Typical setup:
{
agents: {
list: [
{ id: "home", workspace: "~/.openclaw/workspace-home" },
{ id: "work", workspace: "~/.openclaw/workspace-work" }
]
}
}
Or just scaffold one with:
openclaw agents add work
That creates a separate workspace with its own bootstrap files.
https://docs.openclaw.ai/concepts/agent-workspace
https://docs.openclaw.ai/concepts/soul
If you want, I can also show the “same soul vs separate soul” setup side by side.
I am using discord to setup chnnels which user loval model for simple task and for coding it uses local model plus a cloud open router model and rest all can be setup based on used pdf images or any other
Yep, that setup makes sense, but I’d separate personality from routing/model choice.
For your case:
- Same personality across channels → you do not need separate
SOUL.md - Different personality / memory / rules → give that agent its own workspace, so it gets its own
SOUL.md,AGENTS.md, etc. - Different model per Discord channel → you can often use
channels.modelByChannel - Different agent per channel → use
bindingswith channel IDs / peer bindings - PDFs and images → those can use
imageModel/pdfModel, they do not need a separate soul
One important gotcha: fallbacks are failover, not smart task routing.
So “use local for easy stuff, cloud for harder stuff” is not automatic just because you set primary + fallbacks. If you want that split cleanly, make separate channels/agents.
Honestly, I’d do it like this:
- chat/simple channel → local model
- coding channel → separate coding agent, stronger model/tool setup
- pdf/image-heavy work → set
pdfModelandimageModelto something multimodal
Also, small warning, local models are often fine for basic chat, but they still wobble a lot on coding, tool calls, PDFs, and images.
Docs:
https://docs.openclaw.ai/concepts/multi-agent
https://docs.openclaw.ai/gateway/configuration#channel-model-overrides
https://docs.openclaw.ai/concepts/models
https://docs.openclaw.ai/concepts/agent-workspace
If you want, I can sketch the exact config shape for one soul, multiple Discord channels, different models.
Yes also you think making channels is better or forum where example chat forum i can have sepearate for each session and old forums unde chat catergy just stays but sessions doesnt need to be avtuve if inactuve and i will visit back when needed
Yeah, for what you described, I’d lean forum/threads, not a pile of permanent channels.
My recommendation:
- Use a few stable channels/categories for big modes, like
chat,coding,research - Use forum posts / threads inside them for actual sessions or tasks
- Let old threads go inactive, then reopen them when you want to continue
Why I’d do that:
- cleaner than dozens of permanent channels
- each thread feels like its own session/context
- old work stays organized instead of cluttering the sidebar
- easier to come back to a specific task later
I’d use plain channels only when the conversation is meant to be long-lived and continuous, like one always-on coding room.
So, short version:
- permanent mode/persona → channel or separate agent
- per task / per project / per session → forum thread
If you want the same “brain” everywhere, keep one SOUL.md.
If you want coding me to behave differently from chat me, make a separate agent/workspace.
And yep, inactive threads do not need to stay “active” in the UI to be useful later. That part is exactly why threads are nice.
Docs:
https://docs.openclaw.ai/channels/discord
https://docs.openclaw.ai/concepts/multi-agent
If you want, I can sketch a good Discord server layout for this, like categories + channels + where each agent/model should live.
Yes
Nice. I’d keep it pretty simple at first.
My honest recommendation, start with 2 agents, not 6.
Suggested Discord layout
Category: Chat
-
Forum:
chat-sessions
Use this for normal conversations, one thread per topic/session
Agent:main
Model: local / cheap default -
Forum:
research
Same agent or a slightly stronger one if needed
Good for longer question threads you want to revisit
Category: Coding
-
Channel:
coding-main
Persistent coding room if you want one long-lived dev context
Agent:coding
Model: stronger setup, better tools -
Optional Forum:
coding-tasks
One thread per bug / feature / experiment
Better if you want separate coding sessions instead of one giant room
Category: Multimodal
- Forum:
docs-pdf-images
For PDF/image-heavy work
Usually this can still be the same main agent, just withpdfModel/imageModelconfigured
Category: Admin / Setup
- Channel:
agent-setup - Channel:
logs-or-debugif you want a place to inspect behavior
Agent split I’d use
-
mainagent- same
SOUL.md - local model for basic chat
- forum-based threads
- same
-
codingagent- separate workspace
- separate
SOUL.mdonly if you want it more technical/blunt - stronger model/tool setup
Rule of thumb
- Need separate personality/memory/tools? → separate agent
- Just need separate conversations? → forum threads
- Just need different model in one place? → channel model override
If it were me, I’d start with:
chat-sessionsforumcoding-mainchanneldocs-pdf-imagesforum
That’s enough to learn what you actually need, without building a Discord maze 😅
If you want, I can give you the exact config shape for this setup next.
No need seperate soul or workplace give me a better setup
Yep, then I’d keep it one agent, one workspace, one soul, and split by channel purpose, not by agent.
Better simple setup
1) Use one default agent
- one
SOUL.md - one workspace
- default model = your cheap/local model
2) Make 3 Discord surfaces
chat-sessionsforum
default local model, one thread per conversationcoding-mainnormal text channel
pin this to the stronger coding modeldocs-imagesforum
same agent, but letpdfModel/imageModelhandle attachments
3) Use model routing, not agent splitting
- default chat = local
- coding channel = stronger cloud model
- PDFs/images = stronger multimodal model via
pdfModelandimageModel
Why this is better
- less config
- less personality drift
- less duplicated memory
- easier to maintain
- you still get different “modes” without making fake extra people
My honest take, don’t split agents until it hurts.
Config shape
{
agents: {
defaults: {
workspace: "~/.openclaw/workspace",
model: { primary: "<local-model>" },
imageModel: { primary: "<multimodal-model>" },
pdfModel: { primary: "<multimodal-model>" },
},
},
channels: {
modelByChannel: {
discord: {
"CODING_CHANNEL_ID": "<strong-coding-model>",
},
},
discord: {
groupPolicy: "allowlist",
guilds: {
"YOUR_GUILD_ID": {
channels: {
"CHAT_FORUM_ID": { allow: true, requireMention: false },
"CODING_CHANNEL_ID": { allow: true, requireMention: false },
"DOCS_IMAGES_FORUM_ID": { allow: true, requireMention: false },
},
},
},
},
},
}
Small design tip
If you want hard model pinning, use a normal text channel for coding.
I’d use forums mostly for session organization, not for your strictest routing rule.
So my final recommendation is:
- forum for chat
- channel for coding
- forum for docs/images
- one agent underneath all of it
Docs:
https://docs.openclaw.ai/gateway/configuration#channel-model-overrides
https://docs.openclaw.ai/concepts/models
https://docs.openclaw.ai/channels/discord
If this fixed it, please right-click the solution message → Apps → ✅ Mark Solution so Answer Overflow can index it for future users. 🎉
I have 2 local models gemma 4e2b and e4b for local chat and coding and have 3 cloud models for hugher stuff now give me the setup also rightnow i only have operouter i need to install ollama and make it default guide me even that
Yep. With 2 local + 3 cloud, I’d keep it simple and do one agent, one workspace, one soul.
Setup I’d use
Discord layout
chat-sessionsforum
default = your local chat modelcoding-maintext channel
pinned = your local coding modeldeep-worktext channel
pinned = your strongest cloud modeldocs-imagesforum
same agent, butpdfModel/imageModeluse your best multimodal cloud model
That gives you:
- cheap default chat
- local coding by default
- one “serious mode” channel for harder work
- proper PDF/image handling without making another agent
Important reality check
Use the local coding model for light coding/chat about code.
For real tool-heavy coding, file edits, bigger refactors, or messy debugging, I’d still keep one strong cloud model close by. Small local models tend to wobble there.
Ollama install + make it default
Easiest path, recommended
- Install Ollama from
https://ollama.com/download
- Pull your two local models in Ollama
ollama pull <your-chat-model>
ollama pull <your-coding-model>
- Enable Ollama in OpenClaw
If you want the cleanest path, run:
openclaw onboard
Then choose:
- Ollama
- Local only
- base URL:
http://127.0.0.1:11434 - pick your chat model as the default
- Verify OpenClaw sees Ollama
openclaw models list --provider ollama
openclaw models status
- If needed, set the default explicitly
openclaw models set ollama/<your-chat-model>
Manual Ollama enablement
If you don’t want to rerun onboarding, the local-discovery path is:
export OLLAMA_API_KEY="ollama-local"
Then restart the gateway and verify:
openclaw gateway restart
openclaw models list --provider ollama
openclaw models set ollama/<your-chat-model>
Important: if you run OpenClaw as a daemon/service, that env var has to exist for the gateway service, not just your current shell.
Also, for local Ollama, do not point OpenClaw at /v1. Use the native Ollama URL only:
- good:
http://127.0.0.1:11434 - bad:
http://127.0.0.1:11434/v1
Config shape I’d use
Replace the placeholders with your actual model refs.
{
agents: {
defaults: {
workspace: "~/.openclaw/workspace",
// default everywhere
model: {
primary: "ollama/<your-chat-model>",
fallbacks: [
"openrouter/<your-main-cloud-model>"
]
},
// attachments / multimodal
imageModel: {
primary: "openrouter/<your-best-image-capable-cloud-model>"
},
pdfModel: {
primary: "openrouter/<your-best-pdf-capable-cloud-model>"
}
}
},
channels: {
modelByChannel: {
discord: {
"CODING_CHANNEL_ID": "ollama/<your-coding-model>",
"DEEP_WORK_CHANNEL_ID": "openrouter/<your-strongest-cloud-model>"
}
},
discord: {
groupPolicy: "allowlist",
guilds: {
"YOUR_GUILD_ID": {
channels: {
"CHAT_FORUM_ID": { allow: true, requireMention: false },
"CODING_CHANNEL_ID": { allow: true, requireMention: false },
"DEEP_WORK_CHANNEL_ID": { allow: true, requireMention: false },
"DOCS_IMAGES_FORUM_ID": { allow: true, requireMention: false }
}
}
}
}
}
}
My final recommendation
If you want the least pain:
- default model = local chat
- coding channel = local coding
- deep-work channel = best cloud
- image/pdf = best multimodal cloud
- keep the other cloud models available via
/model, don’t over-wire all of them yet
Docs:
https://docs.openclaw.ai/providers/ollama
https://docs.openclaw.ai/concepts/models
https://docs.openclaw.ai/gateway/configuration#channel-model-overrides
If you want, next I can give you a copy-paste config template where you only fill in:
- your guild ID
- channel IDs
- exact model refs
Why dont you have two agents because rightnow i have to swap models manually right for each task keep this in mind and give me entire setup again whats best for mac mini 16gb m4
Yeah, that’s exactly the reason to use 2 agents.
If you do 1 agent, you keep swapping models manually.
If you do 2 agents, you stop thinking about model switching and just go to the right channel.
For a Mac mini M4, 16 GB, my honest recommendation is:
Best setup
Agent 1: local
Use this for:
- normal chat
- quick questions
- lightweight coding talk
- drafts / brainstorming
Default model:
- your smaller/faster local Ollama model
Agent 2: pro
Use this for:
- real coding work
- debugging
- PDFs
- images
- harder reasoning
Default model:
- your best cloud model
Fallbacks:
- your other cloud models
Why not make the coding agent local by default?
Because on a 16 GB Mac mini, small local models are fine for chat and light code discussion, but for serious agentic coding they still fall over too often. I wouldn’t build the whole flow around that.
So, best practical split is:
- local agent = fast + cheap
- pro agent = reliable + capable
Your second local model can stay available for testing, but I would not make it the core of the setup on day one.
Discord layout
Keep it dead simple:
#local-chat#pro-work
#docs-images
If you want session organization, make threads under those channels.
That’s cleaner than a maze of extra channels.
Docs-backed note: Discord threads inherit parent channel config, so this pattern works well.
https://docs.openclaw.ai/channels/discord
Workspace / soul
You do not need different personalities.
Best approach:
- 2 agents
- same style / same soul text
- different default models and channel bindings
So the real split is capability, not personality.
Ollama setup
1) Install Ollama
2) Pull your local model(s)
Use your actual model IDs:
ollama pull <your-local-chat-model>
ollama pull <your-other-local-model>
3) Enable Ollama in OpenClaw
Safest path:
openclaw onboard
Choose:
- Ollama
- Local only
- base URL:
http://127.0.0.1:11434
Then verify:
openclaw models list --provider ollama
openclaw models status
Config shape I’d use
Replace placeholders with your real IDs.
{
agents: {
list: [
{
id: "local",
default: true,
workspace: "~/.openclaw/workspace-local",
model: "ollama/<your-local-chat-model>"
},
{
id: "pro",
workspace: "~/.openclaw/workspace-pro",
model: {
primary: "openrouter/<your-best-cloud-model>",
fallbacks: [
"openrouter/<your-cloud-backup-1>",
"openrouter/<your-cloud-backup-2>"
]
}
}
],
defaults: {
imageModel: {
primary: "openrouter/<your-best-image-capable-cloud-model>"
},
pdfModel: {
primary: "openrouter/<your-best-pdf-capable-cloud-model>"
}
}
},
bindings: [
{
agentId: "local",
match: {
channel: "discord",
guildId: "YOUR_GUILD_ID",
peer: { kind: "channel", id: "LOCAL_CHAT_CHANNEL_ID" }
}
},
{
agentId: "pro",
match: {
channel: "discord",
guildId: "YOUR_GUILD_ID",
peer: { kind: "channel", id: "PRO_WORK_CHANNEL_ID" }
}
},
{
agentId: "pro",
match: {
channel: "discord",
guildId: "YOUR_GUILD_ID",
peer: { kind: "channel", id: "DOCS_IMAGES_CHANNEL_ID" }
}
}
],
channels: {
discord: {
groupPolicy: "allowlist",
guilds: {
"YOUR_GUILD_ID": {
channels: {
"LOCAL_CHAT_CHANNEL_ID": { allow: true, requireMention: false },
"PRO_WORK_CHANNEL_ID": { allow: true, requireMention: false },
"DOCS_IMAGES_CHANNEL_ID": { allow: true, requireMention: false }
}
}
}
}
}
}
Final answer
For M4 Mac mini 16 GB, I would do:
- 2 agents
- local agent for everyday use
- cloud agent for serious work
- same soul/personality
- threads under 2-3 main channels
- don’t rely on tiny local models for heavy coding
That’s the cleanest setup with the least manual model swapping.
Docs:
https://docs.openclaw.ai/concepts/multi-agent
https://docs.openclaw.ai/providers/ollama
https://docs.openclaw.ai/concepts/models
If you want, I can now turn this into a copy-paste openclaw.json template with obvious placeholders only.
I would like more channels for clean setup tive me entire setup again
Yep, if you want a cleaner setup with more channels, I’d do this:
Best overall setup for your Mac mini M4, 16 GB
Keep only 2 agents
Not 5, not 8.
-
localagent- fast, cheap, everyday use
- default = your local Ollama chat model
-
proagent- coding, debugging, research, PDFs, images
- default = your best cloud model
- fallbacks = your other cloud models
Use the same soul/personality for both.
The split is for capability, not personality.
Discord server layout
Category: Local
#local-chat#local-brainstorm#local-notes
All 3 route to the local agent.
Good for:
- casual chat
- thinking out loud
- drafts
- quick questions
Category: Pro
#pro-coding#pro-debugging#pro-research#pro-deep-work#pro-docs-pdf#pro-images
All 6 route to the pro agent.
Good for:
- coding
- debugging
- architecture
- longer reasoning
- PDFs
- images
Category: Meta
#agent-setup#agent-logbook(optional)#agent-sandbox(optional test room)
These can route to pro or stay manual/admin only.
Important usage rule
Inside the bigger channels like:
#pro-coding#pro-debugging#pro-research
use threads for separate tasks.
So you get:
- channels = clean top-level buckets
- threads = actual per-task sessions
That’s the cleanest Discord shape.
Model strategy
local agent
- primary = your local chat model
pro agent
- primary = your strongest cloud model
- fallbacks = your other cloud models
Global attachment routing
imageModel= your best cloud multimodal modelpdfModel= your best cloud PDF-capable model
That way:
- normal chat stays local
- serious work goes cloud
- attachments automatically use the right stronger model
Ollama setup
1) Install Ollama
2) Pull your local model(s)
ollama pull <your-local-chat-model>
ollama pull <your-other-local-model>
3) Add Ollama to OpenClaw
Safest path:
openclaw onboard
Choose:
- Ollama
- Local only
- base URL:
http://127.0.0.1:11434
Then verify:
openclaw models list --provider ollama
openclaw models status
Config shape
{
agents: {
list: [
{
id: "local",
default: true,
workspace: "~/.openclaw/workspace-local",
model: "ollama/<your-local-chat-model>"
},
{
id: "pro",
workspace: "~/.openclaw/workspace-pro",
model: {
primary: "openrouter/<your-best-cloud-model>",
fallbacks: [
"openrouter/<your-cloud-backup-1>",
"openrouter/<your-cloud-backup-2>"
]
}
}
],
defaults: {
imageModel: {
primary: "openrouter/<your-best-image-capable-cloud-model>"
},
pdfModel: {
primary: "openrouter/<your-best-pdf-capable-cloud-model>"
}
}
},
bindings: [
{ agentId: "local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "LOCAL_CHAT_ID" } } },
{ agentId: "local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "LOCAL_BRAINSTORM_ID" } } },
{ agentId: "local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "LOCAL_NOTES_ID" } } },
{ agentId: "pro", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "PRO_CODING_ID" } } },
{ agentId: "pro", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "PRO_DEBUGGING_ID" } } },
{ agentId: "pro", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "PRO_RESEARCH_ID" } } },
{ agentId: "pro", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "PRO_DEEP_WORK_ID" } } },
{ agentId: "pro", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "PRO_DOCS_PDF_ID" } } },
{ agentId: "pro", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "PRO_IMAGES_ID" } } }
],
channels: {
discord: {
groupPolicy: "allowlist",
guilds: {
"YOUR_GUILD_ID": {
channels: {
"LOCAL_CHAT_ID": { allow: true, requireMention: false },
"LOCAL_BRAINSTORM_ID": { allow: true, requireMention: false },
"LOCAL_NOTES_ID": { allow: true, requireMention: false },
"PRO_CODING_ID": { allow: true, requireMention: false },
"PRO_DEBUGGING_ID": { allow: true, requireMention: false },
"PRO_RESEARCH_ID": { allow: true, requireMention: false },
"PRO_DEEP_WORK_ID": { allow: true, requireMention: false },
"PRO_DOCS_PDF_ID": { allow: true, requireMention: false },
"PRO_IMAGES_ID": { allow: true, requireMention: false }
}
}
}
}
}
}
My final recommendation
For your machine, this is the sweet spot:
- 2 agents
- 9 to 10 clean channels
- threads inside pro channels for task separation
- local for casual stuff
- cloud for hard stuff
- same personality across both
That gives you a clean Discord layout without constant manual model switching.
Docs:
https://docs.openclaw.ai/concepts/multi-agent
https://docs.openclaw.ai/providers/ollama
https://docs.openclaw.ai/channels/discord
If you want, I can do one more step and give you a fully filled config template format, like:
LOCAL_CHAT_ID = ...
PRO_CODING_ID = ...
so you can paste it and just replace values.
How about more agents and agents stays inactive when not sued its not resonable
Yep, that’s a fair pushback.
You’re right, idle agents are mostly cheap.
They do not keep burning tokens just because they exist.
The real cost on your M4 Mac mini 16 GB is:
- how many local models Ollama keeps hot
- how often you bounce between different local models
- config complexity, not “agent existence”
So yes, more agents is reasonable if it saves you manual model switching.
Revised recommendation, best balance
I’d do 3 agents, maybe 4 max.
1) chat-local
- default = your smaller local model
- channels:
#local-chat#local-brainstorm#local-notes
2) code-local
- default = your stronger local model
- channels:
#local-code#local-scratch#quick-fixes
3) pro-cloud
- default = your best cloud model
- fallbacks = your other cloud models
- channels:
#pro-coding#pro-debugging#pro-research#pro-deep-work
Optional 4) media-cloud
Only if you want hard separation for attachments.
pdfModel/imageModelcan already solve a lot- but if you want dedicated rooms:
#docs-pdf#images#long-context
My honest take
For your machine, 3 agents is the sweet spot:
- one local chat
- one local code
- one cloud pro
That uses both local models properly, avoids manual switching, and doesn’t turn into agent spaghetti.
What I would not do
I would not go to 7 or 8 agents yet.
At that point you stop building a clean system and start building a taxonomy problem 😅
Important nuance
Even if agents are idle, switching between multiple different Ollama models can still be the annoying part on 16 GB RAM.
So more agents is fine, but keep the actual local model set small, which you already do.
Final answer
So yes, I’d change my recommendation:
- earlier I was optimizing for simplicity
- with your “no manual swapping” goal, 3 agents is better
- 4 is okay
- more than that, I’d only do if you’ve already proven the need
If you want, I can now rewrite the whole thing as a 3-agent full setup with:
- categories
- channels
- agent IDs
- exact binding layout
- where each of your 2 local + 3 cloud models should go
Yes also need to install ollama
Nice, then here’s the setup I’d actually use for you.
Best setup for your Mac mini M4, 16 GB
Use 3 agents
This gives you clean routing without manual model switching.
-
chat-local- everyday chat
- brainstorming
- notes
- default = your smaller local Ollama model
-
code-local- quick code help
- lightweight debugging
- scratch coding
- default = your stronger local Ollama model
pro-cloud- serious coding
- deep debugging
- research
- PDFs
- images
- default = your best cloud model
- fallbacks = your other cloud models
Use the same personality/SOUL style in all 3.
You do not need 3 different “people”.
Discord layout
Category: Local
#chat-local#brainstorm-local#notes-local
Category: Code
#code-local#scratch-code#quick-debug
Category: Pro
#pro-coding#pro-debugging#pro-research#docs-pdf#images#deep-work
Category: Meta
#agent-setup#agent-testing#agent-logbook(optional)
Use threads inside the busy channels like #pro-coding and #pro-research for separate tasks.
Install Ollama on macOS
1) Install it
Use the official installer:
Open the app once so the local server starts.
2) Verify it works
ollama --version
3) Pull your local models
ollama pull <your-chat-local-model>
ollama pull <your-code-local-model>
ollama list
Add Ollama to OpenClaw
Since you already have OpenRouter, the least annoying macOS path is:
openclaw onboard
Choose:
- Ollama
- Local only
- base URL:
http://127.0.0.1:11434
Then verify:
openclaw models list --provider ollama
openclaw models status
If Ollama models show up there, you’re good.
Create the 3 agents
openclaw agents add chat-local
openclaw agents add code-local
openclaw agents add pro-cloud
That scaffolds the agent workspaces.
If you want the same personality across them, keep the SOUL.md text basically the same in all 3.
Config shape
Replace placeholders with your real IDs and model refs.
{
agents: {
list: [
{
id: "chat-local",
default: true,
workspace: "~/.openclaw/workspace-chat-local",
model: "ollama/<your-chat-local-model>"
},
{
id: "code-local",
workspace: "~/.openclaw/workspace-code-local",
model: "ollama/<your-code-local-model>"
},
{
id: "pro-cloud",
workspace: "~/.openclaw/workspace-pro-cloud",
model: {
primary: "openrouter/<your-best-cloud-model>",
fallbacks: [
"openrouter/<your-cloud-backup-1>",
"openrouter/<your-cloud-backup-2>"
]
}
}
],
defaults: {
imageModel: {
primary: "openrouter/<your-best-image-capable-cloud-model>"
},
pdfModel: {
primary: "openrouter/<your-best-pdf-capable-cloud-model>"
}
}
},
bindings: [
{ agentId: "chat-local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "CHAT_LOCAL_ID" } } },
{ agentId: "chat-local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "BRAINSTORM_LOCAL_ID" } } },
{ agentId: "chat-local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "NOTES_LOCAL_ID" } } },
{ agentId: "code-local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "CODE_LOCAL_ID" } } },
{ agentId: "code-local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "SCRATCH_CODE_ID" } } },
{ agentId: "code-local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "QUICK_DEBUG_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "PRO_CODING_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "PRO_DEBUGGING_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "PRO_RESEARCH_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "DOCS_PDF_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "IMAGES_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "DEEP_WORK_ID" } } }
],
channels: {
discord: {
groupPolicy: "allowlist",
guilds: {
"YOUR_GUILD_ID": {
channels: {
"CHAT_LOCAL_ID": { allow: true, requireMention: false },
"BRAINSTORM_LOCAL_ID": { allow: true, requireMention: false },
"NOTES_LOCAL_ID": { allow: true, requireMention: false },
"CODE_LOCAL_ID": { allow: true, requireMention: false },
"SCRATCH_CODE_ID": { allow: true, requireMention: false },
"QUICK_DEBUG_ID": { allow: true, requireMention: false },
"PRO_CODING_ID": { allow: true, requireMention: false },
"PRO_DEBUGGING_ID": { allow: true, requireMention: false },
"PRO_RESEARCH_ID": { allow: true, requireMention: false },
"DOCS_PDF_ID": { allow: true, requireMention: false },
"IMAGES_ID": { allow: true, requireMention: false },
"DEEP_WORK_ID": { allow: true, requireMention: false }
}
}
}
}
}
}
Why this is the best fit
For your machine:
- local models handle cheap everyday work
- second local model gets a real job instead of sitting unused
- cloud agent handles the stuff that small local models usually fumble
- no manual swapping every five minutes
- clean channels, clean mental model
After setup, verify
openclaw agents list --bindings
openclaw models status
openclaw status
Docs:
https://docs.openclaw.ai/providers/ollama
https://docs.openclaw.ai/concepts/multi-agent
https://docs.openclaw.ai/channels/discord
If this fixed it, please right-click the solution message → Apps → ✅ Mark Solution. That helps Answer Overflow index it for future users. 🎉
What is the meta sectory used for which uses and how to utilize and setup
“Meta” just means channels about the agent system itself, not normal work.
What the Meta category is for
Use it for things like:
- setup
- testing
- debugging
- notes about how your agents/channels are organized
- trying prompts safely before using them in real channels
So it’s basically your control room.
Good Meta channels
#agent-setup
Use for:
- config questions
- changing bindings
- model routing
- asking the bot how something is set up
#agent-testing
Use for:
- test prompts
- checking replies
- trying new behaviors
- verifying a model/agent is working
#agent-logbook
Use for:
- pinned notes
- changelog
- what you changed and why
- “this channel uses local”, “this one uses cloud”, etc.
Optional: #agent-debug
Use for:
/status- checking whether routing looks right
- quick health checks
How to utilize it well
My recommendation:
- keep Meta mostly for you/admin use
- don’t do normal chat or coding there
- use it when you are adjusting the system itself
Think of it like this:
- Local / Code / Pro categories = actual work
- Meta category = operating the machine
How to set it up
Simple version
Create a category called:
META
Inside it make:
#agent-setup#agent-testing#agent-logbook
That’s enough.
Routing recommendation
#agent-testing→ route to your pro agent#agent-setup→ route to pro agent too#agent-logbook→ can just be a normal manual notes channel, no binding needed
Small tip
In Meta channels, I’d often keep requireMention: true if other people are around, so the bot doesn’t react to random chatter.
Is Meta required?
Nope.
It’s optional, but it makes the whole setup feel way cleaner once you have multiple agents/channels.
If you want, I can give you a final full Discord category map next, including:
- Local
- Code
- Pro
- Meta
- which agent each channel should use
sumize whats the plan
Yep, here’s the plan in one clean summary:
Plan
1) Install Ollama
- install from https://ollama.com/download
- pull your 2 local models
- verify with:
ollama listopenclaw models list --provider ollama
2) Use 3 agents
chat-local→ normal chat / notes / brainstormingcode-local→ quick code help / scratch codingpro-cloud→ serious coding / debugging / research / PDFs / images
3) Keep the same personality
- no need for different souls
- same style across all 3 agents is fine
4) Discord layout
Local
#chat-local#brainstorm-local#notes-local
Code
#code-local#scratch-code#quick-debug
Pro
#pro-coding#pro-debugging
#pro-research#docs-pdf#images#deep-work
Meta (optional admin area)
#agent-setup#agent-testing#agent-logbook
5) Routing
- local chat channels →
chat-local - local code channels →
code-local - pro/doc/image channels →
pro-cloud
6) Model strategy
chat-localuses your smaller local model
code-localuses your stronger local modelpro-clouduses your best cloud modelimageModel+pdfModelshould point to your best cloud multimodal model
7) Why this setup
- no constant manual model switching
- agents stay idle when unused
- both local models get real use
- cloud handles the stuff local models usually struggle with
8) Final check
Run:
openclaw models statusopenclaw agents list --bindingsopenclaw status
If you want, next I can turn this into a final copy-paste config template.
yes
Perfect, here’s the copy-paste template.
1) Install Ollama first
# install from https://ollama.com/download
ollama pull <YOUR_CHAT_LOCAL_MODEL>
ollama pull <YOUR_CODE_LOCAL_MODEL>
ollama list
Then make sure OpenClaw can see Ollama:
openclaw onboard
openclaw models list --provider ollama
Use:
- base URL:
http://127.0.0.1:11434 - mode: Local only
2) Create the agents
openclaw agents add chat-local
openclaw agents add code-local
openclaw agents add pro-cloud
If you want the same personality everywhere, copy the same SOUL.md content into all 3 workspaces.
3) Paste this into ~/.openclaw/openclaw.json
Replace every ALL_CAPS_PLACEHOLDER.
{
agents: {
list: [
{
id: "chat-local",
default: true,
workspace: "~/.openclaw/workspace-chat-local",
model: "ollama/YOUR_CHAT_LOCAL_MODEL"
},
{
id: "code-local",
workspace: "~/.openclaw/workspace-code-local",
model: "ollama/YOUR_CODE_LOCAL_MODEL"
},
{
id: "pro-cloud",
workspace: "~/.openclaw/workspace-pro-cloud",
model: {
primary: "openrouter/YOUR_BEST_CLOUD_MODEL",
fallbacks: [
"openrouter/YOUR_CLOUD_BACKUP_1",
"openrouter/YOUR_CLOUD_BACKUP_2"
]
}
}
],
defaults: {
imageModel: {
primary: "openrouter/YOUR_BEST_IMAGE_MODEL"
},
pdfModel: {
primary: "openrouter/YOUR_BEST_PDF_MODEL"
}
}
},
bindings: [
{ agentId: "chat-local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "CHAT_LOCAL_ID" } } },
{ agentId: "chat-local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "BRAINSTORM_LOCAL_ID" } } },
{ agentId: "chat-local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "NOTES_LOCAL_ID" } } },
{ agentId: "code-local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "CODE_LOCAL_ID" } } },
{ agentId: "code-local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "SCRATCH_CODE_ID" } } },
{ agentId: "code-local", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "QUICK_DEBUG_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "PRO_CODING_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "PRO_DEBUGGING_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "PRO_RESEARCH_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "DOCS_PDF_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "IMAGES_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "DEEP_WORK_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "AGENT_SETUP_ID" } } },
{ agentId: "pro-cloud", match: { channel: "discord", guildId: "YOUR_GUILD_ID", peer: { kind: "channel", id: "AGENT_TESTING_ID" } } }
],
channels: {
discord: {
groupPolicy: "allowlist",
guilds: {
"YOUR_GUILD_ID": {
channels: {
"CHAT_LOCAL_ID": { allow: true, requireMention: false },
"BRAINSTORM_LOCAL_ID": { allow: true, requireMention: false },
"NOTES_LOCAL_ID": { allow: true, requireMention: false },
"CODE_LOCAL_ID": { allow: true, requireMention: false },
"SCRATCH_CODE_ID": { allow: true, requireMention: false },
"QUICK_DEBUG_ID": { allow: true, requireMention: false },
"PRO_CODING_ID": { allow: true, requireMention: false },
"PRO_DEBUGGING_ID": { allow: true, requireMention: false },
"PRO_RESEARCH_ID": { allow: true, requireMention: false },
"DOCS_PDF_ID": { allow: true, requireMention: false },
"IMAGES_ID": { allow: true, requireMention: false },
"DEEP_WORK_ID": { allow: true, requireMention: false },
"AGENT_SETUP_ID": { allow: true, requireMention: false },
"AGENT_TESTING_ID": { allow: true, requireMention: false }
}
}
}
}
}
}
4) Suggested channel names
Local
#chat-local#brainstorm-local#notes-local
Code
#code-local#scratch-code#quick-debug
Pro
#pro-coding#pro-debugging
#pro-research#docs-pdf#images#deep-work
Meta
#agent-setup#agent-testing#agent-logbook← keep manual, no bot binding needed
5) Restart and verify
openclaw gateway restart
openclaw agents list --bindings
openclaw models status
openclaw status
6) What this gives you
- no constant model switching
- both local models get a real role
- cloud handles the hard stuff
- PDFs/images automatically route stronger
- clean Discord structure
Docs:
https://docs.openclaw.ai/providers/ollama
https://docs.openclaw.ai/concepts/multi-agent
https://docs.openclaw.ai/channels/discord
Glad we got this into a clean shape. If this fixed it, please right-click the solution message → Apps → ✅ Mark Solution so Answer Overflow can index it.