How it works
Nine steps from a door to a record.
Each step names what the platform enforces and what it writes down. The sequence is the same whether the call arrives from a page, the copilot, the API, MCP, a schedule, or an external event. Worked examples use Pyrana Capital, a synthetic portfolio of nine operating companies, three groups, and one holding company.
- 02
Push, activate, deploy.
Push compiles the document into an immutable version and registers the App identity; it activates nothing. Activate moves the active pointer to a version, is audited, and requires an App owner. Rollback is an activation of a prior version. Deploy ships a frontend image and registers and activates nothing. Three separate states, separately governed.
View detailsfinance-close · App definitioncompile → version → activate# Illustrative App document (excerpt). Pyrana Capital is a synthetic portfolio. app_key: finance-close version: v14 # compiled, content-digested: sha256:3f9a71c2…e08b surfaces: monthly-analysis: { path: /close/monthly, reads: [close.summary, variance.report] } targets: monthly_analysis: { publishes: [close.summary, variance.report], doors: [page, copilot, api, mcp, schedule] } ledger.journal.post: { doors: [page, copilot, mcp], approval: approval.journal.amount } agents: close-reviewer: { model: provider/model, tools: [ledger.accruals.list, ledger.journal.post] } workflows: monthly-close: { schedule: "0 2 * * 1-5", fan_out: { agent: close-reviewer, per: entity } } tool_sources: ledger: { kind: odbc, binding: erp-finance } resources: close.summary: { versioned: true, stale_publish: refuse } access: profiles: { controller: [read, run, approve] } entitlements: { controller: [entity:US-01] } approval: approval.journal.amount: { when: "amount >= 25000 USD", lane: controller-approval } knowledge: standing_sets: [close-policy, entity-calendars] # cortIQ, preloaded before the first turn activation: v14 # one pointer; rollback moves it backVersions
Activation moves one pointer. Rollback moves it back. The version itself never changes.
Recorded asAppConfigVersiondigestactive pointer revision - 03
A surface and a target.
A surface is a declared page where a person works. It reads the App's resources at exact versions, and when the person asks the copilot for something, the platform hands the agent the exact page context: which page, which entity, which period, which resource versions. A target is an operation the App performs, declared once and reachable from many doors: the App's own pages, the copilot, the API, MCP from any agent as the user, a schedule, an external event.
View detailssurface · monthly-analysispage context- page
- Monthly Analysis · OpCo Northwind Foods · 2026-06
- reads
- about sixteen resource types at exact versions · opco-analysis@v3 · revenue-bridge@v2 · labor-summary@v1 …
- page context
- surface=monthly-analysis · entity=opco-04 · period=2026-06 · resource versions pinned
- target
- monthly_analysis · declared once · publishes about nineteen resource types
- Pagesperson via SSO
- Copilotagent for a person
- APIservice via OAuth
- MCPany agent, as the user
- Scheduleworkflow principal
- Eventexternal system
NoteIllustrative. Pyrana Capital is a synthetic portfolio.Recorded assurfacepage contexttargetdoor - 04Built
The gate: eight steps.
Every call, from every door, passes one gate before anything runs. 1. Identity and idempotency key. 2. Active App version. 3. Target exists and the caller is allowed. 4. Page and resource references resolved to exact versions. 5. One authorization check: membership, profile, entitlement on the entity. 6. Idempotency claimed; execution row and audit record written in one transaction. 7. Dispatch to the native host. 8. Outcome recorded. The gate fails closed. Unauthorized things read as absent, not denied. One desk serves the page, the schedule, the agent, the workflow, and the external system.
View detailsthe gatefail closed- admit
- caller=maya.chen · version active · target allowed · refs pinned · authorized · idempotency claimed · audit written · dispatched
- refuse
- caller=j.lee · no entitlement on entity · target absent from results
Recorded asexecution rowaudit record before dispatchidempotency key - 05
Pick a lane.
The App routes each target to the lane that fits. Direct for deterministic work with no model. Agent for adaptive work with tools, subagents, suspension, checkpoint, and resume. Workflow for durable, long-running graphs on Temporal. Batch to run one target across many entities. Event for schedules and webhooks with explicit continuation. The gate is common; execution semantics are not forced to be.
View detailslanes- Directdeterministic · no model
- Agentadaptive · tools · subagents · resume
- Workflowdurable graph on Temporal · fan-out
- Batchone target · many entities
- Eventschedule · webhook · NEW | JOIN | NONE
Recorded aslanenative run reference - 06
Fan out and publish back.
One workflow dispatches specialized agents per entity and per group, in parallel. Each pulls only what its job needs through the tools it was given: the agent passes the entity and the period, the tool holds the query. Each reads what siblings and prior runs published, and everything publishes back to the App as resources. Illustrative: one monthly run over nine operating companies, three groups, and one holding company produces 45 agent executions and 36 published references. Pyrana Capital is a synthetic portfolio.
View detailsworkflow · monthly_analysis · 2026-06fan-outholdco pyrana-capital ×1 groups ×3 each reads its opcos and the 2026-05 roll-up opcos ×9 revenue-analyst · materials-analyst · labor-analyst tools scoped to entity + period · the tool holds the query reads sibling outputs · prior run publish opco-analysis → group-rollup → holdco-summary totals 45 agent executions · 36 published references
NoteIllustrative. Pyrana Capital is a synthetic portfolio.Recorded aschild executionspublished referencestool calls with receipts - 07
Retrieve context with receipts.
Standing sets of Context Units preload before the first turn. Mid-run, the agent calls context search, pauses, retrieves, and resumes; chat uses the same path. On the engine side, a query agent plans the graph walk and repairs its own queries, and a learning agent scores what was retrieved and used. Every unit is accounted for per run: retrieved ⊇ injected ⊇ cited. A citation the model was never given is recorded separately.
View detailscortIQ · run accountingretrieved12injected6cited2cxu:1220a7ff…f843cxu:9b31e0d4…21aastanding set intercompany-rules preloaded · 1 mid-run context search · cited_unknown 0
Recorded asretrievedinjectedcitedcited_unknown - 08Built
Approve where policy says.
A tool approval policy over typed arguments decides whether a call needs a person. Above threshold, the invocation, its arguments, scope, and evidence freeze into a durable proposal the waiting agent cannot alter. Each named lane receives an obligation; reviewer eligibility is checked at decision time; the frozen call is revalidated before it dispatches once. A queued request is visibly different from a posted entry.
View detailsfrozen proposalintercompany lane- tool
- reconciliation.adjust · adjusting entry 184,200.00 USD · PMW ↔ MWM
- args hash
- sha256:9c41…e0b2
- policy
- { approval.intercompany.adjustment }@v4 · amount >= 100,000 USD
- lane
- intercompany-approvers · obligation open
- PMW approver
- can act · entitlement approve on PMW
- MWM approver
- cannot act · reads the request · no approve entitlement on PMW
- state
- queued · nothing posted · revalidate then dispatch once on approval
NoteIllustrative. Pyrana Capital is a synthetic portfolio.Recorded asfrozen proposalobligations and decisionsrevalidationdispatch once - 09
Versioned resources and the record.
Outputs publish as resources: versioned, immutable, attributed. v1 is published by an agent run; v3 is revised by the copilot on behalf of a person; every version names who produced it. Publishing against a stale version is refused, never overwritten. Pages read a resource at an exact version. Every call leaves one execution record: caller, App version, target, resource versions, authorization outcome, approvals, effects with receipts, and the context cited.
View detailsexecution recordexec_01J9Q4M7Z3 · completed · 6.2s- caller
- maya.chen (sso) → finance-close@v14 → agent:close-reviewer → tool:ledger.journal.post
- app version
- finance-close v14 · sha256:3f9a71c2…e08b
- authorization
- member · controller · entity:US-01 · period:2026-08
- resources
- close-narrative v1 (agent run) → v3 (copilot for maya.chen) · publish against v2 refused as stale
- policy
- { approval.journal.amount } → approval required
- approval
- controllers · j.alvarez · 2026-09-02T14:07:11Z
- effects
- erp.journal.create → JE-88213 · receipt sha256:b71d…
- context
- retrieved 12 ⊇ injected 6 ⊇ cited 2
Statusversioned resourcespublication, provenance, legal holdRecorded asresource versionattributionone execution record
+Architecture
Seven layers on identity, authorization, and audit.
The stack is built once and shared by every application: the harness, the orchestration layer, tools and tool sources, tool approval policies, durable storage, the context engine, and the surface layer. Under all of it: identity, authorization, audit. Tenant boundary, fine-grained access, one execution record per call.
- SurfacesApp shell · declared pages · copilot · personal pages
- The gateidentity · version · target · refs · authorization · idempotency · dispatch · outcome
- Harnessnative tool calling · planning · subagents · checkpoints · resume
- Orchestrationdurable workflows · fan-out · wait · retry · finish
- Tools and tool sourcesREST · ODBC · MCP · Databricks · Snowflake · Drive · OneDrive · extensions
- Tool approval policiesthresholds · frozen invocations · named lanes · revalidation
- Storage and contextversioned resources · artifacts · cortIQ Context Units
Authorization in layers, shared by people and agents
tenant, App membership, access profile, scope entitlement, approval lanes
Tenant isolation
row-level security in Postgres; unauthorized items absent from results
Page context handed to the agent
surface, entity, period, resource versions
Durable execution
Temporal workers, checkpoint and resume, separate worker pools
Human approval as policy
typed conditions, frozen invocations, named lanes, revalidation
Idempotent external effects
idempotency key claimed at the gate, effect receipts, reconciliation
Audit before execution
execution row and audit record in one transaction, before dispatch
Credentials the agent never sees
platform-held tool credentials, delegated tokens for extensions
Versioned, roll-backable configuration
immutable versions, one active pointer, activation audited
Versioned, attributed resources
stale publish refused, pages read exact versions
?Questions
Frequently asked
Is the gate a gateway in front of the App or part of it?
What happens during a migration from an older authorization path?
How do child calls stay inside their parent's authority?
What is a personal page?
Which of these steps are live today?
One process, nine steps, one record.
A demo runs a client process from a door to the execution record, on the client's systems.