Hosting & security
Isolation
Every bot runs in its own container, started by a separate hosting service — never inside the website's own process.
- Read-only root filesystem, with a small in-memory scratch space.
- All Linux capabilities dropped, no privilege escalation, a non-root user.
- CPU, memory and process limits taken from the owner's plan.
- A dedicated network on which bots cannot talk to each other.
- A private data volume per bot for its stored records.
The bot token and integration secrets are handed to the bot process over a pipe at startup. They are not baked into an image, written to disk, or placed in the container's environment.
The handler sandbox
Inside the container, generated and hand-written handler code runs in a separate JavaScript context with no access to Node's APIs: no modules, no filesystem, no process object, no timers, and string-to-code evaluation is disabled. Everything goes through the ctx API.
Outbound HTTP is blocked unless you allow-list a host under Configuration → Integrations, and only HTTPS is permitted.
Before any version is saved it is validated, and its code is statically analysed. Before the assistant's work reaches you it is also smoke-tested in a network-less copy of the runtime.
Health and recovery
- The bot reports a heartbeat every 15 seconds. One health check per minute is recorded while a bot should be running; uptime is computed from those checks.
- A crash triggers an automatic restart with exponential backoff. After repeated crashes within an hour the bot is stopped and you are notified, with the last error.
- A bot that stops sending heartbeats is treated as unresponsive and replaced.
- If a new version fails to start, the version that was running is restored automatically.
- When the hosting service itself restarts, every bot that should be running is started again.
If the hosting service is unreachable, the dashboard says so and shows a bot's status as unknown rather than guessing.
Logs
Standard output, errors, gateway events, command results, deployment steps and health events are recorded as they happen and streamed to your browser. Secrets are redacted before a line is stored, and again when logs are downloaded. A per-bot rate limit stops a runaway loop from flooding the log.
Your data
- Passwords are hashed with scrypt. Sessions are random tokens stored only as hashes.
- Bot tokens, integration secrets and Discord OAuth tokens are encrypted at rest.
- Sensitive administrative actions are written to an audit log.