Labs

Local-first AI platform

AvaOS

Building an owner-controlled, local-first operating system for governed AI teammates. Threat model first, deterministic governance around an untrusted model, and validation on the Windows machine that actually has to run it.

Maturity
Private alpha
Role
Founder, architect, and lead engineer
Primary user
A single technical owner working with Ava and a governed roster of specialist AI teammates
Published
Updated
Software last validated

Evidence snapshot

Version
Private alpha. No released version number.
Evidence last reviewed
Evidence type
A full-suite automated test gate recorded in the project history at the August 2026 milestone, plus an owner validation walkthrough on one machine. No independent or third-party review.
Validation status
Historical, not current. Nothing below was re-run or independently reproduced for this write-up, and development has continued since the milestone.
Environment
The source repository configures Qwen3-14B-Q4_K_M on Windows 11 with Python 3.12, an external 1 TB SSD runtime, and an NVIDIA RTX 5060 8 GB. A later owner observation of a running system reported something different: a low_resource profile, a model-size constraint of 3B or less, and no GPU offload. That may be packaged or external runtime state the source repository does not represent.
Tests
4,269 passed and 6 skipped, as recorded in the project history at the milestone. Not re-run or independently reproduced for this write-up.
Note
The difference between the configured model and the later runtime observation is an open question, not a resolved one. Until it is reconciled, the configuration behind the performance figures below is not settled, and they are published as a historical record of one milestone rather than as a benchmark or a current measurement.

Executive summary

AvaOS is my answer to a practical question: what would it take to make AI genuinely useful for sensitive professional work without surrendering control of the data, the runtime, or the decision process? I designed it as a portable, local-first operating system for persistent AI teammates. Its central principle is simple: human amplified, not replaced.

Ava, the system’s Chief of Staff, can coordinate conversations, tasks, memory, approvals, and specialist teammates. But Ava is not the owner, and the language model is not the system of record. The model is treated as an untrusted reasoning component inside a deterministic governance harness. Durable memory requires owner approval. Sensitive actions have explicit boundaries. Important events are auditable.

The project grew from a threat model and domain model into a tested runtime foundation, a loopback API, a local inference stack, and an owner-facing operating workflow. Along the way, Windows security controls and a subtle UTF-8 streaming defect exposed failures that only appeared on real hardware. Fixing those failures became part of the design story, not something to hide.

Project at a glance

Dimension Details
Challenge Create a persistent AI organization that stays private, portable, model-agnostic, and under one human owner’s control.
Core environment Windows 11 daily driver, Python 3.12, external 1 TB SSD runtime, NVIDIA RTX 5060 8 GB. The source repository configures a local Qwen3 14B quantized model; see the evidence snapshot for an unresolved difference between that and a later runtime observation.
Engineering scope Threat modeling, domain design, runtime separation, SQLite state, approvals, audit, API, local inference, tests, and operational validation.
Documented maturity Private alpha with an operational backend and owner workflow. The polished desktop interface and several integrations remain in progress.

The problem

Most AI assistants optimize for convenience. They assume cloud connectivity, vendor-controlled state, opaque data handling, and a chat session that forgets the organization around it. That can be acceptable for low-risk prompts. It is a poor fit for work that needs durable context, defensible controls, and clear ownership.

I wanted a system that could act more like a small organization than a disposable chatbot. It needed a Chief of Staff, specialist roles, governed memory, task coordination, and a record of what happened. It also had to operate locally enough that private work did not depend on sending every prompt to an external service.

That led to five non-negotiable design goals:

Scope and non-goals

AvaOS is deliberately narrow. It is a personal portfolio and research platform, not an employer production system and not a multi-tenant SaaS product. The private-alpha scope excludes unattended internet operation, automatic publishing or email, production deployment authority, self-modifying production code, and unrestricted agent swarms. Those boundaries keep the engineering problem honest: prove the control plane before expanding autonomy.

Architecture and trust model

The architecture separates probabilistic reasoning from deterministic authority. The model can propose, summarize, and coordinate. The governance layer decides what is permitted, what must be approved, what becomes durable, and what must be recorded.

Diagram of AvaOS authority and data flow. Four boxes in a row: Owner and UI, Governance plane, Ava and team, and Local model, connected by two-way arrows. The governance plane sits between the owner and Ava. Below, Portable runtime state holds memory, tasks, approvals, conversation state, and audit, while Host work stays separate in a company or client workspace.

Figure 1. Owner authority and deterministic controls surround local inference and portable state.
Layer Purpose Trust boundary
Owner interface Conversations, approvals, task review, health, and configuration. Authenticated local owner only.
Governance plane Authorization, approval workflow, identity, policy checks, and fail-closed decisions. Deterministic code is authoritative.
Ava orchestration Chief of Staff behavior, conversation state, task routing, teammate coordination. May recommend; may not silently elevate authority.
Model runtime Local inference using a swappable language model and serving adapter. Treat model output as untrusted input.
Persistent state SQLite-backed memory, conversations, tasks, configuration, and append-only audit. Schema-controlled writes with locking and migrations.
Tool and data boundary Host workspaces, future integrations, and explicitly exposed capabilities. Least privilege; private keys and secrets stay outside the portable runtime.

Core request flow

  1. The owner submits a request through the local interface or API.
  2. The governance plane authenticates the owner, validates the request, and establishes the permitted scope.
  3. Ava assembles only the relevant conversation, memory, teammate, and task context.
  4. The selected local model produces candidate output inside that constrained context.
  5. The runtime validates and streams the response, records state transitions, and emits audit events.
  6. Anything that would become durable memory remains a proposal until the owner approves or rejects it.

Key engineering decisions

Start with the threat model

Before building the interface, I modeled thirty threats and documented ten security invariants. The first design pass classified twenty-six threats as mitigated, two as accepted external dependencies, and two as deferred. That exercise defined the MVP around only the entities needed to prove control: organization, human owner, runtime configuration state, durable memory, approval record, and append-only audit event.

This reversed the usual chatbot build order. The first milestone was not a polished chat window. It was a runtime that knew who the owner was, could distinguish a proposal from an approved fact, and could explain what it had done.

Separate source, runtime, and host work

AvaOS treats code, portable personal state, and host-specific work as different classes of data. Source code can be reviewed and versioned. The portable runtime can move with the owner. Company or client work can remain in a host-bound workspace instead of being copied onto the portable drive. That separation reduces accidental mixing and makes Safe Disconnect a concrete engineering requirement rather than a slogan.

Make memory an approval workflow

Ava does not silently write arbitrary model output into long-term memory. A memory request becomes a proposal with provenance and status. The owner can approve, reject, supersede, or retire it. Retrieval then uses only governed records. This turns memory from a convenience feature into a controlled data lifecycle.

Diagram of the governed memory lifecycle. A candidate memory with provenance becomes a pending proposal, which is excluded from retrieval while pending. An owner decision either rejects it, in which case it is recorded but excluded from retrieval, or approves it, after which it enters retrieval and can later be superseded or retired. Every transition creates audit evidence.

Figure 2. Only owner-approved memory enters later retrieval.

Keep the API local and explicit

The backend exposes a versioned local API for overview, teammates, conversations, messages, tasks, approvals, activity, and boardroom state. Services bind to loopback, require an owner token, and use explicit conversation states such as submitted, thinking, responding, complete, and failed. That state machine gives the interface a trustworthy answer to a basic question: what is the system doing right now?

Design for model replacement

The language model is selected through configuration and adapters. Ava’s identity, memory, authority, and audit history do not live inside model weights. That makes it possible to evaluate a new model without redesigning the organization or handing the new model inherited authority.

Build evolution

The project advanced in deliberate layers:

The hard parts

Windows security blocked the obvious inference path

The cold-start inference path used a privately signed executable. On the target Windows machine, Smart App Control denied that binary even though the signature and private trust chain were valid. Windows Code Integrity events confirmed the denial. The resident path, which loaded the model through a reputable Python process, was permitted, but an over-broad preflight check wrapped both paths and prevented the permitted route from becoming reachable.

The fix was architectural, not cosmetic: I scoped the Smart App Control preflight to the cold adapter only. That preserved the fail-closed behavior for the blocked executable while allowing the resident path to operate under enforced Windows security. The result was a usable local backend without asking the owner to weaken platform protections.

Lesson: cryptographic validity and operating-system reputation policy are different trust decisions. A local AI runtime must respect both.

Streaming failed on real Unicode boundaries

The owner interface later rejected some otherwise valid responses with a security-validation error. The root cause was not the model. UTF-8 bytes were being decoded at token boundaries, and a multibyte character split across chunks became the replacement character U+FFFD. The response validator correctly refused to accept corrupted text.

I changed the streaming layer to reassemble incomplete byte sequences before decoding and kept the validator strict. That fixed the user-visible failure without lowering the security bar.

Lesson: streaming is a data-integrity problem as much as a user-experience feature. Real validation has to include multilingual text and arbitrary chunk boundaries.

Validation and results

AvaOS has been validated as an operational backend on its intended Windows runtime. The evidence combines automated tests, command-line diagnostics, API checks, Windows event evidence, and owner walkthroughs across conversation, memory, task, and teammate workflows.

Measurement conditions, and what is unresolved about them. These are historical figures from an August 2026 milestone. They are not a measurement of the current runtime, and nothing here was re-run or independently reproduced for this write-up.

The test count is the full-suite gate as recorded in the project history at that milestone. The warm-start, generation, and cold-start figures come from an owner validation walkthrough on one machine with one owner; that run’s exact date and runtime profile were not recorded.

The model those figures were produced under is genuinely unresolved. The source repository configures Qwen3-14B-Q4_K_M. A later owner observation of a running system reported a low_resource profile, a model-size constraint of 3B or less, and no GPU offload, which may be packaged or external runtime state that the source repository does not represent. Until the two are reconciled, treat the latency and throughput numbers as belonging to an unconfirmed configuration. None of them are benchmarks, and no other hardware was measured.

Evidence Recorded result What it demonstrates
Automated suite 4,269 passed; 6 skipped, as recorded at the governed-inference milestone. Not re-run here. Broad regression coverage across runtime, storage, governance, API, and inference behavior at that point in the project.
Governed memory Proposal, owner approval, and retrieval in a later conversation. Persistence works without silent model-authored memory.
Conversation state Submitted through complete or failed, with live progress states. The UI can represent real backend state rather than fake activity.
Windows security Resident path validated with Smart App Control enforced. The system can operate without disabling a platform security control.
Warm start New-conversation time to first token reached about 1.25 seconds with most model state reused. The resident runtime materially improves responsiveness.
Generation Roughly 4 to 5.5 tokens per second, depending on context and run. Short interactions are usable; long answers remain throughput-bound.
Cold start About 77 seconds in the recorded owner validation. Model load remains a visible operational cost.
GPU state CUDA detected, but executable trust and runtime support prevented validated offload; GPU remained idle. A later runtime observation also reported no GPU offload. Hardware acceleration is supported by design but not yet proven in the target environment.

What the validation proved

Security and governance controls

The security model is intentionally layered. No single control is asked to carry the whole system.

Current limitations

The backend is ahead of the interface. AvaOS is a private alpha, not a finished desktop product. The strongest current value is the governed operating foundation and the evidence that it survives contact with a real Windows security environment.

What this project demonstrates

AvaOS shows how I approach AI engineering when privacy, security, and operational reality matter. I start with authority and threat boundaries, encode them in a domain model, build deterministic controls around probabilistic components, and validate the result on the machine that actually has to run it.

The work spans security architecture, Python systems engineering, data modeling, API design, local inference, Windows trust behavior, testing, and product thinking. It also demonstrates a willingness to keep inconvenient evidence in the story. A blocked executable, an idle GPU, and a corrupted Unicode stream are not presentation failures. They are the places where the real engineering became visible.

AI-assisted development, human-owned decisions

AI tools supported ideation, code review, debugging, test design, and documentation throughout the project. They did not own the architecture or the acceptance criteria. I defined the constraints, selected the tradeoffs, reviewed the output, ran the validations, and remained accountable for every security and product decision. That division of labor mirrors AvaOS itself: AI amplifies the human owner; it does not replace ownership.

Next phase

Closing

AvaOS is not a chatbot with a larger prompt. It is an attempt to make an AI organization governable: persistent enough to be useful, constrained enough to be trusted, portable enough to be owned, and transparent enough to be challenged. The project is still evolving, but its foundation already proves the central idea: useful AI autonomy starts with clear human authority.