---
name: skill-creator
description: Author or sharpen a workspace scheduler skill (a *.skill file) so its body meets the PMOS skill spec and carries the workspace filing contract. Use when the New Skill / AI-draft flow scaffolds a skill, or whenever a scheduler .skill needs its body brought to spec quality.
maturity_mode: active
---

# skill-creator — author a spec-quality workspace scheduler skill

**Situating context:** the workspace's New Skill / ✦ AI-draft flow scaffolds a `*.skill` file, then
(for AI-draft) spawns a local session to sharpen it. This skill is that session's procedure. It exists
because a scheduler skill runs **unattended on a cadence** — a body that is vague or mis-grounded fails
silently, at 2am, into a corrupted queue. The authority for body quality is
[SKILL-FORMAT](/skills/SKILL-FORMAT.md); do not restate its rules here, apply them.

A workspace `.skill` differs from a `skills/core/` skill in one way: it keeps **runtime frontmatter**
the scheduler reads (`label`, `run: agent`, `agent: claude`, `output:` list = the consistency contract).
Those fields are fixed — you author the **body**.

## Procedure

Run in order; each step ends on a checkable done-condition.

1. **Read the spec and the target.** Read `skills/core/SKILL-FORMAT.md` (the quality bar) and the
   scaffolded `.skill` file you are sharpening.
   *Done when:* you can name the skill's `output:` sections and its one-line goal.

2. **Keep the runtime frontmatter exactly.** Do not add, drop, or rename `name`/`label`/`description`/
   `run`/`agent`/`output`. `run` stays `agent`.
   *Done when:* the frontmatter is byte-identical except intentional `description` wording.

3. **Write the body procedure-first.** A `Goal:` line, then numbered steps in run order. Ground every
   step in **this repository's own** files, git, and CLIs — name the exact command or path (`git log`,
   `gh pr view <n> --json title,body`, a file under `planning/`), never an invented tool, never the
   network (D54). Each step ends on a **checkable** `Done when:` — the agent must tell done from
   not-done. A step whose criterion is "produce X" with no way to check X is not done.
   *Done when:* every step has a `Done when:` and every tool/path it names exists in this repo.

4. **Carry the filing contract — the load-bearing step.** A scheduled `agent` skill is **not**
   auto-filed: `fireSchedule`'s agent branch only spawns the session, so the body must file its own
   result. The final step MUST:
   - write the deliverable to `workspace/state/deliverables/<run-id>.md` (pick a unique `<run-id>`,
     e.g. `<skill-name>-<UTC-timestamp>`); and
   - read `workspace/state/needs.json` (missing → `[]`), append exactly
     `{"run_id":"<run-id>","kind":"report","initiative_id":"<skill-name>","question":"<Label> — ready","deliverable":"<run-id>"}`,
     and write the whole array back — it stays a valid JSON array.

   A freehand "note to needs-you" is wrong: the console treats a non-array queue as corrupt and reds it.
   *Done when:* the body writes both the deliverable file and the structured needs object, and emits no
   prose note.

5. **Honor the output contract.** The body's closing section lists the exact `output:` sections, same
   order, same shape every run; an empty section is the literal line "None this period.", never dropped.
   *Done when:* the body's section list equals the frontmatter `output:` list, in order.

6. **Grill the body against the spec, then stop.** Run SKILL-FORMAT conformance items 6–9 over what you
   wrote: predictability (does each line make the *process* more repeatable? cut it if not),
   per-step completion criteria (checkable, not vague), pruning (no no-op/sediment/duplication; a
   guardrail phrased as a positive target, not a prohibition), and one leading word where it earns its
   keep. Fold the fixes in.
   *Done when:* no line fails 6–9. Put **no** self-check or rationale block in the file itself — that
   reasoning belongs in the PR/commit or a Level-3 sub-file, not in the body the agent re-reads every fire.

## Hard rules

- The body is what runs unattended — every claim in it must be executable in this repo with no network.
- Never invent a filing path or schema; step 4's paths and object shape are the contract the console reads.
- Runtime frontmatter is the scheduler's interface — leave it intact.
