Changelog
Every pull request merged since Saturday 31 October: 80 changes and 222 screenshots of them in the app.
-
23 changes
-
Keep absolutely placed popovers where they were placed as they open
The turn navigator's card opens beside the line you hover again, and the slash menu floats above the composer again instead of pushing it up.
+2
-
Build dependencies with line tables only, keeping GPUI's debug info
Development builds of dependencies take about a third less disk, keeping line tables for debugging, while GPUI keeps its full debug information.
No screenshot: This changes how development builds are made and kept on disk; nothing in the app changes.
-
Show extension pills as icons in a narrow composer, and test the narrow layout
In a narrow composer, extension buttons with an icon show only their icon, and what extensions add gives way before the composer's own controls, the run target or send.
+1
-
Let the glass through code blocks, tables, tool output and tiles
On Liquid Glass, code blocks, tables, tool output, question cards and subagent tiles now let the window's glass through instead of showing as solid white or grey blocks.
-
Make the composer thinner, keep it on two lines, and stop it overflowing narrow panes
The composer is thinner and always gives your prompt a full line, with the model and its thinking level on the controls row below, and it no longer spills out of or loses controls in a narrow pane.
+3
-
Carry the pane token to iOS and regenerate its design tokens
The iOS companion's colors are generated from the desktop themes again, including the new pane color for the composer and sent messages.
No screenshot: No iOS screen draws with the new pane color. The Liquid Glass themes do look different on iOS, catching up with the desktop (opaque extension cards, stronger secondary text, blue primary buttons), but the iOS app was not built for screenshots.
-
Make Liquid Glass clear and draw its controls as macOS does
The Liquid Glass themes now let the desktop show through clearly instead of frosting it, and their settings lists, buttons and selection look the way macOS draws them on glass.
+3
-
Show a turn's context, copy and fork only on hover
Under a finished turn only how long it worked stays; the context it used and buttons to copy its reply or fork from it show when you point at the line.
+5
-
Start the CLI page at the same edge as the other reading pages
The CLI page now starts its title and text at the same spot as Privacy and security, the FAQ and changelog entries, instead of further left.
+1
-
Land every section link under the bar, with a trail of sections on the right
Clicking a section now lands its heading just under the bar on every page, and long pages show their sections as a quiet trail on the right edge instead of a column on the left, so reading pages get one centered column.
+4
-
Give the site's inner pages a compact header and a centered column
The site's inner pages open with a compact header instead of the homepage's hero, read in one centered column, and list their sections down the side rather than across the page.
+1
-
Let the window's glass through the prompt box and sent messages
On the Liquid Glass themes, the prompt box and the messages you send now show the window's glass through a light tint instead of a solid fill.
-
Welcome a first launch with what Napdock is, its agents, a look and a project
A first launch now opens a four-page welcome. It covers what Napdock is, which coding agents are ready, how the app looks, and how to start with a project.
+2
-
Put the composer's controls on its line until the draft outgrows it
An empty prompt box is now a single line with its controls beside the text, and it opens onto two rows once what you type no longer fits.
+8
-
Add Liquid Glass themes and give the agent picker T3 Code's sections
Two Liquid Glass themes stand the window on Apple's glass on macOS 26 and later, and the agent picker heads its Model, Thinking, Speed and Access sections without a custom model field.
+3
-
Run a lit cell round the loading grid instead of a diagonal wave
The loading grid now runs a lit cell round its ring, step by step, instead of sliding a gradient across.
-
Let an extension run without a rail entry, and give Plan usage none
An extension can now run without a rail entry, and Plan usage shows only in the status bar.
-
Keep a changelog on the site with an entry and evidence per pull request
Every merged pull request now gets a changelog entry on the site, with its kind, a description and captioned screenshots, written in the same pull request.
+1
-
Keep shimmer text still, the earliest turn start, and every level on This Mac
The working shimmer no longer makes letters slide, turns stop reading "Worked for 0s", and sessions on This Mac can choose every access level again.
+1
-
Polish pass: real font weights, smooth wheel scrolling, full-row hover, contrast-checked themes
Text draws its real weights and reads better on non-Retina displays, mouse-wheel scrolling glides, menu rows highlight edge to edge, and every theme meets a contrast floor.
+1
-
Fade the shimmer's glyphs instead of tinting them
The shimmer on the busy line, subagent cards and sidebar session names now visibly sweeps instead of drawing every glyph at full strength.
-
Pick model, thinking, speed and access in one picker
The prompt box's access, model, thinking and Fast chips become one chip that opens a two-column picker.
+3
-
Say Working on the busy line, with a 3x3 loading grid
The line above the prompt box now says Working with a steady timer and a small loading grid, and the background-tasks chip moves onto that line.
+5
-
-
19 changes
-
Shimmer a working session's name in the sidebar
A session whose agent is working now has its name shimmer in the sidebar, in addition to its accent dot.
-
Line the prompt box up with the transcript's column
The prompt box no longer sticks out 20 px past the messages, cards and bubbles above it.
-
Show what each running subagent is at on its card
A running subagent's card now has a second line saying what it is doing right now, with the same shimmer as the busy line.
-
Drop the 20 GB free-space rule before heavy builds
AGENTS.md no longer tells sessions to prune build output whenever less than 20 GB is free before a heavy Rust command.
No screenshot: Documentation change for agents working in the repository; nothing changes in the app.
-
Move plan usage into a Plan usage extension
Plan usage is now an extension you add in Settings › Extensions, and the app reads provider usage only once an extension asks for it.
+4
-
Seed a new worktree's target without its path crates
scripts/heavy.sh no longer copies the path crates' build output when it seeds a new worktree, which avoided a stale-build compile error.
No screenshot: Build script change; nothing changes in the app.
-
Drop a dev-linked extension's link when it is removed in Settings
Removing an extension that was linked with napdock-ext dev now stays removed instead of coming back at once or on the next launch.
-
Put Settings back at the window's foot, show plan usage as used, and stop offering Workbench
Settings returns to the foot of the sidebar, plan usage reads as percent used instead of left, and Workbench is no longer offered to add.
+3
-
Save a picture of the window, and test what the renderer draws
Window › Save Picture of Window saves a PNG of the whole window to the Desktop, and new tests read back the pixels the renderer draws.
-
Count what extension exchanges cost in the bench output
The NAPDOCK_BENCH output now measures each phase of the app's exchanges with extension workers, and the numbers show most proposed speedups are not needed.
No screenshot: Measurement only; nothing on screen changes.
-
Show a linked extension's failed build in the app beside the last good one
When a linked extension fails to build under napdock-ext dev, the app now says so and keeps running the last good build.
-
Run the palette, the menus and extensions' run(command) from one command table
The command palette, the menu bar and extensions now read from a single table of app commands.
-
List the extensions that ship with the app in Settings to add
Settings › Extensions lists the extensions bundled with the app under Available, each with an Add button.
-
Put Settings above a full-width bottom bar and level the header controls with the traffic lights
The bottom bar runs across the whole window, and the panel's header controls now sit in the same row as the traffic lights.
-
Start a session with no project
The new-session picker now lists No project first, so you can start a session without choosing a repository.
-
Parse a streaming reply again only from its last settled block
A reply that is still streaming is re-read from its last finished block instead of from the top, so long replies cost less to keep rendering.
No screenshot: Replies render exactly as before; the change is in how much work it takes to render them.
-
Build signed releases with a dist profile
Signed production packages now build with thin LTO over one codegen unit, making the app binary about 15% smaller.
No screenshot: Release build configuration; nothing changes in the running app's interface.
-
Time reply decoding and lane waits under NAPDOCK_TIMING
NAPDOCK_TIMING=1 now also prints how long a command waited for its lane and how long a reply took to decode.
No screenshot: Diagnostics only; nothing changes in the app without NAPDOCK_TIMING.
-
Bind extension instances only when what they bind to changes
An idle extension panel no longer rebinds and schedules a step on every frame.
No screenshot: The panel looks the same and does less work, so there is nothing to screenshot; the evidence is a benchmark.
-
-
34 changes
-
Run the SDK's Bun-only main tests only on Bun
The extension SDK's runner and sandbox tests are skipped under Node, and guardedFetch replays redirect bodies in a way both runtimes accept.
No screenshot: Test and tooling change; nothing is visible in the app.
-
Fix the deferred gpui-kit findings and issues #246, #280–#284
Toasts draw over dialogs, tooltips sit below their controls, dates can be typed, and several list and motion problems are fixed.
+2
-
Keep the waitlist schema with the control worker that reads it
Moves the waitlist migration next to the control worker so the local backend build works again.
No screenshot: Build and config fix; nothing to screenshot.
-
Fix what the gpui-kit stack's review found
Fixes from a review of the gpui-kit work, including Enter allowing a permission request while Deny was focused.
No screenshot: Keyboard, focus, boundary and policy fixes with no visible change of their own; tests cover them.
-
Add extension primitives: table, tree, menu, value inputs, charts, sheets
Extensions can now draw sortable tables, outlines, menus, number, date, time and radio inputs, charts, tooltips and side sheets.
+3
-
Say when the provider lost the conversation, and offer a retry
When Codex no longer has a session's thread, the app now says so and offers Retry instead of a generic error.
-
Run motion, overlays, panes, scrollbars and extension controls on gpui-kit
Toasts, menus, dialogs, resize edges and scrollbars move onto gpui-kit, and extensions gain select, slider, tabs, disclosure, spinner, skeleton and a virtualized list.
+3
-
Save sessions compare-and-set on their stream version
Two executors on one device database can no longer overwrite each other's session changes.
No screenshot: Backend change; nothing to screenshot.
-
Refuse archiving a running session and turns in an archived one
A session can no longer be archived while its turn runs, and an archived session takes no new turns, steers or approvals.
No screenshot: The app already refuses to archive a working session; this closes the same gap in the executor, for races and other clients.
-
Keep a stop the user pressed when a restart cuts the turn off
A turn you stopped just before a restart ends as stopped, not as a failure with a Retry button.
No screenshot: Cannot be shown in a screenshot; the stop mark and stop request run inside one executor process, so tests reproduce the crash between them.
-
Tell a parent of a waited-for child's end after a restart
A session waiting on a delegated child now hears when the child ends, even if the executor restarted in between.
No screenshot: Backend change; nothing to screenshot.
-
Start afresh on a device database SQLite cannot read
A damaged device database is moved aside and replaced, so the app is no longer stuck until someone deletes the file.
No screenshot: Backend change; nothing to screenshot.
-
Reset a native journal that is not a database
A workspace journal that is corrupt or not a SQLite file is moved aside and recreated instead of failing every turn.
No screenshot: Backend change; nothing to screenshot.
-
Start a fresh Codex thread when the saved one cannot be resumed
A Codex session whose saved thread is gone no longer stays stuck; the next message starts a new thread.
No screenshot: Backend change; the app shows its existing protocol-failure text.
-
Test the local lifecycle cases T3 Code covers
Adds executor tests for restarts, crashes, stops and delegation that the local session lifecycle did not have.
No screenshot: Backend tests only; nothing changes in the app.
-
Rebuild every control on gpui-kit primitives, same look
Buttons, switches, menus and rows now share one focus, keyboard and accessibility behavior, with no change to how they look.
+3
-
Keep a Claude turn open past a turn the CLI runs by itself
A Claude message sent right after a restart no longer finishes empty while its real answer goes unseen.
-
Keep local sessions in a device database
Projects, imports and sessions now live in one SQLite database on your Mac, and a turn cut off by a restart ends cleanly.
-
Move long lists onto gpui-kit, unpin Rust dependencies, tighten extension syntax
Long lists are virtualized, scroll areas get themed overlay scrollbars, and extension keyboard navigation and consent text are fixed.
+2
-
Rename the gbi abbreviation to nd
The leftover GetBranchIt abbreviation gbi becomes nd in environment variables, file and artifact prefixes, flags and the default branch prefix.
No screenshot: Mechanical rename across 203 files; nothing visibly changes in the app.
-
Propose a local-first device database
A design proposal for one SQLite event store per Mac, owned by the executor, so an executor restart resumes sessions.
No screenshot: A design document only; no code or app behavior changes.
-
Say what the relay toggle tells the new provider
The description of Settings > Advanced > Relay stopped tasks now says the new provider is told the task titles but starts nothing unless you ask.
-
Rebuild the marketing site as a full product site
The site is rebuilt edge to edge with Features, How it works, FAQ, Privacy and Download pages and the Napdock orange and doodle drawings.
+3
-
Sign and check the app as com.napdock.app
The packaging and release scripts now sign and verify the app as com.napdock.app, which fixes installs that stopped at the signing check.
No screenshot: Build and packaging only; nothing changes in the app.
-
Adopt the hand-drawn Napdock mark and a native Mac icon
The site, sign-in page and Mac app now use the hand-drawn Napdock mark, and the app ships an icon that macOS 26 and later draw at full size.
+3
-
Update provider CLIs from the app, on every connected computer
Napdock looks up each provider CLI's newest release and offers an Update button that runs the right command on this Mac or any connected computer.
+3
-
Cache lint and typecheck per workspace with Turborepo
bun run lint and bun run typecheck now run through Turborepo, so unchanged workspaces replay from cache instead of being checked again.
No screenshot: Build tooling; nothing changes in the app.
-
Run workspace tooling on Bun except Cloudflare's
Formatting, lint, tests, builds and generators now run on Bun, while Wrangler, workerd and miniflare commands stay on Node.
No screenshot: Build and tooling change; nothing changes in the app.
-
Grade provider CLIs by downloaded compatibility rules
Napdock grades each provider CLI as supported, limited, unsupported or broken from a rules file it downloads about hourly.
+1
-
Rename GetBranchIt to Napdock
The repository, packages, app and identifiers now use the name Napdock instead of GetBranchIt.
No screenshot: A repository-wide rename; no screenshots of the installed app were captured for this change.
-
Check comments for dividers, test labels and restated names
A new check, run first in bun run lint, rejects section dividers, test step labels and comments that only repeat a name.
No screenshot: Repository lint rule and comment cleanup; the app's behavior is unchanged.
-
Take the provider version check off the turn path and warn on old CLIs
Turns no longer run a provider CLI's --version before starting, and Napdock now warns when an installed CLI is too old.
+1
-
Show what the agent is doing and the background work it leaves running
A live activity line and a background-tasks chip show what a turn is doing and what is still running after it, with a stop button per task.
+2
-
Keep a Claude side chat on its parent's request prefix
A Claude side chat now sends the same tools and system prompt as its parent, so it reuses the parent's prompt cache.
No screenshot: Backend and protocol change; nothing looks different in the app.
-
-
4 changes
-
Rebuild the marketing site around an orange mark and product pages
The marketing site gets new Product, How it works, Benchmarks, Extensions and Changelog pages, a new masthead and footer, and refreshed screenshots.
+2
-
Run heavy commands one at a time in a machine-wide build slot
A new scripts/heavy.sh queues builds, typechecks and test runs so only one runs at a time on a machine.
No screenshot: Development scripts and repository rules; nothing changes in the app.
-
Keep pane content inside its pane and wrap long tooltips
Panes now clip their content at the divider, and long tooltips wrap instead of running across the window.
+2
-
Add /btw to ask a side question in a new side chat
Typing /btw followed by a question in a session opens a new side chat and asks it there, leaving the main conversation untouched.
+1
-
Earlier, by day
Before each pull request got its own entry.
-
30 changes
GitHub, inside the app
- The GitHub example extension: an inbox of pull requests and issues, native review, stacks, checks and merging
- Pull requests and agent sessions meet at their branch: Work on this PR starts a session on it
- OAuth for MCP connections, on this Mac
- Mermaid diagrams drawn natively, with a full-window viewer and pinch zoom
- New chats ask in words where they work: New worktree or Same branch
- Project, branch and worktree named over every prompt box
-
68 changes
Faster everywhere, asleep when idle
- An idle window parks its display link and draws nothing
- A headless performance harness for the agent panel, and frame counters behind NAPDOCK_BENCH
- Streaming and opening sessions made cheaper on the main thread
- Simulator frames from shared GPU surfaces on a native layer; several simulators at once
- Extensions can ship skills for agents
- Files reads a session's folder on this Mac straight from disk
- Plan usage in the status bar; toasts stacked above it
- Failures shown where they happen, with Try again
-
68 changes
The extension platform
- Extension protocol 4: panels, commands, slots, renderers, dialogs, themes and keys, drawn natively
- A main part under Seatbelt, signed native helpers, and agent tools through the plugin gateway
- The napdock-ext CLI: new, build, check, test, pack and dev with reload on save
- Install from a folder or npm; manage permissions in Settings
- The iOS Simulator and Browser preview examples, with live surfaces
- A context ring beside Send that breaks down on hover
- Only the transcript blocks in view are drawn; code highlighting resumes where it stopped
-
24 changes
Side chats and subagents
- Side chats: temporary, read-only chats in tabs beside the session
- Subagents shown live in their own pane; agents can delegate tasks to other sessions
- Switch a session to another provider mid-conversation
- Compact a long Claude session when you return to it
- Attachments, drafts, archive, and opening instantly from cache
- A square, borders-only design on fully tokenized spacing, type and motion
-
12 changes
Runners on Bun and Effect
- Agent runners on a private Bun, with the journal in SQLite
- Provider sessions owned by Effect scopes
- Sessions named automatically by a provider-neutral model call
-
14 changes
The turn navigator
- A rail of turns beside the transcript, lit by the pointer
- One live provider session per thread
- Queued prompts kept on Stop
-
45 changes
Native, all of it
- The React workspace and Tauri shell removed: the app is GPUI only
- A snapshot after every turn, so a turn can be undone, and sessions in Git worktrees
- Steer a running Claude turn; reorder queued prompts by dragging
- Files in tabs beside the chat, and rich Markdown replies
- Glass themes that make the whole window one pane of glass
- This Mac only: sessions with no server at all
- Plugins: a catalogue, grants and a gateway