peon-ping-create-pack
You are drafting ONE brand-new PeonPing pack from scratch. Work only inside the draft directory you create. Do not touch any other directory, do not install anything, do not commit anything, and never finish by declaring the pack "done" or "installed" — a freshly created pack is never installed directly (see Hard rules).
If invoked without name/flavor/vibe/draft_root
This skill is internal: it is only ever invoked headlessly by peon create
with name, flavor, vibe, and draft_root already filled in. If you were
invoked WITHOUT all four (a human ran this directly with missing arguments),
do nothing except tell them to run peon create instead. Do not touch any
files. Exit.
Procedure
- Parse the invocation:
name(already validated by the caller against^[a-z0-9][a-z0-9_-]*$),flavor(sfxorvoice),vibe(a one-line description),draft_root. - Compute
draft_dir = <draft_root>/<name>. If it already exists, STOP — tell the human a draft with that name already exists and to runpeon eval <name>on it (never overwrite an existing draft). Otherwise createdraft_dir/sounds/. - Author a concept honoring the vibe, covering all 7 CESP categories
with at least one sound each:
session.start,task.acknowledge,task.complete,task.error,input.required,resource.limit,user.spam. This mirrors the concept-authoring discipline of thebrand-to-peon-packsskill's step 2:- Every sound needs a
label— short, caption-quality text describing what's heard (not a filename, not a restatement of the category — e.g. "Soft acknowledgement", "Serene completion", not "task_complete_0"). - Keep the aesthetic consistent across all 7 sounds so the pack reads as
one coherent idea, not seven unrelated clips. Let the
vibestring drive instrument palette / tone / register (e.g. "calm bells" implies soft chimes and bowls throughout, never harsh or percussive). flavor: sfx— wordless. Each sound needs aprompt: a concrete, renderable description for ElevenLabs sound-generation (instrument or texture, character, brief shape — e.g. "two gentle bells, soft decay, warm room tone"). Avoid vague adjectives with nothing to render ("nice sound") — describe what would actually produce the sound.flavor: voice— spoken. Each sound needstext(an in-character line fitting the category and vibe) plus avoice_id(an ElevenLabs voice id). Reuse ONEvoice_idacross all 7 sounds — a pack has one voice, not seven. If no voice was specified in the invocation, pick a stock ElevenLabs voice whose character plausibly fits the vibe; do not invent avoice_idstring — use one you can confirm actually exists (list voices via the ElevenLabs API if unsure).
- Every sound needs a
- Write
draft_dir/openpeon.json— a CESP manifest withcesp_version,name,display_name,version(start at"0.0.1"), a shortdescriptionreflecting the vibe, and"x_openpeon_draft": true(always — a pack authored by this skill is never anything but a draft).categoriesmaps each of the 7 category names to{"sounds": [{"file": "sounds/<category>_<index>.wav", "label": "..."}]}. - Write
draft_dir/prompts.json— the contract thepeon-ping-remixskill reads for rerolls:{"<file>": {"type": "sfx"|"tts", "prompt": "..."}}for sfx sounds, or{"<file>": {"type": "tts", "text": "...", "voice_id": "..."}}for voice sounds. Keys are the samefilepaths used inopenpeon.json(relative todraft_dir, e.g.sounds/session_start_0.wav). - Render every sound. For each entry, write a small job file under
draft_dir/jobs/(e.g.draft_dir/jobs/render-job-<category>_<index>.json— never at the draft root;approveprunes everything underjobs/, so a render input left at the root would ship as junk in the approved pack) shaped as{"type": "sfx"|"tts", "prompt"|"text"+"voice_id", "out": "<absolute path to the WAV>"}, then run:
Passpython3 <peon-ping>/scripts/pack-render.py --job <file>--mockwhen the environment variablePEON_RENDER_MOCK=1is set — this writes a silent placeholder WAV instead of calling ElevenLabs, so the whole draft can be authored and rendered with no network, no API key, and no ffmpeg. This is how automated tests exercise this skill. (Resolve<peon-ping>as the scripts directory next to the running peon install, in the same order thepeon-ping-remixskill uses:$PEON_DIR/scriptswhen set, else${CLAUDE_CONFIG_DIR:-$HOME/.claude}/hooks/peon-ping/scripts, else the repo checkout you were invoked from.) - The renderer exits nonzero on a malformed job, a missing key, or a
silent-after-retry render. If ANY sound fails to render, STOP — print the
renderer's stderr and exit nonzero. Do not leave
openpeon.jsonclaiming sounds exist that never rendered; it is fine to leave the partialdraft_diron disk for the human to inspect or retry — do not delete it. - After every sound renders successfully, print a short summary (pack name,
flavor, category count, sound count) and always end by telling the
human to run:
to listen to and approve the draft. Never claim the pack is finished, ready to use, or installed — creation only ever produces a draft that still has to clear the eval gate.peon eval <name>
Hard rules
- NEVER write outside
draft_dir. - NEVER set
x_openpeon_draftto anything buttrue. - NEVER install the pack, copy it into a packs directory, or otherwise make
it directly usable — that only happens via
peon eval <name>→ approve. - NEVER print or log an ElevenLabs key.
- Honor
PEON_RENDER_MOCK=1by passing--mockto everypack-render.pycall — this is load-bearing for tests and for previewing the flow without spending API credits. - The flow ALWAYS ends by telling the human to run
peon eval <name>— creation never ends with an installed pack.