Operate/Get started

    Get started

    Deploy Operate

    Operate runs as a single Docker Compose stack on one machine. It connects to your systems through 60+ read-only integrations, spanning version control, logs, metrics, databases, cloud infrastructure, and more, to build a rich context layer around each incident. The more context Operate can gather, the sharper its root cause analysis. On top of that context layer it runs a three-agent pipeline, RCA → Verify → Resolve, that investigates production incidents and routes findings for human review.

    RCA

    Finds the root cause

    Verify

    Independent check

    Resolve

    Drafts a fix

    Human review

    You decide what ships

    Before you begin

    • A machine (VM or bare metal) with Docker and Docker Compose installed. 32GB RAM runs roughly 8-10 concurrent cases; see Scaling below for sizing.
    • An App ID from operatex.dev (step 1 below)
    • Credentials for the integrations you want Operate to read from, such as source control, your log provider, and your application database (you enter these later, in the app)
    • Outbound network access from the machine to your AI provider, your source control, and your observability stack
    MongoDB and Redis ship inside the Compose stack, backed by named Docker volumes, so you do not provision any storage separately, Docker creates and manages the volumes on the host disk for you. If you would rather run managed MongoDB or Redis, you can point Operate at them instead (step 3).
    1

    Get an App ID

    Every Operate instance requires an App ID, a unique identifier that authenticates your deployment to operatex.dev. It handles two things: usage billing, and provisioning the LLM Operate uses to run root cause analysis. Without it, Operate will not start.

    Create an account

    Sign up at operatex.dev/signup. Once you're logged in, navigate to the App IDs page and create a new App ID for this deployment.

    Keep your App ID to hand, you will paste it into the onboarding wizard after deployment.

    2

    Provision a machine

    Operate runs the whole stack, web, worker, scheduler, MongoDB, and Redis, on one machine. Any VM or bare-metal host with Docker and Docker Compose installed works.

    Size the machine to how many cases you expect to run at once. Each case needs roughly 1.5GB of RAM while it runs. A 32GB host comfortably runs 8-10 concurrent cases; 64GB runs 20-24. Cases beyond the limit wait in the queue and start as slots free, they never crash the machine. You can always move to a bigger host later.

    Install Docker on the host first. See the official Docker install guide. Recent Docker ships Compose as the docker compose subcommand, no separate install needed.
    3

    Run the stack

    Operate ships a production docker-compose.yml that wires the processes it needs: web (the UI and API on port 8080), worker (runs the investigations), beat (the scheduler), plus MongoDB and Redis backed by named Docker volumes. Web and worker share one local volume at /data/operate/host_repo where repositories are cloned, so on a single host there is nothing extra to configure for the workspace.

    The four steps below take you from a fresh machine to a running Operate.

    1. Get the compose file and env template

    Operate is distributed as a Docker image, and the image bakes in its own docker-compose.yml and .env.example. Pull the image, then copy those two files out of it into your working directory:

    bash
    # create a container from the published image (nothing runs), then copy the
    # compose file and env template out of it, then clean up the container
    cid=$(docker create jalantechnologies/operate:latest)
    docker cp "$cid":/app/docker-compose.yml ./docker-compose.yml
    docker cp "$cid":/app/.env.example ./.env.example
    docker rm "$cid"

    You now have docker-compose.yml and .env.example next to each other. To pin a specific release instead of the latest, swap :latest for a version tag (e.g. jalantechnologies/operate:0.83.0).

    2. Create your .env

    Copy the template to .env (Compose reads it automatically), then fill in the values. The only required values are the MongoDB credentials.

    bash
    cp .env.example .env

    Generate a strong password and use the same username and password in the two MongoDB variables and inside the connection URI:

    bash
    openssl rand -hex 24   # use this as OPERATE_MONGODB_PASSWORD
    env
    # --- Required: MongoDB credentials for the bundled database ---
    OPERATE_MONGODB_USERNAME=operate
    OPERATE_MONGODB_PASSWORD=<the-generated-password>
    
    # The URI must embed the SAME username and password as above. Keep the host
    # (app-db) and options as-is to use the bundled MongoDB.
    OPERATE_MONGODB_URI=mongodb://operate:<the-generated-password>@app-db:27017/operate?authSource=admin
    
    # --- Optional ---
    # Defaults to the bundled Redis; set only to use your own managed Redis.
    # OPERATE_REDIS_URL=redis://redis:6379/0
    # How many cases run in parallel on this host. Defaults to 2. Raise to match the machine.
    # WORKER_CONCURRENCY=2
    Everything else is configured in the app, not via env vars. App ID, public URL, source-control credentials, log providers, and database connections are all entered in the getting-started page after the stack is up (steps 4 and 5). Operate auto-generates its JWT and encryption secrets on first boot and persists them, so you do not need to set them.

    3. Start the stack

    bash
    docker compose up -d

    This starts every service. Give it a minute on the first run while MongoDB and Redis initialize.

    4. Open Operate

    Operate serves on port 8080. Open http://<your-host>:8080/operate in a browser. On a fresh install this lands on the getting-started page, where you create the admin account, enter your App ID, and connect your data sources (steps 4 and 5).

    For a real deployment, put a reverse proxy (nginx, Caddy) with TLS in front of port 8080 so Operate is reachable over HTTPS at your own domain. The getting-started page picks up whatever public URL you open it on.

    Bring your own managed MongoDB or Redis (optional)

    To use a managed database instead of the bundled containers, point Operate at it in .env: set OPERATE_MONGODB_URI to your managed MongoDB connection string, and OPERATE_REDIS_URL to your managed Redis URL. Operate then uses those instead of the in-stack services, and you get the managed provider's own replication and backups.

    4

    First-time setup

    Open Operate in your browser (http://<your-host>:8080/operate, or your HTTPS domain if you put a proxy in front). A fresh install boots straight to the getting-started page. The first person to sign up creates the admin account and is taken through setup. Nothing is collected at install time, you do it all here.

    Step 1, App ID

    Enter the App ID you created at operatex.dev. Click Verify to confirm it is valid, then Save & Continue.

    Step 2, Public URL

    The field is pre-filled from your browser's origin (e.g. https://your-domain.com). If Operate is behind a reverse proxy or CDN where the internal hostname differs from the external one, edit this to the external-facing URL. Click Save & Continue.

    This URL is how Datadog, CloudWatch, and Slack reach Operate to deliver webhook alerts. Without a valid public URL, proactive case creation won't work.

    Steps 3–4, Log providers & Databases (skippable)

    Configure your log provider (Datadog, CloudWatch, SolarWinds) and host app database connections. Both steps can be skipped and completed any time via Settings → Integrations. See Connect your data sources below for credentials and IAM requirements for each provider.

    Step 5, Done

    A summary shows what was configured and what was skipped. Click Enter Operate to reach the dashboard. Skipped steps can be completed later under Settings → Integrations.

    5

    Connect your data sources

    All adapters are read-only. Operate never writes to your systems. Instead of opening PRs automatically, Operate generates a .patch file that your developers can review and apply manually. Log providers and database connections are configured during the wizard (step 4) or any time after via Settings → Integrations. Have your credentials ready before starting the wizard, the details for each provider are below.

    A

    Source control

    Operate clones your repo after credentials are saved and keeps it up to date. Full git history is available to the agent. No write access is needed; instead of opening PRs automatically, Operate generates a .patch file that your developers can review and apply manually.

    Required PAT scopes (fine-grained)

    ContentsRead-only
    MetadataRead-only
    Stuck? Watch the setup walkthrough
    Go to Settings → Integrations → Source Control → GitHub and enter your token, owner, and repo.
    B

    Logs

    Operate queries your log provider to pull relevant traces and error events into the context layer for each investigation, so the RCA agent reasons over real signals.

    API key requires the logs_read_data and monitors_write scopes.

    Stuck? Watch the setup walkthrough
    Go to Settings → Integrations → Log Providers → Datadog and enter your API key, App key, site, and service name. A verify step confirms the credentials before saving.
    C

    Database

    Operate queries your application database in read-only mode to enrich the context layer. Use a read replica or a dedicated read-only user, Operate never writes.

    Stuck? Watch the setup walkthrough
    Go to Settings → Integrations → Databases and add a connection using a mongodb:// URI. Operate auto-detects the provider from the URI scheme. A verify step tests the connection before saving.
    This is the connection to your application's database, not Operate's own MongoDB instance (OPERATE_MONGODB_URI). Use a read-only user or replica.
    6

    Verify the integration

    Confirm everything is wired before routing real traffic.

    1. 1Open Operate (http://<your-host>:8080/operate or your HTTPS domain)
    2. 2Click the FAB (bottom-right) to open Admin Chat
    3. 3Ask: "How many commits are on the main branch?"
    4. 4Confirm the response shows real repo data with a tool call trace (actual git output)
    5. 5A successful trace confirms the repo was cloned and the PAT is correctly configured

    Scaling and durability

    Everything runs on one host, so you scale by giving that host more capacity, in three ways, smallest first.

    Raise worker concurrency

    WORKER_CONCURRENCY sets how many cases one worker container runs in parallel. Raise it to use the RAM you have (each case needs about 1.5GB): roughly 8-10 on a 32GB machine, 20-24 on 64GB. Set it in your .env and restart.

    bash
    WORKER_CONCURRENCY=8 docker compose up -d

    Add more worker containers

    Run several worker containers on the same host. They pull from the same queue and share the same workspace volume, so no extra wiring is needed.

    bash
    docker compose up -d --scale worker=3

    Use a bigger machine

    When one host runs out of headroom, move the stack to a larger VM and raise concurrency to match. Cases over the current limit always wait in the queue and start as slots free, so a busy period queues rather than crashes.

    Data durability

    MongoDB and Redis write to named Docker volumes (mongodb-data and redis-data) declared in the compose file. Named volumes live outside the container lifecycle, so your cases, settings, stored credentials, and queued work survive container recreation, docker compose down and back up, image upgrades, and host reboots. You do not provision any storage yourself, Docker creates and manages these volumes on the host disk. Data is only lost if you explicitly remove the volumes with docker compose down -v or docker volume rm.

    The repository workspace at /data/operate/host_repo (the repo-data volume) is rebuildable, Operate re-clones from source control whenever it needs to, so it does not need backups.

    These volumes are only as durable as this host's disk. They are not replicated, so a disk failure or a lost host loses the data unless you run host-level backups (snapshot the volumes, or back up the MongoDB data directory). That is the real tradeoff against a managed database. If you want replication and managed backups, point Operate at managed MongoDB and Redis via OPERATE_MONGODB_URI and OPERATE_REDIS_URL (see step 3).
    Managed marketplace images are on the roadmap. One-click deploys (DigitalOcean first, then AWS, GCP, and Azure) are in progress. Until they land, the single-machine Docker Compose path above is the supported way to run Operate today.

    Still stuck? We can handle the full setup for you.

    Talk to us