Instructions

Install on the machine that runs the apps.

Then any MCP client on that machine can list targets, run them, and read evidence. The daemon binds 127.0.0.1 only.

1 · Package

GitHub install

Requires Node.js 24+. macOS, Linux, and Windows. Commands are baton, baton-daemon, and baton-mcp.

Current public path
npm install -g github:kanumuri9593/Baton#v0.2.6
baton app
Pin a release
npm install -g github:kanumuri9593/Baton#v0.2.6

On npm: npm install -g baton-run. One-shot without a global install: npx -y --package=github:kanumuri9593/Baton#v0.2.6 baton list.

2 · MCP

Point the client at baton-mcp

The first tool call starts the daemon if needed. Use this with any client that accepts an MCP server configuration.

Global install
{
  "mcpServers": {
    "baton": { "command": "baton-mcp" }
  }
}
npx
{
  "mcpServers": {
    "baton": {
      "command": "npx",
      "args": ["-y", "--package=github:kanumuri9593/Baton#v0.2.6", "baton-mcp"]
    }
  }
}

MCP cannot boot simulators yet. Use the CLI baton boot "iPhone 17 Pro", or run against a device that is already up. run_target waits only briefly for a device.

3 · App and CLI

People get a panel. Scripts get an exit code.

baton app

macOS compiles a small AppKit host from hud/ on first launch (Xcode or Command Line Tools). Linux and Windows open an app-style browser window. baton hud remains an alias. No App Store download.

Useful commands

baton list · baton run "<target>" --branch origin/main · baton reload --all · baton logs "<session>" -n 80 · baton doctor --json · baton diagnose

4 · Troubleshooting

ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING

An old baton-run@0.2.0 tried to import TypeScript directly. Remove it, then install from GitHub.

Repair
npm uninstall -g baton-run
npm install -g github:kanumuri9593/Baton#v0.2.6

Do not put secrets in launch files that will be committed. Do not expose the daemon port.