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.2.tar.gz (173.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.2.2-py3-none-any.whl (66.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tide-0.2.2.tar.gz
  • Upload date:
  • Size: 173.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.2.2.tar.gz
Algorithm Hash digest
SHA256 d9f5a52cdb663dd572d32a64431d37c5ae4f91212eb6075db6429ec548c200a6
MD5 bb8a6978dc6d4a56189344c52a0546c5
BLAKE2b-256 1095a2fafcc91d2161f07aeb2743612bb4fbf38b58ea43f07886530e43d3ef1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tide-0.2.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: tide-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 66.9 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2c54087dc3cf95571c6c57c5fb05937098e31d134cf4fbdc999b87768aa3aca6
MD5 6ffbc2fd6e32c3427e72a729de23f5a1
BLAKE2b-256 8cdb7d2c37f1ae0431f78708ad7b1b207a386fa7fcc28b006a0a8698d5d6f699

See more details on using hashes here.

Provenance

The following attestation bundles were made for tide-0.2.2-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