← Back to home

How CronCommander Works

A simple architecture. No magic. Just reliable plumbing.

graph TB
    subgraph Your["Your Server"]
        CRON["System Cron"] --> AGENT["cc-agent"]
    end
    
    subgraph CC["CronCommander"]
        LISTENER["Gateway"]
        REGISTRY[("Agents & Jobs")]
        SERVER["Web Console"]
        LISTENER <--> REGISTRY
        SERVER <--> REGISTRY
    end
    
    AGENT <-->|"WebSocket"| LISTENER
    USER(("You")) <-->|"Browser"| SERVER
    
    classDef userStyle fill:#e65100,stroke:#bf360c,color:#fff
    class USER userStyle
                

Three components. One purpose.

CronCommander is built from simple, focused pieces that do one thing well.

cc-agent

A single Go binary that runs on your servers. It wraps your cron jobs, captures their output, and reports back to CronCommander.

Two modes:
daemon — maintains connection, syncs jobs
exec — wraps and reports each execution

Gateway

The single point of contact for all agents. Handles registration, heartbeats, and receives execution reports in real-time via WebSocket.

Pushes job definitions to agents whenever you create or update jobs in the dashboard.

Web Console

The web interface where you see everything. Your agents. Your jobs. Every execution. All in one place.

Manage jobs centrally. Changes propagate to agents automatically.

The execution flow

  1. You create a cron job in the dashboard
  2. The gateway pushes the job to connected agents
  3. Each agent writes the job to /etc/cron.d/croncommander
  4. When cron fires, it runs cc-agent exec
  5. The exec wrapper captures output, timing, and exit code
  6. Results are sent to the daemon, then to the gateway
  7. You see the execution in your dashboard — within seconds

Your commands never leave your servers.
The agent runs your jobs locally. Only the metadata — what ran, when, and what happened — is reported back.

What stays on your servers

The agent is intentionally minimal. It doesn't:

  • Replace cron — it works alongside it
  • Execute remote commands — jobs are defined locally or via the dashboard
  • Require root — runs as a dedicated user with minimal permissions
  • Phone home constantly — just a heartbeat every 60 seconds

Open and inspectable

The agent is open source. The protocol is documented. You can read every line of code that runs on your servers.

View cc-agent on GitHub →