Home / Protocol

The Agent Presentation Protocol.

APP is the open standard underneath Chitin. It connects any AI agent to any presentation surface — avatar, voice, orb, or screen — with a single, simple message format. If your agent can send JSON, it can use APP.

agent → surface
// agent-initiated notification { "type": "agent_notification", "warrant": "task_decision_required", "urgency": "medium", "if_unanswered": { "kind": "blocks_until_answered", "blocking_resource": "deploy pipeline" }, "target_surface": "auto", "body": "Build failed — retry, roll back, or investigate?" }
surface capabilities
// surface advertises what it can do { "protocol_version": "0.4", "agent": { "name": "Chitin Avatar", "version": "1.0.0" }, "capabilities": { "supports_presence": true, "initiation": { "modes": ["immediate", "negotiated", "scheduled"], "respects_warrant": true } } }
Design principles

Six commitments hold it together.

Surface-agnostic

One message renders legibly across an avatar, a voice, a watch glance, a car, or an ambient light. The agent doesn't need to know which.

Agent-agnostic

Any agent that speaks the protocol connects. No privileged framework, model family, or vendor.

User-sovereign

Memory, identity, and policy belong to the user. The relay routes; it doesn't capture.

Bidirectional initiative

Agents can reach you when something warrants it, not just answer when asked — declaring why they're reaching out and what your non-response means.

Open

Apache 2.0, open reference implementations, a relay you can self-host.

Presence-first

Surfaces broadcast whether it's a good moment; agents respect it.

The round trip

How a message becomes a moment.

1

Connect

A surface announces itself and the capabilities it supports.

2

Send

The agent sends a message — a response, or an initiated notification that declares its warrant and stakes.

3

Present

The surface renders it — speaking, animating, or both — within its abilities.

4

Respond

User input flows back to the agent over the same channel. Repeat.

Message fields

A small vocabulary.

type

Message type

Routes the message — chat_message, agent_notification, presence_update, agent_card, and more.

warrant

Why an agent is reaching out

user_authorized, task_decision_required, or external_event. Required on agent-initiated contact.

if_unanswered

What your non-response means

blocks_until_answered, proceeds_with_default, safe_to_ignore, or reverts_at.

target_surface

Which surface class to reach

watch, phone, desktop, car — or auto to let the relay choose by presence and urgency.

agent_card

Identity & capabilities

How agents and surfaces declare who they are and what they support, so mismatches are negotiated, not crashed into.

presence_update

Interruptibility

How a surface signals whether the user is interruptible right now.

Open standard

Build on APP.

Chitin is the first app built on the Agent Presentation Protocol. The spec is open — bring your own agent.