| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A native desktop app that wraps the claude CLI so you don't have to live in the terminal.
Part of the Orellius.ai product family.
Independent project. Not affiliated with, endorsed by, or a product of Anthropic. Octootter drives the official claude CLI as a subprocess. "Claude" and "Claude Code" are trademarks of Anthropic, PBC.
I'd been living in claude from the terminal for months. A few things kept bugging me: permission prompts yanked my focus into the shell, inline diffs were unreadable in scrollback, and I had no good way to keep five projects open in parallel. So I built Octootter.
It's not a reimplementation and not an API client. It wraps the real claude binary as a subprocess. Your existing claude auth login works. Your hooks, skills, MCP servers, and CLAUDE.md files all just work because they are the same files.
What Octootter adds:
![]() |
![]() |
| Project list and recent sessions | Chat with inline tool cards and diffs |
![]() |
![]() |
| Plugin marketplace | MCP server management |
![]() |
|
| Custom agents | |
This is the part I'm proudest of. Octootter routes Claude's tool-use permission prompts through the UI with an inline Allow / Deny row, plus a built-in guardrails engine.
One sidebar click into eleven tabs:
| Tab | What |
|---|---|
| Guardrails | Built-in protection rules with toggle switches |
| MCP Servers | Read + add + remove from ~/.claude.json and <project>/.mcp.json |
| Plugins | 133-plugin marketplace with search + install/uninstall |
| Usage | Tokens + cost by model / project / day, subscription- and API-key-aware |
| Connection | Auth, subscription, provider, email, plan |
| Tasks | Scheduled task CRUD with cron presets |
| Commands | Create/edit/delete user-scoped slash commands |
| Hooks | Editor for all 9 lifecycle events with per-event matchers |
| Doctor | claude doctor with streaming output |
| Backups | Browse, restore, delete from ~/.claude/backups/ |
| Files | Browse and edit ~/.claude files (MDEditor for .md, textarea otherwise) |
Visual markdown editor via @uiw/react-md-editor, lazy-loaded (900kb chunk only on open; main bundle stays ~315kb). Cmd+S saves. Reads both <project>/CLAUDE.md and <project>/.claude/CLAUDE.md, writes back to whichever you loaded. Unsaved-changes guard on Esc / click-outside.
| Platform | Status |
|---|---|
| macOS 13.3+ | Full support (primary dev platform) |
| Linux (Ubuntu 22.04+, Fedora 38+) | Builds and runs; needs community testing |
| Windows 10 1803+ | Builds; permission bridge falls back to auto-allow until the named-pipe impl lands |
Platform extras:
# Debian / Ubuntu
sudo apt install libwebkit2gtk-4.1-dev build-essential libxdo-dev libssl-dev \
libayatana-appindicator3-dev librsvg2-dev
# Fedora
sudo dnf install webkit2gtk4.1-devel openssl-devel libxdo-devel \
libappindicator-gtk3-devel librsvg2-develWindows needs WebView2 (already installed on Win10 1803+) and the Visual Studio C++ Build Tools.
git clone https://github.com/Orellius/octootter
cd octootter
pnpm install
pnpm tauri devOctootter reads your existing claude auth login state automatically; no separate login flow. Add an existing folder from the sidebar or create a new project. Folders without .claude/ get a one-click init. Pick a project, a chat tab opens, type a message.
pnpm tauri build
# macOS : src-tauri/target/release/bundle/dmg/
# Linux : src-tauri/target/release/bundle/deb/ or /appimage/
# Windows : src-tauri/target/release/bundle/msi/ or /nsis/| Shortcut | Action |
|---|---|
| Cmd+W / Ctrl+W | Close active tab |
| Cmd+1..9 / Ctrl+1..9 | Jump to tab N |
| Cmd+Shift+] / [ | Next / previous tab |
| Cmd++ / Cmd+- / Cmd+0 | Zoom in / out / reset |
| / in chat | Open slash command picker |
| Up / Down in picker | Cycle |
| Tab / Enter in picker | Pick |
| Shift+Enter | Newline in chat |
| Shift+Tab | Cycle permission mode |
| Esc | Close modal / dismiss picker |
| Cmd+S in editor | Save |
React 19 + Tailwind 4 (src/)
App.tsx tab shell + chat state + slash routing
chat/ message list, tool cards, permission row
tabs/ TabBar + useTabs (localStorage-persisted)
global/ GlobalView with MCP / Plugins / Usage / Tasks tabs
toast/ multi-concurrent background-op notifications
|
| Tauri 2 IPC
v
Rust backend (src-tauri/src/)
core/
claude_process persistent `claude -p` subprocess
permission_bridge Unix-socket MCP prompt router
cli_ops generic `claude <args>` helper
sessions / usage / plugins / marketplace / mcp_config
slash_commands / scheduled_tasks / projects / claude_md
commands/ #[tauri::command] IPC wrappers
mcp_server.rs stdio MCP server for permissions
Rust owns the hot path: stream-json parsing, subprocess lifecycle, the permission bridge, session discovery, usage aggregation. React is a typed view over serialized state.
Single-binary dispatch: src-tauri/src/main.rs checks argv for --mcp-server. When Claude spawns Octootter through --mcp-config, it runs as a stdio MCP server instead of launching the Tauri window. Same binary, two modes.
vs the terminal. You get a project sidebar, inline tool cards with diffs, a permission UI instead of shell prompts, tabs for parallel chats, a visual CLAUDE.md editor, usage dashboards, and session history. Most of what terminal users end up scripting is already built in.
vs opcode / Claudia. opcode hardcodes --dangerously-skip-permissions on every spawn; Octootter has a real MCP permission bridge. opcode has no plugin / skill / marketplace support; Octootter has all three. opcode spawns a fresh process per turn (cold-start every message); Octootter keeps the subprocess alive per project. opcode is AGPL; Octootter is MIT.
vs Claude Desktop. Different product. Desktop wraps the chat service. Octootter drives the developer-focused claude CLI, so you get hooks, skills, MCP servers, CLAUDE.md, project-scoped settings, and the full tool loop.
pnpm tauri dev # hot reload
pnpm build # type check + Vite prod build
pnpm lint # ESLint (also bans text-[Npx])
pnpm test # Vitest + jsdom + RTL
cd src-tauri
cargo test --lib
cargo clippy --lib -- -D warnings
cargo fmt --all -- --checkoctootter/
src/ React + Tailwind 4 frontend
App.tsx tab shell + chat state + slash routing
chat/ tabs/ global/ toast/ lib/ test/
src-tauri/ Rust backend
src/
core/ pure-logic modules, no Tauri imports
commands/ #[tauri::command] IPC entry points
mcp_server.rs stdio MCP server for permissions
main.rs argv dispatch (app vs mcp-server)
lib.rs Tauri::Builder setup
capabilities/ Tauri 2 permission manifests
.github/workflows/ci.yml
eslint.config.js, tailwind.config.ts, vite.config.ts
package.json
Every push to main and every PR runs:
Frontend job on ubuntu-latest, Rust job on macos-latest (skips webkit2gtk install pain). Concurrency group cancels older runs of the same PR.
Shipped:
Still want:
Solo-dev project, active. PRs welcome on bugs and small polish. For larger features, open an issue first so we can scope it.
All changes must pass CI. Rust must be rustfmt-clean and pass cargo clippy --lib -- -D warnings. Frontend must pass pnpm lint (no text-[Npx] arbitrary sizes; use the rem scale; no hardcoded colors).
AGPL-3.0. See LICENSE. If you run a modified Octootter as a network service, the AGPL requires you to offer that source to its users.
Octootter is independent software that drives Anthropic's claude CLI as a subprocess. "Claude" and "Claude Code" are trademarks of Anthropic, PBC.
| Back | FazBrowse Home | New Git URL |