← 2.1.0 Primitive tested · runtime-test

Skills visible by default

Recently used skills surface first in the slash menu.

Skills placed in .claude/skills/ directories surface automatically in the slash command menu, without requiring explicit configuration.

How It Works

Claude Code treats skills as user-invocable (discoverable in the slash menu) by default. When you place a skill definition in .claude/skills/, the runtime exposes it as a slash command unless you explicitly opt out.

To hide a skill from the menu, add user-invocable: false to the skill's frontmatter:

---
user-invocable: false
---

Without this marker, the skill is automatically discoverable.

What the Test Found

In January 2026, a runtime test verified this behaviour by requesting Claude list available slash commands starting with "test". All eight test skills in .claude/skills/ appeared in the slash menu:

  • test-custom-agent
  • test-bad-agent
  • test-language
  • test-agent-tools
  • test-hooks
  • test-agent-field
  • test-fork
  • test-yaml-tools

The test confirmed that default visibility removes friction for skill discovery. Users need not mark every skill user-invocable: true; the runtime assumes skills belong in the menu unless flagged otherwise.

Why It Matters

This inversion of the discovery burden matters for iteration speed. Developers author skills, place them in the project, and they immediately appear in the assistant's command palette. The opt-out approach scales: most skills are meant to be invoked; a minority (internal, experimental, or deprecated) require explicit hiding.

The pattern trades a global allowlist for a surgical blocklist, reducing boilerplate and lowering the barrier to skill publication within a session or project.

Caveat

Skills discoverable does not imply skills available across all Claude Code instances or users. Discovery scope is local to the session or project; .claude/skills/ is a project-level mechanism, not a global registry.

Evidence & receipt
◇ ed25519 receipt
idprimitive_c9eb121ab862a6e373ecbe84
alged25519
pubkey9b87705613b1e2fd064d57fa75a6b679d2856ceafad6b1daa8f982493871b6dd
sig068e36d68ca74d54c49a1289cc51ae5d71dab756c9c215f7dbe7b665217ec9c57d6f4fd6b678156cc75ed61cf5b20d71d5f553c6a67140935d8f29e032774e07

Signed with an ed25519 key held off the repo. Anyone can verify against the published public key; nobody without the secret key can forge it. Click verify: it recomputes the signature in your browser. The signature proves integrity and authorship of this exact content — not a third-party timestamp or that the underlying claim is objectively true. signedAt is when the @f3/attest pipeline ran, not when the work happened; the evidence refs carry the source dates.

Connected