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 firstThe 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.
September 2026
47 dispatchesShipping 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.
→ 49 · Building LuminairNo 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.
→ 48 · Models & RoutingYour 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.
→ 47 · Models & RoutingThe 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.
→ 46 · ArchitectureHarness 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.
→ 45 · Models & RoutingKimi, 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.
→ 44 · Models & RoutingWhen 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.
→ 43 · Security & TrustUntrusted 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.
→ 42 · Building LuminairA 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.
→ 41 · ArchitectureThe 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.
→ 40 · Systems & MemoryWhen 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.
→ 39 · ArchitectureThe 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.
→ 38 · Security & TrustAn 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.
→ 37 · Systems & MemoryContext 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.
→ 36 · Building LuminairWhat 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.
→ 35 · Building LuminairMaking 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.
→ 34 · ArchitectureThe 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.
→ 33 · Building LuminairVibe 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.
→ 32 · Building LuminairOur 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.
→ 31 · Systems & MemoryMemory 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.
→ 30 · Building LuminairPorting 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.
→ 29 · Building LuminairStill 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.
→ 28 · Models & RoutingShipping 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.
→ 27 · ArchitectureYour 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.
→ 26 · Building LuminairZero 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.
→ 25 · Systems & MemoryRalph 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.
→ 24 · ArchitectureMany 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.
→ 23 · Models & RoutingPlugging 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.
→ 22 · MobileYour 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.
→ 21 · MobilePassing 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.
→ 20 · Building LuminairWhen 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.
→ 19 · Models & RoutingA 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.
→ 18 · Security & TrustSigning 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.
→ 17 · ArchitectureSkills, 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.
→ 16 · Models & RoutingOne 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.
→ 15 · Security & TrustApproval 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.
→ 14 · Security & TrustThe 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.
→ 13 · MobileTalking 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.
→ 12 · ArchitectureMirroring 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.
→ 11 · Building LuminairWhat 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.
→ 10 · Security & TrustShai-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.
→ 09 · Security & TrustA 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.
→ 08 · Models & RoutingBenchmarks 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.
→ 07 · Models & RoutingOpen 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.
→ 06 · Systems & MemoryKeeping 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.
→ 05 · Security & TrustKeys 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.
→ 04 · Security & TrustDriving 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.
→August 2026
3 dispatchesAbilities: specs that travel with the session
Spec-driven development asks you to write the plan down before the agent codes. Luminair's abilities are the small end of that idea: one-line rules attached to a session and sent on every turn. Why the rule text moved out of the app bundle and into your account, and what went wrong on the way.
→ 02 · Security & TrustAn agent with hands on your Mac
OpenClaw showed how much people want an AI agent that can act on their computer, and how quickly that goes wrong when access is ambient. How Luminair's Desktop Control gives a session eyes and hands on the Mac: off by default, gated on every call, rate limited, and visible whenever it is driving.
→ 01 · Systems & MemoryDeep research that can't drown the Mac
Cloud deep-research agents cost money per search. Run the same idea on a laptop and the cost is memory. After a machine lockup in July 2026, Luminair's multi-agent research got a hard safety pass: web-only agents, a pre-flight memory gate, agents admitted one at a time, and a watchdog that stops the run before the Mac drowns.
→No dispatch matches that search.