Ox

Ox

A local, open-source personal AI agent that can connect to any app

  1. Connect to any app

    Ox can connect to any app and use them better than you do. If a capability is missing, Ox can modify itself on the fly.

  2. Free to use

    Ox is completely free and open source. You can use any model provider while keeping all your data on device.

  3. Peace of mind

    Ox asks before taking any sensitive actions, keeps your credentials isolated and lets you pull the plug any time.

OpenOx Protocol

Ox is built on OpenOx, an open protocol for self-evolving agents. It defines how agents run, extend their capabilities, and share them while keeping their state independent of a particular interface or model provider.

This protocol document is the technical companion to A Technology for Free Will.

Distributed Evolution

An Ox can learn a new way to act without waiting for a new version of its Host or Client. It can study a website or workflow through an existing capability, turn what it learns into typed actions and reusable instructions, and make them available immediately.

Those additions can remain local or be recorded in Git and shared through a repository. Another Ox can install them, use them as they are, or adapt them to new work.

1 Observe Study a website or workflow through an existing capability.
2 Create Turn the evidence into typed actions and reusable instructions.
3 Attach Validate the new service and make it available.
4 Reuse Use it now, improve it later, or share it with another Ox.

This lets each Ox evolve independently and, when users choose to share, lets different Ox evolve together. The VM, services, skills, and repository boundaries that make this possible are defined below.

Protocol Components

An Ox separates the interface, runtime, model, persistent state, and capabilities into seven components.

OpenOx component graph connecting the Client and model provider to the Host, Agent, Profile, VM, service repositories, installed services, and service interfaces.
The Client and model remain replaceable around a Host that owns the Agent, Profile, VM, and service lifecycle.
01 Ox Client
An interface that connects to an Ox Host. A Client may be a mobile app, desktop app, web app, or command-line tool. The Host binds VM execution to the selected conversation, its permissions, attached services, and virtual filesystem view.
02 Ox Host
A process or device that opens an Ox Profile, runs the Ox VM, and supplies platform and service adapters. A Client can use an embedded Host or target a compatible Host elsewhere.
03 Ox Agent
The reasoning and tool-using process that pursues the user’s goals using the selected model, the state in an Ox Profile, and the capabilities exposed through the Ox VM.
04 Ox Model Provider
The connection to the language model selected by the user. OpenOx does not prescribe a model or provider; the Host adapts provider-specific APIs to the provider-neutral agent loop.
05 Ox Profile
A portable folder containing the Agent’s persistent state: its identity, memory, skills, artifacts, and conversation history. This keeps the Ox’s state independent of a particular Client or model.
06 Ox VM
The execution environment supplied by an Ox Host. The Agent writes and runs code inside the VM without direct access to the network, Host filesystem, or device. Instead, it uses explicit ox.* capabilities to interact with the Profile, services, websites, users, and device capabilities. The ox.fs virtual filesystem presents Profile content, skills, services, chats, and user-granted files while preserving each source’s permissions.
07 Ox Service Repository
A versioned collection of service definitions described by a repository.json manifest. Every Host manages an editable local repository and may install compatible remote repositories. Web and MCP services can be shared through Git; device services are supplied by the Host.

Ox VM

When a task requires action, the model can produce JavaScript for the Agent to submit to the Ox VM. The Host validates the request, binds it to the calling chat, and queues the execution. The VM runs the code in its capability-limited environment. Explicit ox.* capabilities perform approved work outside it, and the Agent receives console output, diagnostics, errors, and attachments.

The VM provides JavaScript, a console, and the global ox capability interface. It provides no DOM, Node.js, shell, direct Host filesystem, or direct network access. Anything outside the VM must pass through an explicit Host capability.

OX HELPCAPABILITY CATALOG
ox.app

info · profile · notifications · language · theme · voice · model · logs · renameChat

ox.artifact

attach · import · present · rename

ox.fs

delete · edit · glob · grep · list · read · write

ox.service

attach · copy · create · delete · detach · find · inspect · invoke · listAttached · pay · signIn · solve

Git operations: checkout · commit · diff · log · restore · revert · show · status
ox.skill

copy · create · delete

ox.user

choose · reportProgress

ox.web

fetch · search

ox.widget

shoveler · video

> ox.help()

The Host advertises the capability catalog available to Agent code at runtime.

OpenOx defines the VM’s observable execution boundary, not the Host’s thread model or runtime engine. The Host owns the runtime, execution queue, permissions, and capability implementations. The active Profile scope determines which state, services, skills, and files the VM can reach, while every execution remains bound to its initiating chat and the capabilities available there. Changing the active Profile scope replaces the VM and clears runtime-local state.

The VM reaches the Host through the ox.* capability tree. Every operational function accepts one options object with a user-visible purpose between 1 and 80 characters and validates its input against a closed schema. Its synchronous help() method describes the expected input and output.

The VM validates the options object against its runtime catalog before calling the Host. The Host then performs authorization, requests approval or a user handoff when required, runs the operation, records structured diagnostics, and resolves or rejects the JavaScript promise.

Virtual filesystem

ox.fs presents Profile content, skills, service sources, persisted chats, and user-granted folders as one stable namespace without revealing their backing storage.

OX FILE SYSTEM
OX:/7 ITEMS
MEMORY.mdProfile memoryWritable by Profile rules
SOUL.mdAgent identityWritable by Profile rules
artifacts/Profile artifactsWritable by Profile rules
skills/System, user, and service skillsMixed sources and permissions
services/Web, device, and MCP servicesLocal source may be writable
chats/Metadata and transcriptsRead-only
files/User-selected foldersRequires an attached Files service
PROFILE MOUNTEDREADY
The VM sees stable virtual paths while the Host preserves each source’s ownership and permissions.

Service repositories

A service repository is a versioned collection of web and MCP services. Its repository.json manifest identifies the collection, while each service supplies its action contracts, implementation, and optional skills. Device services are supplied by the Host instead of installed from Git.

Every Host manages an editable local repository and may install compatible remote repositories. The Host validates a service before attaching it to a chat, then continues to own its authentication, resources, approvals, and user handoffs.

Many Ox connected to shared service repositories Nine Ox connect to separate web, MCP, and mixed repositories with different service and skill counts. Several Ox use more than one repository. WEB REPOSITORY 24 services · 12 skills Public MCP REPOSITORY 7 servers · 3 skills Team WEB + MCP REPOSITORY 11 services · 5 skills Public OX 01 OX 02 OX 03 OX 04 OX 05 OX 06 OX 07 OX 08 OX 09
These illustrative repositories differ in scope and size. An Ox can use several repositories, and one repository can serve many Ox without changing the protocol.

Protocol Resources

Services

Services give an Ox typed actions for work outside the VM. Instead of receiving ambient access to a device or the network, the Agent discovers explicit actions with documented inputs and outputs, then invokes only the capability it needs.

A service may expose device capabilities, operate a website through the user’s browser session, or connect to an MCP server. The Host owns authentication, resources, approvals, and handoffs while the Agent uses the uniform ox.service interface.

Skills

Skills are reusable instructions that teach an Ox when and how to carry out a workflow. They can encode ordered steps, decision rules, checkpoints, safety boundaries, and a desired output without adding new authority.

A skill works only with capabilities already available to the Agent. This keeps know-how separate from access: services define what can be done, while skills explain how to combine those actions toward a reliable outcome.

User skills belong to the Profile and can coordinate several services. Service skills travel with one service and become available when that service is attached. System skills teach an Ox how to use the capabilities supplied by its Host.

Artifacts

Artifacts are durable outputs stored with an Ox Profile. Unlike an ordinary chat response, an artifact can be reopened, revised, attached to another conversation, presented to the user, or carried with the Profile.

An artifact may be a Markdown note, an imported file, or a self-contained HTML Canvas. The Agent manages artifacts through explicit Host capabilities while the Profile preserves their names, content, and relationship to saved conversations.

A Canvas is an HTML artifact for ideas that benefit from interaction or spatial explanation. It runs as a browser page independently of the chat that created it and can use window.ox.service to call Host services. Those calls use the same contracts, authentication, sensitive-action approvals, and handoffs as chat, but Canvas cannot access other ox.* namespaces or evaluate code in the Agent VM. Closing or replacing a Canvas cancels pending work and removes its temporary outputs, although it cannot undo a request an external service has already accepted.

Protocol Messaging

OpenOx does not impose one universal message envelope. Each boundary defines the narrow typed contract it needs. A Client talks to Host-owned chat operations, the Agent exchanges provider-neutral messages and streaming events through a model adapter, and JavaScript crosses the VM boundary through ox.*.

Client to Host

An embedded Client can start a chat through native calls:

let chat = host.chats.startNewChat()
let outcome = await chat.submitAndWait(
    "Find Ada Lovelace's email address"
)

Agent to VM

The Agent can ask the VM to invoke one attached service action:

const contacts = await ox.service.invoke({
  name: "ios:contacts:search",
  input: { query: "Ada Lovelace" },
  purpose: "Find Ada's email address"
});

console.log(contacts);

VM to Host

At the capability boundary, the VM passes the validated function and arguments to the Host:

{
  "function": "ox.service.invoke",
  "arguments": {
    "name": "ios:contacts:search",
    "input": { "query": "Ada Lovelace" },
    "purpose": "Find Ada's email address"
  }
}

Canvas uses the same service-action contract through window.ox.service, but cannot call the rest of the ox.* tree. Each receiver validates incoming requests, and results, events, and errors follow the same boundary back. A remote implementation can serialize these contracts over a transport without exposing the Host's internal state.

Client–Host Compatibility

Clients target the OpenOx Host contract rather than a particular platform, model provider, or VM engine. Any Client can work with any Host that implements a compatible version of that contract and exposes a route the Client can reach.

OPENOX SWITCHBOARDONE CONTRACT · MANY ROUTES
CLIENTS
MobileNative interface
DesktopNative interface
WebBrowser interface
CLICommand line
SHARED SOCKET Ox Host contract Chats · Profiles · Services · Lifecycle IN-PROCESS
LOCAL
REMOTE
HOSTS
EmbeddedSame application
DeviceMobile or desktop
RemoteReachable Host
FutureAny compatible runtime
The contract determines compatibility; the route determines how a Client reaches the Host.

The Host keeps ownership of the Ox’s Profile, chats, model connection, services, permissions, and VM lifecycle. Embedded and remote routes expose the same responsibilities, although authentication, discovery, reconnection, and event synchronization become transport concerns when the connection crosses a process or network.

Download on the App Store