16:13:47 debug skills {"subsystem":"skills"} {"rawName":"coding-agent","deduped":"/coding_agent_5"} De-duplicated skill command name for "coding-agent" to "/coding_agent_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"healthcheck","deduped":"/healthcheck_5"} De-duplicated skill command name for "healthcheck" to "/healthcheck_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"skill-creator","deduped":"/skill_creator_5"} De-duplicated skill command name for "skill-creator" to "/skill_creator_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"tmux","deduped":"/tmux_5"} De-duplicated skill command name for "tmux" to "/tmux_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"weather","deduped":"/weather_5"} De-duplicated skill command name for "weather" to "/weather_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"automation-workflows","deduped":"/automation_workflows_5"} De-duplicated skill command name for "automation-workflows" to "/automation_workflows_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"builtbybit","deduped":"/builtbybit_5"} De-duplicated skill command name for "builtbybit" to "/builtbybit_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"database","deduped":"/database_5"} De-duplicated skill command name for "database" to "/database_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"git-essentials","deduped":"/git_essentials_5"} De-duplicated skill command name for "git-essentials" to "/git_essentials_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"git-workflows","deduped":"/git_workflows_5"} De-duplicated skill command name for "git-workflows" to "/git_workflows_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"github-action-gen","deduped":"/github_action_gen_5"} De-duplicated skill command name for "github-action-gen" to "/github_action_gen_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"hosting-report","deduped":"/hosting_report_5"} De-duplicated skill command name for "hosting-report" to "/hosting_report_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"monitoring","deduped":"/monitoring_5"} De-duplicated skill command name for "monitoring" to "/monitoring_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"security-audit","deduped":"/security_audit_5"} De-duplicated skill command name for "security-audit" to "/security_audit_5".
16:13:47 debug skills {"subsystem":"skills"} {"rawName":"system_monitor","deduped":"/system_monitor_5"} De-duplicated skill command name for "system_monitor" to "/system_monitor_5".
16:13:47 info gateway/channels/discord {"subsystem":"gateway/channels/discord"} discord: 104 commands exceeds limit; removing per-skill commands and keeping /skill.
16:13:47 info gateway/channels/discord {"subsystem":"gateway/channels/discord"} discord: GuildPresences intent enabled — presence listener registered
16:13:47 info gateway/channels/discord {"subsystem":"gateway/channels/discord"} logged in to discord as 1468040167745917122
16:14:02 debug plugins {"subsystem":"plugins"} plugin CLI register skipped (memory-core): command already registered (memory)
Log tail truncated (increase --max-bytes
#Duplicated skills
1 messages · Page 1 of 1 (latest)
Those log lines are basically “expected behavior” when you have a lot of skills / agents on Discord:
1) De-duplicated skill command name … to "/…_5"
Discord slash command names must be unique and are sanitized to a-z0-9_ (so coding-agent → coding_agent). If OpenClaw sees collisions, it appends a numeric suffix (_2, _3, …).
Seeing a bunch of …_5 usually means you have multiple agent workspaces contributing the same skill set, so the same skill name is getting registered multiple times as a native command and has to be deduped.
(Background: Discord native skill commands are collected across agents via listSkillCommandsForAgents(), which iterates agent workspaces and only skips duplicates when multiple agents share the same canonical workspace dir.)
2) discord: 104 commands exceeds limit; removing per-skill commands and keeping /skill.
Discord has a hard limit of 100 slash commands per app per guild. When OpenClaw would exceed that, it intentionally drops the per-skill native commands and keeps the generic:
/skill <name> [input]
So nothing is “broken” here — it’s a safety fallback so deploy doesn’t fail.
Docs: https://docs.openclaw.ai/tools/slash-commands (see the notes about skill command sanitizing + suffixes, and using /skill when native limits bite)
What to do
- If you’re fine with
/skill: do nothing (this is just informative logging). - If you want to avoid even trying to register per-skill commands on Discord: set either
commands.nativeSkills: false(global), orchannels.discord.commands.nativeSkills: false(Discord-only)
and restart the gateway.- If you really want per-skill native commands: you’ll need to get under 100 total commands (fewer user-invocable skills, fewer agent workspaces contributing, etc.).
If you paste your agents.list (just the id + workspace parts), I can tell you why it’s ending up as “x5” specifically in your setup.
404 {
"error": {
"code": 404,
"message": "Resource projects/bright-core-u7og7 could not be found.",
"status": "NOT_FOUND",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ResourceInfo",
"resourceName": "projects/bright-core-u7og7"
}
]
}
}
That 404 … Resource projects/bright-core-u7og7 could not be found is coming from Google, not Discord/skills.
It means one of these is true:
- The project ID is wrong / doesn’t exist (project ID must match exactly; it’s not the display name), or
- Your credential doesn’t have access to that project (common with the “wrong Google account” / wrong org), so Google returns NOT_FOUND.
Where this usually shows up in OpenClaw:
google-antigravityandgoogle-gemini-cliOAuth profiles include aprojectId(it’s stored in the auth profile and gets sent with requests). If thatprojectIdis bogus, you’ll get exactly this kind of 404.google-vertexalso needs a valid GCP project via ADC; same failure mode if the configured/default project doesn’t exist for that identity.
Fix
- Verify in Google Cloud Console that project ID
bright-core-u7og7exists for the account you’re authenticating as. - If it’s wrong, re-run the provider login so the stored profile has the correct project id, e.g.:
openclaw models auth login --provider google-antigravity
(same idea forgoogle-gemini-cli; for Vertex you need the right ADC account/project)