Skip to main content

Mission control for your coding agents โ€” spin up, watch, and steer a fleet of AI coding agents from your terminal.

Project description

๐ŸŒŠ tide

Mission control for your coding agents.

Spin up, watch, and steer a fleet of AI coding agents โ€” each in its own isolated workspace โ€” from one delightful terminal cockpit.


Running coding agents today means babysitting: open a sandbox, set it up, launch the agent, repeat, then juggle a dozen terminals trying to remember which one is doing what. tide turns that into a single command and a calm dashboard.

  • ๐Ÿš€ Launch in one keystroke. Define an agent profile once โ€” repo, task, model, MCP servers, environment โ€” then cast off as many agents as you need.
  • ๐Ÿงญ Each agent in its own lane. Every run gets an isolated git worktree on its own branch, so agents never step on each other (or your working tree).
  • ๐Ÿ‘€ See what needs you. The dashboard ranks agents by who needs your attention โ€” failed and finished-with-changes float to the top; the calm ones stay out of your way.
  • ๐Ÿชต Live logs & diffs. Tail any agent's output and review its changes without leaving the terminal.
  • ๐Ÿ”Œ Bring your own agent. Defaults to Claude Code, but a profile can launch any command, so tide works with whatever you run.
  • ๐Ÿ–ฅ๏ธ Terminal or browser. A keyboard-driven TUI and a polished web cockpit, both over the same shared state.
  • ๐Ÿ›Ž๏ธ Event-driven. Point a Wiz / PagerDuty / Sentry / GitHub webhook at tide and a matching alert auto-launches an agent โ€” at the autonomy you choose (propose โ†’ it waits for your approval ยท auto โ†’ it runs immediately).
  • ๐Ÿ—‚๏ธ Across your org. Register repos by name and launch into any โ€” or fan one task out across many at once, an isolated agent (and PR) per repo.
  • ๐Ÿง  Planner. Hand tide one instruction and it works out which of your repos it touches and what each should change โ€” you review, then it dispatches.
  • ๐Ÿ”‘ Env once. Reusable env sets (optionally synced from GitHub) attach to profiles.
  • ๐Ÿงฉ Any provider. Claude Code, Codex, Gemini, Cursor, Aider โ€” or any command.
  • ๐Ÿงฑ Real isolation, when you want it. Run an agent on the host worktree, or inside a container built from the repo's .devcontainer โ€” just set workspace = "devcontainer" on its profile.

tide is local-first and zero-ops: no cloud account, no daemon, no infrastructure. It orchestrates git and your agent CLI on your machine.

Install

uv tool install tide     # recommended โ€” installs as an isolated tool
# or
pipx install tide
# or
pip install tide

Prefer source? uv tool install git+https://github.com/gauthierpiarrette/tide, or clone the repo and run uv tool install ..

Requires Python 3.11+ and git. To launch Claude Code agents, install the Claude Code CLI (claude).

Quickstart

# 1. open the web cockpit in your browser
tide

# 2. ...prefer the terminal? open the TUI instead
tide tui

# 3. ...or launch an agent straight from the shell
tide up "add retry logic to the upload client"

# 4. see your fleet
tide ls

The first time you run tide up, a starter profile is created for you. In the TUI (tide tui), press n to launch a new agent, enter to open one, s to stop it, and ? for the full keymap.

Web cockpit

Bare tide opens a full GUI on localhost with a rich composer โ€” multi-line prompts, pasted context, and drag-&-drop file attachments โ€” plus the live fleet, streaming output, diff review, and the planner. Everything the CLI does, easier. It shares the same state, so agents launched in the browser show up in the terminal (tide tui) and vice-versa.

tide web                 # opens http://127.0.0.1:8765

Across many repos

Registered repos aren't just one-at-a-time targets โ€” fan a single task out across several and tide launches one isolated agent (and one PR) per repo:

tide up "bump the logging lib to v2 and fix the call sites" -r api -r web -r workers

Each agent works in its own worktree on its own branch, so the changes โ€” and the PRs โ€” stay independent. Agents that find nothing to do finish quietly with no PR, so you only get a pull request where the change actually applied. In the web cockpit, the composer's repo picker selects several the same way.

Planner โ€” one instruction, the right repos

Not sure which repos a change belongs in? Let tide plan it. tide plan surveys your registered repos (a quick code search for the terms in your instruction) and proposes which repos are in scope and a tailored prompt for each, with shared cross-repo context threaded through every one.

tide plan new "rename BillingAccount.tier to plan and update everything that reads it"
#   โ†’ surveys repos, prints a per-repo plan (which repos ยท what each will change)

tide plan apply <id>        # dispatch the selected repos โ€” one agent & PR each

The plan is a proposal you review โ€” deselect a repo before applying, or pass --apply to dispatch immediately. Planning uses your configured Claude CLI by default (override with TIDE_PLANNER_BIN).

Profiles

A profile is a reusable recipe for spinning up an agent. Profiles live in ~/.config/tide/config.toml (global) or .tide/config.toml (per-project).

[profiles.default]
description = "Claude Code on the current repo"
command = 'claude -p "{task}"'        # {task} is filled in at launch
base_branch = "main"                   # branch each worktree forks from

[profiles.review]
description = "Read-only reviewer with the GitHub MCP server"
command = 'claude -p "{task}"'
model = "claude-opus-4-8"
env = { CLAUDE_PERMISSION_MODE = "plan" }

  [profiles.review.mcp_servers.github]
  command = "npx"
  args = ["-y", "@modelcontextprotocol/server-github"]

When a profile defines mcp_servers, tide writes a .mcp.json into that agent's worktree before launch โ€” so each agent gets exactly the tools you chose.

To run a profile's agents inside a container (real dependency/OS isolation), set workspace = "devcontainer" (or tide profile add <name> --workspace devcontainer). tide bind-mounts the worktree into the container, so diffs still flow back to the host. Requires Docker and the Dev Containers CLI (npm i -g @devcontainers/cli).

How it works

            tide up "task"
                  โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚   FleetManager     โ”‚   tracks every agent, persists state
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                  โ”‚ creates
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚  WorktreeRuntime   โ”‚   git worktree + branch  โ†’  isolated lane
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                  โ”‚ runs your profile's command (cwd = worktree)
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚   your agent CLI   โ”‚   e.g. `claude -p "..."`
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Each agent is a real OS process running your command inside a dedicated git worktree. tide records its branch, status, runtime, and diff, and surfaces the ones that need you. Stopping an agent terminates its process group; removing one cleans up its worktree.

Commands

Command What it does
tide Open the web cockpit in your browser
tide tui Open the terminal cockpit (TUI)
tide web Open the web cockpit (with --host/--port options)
tide up "<task>" [-p profile] [-r repo โ€ฆ] Launch an agent โ€” repeat -r to fan out across repos
tide ls List the fleet
tide logs <id> Stream an agent's output
tide follow <id> "<msg>" Send a follow-up turn into the agent's worktree
tide stop <id> Stop a running agent
tide done <id> Mark a finished agent reviewed (clears it from the inbox)
tide rm <id> Remove an agent and clean up its worktree
tide profile ls List profiles
tide profile add <name> Create/update a profile (provider/workspace)
tide approve <id> Approve a trigger-proposed agent
tide repo add/ls/rm Manage the org repo registry
tide plan new "<instruction>" Survey repos & propose a per-repo plan
tide plan apply <id> Dispatch a plan's selected repos (one agent & PR each)
tide plan ls/show/rm List, inspect, or delete plans
tide env set/ls/sync-github Manage reusable env sets
tide trigger add/ls/rm/toggle Manage event triggers (sensors)
tide trigger webhook-url Print the inbound webhook URL

Sensors & triggers

Turn events into agents. Create a trigger, point an alert source at tide's webhook, and matching events launch an agent automatically โ€” gated by the autonomy level you chose.

tide trigger add wiz-high -p investigate -m severity=high -a propose
tide trigger webhook-url        # โ†’ point Wiz / PagerDuty / Sentry / GitHub here

A high-severity alert then auto-proposes an investigator agent built from the payload; you approve it (tide approve <id> or the web button) and it runs in its own isolated worktree. Schedule triggers (--every <seconds>) run on a timer.

Roadmap

  • Remote & cloud workspaces โ€” run agents on a remote Docker host or a cloud sandbox, beyond the local devcontainer backend.
  • Routing flywheel โ€” use the recorded outcomes to send each task to the provider/profile that has historically succeeded at it.
  • Team plane โ€” shared profiles, secrets, and triggers; audit and cost.
  • Parallel exploration โ€” launch the same task N ways, keep the best.
  • Planner in the cockpit โ€” a visual plan-review UI (the planner ships CLI-first today).

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tide-0.3.4.tar.gz (203.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tide-0.3.4-py3-none-any.whl (86.5 kB view details)

Uploaded Python 3

File details

Details for the file tide-0.3.4.tar.gz.

File metadata

  • Download URL: tide-0.3.4.tar.gz
  • Upload date:
  • Size: 203.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tide-0.3.4.tar.gz
Algorithm Hash digest
SHA256 1d0a8ceac969fd98c830edab6d4823716b4db88a8178e3f21823732d555a5991
MD5 713c087c494b3fbf032eb2a31e4d1a62
BLAKE2b-256 763530d3d3327bab77ce76a2f67bc33e3d7f2fec093fd0980bb2f62653d9bc68

See more details on using hashes here.

File details

Details for the file tide-0.3.4-py3-none-any.whl.

File metadata

  • Download URL: tide-0.3.4-py3-none-any.whl
  • Upload date:
  • Size: 86.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tide-0.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 090f44bd0884ed4cddc228a1c9bc03a414852053cf630a7a602a1ca33380aa88
MD5 96b1d7b1cbbb55dbcf2918db00a819ba
BLAKE2b-256 f970f106e658cfbdfdf48fe27fd071dce5820cc3f1575c215c2c9d28c551fa3e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page