The native macOS companion app for Claude Code.
Six live Claude sessions in one window. Embedded terminals with real PTYs. A polished UI for MCPs, skills, plugins, and usage analytics — all the things Claude Code can do, surfaced where you can see them.
Download for macOS → Read the latest release notes →
- Tabbed Claude sessions — run multiple Claude Code sessions side-by-side in one window. Each tab is a real PTY hosting a real
claudeprocess, not a subprocess wrapper. Drag to reorder. Cmd+1–9 to switch. - MCPs tab — every MCP feature Claude Code exposes, with a UI: three real scopes (User / Local / Project), HTTP headers + Bearer-token masking, OAuth fields,
alwaysLoadtoggle, per-server timeouts,${VAR}env expansion. Matches what Claude Code's docs describe; saves you from hand-editing~/.claude.json. - Skills tab — browse personal, project, and plugin skills with full SKILL.md preview. See which copy actually wins when a name exists at multiple scopes. Create, clone, toggle auto-invoke.
- Marketplace tab — browse plugin marketplaces, install/update/uninstall plugins.
- Usage tab — GitHub-style daily heatmap, week/month/year views, today vs yesterday delta, K/M/B/T token formatting.
- Restart session — in-place SIGTERM + respawn so a Claude session picks up newly-added MCPs / hooks / skills without leaving the terminal.
- Sparkle auto-update — signed, notarized, EdDSA-verified releases shipped silently in the background.
Download the latest signed + notarized DMG from work.munyamakosa.com and drag Work.app to /Applications.
That's it. No Homebrew tap (yet), no extra setup. The app uses Sparkle for auto-updates — once installed, new versions land silently and the badge flips to "Relaunch to update" when ready.
Requirements:
- macOS 15.0+
- Xcode 16+
- xcodegen (
brew install xcodegen)
git clone https://github.com/farmhutsoftwareteam/work-for-claude-code
cd work-for-claude-code
xcodegen generate
open Work.xcodeprojBuild & run in Xcode (⌘R). For a release build matching the published DMG, run ./release.sh <version> — but note that requires your own Apple Developer ID, signing identity, and a configured notarytool keychain profile (see NOTARIZATION-INSTRUCTIONS.md).
Sources/ All Swift source (~45 files)
├── Store.swift Single source of truth — parses ~/.claude/, watches for changes
├── ContentView.swift Root SwiftUI scene + tab routing
├── ExtensionsView.swift MCPs/Skills/Marketplace tabs
├── TerminalsController.swift
│ Owns all embedded SwiftTerm PTYs, idle/busy detection, tab lifecycle
├── MCPEditor.swift The MCP add/edit sheet
├── MCPConfigWriter.swift NSFileCoordinator-protected writer for ~/.claude.json + .mcp.json
├── UsageView.swift Heatmap + activity charts
└── …
project.yml xcodegen project descriptor
Work.entitlements Sandbox-off + AppleEvents-on entitlements
release.sh Build → sign → DMG → notarize → staple pipeline
docs/ Marketing + distribution site (deployed to work.munyamakosa.com)
├── index.html
├── appcast.xml Sparkle feed
├── releases.html Auto-generated from appcast.xml
└── …
scripts/build-releases.js Regenerates releases.html from appcast.xml
recipes/ Marketplace recipes for one-click MCP installs
resources/ Icons, DMG background, etc.
Atelier uses each provider's local runtime instead of collecting API keys or proxying conversations through a hosted service.
For Claude Code it:
- Reads
~/.claude/projects/<cwd-hash>/*.jsonlfor session history + token counts - Reads
~/.claude.json(top-level +projects.<cwd>.mcpServers) for user/local MCPs - Reads
<cwd>/.mcp.jsonfor project-scoped MCPs - Reads
~/.claude/skills/,~/.claude/agents/,~/.claude/plugins/for skills/agents/plugins - Spawns
claude/claude --resume/claude --continuevia embedded SwiftTerm PTYs - Writes back to
~/.claude.jsonand.mcp.jsonthroughNSFileCoordinatorso the CLI and the app cooperate cleanly
For Codex it starts the local codex app-server over JSONL stdio. Account access, ChatGPT subscription authentication, model discovery, thread storage, approvals, and MCP configuration remain owned by Codex. Atelier discovers the live model catalog (including Sol when the account exposes it), can explicitly import compatible project servers from .mcp.json into .codex/config.toml, and never copies Claude credentials into Codex.
When either provider's data model changes, Atelier follows its local runtime. There is no Atelier cloud service and no telemetry.
- SwiftUI + AppKit hybrid. The embedded terminal is a
LocalProcessTerminalViewfrom SwiftTerm wrapped inNSViewRepresentable. Everything else is pure SwiftUI. - XCTest release gate.
xcodebuild test -scheme Work -destination 'platform=macOS'covers stream conformance, Codex model/history mapping, provider handoff, terminal security, ring-buffer eviction, and MCP terminal bridging. - Self-relocates to /Applications. First-launch from any location outside /Applications triggers an offer to move + relaunch — Sparkle can't update an app running from a translocated quarantine path, and this avoids the "Atelier can't be updated" trap.
- No CI yet. Releases are built locally on the maintainer's machine because they require an Apple Developer ID signing identity. CI signing is on the roadmap.
PRs welcome. Some ground rules:
- One feature per PR. Easier to review, easier to revert if it ships a bug.
- No new dependencies without discussion. The dependency surface today is intentionally tiny: SwiftTerm, Sparkle, swift-markdown-ui.
- Match the existing voice in copy. Buttons, tooltips, and release-notes copy in this repo follow a deliberate plain-English style (no "Awesome!", no emoji, no marketing fluff). Read a few existing sheets before writing new copy.
- No code-signed builds in PRs. The signing identity is the maintainer's. Submit unsigned changes; the maintainer signs the release build.
If you find a bug: open an issue with the symptom, your macOS version, and (if possible) the steps to reproduce. The bug-hunt skill plays well with this repo if you want to triage in your own Claude session before filing.
- Not affiliated with Anthropic. Atelier is a third-party companion app. Claude Code is a separate product made by Anthropic.
- Not a Claude Code replacement. It runs Claude Code; you still need
claudeinstalled (Atelier helps you find / install it if missing). - Not a chat interface. There's no Atelier-owned chat — every conversation lives in a real Claude Code session in a real PTY.
MIT — see LICENSE.
Built by Munyaradzi Makosa in public. Issues and PRs at the issues page.