A self-hosted web dashboard for supervising multiple Claude Code AI sessions running in tmux
Project description
Lumbergh
A self-hosted web dashboard for supervising multiple Claude Code AI sessions running in tmux.
Think "micromanager for your AI interns."
Features
- Multi-session dashboard — view and manage multiple Claude Code sessions at a glance
- Terminal streaming — interact with live terminal sessions via xterm.js + WebSockets
- Git diff viewer — monitor live diffs, commit history, and branch switching as the AI works
- Git graph — visualize commit history with an interactive graph
- File browser — browse project files with syntax highlighting
- AI chat — manager AI agent for reviewing and coordinating work
- Todo lists & scratchpad — per-project notes and task tracking
- Prompt templates — reusable prompts with mention/variable support
- Shared files — share context across sessions
- Settings — configurable AI providers and preferences
- Mobile-friendly — responsive design for phones and tablets
- PWA support — installable as a progressive web app
Quick Start
Install and run with one command:
uv tool install pylumbergh
lumbergh
Or with pip:
pip install pylumbergh
lumbergh
Then open http://localhost:8420 in your browser.
Prerequisites
| Tool | Install |
|---|---|
| tmux | sudo apt install tmux or brew install tmux |
| git | sudo apt install git or brew install git |
That's it. The lumbergh command checks for these on startup and tells you what's missing.
Remote access (phone/tablet)
Lumbergh binds to 0.0.0.0 so it's accessible from other devices on your network. For secure remote access (especially from mobile), we recommend Tailscale:
- Install Tailscale on your server and your phone/tablet
- Access Lumbergh at
http://<tailscale-ip>:8420
This gives you a private, encrypted connection without exposing ports to the internet.
Development
If you want to contribute or hack on Lumbergh itself:
git clone https://github.com/voglster/lumbergh.git
cd lumbergh
./bootstrap.sh
This creates a tmux session with three windows (claude, backend, frontend) and opens http://localhost:5420 with the Vite dev server. You'll need uv, npm, and Claude Code in addition to the prerequisites above.
Tech Stack
- Backend: Python 3.11+, FastAPI, libtmux, TinyDB
- Frontend: React + Vite + TypeScript, xterm.js, TanStack Query, Tailwind CSS
Project Structure
lumbergh/
├── backend/
│ ├── main.py # FastAPI app entry point
│ ├── tmux_pty.py # PTY/tmux attachment logic
│ ├── session_manager.py # PTY pooling for WebSocket clients
│ ├── git_utils.py # Git operations (diff, log, branches)
│ ├── file_utils.py # File browsing utilities
│ ├── db_utils.py # TinyDB persistence helpers
│ ├── diff_cache.py # Diff caching layer
│ ├── idle_detector.py # Session idle detection
│ ├── idle_monitor.py # Idle monitoring service
│ ├── message_buffer.py # Message buffering for AI context
│ ├── models.py # Pydantic models
│ ├── constants.py # Shared constants
│ ├── ai/ # AI provider integration
│ │ ├── providers.py
│ │ └── prompts.py
│ ├── routers/
│ │ ├── ai.py # AI chat endpoints
│ │ ├── notes.py # Todo, scratchpad, prompt template APIs
│ │ ├── sessions.py # Session management endpoints
│ │ ├── settings.py # Settings endpoints
│ │ └── shared.py # Shared files endpoints
│ ├── tests/
│ ├── pyproject.toml
│ └── start.sh
├── frontend/
│ ├── src/
│ │ ├── App.tsx
│ │ ├── pages/
│ │ │ ├── Dashboard.tsx
│ │ │ └── SessionDetail.tsx
│ │ ├── components/
│ │ │ ├── Terminal.tsx
│ │ │ ├── QuickInput.tsx
│ │ │ ├── DiffViewer.tsx
│ │ │ ├── FileBrowser.tsx
│ │ │ ├── TodoList.tsx
│ │ │ ├── Scratchpad.tsx
│ │ │ ├── PromptTemplates.tsx
│ │ │ ├── SessionCard.tsx
│ │ │ ├── CreateSessionModal.tsx
│ │ │ ├── BranchPicker.tsx
│ │ │ ├── SettingsModal.tsx
│ │ │ ├── SharedFiles.tsx
│ │ │ ├── ResizablePanes.tsx
│ │ │ ├── VerticalResizablePanes.tsx
│ │ │ ├── diff/
│ │ │ │ ├── FileList.tsx
│ │ │ │ ├── FileDiff.tsx
│ │ │ │ └── CommitList.tsx
│ │ │ └── graph/
│ │ ├── hooks/
│ │ └── utils/
│ └── start.sh
├── slides/ # Slidev presentation
├── docs/ # PRD, architecture, roadmap
├── start.sh # Start both backend + frontend
└── LICENSE
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pylumbergh-0.1.1.tar.gz.
File metadata
- Download URL: pylumbergh-0.1.1.tar.gz
- Upload date:
- Size: 3.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b756229542f4c996796197844d8230b7309bf22d280bd954b315c5bf116ba9d
|
|
| MD5 |
3ac9b6d7921a36132626f5973fe4635a
|
|
| BLAKE2b-256 |
ecbc43c6ab9f5fc54e333bdeb39b20fcb9d67cf7b719050da87e7345f621ed0c
|
Provenance
The following attestation bundles were made for pylumbergh-0.1.1.tar.gz:
Publisher:
release-stable.yml on voglster/lumbergh
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pylumbergh-0.1.1.tar.gz -
Subject digest:
2b756229542f4c996796197844d8230b7309bf22d280bd954b315c5bf116ba9d - Sigstore transparency entry: 1081262915
- Sigstore integration time:
-
Permalink:
voglster/lumbergh@151f71681df0444425c729a0ef38f0ac089e536e -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/voglster
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-stable.yml@151f71681df0444425c729a0ef38f0ac089e536e -
Trigger Event:
push
-
Statement type:
File details
Details for the file pylumbergh-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pylumbergh-0.1.1-py3-none-any.whl
- Upload date:
- Size: 3.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe0a97626fbf5dddaf78e75c4698323138fd33b1fe58b3a670c6a956b3a900cb
|
|
| MD5 |
ebef2ed4726388ce82319ec728c090da
|
|
| BLAKE2b-256 |
cffc1b8d937133423fa221fae71134b8a4dd11d8cf8082d826fb924ed6a12bdc
|
Provenance
The following attestation bundles were made for pylumbergh-0.1.1-py3-none-any.whl:
Publisher:
release-stable.yml on voglster/lumbergh
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pylumbergh-0.1.1-py3-none-any.whl -
Subject digest:
fe0a97626fbf5dddaf78e75c4698323138fd33b1fe58b3a670c6a956b3a900cb - Sigstore transparency entry: 1081262997
- Sigstore integration time:
-
Permalink:
voglster/lumbergh@151f71681df0444425c729a0ef38f0ac089e536e -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/voglster
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-stable.yml@151f71681df0444425c729a0ef38f0ac089e536e -
Trigger Event:
push
-
Statement type: