Skip to main content
Comis can run as a system or user systemd service on Linux. The managed-host installer is the source of truth for both unit types: it resolves the installed Node.js and daemon paths, writes the unit, and enables and starts it unless the corresponding installer opt-outs are selected.
systemd is Linux-only. Use pm2 on macOS. Comis requires Node.js 22.19.0 or newer; service-managed installs require a system-installed Node binary rather than a version-manager shim.

Install safely

Download the installer, inspect it, and preview its host changes before running it:
The default --service auto selection is: Select a mode explicitly with --service systemd, --service systemd-user, or --service none. Run bash comis-install.sh --help for the complete set of service, browser, and autostart options. The system service normally keeps data and configuration under /home/comis/.comis; the exact service home is resolved from the selected user. Its environment file is /etc/comis/env. The user service uses ~/.comis for data, configuration, and its environment file.
The installer can provision an Xvfb companion only for a system service. A systemd-user install explicitly uses headless browser mode and does not render a comis-xvfb.service dependency or DISPLAY=:99. For installer-managed headed mode, use a root system-service install.

Manage the service

For a system service:
For a user service:
User services normally stop after logout. Enable lingering if this service must continue without an active login session:
Check application readiness independently of systemd’s process state:

Managed unit contract

The installer renders one checksum-tagged comis.service unit. It refuses to overwrite a unit whose managed body was edited by hand. KillMode=process has a deliberate tradeoff: after a hard crash, another long-lived child can remain briefly until the daemon restarts. Graceful shutdown still cleans up registered children, and terminal sandbox children use their own parent-death behavior. When system-scope Xvfb provisioning succeeds, the installer also writes /etc/systemd/system/comis-xvfb.service. The two services share only the X11 socket through /run/comis-x11; the daemon sees that socket read-only.

Configuration and overrides

Prefer rerunning the reviewed installer when the installed binary path, service identity, browser mode, or hardening contract changes. A managed unit includes a checksum; if its body has been edited, the installer leaves it untouched and reports how to regenerate it. Use a systemd drop-in for an intentional local override instead of editing the managed unit:
For a user service, use the corresponding systemctl --user edit, daemon-reload, and restart commands. Review overrides carefully: changing the service type, kill mode, namespace policy, or write paths can disable restart behavior, durable terminals, or command isolation. After changing /etc/comis/env for a system service or ~/.comis/env for a user service, restart the matching unit. Do not place credentials in config.yaml; use Comis’s secret-management flow.

Troubleshooting

Inspect the rendered unit and recent logs before changing it:
For a user service, add --user to systemctl and journalctl as shown above. If repeated startup failures reached the unit’s start limit, fix the reported cause and clear the failed state:
See Logging for structured logs and Troubleshooting for daemon and gateway checks.

Linux installation

Install Comis and review Linux-specific dependencies.

Daemon

Understand startup, health, and shutdown behavior.

Node permissions

Review the runtime permission boundary and compatibility tradeoffs.

Docker

Run Comis without a host systemd unit.