Skip to content

A preset is a TOML file with one or more [[bundles]] tables, each containing one or more [[bundles.tools]] tables.

Bundle fields

toml
[[bundles]]
id = "barebones"          # required, unique, machine-readable
name = "barebones"        # required, displayed in picker
description = "..."       # optional, shown in info card
default = true            # optional, pre-selects bundle in picker
requires = ["node-lts"]   # optional, gate bundle until tool is selected
FieldTypeRequiredNotes
idstringyesunique across all bundles
namestringyesshown in picker
descriptionstringnoone-liner, shown in info card
defaultboolnopre-select in picker
requires[]stringnotool names that must be selected first

Tool fields

toml
  [[bundles.tools]]
  name = "git"                                  # required
  source = "brew"                               # required
  homepage = "https://git-scm.com"
  description = "Distributed version control."
  install_mac = "brew install git"
  install_linux = "sudo apt-get install -y git"
  mandatory = false
  post_install = ["git config --global init.defaultBranch main"]
  skill_url = "https://..."                     # only for source=skills
FieldTypeRequiredNotes
namestringyesbinary name, also used for detect probe
sourcestringyesone of brew, apt, mise, npm, curl, skills, custom
homepagestringnoshown in info card
descriptionstringnoshown in info card
install_macstringone ofinstall command on macOS
install_linuxstringone ofinstall command on Linux
mandatoryboolnoalways-on, can't be unchecked
skip_macboolnohide this tool on macOS (host filter applied before render)
skip_linuxboolnohide this tool on Linux (host filter applied before render)
post_install[]stringnoshell commands chained after main install
skill_urlstringyes if source=skillsURL passed to npx skills add
mcp_typestringnostdio (default), http, or sse
mcp_packagestringyes if mcp_type=stdionpm package installed globally + spawned via npx
mcp_commandstringnooverride stdio launch binary (default: npx)
mcp_args[]stringnoextra args appended to the stdio launch command
mcp_urlstringyes if mcp_type=http or sseendpoint for remote MCP server
mcp_headersmap[string]stringnoHTTP headers sent with every remote request
target_harnesses[]stringnoharness IDs to auto-register with; ["all"] = every harness lfg knows
env_vars[]stringnoruntime env vars surfaced in info card + done screen

At least one of install_mac / install_linux is required. post_install failures surface as warnings — the main install still counts as success.

Use skip_mac / skip_linux when a tool only makes sense on one platform. Built-in terminal-essentials uses both: ghostty ships only via macOS cask, and the brew zsh override is Linux-only since recent macOS already ships a current zsh. Filtered tools never appear in the picker, so users on the other OS don't see a placeholder they can't act on.

Source backends

SourceWhat it does
brewbrew install <name> (macOS + linuxbrew on Linux)
aptsudo apt-get install -y <name> (Linux)
misemise use -g <plugin>@<ver> for language runtimes
npmnpm i -g <pkg>
curlarbitrary curl … | sh install scripts
skillsnpx skills add <skill_url>
mcpinstall (npm for stdio, no-op for remote) + auto-register with every target harness on PATH (gated on node-lts)
customthe install_mac / install_linux strings as-is

brew, mise, and node are bootstrap-able — if any selected tool needs them and they're not on PATH, lfg installs them first.

Version pins

@<ver> in any install command is parsed and shown in the picker as PlannedVersion while the live registry probe is in flight:

toml
install_mac = "npm i -g typescript@5.4.0"

If the registry probe succeeds, the picker shows → vX.Y.Z (latest). If it fails or times out, it falls back to the parsed pin.

Sample

See testdata/sample-preset.toml in the repo for a complete working example.