On behalf of, always
Every agent is a scoped principal owned by a person or team. It can never see more than its owner. No security review per automation.
Issue your agent a scoped principal and it answers on behalf of its owner, strictly inside that identity's ACL, fail-closed, with every run logged. Any framework, one key.
// 1. mint a scoped principal for your agent
POST /agents/principals
{
"owner": "dana@acme.com",
"team": "support",
"scopes": ["ask", "search", "meeting_prep"]
}
// → sk_agent_… a signed key that sees
// only what Dana sees. Nothing more.Then ask: “What did we decide about pricing?” The agent gets a cited answer assembled only from sources its owner is allowed to see, and every denial is recorded, never leaked.
// 2. the agent asks, on behalf of its owner
POST /ask
Authorization: Bearer sk_agent_…
{ "question": "What did we decide about pricing?" }
// → {
// "answer": "Usage-based tiered pricing, decided …",
// "citations": ["slack:#pricing/…", "notion:pricing-v2"],
// "trace": { "deniedByAcl": 2 } // withheld, never leaked
// }Every agent is a scoped principal owned by a person or team. It can never see more than its owner. No security review per automation.
Every run is attributed and lands in the same hash-chained audit log as human access. Automation you can prove, not just trust.
Compose agents into teams with hand-offs: a support agent escalates to a research agent, each inside its own scopes.
Agents reach the same surfaces people do, each call trimmed to the principal's ACL, point-in-time correct, and fully audited. Planned: persistent per-agent memory and a self-serve console to mint, scope, and rotate keys.
asksearchentitiesdecisionsglossaryexpertsmeeting_preptime_machinecausalcontradictionsoffboarding_briefaudit_export