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
- You create a cron job in the dashboard
- The gateway pushes the job to connected agents
- Each agent writes the job to
/etc/cron.d/croncommander - When cron fires, it runs
cc-agent exec - The exec wrapper captures output, timing, and exit code
- Results are sent to the daemon, then to the gateway
- 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.