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 V-Songbird/slag/plugin install jigWrote 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/v-songbird/slag/jig)<a href="https://agentmods.dev/skills/v-songbird/slag/jig"><img src="https://agentmods.dev/badge/skills/v-songbird/slag/jig/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/v-songbird/slag/jig"><img src="https://agentmods.dev/badge/skills/v-songbird/slag/jig.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.00188 | $0.13868 |
| Opus 5 | $0.00094 | $0.06934 |
| Sonnet 5 | $0.00038 | $0.02774 |
| Haiku 4.5 | $0.00019 | $0.01387 |
Grade C, and why
jig scanned grade C with 2 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 3d 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.
Downloads and executes remote codehighSupply chain
curl | sh runs whatever the server returns today, which is not necessarily what it returned when this was reviewed.
| `pipe-to-shell` | `bash-guard` | violation: `curl -sSL https://example.test/install.sh \| sh`; near miss: `curl -sSL https://example.test/install.sh -o install.sh`, fetched and not run | Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
| `pipe-to-shell` | `bash-guard` | violation: `curl -sSL https://example.test/install.sh \| sh`; near miss: `curl -sSL https://example.test/install.sh -o install.sh`, fetched and not run | How it starts
The opening of the file, as written. The whole thing — 979 lines — stays where its author put it; the contents beside it link to each section on GitHub.
jig:jig
The engine does everything mechanical. You run it, read its result, and ask the questions it cannot answer. Never re-derive by hand what a command already computed, and never put to a human a fact the scan already read.
One rule holds for the whole run, and it is the only promise you have to
remember: nothing unapproved. Every path jig writes — a linter config, a
manifest entry, a CI file, a check module, a line in a committed hook — is named
to the user and approved before a byte lands, and every write is journaled with
its pre-image, so revert puts the original back exactly. Tool installs are the
same shape: jig shows the exact command, and runs it only after the user ticks
that tool by name. Say that plainly when the user asks what they just installed.
A check installs proven and blocking. Observe mode is a choice the owner can make per guard, not a probation every guard serves — never describe it as something a guard graduates from.
Flags in $ARGUMENTS: --quick (skip the rounds, pass --quick to scan and
take the selection it computes, plan as assumed), --edition <id> (the user named the language, so
work against that edition rather than detection — the flag a project that does
not exist yet runs on), --select <classId,…> (the user already named the
classes, so skip that question and treat them as elicited), --no-ci (pass
through to plan, which then generates no CI workflow), --observe (every
guard watches rather than blocks). The interview's own answers reach plan
through four more flags, listed at step 6.
Every command runs from the project root and every one of them is node "${CLAUDE_PLUGIN_ROOT}/scripts/jig.js" <scan|toolchain|plan|apply|status|revert|selftest|migrate>
or node "${CLAUDE_PLUGIN_ROOT}/scripts/forensics.js". (admit runs the
fixture-pair test on its own; plan already does it, so this flow never needs
the separate call.) There is no other entry
point and nothing is on PATH. Flags take a space-separated value — --select a,b, never --select=a,b, which the parser reads as a flag named
select=a,b. Every command accepts --root <path>; without it the working
directory is the project.
When .jig/manifest.json already exists, this is a re-run, and there is one
thing to do before anything else. An install made before the rework carries
checks in the old single-function shape, which this engine does not read, so
upgrade it in place first:
node "${CLAUDE_PLUGIN_ROOT}/scripts/jig.js" migrate
already on the pair shape with nothing else on it is the normal answer on a
current install. It is not a problem and it is not worth a sentence — read it
and move on. Any other refusal is real: migrate writes nothing unless the
whole migration can land, and it refuses outright over an artifact somebody
edited by hand. Name the file it reports and stop there.
When the 1.0.1 pass runs, it rewrites every installed check into the violation
and near-miss pair shape, carries each guard's ledger history forward under its
new name, and lands as one journaled transaction that revert undoes like any
other. Every rewritten check faces the same admission test an authored one
faces, so one whose pair does not pass is discarded and reported rather than
quietly carried over. Say which guards were discarded and why.
A check that cannot be proven takes its guards with it, and migrate will not
remove a guard the owner has not seen. It refuses before it writes anything,
naming every guard it would drop with its mode and the reason. Put that list to
the owner as it is — an [armed] row is enforcement they are about to lose —
and only then run migrate --accept-drops. There is nothing to repair first:
the drop is what the pair test decided, and the flag says the list was read.
There is a second pass, and it hands back a plan instead of applying one. An
install made before 2.11.0 watches edits with edit-observe-guard, which denies
at PostToolUse — after the host has written the file. migrate answers such an
install with moving: one change per check, moving each guard to the
edit-guard lever at PreToolUse and re-recording the proof over the rewritten
module, because the proof it carries binds the lever it would no longer run.
Nothing is applied. Show the owner what is moving and apply each change by its
own --change/--path pair, exactly as an install item is applied — the modules
first and the config last, because the one config change carries every moved row
at once: a guard whose module change is left unapproved names PreToolUse with a
module that still declares PostToolUse, warns on every call and guards nothing
until that module lands too. A guard on refused cannot move and keeps running
as it is — say which, and why.
What ships with it
2 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
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.
- 3d ago Changed · +424 lines scan A → C f2ee36a346b5
- 8d ago First seen · 555 lines · 188 tokens per session scan A 96ada64d6fa9
jig is a skill published in the GitHub repository V-Songbird/slag (1 stars, last pushed 4d ago), licensed MIT. It adds 188 tokens to every session and 13,868 once invoked, about $0.0009 per session on Opus 5. A static security scan graded it C with 2 findings (downloads and executes remote code, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
research-engineer
An uncompromising Academic Research Engineer. Operates with absolute scientific rigor, objective criticism, and zero flair. Focuses on theoretical correctness, formal verification, and optimal implementation across any required technology.
tika-eval-compare
Compare extracts from two Tika builds over a corpus to detect regressions in content, encoding, exceptions, and embedded-document handling. Use for "compare before/after extracts", "eval this change against the corpus".
neuron-evaluation-engineer
Create and run AI evaluations with datasets, assertions, and output drivers in Neuron AI. Use this skill whenever the user mentions evaluation, testing AI systems, creating evaluators, dataset-driven testing, assertion-based validation, or wants to measure AI system performance. Also trigger for tasks involving…
jetson-validate-image
Use after jetson-flash-image to run static BSP checks, on-target smoke/regression tests on a flashed DUT, or both. Not for build or flash steps. Triggers: validate bsp, on-target validation.
atmos-validation
Validate Atmos projects, components, arbitrary JSON Schema inputs, EditorConfig, and GitHub Actions; use affected-file selection and native CI annotations.
skill-benchmark
Benchmark AI skill effectiveness by measuring implementation quality against legacy constraints.