Concepts
Your app owns the state
nvoken owns durable agent execution while your application remains authoritative for customers, permissions, and product data.
Your application and nvoken have different jobs.
| Your application owns | nvoken owns |
|---|---|
| Users, memberships, plans, and permissions | Owner-namespaced Agents and immutable revisions |
| Product records and business rules | Durable Turns and execution checkpoints |
| Which actions a user may take | Optional Conversations and their transcripts |
| Product-level orchestration and UI | Optional MemorySpaces and memory entries |
| Customer billing and entitlements | Model routing, tool coordination, usage, and limits |
Coordinates are explicit
An App-scoped credential operates only inside its App. Every Turn states a
tenant. An optional user attributes the actor, but it is not a user record
or an authentication boundary.
Agent ownership, Conversation ownership, Turn actor, and MemorySpace scope are
independent. For example, an App-owned Agent can run for tenant acme, attribute
the Turn to user alice, continue a tenant-owned Conversation, and use a shared
tenant MemorySpace named support. None of those choices implies another.
Agent keys are unique only inside their exact owner namespace:
await client.agent("support");
await client.agent("support", { ownedBy: { tenant: "acme" } });
await client.agent("support", {
ownedBy: { tenant: "acme", user: "alice" },
});There is no App-to-tenant-to-user key precedence. The caller selects the owner namespace before key lookup.
Tool authorization stays with the host
nvoken can prove which App, tenant, actor, Agent revision, Conversation, and MemorySpace belong to a Turn. It cannot decide whether that actor may refund an order or read a particular product record. Check product authorization in your application before starting work and again when executing host tools.