Skip to main content
Get Started
Virtual Machine

Resource Limits

Secure Exec resource limits, defaults, backpressure constants, and warning names.

Secure Exec bounds each VM with per-VM resource caps so untrusted guest code can never exhaust the host. At a glance:

  • Per-VM caps: Each VM gets its own ceilings on concurrent processes, open file descriptors, sockets, total filesystem bytes, and WASM stack depth.
  • Kernel-enforced: The kernel mediates and accounts for every allocation. There is no path for the guest to reach host resources around these limits.
  • Guest-local failure: A guest that exceeds a cap fails inside its own VM with a normal POSIX errno, exactly as it would on real Linux.
  • Host is unaffected: Hitting a limit terminates or fails the guest operation only; the sidecar and host process stay intact and the VM keeps running.
  • Operator-raisable: The caller configures the limits per VM and can raise or lower them to fit the workload.
  • Observable: Queue, resource, memory, and CPU limits emit limit_warning structured events and WARN logs as they approach or hit a cap.

Operator constants

These constants are the default caps behind the limits.* VM config fields.

Config fieldConstantDefault
limits.resources.cpuCountDEFAULT_VIRTUAL_CPU_COUNT1
limits.resources.maxProcessesDEFAULT_MAX_PROCESSES256
limits.resources.maxOpenFdsDEFAULT_MAX_OPEN_FDS256
limits.resources.maxPipesDEFAULT_MAX_PIPES128
limits.resources.maxPtysDEFAULT_MAX_PTYS128
limits.resources.maxSocketsDEFAULT_MAX_SOCKETS256
limits.resources.maxConnectionsDEFAULT_MAX_CONNECTIONS256
limits.resources.maxSocketBufferedBytesDEFAULT_MAX_SOCKET_BUFFERED_BYTES4 MiB
limits.resources.maxSocketDatagramQueueLenDEFAULT_MAX_SOCKET_DATAGRAM_QUEUE_LEN1024
limits.resources.maxFilesystemBytesDEFAULT_MAX_FILESYSTEM_BYTES64 MiB
limits.resources.maxInodeCountDEFAULT_MAX_INODE_COUNT16384
limits.resources.maxBlockingReadMsDEFAULT_BLOCKING_READ_TIMEOUT_MS5000 ms
limits.resources.maxPreadBytesDEFAULT_MAX_PREAD_BYTES64 MiB
limits.resources.maxFdWriteBytesDEFAULT_MAX_FD_WRITE_BYTES64 MiB
limits.resources.maxProcessArgvBytesDEFAULT_MAX_PROCESS_ARGV_BYTES1 MiB
limits.resources.maxProcessEnvBytesDEFAULT_MAX_PROCESS_ENV_BYTES1 MiB
limits.resources.maxReaddirEntriesDEFAULT_MAX_READDIR_ENTRIES4096
limits.resources.maxWasmMemoryBytesDEFAULT_MAX_WASM_MEMORY_BYTES128 MiB
limits.resources.maxWasmFuelnoneunset, runtime default applies
limits.resources.maxWasmStackBytesnoneunset, engine default applies
limits.http.maxFetchResponseBytesDEFAULT_MAX_FETCH_RESPONSE_BYTES1 MiB
limits.tools.defaultToolTimeoutMsDEFAULT_TOOL_TIMEOUT_MS30000 ms
limits.tools.maxToolTimeoutMsMAX_TOOL_TIMEOUT_MS300000 ms
limits.tools.maxRegisteredToolkitsMAX_REGISTERED_TOOLKITS64
limits.tools.maxRegisteredToolsPerVmMAX_REGISTERED_TOOLS_PER_VM256
limits.tools.maxToolsPerToolkitMAX_TOOLS_PER_TOOLKIT64
limits.tools.maxToolSchemaBytesMAX_TOOL_SCHEMA_BYTES16 KiB
limits.tools.maxToolExamplesPerToolMAX_TOOL_EXAMPLES_PER_TOOL16
limits.tools.maxToolExampleInputBytesMAX_TOOL_EXAMPLE_INPUT_BYTES4 KiB
limits.plugins.maxPersistedManifestBytesMAX_PERSISTED_MANIFEST_BYTES64 MiB
limits.plugins.maxPersistedManifestFileBytesMAX_PERSISTED_MANIFEST_FILE_BYTES1 GiB
limits.acp.maxReadLineBytesDEFAULT_ACP_MAX_READ_LINE_BYTES16 MiB
limits.acp.stdoutBufferByteLimitDEFAULT_ACP_STDOUT_BUFFER_BYTE_LIMIT1 MiB
limits.jsRuntime.v8HeapLimitMbDEFAULT_V8_HEAP_LIMIT_MB128 MiB
limits.jsRuntime.capturedOutputLimitBytesDEFAULT_JS_CAPTURED_OUTPUT_LIMIT_BYTES16 MiB
limits.jsRuntime.stdinBufferLimitBytesDEFAULT_JS_STDIN_BUFFER_LIMIT_BYTES16 MiB
limits.jsRuntime.eventPayloadLimitBytesDEFAULT_JS_EVENT_PAYLOAD_LIMIT_BYTES1 MiB
limits.jsRuntime.v8IpcMaxFrameBytesDEFAULT_V8_IPC_MAX_FRAME_BYTES64 MiB
limits.jsRuntime.syncRpcWaitTimeoutMsnoneunset, engine default applies
limits.python.outputBufferMaxBytesDEFAULT_PYTHON_OUTPUT_BUFFER_MAX_BYTES1 MiB
limits.python.executionTimeoutMsDEFAULT_PYTHON_EXECUTION_TIMEOUT_MS300000 ms
limits.python.maxOldSpaceMbDEFAULT_PYTHON_MAX_OLD_SPACE_MB0, Pyodide engine default
limits.python.vfsRpcTimeoutMsDEFAULT_PYTHON_VFS_RPC_TIMEOUT_MS30000 ms
limits.wasm.maxModuleFileBytesDEFAULT_WASM_MAX_MODULE_FILE_BYTES256 MiB
limits.wasm.capturedOutputLimitBytesDEFAULT_WASM_CAPTURED_OUTPUT_LIMIT_BYTES16 MiB
limits.wasm.syncReadLimitBytesDEFAULT_WASM_SYNC_READ_LIMIT_BYTES16 MiB

Backpressure constants

These internal queue caps are not per-VM config fields. They are tracked so slow consumers produce limit_warning events instead of silent stalls.

Warning nameConstantDefault
javascript_event_channelJAVASCRIPT_EVENT_CHANNEL_CAPACITY512 frames
v8_session_framesV8_SESSION_FRAME_CHANNEL_CAPACITY1024 frames
sidecar_stdin_framesMAX_STDIN_FRAME_QUEUE128 frames
sidecar_stdout_framesMAX_STDOUT_FRAME_QUEUE4096 frames
completed_sidecar_responsesMAX_COMPLETED_SIDECAR_RESPONSES10000 responses

Audited constants

The limits audit classifies every limit-shaped constant as policy, policy-deferred, or invariant. Keep this table in sync with crates/sidecar/tests/fixtures/limits-inventory.json.

ConstantClassSource
MAX_SYMLINK_DEPTHinvariantcrates/execution/assets/v8-bridge.source.js
MAX_BENCHMARK_ITERATIONSinvariantcrates/execution/src/benchmark.rs
MAX_BENCHMARK_WARMUP_ITERATIONSinvariantcrates/execution/src/benchmark.rs
JAVASCRIPT_CAPTURED_OUTPUT_LIMIT_BYTESpolicycrates/execution/src/javascript.rs
JAVASCRIPT_EVENT_CHANNEL_CAPACITYinvariantcrates/execution/src/javascript.rs
JAVASCRIPT_EVENT_PAYLOAD_LIMIT_BYTESpolicycrates/execution/src/javascript.rs
KERNEL_STDIN_BUFFER_LIMIT_BYTESpolicycrates/execution/src/javascript.rs
NODE_SYNC_RPC_RESPONSE_QUEUE_CAPACITYinvariantcrates/execution/src/javascript.rs
DEFAULT_NODE_IMPORT_CACHE_MATERIALIZE_TIMEOUTinvariantcrates/execution/src/node_import_cache.rs
DEFAULT_PYTHON_EXECUTION_TIMEOUT_MSpolicycrates/execution/src/python.rs
DEFAULT_PYTHON_MAX_OLD_SPACE_MBpolicycrates/execution/src/python.rs
DEFAULT_PYTHON_OUTPUT_BUFFER_MAX_BYTESpolicycrates/execution/src/python.rs
DEFAULT_PYTHON_VFS_RPC_TIMEOUT_MSpolicycrates/execution/src/python.rs
V8_SESSION_FRAME_CHANNEL_CAPACITYinvariantcrates/execution/src/v8_host.rs
MAX_FRAME_SIZEpolicycrates/execution/src/v8_ipc.rs
DEFAULT_WASM_EXECUTION_TIMEOUT_MSpolicy-deferredcrates/execution/src/wasm.rs
DEFAULT_WASM_PREWARM_TIMEOUT_MSinvariantcrates/execution/src/wasm.rs
MAX_SYNC_WASM_PREWARM_MODULE_BYTESinvariantcrates/execution/src/wasm.rs
MAX_WASM_IMPORT_SECTION_ENTRIESinvariantcrates/execution/src/wasm.rs
MAX_WASM_MEMORY_SECTION_ENTRIESinvariantcrates/execution/src/wasm.rs
MAX_WASM_MODULE_FILE_BYTESpolicycrates/execution/src/wasm.rs
MAX_WASM_VARUINT_BYTESinvariantcrates/execution/src/wasm.rs
WASM_CAPTURED_OUTPUT_LIMIT_BYTESpolicycrates/execution/src/wasm.rs
WASM_SYNC_READ_LIMIT_BYTESpolicycrates/execution/src/wasm.rs
DEFAULT_STREAM_DEVICE_READ_BYTESinvariantcrates/kernel/src/device_layer.rs
MAX_FDS_PER_PROCESSinvariantcrates/kernel/src/fd_table.rs
SHEBANG_LINE_MAX_BYTESinvariantcrates/kernel/src/kernel.rs
MAX_SNAPSHOT_DEPTHinvariantcrates/vfs/src/posix/overlay_fs.rs
MAX_PIPE_BUFFER_BYTESinvariantcrates/kernel/src/pipe_manager.rs
MAX_ALLOCATED_PIDinvariantcrates/kernel/src/process_table.rs
MAX_SIGNALinvariantcrates/kernel/src/process_table.rs
MAX_CANONinvariantcrates/kernel/src/pty.rs
MAX_PTY_BUFFER_BYTESinvariantcrates/kernel/src/pty.rs
DEFAULT_BLOCKING_READ_TIMEOUT_MSpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_CONNECTIONSpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_FD_WRITE_BYTESpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_FILESYSTEM_BYTESpolicycrates/vfs/src/posix/usage.rs
DEFAULT_MAX_INODE_COUNTpolicycrates/vfs/src/posix/usage.rs
DEFAULT_MAX_OPEN_FDSpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_PIPESpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_PREAD_BYTESpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_PROCESS_ARGV_BYTESpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_PROCESS_ENV_BYTESpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_PROCESSESpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_PTYSpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_READDIR_ENTRIESpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_WASM_MEMORY_BYTESpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_SOCKET_BUFFERED_BYTESpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_SOCKET_DATAGRAM_QUEUE_LENpolicycrates/kernel/src/resource_accounting.rs
DEFAULT_MAX_SOCKETSpolicycrates/kernel/src/resource_accounting.rs
MAX_PATH_LENGTHinvariantcrates/vfs/src/posix/vfs.rs
MAX_SYMLINK_DEPTHinvariantcrates/vfs/src/posix/vfs.rs
MAX_PATHinvariantcrates/vfs/src/engine/types.rs
MAX_SYMLINK_DEPTHinvariantcrates/vfs/src/engine/types.rs
DEFAULT_METADATA_CACHE_ENTRIESinvariantcrates/sidecar/src/plugins/chunked_local.rs
DEFAULT_METADATA_CACHE_ENTRIESinvariantcrates/sidecar/src/plugins/chunked_s3.rs
CONTROL_FRAME_QUEUE_CAPACITYinvariantcrates/secure-exec-client/src/transport.rs
EVENT_CHANNEL_CAPACITYinvariantcrates/secure-exec-client/src/transport.rs
PENDING_REQUEST_LIMITinvariantcrates/secure-exec-client/src/transport.rs
REQUEST_FRAME_QUEUE_CAPACITYinvariantcrates/secure-exec-client/src/transport.rs
DEFAULT_KERNEL_STDIN_READ_MAX_BYTESinvariantcrates/sidecar/src/execution.rs
DEFAULT_KERNEL_STDIN_READ_TIMEOUT_MSinvariantcrates/sidecar/src/execution.rs
EXITED_PROCESS_SNAPSHOT_RETENTIONinvariantcrates/sidecar/src/execution.rs
JAVASCRIPT_NET_POLL_MAX_WAITinvariantcrates/sidecar/src/execution.rs
MAX_JAVASCRIPT_COMMAND_REDIRECT_DEPTHinvariantcrates/sidecar/src/execution.rs
MAX_PER_PROCESS_STATE_HANDLESpolicy-deferredcrates/sidecar/src/execution.rs
SQLITE_JS_SAFE_INTEGER_MAXinvariantcrates/sidecar/src/execution.rs
VM_FETCH_BUFFER_LIMIT_BYTESpolicycrates/sidecar/src/execution.rs
DEFAULT_ACP_MAX_READ_LINE_BYTESpolicycrates/sidecar/src/limits.rs
DEFAULT_ACP_STDOUT_BUFFER_BYTE_LIMITpolicycrates/sidecar/src/limits.rs
DEFAULT_JS_CAPTURED_OUTPUT_LIMIT_BYTESpolicycrates/sidecar/src/limits.rs
DEFAULT_JS_EVENT_PAYLOAD_LIMIT_BYTESpolicycrates/sidecar/src/limits.rs
DEFAULT_JS_STDIN_BUFFER_LIMIT_BYTESpolicycrates/sidecar/src/limits.rs
DEFAULT_MAX_FETCH_RESPONSE_BYTESpolicycrates/sidecar/src/limits.rs
DEFAULT_PYTHON_EXECUTION_TIMEOUT_MSpolicycrates/sidecar/src/limits.rs
DEFAULT_PYTHON_MAX_OLD_SPACE_MBpolicycrates/sidecar/src/limits.rs
DEFAULT_PYTHON_OUTPUT_BUFFER_MAX_BYTESpolicycrates/sidecar/src/limits.rs
DEFAULT_PYTHON_VFS_RPC_TIMEOUT_MSpolicycrates/sidecar/src/limits.rs
DEFAULT_TOOL_TIMEOUT_MSpolicycrates/sidecar/src/limits.rs
DEFAULT_V8_IPC_MAX_FRAME_BYTESpolicycrates/sidecar/src/limits.rs
DEFAULT_V8_HEAP_LIMIT_MBpolicycrates/sidecar/src/limits.rs
DEFAULT_WASM_CAPTURED_OUTPUT_LIMIT_BYTESpolicycrates/sidecar/src/limits.rs
DEFAULT_WASM_MAX_MODULE_FILE_BYTESpolicycrates/sidecar/src/limits.rs
DEFAULT_WASM_SYNC_READ_LIMIT_BYTESpolicycrates/sidecar/src/limits.rs
MAX_PERSISTED_MANIFEST_BYTESpolicycrates/sidecar/src/limits.rs
MAX_PERSISTED_MANIFEST_FILE_BYTESpolicycrates/sidecar/src/limits.rs
MAX_REGISTERED_TOOLKITSpolicycrates/sidecar/src/limits.rs
MAX_REGISTERED_TOOLS_PER_VMpolicycrates/sidecar/src/limits.rs
MAX_TOOL_EXAMPLE_INPUT_BYTESpolicycrates/sidecar/src/limits.rs
MAX_TOOL_EXAMPLES_PER_TOOLpolicycrates/sidecar/src/limits.rs
MAX_TOOL_SCHEMA_BYTESpolicycrates/sidecar/src/limits.rs
MAX_TOOL_TIMEOUT_MSpolicycrates/sidecar/src/limits.rs
MAX_TOOLS_PER_TOOLKITpolicycrates/sidecar/src/limits.rs
MAX_PERSISTED_MANIFEST_BYTESpolicycrates/sidecar/src/plugins/google_drive.rs
MAX_PERSISTED_MANIFEST_FILE_BYTESpolicycrates/sidecar/src/plugins/google_drive.rs
MAX_HOST_DIR_READ_BYTESpolicycrates/sidecar/src/plugins/host_dir.rs
DEFAULT_MAX_FULL_READ_BYTESpolicy-deferredcrates/sidecar/src/plugins/sandbox_agent.rs
DEFAULT_PROCESS_TIMEOUT_MSpolicy-deferredcrates/sidecar/src/plugins/sandbox_agent.rs
DEFAULT_TIMEOUT_MSpolicy-deferredcrates/sidecar/src/plugins/sandbox_agent.rs
DEFAULT_COMPLETED_RESPONSE_CAPinvariantcrates/sidecar/src/protocol.rs
DEFAULT_MAX_FRAME_BYTESpolicycrates/sidecar/src/protocol.rs
DEFAULT_MAX_FRAME_BYTESinvariantcrates/sidecar/src/wire.rs
MAX_COMPLETED_SIDECAR_RESPONSESinvariantcrates/sidecar/src/service.rs
MAX_OUTBOUND_SIDECAR_REQUESTSinvariantcrates/sidecar/src/service.rs
MAX_PENDING_SIDECAR_RESPONSESinvariantcrates/sidecar/src/service.rs
MAX_PROCESS_EVENT_QUEUEinvariantcrates/sidecar/src/service.rs
HOST_REALPATH_MAX_SYMLINK_DEPTHinvariantcrates/sidecar/src/state.rs
VM_LISTEN_PORT_MAX_METADATA_KEYinvariantcrates/sidecar/src/state.rs
MAX_EVENT_READY_QUEUEinvariantcrates/sidecar/src/stdio.rs
MAX_STDIN_FRAME_QUEUEinvariantcrates/sidecar/src/stdio.rs
MAX_STDOUT_FRAME_QUEUEinvariantcrates/sidecar/src/stdio.rs
DEFAULT_TOOL_TIMEOUT_MSpolicycrates/sidecar/src/tools.rs
MAX_REGISTERED_TOOLKITSpolicycrates/sidecar/src/tools.rs
MAX_REGISTERED_TOOLS_PER_VMpolicycrates/sidecar/src/tools.rs
MAX_TOOL_DESCRIPTION_LENGTHpolicy-deferredcrates/sidecar/src/tools.rs
MAX_TOOL_EXAMPLE_INPUT_BYTESpolicycrates/sidecar/src/tools.rs
MAX_TOOL_EXAMPLES_PER_TOOLpolicycrates/sidecar/src/tools.rs
MAX_TOOL_NAME_LENGTHpolicy-deferredcrates/sidecar/src/tools.rs
MAX_TOOL_SCHEMA_BYTESpolicycrates/sidecar/src/tools.rs
MAX_TOOL_SCHEMA_DEPTHinvariantcrates/sidecar/src/tools.rs
MAX_TOOL_TIMEOUT_MSpolicycrates/sidecar/src/tools.rs
MAX_TOOLKIT_NAME_LENGTHpolicy-deferredcrates/sidecar/src/tools.rs
MAX_TOOLS_PER_TOOLKITpolicycrates/sidecar/src/tools.rs
MAX_VM_LAYERSpolicy-deferredcrates/sidecar/src/vm.rs
MAX_CBOR_BRIDGE_CONTAINER_ITEMSinvariantcrates/v8-runtime/src/bridge.rs
MAX_CBOR_BRIDGE_DEPTHinvariantcrates/v8-runtime/src/bridge.rs
MAX_PENDING_PROMISESinvariantcrates/v8-runtime/src/bridge.rs
MAX_VM_CONTEXTSinvariantcrates/v8-runtime/src/bridge.rs
SESSION_OUTPUT_CHANNEL_CAPACITYinvariantcrates/v8-runtime/src/embedded_runtime.rs
MAX_CJS_NAMED_EXPORTSinvariantcrates/v8-runtime/src/execution.rs
MAX_CJS_RUNTIME_EXPORT_NAME_LENinvariantcrates/v8-runtime/src/execution.rs
MAX_MODULE_BATCH_RESOLVE_RESPONSE_BYTESinvariantcrates/v8-runtime/src/execution.rs
MAX_MODULE_PREFETCH_BATCH_SIZEinvariantcrates/v8-runtime/src/execution.rs
MAX_MODULE_PREFETCH_GRAPH_MODULESinvariantcrates/v8-runtime/src/execution.rs
MAX_MODULE_RESOLVE_CACHE_ENTRIESinvariantcrates/v8-runtime/src/execution.rs
MAX_MODULE_RESOLVE_MODULESinvariantcrates/v8-runtime/src/execution.rs
MAX_FRAME_SIZEpolicycrates/v8-runtime/src/ipc_binary.rs
MAX_UNHANDLED_PROMISE_REJECTIONSinvariantcrates/v8-runtime/src/isolate.rs
NEAR_HEAP_LIMIT_HEADROOM_BYTESinvariantcrates/v8-runtime/src/isolate.rs
MAX_DEFERRED_SESSION_COMMANDSinvariantcrates/v8-runtime/src/session.rs
MAX_DEFERRED_SYNC_MESSAGESinvariantcrates/v8-runtime/src/session.rs
SESSION_COMMAND_CHANNEL_CAPACITYinvariantcrates/v8-runtime/src/session.rs
MAX_SNAPSHOT_BLOB_BYTESinvariantcrates/v8-runtime/src/snapshot.rs
MAX_V8_BRIDGE_CODE_BYTESinvariantcrates/v8-runtime/src/snapshot.rs
TRAILING_OUTPUT_DRAIN_MAX_MSinvariantpackages/core/src/kernel-proxy.ts
DEFAULT_SIDECAR_EVENT_BUFFER_CAPACITYpolicy-deferredpackages/core/src/native-client.ts
DEFAULT_SIDECAR_FRAME_TIMEOUT_MSpolicy-deferredpackages/core/src/native-client.ts
MAX_SYMLINK_DEPTHinvariantpackages/core/src/test-runtime.ts

Warning names

The limit registry emits stable names in limit_warning.detail.limit. limits.resources.maxWasmStackBytes is audited as a configured constant above, but it does not emit limit_warning until runtime stack enforcement has a reliable exhaustion edge.

When a warning fires depends on whether the limit has a continuously-sampled usage:

  • Queue, Resource, and CPU limits emit an edge-triggered ~80% approach warning (re-armed once usage drains back below ~50%), so the operator gets a heads-up before the cap is reached. The CPU budgets (v8_cpu_time_ms, v8_wall_clock_ms, wasm_fuel_ms) are sampled by the execution watchdogs; the queue/resource gauges are sampled as items flow through them.
  • Memory limits (v8_heap_bytes, wasm_memory_bytes) emit at the terminal edge — V8’s near-heap-limit callback fires as the isolate is about to exceed its heap cap, and WASM memory is checked at module-instantiation time. There is no separate 80% heap sample because a V8 isolate cannot be safely read from the watchdog thread.

CPU budgets therefore emit both the ~80% approach warning and a terminal exhaustion warning when the watchdog finally terminates execution.

CategoryWarning names
Queuejavascript_event_channel, v8_session_frames, sidecar_stdin_frames, sidecar_stdout_frames, completed_sidecar_responses, pending_process_events, pending_sidecar_responses, outbound_sidecar_requests
Resourcevm_processes, vm_open_fds, vm_pipes, vm_ptys, vm_sockets, vm_connections, vm_socket_buffered_bytes, vm_socket_datagram_queue_len, vm_filesystem_bytes, vm_inodes
Memoryv8_heap_bytes, wasm_memory_bytes
CPUv8_cpu_time_ms, v8_wall_clock_ms, wasm_fuel_ms

agentOS layers its own session and adapter limits on top of Secure Exec.