Install RedMirror Reflection, activate your licence, and point your coding agent at it. About five minutes.
redmirror-reflect mcp); your coding agent connects to it and drives the verify tools (orient · scaffold · gate). redmirror-reflect init <agent> registers it with your agent. The verify verbs run only over MCP — they are not CLI subcommands; the CLI carries only mcp, gate, audit, init, skill, update, and license.Reflection is a single binary, no runtime, no dependencies. One line downloads it and puts it on your PATH.
# installs to ~/.local/bin/redmirror-reflect
curl -fsSL https://dist.redmirror.io/install.sh | sh
# installs to %LOCALAPPDATA%\Programs\redmirror-reflect
irm https://dist.redmirror.io/install.ps1 | iex
Prefer to grab the binary yourself? Every build is at dist.redmirror.io, redmirror-reflect-macos, redmirror-reflect-linux, redmirror-reflect-windows.exe. Put it anywhere on your PATH. Check it runs:
redmirror-reflect --version
Keep it current any time, it self-replaces (checksum-verified):
redmirror-reflect update
After you start your free trial you get a licence token by email. Activate it once, on each machine:
redmirror-reflect license activate <your-token>
That stores the token locally and validates it with the licence server. In CI or a container, skip the file and pass it in the environment instead:
export REDMIRROR_REFLECT_LICENSE=<your-token>
Reflection speaks MCP, so it drops into any agent that supports MCP servers. The command is always the same, redmirror-reflect mcp, only the config file differs. Pick your editor:
Claude Code one line
Run this once, anywhere:
claude mcp add reflection -- redmirror-reflect mcp
Then in a session: “use reflection to check this file.”
Cursor
Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (this project):
{
"mcpServers": {
"reflection": {
"command": "redmirror-reflect",
"args": ["mcp"]
}
}
}
VS Code, GitHub Copilot
Create .vscode/mcp.json in your project (or run MCP: Add Server from the Command Palette), then open Copilot Chat in Agent mode:
{
"servers": {
"reflection": {
"type": "stdio",
"command": "redmirror-reflect",
"args": ["mcp"]
}
}
}
Codex CLI
Add to ~/.codex/config.toml (or .codex/config.toml in a trusted project), then run /mcp to confirm:
# config.toml
[mcp_servers.reflection]
command = "redmirror-reflect"
args = ["mcp"]
Gemini CLI
Add to ~/.gemini/settings.json (global) or .gemini/settings.json (project):
{
"mcpServers": {
"reflection": {
"command": "redmirror-reflect",
"args": ["mcp"]
}
}
}
Windsurf
Add the same block to ~/.codeium/windsurf/mcp_config.json (or use Settings → Cascade → MCP → Add Server):
{
"mcpServers": {
"reflection": {
"command": "redmirror-reflect",
"args": ["mcp"]
}
}
}
OpenCode
Add the server to opencode.json (project root, or ~/.config/opencode/opencode.json), then run /mcp in OpenCode to confirm it connected:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"reflection": {
"type": "local",
"command": ["redmirror-reflect", "mcp"],
"enabled": true
}
}
}
jcode
Add to ~/.jcode/mcp.json (global) or .jcode/mcp.json (project):
{
"mcpServers": {
"reflection": {
"command": "redmirror-reflect",
"args": ["mcp"]
}
}
}
Pi package
Pi isn't an MCP host, install the @redmirror/reflection package instead. It bundles the Pi extension + the skill and fetches the kernel (sha256-verified) on first run:
# Pi
pi install https://dist.redmirror.io/pi/reflection.git
# …or with npm
npm i -g https://dist.redmirror.io/pi/reflection.tgz
Then activate your licence and run the enforced, kernel-gated scan through your model:
redmirror-reflection activate <your-token>
redmirror-reflection ./src
Bring your own model, see §5. The scan proposes → the kernel gates → only proven findings come back.
Any other MCP host
Same idea, register a stdio server whose command is redmirror-reflect with the single argument mcp. That exposes the verify tools to the host's model.
orient and angles to the vulnerable relations, your agent states an invariant and calls redmirror_reflect_gate, which searches every reachable state and returns a stamp with the concrete attack path when a bug is real (a replayable counterexample, a bounded proof, or “not proven”), checkpointed to .redmirror-reflect/session.jsonl. Your agent can only report what the gate stamped, so it can't dress up an unproven claim as a bug. Run redmirror-reflect init <agent> (below) to install this — the tools, the skill, and the enforcing hook.
Once it's installed, just ask your agent to scan a file, a change, or the whole repo for real bugs. Guided by orient/angles to the risky relations, it states an invariant and the kernel searches every reachable state, all with your agent's own model. What comes back is either a counterexample you can replay, the exact steps that reach the bug, or a bounded proof that none exists in range, and your agent reports only what the gate stamped GROUNDED.
Reflection ships its own agent skill: the claim/witness grammar and the protocol (orient → scaffold → propose → redmirror_reflect_gate → report only what's stamped GROUNDED). The binary prints it, so there's nothing extra to download; drop it where your agent reads skills or rules:
# Claude Code
redmirror-reflect skill > .claude/skills/reflection/SKILL.md
# Cursor / Windsurf / any agent, paste it into your rules file
redmirror-reflect skill
Prefer to read or copy it first? It's also hosted at redmirror.io/skill.md. With the MCP tools mounted your agent already has the grammar from the tool descriptions, the skill just helps agents that drive the verbs by hand.
The skill is advisory, an agent can ignore it. To make the gate unskippable, let the agent's own tooling run it, one command scaffolds the pack for your agent (project-level only, run it from your project root — it writes under the current directory, never your global config):
redmirror-reflect init claude # tools (MCP) + skill + a Stop hook that blocks finishing until findings are grounded
redmirror-reflect init pi # the extension (tools + skill) + the gate wired into pi's flow
redmirror-reflect init jcode # tools + skill (jcode is an MCP host)
redmirror-reflect init cursor # tools + rules …also windsurf · codex · gemini · dsh · ci
Using another agent? redmirror-reflect init <its-name> still works — for an agent with no preset it prints the exact MCP wiring and skill so you can set it up by hand. Any MCP-capable agent works.
Where the agent has real hooks (Claude Code, Pi) this is true enforcement, the harness runs redmirror-reflect audit, not the model, and blocks until every gated finding is grounded. Where it only has rules (Cursor, Windsurf, Codex, Gemini) the skill is installed and a CI gate (redmirror-reflect init ci) is the universal hard backstop.
Whole-repo scans track coverage. Given no single file to look at, the skill has the agent map the target into subsystems × angles — one per invariant family the subsystem touches (accounting, lifecycle, idempotency, referential integrity, races, authorization) — and record each in .redmirror-reflect/coverage.jsonl. audit then blocks until every cell is grounded (a proven bug) or cleared (proven safe) — no subsystem left unexamined.
RedMirror finds bugs on its own — and because it proves them, it can also sit behind whatever else surfaces candidates for you: Claude Code's /security-review, your model's own pass, or a tool like Semgrep or CodeQL. Run your review first, then have Claude prove each finding with RedMirror and keep only what the kernel grounds:
# 1. run your review, in Claude Code
/security-review
# 2. then, same session:
"Ground each of those findings with reflection: redmirror_reflect_witness for injection
you can reproduce, redmirror_reflect_refute for auth/logic bugs. Keep only what it confirms."
Real candidates come back CONFIRMED with a replayable reproduction; look-alikes that can't be reproduced come back INCOMPLETE and are dropped, on the record. A worked example (a real exec injection next to a safe execFile sibling, where the review flags both and Reflection confirms only the first) is in demo/claude-security-x-reflection.
Your coding agent is the model, and there's no key to set for Reflection. Your agent proposes findings with its own model; the kernel's tools (orient, scaffold, gate) do the exhaustive checking with no tokens, so there's nothing to configure and nothing extra to pay for beyond your agent's own usage.
Any tool-calling model works, and it doesn't have to be a frontier one: on the 440-case benchmark the same 96% real-bug recall holds on a 20B model as on a 120B, and small open models like qwen3-coder run the whole flow. A local model is fine, because the rigor lives in the gate, not the model.
Reflection runs offline. To keep working it checks your subscription with the licence server about once a week and receives a short-lived signed lease that lets it run without a connection until the next check. Between checks you can be fully offline.
If you cancel, the binary simply stops running once its current lease expires, within about a week. It never deletes or alters your code. If it can't reach the licence server for longer than a lease period, connect briefly to revalidate and it resumes. Manage or cancel your subscription any time from your account.
Stuck, or something looks wrong? Email support@devs.mu, include your OS, editor, and the command or config you used. Billing and licence questions go to the same address, or manage your subscription from your account.