From dabb6fe8779d15f520bf011e9fee23b632c7c34c Mon Sep 17 00:00:00 2001 From: Johan LEROY Date: Thu, 11 Jun 2026 17:37:07 +0200 Subject: [PATCH] Initial commit: positioning, license, project scaffold MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Arboretum — self-hosted web dashboard for git worktrees and the Claude Code sessions running on them. README states the positioning vs GitKraken Agent Mode, Happy/CloudCLI and Anthropic Remote Control, the security model (localhost-first + Tailscale), and the Claude usage note. Co-Authored-By: Claude Fable 5 --- .gitignore | 10 ++++++++++ LICENSE | 21 +++++++++++++++++++++ README.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1e5e42c --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +node_modules/ +dist/ +*.log +.env +.env.* +*.db +*.db-* +.DS_Store +spikes/**/tmp/ +spikes/**/captures/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..c691019 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Johan Leroy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..354aa67 --- /dev/null +++ b/README.md @@ -0,0 +1,48 @@ +# Arboretum + +> A self-hosted web dashboard for your git worktrees and the Claude Code sessions running on them — from any device. + +**Status: early development (pre-MVP).** The design study and architecture are complete; implementation is in progress. Not usable yet. + +## The problem + +Working with AI coding agents changed how we use git: one feature = one worktree = one Claude Code session, several of them in parallel. But the tooling didn't follow: + +- `git worktree list` across multiple repos is a chore, worktrees pile up, each needs its `node_modules` and `.env`. +- Claude Code sessions are scattered: some running in terminals, some resumable from history, with no consolidated view of *which one is waiting for your input*. +- When you step away from your desk, a session blocked on a permission prompt stays blocked. + +## What Arboretum does + +A single Node.js daemon you run on your dev machine (`npx git-arboretum`), serving a web UI usable from your desktop, phone or tablet: + +- **Worktree-first, multi-repo dashboard** — every worktree of every registered repo, with its git state (branch, ahead/behind, dirty files) *and* the state of its Claude Code session (busy / waiting for input / idle / resumable). +- **Full worktree lifecycle** — create (with per-repo post-create hooks: `npm ci`, copy `.env`…), adopt worktrees created by hand, delete with guardrails, prune orphans. +- **Session discovery & resume** — sessions you launched in your own terminal show up automatically; resume dead ones, observe or fork live ones. Never corrupts a live session. +- **Web terminal** — full xterm.js terminal to every managed session, surviving browser disconnects. +- **Supervision from your phone** *(post-MVP)* — PWA with push notifications when a session needs you, approve/deny without opening a terminal. + +## What makes it different + +| | Arboretum | GitKraken Agent Mode / Conductor / Nimbalyst | Happy / CloudCLI | Anthropic Remote Control | +|---|---|---|---|---| +| Web UI, any device | ✅ | ❌ desktop apps | ✅ | ✅ | +| Visual worktree management (multi-repo) | ✅ | ✅ (single repo, desktop) | ❌ | ❌ | +| Discovers & resumes *existing* terminal sessions | ✅ | ❌ | partial | ❌ | +| 100% self-hosted — zero traffic through third-party servers | ✅ | ✅ | relay server | ❌ relayed through Anthropic | +| Linux-first | ✅ | varies | ✅ | Desktop app has no Linux build | +| Open source | MIT | ❌ / partial | MIT / AGPL | ❌ | + +Anthropic's Remote Control is great at piloting *one* session from your phone. Arboretum is the layer it doesn't provide: the consolidated, self-hosted board of all your worktrees and sessions across all your repos. + +## Security model + +A web terminal is remote code execution *by design*. Arboretum binds to `127.0.0.1` by default, authenticates every request **and** every WebSocket upgrade with revocable tokens, and strictly checks the `Origin` header. The recommended way to reach it from other devices is [Tailscale Serve](docs/tailscale.md) (valid HTTPS, tailnet identity, no open ports). Never expose it directly to the internet. + +## A note on Claude usage + +Arboretum wraps the **interactive** Claude Code CLI in a PTY — the same thing you run in your terminal, displayed in your browser. It does not use the Agent SDK or headless mode. Anthropic's usage policies around programmatic use may evolve; Arboretum will track CLI releases and document any impact transparently. + +## License + +MIT — see [LICENSE](LICENSE).