Developers
One command. It finds what you already run.
No account for the scanner, no code changes for MCP, and nothing is rewritten without showing you the diff. If Cirvix cannot govern a surface, it says so rather than quietly leaving a gap.
npx @cirvix/agent-control scannpm install -g @cirvix/agent-controlthen: cirvix scanGetting started
Four commands, in order
- 01
Scan
Read-only, no account. Reports the agent runtimes, MCP servers, and credentials reachable from agent context on this machine.
npx @cirvix/agent-control scan - 02
Check
Evaluates one hypothetical call against the rule set and executes nothing. The fastest way to answer whether something would be allowed.
cirvix check --action fs.read --resource .env - 03
Enforce
The gateway sits between the agent and its MCP servers. Every tool call is evaluated before it is forwarded, and every result is scanned on the way back.
cirvix gateway --servers ~/.cursor/mcp.json - 04
Verify
Every decision is appended to a hash chain. Verification proves no record was altered after it was written. Rules live in your repository and are reviewed like any other infrastructure change.
cirvix audit verify
Auto-detection
What it recognises, and what it writes
On writing config. Editor and framework configuration files are yours. Cirvix backs up anything it modifies, prints a diff before writing, and cirvix uninstall restores the originals. A tool that silently edits your dotfiles has not earned the access it is asking for.
Claude Code
~/.claude/settings.json — adds cirvix as an MCP server
Cursor
~/.cursor/mcp.json — routes existing servers via the gateway
Windsurf / Cline
The editor's MCP config, same mechanism
LangChain / LangGraph
Middleware on the tool-executor boundary
CrewAI
Tool wrapper registered at crew construction
OpenAI Agents SDK
Tool-call interceptor on the client
MCP servers (any)
Registered, pinned, and re-exposed through the gateway
Docker / Kubernetes
Sidecar and egress-proxy manifests
If you prefer code
Two lines, at the tool boundary
import { guard } from "@cirvix/agent-control";import { ChatAnthropic } from "@langchain/anthropic"; // Wraps the tool-executor boundary. Every call the agent// makes is authorized before it runs; denials come back as// a typed CirvixDenied the agent can re-plan around.const tools = guard.wrap(myTools, { agent: "pr-triage", environment: process.env.CIRVIX_ENV ?? "local",}); const agent = createAgent({ llm: new ChatAnthropic(), tools });from cirvix import guardfrom crewai import Agent, Crew # Same boundary, same policy set, same decision record.tools = guard.wrap( my_tools, agent="support-triage", environment=os.environ.get("CIRVIX_ENV", "local"),) crew = Crew(agents=[Agent(tools=tools)])Using MCP? No code changes at all — agents connect to the gateway and the gateway connects to your servers.
Local first
The evaluator on your laptop is the evaluator in production
$ cirvix replay run_01JQ8F2K7M --policy candidate.json --diff run_01JQ8F2K7M agent pr-triage 38 calls changed decisions 2 of 36 00.412 fs.read /workspace/.env.production was PERMIT allow-workspace-read now DENY deny-dotenv-read No side effects were executed.Developers
Run the scanner.
It takes one command, needs no account, and tells you something true about your machine. @cirvix/agent-control
Cirvix AgentControl is in private beta. Pricing is published and plans are not yet chargeable — early access confirms your place and we will tell you before anything bills.
