Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Internal — invoked headlessly by `peon create`; humans should run `peon create` instead. Author and render a brand-new PeonPing draft pack — invoked headlessly as: "Use the peon-ping-create-pack skill to draft a pack: name=<n> flavor=<f> vibe=<v> draft_root=<dir>. Follow the skill exactly." Authors all 7 CESP categories honoring the vibe, writes openpeon.json (draft-stamped) and prompts.json, renders every sound via scripts/pack-render.py, and always ends by telling the human to run `peon eval <
.claude/skills/peonping-peon-ping-create-pack/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 66% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 51% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 148% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 22% | 0% |
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).
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.
name (already validated by the caller against^[a-z0-9][a-z0-9_-]*$), flavor (sfx or voice), vibe (a one-line description), draft_root.
draft_dir = <draft_root>/<name>. If it already exists, STOP —tell the human a draft with that name already exists and to run peon eval <name> on it (never overwrite an existing draft). Otherwise create draft_dir/sounds/.
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 the brand-to-peon-packs skill's step 2:
label — short, caption-quality text describingwhat's heard (not a filename, not a restatement of the category — e.g. "Soft acknowledgement", "Serene completion", not "task_complete_0").
one coherent idea, not seven unrelated clips. Let the vibe string 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 a prompt: 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 needs text (an in-characterline fitting the category and vibe) plus a voice_id (an ElevenLabs voice id). Reuse ONE voice_id across 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 a voice_id string — use one you can confirm actually exists (list voices via the ElevenLabs API if unsure).
draft_dir/openpeon.json — a CESP manifest with cesp_version,name, display_name, version (start at "0.0.1"), a short description reflecting the vibe, and "x_openpeon_draft": true (always — a pack authored by this skill is never anything but a draft). categories maps each of the 7 category names to {"sounds": [{"file": "sounds/<category>_<index>.wav", "label": "..."}]}.
draft_dir/prompts.json — the contract the peon-ping-remix skillreads for rerolls: {"<file>": {"type": "sfx"|"tts", "prompt": "..."}} for sfx sounds, or {"<file>": {"type": "tts", "text": "...", "voice_id": "..."}} for voice sounds. Keys are the same file paths used in openpeon.json (relative to draft_dir, e.g. sounds/session_start_0.wav).
draft_dir/jobs/ (e.g. draft_dir/jobs/render-job-<category>_<index>.json — never at the draft root; approve prunes everything under jobs/, 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: python3 <peon-ping>/scripts/pack-render.py --job <file> Pass --mock when the environment variable PEON_RENDER_MOCK=1 is 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 the peon-ping-remix skill uses: $PEON_DIR/scripts when set, else ${CLAUDE_CONFIG_DIR:-$HOME/.claude}/hooks/peon-ping/scripts, else the repo checkout you were invoked from.)
silent-after-retry render. If ANY sound fails to render, STOP — print the renderer's stderr and exit nonzero. Do not leave openpeon.json claiming sounds exist that never rendered; it is fine to leave the partial draft_dir on disk for the human to inspect or retry — do not delete it.
flavor, category count, sound count) and always end by telling the human to run: peon eval <name> 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.
draft_dir.x_openpeon_draft to anything but true.it directly usable — that only happens via peon eval <name> → approve.
PEON_RENDER_MOCK=1 by passing --mock to every pack-render.pycall — this is load-bearing for tests and for previewing the flow without spending API credits.
peon eval <name> —creation never ends with an installed pack.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 5,739 | 21,141 | +268% | 1 | 1 | 0% | 362 | 2,620 | +624% | 0 | 0 | — |
case-02 | fail→fail | 28,626 | 6,455 | -77% | 1 | 1 | 0% | 5,641 | 2,165 | -62% | 0 | 0 | — |
case-03 | fail→fail | 5,641 | 8,099 | +44% | 1 | 1 | 0% | 290 | 2,406 | +730% | 0 | 0 | — |
case-04 | fail→pass | 10,452 | 5,572 | -47% | 1 | 1 | 0% | 1,628 | 2,710 | +66% | 0 | 0 | — |
case-05 | pass→fail | 9,058 | 4,779 | -47% | 1 | 1 | 0% | 1,545 | 2,619 | +70% | 0 | 0 | — |
case-06 | fail→fail | 11,448 | 3,132 | -73% | 1 | 1 | 0% | 1,990 | 2,283 | +15% | 0 | 0 | — |
case-07 | fail→pass | 9,612 | 2,826 | -71% | 1 | 1 | 0% | 1,609 | 2,162 | +34% | 0 | 0 | — |
case-08 | fail→pass | 7,588 | 2,376 | -69% | 1 | 1 | 0% | 1,402 | 2,116 | +51% | 0 | 0 | — |
case-09 | fail→pass | 4,639 | 2,296 | -51% | 1 | 1 | 0% | 879 | 2,182 | +148% | 0 | 0 | — |
case-10 | fail→pass | 9,240 | 2,797 | -70% | 1 | 1 | 0% | 1,830 | 2,224 | +22% | 0 | 0 | — |
case-11 | pass→pass | 13,878 | 4,853 | -65% | 1 | 1 | 0% | 2,493 | 2,624 | +5% | 0 | 0 | — |
case-12 | pass→pass | 12,378 | 6,705 | -46% | 1 | 1 | 0% | 1,922 | 2,811 | +46% | 0 | 0 | — |
case-13 | pass→pass | 7,988 | 3,745 | -53% | 1 | 1 | 0% | 1,578 | 2,514 | +59% | 0 | 0 | — |
case-14 | fail→pass | 8,411 | 3,704 | -56% | 1 | 1 | 0% | 1,555 | 2,416 | +55% | 0 | 0 | — |
case-15 | fail→pass | 8,808 | 2,444 | -72% | 1 | 1 | 0% | 1,301 | 2,167 | +67% | 0 | 0 | — |
case-16 | fail→pass | 10,496 | 3,758 | -64% | 1 | 1 | 0% | 1,777 | 2,468 | +39% | 0 | 0 | — |
case-17 | fail→pass | 14,915 | 3,231 | -78% | 1 | 1 | 0% | 2,658 | 2,293 | -14% | 0 | 0 | — |
case-18 | fail→fail | 14,150 | 2,149 | -85% | 1 | 1 | 0% | 2,626 | 2,137 | -19% | 0 | 0 | — |
case-19 | fail→pass | 5,735 | 5,687 | -1% | 1 | 1 | 0% | 870 | 2,779 | +219% | 0 | 0 | — |
case-20 | pass→pass | 10,339 | 5,183 | -50% | 1 | 1 | 0% | 1,846 | 2,670 | +45% | 0 | 0 | — |
case-21 | pass→pass | 9,642 | 5,903 | -39% | 1 | 1 | 0% | 1,890 | 2,899 | +53% | 0 | 0 | — |
case-22 | fail→pass | 9,413 | 3,457 | -63% | 1 | 1 | 0% | 1,587 | 2,306 | +45% | 0 | 0 | — |
case-23 | pass→pass | 6,938 | 2,737 | -61% | 1 | 1 | 0% | 1,056 | 2,050 | +94% | 0 | 0 | — |
case-24 | pass→pass | 7,047 | 2,485 | -65% | 1 | 1 | 0% | 965 | 2,155 | +123% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted, and 21 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +42 percentage points is the difference between those two pass rates over the 21 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.