Skip to content
fatumorgPublic

About

A lightweight AI agent, works best with Claude.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Codedesk

Codedesk

A desktop workspace for Claude Code.

Uses the claude CLI you already have installed, along with your login, settings, CLAUDE.md, hooks, skills, plugins, MCP servers and slash commands.

Linux
Rust Tauri Claude Agent SDK Vanilla JS License: MIT


A Codedesk conversation with an inline diff

✨ Highlights

🗂️ Workspaces

Add more folders to a project and Claude can read and edit all of them in the same conversation: your app, its API, a shared design system. The list is saved per project, so every conversation in it, new or resumed, sees the same folders.

🧠 Effort and models

A slider from Low to Max, plus Ultracode. Model picker (newest first), fast mode, and Gemini through Antigravity.

🔍 Review everything

Inline diffs with line numbers, permission prompts (keys 1 2 3), plan approval, to-dos, and subagent output.

🎨 Make it yours

Light, dark or system theme. Four backgrounds, accent colors, fonts, density, corner style and custom CSS. The logo, window icon and launcher icon take your accent color.

🖱️ Computer Use

Let Claude see your screen and use the mouse and keyboard, with a permission prompt for each action.

⏰ Scheduled prompts

Send a prompt at a set time, on chosen weekdays, or as soon as your usage limit resets, into a new conversation or an existing one.


🗂️ Workspaces: several folders, one conversation

The workspace folders menu

Click the project path in the chat header (or run /add-dir) and choose Add folder to workspace…. The header then shows the project path with a count, like ~/projects/aurora +2. Each added folder has a menu to open it in your file manager or remove it from the workspace.


🧠 Effort, from quick to Ultracode

The effort slider set to Ultracode

Click the effort chip in the composer and drag the slider or click a level. Ultracode runs at max effort plus multi-agent workflows.

New conversations start in Auto mode, Medium effort, Opus 5.5. You can change these under Settings.


🌗 Light or dark

Codedesk in the light theme with the Changes panel


📦 Install

❄️ NixOS / Nix🖥️ Everything else
nix run .

Or add packages.${system}.default from this flake to your system packages to get a Codedesk entry in your app launcher.

Install Rust, the Tauri prerequisites (WebKitGTK 4.1 on Linux) and the Tauri CLI (cargo install tauri-cli), then:

cargo run              # run it
cargo tauri build      # AppImage / deb / rpm → target/release/bundle

Only Linux is tested. macOS and Windows may build but are untested.

Note

You need Claude Code installed and signed in (claude auth login), or you can use the app's Sign in button. CLAUDE_PATH overrides which claude binary is used.


📱 Use it from your phone

Control the Codedesk on your PC from anywhere, with the same look: every project, workspace folder, account, conversation and the ones running right now. Nothing opens a port and your phone does not need to be on the same wifi.

Codedesk only listens on 127.0.0.1:4870 on the PC (CODEDESK_REMOTE_PORT changes the port). A tunnel you set up reaches that port with outbound connections only.

1. Tailscale (recommended). Only your own devices can reach the PC.

  1. Install Tailscale on the PC and the phone and sign in to the same account. On NixOS: services.tailscale.enable = true;, then sudo tailscale up.
  2. In Codedesk open Settings → Remote, turn on Allow remote access, then press Share over Tailscale. If it asks for permission, run sudo tailscale set --operator=$USER once.
  3. The pane shows an address like https://your-pc.your-tailnet.ts.net. Open it on the phone while Tailscale is connected.
  4. Press Pair a device on the PC and type the code on the phone. The code works once and expires after 5 minutes. After pairing, use Add to Home Screen for a full-screen app.

Revoke any phone from the same pane.

2. Cloudflare Tunnel (nothing to install on the phone). Run cloudflared tunnel --url http://127.0.0.1:4870 on the PC and open the trycloudflare.com address it prints. This address is public, so the pairing code is the only lock. Put Cloudflare Access with your email in front of a named tunnel to add a second one.

Keep it reachable. While remote access is on, closing the last window keeps Codedesk running. codedesk --background starts it without a window, for login autostart. With home-manager:

systemd.user.services.codedesk = {
  Unit.Description = "Codedesk";
  Service.ExecStart = "${pkgs.codedesk}/bin/codedesk --background";
  Install.WantedBy = [ "graphical-session.target" ];
};

Limits. Claude sign-in opens a browser, so accounts are added on the PC (switching and removing work from the phone). No notifications while the page is closed. Auto-continue after a limit only runs while the page that owns the conversation is open. Dev-server previews on localhost don't load on the phone. The PC must be on.


🖱️ Computer Use

Turn on Settings → Computer use and new Claude conversations get tools to take screenshots, move and click the mouse, drag, scroll, type and press keys. Codedesk runs them itself through a built-in MCP server (codedesk --computer-use-mcp), so nothing else needs installing. Computer actions show a permission prompt, even in Auto mode. Screenshots are scaled so their longer side is at most 1280 pixels, and clicks are mapped back to real screen coordinates.

It works on X11. On Wayland, screen capture and input go through the compositor, which may ask for permission or refuse. Local-model conversations don't get these tools.


⏰ Scheduled prompts

Open the schedule list with the calendar button in the top bar or Schedules in the command palette (Ctrl+K). A schedule has:

  • What: a prompt and a project folder.
  • Where: a new conversation, or an existing one to continue (for example with /continue).
  • When: once at a date and time, repeat on chosen weekdays at one or more times, or after the limit resets (it fires as soon as your usage limit lifts).
  • Optional model, effort, permission mode and account.

The Schedule button on a limit notice, and Schedule a prompt in a conversation's menu, fill the form in for that conversation. Schedules run in the background with no window open: while one is enabled, closing the last window keeps Codedesk running, and codedesk --background stays up for them. If the PC was asleep, a one-time schedule still runs up to 12 hours late. A repeating one more than 10 minutes late skips to its next time. A conversation that is busy is waited on (up to 30 minutes) before the prompt is sent.


🖥️ Local models

Run a model on your own GPU with every Codedesk feature: tools, edits, permissions, skills, subagents, rewind and fork. Claude Code stays the agent and the local model becomes its brain.

  1. Install llama.cpp with GPU support. On NixOS with an NVIDIA card: (llama-cpp.override { cudaSupport = true; }).
  2. Open Settings → Local model. Host here lets Codedesk start llama-server itself. Add as many models as you like: pick a suggestion or paste a Hugging Face repo or a .gguf path. Each one downloads on first start and gets its own context size, flags, name and description.
  3. Pick one from the model menu, next to Claude and Gemini. One hosted model runs at a time, so picking another swaps it.

Two models are suggested for a 16 GB GPU. Qwen3.8 27B (GSQ-RCO 3-bit) is the strongest. Qwen3.6 35B-A3B is a mixture of experts with 3B active parameters: on an RTX 5070 Ti it writes about 120 tokens a second with a 128k context, against 15 to 25 for the 27B.

Connect to a server works with anything that speaks the Anthropic Messages API: llama.cpp, Ollama, LM Studio or vLLM.

Codedesk tunes both sides. llama.cpp fits the model to your GPU, picks the largest context that keeps every layer on it, and moves MoE experts to RAM when VRAM runs out. It also runs flash attention, a 4-bit KV cache (about twice the context of 8-bit), prompt cache reuse, and MTP speculative decoding when the model ships an MTP head. Claude Code gets the real context size so it compacts in time, a reply limit sized to that context, and no tools a local model has no use for. Its per-request header is turned off so the prompt cache survives between messages.

Leave out in local conversations (same pane) turns plugins, MCP servers and skills off for local models only, so they don't take up the model's context. Claude conversations keep them.

When every Claude account is at its limit, Codedesk moves the conversation to the local model and continues (Settings → Usage, on by default). The Back to button on the notice switches it back. A conversation too long for the local model's context continues in a new tab instead, starting from a summary of where it stood.


🧰 What's in it

💬 Conversations and tabs
  • Tabs: several conversations at once, each with its own project, model and permission mode.
  • Conversations: browse by project, search, rename, fork, export to Markdown, delete, resume, pin.
  • Undo: edit or retry any message (forks the conversation), or rewind code to before a message.
  • Working indicator: elapsed time and output tokens (Working… 1m 23s · ↓ 2.1k tokens). A ↓ button jumps back to the newest output.
⌨️ Composer
Type Does
/ Commands: built-in, skills, plugins, custom
@ Mention files, folders, agents
!cmd Run a shell command and hand Claude the output
#note Save a note to CLAUDE.md
↑ ↓ / Ctrl+R Prompt history / search it
Ctrl+S · Esc Esc · Tab Stash prompt · clear · accept suggestion

Paste or drop images and PDFs. Messages queue while Claude works. Extra commands: /context /status /rename /plan /branch /copy N /stats /add-dir.

🎛️ Controls

Permission mode (Shift+Tab), model (Alt+P, newest first, older versions under "More models"), effort slider plus Ultracode, fast mode (Alt+O), stop (Esc), and rewind (Esc Esc).

✨ Gemini

Pick a Gemini model to run the tab through the Antigravity CLI (agy) with your Google sign-in. Install agy, then sign in from Settings → Antigravity. The model list comes from agy models. Permission modes map to agy's (Ask behaves like Accept edits). Gemini tabs have no fork or rewind.

🪟 Panels and editor
  • Files, Changes (git status and diffs, discard, review or commit with Claude), Terminal, Preview (files, HTML/SVG/diagram artifacts, localhost dev servers), Tasks, Context usage, MCP servers (status, sign in, toggle, add/remove), Plugins (install, enable, update, marketplaces) and Skills (turn off or delete).
  • Editor: editable, highlighted view with line numbers. Ctrl+S saves, Tab/Shift+Tab indent.
  • Agents: browse subagents, mention them, or create one in .claude/agents/.
  • Rendering: Markdown, syntax highlighting, LaTeX math, Mermaid diagrams.
📊 Usage and limits

Session and weekly limits with reset times, a per-product split, what used them, and this conversation's cost (gauge button, status bar, or /usage). If a limit stops Claude mid-task, it continues on its own once the limit resets, even after an app restart.

🧩 Everything else

Command palette (Ctrl+K), find (Ctrl+F), /copy, open files in your editor, your statusLine command, desktop notifications, and a sound when Claude is done. Shortcuts are listed under /help.


🪶 Light by design

Codedesk is a single native Rust binary on your system's WebView, with no bundled browser or Node runtime. Claude Code only starts for a tab once you type in it, stops after 15 idle minutes (it resumes on its own), and the terminal and diagram engines load only when first used.


Built with Rust, Tauri and vanilla JS · Runs on your own Claude Code

About

A lightweight AI agent, works best with Claude.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages