localfirst

Product updates · Meaningful changes only

Changelog

What changed, why it matters, and what you will notice.

Localfirst is an early build. We publish the meaningful improvements here and keep the implementation details out.

Latest releaseChangelog

One thread, one room. Every teammate, every decision, still there.

A shared thread now works the way it looks: teammates hand work to each other in front of you, disagreement gets settled instead of forgotten, and nothing disappears from the conversation once it has been decided.

Teammates work in the same room

A thread with three teammates in it used to be three private chats sharing a scrollback. Now one teammate can ask another for work, the ask appears in the thread under the teammate who made it, and the teammate receiving it is told who asked. Delegation reads as a sentence between two replies.

History carries its authors, so a week later the thread still answers who asked for what. A reply no longer reaches every other teammate labelled as its own voice, which means a follow-up is never answered by someone who did not do the work.

Nothing disappears once it is decided

Deciding a permission used to remove the request, and applying a proposal used to remove the proposal. Scrolling back through a finished exchange showed a question and an answer with every step in between gone.

The conversation is append-only now. A waiting request is the question and a decided one is the record of your answer; proposals stay through applied, discarded, and failed; and an approved team setup keeps the roster you actually approved. Coding-CLI teammates record their work too, so reading nine files and running the tests no longer leaves four silent minutes and a paragraph.

Disagreement gets an outcome

When a teammate objects, the objection is tracked from raised through acknowledged, resolved, withdrawn, or escalated. Only an explicit outcome ends one—the objecting teammate withdrawing, another teammate settling it, or you deciding. Somebody simply speaking afterwards is no longer mistaken for agreement.

A new instruction stops the work you had running in that thread rather than queueing behind it, and in a Project Thread it reaches the descendant work it was actually about. A choice you make binds the teammates who arrive later, not only whoever was in the room at the time.

Effort you can check, status you can trust

Automatic thinking effort now reads the shape of the task instead of scoring its vocabulary. Balanced is the answer for ordinary work, Deep has to be earned by something unmistakable—an unexplained failure, an irreversible effect, a security question—and the reason recorded on the run is a sentence you can check against what you typed.

Work you stopped reports as stopped, not failed. A coding CLI that has run out of its usage window is treated as busy rather than as having refused you, so Automatic routes around it while you can still choose that teammate deliberately.

Additional improvements
  • A resumed coding-CLI teammate is now told the thread history it missed, so it can see what other participants said in its own thread.
  • Plan, configuration, and automation proposals are conversational turns rather than panels dropped into the transcript, and a still-generating automation no longer offers to enable a draft you have not seen.
  • Chatting in a thread no longer cancels a routine running there, and closing a workspace releases waiting approvals instead of holding on for several minutes.
  • The release gate passes with 1,581 unit tests, 327 integration tests, 29 privacy checks, 14 renderer journeys, and the stable macOS arm64 package.
ReleaseChangelog

Speak naturally. Review the words. Keep every action deliberate.

Voice now works locally from the first launch, while stronger team setup, honest coding-CLI limits, and better thread recovery make everyday collaboration steadier without taking control away from you.

Voice works out of the box

Press the microphone in the composer, speak, and stop. Localfirst ships its own pinned whisper.cpp runtime and recommended speech model, so the first transcription works without an account, a network request, a model download, or a settings detour.

The transcript joins the draft you were already writing and is never sent automatically. Recordings are deleted after transcription, microphone permission is requested at the moment you press, and optional model downloads happen only when you explicitly choose one.

Build a team without crossing your review

Team proposals are more resilient across local models and coding CLIs. Localfirst constrains structured output where the runtime supports it, repairs known tool-name aliases, and retries malformed drafts without granting the setup run tools or a writable project boundary.

Edits save in order, runtime changes apply atomically, and approval creates exactly the reviewed teammates and Team Board. The finished setup opens an idle work thread with its origin attached; no teammate begins working until you ask.

Usage limits say only what the runtime knows

Claude Code and Codex teammates can now show the usage windows their own runtimes report. A limit blocks new work only after the vendor actually refuses a request, applies only to the affected runtime, and clears when its reset time passes.

Missing data stays unavailable instead of becoming a guessed percentage. Stale observations age while the app is open, so a teammate does not remain blocked merely because nothing else refreshed the screen.

Threads return you to the work

Conversations open on their latest messages while exact Run Trail links still land on the message they reference. If you scroll into history, Localfirst keeps your place rather than pulling you back down as replies arrive.

The Threads badge now counts unread replies only in the Space you are viewing, and setup, direct, and project threads share more reliable recovery when a runtime answers with nothing or a process ends unexpectedly.

Additional improvements
  • The composer uses one contextual action: microphone for an empty draft, Send for text or attachments, and recording status while voice is active.
  • A missing bundled speech model is reported as an incomplete installation rather than asking you to repair product setup.
  • Downloaded speech models are pinned by revision, size, and SHA-256 and are shared across stable and canary builds.
  • The release gate passes with 1,159 unit tests, 243 integration tests, 29 privacy checks, all shipped renderer journeys, and the stable macOS arm64 package.
ReleaseChangelog

The team keeps working—and every result stays connected.

Routines can now run real team workflows in shared threads, while a living Canvas, local search, portable teams, and explicit model controls keep the work visible and yours.

Routines that work with the team

Describe a recurring job in one sentence, then review the schedule, trigger, team, and destination before it is enabled. A routine can start on a schedule, a file change, or a teammate finishing, and can run teammates in sequence or in parallel.

Results return to a shared thread or the Library with their history intact. A teammate can propose a routine during conversation, but only a person can approve it, leave it paused, or turn it on.

One session, wherever you look

An automation run joins the same shared thread, persistent Canvas card, participant list, and event stream as the rest of the work. Its result is an authored message, not a detached background notification.

You can join, steer, pause, or stop while it runs. Decisions wait without choosing a default, and a resumed run continues without repeating teammates who already finished.

Canvas shows living work

Canvas now projects the direction, active work, artifacts, decisions, and questions that need attention. Threads and runs remain the detail surfaces behind those cards instead of competing copies of the same state.

Cards change state in place as work advances, while Trails preserve how an outcome was produced and where a person intervened.

Find anything without sending a query away

Workspace-wide search uses a local SQLite index across Spaces, threads, messages, work, artifacts, teammates, runs, tool calls, routines, activity, and memory. Scope and type filters make broad searches manageable.

Every result opens the exact run, thread, artifact, or memory it came from. Tool arguments, tool output, and structured proposal envelopes are deliberately excluded from the index.

Take a team to another machine

Portable teammate and Team Board packages carry roles, board order, runtime requirements, and optional selected memory. Import shows every change first and lets you merge or duplicate deliberately.

Credentials, chats, sessions, machine paths, run history, and routines are never included. If a required model is unavailable, the imported teammate stays disabled instead of silently changing runtimes.

Models and effort match the task

Model choices now come from the runtime itself, with a thinking-effort control for each teammate. Automatic can route each request, the exact native value is recorded in the Run Trail, and a task-level override lasts for one send only.

Installed coding CLIs are discovered automatically as they appear or change. Localfirst keeps the security boundary explicit rather than implying that every runtime has the same privacy model.

Additional improvements
  • Create a routine from one sentence and verify its schedule, team, and destination before saving.
  • Coding CLIs are discovered automatically when they are installed and signed in.
  • Dense setup cards have been replaced with focused review disclosures, clearer dialogs, and more direct actions.
  • Example workflows no longer occupy the product UI, so the first run starts with your own work.
  • The complete release gate passes with 886 unit tests, 205 integration tests, 29 privacy checks, all renderer journeys, and the packaged desktop build.
ReleaseChangelog

Build the team, then see exactly how it works.

Agents can now propose complete teams and configuration changes for your review, while bounded context and a more honest Run Trail keep local work reliable and inspectable.

Ask an agent to build the team

Use /team or ask naturally in a thread. A capable agent can propose the roles, models, instructions, tools, permissions, and Team Board needed for the work, without creating anything behind your back.

The complete setup arrives as a review card and editable proposal. Localfirst validates every runtime and permission, shows what will persist, and waits for final confirmation before creating an idle team.

Refine a setup without giving up control

Duplicate warnings catch repeated configurations, and an approved setup can become a reusable Space template. /team-update proposes field-level changes to existing agents and Team Boards with every before-and-after value visible.

Trusted-template automation is deliberately narrow: it requires reviewed history, local models, no standing permissions, one-at-a-time execution, and workspace controls with an emergency stop. Automatic creation never starts work.

Context that leaves room for the answer

Large file reads, logs, searches, JSON, and other tool results are now packed before they crowd out the response. The complete result stays in the Run Trail, and the agent can retrieve omitted evidence through a bounded, run-scoped context reference.

Conversation history and attachments use explicit token budgets. If the request cannot fit the selected runtime, Localfirst stops before dispatch and explains which input is consuming the window.

The Run Trail explains the run

Every new run records the exact message and actor that started it. Per-agent and batch usage, context sections, omissions, finish reasons, and local-compute timing are visible without storing prompt content inside the usage record.

Activity labels now follow observable events—Reading, Investigating, Creating, Reviewing results, and Responding—rather than presenting a generic spinner as evidence of progress.

Local models fit the machine more honestly

Ollama planning now reserves answer and tool-result headroom, responds to swap pressure, and prevents Fast mode from quietly running a model that is partly offloaded to the CPU. Automatic mode can still accept that tradeoff when quality matters more than latency.

Space memory recall now uses a bounded local SQLite index instead of scanning every memory before dispatch. No embedding service or hosted fallback was added.

Additional improvements
  • Exact duplicate tool results and repeated handoff evidence are represented once.
  • Stable prompt instructions stay at the front so exact repeats can reuse Ollama's prompt cache.
  • The Context tab shows section-by-section token estimates and why an input was omitted.
  • Resumed coding CLI sessions no longer receive conversation history they already own.
  • Gemma 4 12B stayed fully GPU-resident and completed the controlled Fast workload with a 10.23-second warm median on the test Mac.
  • The full release gate passes with 534 unit tests, 90 integration tests, the privacy audit, renderer E2E, and packaged desktop build.
ReleaseChangelog

Real multi-agent workflows, visible end to end.

Localfirst can now carry a team run from one shared direction to reviewed, agent-authored artifacts—while keeping every handoff, tool call, and decision close enough to inspect.

Three workflows you can actually run

New examples cover a vendor decision, a private incident review, and a React refactor. Each one assigns distinct roles, orders the handoffs, and finishes with a concrete outcome instead of a pile of disconnected chat replies.

The website-vendor run moves from research to implementation review and a final recommendation. The incident workflow keeps sensitive log analysis on a local model before review. The refactor workflow adds a supervised localhost preview before the last code pass.

Artifacts keep their authors and their trail

Claude, Codex, provider models, and local models can now create documents through the same permission, versioning, and provenance path. Reports and implementation briefs keep the agent that authored them, the run that produced them, and the inputs they came from.

That turns an output into shared workspace material: another agent can review it, you can open it beside the canvas, and the final decision stays connected to the evidence.

Run Trail to report preview

Run Trail now makes the full sequence legible: each turn, tool, output, correction, and handoff is visible in order. You can move from the team-level run into the underlying thread without losing your place.

Agent-authored reports open in a dedicated preview with rendered Markdown, source view, and an expanded reading mode. Tables, headings, and emphasis survive the trip from the agent response into the finished document.

Local models use the machine honestly

Ollama runs now size context to available memory and recover more cleanly from model timeouts. PDF and image work can stay with a compatible local vision model, with no silent hosted-model fallback.

Cloud CLI agents still use their configured providers. Localfirst keeps the orchestration, workspace state, permissions, and audit trail on the machine while making that boundary explicit.

Additional improvements
  • Threaded responses preserve Markdown tables, headings, lists, and emphasis.
  • A failed final reply no longer erases the thread preview that came before it.
  • Artifact previews make better use of the available workspace width.
  • CLI agents can create output documents through the same document envelope as other runtimes.
  • Local-model context sizing, retry behavior, and timeout recovery are more resilient.
  • Complete vendor-selection, incident-review, and React-refactor scenarios are included as runnable examples.
ReleaseChangelog

A clearer way to work with a local AI team.

This release makes agents easier to set up, easier to understand, and more resilient in everyday work—without moving your prompts, feedback, or project context off your machine.

Your team, in your words

The Team page now reads like a living roster instead of a settings grid. Availability, current work, approvals, and failures are easier to scan, with visual identities that stay consistent across the workspace.

Call them Teammates, Agents, Sidekicks, or use your own singular and plural names. Localfirst carries that choice through the interface while keeping the Team page itself familiar.

Local AI setup that tells the truth

A new Local AI guide replaces the flat runtime list. It separates connected runtimes from the ones that need attention, explains the next useful action, and only calls a setup ready when a reachable runtime has a model it can actually use.

Agent creation now follows those same connection states, so an offline runtime is never selected just because it appeared first.

Learning stays local

Accepted corrections and liked retries can now become private learning examples for the agent that produced them. The records stay in the workspace SQLite database and remain scoped to the context that made the feedback meaningful.

Direct messages also stay focused on the direct request instead of inheriting unrelated project direction or memory.

goose joins the runtime lineup

Localfirst can now discover and run an existing goose CLI installation alongside Claude Code, Codex, and Gemini. It reports installation and sign-in state, resumes the right session, and keeps execution scoped to the Space working folder.

Chat that recovers

Retry is now a first-class action, thinking and working states are more accurate, and local models with strict chat templates get a safe fallback when they reject system-role messages.

Runtime failures and missing tool support are surfaced where they happen, so a stalled response is less likely to look like an agent that is still quietly working.

Additional improvements
  • Command-plus and Command-minus now zoom the desktop interface.
  • The floating context belt no longer covers messages or appears on unrelated screens.
  • Canvas focus stays scoped to the canvas you opened.
  • Artifact previews use the available workspace width more gracefully.
  • Agent avatars keep a stable identity color across cards, threads, and run views.
  • Obsolete machine-specific FloorWatch maintenance scripts were removed.
ReleaseChangelog

The first downloadable build.

Localfirst became installable on Apple-silicon Macs with a verified one-line installer and the core workspace for persistent local agents.

Persistent agents, visible work

Create agents with roles, instructions, model choices, and explicit permissions. Arrange them into Team Boards, follow their work through threads and Run Trails, and keep plans, artifacts, and handoffs attached to the project.

Your machine is the backend

Connect Ollama, LM Studio, or another OpenAI-compatible runtime on localhost or a private network. Localfirst stores workspace state in SQLite and does not add a hosted-model fallback.

Additional improvements
  • Spatial Surface views for plans, tasks, artifacts, and conversations.
  • Local search, attachments, memory, export, and SQLite backups.
  • Detected Claude Code, Codex, and Gemini CLI runtimes.
  • Checksum-verified installation from localfirst.sh.

Latest · Version 0.1.6

One thread, one room. Every decision still there.

Get Localfirst