Features

Everything inside Noml.

A complete tour of the desktop workspace for coding agents. Tabs, review, editor, terminal, git, palette, permissions, and the knobs to tune each one. Deepest with Claude Code; any agent CLI runs in the terminal.

HatcheryThe home base

One screen.
Every Claude process.

Hatchery is the machine-wide dashboard for every Claude Code CLI process running on your machine. Background work from any tab surfaces here. Drill into a session, pop back with Esc. Make it your home base and the project tab strip steps aside.

Hatchery-first workflow
Hatchery modeon · Ctrl+Shift+A
project tab strip hidden
click a row to drill in · esc returns

Hide the project tab strip and treat Hatchery as the home base. The title bar puts the dashboard one click away.

Cross-project view
noml-webreview refactor● running
noml-webdocs sweep◌ idle
backenddb migrate● running

Every active Claude Code process, grouped by project. Jump to the tab that's owning a task, or kick off background work from here.

Make it yours

Your workspace. Your rules.

Tabs on top or down a left rail. File explorer docked either side. Land on Hatchery or Generate. Five themes, eight accent colors, forty-plus rebindable actions. Configure the room before you type a word, then keep tweaking as you go.

Layout
Live preview
Project tabs
File explorer
Home view
Flow Mode
Generate

Flip any switch and the workspace rearranges. Tabs up top or down a left rail, the file tree on either side, a cold start that lands on Generate or Hatchery, and Flow Mode that jumps you to a run the moment it finishes.

Themes
Light, dark, black, classic, system. Classic is monochrome with zero-radius corners.
Accent color
Eight presets or any hex you paste. Tints buttons, links, and highlights across the app.
Editor
Syntax themes like One Dark and Tokyo Night, plus your mono font, size, and weight.
Custom keybindings
Click any action, record a chord. Platform-aware (Mod = Cmd / Ctrl).
Review

Every edit lands as a row.

Each Edit, Write, or MultiEdit from Claude becomes a reviewable row with a side-by-side diff and the reasoning behind it. Gate every change in ask-first mode, or run on auto and read the ledger as the record of everything that landed.

Diffs with reasoning
editsrc/routes/Features.tsx
Why: replaces flat cells with a behavior matrix so each mode's actual permissions are visible at a glance.

Each row carries the model's rationale next to the change. Decide with context, not from a hex blob.

Stale-file detection
editHeader.tsxready
editFooter.tsx● stale · disk drift
editindex.cssready

If another tool touches a file mid-conversation, the row marks itself stale. You confirm before the apply step proceeds.

Streaming coherence
1. add PermissionMatrix
2. extract CELL_META · chained from 1
3. drop PermissionCell · chained from 2

Sequential edits to the same file chain off the prior computed state, not disk. Mid-stream edits stay consistent until you accept.

Batch or single
Header.tsxaccept · A
Footer.tsxaccept · A
index.cssreject · R
Accept all · ⇧A

Approve one row, a group, or the whole turn. Keyboard shortcuts for both lanes.

Conflict merge
<<<<<<< ours
<Footer />
=======
<Footer compact />
>>>>>>> theirs

If a stale row needs reconciling, an inline three-way diff opens with AI-assisted resolution.

Checkpoints
ckpt.3before merge2 min ago
ckpt.2before refactor14 min
ckpt.1manual save1h 02m

Snapshot file state before a risky run. Revert any time.

Noml review pane showing pending diffs from a Claude turn
Editor

CodeMirror 6, the parts that matter.

A real code editor, not a textbox. Multi-language highlighting, syntax themes, and Prettier formatting on demand. Select any block and let Claude rewrite it in place, or preview markdown and images without leaving the editor.

Multi-language
tsTypeScript
jsJavaScript
pyPython
rsRust
cssCSS / HTML
mdMarkdown
+ dozens more

JavaScript, TypeScript, Python, Rust, CSS, HTML, JSON, Markdown, and dozens more.

Inline edit
Ctrl+Kadd a guard clause
let u = users.find(byId)
const u = users.find(byId)
if (!u) throw new NotFound()

Select code, hit Ctrl+K, and say what to change. Claude rewrites the selection in place; accept or reject the diff.

Syntax themes
One Darkactive
Tokyo Night
Dracula
+ more every release

Choose how your code is colored, independent of the app theme. Pick one or let it follow the app, with more added in every release.

Rendered preview
Release notes
Matrix view replaces the four flat cells.
hero-workspace.png

Flip a file into its rendered form: GitHub-flavored markdown, or images like PNG, SVG, and WebP shown in place of raw bytes. Lazy-loaded, so it stays out of the bundle until used.

Prettier on demand
Format the buffer with the project's prettier config. Detects language, respects .prettierrc, or formats on save.
Terminal

A real PTY. Not a wrapper.

xterm.js over a Rust pseudo-terminal. Run claude, codex, gemini, aider, cursor, npm, git, or any interactive CLI. Any agent that ships a CLI runs in the same window as your editor, git, and files. Terminal blocks live per project, so sibling tabs in the same workspace share them.

Interactive PTY
~/work/noml-web npm run dev
VITE v7.1.4 ready in 412 ms
Local: http://localhost:5173/

Full ANSI, real signals, real readline. The same shell you'd open in a separate window.

Per-project blocks
noml-webdev server● live
noml-webtsc --watch● live
backenddb migrate✓ done

Terminal output stored against the workspace root. Switch tabs in the same repo and the history follows.

Git

Source control without the side trip.

The whole workflow sits beside your editor and chat. Stage and commit, branch and merge, push and pull, resolve conflicts in place. libgit2 under the hood, gh for pull requests if you've got it installed.

Diff & stage
Inline git diff dialog
Branches
main↑ 0 ↓ 0
feat/permissions↑ 3 ↓ 1
feat/git-overhaul↑ 12 ↓ 0

Create, checkout, delete. Ahead and behind counters per branch. Remote tracking visible at a glance.

AI commit messages
modelsonnet
subjectfeat: matrix view for permission modes
Replaces flat cells with a behavior matrix mapping action class to mode.

Generate from the staged diff. Pick Haiku, Sonnet, or Opus. Edit before commit.

Merge with conflicts
<<<<<<< HEAD
return user.permissions.allowed;
=======
return user.canExecute(action);
>>>>>>> feat/permissions

Three-way diff with AI-assisted resolution. Abort or continue mid-merge without leaving the dialog.

Worktrees
main~/work/noml-web
feat/spike~/work/noml-web-spike
hotfix~/work/noml-web-hotfix

Add, list, remove worktrees from a dedicated dialog. Multiple working copies of one repo, no shell required.

Pull requests via gh
#142feat: matrix viewdraft
#138fix: stamp wobbleopen
#129chore: bump taurimerged

If gh is on PATH, open PRs and list the open ones for the current branch from inside the app.

Stage / unstage
Features.tsxstaged · +42 −18
Footer.tsxmodified · +7 −3
index.cssstaged · +2

Per-path. Click to stage hunks; commit dialog runs in a CodeMirror editor.

Tags
List, create, delete, push individual tags or all of them.
Background fetch
Off, every 5 minutes, or every 15. Dirty file count in the title bar.
Pull strategy
Merge or rebase, your call. Configurable per app session.
Permissions

You decide what hits disk.

Four modes, one toggle. Every row of the matrix is one class of action; every column is a mode. The ledger records every write, regardless of mode.

Action
Plan
Ask first
Auto-accept
Unrestricted
File edits
Commands
External tools
Proposed:held until you switch modesChat:prompts inlineReview:streams to review viewAuto:runs without asking
ExtensibleOpen at every seam

Bring your own MCP, skills, and prompts.

Configure MCP servers per workspace. Drop in custom skills Claude can invoke. Save prompt templates with selection, file, branch, and cursor variables. Bookmark directories as landmarks Claude can reference inline.

MCP servers
filesystemstdio · @modelcontextprotocol/server-filesystem
githubsse · github-mcp.fly.dev/sse
postgresstdio · paused

stdio and SSE. Pre-canned configs for the official MCP servers. Toggle per workspace.

Skills
code-reviewerv1.2 · auto-trigger
frontend-designv2.0 · manual
verifyv1.0 · manual

Custom scripts and prompts Claude can call. Install, create, edit, delete from the Skills tab.

Prompt templates
/refactor·Ctrl+Shift+R
Rewrite {{selection}} in {{file}} using {{branch}} conventions

Reusable prompts with {{selection}}, {{file}}, {{branch}}, {{cursor}} variables. Hotkey-bindable.

Landmarks
workspace~/work/noml-web
src~/work/noml-web/src
design~/projects/design-system · read-only

Bookmark directories with any custom name. Claude can reference them in chat by that name.

Lean

All of that, under 45 MB.

Tauri 2 over a Rust backend with a React 19 frontend. Native window, native menus, native scroll. macOS, Windows, and Linux.

~ 410 ms
Cold launch
~ 177 MB
Idle RAM
< 45 MB
On disk
2
Platforms
Get Noml

Pick your platform.

The editor, terminal, and git work out of the box. Add the Claude Code CLI on your PATH for the native agent experience; any other agent CLI runs in the terminal. WebView2 ships with Windows 11. macOS build is Apple Silicon only. Linux ships as an x64 AppImage.