Developer reference

Find a capability, contract, or method

This page is for developers integrating a capability; people who use applications find the install steps on the Adopt page.

Open Abstractions gives applications stable capability APIs above operating systems, local engines, and remote services. This page defines the shared vocabulary, shows the service lifecycle, and indexes the current APIs.

The latest runtime release notes identify the available packages and their verification. The retained 0.3.0 evidence describes that release. Capability SDKs have independent versions. Match package availability and installation evidence to the API you adopt.

Shared vocabulary

Terms used across capabilities

Words you'll meet first

Runtime
The OA background service installed on the machine. Every application talks to this one program.
Client library (facade)
The OA library an application adds to find the runtime and get a typed client for each capability.
Provider
The program that does the work behind a capability, such as curl for a download or Ollama for a model call.
Capability
One kind of work OA offers through one API, such as downloads, jobs, model calls or questions to the person.
Operator
The person who runs the machine, acting at the command line or in the Panel.
Permission
What an application may do on this machine, which the person allows or blocks per program.
Question
A request for a person's decision. Applications present their ordinary choices; OA presents its permission requests. The service retains pending and answer state.
Job
Work the runtime accepted and keeps running after the application closes, with progress and a result to read later.
Lease
A time-limited claim on a scarce resource, such as graphics memory, that its holder gives back when asked.
Card
A graphics card's memory; card:0 names the first one.
Adopter
An application that uses OA, such as OpenCode or ComfyUI with their OA integrations.
CAS (compare-and-set)
OA's small-file update that writes only when the file still holds the value the writer last read. Content-addressed storage is the storage module's job.

All terms

Abstraction
A stable concept and API whose meaning holds across operating systems, libraries, engines, and service providers. Each abstraction can be adopted independently.
Capability
The work an application asks OA to supply, such as reading content, submitting durable work, routing a model, or asking a user a question. One or more modules implement a capability as a service.
Module
One repository under openabstractions-flat/abstraction-*, stacked so a higher module builds on a lower one's guarantees, such as the model module resolving a reference before the download module moves bytes.
Service
A named wire interface and behavioral version, such as abstraction.logging/sink@1, and the endpoint inside the runtime that answers its calls — one word for the interface and the thing that answers it, as gRPC uses it. Distinct from a contract, the numbered rule set that defines its promises and limits. In the module catalogue, service is the Kind a module's definition earns by declaring a service that is not direct.
Provider
An implementation behind a capability contract that the runtime mediates. Some run inside the runtime, such as the download module's transfer agent; others are registered programs the runtime launches or attaches to, such as inventoryd, which indexes what a machine already holds, or lemonaded, which serves images, transcription and speech. In the module catalogue, provider is also a Kind value: a module named <x>-over-<y> with a command, or one whose definition declares guarantees and no service.
Runtime
The installed OA program selected for the connected local account and program. It resolves capabilities, enforces rights, owns service state, and mediates providers. It is one program, openabstractions serve runtime: installed, the platform's service manager starts it as the background service; run directly, the same command starts it in the foreground. On Windows the per-user supervisor, openabstractions serve supervisor, starts it and restarts it after a failure.
Facade
The shared entry point used to resolve typed capability clients. Machine selects and trusts the local runtime; Resolve… methods return a bound client.
Contract page
A module's CONTRACT.md: the document stating a contract's obligations, admission order and refusal reasons. Its rule ids, such as INF-A1, are what tests and refusals cite.
Requirements
The guarantees and execution placement requested during resolution. The runtime returns an eligible binding or a typed refusal.
Guarantees
Contract-specific promises required before work starts, such as recovery across caller exit. Accepted work keeps the guarantees under which it was admitted.
Placement
Requested execution location during resolution: local, remote, or any where the capability supports it; the resolved endpoint has a fixed placement.
Subject
The account-plus-program a decision, or a job's ownership, is about. A job's subject observes, lists, reads and cancels what it submitted, with no rule consulted for that; rights and identity read the same subject when deciding or verifying a peer.
Binding
The resolved client-to-service tie: in the facade, the capability, service, provider revision, transport, endpoint, placement, and guarantees a continuation call validates against. Identity's peer answer (Bind/BindConn) takes once at accept and freezes, refusing a later re-derivation.
Idempotency key
A stable caller-owned key created before submission; a retry with the same key reconciles the same job instead of starting a new one.
Job
The module that gives submitted work a durable identity, acceptance, reconciliation, cancellation, and inventory: abstraction-job. Other capabilities submit through it rather than each tracking accepted work of their own. An accepted job is work a service owns; its receipt records the job identifier, logical owner, idempotency key, binding, and accepted guarantees.
Peer identity
Operating-system evidence about the connected account, process, executable, package, and code identity. Each attribute carries its proof strength.
Rights
Policy decisions for an action on a resource by a verified peer. The service that owns the resource enforces the decision.
Budget
A credential's daily spend cap, checked before a hosted call starts. A request over an exhausted budget refuses budget_exceeded.
Ceiling
The strongest proof identity can bind for an attribute.
Application manifest
An operator-installed record naming an application, its executable, display title, start guidance and optional activation recipe. A running instance announces its interfaces separately.
Application instance
A leased OA handle returned when a ready application announces itself. Renewals keep that exact instance present until withdrawal or expiry.
Application context
An application-owned document or workflow name, title, and revision. Interaction adapters use the revision to reject a call aimed at an older target.
MCP gateway
An authorized integration program that exposes a curated set of OA-backed tools to a Model Context Protocol client. Its operating-system identity determines its OA rights.
Work
What a person or application wants OA to do, before it is submitted: the plain word for the thing a job accepts and records.
Store
Where a provider keeps content. OA storage offers content-addressed objects and a combined inventory of available stores. Its local-stores provider can discover model files managed by other applications. Writes to OA-managed content use content-writer@1.
State file
The CAS state file: the lock-guarded shared state abstraction-cas maintains.
Share
A shared folder on a NAS.
Handle
An open read handle in storage, such as a POSIX file handle or a Windows HANDLE.
Sink
A destination for structured log records, exposed through abstraction.logging/sink@1. Default handlers resolve an OA logging service and report resolution failures. After a service outage, they retry with a bounded queue and report dropped records. Local fallback requires explicit provider selection.
Destination
Where a download writes bytes: a plain path outside the content store, named by the caller for a deprecated in-process download (download.Open()/Get()) and by the runtime for a job-service download, to its own result document. It never names the store.
Family
The canonical identity two names for the same weights must agree on before one of them can answer for the other, resolved by the model module. The router reads a family as the cluster of a model server's own aliases resolved to that identity, together with which servers and stores hold each one.
Lease
One axis, two senses. A resource lease (abstraction.resource/leases@1) is asked back with a deadline, renewed while the holder keeps using it, and given back when the holder yields. A job's lease is exclusive, carries an epoch, and is never asked back; job states it with the job (JOB-L1).
Yield
Giving a resource back on the service's request: a lease holder yields through Answer; an attached holder yields through its server's own unload. What the instrument shows afterwards is the answer. An engine's own eviction is not a yield.
Resident
Loaded and currently answering calls, said of a model a model server or a model host provider is holding in memory under a lease.
Model server
A declared model runtime or provider endpoint this machine or an operator names — Ollama, LM Studio, Lemonade, or a hosted server such as OpenRouter. Registered through inference server add (inference host add until the next release) and addressed by a rights rule as host:<name> (renamed to server:<name> on the wire in a later release). abstraction-provider-modelhost's own process, which loads a model file into an engine and keeps it resident, is declared to the runtime the same way, as host:modelhost.
Host
The address part of a URL: the machine a transport connects to, as in OLLAMA_HOST or a --host flag. Distinct from a model server.
Claimed
An unverified, self-reported assertion, with no verification behind it: a peer attribute the peer itself asserted (identity's lowest proof level), a log hop the writer itself asserted (its lowest attestation standing), or a resource-table row an engine or its adapter self-reported (with no instrument behind the amount).
Location
One location in config's precedence ladder — machine, user, or process — ordered nearest first; the nearer location's value wins, and every answer carries the location it came from.
Resource
A named target for rights and for the resource module alike: credential:<name> or account as a rights target; card:<n> for an accelerator's memory (cuda:0 on CUDA, a DirectML adapter, or DRM card0), memory for system memory, or awake, the pool a wake lease claims, as one of the machine's scarce pools.
Holder
The program holding a lease or a resource amount.
Hold
One row of the resource table: an account, a program, a resource, and an amount, whether measured or claimed. A holder in two processes is two holds.
Credential manager
The abstraction.credentials/manager@1 service that registers, rotates, revokes, lists, and audits named secrets.
Operator
A person acting at the command line or the Panel, distinct from an application. Also the generated *Operator services (abstraction.rights/operator@1, abstraction.asks/operator@1, and others) that such a person, or a program the installation trusts as one, reaches through an explicitly authorized typed-peer callback.
Deprecated
A still-shipped earlier interface, each kept with its removal release named, or without one until then. The embedded file-reading config provider (Go config.go, Python python/abstraction_config.py) is kept for a deliberate out-of-tree adopter that reads configuration files directly instead of the service; Load, Watch, and JobStore are its deprecated names. Job's file-backed record interface (Store, shipped as NewFileStore) is deprecated the same way.
Inference gateway
A loopback OpenAI- and Anthropic-shaped listener on the runtime, for a program that only knows a base URL and an API key. It stays off by default; an issued gateway key binds one program.
Gateway key
The key the inference gateway issues to one program so it can reach the runtime through the gateway. A hosted server's own credential is instead called an API key.
Alias
A model's name as a model server reports it. Used as a family's identity when no store descriptor names one (family_source: alias); an alias reaches a store's own name for the same content by one matching function.
Servable
Able to serve a request for a model, unlike a store that only holds it. A component such as a projector or a VAE is never servable on its own.
Up
Whether a hosted server's listing could be read. False, with a why reason, when its credential could not be applied or its wire kind is unsupported.
Hosted
A model server reached off this machine rather than resolved locally. Pick's hosted outcome names one answering instead of a local server; its entry names a base URL, a wire kind, and a credential name.
Held in
The storage inventory stores holding an object a family or alias matches, in store order; empty when no configured store reports the model.
Domain
The remote runtime name a listed server answers through, distinguishing a remote runtime's own servers from this machine's.
Instrument
The platform mechanism that measures a resource's holders, such as Windows' GPU process memory counters. A row above its declared threshold is measured; below it, or with no instrument for a resource, the row is claimed.
Engine
The program that loads model weights and answers calls, such as llama-server, sd-server or Lemonade. A provider module wraps an engine the machine has, or OA supplies one as its own registered provider process. The model host and the Lemonade provider run publishers' pinned builds staged from archives a person or Setup downloads, and the model host's PyTorch engine, which OA wrote, is moving into its own provider module.
Lend
Writing a link into another application's engine directory so that engine serves an object already in a store, gated by abstraction.storage/lend@1. Never a move, a rename, or a deletion.
Ledger
The record of which lends are in force, oldest first; replaced in one rename, so a reader sees a whole ledger or the one before it. It says whether a lend is in force, not the engine's own list.
Object
A store's content, named the way the storage inventory names it: a store and an id, never a path.
Locator
An object's location a store reports when it published no manifest id; the ledger records the manifest id where the source published one, and the locator otherwise.
Inventory
The composed, read-only list of what objects a machine's stores hold, served by abstraction.storage/inventory@1 from designated abstraction.storage/inventory-source@1 providers, such as local-stores' own indexer.
Storage class
A retention promise: data, cache, tmp, or logs.
Retention
How long a class keeps an object once nothing holds it.
Max use
The most bytes a class may occupy.
Collector
The runtime's process that removes what a class no longer promises to keep.
Low free space
The collector's pressure trigger: 15% of the file system, capped at 4G.
Purgeable
A cache object marked for the platform cleaner.
No-backup
A folder's or object's attribute excluding it from backup.
Adopter
An application that calls OA's abstractions, such as OpenCode or ComfyUI through their OA integrations. OA publishes labelled, versioned builds of some adopters.
Question
A service-held request with offered answers. Legacy application@1 uses a fixed catalogue; ordinary application@2 carries app-authored choices with explicit replay bounds. Ordinary answers select app behavior; first-use permission answers have exact Rights effects.
Rule
A stored authorization entry: a subject, an action, a resource, and permit or deny. Contracts say rule; the Panel and this site say permission.
Permission
A rule as the Panel shows it, with Allow and Block for permit and deny.
Responder
A program a person lets answer first-use questions on their behalf through abstraction.asks/responder@1, under an exact rule that expires. It never answers a question about itself.
Modality
What a model server serves: chat, embed, transcription, speech, image, video or live. The wire still says profile, as in profile:image, until its next service version.
Content scope
The content an application may write and read for one kind of input or output, such as output:image for generated pictures or input:audio for audio to transcribe. One first-use allow writes both rights on it.
Provider kit
The shared Go packages under abstraction-inference/go/providerhost that provider programs build on: engine-file proofs, clean launch environments, loopback checks, and request checks for engines such as sd-server.
Awake
The wake level that keeps the system on, held as a wake lease on the resource awake. Today the lease takes a platform request only while its holder also holds a card lease, and that request keeps the display on as well. In 0.4.0 a provider that declares a card holds it for the work it serves, a provisional exception that a lease held for the requesting application replaces after research.
Awake (display)
awake:display, the wake level that keeps the display on and holds off the screen saver and automatic lock. Decided as its own rule per application and not built yet.
Selection policy
A saved, ordered list of eligible models and model servers for one account and program. A chat@2 or image@2 request names one in place of a model, and the runtime picks an available candidate from it.
Preset
The generation settings a provider keeps for a model, such as steps, guidance, scheduler and size. A caller who wants another preset names another model.

Service lifecycle

From a requirement to a bound call

  1. Connect. A language facade selects the installed runtime for the current account and establishes the shared native IPC transport.
  2. Resolve. The client sends a capability, accepted services, guarantees, and placement to Resolver.Resolve.
  3. Authorize and select. The runtime identifies the caller, checks policy, and selects an eligible ready candidate.
  4. Bind. A generated client receives a service reference with one contract, endpoint, placement, and provider binding.
  5. Call. The generated client validates records and uses the shared transport. The OA service owns downstream provider connections and credentials.
  6. Continue. Accepted jobs remain associated with their original owner and binding. Observation, cancellation, and reconciliation use that association.

Go resolution shape

machine := facade.Discover()
logs, err := machine.ResolveLog(ctx, facade.Requirements{
    Scope: facade.ScopeLocal,
})
if err != nil { /* inspect the typed binding error */ }
logs.Write(record)

Left unset, Requirements.Scope resolves as any; set local or remote explicitly to restrict placement.

A later resolution may choose another eligible provider. An existing binding stays specific to the selected service. The facade contract defines resolution, trust, and binding behavior.

Authority

Identity, rights, and execution are separate facts

QuestionSource of the answerWhere it matters
Who connected?Native transport evidence captured by Identity, with proof attached to every attribute.Runtime selection, caller isolation, policy lookup, and audit.
May this caller act?Authorization.Decide or DecideFor under abstraction.rights/authorization@1.The service that owns the resource enforces the result before access or mutation.
Who executes the work?The service deployment and its configured provider.File access, network access, process lifetime, and provider credentials.
Is this the intended service?Runtime endpoint selection plus the transport's server-trust policy.Before sending requests or secrets.

Caller-supplied labels remain metadata. Provider names, model names, MCP client names, application titles, and context titles carry no identity authority. Credential values stay in the credential service and are applied to an exact target through Applier.Check and Applier.Apply.

Durable work

Acceptance, observation, and recovery

Prepare identity first

Create the idempotency key before sending work. Equal duplicate submissions recover the original receipt.

GetHistoryWindow · Submit · Reconcile

Separate waiting from work

Canceling a transport wait ends that wait. Explicit work cancellation uses CancelWork with the original idempotency key.

ObserveWork · CancelWork

Treat a lost reply as uncertain

Reconnect to the original logical owner and call Reconcile. A new idempotency key would describe new work.

AcceptanceResult · Receipt

Respect continuity signals

Opaque cursors belong to one provider instance and caller subject. A gap asks the caller to restart from a current snapshot or recover through a contract-specific path.

cursor · epoch · gap

The job contract defines accepted-work ownership, reconciliation, explicit cancellation, retained results, and inventory bounds.

Applications and assistants

Directory metadata, activation, and tools have distinct roles

Register / RemoveAn authorized operator manages persistent manifests and activation recipes.
Announce / WithdrawA ready application creates and renews a leased instance with interface and context metadata.
ObserveA caller lists only manifests and live instances visible under its rights.
ActivateThe runtime starts a registered executable and waits for a fresh announcement from the eligible local session. Canceling the wait leaves the user application running.

These methods belong to abstraction.facade/applications@2. An interface entry describes an application-owned protocol such as comfy.presentation@1. Metadata does not invoke that protocol.

An application interaction adapter implements the protocol and preserves the selected instance, context, and revision through preview, apply, and readback. A stale revision refuses an outdated target. This adapter is specific to the application interface.

An MCP gateway maps a curated tool set onto OA clients and application adapters. The MCP gateway runs as its own verified integration subject and receives explicit rights. It exposes a selected tool set rather than generic forwarding to arbitrary MCP servers or application methods.

Failure and recovery

Read the typed result before retrying

ResultMeaningCaller response
forbiddenThe resolution boundary's own peer check: a different account, or a caller that cannot be verified.Run the program as the runtime's own account. No capability-specific rule is read yet.
not_permittedA verified caller's own rights rule refuses the action or resource, decided inside the call.Change the grant or choose an allowed action; see inference's Set up a model server for a worked grant.
not_ready / unavailableThe required service or provider cannot serve the call now.Observe readiness or retry within the contract's bounds.
unmet_requirementsNo eligible candidate supplies every requested guarantee or placement.Install or configure a suitable provider, or revise the requirement explicitly.
unsupportedThe selected contract lacks the requested optional behavior.Use a supported method or resolve a contract that declares it.
invalidInput violates the contract's shape, bound, state, or identifier rules.Correct the request. Repeating the same bytes gives the same refusal.
stale / conflictA revision or compare-and-set base no longer names the current state.Read the current state and decide again.
gapRetained history cannot prove continuous delivery from the supplied cursor.Restart from a current snapshot or use the contract's recovery method.
uncertain / unknownThe caller lacks evidence of the effect or accepted work.Reconcile with the same idempotency key or read current state before acting.

Each contract owns its exact enum and recovery rule. The table is a navigation aid across recurring meanings.

API index

Capability APIs and the application directory

Method names below come from the current Thrift definitions and generated Go facade. Direct utilities are marked separately.

Asks

Retain bounded requests and answers. Applications own ordinary choice UI; OA owns permission presentation.

abstraction.asks/application@1 abstraction.asks/application@2 abstraction.asks/operator@1

Facade: ResolveAsks, ResolveAsksChoices, ResolveAsksOperator
Legacy catalogue: Ask, Observe; ListQuestions, AnswerQuestion, RetireQuestion
Ordinary choice: Ask, Observe, Answer, Dismiss, Acknowledge; explicitly authorized operators use account-wide AnswerChoice/DismissChoice.

Caller-scoped Answer/Dismiss is integrated at ed97c10f8; the Go terminal example is integrated at f27944846. Ordinary agent delegation remains planned. Acknowledgement confirms an already-recorded answer. Asking requires explicit abstraction.asks/question.ask on account.

Presentation ownership and current limits. Legacy catalogue example:

q, err := facade.Discover().ResolveAsks(ctx, facade.Requirements{})
obs, err := q.AskContext(ctx, asks.ApplicationQuestion{
	RequestKey: "dl-example.com", Key: "download.reach",
	Slots: map[string]string{"host": "example.com"}})
fmt.Println(obs.Outcome) // "pending" until a person answers

Contract · Catalogue

CAS

Replace a file from an expected base, or change it while holding the shared cross-process lock.

direct utility

Go: Read, Write, Change, NewPlacement
Python/C++: read, write, change, Placement

API and invariants · Catalogue

Config

Read effective provider settings with provenance, edit the user location, and observe the current revision.

abstraction.config/reader@1 abstraction.config/editor@1 abstraction.config/observer@1

Facade: ResolveConfig, ResolveConfigEditor, ResolveConfigObserver
Methods: Read; ReadUser, ReplaceUser; Observe

cfg, err := facade.Discover().ResolveConfig(ctx, facade.Requirements{})
snapshot, err := cfg.ReadContext(ctx)
fmt.Println(snapshot.Store, snapshot.Origins.Store.Rung)

Generated schema · Contract

Credentials

Store named credentials, constrain their allowed target and consumer, and apply them inside an authorized service.

abstraction.credentials/holder@1 abstraction.credentials/applier@1

Facade: ResolveCredentials, ResolveCredentialsApplier
Methods: Store, Rotate, Revoke, List, Audit; Check, Apply

holder, err := facade.Discover().ResolveCredentials(ctx, facade.Requirements{})
page, err := holder.List(ctx, "", 32)
fmt.Println(page.Records)

Catalogue · Current coverage

Download

Describe a download as durable work with sources, destination, digest, network cost, and credential requirements.

request vocabulary + abstraction.job/acceptance@1

Service path: encode the generated download request, then use ResolveJobs and Submit.
Direct provider bridge: Open, Get, Submit, ResumeOrGet.

Contract · Catalogue

Facade

Resolve capabilities, bind typed clients, describe endpoints, and manage provider registrations.

abstraction.facade/resolver@1 abstraction.facade/caller@1 abstraction.facade/endpoint@1 abstraction.facade/registry@1

Entry point: New / Machine
Wire methods: Resolve; Observe; Describe; Declarations, Declare, Withdraw, Observe

Contract · Generated schema

Identity

Bind operating-system evidence about the peer to the accepted native connection.

direct transport utility

Go: OfHandle, CanEver, proof-checked peer attributes, and identity-bound listeners. Capability services consume the verified peer at their receiving boundary.

Contract · Catalogue

Inference

Bind model chat, embeddings, transcription, speech, live audio, image generation, and operator controls to mediated providers. Video generation runs as durable inference work through Jobs.

abstraction.inference/chat@1 abstraction.inference/embed@1 abstraction.inference/transcription@1 abstraction.inference/speech@1 abstraction.inference/live@1 abstraction.inference/image@1 abstraction.inference/operator@1

Facade: ResolveInference, ResolveEmbeddings, ResolveInferenceOperator. Generated clients bind the other modality endpoints.

Complete is Stream's non-streaming twin, observing a call to its end and folding the deltas into one reply. Complete names the Go method below; abstraction.inference/complete names the rights action the runtime checks inside it.

chat, err := facade.Discover().ResolveInference(ctx, facade.Requirements{})
// forbidden here is the resolution boundary's own peer check, not a missing grant
reply, err := chat.Complete(ctx, wire.Request{Model: "llama3.1", Messages: msgs})
fmt.Println(reply.Outcome) // not_permitted is a missing per-server grant, CONTRACT.md INF-A2

The same service through the inference gateway, for a program that only speaks the OpenAI or Anthropic API:

openabstractions inference gateway on --address 127.0.0.1:8765
openabstractions inference key issue --for /absolute/path/to/curl
curl http://127.0.0.1:8765/v1/chat/completions -H "Authorization: Bearer oalk_..." \
  -d '{"model":"llama3.1","messages":[{"role":"user","content":"Say hello in five words."}]}'

Generated API schema · Modality methods · Set up a model server · Full Go example

Job

Accept durable work, reconcile a lost submission reply, observe it, cancel it explicitly, read results, and list caller or account work.

abstraction.job/acceptance@1 abstraction.job/operations@1 abstraction.job/inventory@1 abstraction.job/operator@1

Facade: ResolveJobs, ResolveJobOperations, ResolveJobInventory, ResolveJobOperator
Core: Submit, Reconcile, CancelWork, ObserveWork, ReadResult, ListWork

Contract · Inference job schema

Logging

Submit structured records, read retained pages, and long-poll for later records.

abstraction.logging/sink@1 abstraction.logging/reader@1 abstraction.logging/observer@1

Facade: ResolveLog, ResolveLogReader, ResolveLogObserver
Methods: Write, Read, Observe

logs, err := facade.Discover().ResolveLog(ctx, facade.Requirements{})
err = logs.LogContext(ctx, 0, "worker started", map[string]string{"component": "indexer"})

Generated schema · Contract

Model

Resolve a portable model reference to a manifest and the credentials or content needed to obtain it.

abstraction.model/resolver@1 abstraction.model/manifest@1

Facade: ResolveModel
Methods: ModelResolver.Resolve, ModelManifest.Resolve; ergonomic clients expose ResolveContext.

Generated schema · Contract

Rights

Decide whether a verified peer may perform an action on a resource, and administer explicit policy rules.

abstraction.rights/authorization@1 abstraction.rights/operator@1

Facade: ResolveRights, ResolveRightsOperator
Methods: Decide, DecideFor; ListPolicy, SetRule, RevokeRule, ReadRule, RegisterAction

Contract · Catalogue

Router

List eligible models and servers, then pick a model server under execution and model requirements.

abstraction.router/router@1

Facade: ResolveRouter
Methods: Models, Hosts, Pick

Generated schema · Contract

Storage

Read immutable content by digest, write through bounded sessions, and observe or list changes under resource policy.

abstraction.storage/content-reader@1 abstraction.storage/content-writer@1 abstraction.storage/content-changes@1

Facade: ResolveStorage, ResolveStorageWriter, ResolveStorageChanges
Methods: Open, Read, Close; Begin, Append, Commit, Abort; Observe, List

Contract · Catalogue

Watch

Turn polled or pushed state into current snapshots and quiet notifications, or settle a burst after a quiet budget.

direct utility

Go: Poll, Push, Post, Current, Next, Close, Settle. Watch reports current state and quiet periods; it carries no retained history.

API and semantics · Catalogue

Applications

Manage operator-installed application manifests, observe ready instances and contexts, and activate a registered application.

abstraction.facade/applications@2

Facade: ResolveApplications
Methods: Register, Remove, Announce, Withdraw, Observe, Activate

Catalogue · Current coverage · Facade source

Generated schemas

Every contract's generated reference page

Each page below comes from that contract's Thrift definition through the shared docs generator, one page per contract. The rule tags cite the contract's CONTRACT.md.

AI on this machine

Model

abstraction.model/resolver@1 abstraction.model/manifest@1

The resolver maps a portable reference to a download; the manifest names a descriptor's parts under the component rule MODEL-C1–MODEL-C3.

Generated schema · Catalogue

Router

abstraction.router/router@1

The router reports inventory, residency and pick decisions; its Component struct folds a projector or VAE into a family under the model contract's MODEL-C3.

Generated schema · Catalogue

Inference

abstraction.inference/chat@1 abstraction.inference/embed@1 abstraction.inference/transcription@1 abstraction.inference/speech@1 abstraction.inference/live@1 abstraction.inference/image@1 abstraction.inference/operator@1

Modality and operator methods carry the rules INF-C1–INF-W8; the durable job vocabulary for image and video work is a separate page.

API schema · Job schema · Catalogue

Resource

abstraction.resource/table@1 abstraction.resource/leases@1

The table reports who holds how much of a scarce resource under RES-T1–RES-T5; leases ask a holder back on demand under RES-L1–RES-L5 and the wake lease RES-A1.

Generated schema · Catalogue

Lend

abstraction.storage/lend@1

The model bridge's lending profile writes into another application's directory on the runtime's behalf under MODELBRIDGE-L1–MODELBRIDGE-L18.

Generated schema · Catalogue

Foundations

Config

abstraction.config/reader@1 abstraction.config/editor@1 abstraction.config/observer@1

Effective settings, the user location and revision observation carry the rules CFG-E3–CFG-X1.

Generated schema · Contract

Logging

abstraction.logging/sink@1 abstraction.logging/reader@1 abstraction.logging/observer@1

Submission, retained pages and long-polled observation carry the rules LOG-I1–LOG-S13.

Generated schema · Contract

Facade

abstraction.facade/resolver@1 abstraction.facade/caller@1 abstraction.facade/endpoint@1 abstraction.facade/registry@1

Endpoint description carries FAC-B1–FAC-B3; provider registrations and binding carry the registry rules FAC-R1–FAC-R8.

Generated schema · Contract

Job

abstraction.job/acceptance@1 abstraction.job/operations@1 abstraction.job/inventory@1 abstraction.job/operator@1

Acceptance, reconciliation, cancellation and inventory carry the rules JOB-A1–JOB-W3.

Generated schema · Contract

Inference detail

Modality profiles and methods

CapabilityProfileMain methodsClient entry
Chatabstraction.inference/chat@1Start, Observe, CancelResolveInference
Embeddingsabstraction.inference/embed@1EmbedResolveEmbeddings
Transcriptionabstraction.inference/transcription@1Start, Observe, Cancelgenerated Transcriptions client
Speechabstraction.inference/speech@1Start, Observe, Cancelgenerated Speech client
Live voiceabstraction.inference/live@1Start, Append, Observe, Commit, Cancelgenerated Live client
Imagesabstraction.inference/image@1Start, Observe, Cancelgenerated Image client
Operatorabstraction.inference/operator@1Hosts, AddHost, RemoveHost, key, audit, and inference gateway methodsResolveInferenceOperator

Live voice is the live@1 service. It carries ordered, bounded session events over native IPC. Vendor connections and credentials remain inside the inference service.

Requests and presentation

App choices, OA permissions and notification actions

Applications show ordinary choices in their own UI. OA keeps shared pending and answer state and presents its permission requests. Notifications with actions form a separate planned native surface.

The permission journey connects two identified apps, native consent, a saved rule and an actual credential-bearing operation. Identity binds the calling program, Rights decides access, Asks retains the proposed decision and answer, and the resource service checks and performs the operation. The canonical guide preserves the research basis, accepted one/all scope and finite full-control design; the runnable Windows/macOS playground and human captures remain pending.

Development source for 0.4.0, October 5, 2026. Released 0.3.0 has its own contents and package evidence. Automatic OA ordinary popups are removed; caller-scoped Answer/Dismiss and the Go terminal example are integrated. Fresh native Mac verification and ordinary agent answering remain open.

InteractionExampleOwner and state
App-owned ordinary choiceReplace an output, or choose a model for one requestThe application's normal window, CLI or controls. The Go terminal example uses OA's pending/observation/own-answer/replay API. ComfyUI keeps model selection in its existing node controls.
OA-owned permissionAllow one program to submit downloads or read a shared resourceOA's native dialog explains requester, recorded publisher, scope, effect and duration. The Windows 11 renderer is integrated, with bounded native guards passed. Final visual acceptance and system/privacy forms remain open.
Notification with actionsA completed job offers Open to its Activity recordA compact native notification with attribution and an expiring service-owned action. Public posting/action lifecycle and the complete application journey remain planned.

Native appearance follows the actual OS version: Windows 10, Windows 11 or AppKit on macOS. The Windows 11 renderer has bounded expanded details and compact chrome. Successful permission answers finish without a second confirmation dialog; failed or uncertain completion retains its report.

Synthetic native lifetime/answer guards and result-report checks passed for the compact Windows 11 source through 957df22bd, using a fake Rights owner. The owner's screenshot shows earlier baseline 3c3b31abf; final appearance of the compact revision remains unaccepted. Keyboard/UIA, cross-monitor DPI/high contrast, Windows 10 appearance, actual owner Mac answering/effect/Undo, lock/unlock, installed login/upgrade and 0.4.0 release qualification remain open.

Planned system access permissions explain a protected system act and use the operating system's administrator approval when required. Planned privacy access permissions explain the device or data capability and follow its platform-specific consent and Settings path. Windows owns actual UAC approval and its secure desktop.

A stable action code and structured resource identify authority. Readable descriptions and display groups explain it. Routine, sensitive and administrative tiers decide who may answer under the existing first-use policy; an administrative OA tier alone supplies no OS elevation requirement. Publisher verification describes recorded identity evidence, with an unverified publisher indicating an evidence gap.

The accepted common permission schema defines explicit operations and typed targets. Source e5c1eebb1 integrates 34 compiled built-in action definitions, the Credentials-owned typed named Use resource and shared native/web first-use explanations. Named Use follows the current account-owned name slot through rotation or recreated registration, under its current host/consumer restrictions.

An isolated native IPC/loopback test passed missing permission → exact caller-bound ask → recorded Allow/applied permit → retry using the named secret. The fixture answered through the operator API; human native interaction retains its separate limits above. Typed one/all selectors, versioned full control, breadth-warning presentation, raw secret Read and the protected OS helper remain unimplemented. Breadth warnings describe scope separately from actual OS elevation.

The Go terminal example prints the full destination, submits its own selection and observes the retained service winner before its guarded output effect. Its suite and Windows redirected-input runtime checks passed; actual console typing remains manual acceptance, and Linux/macOS checks are compile-only.

Ordinary answers select app behavior and grant no OA permission. The proven requester can Answer/Dismiss only its own immutable RequestRef; account-wide answering requires an explicitly authorized operator. Program attribution establishes no human presence. Acknowledge confirms an exact existing answer and relinquishes full service replay. Routine first-use responder enrollment supplies no ordinary answering authority. See ASK-A9, ASK-W5 and ASK-O9 for the current service boundaries.

On-demand desktop Panel

The Panel, section by section

The Panel installs with the runtime and opens as a native window on Windows, macOS and Linux. Each of its sections links to its own anchor below: a "Learn more" link on Windows, a small "?" mark next to the heading on macOS and Linux, and a round "?" button for the current page as a whole. Every anchor names what the section does, the contract rule that decides it, and its command-line equivalent where one exists today.

Status

Service check

Rereads the resolved runtime's capability readiness, the call status also makes. Runtime selection and trust follow the rule status and rights both use: an explicit endpoint is never trusted as the installed runtime without its own registration proof.

The runtime is the shared background service every application on this account uses through OpenAbstractions. It runs work in the background, tracks the models and credentials an application may use, and holds the questions it is waiting for you to answer. A pending question appears under Questions and permissions; a download in progress appears under Work.

openabstractions status

Work

Work started from this Panel

Lists the jobs this Panel itself submitted, with each job's current state and display label. A job belongs to the program that submitted it (JOB-A1); this view shows only this Panel's own.

openabstractions jobs list

Work started by apps

Lists the jobs every application on this account submitted. Seeing them needs abstraction.job/inventory.read; canceling another app's job needs abstraction.job/acceptance.cancel (JOB-A1).

openabstractions jobs list --all, or jobs cancel --all <id> to cancel one

Notifications

Lists each app that notified you in the last seven days with its count, beside a switch. Turning an app off sets a block on abstraction.asks/notification.post for it and withdraws its shown notifications; turning it on removes that block. Below are the notifications the runtime holds now and what became of each (ASK-N6).

Download a file

Submits an HTTP(S) transfer to the runtime's job service by URL, digest and size, and recovers a saved request after a lost reply instead of resubmitting it. A dropped connection keeps its error, and the next attempt resumes from the last proven byte (DL-E1).

openabstractions download <url> --sha256 HEX --size BYTES

Questions and permissions

Questions

Shows pending and past legacy permission requests and ordinary app requests through separate public records. Authorized operators can answer or dismiss them. Ordinary dismissal records a terminal decision without selecting an option or changing permissions. App-owned presentation and its caller-scoped answer route follow the current service boundary.

The hidden session presenter supplies OA permission prompts without a persistent tray or menu-bar icon; the Panel opens on demand. The permission journey explains the native request and its retained effect.

Let an application answer one selected request

Creates a five-minute, exact-scope permission for one selected executable, one pending first-use question and one answer. It does not answer the question; that application must submit the selected answer. The selected path is a policy subject and does not prove which process is running. If an assistant uses a shared interpreter such as Bun, the permission applies to every program using that interpreter.

No command-line equivalent yet.

Permissions

Allows or blocks one action for one account and application on one resource, at the policy revision shown. Every decision the runtime makes is checked again at call time under abstraction.rights/authorization@1; a Panel edit leaves a decision already made as it was.

The open view refreshes after another operator changes policy. Unsaved drafts retain their original revision for explicit review. Expiry is checked through current rule reads; time alone does not change the durable policy revision. Applications are checked against these rules every time they act.

The permission journey distinguishes Block, removing one rule and effective access, with broader selectors and fixed full control identified as pending design.

openabstractions rights list, or rights grant

Device

Holders

Shows who is using a limited resource on this device right now: the app, the account, how much, and whether it was measured or claimed. Verified rows are measured. A claimed row's amount is 0 unless the row is a lease, and then it is the grant the runtime wrote (RES-T3). A resource named card:<n> can report the same bytes as system memory on shared-memory hardware. A reader never sums two resources, or a verified row with a claimed one (RES-T5).

openabstractions resources

Keeping this device awake

Shows apps and accounts keeping this device from sleeping, with how much, since when, and the lease id; when nothing reports this directly, an older account-scoped reading is shown instead and labeled as such. The wake lease is the one lease rights carries today (RES-A1).

openabstractions resources awake

Inference

Model servers and spend

Lists the model servers this device calls directly for model completions, separate from the gateway keys other apps use to reach it, with whether each is reachable and its spend today against its daily budget; adds or removes a model server. A hosted server's credential is applied to each outgoing request and never cached (INF-C1).

openabstractions inference server list, or inference server add / inference server remove

Inference gateway

Turns on the inference gateway, a local proxy other apps on this account can call, so an app that already speaks the OpenAI or Anthropic API reaches this device with no code changes. It listens only on 127.0.0.1, stays off by default, and stays set after a restart. Changing it needs the rule inference server manage (abstraction.inference/host.manage).

openabstractions inference gateway on --address 127.0.0.1:PORT, or inference gateway off

Gateway keys

Issues or revokes a gateway key, which lets one other app reach this device through the inference gateway; the key is shown once and this Panel never stores it. A key alone grants nothing: the app still needs inference complete (abstraction.inference/complete) on a model server and permission to apply a hosted server's credential.

openabstractions inference key issue --for PATH, or inference key revoke

Providers

Model servers

Lists every model server the runtime can reach and which app or file registered each one: something you configured, an app's own record, a built-in default, or another trusted runtime.

openabstractions inference server list

Registered providers

Lists every registered provider and its role (a managed process, a model server, or a remote runtime) with its activation, services, endpoint and readiness. Every registration is providers/<name>.json in the runtime's own state (FAC-R1).

openabstractions provider list, or provider add / provider remove

Model selection policies

Reads, saves or deletes one named, ordered model preference for this Panel or a selected application. Other-application edits require the separate account-wide selection.manage_for permission. An optional provider value pins a candidate to a logical provider declaration; the runtime still checks caller identity, permission, provider readiness and model availability when the application makes a call.

No command-line equivalent yet.

Remote runtimes

Lists model servers reported by another trusted runtime in its own domain; their credentials stay on that runtime and are never copied here. Trusting a remote runtime's report follows the same registration rule as a local one (FAC-R1).

No command-line equivalent yet.

Credentials

Saved credentials

Lists every credential registered on this account: its name, kind, status, targets, consumers and where it's used. The secret itself is typed in once and never shown, logged or sent back.

openabstractions credentials list

Add credential

Registers a name that isn't already in use, scoped to the hosts it may be sent to and the apps allowed to apply it. The credential manager binds the caller the same way for every write (CRED-H1).

openabstractions credentials add <name> --target HOST --for CONSUMER

Rotate

Replaces the secret and expiry for a name you've already listed, at the revision the list showed.

openabstractions credentials rotate <name>

Revoke

Deletes the secret right away and keeps a record that it existed, at the revision you've already listed.

openabstractions credentials revoke <name>

App access

Sets whether one app on one account can use a credential, through the rule credentials apply (abstraction.credentials/apply) on that credential; it's the same rule editor as Questions and permissions. Listing and editing it needs this Panel to hold credentials manage (abstraction.credentials/holder.manage) and credentials list (abstraction.credentials/holder.read) (CRED-A2).

openabstractions credentials allow <name> --program PATH, or add --deny

Settings, logging, identity and explore

Settings

Reads and writes your settings and watches them for later changes. Each value says where it came from: for you, for this device, or for this run. A value's source follows the location order process over user over machine (CFG-R1); an environment variable overrides for that process only, and an empty one is no override (CFG-W3).

Disabled download delegates switches the nas and bits delegates off on this device. The two job directory rows are deprecated. Watching settings for changes does not touch what you are editing. If settings change while you are editing, save your draft first, then read again. Pause, resume, download destinations and host refusal files are set from the openabstractions command line for now.

No command-line equivalent yet.

Logging

Reads the runtime's retained log history, filtered by program and level, and can follow new records as they arrive. Each record's hop 0 is the process that wrote it; later hops are what each next service could verify about that write (LOG-I1).

A claim an application makes about itself is unverified. A stamp this runtime's logging service adds itself is verified.

No command-line equivalent yet.

Identity

Shows which runtime this device selected, how it bound this Panel's own connection, and what this platform can prove about a caller. A bound attribute is proven by native transport evidence, or left unbound where the platform cannot prove it (ID-B1).

No command-line equivalent yet.

Explore

Calls a capability as this Panel and shows the result beside the rights rule that allowed or blocked it, so a grant or a revoke can be tried again without leaving the page. This is the same call probe makes, including a probe marked writes, which asks before it runs.

Grant or revoke the deciding rule for an application directly from a result, then try the call again. This Panel can only act as itself here; to test another application, run a copy of openabstractions named openabstractions-probe under that application's own path.

openabstractions probe <capability> [action]

Compare the APIs

The same event in your language

These examples write a structured log event through an already resolved client. Select a language to compare its native API. The calling application handles any returned error or exception.

import (
    "context"
    "log/slog"
    logging "github.com/openabstractions/abstraction-logging/go/client"
)

func recordStart(ctx context.Context, events *logging.Client) error {
    return events.LogContext(ctx, int64(slog.LevelInfo), "worker started",
        map[string]string{"component": "worker"})
}

One-way logging confirms local submission. A storage receipt is not returned. For connection setup, use the language guides. For other operations, open the capability’s generated schema in the API index.

Client languages

Facade guides and generated schemas

API presence and platform qualification differ by language and capability. Check current coverage before choosing a client path.