Skip to content

monoceros status

Shows the workbench at a glance: the workspace container, its services and its long-running apps (running or stopped), the ports it routes, and what the yml built in - no Docker CLI needed. Handy before monoceros open to confirm the container is up, or to check whether your dev servers are running.

Terminal window
monoceros status <name> # the whole stack
monoceros status <name> <app|service> # narrow to one app or service
▸ acme
✓ monoceros-acme Up 2 hours
▸ Services
✓ postgres running :5432
✓ keycloak running :8080 ⚠ realm.json not mounted
· redis Exited (0) 1 hour ago
projects/web/keycloak/realm.json is never read. Add it to the `keycloak` service's `volumes:` in the yml:
- projects/web/keycloak/realm.json:/opt/keycloak/data/import/web.json:ro
Then: monoceros apply acme
▸ Apps
web
✓ dev http://acme-3000.localhost pid 412 (default)
· worker stopped
· admin stopped ⚠ :4200 not exposed
Expose them so the proxy can route them:
monoceros add-port acme 4200
▸ Ports
3000 acme.localhost · acme-3000.localhost
▸ Built in from the yml
Languages node, python
Features claude-code

Two registers, kept apart on purpose:

  • Runtime state - the container, its services and its apps - carries a (up) or · (down) marker. A running app shows its reachable URL and pid; a service shows its port.
  • Built in - the languages and features baked into the image, plus the ports it routes - comes straight from the yml and carries no marker. A feature is never “stopped”; it is in the image or it isn’t. This block reads from the yml, so it shows even when the container is down.

Two things look healthy in a docker ps sense and are not, so status marks them on the row they belong to and prints the way out underneath:

  • A target on a port the yml does not expose. The proxy has no route for it, so it gets the ⚠ :<port> not exposed marker and no .localhost URL, however well the process is running. One monoceros add-port call takes every port at once and pushes the routes to the proxy itself, so no apply is needed.
  • A service whose config file nothing mounts. A realm export an agent wrote under projects/<app>/keycloak/ reaches Keycloak only through a volume in the yml, and the agent cannot write that. The service row is marked and you get the volume line to paste, plus the apply that recreates the service.

monoceros check looks for both of these too, along with the rules that are not about “can it answer right now”.

A second argument scopes the output, just like monoceros logs: an app the launch config knows shows that app’s targets; otherwise it is read as a compose service.

Terminal window
monoceros status acme web # just the "web" app's targets
monoceros status acme postgres # just the postgres service
  • Read-only. It reports state and starts or stops nothing.
  • Reflects the real container state, read straight from Docker, not Monoceros’s idea of it.
  • Useful cold. Ports and the built-in block come from the yml, so status is informative even on a stopped or not-yet-applied workbench.