# Paseo runtime backend Paseo is an experimental macOS GUI terminal backend. It provides task workspaces and terminals while Treehouse continues to provide git worktrees. [`configuration.md`](configuration.md#runtime-backend-configbackend--fm_backend) owns shared selection and metadata semantics. ## Setup Pick Paseo when you already use the app as your terminal and want tasks as tabs in its sidebar, with the same UX as Herdr: in Firstmate's own workspace when Firstmate runs inside Paseo, otherwise in one `firstmate` workspace per project. Paseo is macOS-only, GUI-first, and unsuitable for a headless or SSH-only Firstmate session. Prerequisites: - Paseo 0.8 or newer, installed from [paseo.sh](https://paseo.sh) (`/Applications/Paseo.app`). - `jq` for JSON responses. - The universal harness and toolchain requirements in [`configuration.md`](configuration.md#toolchain). The bundled CLI is not always installed on `PATH` with the app. The adapter prefers `command -v paseo` and otherwise uses `/Applications/Paseo.app/Contents/Resources/bin/paseo`. No socket-access configuration is needed. The daemon listens on `127.0.0.1:6767` by default, and `paseo status` reports its reachability. The adapter starts the daemon with `paseo start` only when it is simply not up yet, and fails fast with a pointer here when a started daemon does not become reachable. Select Paseo with local `config/backend` containing `paseo`, `FM_BACKEND=paseo` for one launch, or an explicit request to Firstmate. It is never runtime auto-detected; see "Selection is explicit" below. A spawn stops with an actionable setup message when the CLI, minimum version, `jq`, or daemon reachability is unavailable. Routine supervision uses `bin/fm-peek.sh ` and `FM_HOME= bin/fm-send.sh ''` without bringing the Paseo window forward. Verify setup by spawning a small task and confirming metadata contains `backend=paseo`, `paseo_terminal_id=`, and `paseo_workspace_id=`. ## Selection is explicit Paseo is explicit-only, like zellij and orca: `config/backend`, `FM_BACKEND=paseo`, or `--backend paseo` select it, and nothing else does. Paseo stamps its markers into every descendant process: a Paseo agent exports `PASEO_AGENT_ID`, a terminal tab exports `PASEO_TERMINAL_ID` and `PASEO_WORKSPACE_ID`, and both carry `__CFBundleIdentifier=sh.paseo.desktop`. A tmux server started from a Paseo tab inherits all of them, so their presence proves only that some ancestor was Paseo, never that the captain chose it. Reading them as a selection would make Paseo an ambient default, which "Authority is explicit and never inferred" rules out; `fm_backend_detect` therefore ignores them. The markers are still useful once Paseo has been selected explicitly. When Firstmate itself runs inside Paseo, the adapter uses them to find Firstmate's own workspace and puts task tabs there (see "Task shape and metadata"). ## Task shape and metadata Paseo's sidebar is project > workspace > terminal tab, and each task is one terminal tab. When Firstmate itself runs inside Paseo, every task tab goes into Firstmate's own workspace, whatever the task's project, so work appears beside the captain's session and nothing new is added to the sidebar. A Paseo terminal tab names its workspace through `PASEO_WORKSPACE_ID`; a Paseo agent exports only `PASEO_AGENT_ID`, so its workspace is the one live workspace whose cwd is the Firstmate home, and two or more such workspaces count as unknown. Otherwise the adapter uses one shared workspace per project, the same container shape as Herdr: titled `firstmate` (or `2ndmate-` for a secondmate home), created once with `workspace create --path --isolation local --title