ironlint
Interprets ironlint PreToolUse hook output after Edit/Write -- fixes the blocked edits it reports.
Install
npx skills add https://github.com/ironlint/ironlint/tree/main/adapters/claude-code/skills/ironlint
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install ironlint-ironlint@llmmart
git clone https://github.com/ironlint/ironlint.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole ironlint/ironlint collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Agentic Lint
Interpret and act on ironlint PreToolUse hook output. Not user-invocable.
When blocked (hook exited 2)
The tool-result stderr is a Verdict JSON whose status is block. A check is a
shell command; it blocked because it exited nonzero (1–125). The adapter uses
hook exit 2 to reject the tool call. Shape:
{
"schema_version": 6,
"status": "block",
"blocks": [
{"check": "no-debug", "step": null, "file": "src/foo.rs", "message": "src/foo.rs:42: DEBUG marker"}
],
"errors": [],
"passed": ["no-todo"]
}
Each entry in blocks is one check that rejected the edit:
check— the check id that blocked (defined in.ironlint.yml).file— the file it checked.message— the check's own combined output, verbatim. This is your instruction for what to fix; if the check emits line numbers (e.g. agrep -nor a linter), they're in here.
Fix every entry in blocks in the named file before any other tool call. The
hook re-fires on the next Edit and re-checks. Repeat until blocks is empty.
passed
passed lists the check ids that ran and passed for this file. Their concerns are
already satisfied — don't re-investigate them.
errors
errors lists checks that couldn't run (not found, timed out, or killed) — each
is {check, file, reason}, not a policy violation. By default the hook fails open
on these (the edit is allowed and nothing reaches you); you'll only see an error
note when the project set IRONLINT_FAIL_CLOSED_ON_INTERNAL=1. A check that couldn't
run is a broken check, not a finding — surface it, don't try to satisfy it.
Files (ironlint)
-
SKILL.md 1.9 KB
--- name: ironlint description: Interprets ironlint PreToolUse hook output after Edit/Write -- fixes the blocked edits it reports. metadata: author: dynamik-dev version: 2.1.0 category: workflow-automation tags: [linting, hooks, code-quality, pre-tool-use] --- # Agentic Lint Interpret and act on ironlint PreToolUse hook output. Not user-invocable. ## When blocked (hook exited 2) The tool-result stderr is a `Verdict` JSON whose `status` is `block`. A check is a shell command; it blocked because it exited nonzero (`1`–`125`). The adapter uses hook exit `2` to reject the tool call. Shape: ```json { "schema_version": 6, "status": "block", "blocks": [ {"check": "no-debug", "step": null, "file": "src/foo.rs", "message": "src/foo.rs:42: DEBUG marker"} ], "errors": [], "passed": ["no-todo"] } ``` Each entry in `blocks` is one check that rejected the edit: - `check` — the check id that blocked (defined in `.ironlint.yml`). - `file` — the file it checked. - `message` — the check's own combined output, verbatim. This is your instruction for what to fix; if the check emits line numbers (e.g. a `grep -n` or a linter), they're in here. Fix every entry in `blocks` in the named file before any other tool call. The hook re-fires on the next Edit and re-checks. Repeat until `blocks` is empty. ## passed `passed` lists the check ids that ran and passed for this file. Their concerns are already satisfied — don't re-investigate them. ## errors `errors` lists checks that *couldn't run* (not found, timed out, or killed) — each is `{check, file, reason}`, not a policy violation. By default the hook fails open on these (the edit is allowed and nothing reaches you); you'll only see an error note when the project set `IRONLINT_FAIL_CLOSED_ON_INTERNAL=1`. A check that couldn't run is a broken check, not a finding — surface it, don't try to satisfy it.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.