Configuration
simstim reads two files from ~/.config/simstim/ (or $XDG_CONFIG_HOME/simstim/). simstim config path prints where they are.
config.toml
Your preferences. Every key is optional; a missing key takes its default.
| Key | Type | Default | What it does |
|---|---|---|---|
ui.motion | string | "auto" | Turns the launcher’s animation on or off: “auto” (off inside SSH sessions, Emacs and JetBrains terminals, and with NO_COLOR or TERM=dumb), “on” or “off”. |
attach.detach_key | string | "ctrl+\" | Leaves the session and keeps it running. Press it twice to send it to the agent. |
attach.image_paste_key | string | "ctrl+v" | Uploads the image on the clipboard to the host and pastes its path. Without an image, the key goes to the agent. |
attach.scrollback | string | "keep" | Says what happens to the terminal’s scrollback when you attach again: “keep” replays what you missed after what you saw, “clear” starts from a clean screen. |
agents.inline | boolean | false | Starts each agent that has one in its inline mode, where it draws in the terminal’s normal screen, so your terminal keeps its scrollback: Claude Code’s classic renderer, Codex with –no-alt-screen. Off by default, so each agent starts as its own defaults say. new --inline does it for one session. |
keymap | table | — | Rebinds launcher commands by name (“session: delete”). A value is a key, a list of keys, or "" to unbind. config keymap lists the names. |
secrets | table | — | Names environment variables for sessions, each with a command that prints its value on this computer, such as a keychain or password manager read: OPENAI_API_KEY = “op read op://dev/openai/key”. A session gets one only when asked (new --secret, or a host’s secrets). The value goes to that session’s environment and is never stored. |
hosts.toml
The hosts you added. host add writes it, and you can edit it by hand. Each host is a [[host]] table.
| Key | Type | What it does |
|---|---|---|
name | string | Names the host in commands, as in attach <name>/<session>. |
ssh | string | Says how to reach the host: a Host alias from your SSH config, or user@host[:port]. |
ssh_config | string | Adds an SSH config file to read as well, for example a repo’s own. |
labels | table | Tags the host with key-value pairs of your own, for example provider = “gcp”. |
[provider] | table | Names a script that starts and stops the host. Optional. |
provider.script | string | Names a program that starts, stops and reports on the host. It gets the action as its argument and a JSON job on stdin (see examples/providers). |
provider.wake_on_attach | boolean | Starts the host through the script when it does not answer and you attach or start a session. |
[machine] | table | Records the VM, container or sandbox that host create made for this host. Hosts you added yourself have none. |
machine.provider | string | Names the provider that made the machine: “lima”, “docker” or “e2b”. |
machine.id | string | Names the machine as the provider knows it: the Lima instance, the Docker container, or the E2B sandbox ID. |
machine.user | string | Runs the helper and the sessions on docker and e2b hosts. Lima hosts use the user from Lima’s SSH config. |
machine.image | string | Names the container image a docker host was made from. |
machine.template | string | Names the E2B template a sandbox was made from. It sets the sandbox’s CPUs and memory. |
machine.idle_stop | string | Sets how long the host may go with no client connected and no session working before it stops: a duration such as “30m”, or “never”. A Lima VM powers itself off (30m by default; it needs passwordless sudo). An E2B sandbox pauses when its lease runs out (15m by default). |
machine.busy_lease | string | Sets how long an E2B sandbox keeps running after the last client goes, while a session is working (60m by default). |
machine.token_command | string | Prints the E2B API key, for example a read from your keychain. It is used when E2B_API_KEY is not set and the E2B CLI is not logged in. The key is never written down. |
machine.stdin | string | Says how keys reach an E2B sandbox: “send” (one request for each chunk, the default) or “stream” (one long request; not yet proved on E2B’s servers). |
secrets | array of string | Lists secrets from config.toml that every new session on this host gets, for example [“ANTHROPIC_API_KEY”]. new --secret adds more. |