Skip to content

CLI Reference Open-Core

The Intutic CLI provides workspace management, harness detection, config sync, and trace querying.

Installation

bash
# Install workspace CLI globally
npm install -g @intutic/cli

# Install or run native Rust proxy gateway
npm install -g @intutic/proxy
npx @intutic/proxy

Global options

All commands support:

OptionDescription
--versionShow CLI version
--helpShow help for command

intutic init

Initialize workspace — detect harnesses, configure sync.

bash
intutic init [options]

Options:

OptionDescription
--devUse local control plane (http://localhost:3001)

What it does:

  1. Scans the workspace for all harness config files
  2. Creates a workspace on the control plane
  3. Generates a virtual API key (vk_*)
  4. Writes governance config into each detected harness file

intutic setup

Guided setup wizard — detect harnesses, configure a provider credential, verify it, and optionally choose a judge model, in one interactive flow. Unlike intutic init, this command prompts; it is the interactive counterpart, not a replacement — init stays flag-driven and safe for CI. See the cohort wizard guide for a full narrative walkthrough of every step.

bash
intutic setup [options]

Options:

OptionDescription
--devUse local control plane (http://localhost:3001)

What it does:

  1. Detects harnesses in the current workspace (same detection intutic init uses)
  2. Asks whether to configure a provider against a connected workspace or locally (no control plane — writes a .intutic.env file instead)
  3. Picks a provider from the registry (intutic credentials list shows the same set) and prompts for its credential fields
  4. Verifies the credential against the provider's own API before saving — a 401/403 asks for confirmation before proceeding anyway; a rate-limited or unreachable response is reported but does not block
  5. Saves the credential (PUT /api/v1/workspace/provider-credentials/:provider, same route intutic credentials set hits) or writes the local env file
  6. Optionally picks a judge model from Intutic's model catalog (or a custom name), saves it (same route the dashboard's Settings → LLM Judge panel uses), and — in connected mode — runs the same test round-trip the panel's own Test button does, reporting which stage (shape/provider/completion) it reached

Examples:

bash
# Connected to Intutic (requires `intutic login` first)
intutic setup

# Against a local control plane
intutic setup --dev

intutic judge configure

Generate the local artifacts an on-prem LLM-as-judge needs: a litellm_config.yaml, an env block, and a Helm values snippet. Writes files only — it never calls a remote API, since local_judge is deliberately not remotely configurable (see the self-hosted gateway's local judge). See On-Prem Judge Setup for the full walkthrough.

bash
intutic judge configure [options]

Options:

OptionDescription
--out <path>Where to write litellm_config.yaml (default: ./litellm_config.yaml)

What it does:

  1. Prompts for a judge model — from the model catalog (any provider, not filtered to ones Intutic's managed gateway can route to, since a local LiteLLM instance can serve anything) or a custom model reference
  2. Writes a litellm_config.yaml model_list entry in the same shape infra/compose/litellm_config.yaml's hand-written example uses
  3. Prints the env block (INTUTIC_GATEWAY_LOCAL_JUDGE, LITELLM_LOCAL_URL, LITELLM_LOCAL_API_KEY, LITELLM_LOCAL_JUDGE_MODEL) for Docker/bare-metal deployments
  4. Prints the Helm values snippet (proxy.localJudge, litellm.enabled, litellm.judgeModel) for tools/helm/intutic-gateway

Example:

bash
intutic judge configure --out ./infra/compose/litellm_config.yaml

intutic login

Authenticate with the Intutic control plane.

bash
intutic login [options]

Options:

OptionDescription
--api-key <key>Authenticate with an API key (vk_*)
--devUse local control plane (http://localhost:3001)

Examples:

bash
# Browser-based login
intutic login

# API key login
intutic login --api-key vk_abc123def456

# Local dev
intutic login --dev

intutic logout

Clear stored credentials.

bash
intutic logout

No options. Removes locally stored authentication tokens.


intutic status

Show workspace status — auth, harnesses, sync state.

bash
intutic status

No options. Displays:

  • Current authentication state
  • Detected harnesses and their config paths
  • Sync state (last sync timestamp, any errors)

intutic whoami

Show current authenticated identity.

bash
intutic whoami [options]

Options:

OptionDescription
--devUse local control plane (http://localhost:3001)

intutic connect

Start sync daemon — bidirectional config sync with control plane.

bash
intutic connect [options]

Options:

OptionDescriptionDefault
--devUse local control plane (http://localhost:3001)
--interval <ms>Poll interval in milliseconds30000

Examples:

bash
# Default (30s poll)
intutic connect

# 10 second poll interval
intutic connect --interval 10000

# Local dev with fast polling
intutic connect --dev --interval 5000

The daemon runs in the foreground. Use Ctrl+C to stop.

Bidirectional Config Capture: When running, the sync daemon polls the workspace settings. If FF_CONFIG_CAPTURE=true is enabled, it periodically reads and hashes all detected harness configuration files (e.g. .cursorrules, CLAUDE.md, .clinerules) every N iterations (set by CONFIG_CAPTURE_INTERVAL, defaulting to 5, which corresponds to ~2.5 minutes on a 30s interval). It uploads these rule snapshots to the control plane, enabling visual audit trails, config diff histories, and rollback triggers in the dashboard.


intutic traces list

List execution traces for the workspace.

bash
intutic traces list [options]

Options:

OptionDescriptionDefault
--limit <n>Number of traces to show (1–100)20
--since <duration>Time window: 30m, 24h, 7d24h
--action <type>Filter by enforcement action(all)
--model <name>Filter by model name(all)
--jsonOutput as JSON instead of tablefalse
--devUse local control plane (http://localhost:3001)

Enforcement action filter values: BYPASS, ENHANCE, HIJACK, KILL

Examples:

bash
# Last 20 traces from past 24 hours
intutic traces list

# All KILL actions from the past week
intutic traces list --action KILL --since 7d

# JSON output for scripting
intutic traces list --json --limit 100

# Filter by model
intutic traces list --model claude-4-sonnet

intutic traces inspect <trace_id>

Show full detail of a single trace.

bash
intutic traces inspect <trace_id> [options]

Arguments:

ArgumentDescription
trace_idThe trace ID to inspect (e.g., tr_abc123)

Options:

OptionDescription
--devUse local control plane (http://localhost:3001)

Example:

bash
intutic traces inspect tr_abc123

Returns full trace detail including token counts, costs, compliance scores, anomaly data, and corrective prompt card.




intutic skill list

Discover and list local workspace rule/skill files.

bash
intutic skill list

What it does: Scans the current workspace root for active harness rules configurations, including .cursorrules, CLAUDE.md, .windsurfrules, .clauderules, and rules.md.


intutic skill audit

Audit local rules/skills for security leakage or unsafe command patterns.

bash
intutic skill audit

What it does: Performs static analysis on active rules and instructions to find potential vulnerabilities, such as hardcoded API credentials or wildcard file operations (e.g. rm -rf *).


intutic loop start

Register and start an active loop execution session.

bash
intutic loop start [options]

Options:

OptionDescriptionDefault
--name <name>Unique name identifier for the loop run(required)
--budget <limit>Maximum token spend budget in USD (e.g. 5.00)(none)
--sops <sops>Comma-separated local SOP folder names or option indices
--auto-judgeEnable automatic E2E judging for the loop
--devUse local control plane

intutic loop exec

Execute an agent command wrapped with loop budget boundaries.

bash
intutic loop exec [options] -- <command> [args...]

Options:

OptionDescriptionDefault
--name <name>Unique name identifier for the loop run(generated)
--budget <limit>Maximum token spend budget in USD (e.g. 5.00)(none)
--sops <sops>Comma-separated local SOP folder names or option indices
--auto-judgeEnable automatic E2E judging for the loop
--devUse local control plane

Example:

bash
intutic loop exec --name "npm-build" --budget 1.50 -- npm run build

intutic loop list

List loop runs and cost accounting details for the workspace.

bash
intutic loop list [options]

intutic loop complete <loop_run_id>

Mark a running loop as successfully completed.

bash
intutic loop complete <loop_run_id> [options]

intutic loop kill <loop_run_id>

Kill an active loop and prevent subsequent API requests.

bash
intutic loop kill <loop_run_id> [options]

intutic policy enable <policy_id>

Enable a compliance policy.

bash
intutic policy enable <policy_id> [options]

Options:

OptionDescription
--devUse local control plane (http://localhost:3001)

intutic policy disable <policy_id>

Disable a compliance policy.

bash
intutic policy disable <policy_id> [options]

Options:

OptionDescription
--devUse local control plane (http://localhost:3001)

intutic policy rollback <policy_id>

Rollback a compliance policy to a specific version.

bash
intutic policy rollback <policy_id> --version <v> [options]

Options:

OptionDescription
--version <v>Target version number (required)
--devUse local control plane (http://localhost:3001)

intutic policy export

Export workspace compliance policies to stdout as a JSON array.

bash
intutic policy export --all [options]

Options:

OptionDescription
--allExport all policies
--devUse local control plane (http://localhost:3001)

intutic policy test

Run dry-run WASM policy evaluation locally.

bash
intutic policy test --wasm <path> --mock <path>

Options:

OptionDescription
--wasm <path>Path to compiled WebAssembly rule binary (required)
--mock <path>Path to mock JSON request context file (required)

intutic policy compile

Compile an AssemblyScript rule to WASM (wraps asc).

bash
intutic policy compile [options]

Options:

OptionDescriptionDefault
--src <path>Rule source entry fileassembly/index.ts
--out <path>Output .wasm pathbuild/rule.wasm
--debugInclude debug info and source mapsfalse

What it does: Shells out to npx --no-install asc <src> -o <out> --optimize --exportRuntime, creating the output directory if needed. With --debug it also passes --debug --sourceMap. If asc is not available, install it with pnpm add -D assemblyscript assemblyscript-json.


intutic policy install

Validate and install a compiled WASM rule into the local proxy rules dir.

bash
intutic policy install --wasm <path> [options]

Options:

OptionDescriptionDefault
--wasm <path>Path to compiled WebAssembly rule binary (required)
--name <name>Rule name(the file name)
--priority <NN>Evaluation priority — lower runs first100

What it does:

  1. Instantiates the rule and evaluates it against a built-in allow-mock context — a rule that fails to instantiate or evaluate is not installed
  2. Writes it as {priority}_{name}.wasm into the local rules dir — INTUTIC_WASM_DIR if set, otherwise ~/.intutic/wasm
  3. Prints the destination path, priority, and SHA-256 of the installed binary

The proxy picks up local rule changes within ~5s on the next request. If your proxy config.yaml sets intutic_settings.wasm_local_dir, make sure it matches this path (or set INTUTIC_WASM_DIR for both).


intutic policy list-local

List WASM rules installed in the local proxy rules dir.

bash
intutic policy list-local

No options. For each .wasm file in the local rules dir (INTUTIC_WASM_DIR, defaulting to ~/.intutic/wasm) it prints the rule name, priority, size, mtime, and a SHA-256 prefix.


intutic doctor

Diagnose workspace health — proxy, auth, daemon, configs, logs.

bash
intutic doctor

No options. Runs seven checks in order, each printing ✓ or ✗ plus a one-line remediation on failure:

  1. Proxy reachable (http://127.0.0.1:4000/health)
  2. Control plane auth (via stored credentials)
  3. Sync daemon running (PID file or process scan)
  4. Harness config files intact (SHA-256 drift check)
  5. Daemon log readable (~/.intutic/daemon.log)
  6. Valkey connectivity (proxy /health, falling back to a TCP probe on port 6379)
  7. CA cert trust (~/.intutic/ca.crt plus the OS trust store)

intutic budget

Check remaining daily/monthly budget and list active loops.

bash
intutic budget [options]

Options:

OptionDescription
--devUse local control plane (http://localhost:3001)

What it does: Fetches cloud budget status (daily and monthly spend, percentages used, remaining budget, alert flag), prints the local spending cap configured in ~/.intutic/config.json (default $10.00), and lists all ACTIVE loop runs with their token spend and budget limit. Without stored credentials it runs in standalone (offline) mode and reports only the local cap.


intutic credentials list

Provisioning status for every provider in the credential registry — see Provider Keys.

bash
intutic credentials list [options]

Options:

OptionDescription
--jsonOutput as JSON instead of a report
--devUse local control plane (http://localhost:3001)

Each provider is reported with whether it is live (the gateway actually routes to it) or not yet routable (the key is stored, but nothing forwards to it yet), plus whether a key is currently provisioned and its last-4 preview.


intutic credentials set <provider>

Provision or rotate a workspace's own upstream provider key.

bash
intutic credentials set <provider> --field key=value [--field key=value ...] [options]

Options:

OptionDescription
--field <key=value>A credential field; repeat for multi-field providers
--jsonOutput as JSON instead of a report
--devUse local control plane (http://localhost:3001)

Examples:

bash
# A single-key provider
intutic credentials set anthropic --field apiKey=sk-ant-...

# A multi-field provider (Azure OpenAI)
intutic credentials set azure_openai \
  --field apiKey=sk-... \
  --field endpoint=https://your-resource.openai.azure.com \
  --field deployment=gpt-4

If BYO-key enforcement is on for your gateway, requests for a provider with no provisioned key fail with 402 byok_required until one is set here.


intutic credentials unset <provider>

Remove a provisioned provider credential.

bash
intutic credentials unset <provider> [options]

Options:

OptionDescription
--devUse local control plane (http://localhost:3001)

If BYO-key enforcement is on, requests for this provider are refused after this until a new key is provisioned.


intutic sops push <name>

Push a local offline SOP folder to the central workspace — one control-plane SOP per file, each carrying its own declared front matter.

bash
intutic sops push <name> [options]

Arguments:

ArgumentDescription
nameFolder name under .intutic/sops/ in the workspace root

Options:

OptionDescription
--devUse local control plane (http://localhost:3001)
--orgPush as an org-wide floor instead of a workspace SOP

What it does: For every .md file in .intutic/sops/<name>/, parses title:/risk_tier:/version: front matter (falling back to the file's first # heading, then the file name, for title; to MEDIUM for an unstated risk tier) and creates one workspace SOP per file, front matter stripped from the uploaded body. Fails if the folder is missing or contains no markdown. See GitOps for SOPs for the full push/pull/status flow and what does not round-trip (declarative enforcement keys like deny_tools: have no control-plane column).


intutic sops pull

Pull every workspace SOP from the control plane into .intutic/sops/<slug>.md.

bash
intutic sops pull [options]

Options:

OptionDescription
--devUse local control plane (http://localhost:3001)
--forceOverwrite locally-modified files instead of refusing them

What it does: Writes one file per SOP, with title:/risk_tier:/version: front matter reconstructed and a content_hash: marker recording the body's hash. Refuses to overwrite a file whose recorded hash no longer matches its current body (a local edit since the last pull) unless --force is passed; a file with no recorded hash at all is treated as unverifiable and always requires --force. See GitOps for SOPs.


intutic sops status

Show drift between .intutic/sops/*.md and the control plane. Read-only.

bash
intutic sops status [options]

Options:

OptionDescription
--devUse local control plane (http://localhost:3001)

What it does: For each local file, matched by title against the workspace's control-plane SOPs, reports in-sync, local-ahead (edited locally, not yet pushed), remote-ahead (control plane moved on, safe to pull), diverged (no recorded pull hash and no match either — can't tell "never pulled" from "edited long ago"), or push-only (no matching title on the control plane yet). See GitOps for SOPs.


intutic exec

Execute a command wrapped with Intutic proxy environment variables.

bash
intutic exec -- <command> [args...]
intutic exec --sandbox -- <command> [args...]

Arguments:

ArgumentDescription
command...Command and arguments to execute (e.g. -- claude)

Options:

OptionDescription
--sandbox [kind]Run the agent in an isolated sandbox instead of directly on the host. kind is oci (default) or firecracker. See Sandboxed Execution for what each backend actually isolates and requires.
--sandbox-image <image>Sandbox image — must contain the agent, nftables, and capsh. Default: intutic/sandbox:latest.
--sandbox-memory <size>Sandbox memory cap, e.g. 2g. Default: 2g.
--sandbox-cpus <n>Sandbox CPU cap. Default: 2.
--sandbox-pids <n>Sandbox max process count. Default: 512.
--sandbox-allow <cidrs>Comma-separated extra destination CIDRs the sandbox may reach beyond the proxy and DNS.

If the workspace's sandbox requirement is set to Require (Settings → Security → Sandboxed Execution) and --sandbox is omitted, the command refuses to run rather than executing ungoverned on the host.

What it does: Injects the proxy environment into the child process, then spawns it with inherited stdio and exits with the child's exit code. The injected variables cover the competing SDK conventions:

VariableConsumers
OPENAI_API_BASELiteLLM, LangChain, CrewAI, ADK, Aider
OPENAI_BASE_URLOpenAI Python SDK v1+, Pydantic-AI, Agent SDK
OPENAI_API_BASE_URLOpenWebUI
OPENAI_HOSTGoose (host only, no /v1)
ANTHROPIC_BASE_URLClaude Code, Anthropic SDK (host only)
OPENAI_API_KEY / ANTHROPIC_API_KEY / INTUTIC_API_KEYAPI key for all of the above

Requires intutic login first. In dev mode the proxy is http://localhost:4000, otherwise http://localhost:4000.

Examples:

bash
intutic exec -- claude
intutic exec -- aider --model openai/gpt-4o
intutic exec -- python my_agent.py

intutic enforce

Manage the mandatory default-deny egress firewall — makes the governing proxy non-optional by dropping outbound traffic to everything except the proxy, DNS, and operator-declared infrastructure. Where Network Egress Control governs traffic the proxy sees, intutic enforce closes the gap where an agent simply doesn't route through the proxy at all: with it applied, there is no other way out.

bash
intutic enforce <action> [options]

Actions:

ActionPrivilegeWhat it does
generateNonePrints the platform firewall ruleset without applying it.
applyRootApplies the default-deny egress firewall. All egress except the proxy, DNS, and --allow infrastructure is dropped.
removeRootRemoves the Intutic egress firewall.
statusNoneReports whether the egress firewall is currently applied.
reportNoneReports the locally recorded enforcement state (firewall, CA-trust, system-hooks posture) to the control plane. For when apply/remove ran elevated and couldn't reach stored credentials.

Options (apply/remove/status/generate):

OptionDescription
--port <port>The proxy's listener port to permit. Default: 4000.
--uid <uid>uid the proxy runs as, exempted from the deny. Defaults to the current user.
--allow <cidrs>Comma-separated extra destination CIDRs to permit (control plane, private registries, etc.).
--no-dnsAlso deny outbound DNS — only if a local resolver serves the host.
--platform <os>Target ruleset platform: linux, macos, or windows. Defaults to the current OS.

What it does:

Implemented in the intutic-proxy binary's own enforce subcommand (platform-aware: nftables or iptables on Linux, pf on macOS); the CLI command is a thin, discoverable wrapper around it. apply/remove change the host firewall and need root — re-run with sudo if it fails with a permission error. After a successful apply/remove, the CLI re-queries status while still elevated and best-effort reports the result to the control plane, so an admin can see whether enforcement is actually active on a given machine without SSHing into it.

Examples:

bash
# See what would be applied, without changing anything
intutic enforce generate

# Apply, permitting an internal package registry too
sudo intutic enforce apply --allow 10.0.0.0/8,registry.internal.corp

# Check whether it's currently active
intutic enforce status

# Remove it
sudo intutic enforce remove

intutic daemon install

Install sync-daemon as a system service (auto-starts on login, restarts on any exit).

bash
intutic daemon install --workspace-id <id> --api-key <key> [options]

Also available as the top-level shortcut intutic install-daemon.

Options:

OptionDescriptionDefault
--workspace-id <id>Workspace ID, e.g. wk_xxxx (required)
--api-key <key>Workspace API key, e.g. vk_xxxx (required)
--control-plane-url <url>Control plane URLhttps://your-control-plane.example
--binary-path <path>Path to the intutic CLI binary(current process)
--dry-runPrint what would be done without writing files
--systemInstall as a system-level service (LaunchDaemon on macOS, systemd system unit on Linux)

Service files written:

  • macOS: ~/Library/LaunchAgents/ai.intutic.sync-daemon.plist (KeepAlive: true)
  • Linux: ~/.config/systemd/user/intutic-sync-daemon.service (Restart=always)

Because the service restarts on any exit, stopping it requires intutic daemon stop, intutic daemon uninstall, or launchctl unload.


intutic daemon uninstall

Remove the sync-daemon system service and stop it permanently.

bash
intutic daemon uninstall [options]

Also available as the top-level shortcut intutic uninstall-daemon.

Options:

OptionDescription
--dry-runPrint what would be done without writing files
--systemUninstall the system-level service

intutic daemon status

Show sync-daemon system service status.

bash
intutic daemon status

No options.


intutic daemon start

Start and load the sync-daemon system service.

bash
intutic daemon start

No options.


intutic daemon stop

Stop and unload the sync-daemon system service.

bash
intutic daemon stop

No options.


intutic rollback

List or restore file pre-images captured when a guard flagged a call and let it proceed (TD-328). This is the restore half of the mechanism — the capture half runs automatically inside the generated harness hook when a warn-tier guard fires, if capture is enabled.

bash
intutic rollback              # list captured pre-images
intutic rollback --id <id>    # restore one

Options:

OptionDescription
--listList captured pre-images. The default when --id is omitted.
--id <id>Restore the named pre-image.

Capture is opt-in and narrowly scoped — set "captureRollbackPreImages": true in .intutic/config.json. It's off by default because it stores copies of flagged files locally. It only captures on the warn enforcement tier: a KILLed call never executes (nothing to revert), and a require-tier violation is refused before it runs — capture exists for the one case where a call was flagged and allowed to proceed anyway, so there's a "before" worth keeping. Bounded to 2 MiB per file and 50 retained entries.

What it does:

  • With no --id: lists every captured pre-image (id, capture time, tool, target path, byte size or "file did not exist") and prints the restore command for each.
  • With --id <id>: restores exactly that pre-image and nothing else — there is no --all and no implicit "latest". Before restoring, the current contents of the target are themselves captured as a new pre-image, so the restore is itself undoable. The restore is appended to the same .intutic/events/hook-events.jsonl log the gate writes to (tool_reverted), so the audit trail reads "flagged → allowed → reverted", not a file that silently changed back. If the pre-image's stored blob was evicted by the retention ceiling, the command refuses rather than performing a partial restore.

Examples:

bash
# See what's available to restore
intutic rollback

# Restore a specific one (id comes from the list above)
intutic rollback --id a1b2c3d4e5f60718

The circuit breaker for AI agents