cd /news/ai-agents/show-hn-desk-open-source-macos-works… Β· home β€Ί topics β€Ί ai-agents β€Ί article
[ARTICLE Β· art-166483] src=github.com β†— pub= topic=ai-agents verified=true sentiment=↑ positive

Show HN: Desk - Open-source macOS workspace for CLI coding agents

Developer s-nish released Desk, an open-source macOS workspace that runs command-line coding agents such as Claude Code, Codex, Gemini CLI, Cursor Agent, Grok and OpenCode in one window, distributed as a Desk.dmg download from GitHub. Desk assigns a separate config folder per project β€” CLAUDE_CONFIG_DIR, CODEX_HOME and GH_CONFIG_DIR, with extra accounts in folders like ~/.claude-<name> β€” so each terminal and chat opens signed in to the right account, and the app states it never stores or sends user tokens. The release is built for Apple silicon and is not yet notarized, so browser downloaders must approve it via System Settings β–Έ Privacy & Security β–Έ Open Anyway, while the provided curl command skips that prompt.

read6 min views1 publishedNov 9, 2026
Show HN: Desk - Open-source macOS workspace for CLI coding agents
Image: Michielbdejong (auto-discovered)

Every agent. One desk.

A calm macOS workspace for Claude Code, Codex and friends.

Projects, terminals, files, git and chat in one window, and the right account for every project.

Download for macOS Β· Website Β· Report an issue

<sub>The screenshot follows your GitHub theme. Switch between light and dark to see both.</sub>

| <sub>Claude Code</sub> | <sub>** Codex**</sub> | <sub>** Gemini CLI**</sub> | <sub>** Cursor Agent**</sub> | <sub>** Grok**</sub> | <sub>** OpenCode**</sub> | <sub>** GitHub**</sub> |

Desk runs the command-line tools you already have installed and signed in. It never stores or sends your tokens.

| The right account, every time | Pick a Claude Code, Codex and GitHub account per project. Every tab opens already signed in as the right you. | | Terminal or chat | Run agents in real terminals, or as a conversation with attachments, permission modes and a worktree per chat. | | Files beside the session | Browse and edit with syntax highlighting. Preview images, PDFs and CSV. Unsaved buffers survive a restart. | | Review before you ship | Stage, commit and open pull requests. Comment on a diff line and send it to the agent. Desk never pushes on its own. | | A browser for your dev server | Dock it next to the agent. Design mode picks an element and hands it over as context. | | Limits at a glance | Usage rings for every account: blue, cantaloupe from 80%, red at the limit. | | Quit without fear | Open files, unsaved buffers, splits and tab order all come back. |

| <sub>Terminals and history. Every past conversation, one click away.</sub> | <sub>Files. The tree and editor stay next to the session.</sub> | | <sub>Git. Review, commit and open PRs with the project's GitHub account.</sub> | <sub>Chat and browser. A conversation view with a browser docked beside it.</sub> |

| <sub>Appearance. 24 app themes, dark and light.</sub> | <sub>Terminal. 18 palettes with a live preview.</sub> | | <sub>Editor. Syntax colours, previewed per language.</sub> | <sub>Accounts. Seven tools, as many accounts as you need.</sub> |

Desk opens in Electric: Midnight #02070A, Electric Blue #0297DE and a touch of Cantaloupe #FC734D, with serif headings, pill buttons and an animated pixel-wave backdrop on Home. The four pixel themes are Electric, Electric Light, Ember and Aurora. Turn the animation off from the sidebar or Settings β–Έ Appearance. It always stays still when Reduce motion is on.

From Terminal:

curl -fL https://github.com/s-nish/desk/releases/latest/download/Desk.dmg -o ~/Downloads/Desk.dmg && open ~/Downloads/Desk.dmg

Or by hand: download Desk.dmg from the latest release.

Then drag Desk to Applications, and install and sign in to the agents you use, such as claude or codex. Desk picks them up on launch.

Tip

Desk isn't notarized yet. If you downloaded it in a browser, macOS asks on first launch: open System Settings β–Έ Privacy & Security and choose Open Anyway. The Terminal command above skips that prompt.

Note

The release is built for Apple silicon. On an Intel Mac, build from source.

An account is a config folder. Desk sets the right folder for every terminal and chat it opens.

Tool Variable Default folder Extra accounts
Claude Code CLAUDE_CONFIG_DIR ~/.claude ~/.claude-<name>
Codex CODEX_HOME ~/.codex ~/.codex-<name>
GitHub GH_CONFIG_DIR ~/.config/gh ~/.config/gh-<name>

Desk finds existing folders on launch. Add account creates a new folder and runs the tool's own sign-in inside it. To show which email is signed in, Desk reads that one field locally: oauthAccount.emailAddress from .claude.json, and only the email claim from Codex's auth.json.

Important

Pull requests are untrusted code. When you check out or review someone else's pull request, Desk asks first and marks the worktree untrusted. Agents there start without the branch's own settings, hooks and MCP servers (--setting-sources user --strict-mcp-config), in plan mode for Claude Code and a read-only sandbox for Codex.

Keys Action Keys Action
⌘``⇧`` P Command palette ⌘`` P Open file in project
⌘``⇧`` F Search and replace ⌘`` O Add project folder
⌘``\ Toggle split panes ⌘`` B /⌘``⇧`` B Toggle projects / files
⌘`` T New Claude Code tab ⌘`` K Clear terminal
⌘`` W Close tab ⌘`` 1 –9 Switch tabs
⌘`` S Save file βŒ₯``⌘``↑ /↓ Switch projects
⌘``, Settings ⇧`` Enter Newline in Claude Code / Codex

Drop folders on the window to add projects. Drop files on a terminal to paste their paths.

More details: workspace, terminal, editor and appearance #

Workspace

  • Home appears whenever nothing is open: every project as a card with one-click Claude Code, Codex and Shell sessions, plus recent conversations.
  • Recovery restores open files, unsaved buffers, tab selection and split layout. Changed files on disk show a conflict before overwrite. Terminal tabs restore as restart cards.
  • Tab order: drag tabs to reorder, or focus one and useβŒ₯``⇧``← /β†’ .Esc cancels a drag.
  • Split panes: click a pane to target it, drag the divider or use its arrow keys to resize.
  • Source control covers the repository root, including when the project is a subfolder. Unsaved editor buffers are not included in commits.
  • Project search respects ignore files and skips binary files and build folders. Replace previews every change and skips dirty buffers.

Terminal

  • 12 original palettes plus 6 neutral ones, individual colour overrides and smooth scrolling. Text contrast is corrected to 7:1 where xterm supports it.
  • 20,000 lines of history. Incoming output never moves you to the bottom; use Latest output or⇧`` End to return.

Editor

  • Eight file colour themes: Match Desk, VS Code Dark, GitHub Dark, Dracula, Nord, GitHub Light, Solarized Light and Monochrome.
  • Syntax highlighting follows filenames, with lazy-loaded support for many languages.

Appearance

  • 24 themes, or match your system. Comfortable or compact spacing, panel visibility and optional account colours.
  • Preferences are saved on this Mac.

Requires Rust (rustup) and Node 20+.

npm install
npm run tauri dev           # live-re dev build
npm run tauri build         # release Desk.app and .dmg in src-tauri/target/release/bundle
cd src-tauri && cargo test  # backend tests
Path What lives there
src-tauri/src Rust backend: pty.rs terminals,accounts.rs account discovery,files.rs tree and editor I/O,gh.rs GitHub
src React UI. terminals.ts andeditors.ts keep xterm.js and CodeMirror alive outside React, so sessions survive tab and project switches
site The landing page: plain HTML, CSS and JS

App state is saved to ~/Library/Application Support/Desk/state.json.

Validation #

npm run build
npm run test:backend
npm run dev -- --host 127.0.0.1 --port 1421
npm run test:ui
npm run test:appearance

Set CHROME_PATH to use a different Chrome, or DESK_TEST_URL for a different dev-server address. The UI smoke test covers restoration, split panes, search and replace, Git controls, the command palette and quit-time persistence. Appearance checks cover theme contrast, system theme changes, terminal palettes, scrollback and alternate-screen navigation.

<sub>Claude, Codex, Gemini, Cursor, Grok, OpenCode and GitHub are trademarks of their owners. Desk is independent and not affiliated with them. Logos from Lobe Icons (MIT).</sub>

── more in #ai-agents 4 stories Β· sorted by recency
── more on @desk 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/show-hn-desk-open-so…] indexed:0 read:6min 2026-11-09 Β· β€”