#tools.allow allowlist contains unknown entries (apply_patch, discord). These entries won't match any
1 messages · Page 1 of 1 (latest)
That warning is coming from OpenClaw’s tool-policy resolver: you have a tools.allow somewhere (often under channels.discord.guilds.<id>.tools.allow or global tools.allow) that includes entries OpenClaw doesn’t currently consider valid/loaded tools:
apply_patch: exists, but is experimental and off by default. It only becomes available if you explicitly enable it undertools.exec.applyPatch.enabled(OpenAI / OpenAI Codex only).discord: in current builds, Discord “do Discord things” is typically under the genericmessagetool (orgroup:messaging). Sodiscordin an allowlist often won’t match anything and triggers this warning.
What to do (pick what matches your intent):
-
If you just want the warning gone: remove
apply_patch/discordfrom thattools.allow. -
If you want to allow Discord messaging actions in that scope: use:
message(orgroup:messaging) instead ofdiscord.
- If you actually want
apply_patch: enable it in config, e.g.
{
tools: {
exec: {
applyPatch: { enabled: true }
}
}
}
(optional: add applyPatch.allowModels if you want to restrict which models can use it)
If you paste:
- your
openclaw --version - the snippet of your config around the place you set
tools.allow(global + thechannels.discord.guilds...part if present)
…I can tell you the exact minimal change to make it match what you want. Docs refs: https://docs.openclaw.ai/tools and https://docs.openclaw.ai/channels/discord
i have
profile: "full",
allow: ["*"],
deny: ["web_search", "browser", "canvas", "image"],
exec: {
backgroundMs: 10000,
timeoutSec: 1800,
cleanupMs: 1800000,
applyPatch: { enabled: true }
},
and
"plugins": {
"entries": {
"discord": {enabled: true},
"memory-core": {enabled: true},
"internet": {
"enabled": true,
"config": { "baseUrl": "http://localhost:8080" }
},
}
},
and
"channels": {
"discord": {
"enabled": true,
"token": "<token>",
"groupPolicy": "open"
}
},
how many more places do i need discord haha
You don’t need to “enable Discord more” — that warning is almost certainly not about channels.discord.enabled.
It’s complaining about an allowlist somewhere that contains the strings:
discord(there is no tool nameddiscordin tool policy; Discord is a channel. For “send messages / react / etc” the tool ismessage/group:messaging.)apply_patch(only exists if your build supports it + it’s enabled; and even then you generally don’t need to list it if you already haveallow: ["*"].)
Two common causes:
1) You’re not editing the config the service is actually running
Run and paste:
openclaw --version
openclaw gateway status
gateway status will show what config the daemon is using (people often edit one file, but the service is pointed at another). If they differ, openclaw doctor usually offers to fix it.
2) You have another tool-policy override somewhere that still lists ["apply_patch","discord"]
Even if your global tools block is allow: ["*"], you can still have overrides in e.g.:
agents.list[].tools.allowchannels.discord.guilds.<id>.tools.allowchannels.discord.guilds.<id>.channels.<channel>.tools.allow
Best way to find it is to grep the actual config path (from gateway status), e.g.:
rg -n 'tools\\.allow|apply_patch|"discord"' /path/to/openclaw.json
If you paste the gateway status output + the matching config snippet that rg finds, I can tell you exactly what line to change (usually: remove discord from tools.allow — it won’t ever match).
there is a plugin called discord that adds a variety of featuers. I believe that uses a dedicated discord tool to do things such as react to messages, no?
Nope — the discord plugin is the Discord channel implementation, not a plugin that registers an agent tool named discord.
In current OpenClaw, “do Discord stuff” (send, react, pins, threads, etc.) is exposed to the agent via the generic message tool (or group:messaging). The Discord channel/plugin is what executes those message actions on Discord.
So:
- Putting
"discord"intools.allowwon’t enable anything, because there is no tool/plugin-tool bundle nameddiscordto enable → you get the “unknown entries” warning. - To control what the agent can do on Discord, use
channels.discord.actions(e.g.reactions,pins,threads,search, etc.) plus tool policy formessage.
Example (if you want to allow messaging but disable reactions):
channels: {
discord: {
actions: {
messages: true,
reactions: false,
}
}
}
On apply_patch: the tool name is apply_patch, but it’s experimental + OpenAI/Codex-only. If you’re not on an OpenAI(-Codex) model for that run, it can still show up as “unknown” in allowlists even if you set tools.exec.applyPatch.enabled.
If you want, paste the exact config snippet where you set a guild/channel-specific tools.allow (the warning label says “Discord Guild #tools.allow”, which usually means a channels.discord.guilds...tools...allow override somewhere).
does openai mean it just has to be using openai responses api?
No — “OpenAI” here means the agent turn is running on an OpenAI-family provider/model, not “any provider that happens to speak the OpenAI Responses API”.
For apply_patch, OpenClaw gates it to OpenAI / OpenAI Codex models only (because the feature relies on OpenAI-specific support). So it works when the model you’re actually using for that run is something like:
openai/<something>(e.g.openai/gpt-5.2)- or
openai-codex/<something>(Codex)
If you’re using Anthropic/MiniMax/OpenRouter/etc for the agent run, apply_patch won’t be considered available even if tools.exec.applyPatch.enabled: true.
If you paste your openclaw models status + which model your Discord agent is using, we can confirm whether your Discord turns are actually hitting an OpenAI model.
"plugins": {
"entries": {
"discord": {enabled: true},
"memory-core": {enabled: true},
are discord and memory-core built in plugins? or are those made up
They’re real.
-
discordis an official bundled channel plugin shipped with OpenClaw (it’s what implementschannels.discord).- It does not register an agent tool named
discord— it just registers the Discord channel. Discord actions (send/react/etc) are gated viachannels.discord.actionsand executed through the genericmessagetool surface.
- It does not register an agent tool named
-
memory-coreis an official bundled memory plugin (kind:memory) that registers thememory_search+memory_gettools. It’s also the default memory slot (plugins.slots.memorydefaults to"memory-core").
You can verify on your box with:
openclaw plugins list
openclaw plugins info discord
openclaw plugins info memory-core
So: not made up — but also, adding "discord" to tools.allow won’t help, because it’s not a tool name in the current tool policy system.
explain to me the
sendPolicy: { default: "allow", rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], },
section
That block is session send policy: a global “where am I allowed to deliver messages?” filter.
sendPolicy: {
default: "allow",
rules: [
{ action: "deny", match: { channel: "discord", chatType: "group" } }
],
},
What it means:
-
default: "allow"
If no rule matches, OpenClaw is allowed to send/deliver as normal. -
rules
Each rule matches an outbound delivery target and then either allows or denys it.
Match fields you can use include:
-
channel: e.g."discord","telegram","slack", etc. -
chatType:"direct"(DMs) vs"group"(servers/groups) vs"room"(some platforms) -
keyPrefix: e.g."cron:"to target cron sessions -
This specific rule:
{ channel: "discord", chatType: "group" }→ deny sending to Discord guild/group contexts.
Result: the bot can still receive messages in Discord guild channels, but when it tries to deliver a reply there, it will be blocked. Discord DMs (chatType: "direct") are still allowed.
Typical reasons to use it:
- “Never speak in Discord servers, DM-only”
- “Let crons run but don’t let them post into chat” (via
match: { keyPrefix: "cron:" })
Important: this is unrelated to the tools.allow warning you were seeing earlier — that warning is about tool allowlists, while sendPolicy is about message delivery.
does userTimezone: "America/New York", have spaces or not
Use the IANA timezone ID — no spaces.
For New York it’s:
userTimezone: "America/New_York",
("America/New York" is not a valid tz name.)
If you leave agents.defaults.userTimezone unset, OpenClaw will just use the gateway host’s timezone automatically.
if i have one agent in list[] and its id is main, will openclaw be sure to load that agent every time?
Yes.
OpenClaw picks an agent per inbound message via deterministic routing:
bindings[]matches (peer/guild/team/account/channel), else- default agent =
agents.list[].default, else first entry inagents.list, else fallback to"main".
So if your agents.list contains only one agent and it’s { id: "main" }, that agent will be the default every time (unless you add a bindings[] rule that routes messages somewhere else later).
If you want to make it explicit/future-proof (once you add more agents), set:
agents: {
list: [{ id: "main", default: true }]
}