Engineering notes from building Luminair

The Luminair Blog

What we learned building Luminair with Luminair: the bugs, the fixes, the models and the commits behind each one.

51
Dispatches
8 h
Of reading
144
Commits behind them
2 Aug
First dispatch, 2026

Every post

Newest first
Featured · Models & Routing · 27 September 2026

The right model for every turn: inside Laya, Jev and Automatic routing

How Luminair sizes up each prompt and picks a model that is good enough: a zero-wait path for small edits, the Laya and Jev decision models, and rules for precision, allowance, billing and cache continuity. Researched with Perplexity and GPT-6 Astra, built inside Luminair.

Automatic routing
prompt Laya · Jev DECIDES ONLY Light Standard Heavy SIMPLE EDIT · 0 MS

September 2026

47 dispatches
50 · Mobile

Shipping the phone app on Android as sideloading closes

Google is tying every Android app to a verified developer, starting with four countries on 30 September 2026. We shipped Luminair's phone app on Google Play in the same weeks. What an Android app's identity really is, why our app ID still says overwatch, and the upload key we nearly lost.

30 September 20268 min read
49 · Building Luminair

No em dashes: enforcing a house style on model output

Telling a model not to use a character lowers the count. It does not make it zero. How Luminair enforces one small house rule in three layers: an instruction, a filter on the way out, and a test that fails the build, plus the places where we still rely on memory.

28 September 20268 min read
48 · Models & Routing

Your model didn't get dumber. Your harness might have.

When a model feels worse, the cause is often the software around it: defaults, prompts, context and timeouts. What two public postmortems showed, two harness bugs we shipped and fixed, and the tools Luminair gives you to check for yourself.

27 September 202610 min read
47 · Models & Routing

The September 14 limit cut, and living across five subscriptions.

Claude Code's weekly limits dropped on 14 September. How Luminair reads the meter of every account you connect, lets the provider's own words decide when a limit is real, and moves your message to the next account with room.

27 September 20269 min read
46 · Architecture

Harness engineering, from the inside.

Does the harness matter more than the model? The view from an app that wraps fifteen engines: one file per engine, one event vocabulary, the quirks the harness absorbs, and the tests that hold it together.

27 September 20269 min read
45 · Models & Routing

Kimi, DeepSeek, GLM, Qwen: adding the Chinese coding models

Chinese labs topped the open-weight charts in 2025. How Luminair added four of their models two different ways: Kimi on its own subscription CLI, and DeepSeek, GLM and Qwen as local weights, plus what a fast-moving CLI does to an app that bundles it.

27 September 20269 min read
44 · Models & Routing

When your coding tool changes owners.

Cursor is now part of SpaceX. Coding tools get bought, merged and repriced. How Luminair treats every vendor's agent as a replaceable dependency: one file per engine, vendor CLIs bumped on purpose, a session history the app keeps itself, and accounts remembered per engine.

27 September 20269 min read
43 · Security & Trust

Untrusted text in, actions out: prompt injection in practice

OpenAI says prompt injection is unlikely to ever be fully solved. What that means for an app that lets Slack messages steer a coding agent: three ways in, a role gate, a wait-for-approval mode, one channel per session, and the limits we are honest about.

27 September 20269 min read
42 · Building Luminair

A second model reviews the first

AI code review became a product category in 2025 and 2026. How Luminair uses a second reader on its riskiest changes: an 8-angle review of the device mirror, a Claude Opus 5 review of the computer-to-computer relay, and the independent verifier inside Luminair.

27 September 20269 min read
41 · Architecture

The system prompt the SDK never sent

Luminair's built-in Claude lane passed its rules to the Claude Agent SDK in an option the SDK does not read. How we found it, what went missing, why a verifier could only answer unknown, and the one options function every query now goes through.

27 September 20269 min read
40 · Systems & Memory

When every model fails at once, check the network first.

In October 2025 one empty DNS record in AWS us-east-1 took down apps all over the world at the same time. In September 2026 an 18 minute internet drop made every model in Luminair fail at once, each in its own words. How we turned our own relay poll into an internet heartbeat, and what the app now says instead.

26 September 20268 min read
39 · Architecture

The deploy that closed every Mac's socket for four hours.

A merge quietly swapped the source of Luminair's Cloudflare rooms worker for an older version. Three days later a deploy broke every Mac's live connection for four hours, and nothing logged it. What happened, why phones kept working, and the deploy gate we built after.

26 September 20269 min read
38 · Security & Trust

An app that never installs itself

Update channels are a favourite target, and an agent app has extra ways to change its own code. How Luminair removed every route by which it relaunched, installed or reloaded itself, and what a new build must prove before it lands.

26 September 20269 min read
37 · Systems & Memory

Context rot, from the client side

Long contexts make answers less reliable, and they also make them slow. What that looked like inside Luminair: a watchdog that killed healthy long turns, a session cap that guessed at tokens, and a working draft that compaction took away.

26 September 20269 min read
36 · Building Luminair

What did the agents actually do today?

Surveys say AI makes developers faster; a controlled study said slower, then found it could no longer measure. Our answer is smaller: a daily record of what the agents checked, what did not finish, and where the tokens went, kept without a model call.

26 September 20269 min read
35 · Building Luminair

Making our product video with an agent skill

Remotion turned video into code an agent can write, then retired its hosted MCP in favor of Agent Skills. Why Luminair's Remotion connector is three local things, and how the same library now renders our own social videos.

26 September 20269 min read
34 · Architecture

The 26 second freeze was ours, not Tahoe's

In late 2025, Electron apps made whole Macs stutter on macOS Tahoe. When Luminair, an Electron app, started freezing about once a minute, the OS was the easy suspect. A freeze recorder built into the app named the real culprits: a quadratic loop, a filesystem walk, and later a 1.2 GB read.

26 September 20269 min read
33 · Building Luminair

Vibe coding vs agentic engineering.

Vibe coding raised the floor; agentic engineering is the discipline for real software. How Luminair turns that discipline into switches: plan first, surgical edits, proof of done, tests as the gate, and a release that verifies every byte before anyone can download it.

25 September 20269 min read
32 · Building Luminair

Our homepage hero is the real app, captured over the DevTools protocol

The luminair.io hero is not a screenshot or a hand-built mock. A script drives a throwaway copy of the desktop app over the Chrome DevTools Protocol, switches it into demo mode and captures its DOM into a replica you can click.

25 September 20269 min read
31 · Systems & Memory

Memory without a vector database.

Luminair's memory is a folder of plain Markdown notes with YAML frontmatter. Here is how a digest picks what rides on each prompt, and why one 73 KB note taught us to skip docs and anything over 24 KB.

24 September 202610 min read
30 · Building Luminair

Porting a Mac-first agent app to Windows

Luminair started on the Mac. A Windows install that showed a macOS permissions sheet set off an audit: shells, process lists, keyboard chords, Stop, and an installer that said Completed with nothing installed.

24 September 20269 min read
29 · Building Luminair

Still shipping an Intel build

macOS 27 runs only on Apple silicon, and Intel Macs stay on Tahoe 26. Luminair still ships an Intel build. Building it on an Apple silicon Mac left out every x64 engine binary without a single npm error. How we caught it, the fix, and the Windows ARM64 installer that failed the same quiet way.

24 September 20269 min read
28 · Models & Routing

Shipping a new model without shipping an app.

How Luminair puts a newly released model in the picker without an app build: a signed live catalog, staged rollout with a kill switch, and hash-checked vendor CLI pins. And why Claude Opus 5.5 still needed a release.

23 September 20269 min read
27 · Architecture

Your Mac or their cloud: moving a session between computers

Cloud coding agents run your work on someone else's machine. Luminair keeps agents on computers you own and moves the work between them instead: a computer-to-computer relay, a checked session transfer, and Cloud Mode answers that become real turns on the Mac.

23 September 20269 min read
26 · Building Luminair

Zero GitHub minutes: releasing from a Mac under the desk

How Luminair ships a signed, notarized Mac release from one dispatch-only workflow, why the heavy lanes moved onto a self-hosted Mac in September 2026, the two days of keychain fixes that took, and the one reason we partly moved back.

23 September 20269 min read
25 · Systems & Memory

Ralph loops, and the loop guard that killed good runs

The Ralph Wiggum technique runs a coding agent in a loop until the work is done. Luminair has the opposite instinct: stop a run that repeats itself. How that guard killed productive Antigravity runs on 17 September 2026, and the rules it follows now.

22 September 20269 min read
24 · Architecture

Many agents on one Mac.

How Luminair runs many coding agents at once on one machine: a queue you can steer, Branch Out onto isolated git branches, a restore point before anything starts, and Open branches to diff and merge the results yourself.

19 September 202610 min read
23 · Models & Routing

Plugging in Antigravity.

Google's Antigravity arrived in a year full of new coding agents. What it took to run its agy command line tool inside Luminair: a self-updating binary, a sign-in code that has to come back to the CLI, a keychain per account, and a model list read from agy itself.

18 September 20269 min read
22 · Mobile

Your agents, from your phone.

Driving coding agents from a phone is mostly a sync problem. How Luminair's mobile relay moves prompts and live output between phone and Mac, keeps an offline outbox, tells a dead phone from a dead Mac, and the rewrite that stopped the two falling out of step.

17 September 20269 min read
21 · Mobile

Passing App Review with an app that needs your Mac

Luminair's phone app is a window onto a computer the reviewer does not have. Two App Review findings, guideline 4.8 and 2.1(a), and the morning of fixes that answered them: Sign in with Apple, a pairing code, and a demo workspace that needs no Mac.

16 September 20269 min read
20 · Building Luminair

When the agent says it's done

Anthropic showed that a model which learns to fake passing tests picks up worse habits too. Here is how Luminair refuses to take done at face value: empty and incomplete turns are rejected, an evidence rule asks for proof, and our own release tool learned the same lesson.

16 September 20269 min read
19 · Models & Routing

A usage meter for a vendor that has none.

Meta's Muse Code runs in Luminair as its own engine. Meta publishes no usage endpoint, so the Muse meter is Luminair's own per-model token tally priced at the rates in the Muse launcher's model catalog, shown in dollars and marked as an estimate.

16 September 20269 min read
18 · Security & Trust

Signing in the vendor's way: one keychain slot per account

Every Claude sign-in in Luminair runs Anthropic's own CLI in a private folder, and the CLI keys each credential in the macOS Keychain by a hash of that folder. How that works, the relaunch that overwrote an account on 14 September 2026, and the three fixes.

15 September 20269 min read
17 · Architecture

Skills, MCP and the 134K-token tool list.

Tool definitions can eat a model's context before you type a word. What Anthropic measured, how Agent Skills load only what they need, how Luminair hands one list of MCP servers to Claude, Codex and Gemini, and the 73KB note that made every prompt 100KB.

14 September 20269 min read
16 · Models & Routing

One window for every model.

Most engineers now use two to four AI tools at once. Inside Luminair's engine registry: one file per engine, one model picker, and one conversation that can change engines mid-thread.

10 September 20268 min read
15 · Security & Trust

Approval fatigue: permissions for agents you trust

People approve almost every permission prompt a coding agent shows them. Why Luminair runs agents without popups, puts walls and an undo button where the prompts used to be, and keeps its Luminair on one switch with hard limits on what it may approve.

10 September 20269 min read
14 · Security & Trust

The test that killed every process on the Mac

A fake process id of 1 turned a test cleanup into kill(-1), and every run of our core suite took down the whole login session. What that bug taught us about destructive agent actions, next to the Antigravity drive wipe and the rm -rf ~/ incident, and what Luminair puts between an agent and your files.

10 September 20269 min read
13 · Mobile

Talking to your agents: on-device and cloud dictation

Voice was in Luminair on its first day. How dictation grew from a Wispr Flow proxy to cloud Whisper with an on-device fallback, what the phone does differently, and the small fixes that mattered most.

10 September 20269 min read
12 · Architecture

Mirroring a session into Slack from the owner's Mac

Luminair's Slack mirror runs on the session owner's Mac over Socket Mode, not on a server. How turns become threads, how a pinned status card stays current, who is allowed to steer, and the invalid_arguments bug that only form encoding fixed.

10 September 20269 min read
11 · Building Luminair

What ships in the bundle: an allowlist, and the release it crashed

In March 2026 a source map in an npm package exposed Claude Code's full source. Luminair's desktop app does the opposite: nothing ships unless it is named. In September that allowlist left one file out and crashed release 1.0.109 at launch. What happened, and the build gate that now catches it.

9 September 20268 min read
10 · Security & Trust

Shai-Hulud and the dependency gates in our release

In 2025 two self-replicating worms spread through npm by stealing maintainers' tokens and publishing infected versions. An AI agent app installs a lot of npm, including every vendor's CLI. The gates Luminair's release has to pass, what each one catches, and what none of them can.

7 September 20269 min read
09 · Security & Trust

A loopback port is not private

Any web page you open can send requests to 127.0.0.1. Local MCP tools learned that the hard way. How an audit of Luminair's Router, which shares local models between Macs, closed its loopback door, rebuilt pairing on SPAKE2 and turned sharing off by default.

7 September 20269 min read
08 · Models & Routing

Benchmarks for your own harness

Public coding benchmarks are straining: OpenAI stopped reporting SWE-bench Verified, and Terminal-Bench now runs continuous QA. Luminair had a smaller problem: measuring its own harness on your tasks. How eval cases started, what an audit said was missing, and what a fair rerun needs.

7 September 202610 min read
07 · Models & Routing

Open weights on your Mac.

Qwen, DeepSeek, GLM, Kimi and gpt-oss made open-weight coding models a real option. How Luminair runs local models through Ollama and LM Studio next to frontier engines, and what the code does to keep a 20 GB model from wedging your Mac.

6 September 20269 min read
06 · Systems & Memory

Keeping the Mac awake for agents that run all night

Agents now take on work that spans hours. A laptop that sleeps ends the run. How Luminair holds a Mac awake: a one-time sudoers rule, intent that survives reboot, a lid state read live, automatic holds while any run is live, and queued work that runs on wake.

6 September 20269 min read
05 · Security & Trust

Keys the agent can use but never see.

AI-service key leaks rose 81% in a year. How Luminair's Secrets Broker let an agent use an API key it never saw, what our own security review found wrong with it, why we paused it, and the redaction that stayed on.

6 September 20269 min read
04 · Security & Trust

Driving Chrome without leaving a port open

Luminair's Chrome extension clicks and types like a person, which makes the link between Chrome and the app worth attacking. How it moved from a loopback port to authenticated native messaging, and who gets to switch it on.

1 September 20269 min read

August 2026

3 dispatches

Build with us.

Every post here describes something that shipped in the Luminair desktop app. Download it to try Jev, Laya and the multi-model harness on your own work.

Download Luminair