Getting it into your agent
This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.
/plugin marketplace add dougcalobrisi/erm/plugin install ermWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/dougcalobrisi/erm/erm-tune)<a href="https://agentmods.dev/skills/dougcalobrisi/erm/erm-tune"><img src="https://agentmods.dev/badge/skills/dougcalobrisi/erm/erm-tune/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/dougcalobrisi/erm/erm-tune"><img src="https://agentmods.dev/badge/skills/dougcalobrisi/erm/erm-tune.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00100 | $0.01068 |
| Opus 5 | $0.00050 | $0.00534 |
| Sonnet 5 | $0.00020 | $0.00214 |
| Haiku 4.5 | $0.00010 | $0.00107 |
Grade A, and why
erm-tune scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 82 lines — stays where its author put it; the contents beside it link to each section on GitHub.
erm — tune and troubleshoot
erm exposes ~30 flags that cluster into five knob groups. Tune by symptom,
change one cluster at a time, and re-check with --dry-run + validate.
Launcher convention. This skill assumes erm is already runnable (set up by the
erm skill). In the commands below, erm means that launcher: uvx erm … if you
ran it via uv, or plain erm … after activating the venv where it's installed.
Resolving documentation
Resolve detail in this order (broadest compatibility last):
erm --help— definitive flag names, defaults, and units.- Public docs: https://doug.sh/docs/erm/ —
troubleshooting,detection,render-pipeline,denoise-and-room-tone. - Bundled docs (Claude plugin only):
${CLAUDE_PLUGIN_ROOT}/docs/*.md; flag defaults in${CLAUDE_PLUGIN_ROOT}/src/erm/cli.py.
Never guess values — read one of the above before recommending a setting.
1. Diagnose first — ask what's wrong
Use AskUserQuestion to pin the symptom (each maps to a different cluster), unless the user already described it:
- Fillers still audible / missed → detection
- A specific word should also be cut, or a default word is over-matching →
detection word list (
--add-fillers/--remove-fillers) - Real words clipped or chopped → detection (too aggressive) / refinement
- Splices click, pop, or sound smeared/blurry → crossfade / refinement
- Noise floor pumps, audible level changes at edits → denoise / room tone
- Words run together with no breath → splice spacing
- Too slow → detection (
--model/--device)
Then read the troubleshooting doc for the symptom→knob fix.
2. The five knob clusters
Read the linked doc page for good-value ranges before changing anything.
- Detection aggressiveness (what gets cut) —
--model(biggest lever),--detect-gaps,--confirm-pitch,--gap-min-ms,--gap-min-voiced-ms,--gap-max-voiced-ms,--intraword-min-ms,--fillers. →detectiondoc.- Word list (pass 1):
--add-fillers "word,word"adds words on top of the defaults;--remove-fillers "word"drops a default that over-matches (removal wins). Prefer these over--fillers, which replaces the whole set.
- Word list (pass 1):
- Refinement / merge (clean splice points) —
--search-ms,--merge-gap-ms. →render-pipelinedoc. - Splice spacing (remove mode breathing room) —
--pad-pause-factor,--pad-min-ms,--pad-max-ms,--min-gap-ms. →render-pipelinedoc. - Crossfade (splice smoothness) —
--crossfade-factor,--min-crossfade-ms,--max-crossfade-ms,--crossfade-ms. →render-pipelinedoc. - Denoise / room tone (uniform floor) —
--denoise none|pre|post|hybrid,--denoise-nr,--denoise-nf,--room-tone/--no-room-tone,--room-tone-level-db,--room-tone-source. →denoise-and-room-tonedoc.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 10d ago First seen · 82 lines · 100 tokens per session scan A c335de79cac2
erm-tune is a skill published in the GitHub repository dougcalobrisi/erm (112 stars, last pushed 17d ago), licensed MIT. It adds 100 tokens to every session and 1,068 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
embedded-captions
A workflow for adding captions or subtitles to an existing single-person talking-head video without changing the footage. Captions can appear as ordinary subtitles, behind the speaker, or as stylized visual effects.
pr-to-video
Turn a GitHub pull request (a PR URL, owner/repo#N, or 'this PR' in a checked-out repo) into a code-change explainer video — changelog, feature reveal, fix, or refactor walkthrough built from the diff, commits, and files: the input is a code change, not a website. Not a product promo (/product-launch-video) or a no-PR…
slideshow
Author a HyperFrames slideshow — a presentation, pitch deck, or interactive deck with discrete slides, fragment reveals, branching, hotspot navigation, and built-in presenter mode with speaker notes; also converts an existing page into a deck. Output is a navigable deck, not a rendered MP4. If the user didn't…
faceless-explainer
Turn arbitrary text — an article, notes, a topic, a brief — into a faceless explainer video: there is no site or footage to capture, so the visuals are invented per scene (typography, abstract graphics, diagrams, data-viz). Use for topic explainers, concept breakdowns, how-tos, listicles. Not a video built from a…
figma
Import Figma content into a HyperFrames composition — rendered assets, brand tokens, components, storyboard sections → reconstructed motion (frames read as states, not slides) (REST/CLI), connector-assisted motion when available, and shaders from a connector or native export. Use when the user pastes a figma.com link…
general-video
Author or edit a custom HyperFrames composition when no specialized workflow fits, or when BRIEF.md sets flow: companion. Use for longer or multi-scene pieces, brand and sizzle reels, montages, static loops, static title cards, footage remixes, and freeform builds. Use motion-graphics instead for a short unnarrated…