Capabilities
A capability is the exact versioned service contract a caller may request from an Animator. It says what operation and typed material may cross a grant; it is not a model name, endpoint, container, tool, Rune, Coven, or application purpose.
The currently delivered spine is narrower: CapabilitySpec uses the key
{animator}:{family}:{model_id}, seven closed families, coarse input/output modality strings, and
one compatibility grant class. chat grants carry a hydrated Pydantic AI model and only explicitly
declared agent-loop toolsets; tool_execution grants require a non-empty toolset surface. The other
five family labels remain routing metadata and fail closed at issue. That v1 shape supports the
proved chat/model path, narrow toolset compatibility, and readiness mechanics. It does not prove
executable audio, visual, embedding, rerank, service-job, or host-tool routes. State of
Work owns that boundary.
The accepted general service design below is Designed until source, migrations, adapters, tests, and operator receipts promote it.
Interface, profile, and operation
Three identities prevent a model catalogue from becoming an unsafe universal router:
| Record | Question it answers | Example |
|---|---|---|
CapabilityInterfaceRef |
Which versioned semantic ABI is requested? | model.chat@1, echo.transcribe@1, prism.image@1, prism.scanner@1, scout.search@1 |
CapabilityProfileRef |
Which exact implementation closure can perform it? | one model and weights, Comfy graph, native parser, engine toolchain, language set, limits, and licenses at an immutable revision/digest |
| operation | Which admitted act within that interface is requested now? | generate, edit, transcribe, segment, retarget, search, validate |
The interface owner defines request and result schemas, operations, typed facets, failure and recovery meaning, and domain-specific validation. A profile pins exact code, model, weights, runtime, workflow or graph, configuration, dependencies, licenses, language and format support, resource evidence, and proved limits. The operator Rune chooses a concrete deployable instance and references those admitted definitions.
Image input may enrich model.chat@1; it does not become precise Sight. Audio output from a chat
model does not become an eligible speech synthesizer. A Comfy graph that can produce an image and
a video exposes two proved interfaces or operations only when each contract closes. tool is not
an interface that means every side effect.
Stable identity
The designed v2 key is:
{animator}:{interface_id}:{profile_ref}
profile_ref is a safe stable id plus exact immutable revision or content digest; an unversioned
mutable label is not a profile reference. The selected operation is pinned in the demand and grant
rather than multiplied into endpoint identity. Mutable provider handles, deployment paths, and
floating tags are not keys.
Identity components are ASCII lowercase slugs with digits, dots, underscores, and hyphens; colon,
whitespace, path separators, controls, and empty components are forbidden. An interface ends in an
integer @revision. A profile reference is profile-id@revision or
profile-id@sha256-<lowercase-hex>; the referenced record still carries the full digest. Parsing is
structural, never a split of an unrestricted provider string.
Existing v1 keys remain legible only through an explicit compatibility projection from exact family/model pairs to exact interfaces and profiles. A migration never silently reinterprets a persisted key, and no unknown family is converted to a generic service.
Capability demand
CapabilityDemand@1 asks for:
- exact interface and operation;
- typed input and output contract references, required facets, formats, language, and limits;
- required feature facts such as tools, token streaming, audio-frame streaming, progress,
cancellation, timestamps, seeds, masks, or live clocks—never one ambiguous
supports_streamingbit; - optional exact or eligible profile revisions;
- invocation mode:
model_round,call,durable_job, orlive_session; - source classification, local-only or eligible Portal policy, purpose, consent, and cost ceiling; and
- run, station-attempt, deadline, priority, and reservation requirements.
Core matches exact declared and admitted facts. It does not interpret an OCR ontology, choose a creative image model, judge Slovak speech quality, decide a retarget map, or infer that a wider format can satisfy a narrower domain contract. The interface owner validates those constraints before demand and after return.
Declaration, evidence, observation, and grant
Four records keep assertion, proof, readiness, and permission distinct:
| Record | Office |
|---|---|
CapabilitySpecV2 |
Immutable Animator declaration of interface, profile, operations, I/O contracts, invocation mode, driver/dialect, provenance, evidence, resource, and lifecycle intent. |
CapabilityEvidenceRef |
Exact producer-attributed conformance evidence supporting that profile's claims; the target contract owner separately admits or promotes it. |
CapabilityState |
Latest observation for the exact Animator/interface/profile binding and, where necessary, its operations. |
| discriminated capability grant | Temporary WARM binding to one operation and one callable surface under an exact lease. |
A Rune declaration is routing intent, not quality proof. Admitted evidence closes exact code, weights, workflow, dependencies, dialect, licenses, language or format corpus, hardware profile, and measured limits. Riddle may produce findings but cannot promote; Assimilation may repair foreign craft but does not own every capability. The target interface/profile owner admits or promotes evidence under its policy. Dispatcher consumes that decision without becoming a benchmark judge.
The source implementation currently exposes only the narrow compatibility grant described above; it never exposes its Animator or Connector. The designed grant union is:
| Grant | Live surface | Typical use |
|---|---|---|
ModelGrant |
Pydantic AI model and admitted agent-loop toolsets | chat or reasoning round |
CallGrant |
typed call driver | bounded STT/TTS, OCR, deterministic service, search, or another immediate call |
JobGrant |
typed submit, status, cancellation, result, and reconciliation driver | image, video, Form, Kinesis, Comfy, engine, or paid asynchronous work |
SessionGrant |
typed bounded live-session driver | later audio, vision, motion, game, or device sessions |
The grant contains only its exact operation surface. A ModelGrant cannot be cast to a job driver;
a JobGrant supplies no arbitrary HTTP client; a SessionGrant grants no source-device or world
effect not present in its interface. Live models, connectors, SDK clients, iterators, sockets,
sessions, and grants never enter Graph checkpoints or delegated payloads.
Readiness is not compatibility
The six observed phases remain:
| Phase | Meaning |
|---|---|
COLD |
managed unit down or endpoint unreachable |
ACTIVATABLE |
dynamic runtime up; exact profile not loaded |
WARMING |
activation or readiness convergence in flight |
WARM |
exact admitted binding currently accepts its proved operation set |
ERROR |
probe or runtime reported a terminal fault |
UNKNOWN |
no conclusive fresh observation exists |
is_dynamic remains a deployment trait: a reachable runtime may still need profile activation.
It is not a readiness, quality, or capacity claim.
Liveness of one URL, process, /health, or /models route does not prove every declared model,
dialect, operation, language, or profile warm. A fixed single-profile runtime may share one
readiness observation only when the pinned adapter proves those surfaces are inseparable. A probe
may downgrade or invalidate a declaration; it cannot invent one. Conformance evidence survives a
temporary cold state, while a warm observation never substitutes for conformance.
Dispatch and lease
The Dispatcher resolves one CapabilityDemand@1 deterministically against eligible admitted
specifications and fresh state. Before grant it applies source, Sigil, local/Portal, egress,
purpose, consent, cost, and reservation policy owned by their proper boundaries. Selection is not
quality ranking unless a separately admitted policy supplies comparable evidence.
| Observation | Result |
|---|---|
eligible WARM, admission open |
issue the exact discriminated grant and register its lease |
managed COLD, ACTIVATABLE, or WARMING |
return a handle-free hardware transition request |
| the same phases on a shared or unmanaged service | settle unavailable |
ERROR |
settle unavailable with the observed reason |
unresolved UNKNOWN |
probe once under deadline, then settle unavailable |
Dispatcher never starts, stops, loads, evicts, submits an effect, or waits on a provider job.
Orchestrator owns readiness convergence. The interface owner or
Worker invokes the granted surface. A waiting Graph holds no live grant. Runtime models and
toolsets are bound only while issuing an admitted grant. Capability, specification, and state
reads expose detached declarations and observations. The retained get_runtime() lookup is an
control-plane-internal runtime handle; it is neither a model/toolset bind nor a second public grant
route.
One loaded AnimatorRegistry is one sealed process generation. Successful loading is one-shot;
changing declarations, runtime adapters, or exact Portal definitions requires constructing a new
application generation rather than mutating the live registry underneath admitted Runs. A failed
staged first load publishes nothing and remains retryable; it does not leave a partly sealed
catalogue.
Immediate calls retain a scoped process-local lease only during use. Every asynchronous effect,
local or remote, must persist ServiceJobAttempt@1 before first submit so timeout or process death
can reconcile the same request rather than repeat it. Work on managed resident or scarce local
substrate additionally transfers an exact Orchestrator-visible reservation and fence to that
attempt; live work uses a bounded session
record. Current process-local leases cannot provide those guarantees, so durable service work
remains Designed.
There is no universal SessionAttempt yet. Echo Resonance, Riffmaw Jam, LiveSight,
LiveKinesis, and Foundry Playtest each own their chronology, clocks, epochs, participants,
queues, stopping, reconciliation, and evidence. Core's future SessionGrant supplies only exact
technical admission, lease/reservation, and late-output fencing requirements. A common mechanical
session envelope may be accepted only after those owners expose genuinely shared invariants; until
then their records remain distinct and Designed.
Runes, Runes in groups, and placement
A Soulstone or Portal Rune will declare first-class [[capabilities]] entries referencing exact
interface, profile, driver, dialect, evidence, resource, and containment definitions. Current
[[models]] blocks remain compatibility sugar for the proved model interfaces; non-model services
never invent a model id or LLM generation overlay merely to load.
One Rune may belong to several Covens. A Coven names compatible local services that may rise together; it does not choose semantic capability, reserve resources, schedule a job, pool VRAM, or authorize a Portal. Current conflict domains remain the conservative executable law.
The later ResourceEnvelopeRef records measured idle, active and transition-peak GPU memory, host
RAM, disk, devices and topology, bandwidth, warm-up and unload time, concurrency, and measurement
conditions. A PlacementProfile relates exact envelopes and required headroom under one host or
Legion topology. A future CapabilitySetRequest@1 may ask Orchestrator to converge several exact
bindings through one serialized desired-world transaction. Physical effects are not atomic: the
request uses those profiles and existing drain, attest, compensation, restoration, and containment
law rather than turning a Coven into a second scheduler or promising rollback that hardware cannot
prove.
Composition boundary
A capability answers "which exact technical interface can be invoked now?" A Spell answers "which semantic action belongs at this Pattern station?" A Composition answers "which reusable records, policy, judgment, effects, and outcomes own the work?" A Product answers "which profession or market receives that capability, through which supported use cases and operator promise?" Sharing a capability or packaging a Product never merges those offices.
Scanner, Image, Video, Sight, Form, Kinesis, Scout, Echo, and Foundry retain their distinct domain
jobs and results. They reuse discriminated capability-backed or direct-tool execution binding,
Connector dialects where applicable, ServiceJobAttempt@1,
artifact custody, Stasis, cancellation, and recovery mechanics; they do not collapse into one
MediaJob, generic tool_execution, or universal OpenAI adapter.
Connectors owns invocation dialects and the current chat-only implementation boundary. Dispatcher (22) owns matching and leases; Orchestrator (23) owns physical readiness; and Workers (14) owns durable attempt settlement.