jig

jig is a skill for Claude Code from V-Songbird/slag. It costs 188 tokens per session (13,868 once invoked), scanned C, original, MIT.

A guided setup tool for installing reviewed code checks, such as linters, type checkers, tests, continuous integration checks, and project-specific guards.

In plain words
What is it for?
Use it to inspect a project, choose checks, prove them against their test examples, and install approved checks in blocking or observation mode.
Why use it?
It makes each proposed file change and tool installation explicit, requires approval, and records enough information to restore the previous state.

Skill for Claude Code

Written for Claude Code: allowed-tools in frontmatter. Also seen: mentions CLAUDE.md; names the AskUserQuestion tool; mentions Claude Code.

Runs only inside its plugin — its command needs a path that Claude Code sets for a plugin’s own hooks and for nothing else. Install the plugin, not this.

Part of the jig plugin — 3 skills shipped together

Good fit Use it to inspect a project, choose checks, prove them against their test examples, and install approved checks in blocking or observation mode.

Compare 6 skills from other repositories ↓
Install

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.

Claude Code
/plugin marketplace add V-Songbird/slag
Claude Code
/plugin install jig

Made for: Claude Code.

Or install jig, the plugin that ships this one along with the rest of its 3 skills.

Wrote 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.

agentmods badge for jig

README.md
[![agentmods](https://agentmods.dev/badge/skills/v-songbird/slag/jig/github.svg)](https://agentmods.dev/skills/v-songbird/slag/jig)
Your own site
<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.

agentmods 80×15 button for jig

Your own site · 80×15
<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>
Per session 188 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 13,868 The whole file, excluding the scripts and references it only reads on demand.
Security scan C 2 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce 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

Measured 3d ago against content hash f2ee36a346b5, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-08, from the pricing page.

Security

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 |
jig/skills/jig/SKILL.md · 979 lines

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.

Read the full file on GitHub · 979 lines

Files

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.

Changes

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.

  1. 3d ago Changed · +424 lines scan A → C f2ee36a346b5
  2. 8d ago First seen · 555 lines · 188 tokens per session scan A 96ada64d6fa9

Subscribe to this mod's changes

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.

Related

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.

davila7/claude-code-templates · 43 tokens

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".

apache/tika · 50 tokens

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…

neuron-core/neuron-ai · 77 tokens

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.

NVIDIA/skills · 50 tokens

atmos-validation

Validate Atmos projects, components, arbitrary JSON Schema inputs, EditorConfig, and GitHub Actions; use affected-file selection and native CI annotations.

cloudposse/atmos · 31 tokens

skill-benchmark

Benchmark AI skill effectiveness by measuring implementation quality against legacy constraints.

HoangNguyen0403/agent-skills-standard · 16 tokens