The
tuple CLI keeps user-level preferences in ~/.tuple/cli.toml. If the file exists, the CLI reads it on every invocation.The file is created automatically the first time the CLI saves something to it. The containing directory is created with permissions 0700 and the file is written with 0600. The format is TOML.Top-level keys
Harness entries
Each[harness.<key>] table describes one agent. The same table is used for three different purposes; which keys you set determines the kind of entry:- Settings-only entry — set
model,reasoning, orextra_args(but neithercommandnorurl). This applies launch settings to a built-in agent without defining a new agent. - Custom command agent — set
commandto an argv template. Use{PROMPT}as a placeholder for the prompt text. If you omit{PROMPT}, the prompt is appended as a final positional argument. - Custom URL agent — set
urlto a URL template with{PROMPT}(URL-encoded) as the placeholder. The URL is opened via the platform opener instead of exec’ing a process.
command and url are mutually exclusive on a single entry. If both (or neither) are set on a custom entry, the entry is ignored.Custom entries with the same key as a built-in agent (claude, codex, cursor, copilot, opencode, pi, droid) shadow the built-in.Keys
The
model and reasoning values are dropped silently for agents that do not support those flags (cursor and opencode have no reasoning flag, droid has neither). tuple connect prints a warning on stderr when this happens.--model and --reasoning flags on tuple connect override the saved values for a single invocation.Example
What’s next
- Connect an AI agent — the primary consumer of this file.
- Command reference — every command and flag.
- MCP server — register Tuple with an AI coding agent.

