Skip to content

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.

KeyTypeDefaultWhat it does
ui.motionstring"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_keystring"ctrl+\"Leaves the session and keeps it running. Press it twice to send it to the agent.
attach.image_paste_keystring"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.scrollbackstring"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.inlinebooleanfalseStarts 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.
keymaptable—Rebinds launcher commands by name (“session: delete”). A value is a key, a list of keys, or "" to unbind. config keymap lists the names.
secretstable—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.

KeyTypeWhat it does
namestringNames the host in commands, as in attach <name>/<session>.
sshstringSays how to reach the host: a Host alias from your SSH config, or user@host[:port].
ssh_configstringAdds an SSH config file to read as well, for example a repo’s own.
labelstableTags the host with key-value pairs of your own, for example provider = “gcp”.
[provider]tableNames a script that starts and stops the host. Optional.
provider.scriptstringNames 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_attachbooleanStarts the host through the script when it does not answer and you attach or start a session.
[machine]tableRecords the VM, container or sandbox that host create made for this host. Hosts you added yourself have none.
machine.providerstringNames the provider that made the machine: “lima”, “docker” or “e2b”.
machine.idstringNames the machine as the provider knows it: the Lima instance, the Docker container, or the E2B sandbox ID.
machine.userstringRuns the helper and the sessions on docker and e2b hosts. Lima hosts use the user from Lima’s SSH config.
machine.imagestringNames the container image a docker host was made from.
machine.templatestringNames the E2B template a sandbox was made from. It sets the sandbox’s CPUs and memory.
machine.idle_stopstringSets 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_leasestringSets how long an E2B sandbox keeps running after the last client goes, while a session is working (60m by default).
machine.token_commandstringPrints 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.stdinstringSays 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).
secretsarray of stringLists secrets from config.toml that every new session on this host gets, for example [“ANTHROPIC_API_KEY”]. new --secret adds more.