#Agents setup

1 messages · Page 1 of 1 (latest)

frail flame
#

Do i have to have seperste soul.md or other me for each agent

rocky gustBOT
lost mortarBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> ✅ Mark Solution

rocky gustBOT
crude prawnBOT
#

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.

Docs:
https://docs.openclaw.ai/concepts/multi-agent

frail flame
#

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

crude prawnBOT
#

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 bindings with 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:

  1. chat/simple channel → local model
  2. coding channel → separate coding agent, stronger model/tool setup
#
  1. pdf/image-heavy work → set pdfModel and imageModel to 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.

frail flame
#

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

crude prawnBOT
#

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.

frail flame
#

Yes

crude prawnBOT
#

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 with pdfModel / imageModel configured

Category: Admin / Setup

  • Channel: agent-setup
  • Channel: logs-or-debug if you want a place to inspect behavior
#

Agent split I’d use

  • main agent

    • same SOUL.md
    • local model for basic chat
    • forum-based threads
  • coding agent

    • separate workspace
    • separate SOUL.md only 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:

  1. chat-sessions forum
  2. coding-main channel
  3. docs-pdf-images forum

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.

frail flame
#

No need seperate soul or workplace give me a better setup

crude prawnBOT
#

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-sessions forum
    default local model, one thread per conversation
  • coding-main normal text channel
    pin this to the stronger coding model
  • docs-images forum
    same agent, but let pdfModel / imageModel handle attachments
#

3) Use model routing, not agent splitting

  • default chat = local
  • coding channel = stronger cloud model
  • PDFs/images = stronger multimodal model via pdfModel and imageModel

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:

frail flame
#

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

crude prawnBOT
#

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-sessions forum
    default = your local chat model
  • coding-main text channel
    pinned = your local coding model
  • deep-work text channel
    pinned = your strongest cloud model
  • docs-images forum
    same agent, but pdfModel / imageModel use 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

  1. Install Ollama from
    https://ollama.com/download
#
  1. Pull your two local models in Ollama
ollama pull <your-chat-model>
ollama pull <your-coding-model>
  1. 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
  1. Verify OpenClaw sees Ollama
openclaw models list --provider ollama
openclaw models status
  1. 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
frail flame
#

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

crude prawnBOT
#

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

https://ollama.com/download

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.

frail flame
#

I would like more channels for clean setup tive me entire setup again

crude prawnBOT
#

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.

  • local agent

    • fast, cheap, everyday use
    • default = your local Ollama chat model
  • pro agent

    • 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 model
  • pdfModel = 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

https://ollama.com/download

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:

#
  • PRO_CODING_ID = ...

so you can paste it and just replace values.

frail flame
#

How about more agents and agents stays inactive when not sued its not resonable

crude prawnBOT
#

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 / imageModel can 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
frail flame
#

Yes also need to install ollama

crude prawnBOT
#

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.

  1. chat-local

    • everyday chat
    • brainstorming
    • notes
    • default = your smaller local Ollama model
  2. code-local

    • quick code help
    • lightweight debugging
    • scratch coding
#
  • default = your stronger local Ollama model
  1. 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:

https://ollama.com/download

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
frail flame
#

What is the meta sectory used for which uses and how to utilize and setup

crude prawnBOT
#

“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
frail flame
#

sumize whats the plan

crude prawnBOT
#

Yep, here’s the plan in one clean summary:

Plan

1) Install Ollama

2) Use 3 agents

  • chat-local → normal chat / notes / brainstorming
  • code-local → quick code help / scratch coding
  • pro-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-local uses your smaller local model
#
  • code-local uses your stronger local model
  • pro-cloud uses your best cloud model
  • imageModel + pdfModel should 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 status
  • openclaw agents list --bindings
  • openclaw status

If you want, next I can turn this into a final copy-paste config template.

frail flame
#

yes

crude prawnBOT
#

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: