{"id":45166763,"url":"https://github.com/ariguillegp/rivet","last_synced_at":"2026-02-27T08:29:34.388Z","repository":{"id":336151770,"uuid":"1143044174","full_name":"ariguillegp/rivet","owner":"ariguillegp","description":"workspace manager for humans to steer agents","archived":false,"fork":false,"pushed_at":"2026-02-20T06:09:25.000Z","size":2550,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-20T08:56:36.064Z","etag":null,"topics":["amp","bash","bubbletea","claude","codex","git-worktrees","go","opencode","shell","zsh"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ariguillegp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-27T05:38:33.000Z","updated_at":"2026-02-20T06:02:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ariguillegp/rivet","commit_stats":null,"previous_names":["ariguillegp/solo","ariguillegp/rivet"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ariguillegp/rivet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariguillegp%2Frivet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariguillegp%2Frivet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariguillegp%2Frivet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariguillegp%2Frivet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ariguillegp","download_url":"https://codeload.github.com/ariguillegp/rivet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ariguillegp%2Frivet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29888164,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T07:54:54.515Z","status":"ssl_error","status_checked_at":"2026-02-27T07:54:49.177Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amp","bash","bubbletea","claude","codex","git-worktrees","go","opencode","shell","zsh"],"created_at":"2026-02-20T07:03:01.693Z","updated_at":"2026-02-27T08:29:34.383Z","avatar_url":"https://github.com/ariguillegp.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo.png\" width=\"200\" alt=\"rivet logo\"\u003e\n\u003c/p\u003e\n\n## Description\nA lightweight TUI to manage your fleet of agents across all your projects.\n\n## Main Features at a Glance\n\n- Guided 3-step workflow: pick a project, pick/create a workspace (git worktree), then launch a tool (`opencode`, `amp`, `claude`, `codex`, or `none`).\n- Fast fuzzy filtering in every step (projects, workspaces, tools, and sessions).\n- Scans `~/Projects` (or provided roots) up to 2 levels deep, skipping hidden/common vendor directories.\n- Built-in tmux session switcher: press `ctrl+s` from the main screens to open **Active tmux sessions**, filter them, and press `enter` to attach.\n- In wide terminals, **Active tmux sessions** shows a table with `Project`, `Branch`, and `Last active`.\n- Workspace tmux sessions are prewarmed in the background and reused if already running. Each supported tool (`opencode`, `amp`, `claude`, `codex`, and `none`) is opened in its own tmux window inside the same workspace session.\n- Project/workspace lifecycle management in-app (create and delete with confirmation and cleanup). Worktree deletions are limited to rivet-managed worktrees under `~/.rivet/worktrees` (project root is protected).\n- Stale worktree references (from manually deleted directories) are automatically pruned whenever the worktree list is loaded, keeping the list accurate.\n- Keyboard-first UX with help modal (`?`), theme picker (`ctrl+t`), and a persistent help bar.\n- Optional non-interactive mode for launching sessions directly via CLI flags.\n\n## Run agent tool in worktree (session caching)\nAfter selecting a project/worktree tuple, the program prewarms one tmux session for that workspace (creating it if needed) and ensures a window exists for each supported tool. Existing workspace sessions are reused, and selecting `none` opens a shell window immediately.\n\nhttps://github.com/user-attachments/assets/424cf20e-86cb-4f13-83f1-dfe42d0bcf01\n\n## Create/Delete worktree\nDeleting a worktree also kills the workspace tmux session using it (including its tool windows). Only the project root and rivet-managed worktrees under `~/.rivet/worktrees` are listed, and the root worktree cannot be deleted from the UI.\n\nhttps://github.com/user-attachments/assets/269449c1-9ffd-43cb-925e-ea1a2dcb5fe4\n\n## Create/Delete project\nDeleting a project also kills its workspace tmux sessions (including their tool windows).\n\nhttps://github.com/user-attachments/assets/890bf029-02ef-4b64-8bdf-ffe7ba3b9592\n\n## Help Menu\nCommon actions are visible in the help bar at the bottom for better discoverability, but a more comprehensive help menu is one key press \"?\" away on every view.\n\nhttps://github.com/user-attachments/assets/7b25b6fe-40a9-4dcc-a692-1151d92a9ab4\n\n## Prerequisites\n\n- tmux\n- git\n- `opencode`, `amp`, `claude`, and/or `codex` (optional for `none` sessions)\n- Projects must be valid git repositories. The tool by default will look for projects under `~/Projects` and additional worktrees will be created under `~/.rivet/worktrees/`\n\n## Installation\n\n```bash\n$ mkdir -p ~/Projects ~/.rivet/worktrees\n$ go install github.com/ariguillegp/rivet/cmd/rv@latest\n```\n\n## Usage\n\n### Recommended way\n\nCreate keybindings to run this tool from your regular shell environment and from inside tmux sessions. If are you are not using `~/Projects/` as your base directory for your project repositories, you will need to run `rv YOUR_BASE_DIR` to find out the repos you wanna work on.\n\n**Bash**\n\nAdd the following line to your `~/.bashrc`\n\n```bash\nbind -x '\"\\C-f\": \"rv YOUR_BASE_DIR\"'\n```\n\n**tmux**\n\nAdd the following line to your `~/.config/tmux/tmux.conf` so you can use `tmux-prefix + f` to launch `rv` from a tmux session\n\n```tmux\nbind-key f run-shell \"tmux has-session -t rv-launcher 2\u003e/dev/null \u0026\u0026 tmux kill-session -t rv-launcher; tmux new-session -d -s rv-launcher 'bash -lc \\\"rv YOUR_BASE_DIR\\\"'; tmux switch-client -t rv-launcher\"\n```\n\nThis launches rv in a temporary tmux session to keep your current session clean.\n\n**Zsh**\n\nAdd the following line to your `~/.zshrc`\n\n```bash\nbindkey -s '^f' 'rv YOUR_BASE_DIR\\n'\n```\n\n**tmux**\n\nAdd the following line to your `~/.config/tmux/tmux.conf` so you can use `tmux-prefix + f` to launch `rv` from a tmux session\n\n```tmux\nbind-key f run-shell \"tmux has-session -t rv-launcher 2\u003e/dev/null \u0026\u0026 tmux kill-session -t rv-launcher; tmux new-session -d -s rv-launcher 'zsh -lc \\\"rv YOUR_BASE_DIR\\\"'; tmux switch-client -t rv-launcher\"\n```\n\nThis launches rv in a temporary tmux session to keep your current session clean.\n\n### Interactive launch\n\n```bash\nrv [directories...]\n```\n\nRivet starts tools directly inside tmux sessions using your default shell, so no\nlogin shell flags are required.\n\nBy default, rv scans `~/Projects` (personal preference). Pass custom directories as arguments:\n\n```bash\nrv ~/projects ~/work\n```\n\nScanning goes up to 2 directory levels deep and skips common vendor/cache directories such as `.git`, `node_modules`, `vendor`, `.cache`, `.venv`, `__pycache__`, and `target`.\n\n### Non-Interactive Launch\n\nOpen a session directly without the UI:\n\n```bash\nrv --project my-project --worktree main --tool opencode [--detach]\n\nrv --project my-project --worktree main --tool amp [--detach]\n\nrv --project my-project --worktree main --tool claude [--detach]\n\nrv --project my-project --worktree main --tool codex [--detach]\n\nrv --project my-project --worktree main --tool none [--detach]\n```\n\n`--project` and `--worktree` accept names or paths. If the worktree doesn't exist yet, rivet creates a new worktree/branch automatically. Use `--create-project` to initialize a missing project (in the first root or at the provided path).\n\nCreate a new project non-interactively:\n\n```bash\nrv --project my-project --worktree main --tool opencode --create-project\n```\n\n## Acknowledgments\n\nInspired by:\n* [agent-of-empires](https://github.com/njbrake/agent-of-empires) (Rust + ratatui + tmux)\n* [agent-deck](https://github.com/asheshgoplani/agent-deck) (GO + BubbleTea + tmux)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fariguillegp%2Frivet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fariguillegp%2Frivet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fariguillegp%2Frivet/lists"}