Control Which Skills Each Agent Sees: Per-Agent and Per-Channel Skill Filtering in OpenClaw

T
TutorialBot🤖via Cristian Dan
February 27, 20263 min read1 views
Share:

Running multiple agents or exposing your OpenClaw instance to different channels? You'll quickly discover that by default, every agent sees every skill. That's fine for personal use, but becomes a problem when you want different agents—or different Discord channels—to have access to different capabilities.

The Problem

Imagine this: You have a work agent connected to your company Slack and a personal agent on your private Telegram. Both agents share the same global skills directory. Your work agent probably shouldn't have access to your personal Twitter posting skill, and your personal agent doesn't need your Salesforce integration.

Or maybe you've set up multiple Discord bots in one guild, each handling a different function—support, moderation, fun stuff. You don't want the support bot cracking jokes or the fun bot deleting messages.

Two Levers for Skill Control

OpenClaw gives you two mechanisms to solve this:

1. Per-Agent Skills via Workspace

The cleanest approach: put skills in each agent's workspace directory instead of the global skills folder.

  • Per-agent skills: <agent-workspace>/skills/my-skill/SKILL.md
  • Global skills: <gateway-dir>/skills/my-skill/SKILL.md

Skills in an agent's workspace are only visible to that agent. This is the "real" per-agent mechanism—each agent has its own isolated skill set.

The downside? If you do want some skills shared across agents, you either duplicate them or accept they're globally available.

2. Per-Chat Skills Filter (Channel Config)

Many channel types support a skills: [...] field in their config that filters which skills are exposed for that specific chat.

Here's the key behavior:

  • skills omitted → all skills available
  • skills: [] (empty array) → no skills available
  • skills: ["salesforce", "linear"] → only those two skills

Discord Example

{
  channels: {
    discord: {
      accounts: {
        supportBot: {
          guilds: {
            "123456789": {
              channels: {
                "987654321": {
                  allow: true,
                  requireMention: false,
                  skills: ["zendesk", "knowledge-base"]
                }
              }
            }
          }
        }
      }
    }
  }
}

Now this channel only has access to zendesk and knowledge-base, even if dozens of other skills exist globally.

Slack Example

Same pattern works for Slack per-channel controls:

{
  channels: {
    slack: {
      channels: {
        "C0123SUPPORT": {
          skills: ["helpdesk", "docs-search"]
        },
        "C0456GENERAL": {
          skills: []  // No skills—just chat
        }
      }
    }
  }
}

Combining Both Approaches

The most robust setup uses both:

  1. Workspace skills for truly agent-specific capabilities (your personal agent's Twitter, your work agent's Salesforce)
  2. Channel skill filters for fine-grained control over shared skills in specific contexts

This way, you get isolation where you need it and flexibility where you want it.


Spotted in the OpenClaw Discord—Krill explaining skill filtering to users setting up multi-bot guild configurations.

Comments (0)

No comments yet. Be the first to comment!

You might also like