aamp is a host application for running AI agents while keeping the controls that matter on the host. Secrets stay host-side. Policy enforcement stays host-side. Logging and audit stay host-side. The agent gets capability; the host keeps authority.
Separation is structural, not conceptual. Each plane has its own responsibility, its own records and its own audit trail.
Deterministic host-side automation: helper calls, capability calls, transforms, and the model invoked as one bounded step rather than the thing driving the program.
Every capability invocation is its own process with its own limits. Filesystem access is restricted to explicit read, write and exec paths; the process runs under no_new_privs with seccomp filtering and Landlock restrictions.
Helpers and skills are catalogued and attached by the host, so an agent receives a tool contract rather than a credential. What the agent can reach is a decision you record, not something it discovers.
All guest network traffic routes through a host-controlled proxy. Domain rules support default-allow or default-block, and host.internal exposes only the routes you permit.
Fourteen log domains recording token accounting, firewall verdicts, proxy traffic and document-level retrieval — written as a by-product of running the system, not as an integration project.
One Go binary, no cgo and no external services. Deploys on a Linux host with /dev/kvm.
Local SQLite with FTS5 search in WAL mode. Backup is one file plus two directories.
Firecracker microVMs for the risky work — browser control, document rendering, RAG indexing.
Any OpenAI-compatible endpoint: vLLM, Ollama, LocalAI, TGI, or a hosted frontier provider.
DataLake datasets on DuckDB and Parquet — versioned, classified and queried read-only by agents.
Three roles with per-resource grants, plus inbound and outbound guardrails on every surface.
14 log domains: token accounting, firewall verdicts, proxy traffic and document-level retrieval.
A guardrail runs before the user message reaches the agent's model. Safe continues; unsafe stops the request and returns your refusal message. An evaluation that fails does not quietly pass — the control fails closed.
Guardrails are reusable policies, attached per surface: Internal Chat, WebWidget, API and the OpenAI-compatible endpoint, and Content Processing, which inspects untrusted tool output before it re-enters the loop.
The internal classifier runs in a platform-managed Rust sidecar: INT8 ONNX weights through RTen, CPU-only with AVX2 and AVX-512 kernels, overlapping windows past the 512-token context, and no runtime network dependency. Every verdict is recorded with its reason, categories, risk score and execution time.
What entered the prompt, what was retrieved, what the model returned, which tools ran, what it cost — recorded as a by-product of operation.
Article 50 transparency duties take effect 2 August 2026. Annex III high-risk obligations now run to December 2027, which means you are building an architecture rather than buying a patch.
Three roles underneath. Admin configures and administers. Operator sees the whole system and chats with every agent, but changes no security-sensitive configuration. User reaches only explicitly assigned agents and granted knowledge bases.
Decisions are enforced on the server for every protected route, not by hiding buttons. Access changes revoke the affected user's sessions, the last enabled admin cannot be demoted or deleted, and each change writes an authorization record with actor, action, target and outcome.
no_new_privs, non-dumpable process state, seccomp filtering, Landlock restrictions, resource limitshost.internal exposes only the routes you permitAn outbound filter runs after generation and before delivery, replacing detected identifiers with explicit placeholders — [REDACTED_EMAIL], [REDACTED_PERSON_NAME] — while the meaning and structure of the answer survive.
With a filter active the response is buffered rather than streamed, so no unfiltered fragment escapes ahead of it. Only the sanitized text is delivered, stored and audited. If the filter fails, delivery fails closed.
PII filtering is a risk-reduction measure, not a certification. Detection quality depends on language, context and input, and it belongs alongside data minimization, access control and retention policy.
An agent that costs four dollars in tokens to save fifteen minutes of work is not a productivity gain. Cost per outcome is the only honest metric, and it is invisible unless the orchestration layer measures it.
Token spend logged per agent, per workflow, per model. You know which use case is expensive before finance does.
DataLake queries and Data Product calls are logged the same way, tied to dataset version and build — so a recommendation's cost is as traceable as a chat turn's.
Route the routine majority to small or local models and reserve frontier capability for the fraction that earns it. Reported blended savings for tiered routing run from 40 to 80 percent against frontier-only.
Cap the number of model calls per task. Force summarise-and-stop after N turns. The agentic loop is where budgets die.
Reasoning tokens bill as output. Set the ceiling per agent rather than discovering it on the invoice.
aamp speaks OpenAI-compatible APIs, so any provider that does the same is one binding away. Open-weight models now match closed frontier on many benchmarks — sovereignty no longer costs capability.
Provider and model attach to the agent, the workflow, the capability — not to a global setting. Data classification decides which model each agent is allowed to call, and the same binding governs which agents may query a DataLake dataset or Data Product.
Run open-weight models on your own hardware alongside hosted frontier, behind one policy boundary. Any OpenAI-compatible endpoint: vLLM, Ollama, LocalAI or TGI.
A second provider is a configured fallback, not an incident you improvise through during an outage.
Deterministic host-side automation with helper calls, capability calls, transforms and optional model decisions.
Host-managed document ingestion and retrieval. Retrieval happens host-side, not in the guest.
OpenAI-compatible chat endpoints with persisted session history, model bindings and attachable policy.
Reusable host-managed integrations — search, HTTP, SSH, page reading, browser automation, scratch filesystem.
Catalogued host skills installable into agent context, some exporting structured capability definitions.
Constrained tool execution with argument schema validation and explicit path, network and sandbox controls.
Cron-style scheduling for workflows and agent prompts, with run history.
Tabular data under the same host governance as knowledge and secrets. Built on DuckDB, DuckLake and Parquet: datasets carry a SQL slug and an upload history, and each published version stays queryable.
Data products sit on top — an Association Recommender, for instance — and attach to an agent so it can query them at chat time without the data leaving the host.
A single Go binary, a SQLite database, and local file state. Start on one node. Scale operational rigour without adopting a distributed control plane first.
/dev/kvm)State requirements plainly and early. A failed install is a lost deal; an honest prerequisite list is not.