Aumos

AMP/1 — the Aumos Manager Protocol

Five JSON Schema documents. They are emitted from the Zod definitions the host itself validates against, so they cannot describe a protocol the host does not implement.

Generated from the repository, and needed only when you are implementing the protocol outside Aumos. Writing a package needs neither page.

These files are generated, never authored. A test in the repository regenerates them and compares, so a hand-edit fails the build rather than quietly becoming the stale document an outside implementer reads.

The five documents

manager-invocation.schema.json

Everything an agent is sent. Note asOf, which is separate from clock.now and is the instant the judgement is about — every gateway call is pinned to it; and language, which governs the agent’s prose and nothing else.

manager-result.schema.json

Everything an agent may send back. Strict at every level, except that a field this schema does not define is dropped from the judgement and named back to you rather than refusing it.

manager-error.schema.json

What to return when you could not look, as opposed to when you looked and decided to do nothing. The two are never scored alike.

decision-proposal.schema.json

The judgement itself. It expresses portfolio intent — there is nowhere in it to put a quantity, a limit price, an order type or a venue, because turning intent into orders is the host’s and happens behind a person’s approval. One judgement may name a whole basket: target and targets are read as a single list and resolved together against one book.

manager-package-manifest.schema.json

What a package declares about itself: identity, the capabilities it asks for, and — for a ported harness — whose work it is derived from. This is the whole of what Aumos reads before deciding to run something; agent code is never analysed.

Two fields that are easy to get wrong

asOf is not clock.now

asOf is the instant your judgement is about; clock.now is when the machine is running. In a replay they are months apart. There is no default for asOf — absent, null, empty, malformed and future are five separate refusals, and none of them reaches a data source. A default of "now" is exactly how a backtest becomes a leak without anyone noticing.

⚠️ What it is not, since the port layer was removed: a boundary. Every gateway call is pinned to it and every Evidence row records it, so what was asked, and as of when is always answerable. Whether the answer was confined to that instant is not — a data source relays a vendor's response unread, and the session reaches the open web on its own. It is the largest thing this project has given up on purpose, and it is written down rather than papered over.

language governs your prose and nothing else

Field names and enum values are the wire format and are always English. A translated key or a translated enum value does not fail that field — it fails the whole payload, and the run is recorded as one that could not answer in the protocol. Evidence is never translated at all: a translated source is one no auditor can check against the original.

Implementing this in another language

Nothing requires a manager to be TypeScript, in-process, or running now. The conformance suite judges an implementation from its manifest plus one response per canonical invocation — a Python harness, a hosted service, or a directory of recorded JSON all qualify.