← Files i-have-headacheARCHIVED FILE

.ai/decisions/ADR-0005-no-skills-directory.md

2.29 KB · Oct 2, 2026 · 00:34 UTC

↓ Download file

# ADR-0005 — Exactly one skill, named identically to the command

*Amended 2026-09-19 by [ADR-0006](ADR-0006-always-on-one-source.md): the skill is now the only copy and the command; `commands/` is gone.*

*Status: accepted — 2026-09-13. Supersedes the original ban on `skills/`.*

## Context

A `sync-command-bodies` skill was added first and immediately produced a second
palette entry, `/i-have-headache:sync-command-bodies`, violating
[ADR-0002](ADR-0002-one-command-only.md). It was deleted, and this ADR
originally banned `skills/` outright.

That ban then failed OpenAI submission:

```
Plugin has no valid skills
Add or fix at least one skill at `skills/<skill>/SKILL.md`
```

So the constraint is two-sided: OpenAI requires at least one skill, and the
product requires exactly one user-facing name.

## Options

**A. Keep the ban, skip OpenAI.** Cost: no ChatGPT/Codex distribution. The
platform is a target, so this is not viable.

**B. Add a differently-named skill.** Whatever it is called becomes a second
palette entry. This is exactly what already broke once.

**C. One skill, named `i-have-headache`** — the same name as the command,
carrying the same body. Satisfies OpenAI's minimum. Because the name matches,
the palette shows a single entry.

## Decision

Option C. `skills/i-have-headache/SKILL.md` exists and is the **only** permitted
skill.

The original rule was right about the danger and wrong about the mechanism. The
invariant is not "no skills" — it is **one user-facing name**. A skill sharing
that name adds no entry; any other name adds one.

## Consequences

Good: OpenAI submission passes and the palette still shows one name.

Bad: a third file now carries the command body. Sync burden grows from two files
to three. Covered by
[.ai/technical-logic.md](../technical-logic.md).

Bad: `skills/` existing invites a second skill, which is the original failure. A
second skill directory is forbidden — the checklist in the sync procedure
asserts one entry.

Bad: the name collision between command and skill is load-bearing but invisible.
Renaming either one silently produces two palette entries.

## Revisit when

OpenAI drops the minimum-one-skill requirement, or a platform starts listing
same-named commands and skills as two entries. Verify the palette after any
change here — do not assume.

SHA-256: 6110642e5fb2a93be715f461b913f30b7235be72851551b2387ba47fb4d5bdce