Skip to content

Getting started

This tutorial takes you from a freshly installed agent-rigger to a working rig in about ten minutes. You will point the tool at a public example catalog, see what it offers, install a small bundle, and confirm the result — without touching your real setup.

You need agent-rigger installed and git on your machine.

Terminal recording of the whole getting-started tutorial run end to end in a disposable sandbox. First, rigger doctor lists four dependencies — git, glab, gitleaks, trivy — each with a check mark, then the line “mode : full scan” and a healthy, empty installed state. Next, rigger catalog add example https://github.com/agent-rigger/agent-rigger-catalog-example.git registers the public example catalog and prints the confirmation “example” added. rigger ls then lists the catalog’s seven entries, each tagged [available] and qualified with the example/ name: a skill, an agent, a guardrail, a hook, a context, and two packs. rigger install example/pack:demo --yes --summary installs the demo pack — a compact Plan of two changes, the hello-rigger skill and the demo sub-agent, each linked into the store, followed by a Result reading “[ok] Applied 2 file(s).” Finally, rigger check reports the example catalog up-to-date at v0.4.0. Nothing touches the operator’s real home directory.

The whole tutorial in a single run: read the environment, register the example catalog, list what it offers, install example/pack:demo, and audit the result — all under a throwaway RIGGER_HOME. The film uses the compact --summary plan; the step-by-step blocks below are the reference, and the film only illustrates them. Generated from docs/tapes/getting-started.tape, 2026-07-18. Regenerate: bun run build && vhs docs/tapes/getting-started.tape.

Everything here runs against a throwaway home directory, so nothing lands in your real ~/.claude or ~/.config. The RIGGER_HOME environment variable overrides the home directory the tool uses for every user-scope path — set it to a fresh temporary directory:

Terminal window
export RIGGER_HOME="$(mktemp -d)"

Every command below reads and writes only under that directory. When you are done, one rm -rf erases the whole experiment. Leave RIGGER_HOME unset in real use, and rigger writes to your actual home directory.

The shown outputs use NO_COLOR=1 for readable copy-paste; on a real terminal the tool adds colour. The absolute paths in the output reflect whatever RIGGER_HOME resolved to. Yours will differ.

Start by asking doctor what it sees. It reports the external tools rigger relies on and which scan mode you are in, then checks the installed state (empty so far):

Terminal window
rigger doctor
--- rigger doctor ---
✓ git (/opt/homebrew/bin/git)
✓ glab (/opt/homebrew/bin/glab)
✓ gitleaks (/opt/homebrew/bin/gitleaks)
✓ trivy (/opt/homebrew/bin/trivy)
mode : full scan
Installed state is healthy — no findings.

mode : full scan means gitleaks or trivy is present, so fetched content will be scanned. If both are missing you would see warn-only here instead: the install still works, but content is not scanned. Nothing is installed yet, so the state is healthy.

Register the public example catalog under a local name, example. A remote git URL works as a source (a local path does too):

Terminal window
rigger catalog add example https://github.com/agent-rigger/agent-rigger-catalog-example.git
catalog "example" added (https://github.com/agent-rigger/agent-rigger-catalog-example.git)

The source is now recorded in your config. Confirm it with rigger catalog ls, which lists each configured catalog as name url.

List the catalog’s entries:

Terminal window
rigger ls
Catalog (7 entries):
[available] example/skill:hello-rigger skill
[available] example/agent:demo agent
[available] example/guardrail:demo guardrail
[available] example/hook:demo hook
[available] example/context:demo context
[available] example/pack:demo pack (2 members)
[available] example/pack:full pack (5 members)

Each id is qualified with its catalog name — example/skill:hello-rigger — so ids stay unambiguous when you configure several catalogs. Every row is [available]; none is installed yet. The two packs bundle several artifacts under one id. (The example catalog also declares a tool:git entry; advisory tool entries are not shown in this listing — see the CLI reference.)

Install example/pack:demo, which bundles the hello-rigger skill and the demo sub-agent. Passing --yes accepts the plan without an interactive prompt:

Terminal window
rigger install example/pack:demo --yes
--- Plan ---
Plan · 2 changes · scope: user (~/.claude)
+ example/skill:hello-rigger ~/.claude/skills/hello-rigger
link ~/.claude/skills/hello-rigger → store
+ example/agent:demo ~/.claude/agents/demo.md
link ~/.claude/agents/demo.md → store
Σ 2 links
--- Result ---
[ok] Applied 2 file(s).
+ /tmp/tmp.rig8f2/.claude/skills/hello-rigger
+ /tmp/tmp.rig8f2/.claude/agents/demo.md

The Plan block is the dry-run: the exact changes rigger will make, shown before it makes them. Here both artifacts install as a symlink pointing at a managed store — one physical copy the assistant reaches through the link. Because you passed --yes, rigger applied the plan straight away; without it, it would pause and ask before writing. The Result block lists the files it actually wrote.

Run check to confirm everything is correctly in place:

Terminal window
rigger check
--- Catalogs ---
[up-to-date] example (v0.4.0)

check returns exit code 0 when everything it audits is present and matching. The pack installed only a skill and a sub-agent — neither of which check re-audits in detail — so the report shows just the catalog status: example resolved to version v0.4.0 and your install is up to date. A missing or drifted artifact would instead return exit 3.

Look at what rigger actually placed under your sandbox:

Terminal window
find "$RIGGER_HOME" -type f -o -type l | sort
.../.claude/agents/demo.md
.../.claude/skills/hello-rigger
.../.config/agent-rigger/agents/demo.md
.../.config/agent-rigger/config.json
.../.config/agent-rigger/skills/hello-rigger/SKILL.md
.../.config/agent-rigger/state.json

Three kinds of thing are here. Under .config/agent-rigger/skills/ and .config/agent-rigger/agents/ is the store: the single real copy of each installed artifact. Under .claude/ are the symlinks the assistant follows to reach that copy. And state.json is the manifest: rigger’s record of what is installed here, at which version, and exactly what each install wrote: the same record check audits against and remove replays in reverse.

You ran everything non-interactively. Run rigger install with no ids and, in a real terminal, rigger asks which scope to use and shows a checkable list instead:

Select installation scope:
Select artifacts to install / update (Space on a group header toggles the whole group):

The first-run wizard, rigger init, is interactive too. It asks for your team’s catalog and how to authenticate against it:

Enter the catalog repository URL:
Select authentication method:

These prompts cannot run in a script; use catalog add and install <id> --yes, as this tutorial did, for non-interactive setups.

Erase the whole sandbox:

Terminal window
rm -rf "$RIGGER_HOME"
unset RIGGER_HOME