High-performance local developer workspace — editor, terminals, AI chat, git diff, notes, prompt queue. Rust BE + SolidJS FE. Cross-platform.
See the codeAgentGrove is a local developer workspace that keeps your projects, git worktrees, terminal, database, notes, team chat, and AI agents in one window — plus a light mobile view on the same URL for when you're away from your desk. The backend is Rust; the UI is SolidJS. It runs on Linux, macOS, and Windows.
A short screen recording of the main flows. Click the thumbnail to watch:
# Install prerequisites (macOS with Homebrew)
brew install node pnpm just
# Rust toolchain — project pins 1.95 via rust-toolchain.toml
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Clone and run
git clone https://github.com/arnabk/agentgrove.git
cd agentgrove
just dev # starts BE (hot reload) + FE (HMR) on http://localhost:5173
On Linux, install the same packages with your distro's package manager (e.g. apt install nodejs pnpm or pacman -S node pnpm just). Windows users can use winget install Rustlang.Rustup OpenJS.NodeJS pnpm.just or the rustup and pnpm installers.
just dev runs in the foreground and stops when you close the terminal or
reboot. To have AgentGrove start automatically on login and restart itself
if it ever crashes, install it as a native OS service (no Docker — it keeps
full access to git, the filesystem, terminals, and your agent CLIs):
just service-install # macOS launchd · Linux systemd --user · Windows Task Scheduler
just service-uninstall # stop + remove (your data in ./.data is untouched)
The app then serves on http://localhost:4317 (backend + frontend on one
port) and comes back on its own after a reboot. For a plain foreground run
without hot reload, use just console (or just start). See
Troubleshooting if the page ever looks blank or empty.
What you can do with it today.
git pull --ff-only) from the project menu; never a surprise merge commitorigin/<base_ref> (the branch it was created from) into its branch; conflicts abort cleanly and are surfaced, never left half-mergedpnpm install) with live console outputcreating and pre_script states are visible inline; a worktree whose pre-script fails is removed automatically (git worktree + branch + record) so no invalid worktrees lingerglab mr view), not just GitHubexit closes the tab within ~200mscodex exec) via CLI subprocess passthrough (user-authenticated)marked + DOMPurify; syntax-highlighted codetool_use events and stream errors) is streamed to the chat as icon + name + command preview rows/compact — summarize the conversation and start a fresh provider session in place; works across all CLI providers (Claude, opencode, Kimi, Codex)--resume, opencode --session + --dir, Kimi --session, Codex exec resume; stale opencode sessions auto-recover and retry with recent context; the UI shows "Retrying with fresh context…" during auto-recovery instead of going silent/ menu with provider commands + user-defined prompt templates--dangerously-skip-permissions with per-chat override/ws channelsOpen the same URL on a phone and you get a shell built for it — no horizontal scrolling, no desktop chrome. Chosen by viewport, so there's nothing to install and no second address to remember.
matchMedia picks the shell; override with ?ui=mobile, ?ui=desktop, or ?ui=auto, and there's a "Use the desktop version" link in Settings/ws?topic=sync channel, so a chat you start at your desk shows up on the phone without a refresh, and deep links open the same scope on eithernucleo-matcher powered; sub-10ms search across 100k filesignore crate's parallel walker (same as ripgrep)<state_dir>/logs/mem.log (size-rotated) for after-the-fact leak debugging; warns on sustained climbjust restore-db <name> to recover from any snapshotAGENTGROVE_GOOGLE_CLIENT_ID + _SECRET to require login; server-side OAuth (secret never touches the browser)AGENTGROVE_AUTH_ALLOWED_DOMAINS) and/or exact email (AGENTGROVE_AUTH_ALLOWED_EMAILS)/api + /ws to the backend, so one tunnel to :5173 serves the whole app from a single origin; its file route is locked down so it can't leak the state dir (guide)docs/SECURITY.md for setup + the Google Cloud Console redirect URIjust dev runs BE (cargo-watch) + FE (Vite HMR) together.sh + .ps1 script pairs; PathBuf onlyconfirm/alert replace native dialogscore / ui / features / shells, with the boundaries enforced by eslint rather than convention, so the desktop and mobile shells can be worked on in parallel (layout)Blank page or empty app (no projects) after a reboot. The dev server
isn't running, so the frontend has no backend to talk to — your data is
safe, the backend is just down. Start it with just dev (or install the
service, see Keep it running).
Verify the backend with curl -s http://localhost:4317/health →
{"status":"ok",...}.
"I lost all my data!" after restarting the backend by hand. You almost
certainly didn't. The backend defaults AGENTGROVE_PORT to a random
port when the variable is unset, so launching ./target/debug/agentgrove
directly makes the frontend unable to reach it and the app looks empty.
Your database is untouched at ./.data/agentgrove.sqlite (with timestamped
copies under ./.data/backups/). Always start via just dev / just start / just console / the service, which set AGENTGROVE_PORT=4317.
Backend won't build: feature 'edition2024' is required … Cargo 1.83.
A system/Homebrew cargo is shadowing rustup's on your PATH. This
project pins Rust 1.95 via rust-toolchain.toml; put rustup first:
export PATH="$HOME/.cargo/bin:$PATH". The just run scripts already do
this for you.
Service installed but the app never comes up (macOS, repo on an external
drive). launchd can't open a job's log files on a non-boot volume and
fails with EX_CONFIG (78). The installer already routes the supervisor
log to ~/Library/Logs/agentgrove.service.*.log to avoid this; if you
hand-rolled a plist, do the same. App logs remain in .data/logs/.
Missing source: could not find Cargo.toml / crates/agentgrove-*.
Your checkout is a partial sparse checkout. Restore the full tree with
git sparse-checkout disable — it does not touch ./.data or
node_modules.
All detailed docs live under docs/:
mem.log)TypeScript
50.7%
Rust
43.4%
Shell
2.3%
CSS
2.0%
High-performance local developer workspace — editor, terminals, AI chat, git diff, notes, prompt queue. Rust BE + SolidJS FE. Cross-platform.
See the codeAgentGrove is a local developer workspace that keeps your projects, git worktrees, terminal, database, notes, team chat, and AI agents in one window — plus a light mobile view on the same URL for when you're away from your desk. The backend is Rust; the UI is SolidJS. It runs on Linux, macOS, and Windows.
A short screen recording of the main flows. Click the thumbnail to watch:
# Install prerequisites (macOS with Homebrew)
brew install node pnpm just
# Rust toolchain — project pins 1.95 via rust-toolchain.toml
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Clone and run
git clone https://github.com/arnabk/agentgrove.git
cd agentgrove
just dev # starts BE (hot reload) + FE (HMR) on http://localhost:5173
On Linux, install the same packages with your distro's package manager (e.g. apt install nodejs pnpm or pacman -S node pnpm just). Windows users can use winget install Rustlang.Rustup OpenJS.NodeJS pnpm.just or the rustup and pnpm installers.
just dev runs in the foreground and stops when you close the terminal or
reboot. To have AgentGrove start automatically on login and restart itself
if it ever crashes, install it as a native OS service (no Docker — it keeps
full access to git, the filesystem, terminals, and your agent CLIs):
just service-install # macOS launchd · Linux systemd --user · Windows Task Scheduler
just service-uninstall # stop + remove (your data in ./.data is untouched)
The app then serves on http://localhost:4317 (backend + frontend on one
port) and comes back on its own after a reboot. For a plain foreground run
without hot reload, use just console (or just start). See
Troubleshooting if the page ever looks blank or empty.
What you can do with it today.
git pull --ff-only) from the project menu; never a surprise merge commitorigin/<base_ref> (the branch it was created from) into its branch; conflicts abort cleanly and are surfaced, never left half-mergedpnpm install) with live console outputcreating and pre_script states are visible inline; a worktree whose pre-script fails is removed automatically (git worktree + branch + record) so no invalid worktrees lingerglab mr view), not just GitHubexit closes the tab within ~200mscodex exec) via CLI subprocess passthrough (user-authenticated)marked + DOMPurify; syntax-highlighted codetool_use events and stream errors) is streamed to the chat as icon + name + command preview rows/compact — summarize the conversation and start a fresh provider session in place; works across all CLI providers (Claude, opencode, Kimi, Codex)--resume, opencode --session + --dir, Kimi --session, Codex exec resume; stale opencode sessions auto-recover and retry with recent context; the UI shows "Retrying with fresh context…" during auto-recovery instead of going silent/ menu with provider commands + user-defined prompt templates--dangerously-skip-permissions with per-chat override/ws channelsOpen the same URL on a phone and you get a shell built for it — no horizontal scrolling, no desktop chrome. Chosen by viewport, so there's nothing to install and no second address to remember.
matchMedia picks the shell; override with ?ui=mobile, ?ui=desktop, or ?ui=auto, and there's a "Use the desktop version" link in Settings/ws?topic=sync channel, so a chat you start at your desk shows up on the phone without a refresh, and deep links open the same scope on eithernucleo-matcher powered; sub-10ms search across 100k filesignore crate's parallel walker (same as ripgrep)<state_dir>/logs/mem.log (size-rotated) for after-the-fact leak debugging; warns on sustained climbjust restore-db <name> to recover from any snapshotAGENTGROVE_GOOGLE_CLIENT_ID + _SECRET to require login; server-side OAuth (secret never touches the browser)AGENTGROVE_AUTH_ALLOWED_DOMAINS) and/or exact email (AGENTGROVE_AUTH_ALLOWED_EMAILS)/api + /ws to the backend, so one tunnel to :5173 serves the whole app from a single origin; its file route is locked down so it can't leak the state dir (guide)docs/SECURITY.md for setup + the Google Cloud Console redirect URIjust dev runs BE (cargo-watch) + FE (Vite HMR) together.sh + .ps1 script pairs; PathBuf onlyconfirm/alert replace native dialogscore / ui / features / shells, with the boundaries enforced by eslint rather than convention, so the desktop and mobile shells can be worked on in parallel (layout)Blank page or empty app (no projects) after a reboot. The dev server
isn't running, so the frontend has no backend to talk to — your data is
safe, the backend is just down. Start it with just dev (or install the
service, see Keep it running).
Verify the backend with curl -s http://localhost:4317/health →
{"status":"ok",...}.
"I lost all my data!" after restarting the backend by hand. You almost
certainly didn't. The backend defaults AGENTGROVE_PORT to a random
port when the variable is unset, so launching ./target/debug/agentgrove
directly makes the frontend unable to reach it and the app looks empty.
Your database is untouched at ./.data/agentgrove.sqlite (with timestamped
copies under ./.data/backups/). Always start via just dev / just start / just console / the service, which set AGENTGROVE_PORT=4317.
Backend won't build: feature 'edition2024' is required … Cargo 1.83.
A system/Homebrew cargo is shadowing rustup's on your PATH. This
project pins Rust 1.95 via rust-toolchain.toml; put rustup first:
export PATH="$HOME/.cargo/bin:$PATH". The just run scripts already do
this for you.
Service installed but the app never comes up (macOS, repo on an external
drive). launchd can't open a job's log files on a non-boot volume and
fails with EX_CONFIG (78). The installer already routes the supervisor
log to ~/Library/Logs/agentgrove.service.*.log to avoid this; if you
hand-rolled a plist, do the same. App logs remain in .data/logs/.
Missing source: could not find Cargo.toml / crates/agentgrove-*.
Your checkout is a partial sparse checkout. Restore the full tree with
git sparse-checkout disable — it does not touch ./.data or
node_modules.
All detailed docs live under docs/:
mem.log)TypeScript
50.7%
Rust
43.4%
Shell
2.3%
CSS
2.0%