Total recall for everything you've ever built.
An armillary sphere is an ancient astronomical instrument β concentric rings modeling the celestial sphere, with a fixed center and orbits turning around it. You are the center, your projects orbit around you, and
armillarylets you see the whole system at once.
50-200 projects over years What armillary gives you
βββββββββββββββββββββββββ ββββββββββββββββββββββββ
~/Projects/ π§ armillary next
alpha-app/ "what should I work on today?"
speak-faster/ βββββββββββββββββββββ
old-prototype/ β β π armillary context <name>
β armillary β "where was I on this project?"
~/projects_prod/ β β
my-saas/ βββββΆβ scan + index + ββββΆ π armillary search "needle"
side-project/ β SQLite cache β ripgrep across all repos
β β
~/code/ βββββββββββββββββββββ π€ MCP server
experiments/ β Claude Code / Cursor query your repos
... β
βΌ π armillary list
status: ACTIVE / PAUSED / terminal table, sortable
DORMANT / IDEA
Status: Alpha. Daily-driver-ready on macOS / Linux.
armillary is total recall for prolific builders β solo developers and creators who accumulate dozens to hundreds of projects over years. Not a dashboard for 5 active projects β a memory layer for your entire codebase history.
The daily loop:
armillary next β "what should I work on?"
armillary context β "where was I on this project?"
armillary search β "where is this code across all my repos?"
Your AI coding agent (Claude Code, Cursor) gets the same data automatically via MCP β no extra commands needed.
- Auto-discovers every project in your umbrella folders (git repos + idea folders)
- Tracks metadata β status, branch, commits, work hours, dirty files, README, ADRs, notes
- Recommends what to work on β momentum, zombies, forgotten gold (
next) - Restores context β branch, dirty files, recent commits in sub-second (
context) - Searches across ALL projects with ripgrep
- MCP server β your AI agent knows your full project history
- Launches projects into Cursor, VS Code, Zed, Claude Code, terminal, Finder
armillary is not:
- A git GUI β use Sourcetree / Fork for that
- An IDE β Claude Code / Cursor / Zed already cover that
- A monitoring tool β use UptimeRobot / Sentry for that
- A cloud service β everything stays local, offline-first
- Python 3.11+ (managed by
uv) - Git β armillary reads repo metadata through GitPython
- ripgrep β the search backend (
brew install ripgrep)
Not yet published to PyPI. To run from source:
git clone git@github.com:justi/armillary.git
cd armillary
uv sync
.venv/bin/armillary --help# 1. First-run setup: scans ~/ for umbrella folders, runs initial scan,
# detects Claude Code, configures MCP server.
armillary config --init
# 2. What should I work on today?
armillary next
# 3. Where was I on this project?
armillary context my-project
# 4. Browse β dashboard auto-scans on start.
armillary start| Command | What it does |
|---|---|
armillary next |
What should I work on today? Momentum, zombies, forgotten gold |
armillary context <name> |
Where was I? Branch, dirty files, recent commits β sub-second |
armillary search "<query>" |
ripgrep across all projects |
armillary list |
Rich terminal table with --status, --type, --umbrella filters |
armillary open <name> |
Launch project in configured editor (--target cursor/vscode/zed) |
armillary config --init |
First-run setup: umbrella picker β scan β Claude Code bridge β MCP |
armillary scan |
Full scan of all umbrellas, persist to cache |
armillary start |
Incremental scan + Streamlit dashboard |
armillary install-claude-bridge |
Write compact ~/.claude/armillary/repos-index.md |
armillary mcp-serve |
MCP server (stdio) for AI coding agents |
armillary exposes four MCP tools that Claude Code / Cursor can call:
| Tool | What it does | Speed |
|---|---|---|
armillary_next |
What should I work on today? | instant |
armillary_context |
Where was I? Branch, dirty files, recent commits | sub-second |
armillary_search |
Exact code search: function names, imports, error messages | <10ms |
armillary_projects |
List all projects with path, status, description | instant |
armillary config --init auto-configures MCP in ~/.claude/mcp.json. Or manually:
{
"mcpServers": {
"armillary": {
"command": "/path/to/venv/bin/armillary",
"args": ["mcp-serve"]
}
}
}armillary never sends data off-device. Project index, metadata, cache, and config all live on your local disk.
- No telemetry, no analytics, no external calls
- All documentation uses symbolic placeholders, never real paths
uv sync --extra dev
# 295 tests covering scanner / metadata / status / cache / config /
# launcher / search / exporter / bootstrap / CLI / MCP / next / context
.venv/bin/python -m pytest
# lint + format
.venv/bin/ruff check .
.venv/bin/ruff format --check .CI runs pytest + ruff on Python 3.11 and 3.12.
Key design decisions:
- Three-interface model β MCP (primary, invisible) > CLI (daily decisions) > Dashboard (companion)
- Thin Streamlit UI β presentation only, logic in importable services
- Incremental scan β mtime compare, 1β2s vs 20+s full scan
- SQLite cache β drop and rebuild, no migrations (
PRAGMA user_version) - Sub-second context β all git operations local, no network
- Response safety β 20k char cap, preview truncation, compact JSON
MIT (see LICENSE)