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 agents into any of them.
  • ๐Ÿ”‘ 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 cockpit (run this inside a git repo)
tide

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

# 3. see your fleet
tide ls

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

Web cockpit

Prefer a browser? tide web 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, and diff review. Everything the CLI does, easier. It shares the same state, so agents launched in the browser show up in the terminal and vice-versa.

tide web                 # opens http://127.0.0.1:8765

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 TUI cockpit
tide web Open the web cockpit in your browser
tide up "<task>" [-p profile] Launch an agent
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 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.

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.2.4.tar.gz (177.7 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.2.4-py3-none-any.whl (70.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for tide-0.2.4.tar.gz
Algorithm Hash digest
SHA256 d931aa8e29af1c3e0db75640782d27646dfacd1eec46b8558a1b6607c260db54
MD5 70ca3ef81b91d017d022348a4333a4a6
BLAKE2b-256 6f931f01ca06bcc367d8211f94759cebd85a45300e1d4f58b7e25ab22973cf16

See more details on using hashes here.

Provenance

The following attestation bundles were made for tide-0.2.4.tar.gz:

Publisher: publish.yml on gauthierpiarrette/tide

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: tide-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 70.1 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.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 f75f0afdc2c18367c4fb876e675bd2dddaa7f0994f3e579e8bad07fdad368cba
MD5 e6132a3fac2ea1a5c5e7ee929eb1d36d
BLAKE2b-256 18465306fe79d2f48a7006273a3f675a15557a01e60aa79abb5df18ce3da47a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for tide-0.2.4-py3-none-any.whl:

Publisher: publish.yml on gauthierpiarrette/tide

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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