setup

A guided first-time setup for Ballast, a rule-based hook that needs a rule catalogue before it can react to events.

In plain words
What is it for?
Use it to check the required Node.js setup, create an initial rule catalogue through conversation, and demonstrate that a rule fires.
Why use it?
It verifies that the installation is working before asking you to create rules, reducing the risk of configuring a system that is silently inactive.

Skill for Claude CodeCodex

Part of the ballast plugin — 16 skills, 4 hooks shipped together

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/svy04/ballast/setup
Any agent
npx skills add svy04/ballast --skill setup
Clone the repo
git clone --depth 1 https://github.com/svy04/ballast

Made for: Claude Code, Codex.

Or install ballast, the plugin that ships this one along with the rest of its 16 skills, 4 hooks.

Per session 61 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 885 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
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 $0.00061 $0.00885
Opus 5 $0.00030 $0.00443
Sonnet 5 $0.00012 $0.00177
Haiku 4.5 $0.00006 $0.00089

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

Security

Grade A, and why

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

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.

skills/setup/SKILL.md · 32 lines

How it starts

The opening of the file, as written. The whole thing — 32 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Setup — from installed to armed, four questions or fewer

Installing ballast puts the hook in place; it does nothing until a rule catalog exists. This skill walks a user — including one who has never edited a JSON file — from "installed" to "my first rules fired in front of me". You do all the file work; the user only answers questions and watches the proof.

Two principles, taken from setups that work: never ask a question whose answer is always yes, and never claim something works — show it firing.

Steps

  1. Prove the hook is alive before building anything (no question). Run node --version (the hook needs ≥ 18) and the status line: node "$CLAUDE_PLUGIN_ROOT/hooks/scripts/ballast-rules.mjs" --status (when CLAUDE_PLUGIN_ROOT is not set, find the install path via claude plugin list, or use the repo checkout). If node is missing or the line does not appear, stop here and hand the user the doctor skill — a catalog written on top of a dead hook is the worst outcome ballast has: silence that looks like working.
  2. Detect a returning user (at most one question). If .claude/ballast.rules.json already exists (project or ~/.claude/), this is not first-time setup — offer three paths and follow the answer: add a rule (pin skill), check health (doctor skill), or start over.
  3. Confirm chat language (one question, confirmation only). Keywords are literal text — a rule keyed only in English never fires on a Korean sentence. Detect the language(s) the user has been typing and confirm: "You write in Korean and English — should rules listen for both?" Pair every keyword list in the confirmed languages from here on.
  4. Pick starter rules (one question). Present the example catalog's rules as a multi-choice list in plain words — label plus one-line reason, no ids, no JSON. For example: "Estimate before spending — anything that costs credits waits for your approval first." Let them pick any number, including none.
  5. Set the danger level (one question). "Dangerous commands (mass delete, force push): warn about them, or block them outright?" If they choose block, show the honesty line that ships with the example: it stops the prompt, it is not a sandbox.
  6. Write the files and fire a live proof (no question). Create .claude/ballast.rules.json with the chosen rules, keywords paired in the confirmed languages, wrapped as {"version": 1, "rules": [...]}. Show the file list you created. Then have the user send (or send yourself) a test sentence containing a trigger word, and point at the [ballast] block that arrives: that is the mechanism, live. No restart is needed.
  7. Leave one habit and two doors (no question). The habit: "When I get something wrong, correct me in plain words — a correction can become a permanent rule (I'll draft it, you approve; that's the pin skill)." The doors: brain-init if they want memory files for decisions and facts; doctor if anything ever feels off.

Read the full file on GitHub · 32 lines

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 First seen · 32 lines · 61 tokens per session scan A b902d9955652

Subscribe to this mod's changes

setup is a skill published in the GitHub repository svy04/ballast (71 stars, last pushed 8d ago), licensed MIT. It adds 61 tokens to every session and 885 once invoked, about $0.0003 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.