Diagram 1: Fast triage flow
Setup and startup failures
Docker unreachable
Symptomisol8 setupfails early with Docker check errors- local
isol8 runfails before code runs
- start Docker daemon/Desktop
- ensure current user can access Docker socket
isol8 serve fails: missing API key
Symptom
[ERR] API key required...
isol8 serve fails in built CLI mode with platform/binary errors
Symptom
- unsupported platform (
os-arch) - server binary not found for version
- verify platform is supported
- force refresh:
- if release artifact is missing, use Bun/dev path temporarily (
bun run dev -- serve ...)
Standalone server arg parse errors
Symptom- invalid port
- unknown argument
- use:
- avoid unsupported flags in standalone mode
isol8 serve fails because port is in use
Symptom
EADDRINUSE- startup fails on
localhost:3000
- current behavior prompts you to:
- enter another port, or
- let isol8 find an available port automatically
- to set a port non-interactively, use precedence:
--portISOL8_PORTPORT- fallback
3000
Input and runtime resolution failures
File not found
Symptom[ERR] File not found: ...
- correct file path
- or use inline mode:
Runtime auto-detect fails
Symptom[ERR] Cannot detect runtime for ...
- file extension not mapped in runtime registry
Deno inline execution fails
SymptomDeno adapter requires a file path — inline code is not supported.
- run Deno from a file (
.mts) instead of-e
Unknown runtime error
SymptomUnknown runtime: "..."
- use one of:
python,node,bun,deno,bash
Resource limit and output issues
Timeout failures
Symptom- long-running process terminated near timeout limit
- command is wrapped with timeout and killed on expiry
Memory limit format errors
SymptomInvalid memory limit format: "..."
- use accepted formats like
512m,1g,256k, or bytes
OOM / abrupt kill
Symptom- process exits unexpectedly, often with kill-like behavior
- increase memory and/or reduce workload footprint:
Output truncated
Symptom- CLI warning:
[WARN] Output was truncated - result has
truncated: true
Large output can be a symptom of logging loops. Prefer reducing verbosity before only raising cap.
Package installation and filesystem issues
Package install fails (exit code + stderr)
SymptomPackage install failed (exit code ...): ...
- validate package names
- confirm runtime package source accessibility (if using networked install)
- test smaller package set first
- prefer pre-baked dependencies via
isol8 setupfor production stability
Native extension problems
Symptom- import/load issues for native libs (
.so)
- executable paths required for native extension loading
- keep installs in
/sandbox(default behavior) - increase sandbox capacity if needed:
Persistence, sessions, and file API issues
No active container. Call execute() first in persistent mode.
Symptom
- local
putFile/getFilefails immediately
- no persistent container has been initialized yet
- run one
execute()first in persistent mode, then file APIs
Runtime switch rejected in persistent mode
SymptomCannot switch runtime from "python" to "node"...
- create separate persistent engine/session per runtime
Session not found in remote file/session calls
Symptom
404 Session not found
- missing or stale session id
- initialize session with
/executeusing samesessionId - verify session not auto-pruned
Sessions disappearing unexpectedly
Checks- inspect:
cleanup.autoPrunecleanup.maxContainerAgeMs
- increase idle window or delete sessions explicitly at end of workflow
Networking and security policy failures
Filtered mode blocks expected hosts
Symptom- outbound requests fail in
--net filtered
- correct regex to match exact hostname
- remember blacklist wins over whitelist
Filtered mode setup errors (proxy/iptables)
SymptomProxy failed to start within timeoutFailed to set up iptables rules...
- container-level startup issue
- capability/environment constraints
- retry with
--debugand inspect logs - validate Docker environment and image health
Network logs missing
Symptom- no
networkLogsin result
- both must be true:
network: "filtered"logNetwork: true
Seccomp/profile issues
Symptom- seccomp profile load errors before execution
- verify
security.customProfilePathif using custom profile - keep
security.seccomp: "strict"for default hardening; standalone binaries can use the embedded default profile when on-disk profile files are absent - if strict/custom profile loading fails, execution is blocked by design
Remote API and client errors
401 vs 403 auth failures
Symptom- API rejects request
401: missingAuthorizationheader403: invalid Bearer token
Remote health check failures
SymptomRemote server health check failed: ...
- verify host/port
- confirm server process is running
Streaming client errors
SymptomStream failed: ...No response body for streaming
- verify endpoint availability and proxy behavior
- test with non-streaming
/executefirst to isolate issue
Remote file operations fail in client
SymptomFile operations require a sessionId (persistent mode)
- instantiate
RemoteIsol8withsessionIdfor file operations
High-signal debug playbook
- Reproduce with debug logs:
- Inspect effective config:
- Minimize to simplest repro:
- inline code
- explicit runtime
- no packages
--net none
- Add options back one by one:
- network
- install packages
- persistence/session
- custom limits
- For remote issues, test raw endpoints with
curlbefore SDK integration.
FAQ
Why does local CLI `--persistent` not behave like a long-lived server session?
Why does local CLI `--persistent` not behave like a long-lived server session?
CLI is process-scoped and stops engine on exit. For multi-call persistence, use remote mode with stable
sessionId.Should I debug with `--persist` in production?
Should I debug with `--persist` in production?
Usually no.
--persist is best for controlled debugging because it intentionally leaves containers running.What is the most common root cause of 'it worked yesterday'?
What is the most common root cause of 'it worked yesterday'?
Config drift or runtime/package/environment changes. Always confirm effective config and runtime selection first.