OPERATIONS
Security model
Remote machine control is sensitive. Caterm combines authenticated owner and member checks with capabilities that the machine operator explicitly configures.
Trust boundaries
- Identity: the API validates Firebase signatures, issuer, audience, expiration, and token timestamps.
- Ownership: device use requires ownership or an active share; device management requires ownership.
- Enrollment: codes are short-lived and single-use; persistent credentials can be rotated or revoked.
- Files: operations are constrained to the daemon's configured root.
- Remote control: desktop viewing and input depend on local screen and input permissions.
- Codex: the selected working directory stays within the configured agent root; tool access follows the local CLI permission policy.
- Terminal: local shell streaming is enabled by default, can be disabled locally, and is not confined by the file root.
- Sharing: a device share grants all locally enabled capabilities. Conversation history and controls stay private to their creator; local files and agent credentials remain shared.
Production checklist
- Serve the web application and API from the same HTTPS origin.
- Use strong PostgreSQL and TURN secrets and keep them outside browser build variables.
- Choose the daemon account deliberately: agent and terminal processes inherit its OS privileges, including root.
- Choose the smallest practical file root.
- Disable terminal access when it is not required.
- Review device history and revoke devices you no longer recognize.
- Collect server logs without request bodies or authorization headers.
What Caterm does not provide
Caterm is not a replacement for host patching, disk encryption, backups, endpoint protection, network controls, or organizational access reviews. Firebase ID token validation also does not currently provide immediate account-revocation checks before a token expires.
Report a vulnerability
Please avoid public disclosure of an unpatched vulnerability. Contact the operator of your Caterm deployment or the project maintainer through the repository's private security-reporting channel.