The NoneRuntime provides direct execution of agent commands and evaluation scripts on the local host machine. It is the default runtime environment for skill-up when no containerization (Docker) or remote sandboxing (OpenSandbox) is configured. While it offers the lowest overhead, it relies on host-level process isolation and temporary directory management to maintain workspace integrity.
The NoneRuntime implementation is located in internal/runtime/none.go44-47 It satisfies the Runtime interface by managing a local filesystem workspace and dispatching commands to the host's native shell.
When Create is called, the runtime allocates a temporary directory on the host using os.MkdirTemp with the pattern skill-up-* internal/runtime/none.go57-65
<skill>-workspace/.Close method removes the entire workspace directory tree unless cfg.Delete is set to false internal/runtime/none.go68-77 Preservation is useful for post-mortem debugging of artifacts internal/runtime/none.go72-74UploadFile, UploadDir, DownloadFile, and DownloadDir use standard os and filepath functions internal/runtime/none.go97-197 Relative paths are always resolved against the allocated workspace root via pathInWorkspaceOrAbs internal/runtime/none.go35-41UploadFile explicitly preserves source permission bits (e.g., the executable bit for scripts) by using os.Chmod after writing internal/runtime/none.go111-120 This ensures that skill-specific helper scripts remain runnable internal/runtime/none.go93-96The following diagram illustrates how a command moves from the Engine through the NoneRuntime to the Host OS.
None Runtime Execution Flow
Sources: internal/runtime/none.go199-240 internal/platform/platform.go99-110 internal/runtime/none.go35-41
To maintain cross-platform compatibility, NoneRuntime does not invoke binaries directly. Instead, it leverages the platform package's HostShell abstraction internal/platform/platform.go99-110
The platform.Host() function (invoked at internal/runtime/none.go206) detects the underlying operating system and returns a HostShell struct containing:
Shell descriptor describing the command language (POSIX vs CMD) internal/platform/platform.go101sh -c or bash -c) internal/platform/platform.go105MSYS_NO_PATHCONV for Git Bash on Windows) internal/platform/platform.go107-109| Feature | POSIX (Linux/Darwin) | Windows |
|---|---|---|
| Default Shell | sh or bash internal/platform/shell_other.go29-45 | cmd.exe or Git Bash |
| Process Group | Supported via Setpgid internal/runtime/none_exec_unix.go32 | Not supported natively internal/runtime/none_exec_other.go8 |
| Cancellation | SIGTERM followed by SIGKILL internal/runtime/none_exec_unix.go33-57 | cmd.Process.Kill() (direct child only) |
| Wait Delay | noneExecWaitDelay (2s) internal/runtime/none.go30 | noneExecWaitDelay (2s) for pipe closure internal/runtime/none.go26-30 |
Sources: internal/runtime/none.go20-31 internal/runtime/none_exec_unix.go1-67 internal/runtime/none_exec_other.go1-8
Users can explicitly define the path to their preferred bash interpreter using the SKILL_UP_BASH environment variable internal/platform/platform.go19 The DiscoverBash() function checks this override before searching the system PATH internal/platform/bash_other.go12-24 On Windows, it also checks well-known Git Bash locations while specifically excluding the WSL shim under System32 internal/platform/bash_windows.go25-43
The NoneRuntime manages environment variables through its Config.
mergeIntoEnvBaseline helper internal/runtime/runtime.go65-73cmd.Dir (Current Working Directory) is set to the allocated workspace path unless overridden in ExecOptions.Cwd internal/runtime/none.go222-226cmd.WaitDelay is set to noneExecWaitDelay (2 seconds) to ensure that Exec returns even if a child process holds stdio pipes open after the context is cancelled internal/runtime/none.go215 internal/runtime/none.go23-30A critical challenge in host execution is ensuring that orphaned background processes (descendants of the agent's command) do not survive after a timeout.
Process Grouping Logic
Sources: internal/runtime/none_exec_unix.go31-58 internal/runtime/none_exec_other.go1-8 internal/runtime/none.go211-215
On Unix systems, configureProcessGroup sets Setpgid: true internal/runtime/none_exec_unix.go32 When a context is cancelled, the runtime signals the entire process group with SIGTERM via signalGroupOrProcess internal/runtime/none_exec_unix.go62-67 If the group does not exit within noneExecKillGrace (1 second), it escalates to SIGKILL internal/runtime/none_exec_unix.go18 internal/runtime/none_exec_unix.go33-57 On Windows, where process groups are not natively supported, the runtime relies on noneExecWaitDelay to force-close stdio pipes and unblock the reader goroutines internal/runtime/none.go23-30
Every execution within the NoneRuntime is instrumented with OpenTelemetry. The Exec method starts a span named runtime.exec and attaches attributes for the command and working directory internal/runtime/none.go201-210
Sources: internal/runtime/none.go199-240 internal/runtime/none.go13-17
Refresh this wiki