You named your new skill aatt-tweet. Clean, readable, makes sense as a folder name. Then you invoke /aatt_tweet in Discord and Obi says he doesn’t have it.
He’s not wrong. He just can’t find it.
The Problem
OpenClaw’s nativeSkills: "auto" setting registers workspace skills as Discord native slash commands. When a user invokes /aatt_tweet, Discord sends the string aatt_tweet (underscore) to OpenClaw’s routing layer.
OpenClaw looks for a skill with a matching name: field. If your skill’s frontmatter says name: aatt-tweet (hyphen), nothing matches. The agent responds as if the skill doesn’t exist — because from its perspective, it doesn’t.
Discord sends: aatt_tweet
Skill name is: aatt-tweet
Result: no match → "I don't have that skill"
Why This Happens
Discord’s slash command specification doesn’t allow hyphens in command names. When OpenClaw registers native skills, it normalizes the name: field to comply. But the internal routing still does an exact-string lookup against the name: field in your SKILL.md frontmatter — so if the stored name has a hyphen and Discord sends an underscore, the lookup fails.
The file watcher sees the folder name. The router uses the frontmatter name:. Both need to match what Discord will actually send.
The Fix
Two changes, both required:
1. Rename the skill folder (hyphen → underscore):
mv workspace/skills/aatt-tweet workspace/skills/aatt_tweet
2. Update the name: field in SKILL.md frontmatter:
# Before
name: aatt-tweet
# After
name: aatt_tweet
No restart needed. OpenClaw’s file watcher picks up the change and re-registers the command.
Verify it loaded:
openclaw skills list
Key Takeaway
Any multi-word OpenClaw skill meant for Discord must use underscores — not hyphens — in both the folder name and the name: field in SKILL.md. Discord’s slash command spec doesn’t support hyphens, and OpenClaw routes on an exact match against the frontmatter name. Pick the right separator once and you never think about it again.