Menu Getting started

Start

Getting started

Install indra for Claude Code, Gemini CLI, Codex or opencode, and run your first review.

Install

The harness ships for several agents. Full packaging details and the release checklist are in docs/DISTRIBUTION.md.

Claude Code - add this repo as a plugin marketplace and install the plugin:

/plugin marketplace add dmdhrumilmistry/indra
/plugin install indra@indra

/plugin marketplace add accepts any of: a GitHub owner/repo (as above), a full git URL (https://github.com/dmdhrumilmistry/indra.git), or a local path to a clone (e.g. /plugin marketplace add ./indra from the directory containing your checkout). Then run /plugin install indra@indra and reload when prompted.

Gemini CLI - a native extension, manifest at the repo root:

gemini extensions install https://github.com/dmdhrumilmistry/indra

opencode, Codex, or any agentskills.io agent - copy the skills into a discovery directory. Codex additionally picks up AGENTS.md on its own:

git clone https://github.com/dmdhrumilmistry/indra
cd indra
indra skills install --to agents       # ~/.agents/skills
indra skills install --to opencode     # ~/.config/opencode/skills
# without indra: mkdir -p ~/.agents/skills && cp -R skills/* ~/.agents/skills/

Graft is installed and set up automatically by the pipeline. Stage 0 runs `npm install -g @nanonets/graftif it's missing (requires Node/npm), thengraft init <target> --no-agents --no-global` to register the Graft MCP server and freshness hooks for the target repo. The graph itself (<target>/graft/, auto-gitignored) is built during recon. To pre-install manually: npm install -g @nanonets/graft. Graft's structural build is free and needs no API key; the optional --deep LLM pass uses GRAFT_API_KEY / GRAFT_PROVIDER / GRAFT_MODEL when set.

The other tools are also auto-installed by Stage 0 when missing (via whatever package manager is on the machine - winget/choco/scoop, brew, apt, npm/pip/go - see references/tooling-setup.md). Installs are announced, prefer no-elevation methods, and never block the run: anything that can't be installed is simply marked unavailable and the pipeline falls back. Stage 0 installs only what fills a missing capability group:

All of them are optional - the pipeline degrades gracefully to native search + manifest parsing if none install.

Usage

Ask /indra in plain language:

/indra full security review of ./api
/indra find SQLi and IDOR in src/
/indra just map this codebase        # recon only

Or call the pipeline directly:

/sh-security-review . classes:sqli,access-control,ssrf depth:deep
/sh-security-review . stage:report       # regenerate reports for the latest run

Model & cost control

Each stage runs on a model matched to its cognitive load, so tokens are spent where discovery quality actually depends on them and saved on mechanical work. This is the default - no arguments needed.

StageDefault model
reconsonnet
hunt (per class)haiku for pattern classes (secrets, crypto, open-redirect, csrf) · sonnet for source→sink tracing (sqli, xss, ssrf, injection, path-traversal, xxe, file-upload, auth) · opus for deep-logic classes (access-control, race-conditions, deserialization)
chainopus
verifyopus (the precision gate - kept strong)
reporthaiku

Override with the models: argument (passed through the router too):

/sh-security-review .                         # default tiered map above
/sh-security-review . models:max              # every stage + hunter on opus (max quality, max cost)
/sh-security-review . models:cheap            # aggressive downshift (trades some verify precision)
/sh-security-review . models:verify=opus,hunt=sonnet          # per-stage overrides
/sh-security-review . models:report=sonnet,hunt.pattern=sonnet  # per-hunter-tier override

Stages: setup, recon, hunt, chain, verify, report. Models: opus, sonnet, haiku, inherit. For hunt, a bare model flattens all hunters to it; hunt.pattern / hunt.trace / hunt.logic target one tier. Other token savers are built in: recon only spawns hunters for classes with real attack surface, hunters query the Graft graph instead of reading whole files, and findings.json/SARIF are generated by a deterministic script rather than the model.

Output

Everything lands under <target>/.security-harness/<run-id>/:

Each published finding carries a payload, a PoC, the verification verdict, CWE/OWASP ids, CVSS, and a code-level mitigation.