Atelier is a native macOS workspace for editing code, running terminals, reviewing Git changes, and following coding agents.
The real Atelier app, running the atelier workspace on macOS.
| Area | What Atelier provides |
|---|---|
| Workspaces | Many live, isolated projects inside one native window |
| Editor | Native editing, syntax highlighting, find and replace, and per-file wrapping |
| Preview | Selectable Markdown documents and interactive local HTML previews |
| Terminal | Persistent multi-tab SwiftTerm sessions with agent-aware shortcuts |
| Git | Status, trees, diffs, staging, branches, commits, and pushes |
| Assistants | Read-only Gemma help, agent threads, response history, and Watchtower plans |
| Diagnostics | Live process, main-thread, workspace, editor, and lifecycle evidence |
Atelier targets macOS 26 and uses Swift 6.2 with strict concurrency. SwiftUI owns composition and state. AppKit owns focus-sensitive native surfaces.
- Keep several projects active without rebuilding their sessions.
- Switch projects from the persistent workspace rail.
- Reorder workspaces with drag and drop.
- Use
Command-1throughCommand-9for saved workspace positions. - Use
Command-0to open another workspace. - Restore workspace order, selected project, file tabs, terminal tabs, and tab selection.
- Keep tabs, terminals, Git state, assistants, palettes, and navigation isolated per workspace.
- Retain security-scoped folder access for each live session.
- Browse a lazy native file tree with Material Icon Theme icons.
- Keep ignored files visible with reduced emphasis.
- Create, rename, trash, and ignore files from the Explorer.
- Open replaceable previews with one click.
- Promote files into permanent, reorderable tabs.
- Edit through a native AppKit text surface.
- Use syntax highlighting, native find and replace, and per-file word wrap.
- Insert selected line references into the active terminal with
Command-Shift-C. - Refresh the Explorer incrementally through bounded file-system watching.
- Open Markdown and HTML files in Preview mode by default.
- Toggle Source and Preview with
Command-D. - Keep preview scroll, selection, outline, and page state across tab switches.
- Render Markdown as one selectable native document with normal
Command-Cbehavior. - Render headings, lists, tasks, quotes, callouts, code, tables, links, images, and footnotes.
- Highlight fenced code and provide visible code-block copy actions.
- Render Mermaid blocks with the bundled local Mermaid runtime.
- Show CSS hex colors as inline swatches.
- Show an "On This Page" outline when the document has enough headings.
- Load local HTML from its file URL with relative assets and scripts enabled.
- Run several SwiftTerm sessions per workspace.
- Keep inactive terminal processes and scrollback alive.
- Restore terminal tab count and titles after relaunch.
- Start restored terminals as fresh shells at the workspace root.
- Open a normal terminal with
Command-T. - Open Claude Code with
Command-Shift-,. - Open Codex with
Command-Shift-.. - Detect active coding agents from terminal foreground processes.
- Show live and completed agent threads under each workspace.
- Jump from a thread row to its matching terminal.
- Read repository identity, current branch, branches, changes, and recent commits.
- Group staged and unstaged changes into expandable directory trees.
- Stage, unstage, stage all, or discard individual changes.
- Open text and image diffs in center tabs.
- Keep Git state fresh after external repository changes.
- Switch branches from the repository controls.
- Generate a Conventional Commit subject through Gemma.
- Run the commit and push pipeline from one visible Push action.
- Keep destructive discard actions behind native confirmation.
- Use the Gemma workspace tab for read-only repository questions.
- Search workspace text through bounded literal queries.
- Read bounded file ranges, Git diffs, and selected terminal output.
- Keep Gemma unable to edit files or run shell commands.
- Use the right sidecar for context-aware help on the active tab.
- Run Terminal Guardian, Session Journal, Intent Guard, and Pre-commit Whisper.
- Read Claude Code and Codex transcript results in the Response overlay.
- Keep restored responses bounded to the newest 100 results per workspace.
- Read Watchtower plans in a dedicated workspace surface.
Gemma requests use Ollama at http://localhost:11434/api/chat. The default model is gemma4:cloud.
Atelier uses five persistent regions:
Window
|-- Workspace rail
|-- Explorer or Git sidebar
|-- Center tabs
| |-- Terminal
| |-- Source file
| |-- Markdown or HTML preview
| |-- Git diff
| `-- Gemma workspace assistant
|-- Gemma context sidecar
`-- Status bar
The layout adapts without replacing long-lived native content:
| Width | Sidebar | Sidecar |
|---|---|---|
| Below 900 points | Hidden | Hidden |
| 900 to 1279 points | Visible | Hidden |
| 1280 points or wider | Visible | Visible |
Focus mode hides workspace side panels. It keeps the workspace rail and center surface available.
SwiftUI owns application composition, workspace layout, commands, settings, and observable presentation state. AppKit owns native views, window behavior, focus, cursors, and tracking.
SwiftUI intent -> feature model -> service -> state update -> render
SwiftUI state -> representable -> AppKit controller -> native view
AppKit event -> controller callback -> feature state update
Main state owners:
| State | Owner |
|---|---|
| Application lifecycle, ordered workspace catalog, and active selection | AppModel |
| Isolated workspace resources and service lifetimes | WorkspaceSession |
| Open file, terminal, diff, and Gemma tabs | TerminalTabsModel |
| File content, selection, and wrap mode | EditorSession |
| Git status and operations | GitWorkspaceModel |
| Terminal process and native terminal surface | TerminalController |
| Window focus, zoom, and native shortcuts | WindowController |
| Context-aware sidecar features | GemmaSidecarModel |
| Runtime snapshots, probes, and captures | RuntimeDiagnosticsService |
Each WorkspaceSession owns its file watcher, Git model, palette, terminals, assistants, and security-scoped access. Closing one workspace stops only that session.
| Restored after relaunch | Session-only |
|---|---|
| Workspace order and selected workspace | Navigation history |
| Security-scoped workspace identity | Git presentation state |
| File tab path, order, type, and wrap mode | Git diff tabs |
| Terminal tab count and titles | Gemma tabs and conversations |
| Selected center tab | Palette state |
| Preview or permanent file disposition | Terminal processes and scrollback |
Terminal tabs restore as fresh shells. Missing files and unavailable workspaces do not block valid sessions.
| Shortcut | Action |
|---|---|
Command-O |
Open Folder |
Command-T |
New Terminal |
Command-Shift-, |
New Claude Code Terminal |
Command-Shift-. |
New Codex Terminal |
Command-Shift-; |
New Empty Terminal |
Command-P |
Quick Open |
Command-Shift-P |
Command Palette |
Command-F |
Find in active source file |
Command-Shift-F |
Search All Files |
Command-Option-F |
Find and replace |
Command-G |
Next search result |
Command-Shift-G |
Previous search result |
Command-B |
Reveal the active file in Explorer |
Command-E |
Toggle between Explorer and Git |
Command-D |
Toggle Source and Preview |
Command-Q |
Close active closable tab |
Command-W |
Toggle Watchtower panel |
Command-R |
Toggle Agent Responses |
Command-Shift-R |
Toggle left panel |
Command-Shift-T |
Toggle right panel |
Command-Shift-C |
Send selected line reference to terminal |
Control-- |
Back |
Control-Shift-- |
Forward |
Command-+ |
Zoom in |
Command-- |
Zoom out |
Command-0 |
Open a new workspace |
Command-1 through Command-9 |
Select workspace by rail position |
Command-` |
Select next workspace |
Option-Z |
Toggle word wrap |
Menus, toolbar controls, and the Command Palette call the same typed actions.
- macOS 26 or newer.
- Xcode with the Swift 6.2 toolchain.
- Git.
- SwiftLint for the packaging script.
Install SwiftLint with Homebrew:
brew install swiftlint- An Apple signing identity for stable installed-app folder permissions.
- Ollama running locally for Gemma and generated commit subjects.
- Access to the default
gemma4:cloudmodel through Ollama. - Claude Code or Codex transcripts for the Response overlay.
Run commands from the repository root:
swift build --package-path app/Atelier
swift test --package-path app/Atelier
app/Atelier/.build/debug/Atelier --selftestThe test target covers models, parsers, persistence, services, diagnostics, and feature policies. The self-test checks packaged persistence, file loading, Git parsing, Git operations, and file saving.
app/Atelier/scripts/build_and_run.sh run
app/Atelier/scripts/build_and_run.sh --verify
app/Atelier/scripts/build_and_run.sh --release| Command | Result |
|---|---|
run |
Build, sign, install to /Applications, and launch |
--verify |
Install, launch, and confirm the process starts |
--release |
Create app/Atelier/dist/Atelier.app |
The script signs with an available Apple identity. It falls back to ad hoc signing when needed.
Atelier ships a terminal-first Runtime Probe. It records bounded metrics without file content, terminal output, prompts, diffs, or credentials.
app/Atelier/scripts/atelier-doctor status --json
app/Atelier/scripts/atelier-doctor watch --interval 1
app/Atelier/scripts/atelier-doctor probe main
app/Atelier/scripts/atelier-doctor probe editor
app/Atelier/scripts/atelier-doctor probe editor-scroll --delta 400 --restore
app/Atelier/scripts/atelier-doctor capture --seconds 3status reports process, heartbeat, workspace, editor, diagnostics, and verdict data. capture collects a snapshot, flight recorder, process sample, logs, memory summary, and crash-report index.
| Package | Version | Role |
|---|---|---|
| SwiftTerm | 1.15.0 | Native terminal sessions |
| HighlightSwift | 1.1.0 | Syntax highlighting |
| KeyboardShortcuts | 3.0.1 | User-configurable shortcuts |
| Pow | 1.0.5 | Small SwiftUI effects |
| Luminare | Local pinned package | Native macOS controls and styling |
Atelier also bundles Mermaid, Material Icon Theme assets, and JetBrains Mono. Their license files ship with the related resources.
app/Atelier/
|-- Package.swift
|-- Packaging/
|-- Resources/
|-- Sources/Atelier/
| |-- Agent/
| |-- App/
| |-- Commands/
| |-- Editor/
| |-- FileTree/
| |-- Git/
| |-- Platform/
| |-- Settings/
| |-- Shared/
| |-- Terminal/
| |-- Theme/
| |-- Watchtower/
| `-- Workspace/
|-- Tests/AtelierTests/
`-- scripts/
Vendor/Luminare/
Generated .build/ and dist/ directories remain untracked.
- Read
DESIGN.mdbefore changing product behavior. - Follow
AGENTS.mdfor repository workflow and verification rules. - Keep generated build products outside Git.
- Preserve native editor, terminal, and preview surfaces across tab switches.
- Run build, tests, self-test, and the installed app for Swift changes.
