{"id":49557243,"url":"https://github.com/xiaolai/claudepot-app","last_synced_at":"2026-05-23T09:01:58.956Z","repository":{"id":354426937,"uuid":"1209077765","full_name":"xiaolai/claudepot-app","owner":"xiaolai","description":"A control panel for Claude Code and Claude Desktop.","archived":false,"fork":false,"pushed_at":"2026-05-18T03:19:44.000Z","size":24050,"stargazers_count":75,"open_issues_count":1,"forks_count":8,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-05-18T03:54:25.628Z","etag":null,"topics":["ai","claude","tutorial","vibe","vibe-coding"],"latest_commit_sha":null,"homepage":"https://claudepot.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xiaolai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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-04-13T04:25:23.000Z","updated_at":"2026-05-18T03:35:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/xiaolai/claudepot-app","commit_stats":null,"previous_names":["xiaolai/claudepot-app"],"tags_count":46,"template":false,"template_full_name":null,"purl":"pkg:github/xiaolai/claudepot-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaolai%2Fclaudepot-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaolai%2Fclaudepot-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaolai%2Fclaudepot-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaolai%2Fclaudepot-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xiaolai","download_url":"https://codeload.github.com/xiaolai/claudepot-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaolai%2Fclaudepot-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33389229,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T04:15:53.637Z","status":"ssl_error","status_checked_at":"2026-05-23T04:15:53.242Z","response_time":53,"last_error":"SSL_read: 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":["ai","claude","tutorial","vibe","vibe-coding"],"created_at":"2026-05-03T05:05:04.105Z","updated_at":"2026-05-23T09:01:58.949Z","avatar_url":"https://github.com/xiaolai.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/pixel-claudepot.png\" width=\"120\" alt=\"Claudepot\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eClaudepot\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eA control panel for Claude Code and Claude Desktop.\u003c/strong\u003e\u003cbr\u003e\n  Switch accounts. Watch what's running. Schedule prompts. Find old chats. Reclaim disk space.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#what\"\u003eWhat\u003c/a\u003e ·\n  \u003ca href=\"#why\"\u003eWhy\u003c/a\u003e ·\n  \u003ca href=\"#how\"\u003eHow\u003c/a\u003e ·\n  \u003ca href=\"#for-developers\"\u003eFor developers\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## What\n\nClaudepot is a desktop app — with a matching command-line tool — that sits next to Claude Code and Claude Desktop and gives you the things they don't have on their own:\n\n- **Account switching.** Keep work and personal accounts side by side; switch in one click.\n- **A live view.** See every Claude session that's running right now, including which one is waiting on you.\n- **Auto-rotation.** When the active CLI account hits a usage threshold you set (5h, 7d, 7d-Opus, 7d-Sonnet), Claudepot can swap to a chosen alternate — confirm-mode by default, auto-mode once you trust the rule.\n- **Scheduled prompts.** Have Claude run a prompt every morning, every weekday, or on any cron schedule you like.\n- **Searchable history.** Find that chat from last week. Reopen it. Export it.\n- **Safe project rename.** `mv`-ing a project folder breaks Claude's session history. Claudepot doesn't.\n- **Disk cleanup.** `~/.claude/` quietly grows to many gigabytes. One click reclaims most of it, with a 7-day undo.\n- **Privacy on export.** Tokens, auth headers, and cookies are stripped before any session leaves your machine.\n- **Usage snapshot for non-GUI consumers.** A `~/.claudepot/usage-snapshot.json` (mode `0600`) refreshed every 5 minutes lets cron jobs and Claude Code Bash subprocesses pick the least-loaded account without going through the keychain.\n\nIt's macOS-first today. Windows and Linux build clean and work, with less polish.\n\n## Why\n\nIf you use Claude Code or Claude Desktop daily, you've probably hit at least one of these. Each one is a first-class fix in Claudepot, not a workaround.\n\n| Pain                                                             | What's actually going on                                                                                  |\n| ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |\n| `/login` doesn't switch accounts when one is already signed in   | Claude reads from a single keychain slot. There's no concept of \"the other account.\"                      |\n| You renamed a project folder and your old sessions disappeared   | Claude indexes sessions by the folder's full path. Rename the folder and the index breaks.                |\n| `~/.claude/` is using 8 GB and you don't know why                | Every chat is kept forever as a transcript file, including image data and tool output. Nothing prunes it. |\n| Claude Code freezes on a long conversation                       | A single transcript over \\~50 MB stalls the parser.                                                       |\n| You can't tell which Claude session needs your attention         | Claude has no notion of \"I'm waiting on you\" — you have to check each terminal.                           |\n| You've leaked tokens by pasting a screenshot or exporting a chat | Tokens appear verbatim in transcripts and exports.                                                        |\n| You want Claude to run a daily summary at 8am                    | There's no scheduler.                                                                                     |\n| You hit a rate limit you didn't know existed                     | The 5-hour window, 7-day window, and Opus split are invisible until you trip them.                        |\n| You hit the limit *while you were typing* and have to switch by hand | Once you've authored a rule, Claudepot watches utilization for you and either suggests or applies the swap.       |\n\n## How\n\n### Install\n\n\u003e **Status: beta** (`0.1.41`). Daily-driven on macOS. Windows and Linux builds are green but less seasoned.\n\nYou'll need a recent **Rust toolchain** ([rustup.rs](https://rustup.rs)) and **Node 20+** with **pnpm** ([pnpm.io](https://pnpm.io)). No other system dependencies.\n\n```bash\ngit clone https://github.com/xiaolai/claudepot-app.git\ncd claudepot-app\n\n# Command-line tool\ncargo build -p claudepot-cli --release\n# Built binary: ./target/release/claudepot\n\n# Desktop app\npnpm install\npnpm tauri build --no-bundle      # builds a binary, no installer\n# OR\npnpm tauri dev                    # run the GUI in dev mode\n```\n\nPre-built installers are coming. Until then it's source-build only.\n\nYour data lives at `~/.claudepot/` (override with `CLAUDEPOT_DATA_DIR`).\n\n### First run\n\nOpen the app. The left sidebar is your map of the whole product — **eight tabs, each one a feature**. Start by adding your accounts under **Accounts**. Three ways:\n\n- Browser OAuth — a one-time browser sign-in, no token handling on your part.\n- Import the account Claude Code is currently signed into.\n- Paste a refresh token if you already have one.\n\nAfter that, switch with one click from the sidebar, the ⌘K command palette, or the menu-bar tray icon. Two slots, switched independently: one for **Claude Code CLI**, one for **Claude Desktop**. Work account in CLI, personal in Desktop, at the same time.\n\n### Features, one per sidebar tab\n\n**Accounts** — Manage every Claude account you have. Add, remove, verify, and switch between them. Two slots — one for the CLI, one for the Desktop app — switched independently. Per-account secrets live in the OS keychain.\n\n![Accounts tab](assets/screenshots/accounts.png)\n\n**Activities** — Three time-scales of \"what's happening with Claude right now\": a live strip (running sessions, sorted by who needs attention first), a today/month dashboard, and a stream of recent events. macOS notifications when a session goes from `busy` to `waiting`.\n\n![Activities tab](assets/screenshots/activities.png)\n\n**Projects** — Every project Claude has ever touched, with all its sessions. Cross-project text search, filters by date / error / size / token count. **Rename a project here** instead of `mv`-ing it — Claudepot rewrites every reference Claude has (session transcripts, project map, history file, memory, settings) in nine journaled phases. Resumable on crash, fully reversible.\n\n![Projects tab](assets/screenshots/projects.png)\n\n**Keys** — All your API keys and OAuth tokens, in one inventory. Stored in the OS keychain (macOS Keychain / Windows Credential Manager / Linux Secret Service). Copy with self-clearing clipboard — the value wipes itself after 30 seconds.\n\n![Keys tab](assets/screenshots/keys.png)\n\n**Third-parties** — Run non-Anthropic models (Bedrock, Vertex, Foundry, OpenRouter, Ollama, vLLM, llama.cpp, …) through the same `claude` interface. Each route installs as a wrapper binary on `PATH` (`~/.claudepot/bin/\u003cname\u003e`) and a separate Desktop profile (`~/Library/Application Support/Claude-3p/`), so first-party Claude is never touched. Routes are siblings on disk — no swap, no default.\n\n![Third-parties tab](assets/screenshots/third-parties.png)\n\n**Agents** — Schedule a `claude -p` prompt to run on a cron expression (every weekday at 8am, every Monday morning, anything cron can express) or on demand. Each run lands in a history pane with stdout, stderr, and exit code. macOS uses launchd, Windows uses Task Scheduler, Linux uses systemd-user timers — set up for you, not by hand.\n\n![Agents tab](assets/screenshots/automations.png)\n\n**Global** — Read-only inspection of your machine-wide Claude Code state across four sub-tabs: **Config** (cascade view of managed policy / user prefs / global config / plugins / cross-project memory), **Memory** (CLAUDE.md health — bloat, lines past CC's truncation cutoff), **Tips** (the CC tips ledger, searchable + filterable), and **Updates** (Claude Code CLI + Claude Desktop versions, channel, install). Claudepot's *own* updates live under Settings → About.\n\n![Global tab](assets/screenshots/global.png)\n\n**Settings** — Eleven sub-panes: General, Appearance (light / dark / system, paper-mono density), Notifications, Network (status-bar dot + status-page polling), **Rotation** (rule-driven auto-swap of the active CLI account when a usage window crosses a threshold — confirm or auto, with a 500-entry audit log), Cleanup (**Prune** orphaned sessions · **Slim** strips bulky tool-output payloads · **Trash** 7-day undo), Protected paths, GitHub PAT, Locks (SQLite-lock recovery), Diagnostics (`doctor`), and About.\n\n![Settings tab](assets/screenshots/settings.png)\n\n## For developers\n\nFour user-facing nouns: **account**, **cli**, **desktop**, **project**. Three Rust crates:\n\n| Crate            | Purpose                                                                                   |\n| ---------------- | ----------------------------------------------------------------------------------------- |\n| `claudepot-core` | Pure Rust library. All business logic. No Tauri dependency — testable without a webview.  |\n| `claudepot-cli`  | Thin clap wrapper over core. No business logic, no HTTP, no keychain.                     |\n| `src-tauri`      | Tauri 2 desktop shell calling the same core. DTOs in `dto.rs`; secrets never cross to JS. |\n\nThe CLI handler is the reference implementation; the GUI wraps the same function with a DTO layer. Both reach the same code.\n\n### CLI reference\n\n```text\nclaudepot account   list | add | remove | inspect | verify\nclaudepot cli       status | use \u003cemail\u003e | clear | run \u003cemail\u003e -- \u003ccmd\u003e\nclaudepot desktop   status | use \u003cemail\u003e\nclaudepot project   list | show | move | clean | repair\nclaudepot session   list-orphans | move | adopt-orphan | rebuild-index\n                    view | export | search | worktrees\n                    prune | slim | trash {list|restore|empty}\nclaudepot doctor\nclaudepot status\n```\n\nEvery command supports `--json` with a stable shape (scriptable), `--quiet`, `--verbose`, `--yes`. Exit codes: `0` ok · `1` general · `2` ambiguous / drift · `3` auth failure · `4` Desktop quit failed · `5` network.\n\n`claudepot cli run \u003cemail\u003e -- \u003ccmd\u003e` launches a one-shot command with `CLAUDE_CODE_OAUTH_TOKEN` injected, leaving the on-disk slot untouched.\n\n### Develop\n\n```bash\ncargo check --workspace\ncargo test  --workspace               # 1700+ Rust tests\npnpm test                             # Vitest + RTL, jsdom (~400 tests)\npnpm test:coverage                    # with coverage report\npnpm tauri dev                        # GUI hot reload (Vite :11220, HMR :11221)\n```\n\nPath-handling code (sanitize, unsanitize, canonicalize, tilde expansion) is the highest-risk surface; it's golden-tested on Linux / macOS / Windows in CI. See [`.claude/rules/paths.md`](.claude/rules/paths.md).\n\nFull design lives in [`dev-docs/implementation-plan.md`](dev-docs/implementation-plan.md). The 3400-line CC/Desktop internals reference is at [`dev-docs/kannon/reference.md`](dev-docs/kannon/reference.md).\n\n### Security posture\n\n- Tokens never logged, toasted, or sent to the webview. Truncated in any human output (`sk-ant-oat01-Abc…xyz`).\n- Per-account secrets in the OS keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service).\n- Two distinct keychain surfaces on macOS: the `keyring` crate for Claudepot's own secrets, the `/usr/bin/security` subprocess for Claude Code's `Claude Code-credentials` keychain item. They are not interchangeable.\n- Redaction (`sk-ant-*`, OAuth bearers, JWTs, `Authorization` headers, URL params, cookies) runs before any session event reaches the UI or the SQLite index.\n- SQLite WAL/SHM sidecars are forced to `chmod 0600`.\n- Tauri `opener` scope is narrowed to `https://console.anthropic.com/settings/keys`.\n\nFull rules in [`.claude/rules/architecture.md`](.claude/rules/architecture.md).\n\n## License\n\nISC — see [LICENSE](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxiaolai%2Fclaudepot-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxiaolai%2Fclaudepot-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxiaolai%2Fclaudepot-app/lists"}