CirvixDocs / Deployment

Run it inside your own boundary.

The control plane is meant to sit where your trust boundary already is. Three deployment shapes, the same binary, the same decisions.

3deployment models
UDSlocal socket by default
customermanaged master key
fails closedwhen dependencies are down

Choose a shape

ModelBest forPackaging & Runtime
Single-Binary DaemonProduction host systems, CI/CD runners, and developer machines.Compiled Go/Rust binary (cirvixd) with zero runtime dependencies. brew or curl install.
Kubernetes SidecarMicroservice agent fleets (LangGraph, CrewAI, AutoGen pods).Containerized proxy (cirvix/proxy:1.0) sharing a local UDS volume. Fails closed.
Docker ComposeStaging environments and isolated host clusters.Control plane container + PostgreSQL audit store + policy volume.
Bare Node / NPMQuick evaluation or JavaScript runtime integration.@cirvix_ai/agent-control CLI over Unix Domain Socket.

Single-Binary Daemon (Go / Rust)

Enterprise security engineers require zero dependency friction. Cirvix distributes statically compiled single-binary daemons (cirvixd) for Linux (x86_64, ARM64), macOS (Apple Silicon, Intel), and Windows (x64) with policy evaluation designed against a sub-millisecond budget per decision (design target; measured runs with hardware context on benchmarks).

PlatformOne-Line InstallationBinary Target
macOS / Linux (Homebrew)brew tap cirvix/tap && brew install cirvixStatically compiled daemon + CLI wrapper
Linux / macOS (Shell)curl -fsSL https://cirvix.com/install.sh | shAuto-detects architecture, installs to ~/.local/bin/cirvix
Windows (PowerShell)irm https://cirvix.com/install.ps1 | iexInstalls standalone cirvix.exe, sets User PATH
/etc/systemd/system/cirvixd.serviceSYSTEMD
[Unit]
Description=Cirvix Enterprise Agent Security Daemon
After=network.target
Documentation=https://cirvix.com/docs.html

[Service]
Type=simple
User=cirvix
Group=cirvix
ExecStart=/usr/local/bin/cirvixd --config=/etc/cirvix/config.env
Restart=always
RestartSec=5s
LimitNOFILE=65536
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/var/run/cirvix /var/log/cirvix

[Install]
WantedBy=multi-user.target

Kubernetes Sidecar Proxy Pattern

For distributed agent fleets running in Kubernetes (e.g. LangChain, CrewAI, AutoGen, Claude Code instances), Cirvix operates as a drop-in sidecar proxy inside the workload Pod. The agent and the Cirvix proxy communicate over an ultra-low-latency shared Unix Domain Socket (UDS) mounted via an in-memory emptyDir volume.

agent-pod-sidecar.yamlKUBERNETES MANIFEST
apiVersion: v1
kind: Pod
metadata:
  name: fleet-agent-worker
  namespace: agents-prod
  labels:
    app.kubernetes.io/name: fleet-agent
    security.cirvix.com/governed: "true"
spec:
  volumes:
    - name: cirvix-socket
      emptyDir:
        medium: Memory
    - name: cirvix-policies
      configMap:
        name: production-agent-policies
  containers:
    # --- 1. Your AI Agent Workload Container ---
    - name: agent-app
      image: registry.internal/fleet-agent:latest
      env:
        - name: CIRVIX_SOCKET
          value: "unix:///var/run/cirvix/ipc.sock"
        - name: CIRVIX_FAIL_CLOSED
          value: "true"
      volumeMounts:
        - name: cirvix-socket
          mountPath: /var/run/cirvix

    # --- 2. Cirvix Drop-in Sidecar Proxy Container ---
    - name: cirvix-proxy
      image: cirvix/proxy:1.0
      imagePullPolicy: IfNotPresent
      securityContext:
        readOnlyRootFilesystem: true
        allowPrivilegeEscalation: false
        runAsNonRoot: true
        runAsUser: 10001
        capabilities:
          drop:
            - ALL
      env:
        - name: CIRVIX_LISTEN_SOCKET
          value: "/var/run/cirvix/ipc.sock"
        - name: CIRVIX_POLICY_DIR
          value: "/etc/cirvix/policies"
        - name: CIRVIX_MASTER_KEY
          valueFrom:
            secretKeyRef:
              name: cirvix-secrets
              key: master-key
      volumeMounts:
        - name: cirvix-socket
          mountPath: /var/run/cirvix
        - name: cirvix-policies
          mountPath: /etc/cirvix/policies
          readOnly: true
      resources:
        limits:
          cpu: "500m"
          memory: "256Mi"
        requests:
          cpu: "50m"
          memory: "64Mi"
      livenessProbe:
        exec:
          command: ["/bin/cirvix-proxy", "ping", "--socket=/var/run/cirvix/ipc.sock"]
        initialDelaySeconds: 3
        periodSeconds: 10

Docker Compose Fleet

docker-compose.ymlYAML
services:
  control-plane:
    image: cirvix/control-plane:1.0
    restart: unless-stopped
    environment:
      # Customer managed envelope key. Never held by Cirvix.
      CIRVIX_MASTER_KEY: ${CIRVIX_MASTER_KEY}
      CIRVIX_POLICY_DIR: /etc/cirvix/policies
      CIRVIX_AUDIT_STORE: postgres://cirvix:secret@postgres:5432/audit_chain
      CIRVIX_FAIL_CLOSED: "true"
    volumes:
      - ./policies:/etc/cirvix/policies:ro
      - cirvix_ipc:/var/run/cirvix
    depends_on:
      postgres:
        condition: service_healthy

  agent-service:
    image: company/agent-fleet:latest
    environment:
      CIRVIX_SOCKET: unix:///var/run/cirvix/ipc.sock
    volumes:
      - cirvix_ipc:/var/run/cirvix

volumes:
  cirvix_ipc:
    driver: local

Configuration

VariableRequiredPurpose
CIRVIX_MASTER_KEYYesAES-256-GCM envelope key. Customer managed, no escrow path.
CIRVIX_POLICY_DIRYesDirectory of JSON rule files, mounted read-only.
CIRVIX_AUDIT_STOREYesWhere the hash-linked chain is written (Postgres, SQLite, or S3).
CIRVIX_SOCKETNoUnix domain socket path (e.g. unix:///var/run/cirvix/ipc.sock).
CIRVIX_FAIL_CLOSEDNoDefaults to true. Denies all agent operations if policy engine fails.
CIRVIX_OIDC_ISSUERNoEnables OIDC. Identity resolves to (issuer, subject).

There is no cirvix.toml and no cirvix init. Configuration is environment plus a policy directory — if you have seen either of those referenced elsewhere, that documentation is describing something the software does not have.

Before you put traffic through it

  • Confirm CIRVIX_MASTER_KEY is supplied from your own secret store, not baked into an image.
  • Mount the policy directory read-only so a compromised process cannot rewrite the rules it is bound by.
  • Verify the chain once with /v1/audit/verify so you know what a healthy result looks like.
  • Test the failure path deliberately: stop the audit store and confirm actions are denied rather than passed through.
Govern what ships

Bring every agent
under control.

Set durable policy, preserve a verifiable record, and give teams a safer way to put intelligent systems to work.

Copied to clipboard