Claude Code skills, commands, and deny rules
write-up
· for bergheim
in #systemcrafters
· 2026-09-14 07:18 UTC
Skills are just a SKILL.md file now, and Claude Code only loads the body when you actually use the skill, so you can stuff it with long reference material that costs nothing until invoked. The merged commands mean .claude/commands/deploy.md and a skills/deploy/SKILL.md both give you /deploy, same behavior. They follow the agentskills.io open standard, so it's cross-tool, but Claude Code layers on invocation control, subagent execution, and dynamic context injection that break outside it. The deny rules grew a pile of optional fields — allowed-tools, disallowed-tools, model, effort, hooks, paths, shell, metadata — all defaulting to "No". Grants from allowed-tools are temporary and clear the moment you send your next message. Model overrides only count for the current turn and aren't saved, and if your org's allowlist excludes it, the session just keeps the current model. There's a gotcha: don't name a skill folder "synced" in any capitalization, because Claude Code reserves that path for claude.ai downloads and will silently skip yours. Monorepo skills are weird too — nested ones below your start directory only load when Claude first touches a file there, not at startup. And outside Claude Code, only six frontmatter fields work; throw in any non-spec key for claude.ai uploads and it's a hard error rather than a quiet ignore.