Orkestera
Your team uses several agents. You still need one place to understand the work.
Agents arrived in most engineering orgs from the bottom up, a seat at a time. Each one came with its own admin panel, its own spend limit and its own idea of what a log line is. The work they do is real. What is missing is the part that comes afterwards.
Each tool logs to itself, in its own shape, behind its own login. Reconstructing what changed in a repository last Tuesday, and on whose authority, means four exports and a spreadsheet. The evidence exists; it was never assembled.
Spend lands on a monthly platform invoice, not against the work that caused it. By the time the number is visible the month is over, and no one can say which task, team or model is responsible for the shape of the curve.
A model that worked well last quarter may no longer be your best choice. Comparing quality and cost is harder when each tool keeps its own evidence.
A tracing tool sees model calls but not authorization. A governance platform sees policy but not execution. Neither runs the work, so both depend on the agent reporting itself accurately.
The control plane for agent-built software.
Follow work, client requests and usage records through the services that handle them.
The whole system, in motion
Illustrative request and record flow. Motion shows source-backed relationships, not live traffic.
The complete system is arranged vertically for your screen. Expand the relationship tables below for details.
How the platform fits together
Platform dispatches work through Runner and the inference proxy. Core supplies configuration, Watch receives progress, and Analytics serves retained history.
- Platform → Runner / GraphAgentDispatch a governed run
- Runner / GraphAgent → LLMProxyRoute GraphAgent inference
- LLMProxy → Configured model providerForward to configured provider
Explore 8 connections and their source evidence
PlatformAnalytics / DuckDBSpend query
- Data
- Spend history
- Boundary
- mesh → mesh
- Authorization
- aud=analytics; analytics:read; org from verified token
- Availability
- Implemented wiring; deployment configuration required
Source: platform/lib/platform/spend/client.ex:35 · analytics/internal/query/handler.go:23 · analytics/internal/query/handler.go:96
AuthAnalytics / DuckDBOrg purge
- Data
- Org copy deletion
- Boundary
- mesh → mesh
- Authorization
- aud=analytics; analytics:purge; org from verified token
- Availability
- Implemented wiring; deployment configuration required
Source: auth/lib/auth/analytics_purge/client.ex:33 · analytics/internal/purge/handler.go:18 · analytics/internal/purge/handler.go:54
Analytics / DuckDBAuthCheck org Analytics entitlement
- Data
- Org entitlement decision
- Boundary
- mesh → mesh
- Authorization
- aud=auth; internal:entitlements
- Availability
- Implemented wiring; deployment configuration required
Source: analytics/internal/entitlement/entitlement.go:118 · analytics/internal/entitlement/entitlement.go:159
PlatformRunner / GraphAgentDispatch a governed run
- Data
- Task and workflow run
- Boundary
- mesh → mesh
- Authorization
- aud=runner; runs:write
- Availability
- Implemented wiring; deployment configuration required
Source: platform/lib/platform/runner_client.ex:37 · platform/lib/platform/runner_client.ex:18 · platform/lib/platform/runner_client.ex:141
Runner / GraphAgentLLMProxyRoute GraphAgent inference
- Data
- GraphAgent model requests
- Boundary
- run sandbox → mesh
- Authorization
- Proxy credential / run binding
- Availability
- Implemented wiring; deployment configuration required
Source: runner/runner/runner.py:440 · runner/runner/runner.py:737 · runner/runner/runner.py:548
LLMProxyConfigured model providerForward to configured provider
- Data
- Model requests and responses
- Boundary
- mesh → provider
- Authorization
- Provider credential; sanitized outbound headers
- Availability
- Implemented wiring; deployment configuration required
Source: llmproxy/internal/fallback/fallback.go:1211 · llmproxy/internal/fallback/fallback.go:1218 · llmproxy/internal/fallback/fallback.go:1228
PlatformCoreProvider configuration
- Data
- Scoped service request
- Boundary
- mesh → mesh
- Authorization
- internal:providers
- Availability
- Implemented source; deployment configuration required
PlatformWatchProgress event reporting
- Data
- Scoped service request
- Boundary
- mesh → mesh
- Authorization
- events:write
- Availability
- Implemented source; deployment configuration required
Connect a client. Keep its tools.
Client-side tools stay with the client; provider-hosted tools run upstream. Inference, reported usage and client telemetry are distinct paths.
- External clients → Client EdgeExport client observations
- External clients → Client EdgeNative inference and tools
- External clients → Client EdgeReport externally purchased usage
- Client Edge → LLMProxyReplace auth and attribute from verified claims
- LLMProxy → Configured model providerForward to configured provider
Explore 15 connections and their source evidence
External clientsClient EdgeExport client observations
- Data
- OTLP logs / metrics; no inference authority
- Boundary
- public → verified ingress
- Authorization
- Telemetry-purpose credential; watch/client:ingest; observed identity
- Availability
- Implemented wiring; deployment configuration required
Source: client_edge/internal/edge/telemetry.go:67 · client_edge/internal/edge/telemetry.go:85 · client_edge/internal/edge/telemetry.go:98 · client_edge/internal/edge/telemetry.go:104
Client EdgeAuthExchange a telemetry credential
- Data
- Purpose-bound short-lived Watch token
- Boundary
- ingress → identity
- Authorization
- Edge service authentication; immutable purpose and current client grants
- Availability
- Implemented wiring; deployment configuration required
Source: client_edge/main.go:100 · client_edge/internal/edge/ingest.go:205 · client_edge/internal/edge/ingest.go:213 · auth/lib/auth/ingest_credential.ex:414
Client EdgeWatchForward verified client telemetry
- Data
- Fixed OTLP upstream; client identity headers discarded
- Boundary
- ingress → Watch
- Authorization
- Exchanged client token: aud=watch; client:ingest
- Availability
- Implemented wiring; deployment configuration required
Source: client_edge/main.go:102 · client_edge/internal/edge/telemetry.go:141 · client_edge/internal/edge/telemetry.go:149 · client_edge/internal/edge/telemetry.go:153
External clientsClient EdgeNative inference and tools
- Data
- Native requests, tool payloads and streamed responses
- Boundary
- public → verified ingress
- Authorization
- aud=client_edge; inference:write; org/client claims
- Availability
- Implemented wiring; deployment configuration required
Source: client_edge/internal/edge/edge.go:238 · client_edge/internal/edge/edge.go:25 · client_edge/internal/edge/edge.go:26 · infra/cfn/alb.yml:305 · infra/cfn/alb.yml:318 · client_edge/internal/edge/edge.go:163
External clientsClient EdgeReport externally purchased usage
- Data
- Reported token counts; not an inference request
- Boundary
- public → verified ingress
- Authorization
- aud=client_edge; inference:write; org/client claims
- Availability
- Implemented wiring; deployment configuration required
Source: client_edge/internal/edge/edge.go:238 · client_edge/internal/edge/edge.go:25 · client_edge/internal/edge/edge.go:26 · infra/cfn/alb.yml:305 · infra/cfn/alb.yml:318 · client_edge/internal/edge/edge.go:169 · client_edge/internal/edge/edge.go:170
Client EdgeLLMProxyReplace auth and attribute from verified claims
- Data
- Native inference / reported usage
- Boundary
- ingress → mesh
- Authorization
- aud=llmproxy; internal:inference; client attribution headers rebuilt
- Availability
- Implemented wiring; deployment configuration required
Source: client_edge/internal/edge/tokens.go:39 · client_edge/internal/edge/tokens.go:40 · client_edge/internal/edge/edge.go:136 · client_edge/internal/edge/edge.go:142 · llmproxy/internal/proxy/edge.go:62
LLMProxyInference recordsPersist native completion
- Data
- Served completion evidence
- Boundary
- service → producer store
- Authorization
- Producer-owned storage
- Availability
- Implemented wiring; deployment configuration required
LLMProxyInference recordsPersist reported usage separately
- Data
- usage_source=reported; debited=false
- Boundary
- service → producer store
- Authorization
- Verified client attribution
- Availability
- Implemented wiring; deployment configuration required
Source: llmproxy/internal/proxy/edge.go:152 · llmproxy/internal/proxy/edge.go:156 · llmproxy/internal/proxy/edge.go:165
LLMProxyConfigured model providerForward to configured provider
- Data
- Model requests and responses
- Boundary
- mesh → provider
- Authorization
- Provider credential; sanitized outbound headers
- Availability
- Implemented wiring; deployment configuration required
Source: llmproxy/internal/fallback/fallback.go:1211 · llmproxy/internal/fallback/fallback.go:1218 · llmproxy/internal/fallback/fallback.go:1228
External clientsAuthDevice sign-in and token renewal
- Data
- Published live client contract
- Boundary
- public client API → service
- Authorization
- OAuth grant-specific authentication
- Availability
- Published live contract; deployment configuration required
POST /oauth/tokenPOST /oauth/device_authorization
Source: contracts/client/v1/openapi.json:142 · contracts/client/v1/openapi.json:225
External clientsWatchRead client evidence
- Data
- Published live client contract
- Boundary
- public client API → service
- Authorization
- aud=watch; watch:read
- Availability
- Published live contract; deployment configuration required
GET /client/v1/runsGET /client/v1/runs/{run_id}GET /client/v1/analysisGET /api/inference
Source: contracts/client/v1/openapi.json:1226 · contracts/client/v1/openapi.json:1336 · contracts/client/v1/openapi.json:1437 · contracts/client/v1/openapi.json:1543
External clientsCoreNegotiate client session
- Data
- Published live client contract
- Boundary
- public client API → service
- Authorization
- aud=core; client:session
- Availability
- Published live contract; deployment configuration required
POST /client/v1/sessions
External clientsPlatformTask read
- Data
- Published live client contract
- Boundary
- public client API → service
- Authorization
- aud=platform; tasks:read
- Availability
- Published live contract; deployment configuration required
GET /api/tasksGET /api/tasks/{task_id}
Source: contracts/client/v1/openapi.json:1605 · contracts/client/v1/openapi.json:1858
External clientsPlatformTask write
- Data
- Published live client contract
- Boundary
- public client API → service
- Authorization
- aud=platform; tasks:write
- Availability
- Published live contract; deployment configuration required
POST /api/tasksDELETE /api/tasks/{task_id}POST /api/tasks/{task_id}/startPOST /api/tasks/{task_id}/haltPOST /api/tasks/{task_id}/resume
Source: contracts/client/v1/openapi.json:1605 · contracts/client/v1/openapi.json:1858 · contracts/client/v1/openapi.json:2050 · contracts/client/v1/openapi.json:2169 · contracts/client/v1/openapi.json:2282
External clientsWatchSend client events / OTLP
- Data
- Published live client contract
- Boundary
- public client API → service
- Authorization
- aud=watch; client:ingest
- Availability
- Published live contract; deployment configuration required
POST /client/v1/eventsPOST /client/v1/otlp/v1/logsPOST /client/v1/otlp/v1/metrics
Source: contracts/client/v1/openapi.json:867 · contracts/client/v1/openapi.json:956 · contracts/client/v1/openapi.json:1091
Follow records into Analytics
Producers keep their records. Analytics turns copies into organization-partitioned history for named queries and exports.
- Inference records → Analytics raw NDJSONCopy completed inference usage
- Analytics raw NDJSON → Analytics / DuckDBRead raw batches
- Analytics / DuckDB → Analytics curated ParquetCompact and deduplicate
- Analytics curated Parquet → Analytics / DuckDBRead curated history
Explore 12 connections and their source evidence
WatchAnalytics raw NDJSONCopy terminal task metadata
- Data
- task_trace; bounded metadata, no prompt or tool output
- Boundary
- producer service → object storage
- Authorization
- Org Analytics entitlement; configured storage
- Availability
- Optional asynchronous copy; 30-day curated retention
Source: watch/lib/watch/event_ingestor.ex:59 · watch/lib/watch/task_history.ex:24 · watch/lib/watch/task_history.ex:44 · watch/lib/watch/task_history.ex:59 · watch/lib/watch/task_history.ex:62
WatchAnalytics / DuckDBRead historical task metadata
- Data
- Latest org/task trace when live events are absent
- Boundary
- Watch → mesh query
- Authorization
- aud=analytics; analytics:read; verified org
- Availability
- Implemented wiring; deployment configuration required
Source: watch/lib/watch/task_history.ex:256 · watch/lib/watch/task_history.ex:258 · analytics/internal/query/catalog.go:241 · watch/lib/watch_web/live/task_timeline_live.ex:46
Inference recordsAnalytics raw NDJSONCopy completed inference usage
- Data
- inference_usage; orkestera / reported preserved
- Boundary
- producer store → object storage
- Authorization
- Producer storage IAM; org Analytics entitlement
- Availability
- Optional asynchronous copy; entitlement and producer configuration required
Source: llmproxy/internal/proxy/proxy.go:1102 · llmproxy/internal/analytics/row.go:248 · llmproxy/internal/analytics/row.go:122 · llmproxy/internal/analytics/sink.go:382 · llmproxy/internal/analytics/sink.go:410
Producer audit storesAnalytics raw NDJSONCopy acknowledged audit records
- Data
- audit dataset; producer store remains authoritative
- Boundary
- producer store → object storage
- Authorization
- Producer storage IAM; org Analytics entitlement
- Availability
- Optional asynchronous copy; entitlement and producer configuration required
Source: orkestera_events/lib/orkestera_events/audit/store.ex:62 · orkestera_events/lib/orkestera_events/audit/analytics.ex:281 · orkestera_events/lib/orkestera_events/audit/analytics.ex:135 · orkestera_events/lib/orkestera_events/audit/analytics/copier.ex:349
Analytics raw NDJSONAnalytics / DuckDBRead raw batches
- Data
- Org / dataset / date partitions
- Boundary
- object storage → mesh worker
- Authorization
- Service storage IAM
- Availability
- Implemented wiring; deployment configuration required
Analytics / DuckDBAnalytics curated ParquetCompact and deduplicate
- Data
- Partitioned Parquet
- Boundary
- mesh worker → object storage
- Authorization
- Service storage IAM
- Availability
- Implemented wiring; deployment configuration required
Source: analytics/internal/compactor/compactor.go:91 · analytics/internal/compactor/compactor.go:553
Analytics curated ParquetAnalytics / DuckDBRead curated history
- Data
- Named queries over org-scoped partitions
- Boundary
- object storage → mesh query
- Authorization
- Verified org; Analytics entitlement
- Availability
- Implemented wiring; deployment configuration required
Source: analytics/internal/query/engine.go:83 · analytics/internal/query/handler.go:117
PlatformAnalytics / DuckDBSpend query
- Data
- Spend history
- Boundary
- mesh → mesh
- Authorization
- aud=analytics; analytics:read; org from verified token
- Availability
- Implemented wiring; deployment configuration required
Source: platform/lib/platform/spend/client.ex:35 · analytics/internal/query/handler.go:23 · analytics/internal/query/handler.go:96
CoreAnalytics / DuckDBAudit export
- Data
- Audit export request
- Boundary
- mesh → mesh
- Authorization
- aud=analytics; analytics:export; org from verified token
- Availability
- Implemented wiring; deployment configuration required
Source: core/lib/core/audit_export.ex:122 · analytics/internal/export/handler.go:23 · analytics/internal/export/handler.go:90
AuthAnalytics / DuckDBOrg purge
- Data
- Org copy deletion
- Boundary
- mesh → mesh
- Authorization
- aud=analytics; analytics:purge; org from verified token
- Availability
- Implemented wiring; deployment configuration required
Source: auth/lib/auth/analytics_purge/client.ex:33 · analytics/internal/purge/handler.go:18 · analytics/internal/purge/handler.go:54
Analytics / DuckDBAudit export objectsWrite audit export and sign download
- Data
- Audit ZIP: CSV / Parquet and verification material
- Boundary
- mesh → object storage
- Authorization
- Service storage IAM; signed download
- Availability
- Implemented wiring; deployment configuration required
Source: analytics/internal/export/export.go:255 · analytics/internal/export/export.go:163 · analytics/internal/export/export.go:261
Analytics / DuckDBAuthCheck org Analytics entitlement
- Data
- Org entitlement decision
- Boundary
- mesh → mesh
- Authorization
- aud=auth; internal:entitlements
- Availability
- Implemented wiring; deployment configuration required
Source: analytics/internal/entitlement/entitlement.go:118 · analytics/internal/entitlement/entitlement.go:159
Generated from committed source 2daba84ff582. dev: Analytics configured; int-prod: Analytics configured; staging: Analytics configured. Runtime availability has not been observed by this generator.
Authorization
- Service credential life300s
- Authorizationper capability
- Credential audienceone service
- Tenant boundarytoken claim
- Repo access per run1 repo
Evidence
- Action logappend-only
- Audit record400d
- Config audit90d
- Run artifacts30d
- Live telemetry24h
- Secrets in audit rowshash only
- Operator actionsrecorded to Core
Measurement
- Scrape intervalconfigurable
- Quality aggregation5 min
- Evidence per decisionminimum sample
- Demotion marginquality policy
- Model promotionhuman only
- Run budget ceilingsper-org
Containment
- Failure modefail-closed
- Plugin capabilitiesper-org gate
- Shell commandsarg allow-list
- Git remote hostsallow-listed
- Artifact accesswrite xor read
- Operator stopone control
We generate these flow views from service wiring, authentication gates, storage rules and target configuration. The checker reports what it can resolve from source and calls out omissions. It does not probe a running deployment or certify every authorization path.
- Last checked25 Sep 2026 · source + configuration
From a goal to work you can review.
Goal
Describe the work in Ork Chat. Add images when your model supports vision; optional dictation makes an editable draft. The Executive creates a task and breaks it into issues, saved before execution starts.
Dispatch
Platform sends the task to Runner with a scoped credential and follows it through execution.
Admit
Runner verifies the caller and reads your organization's capability policy. If either check fails, the run is refused. Capacity limits and time limits keep admitted work bounded.
Execute
A whole-graph agent runs the node graph in an isolated workspace, checkpointing every node to a durable journal it can resume from. Command and git-remote allow-lists are baked in before it starts. When an iteration ceiling is configured, its allowance spans fan-out, expansion and retries.
Observe
Watch and Platform receive progress events. Inference records carry model and usage details. Ork Chat groups task progress beside the conversation, with optional browser read aloud for replies. Delivery is best effort, with dropped events counted.
Deliver
Review the saved diff, evaluations and artifacts. When pull-request creation is enabled, successful delivery opens a PR on a separate branch.
Follow the work. Know what the evidence can tell you.
When an agent finishes, you need to know what changed and how it got there. When it fails, you need enough context to decide what to do next. Orkestera brings task results, model usage and audit records together, while keeping gaps in telemetry visible.
Recorded model calls include attribution, model, latency and a bounded prompt/response preview. Configuration audits keep hashes of before and after, and operator actions have their own trail. Use the task results and audit trail to investigate what happened, with secrets kept out of the change record.
- Inference recordappend-only
- Config change trailhash only · 90d
- Node-level run journaldurable
- Operator action trailrecorded
Recorded usage is grouped by model and task. External inference also carries client and user attribution. Cost estimates depend on the available token counts and rate card; missing prices or incomplete reports stay visible. Model evaluations give you another way to compare routes beyond their advertised price.
- Cost attributionper task
- Quality evidenceper evaluated model
- Route demotionevidence threshold
- Run budget ceilingsper-org
The Executive is a supervised, cluster-wide process. Runner launches one GraphAgent process for each run, and the graph writes a durable journal. The saved checkpoints give a restarted run a place to resume and give you a record to inspect.
- Agent isolationper process
- Singleton across nodesauto-relocated
- Interrupted runresumable
Evidence is emitted asynchronously under a bounded supervisor: if the observer is slow or down, events are shed and counted rather than queued into the critical path. Agents keep working; the drop is itself a measured signal. Configured health and metrics checks help operators spot missing data. A quiet chart still needs context: it can mean idle work, missing reports or an unavailable source.
- Event emissionnon-blocking
- Shed eventscounted
- Service scrapeconfigured interval
Set limits on the work. Use evidence to choose your models.
Configure iteration and time limits for governed runs. Client Edge applies the organization’s monthly inference budget policy. Usage reported from another provider is shown separately and does not debit that budget. Token-priced estimates do not replace a provider invoice.
Run controls
- Iterationsengine entrypoint
- Wall clockhost watchdog
- Capabilitiespolicy admission
- Scopeone run
- Inference budgetorg policy
Attribution
- Tokens and latencyper call
- Rolled upper model · per task
- Cost lands againstthe work
- Fallback behaviourcaptured
The quality floor
- Aggregatedevery 5 min
- Evidence per decisionminimum sample
- Demotion marginquality policy
- Retirementautomatic
- Promotionhuman only
Your models
- Providers15 in the registry
- Keyspersonal · org · deployment
- Endpointsvendor · LAN · on-prem
- Plain HTTPseparate opt-in
Configured iteration ceilings share one allowance across fan-out, retries and replanning. The host enforces a time limit, while routed inference has its own budget policy. Quality policy can remove an underperforming model from a route after enough evaluated work; promotion remains a human decision.
What changed this month? What did the work cost?
Watch helps you follow recent activity. When enabled, Analytics retains bounded task metadata for 30 days and a longer history of usage and audits. The original service stores remain the record.
In Platform’s Spend page, explore usage by day, user, workflow or role. The Analytics service also supports monthly and model breakdowns. Reported usage from external providers stays separate from inference bought through Orkestera. Missing prices are shown as missing, and priced views use the rate card.
Core’s audit export gives authorized administrators records to review and verify. Analytics compacts organization-scoped copies into Parquet and runs named, typed queries with DuckDB. Retention rules and lifecycle checks cover the copies; a purge is an explicit administrative action.
Analytics is implemented and requires the organization’s analytics entitlement. The checked-in development, staging and internal-production configurations enable the service. Your operator can confirm availability and access for your deployment.
Connect external clients through Client Edge and keep their local tools. Orkestera attributes routed inference and accepts client telemetry. Observed execution records what the client reports; it does not claim to enforce the client’s local shell or network policy. Read the client API guide →
Sign people in. Scope what clients can do.
Plane A Human · Browser
- GrantAuthorization Code + PKCE (S256)
- Tokenopaque · 900s + 30-day refresh
- VerifyRFC 7662 introspection
- Scopesrole-scoped session
Plane B Services & API clients
- GrantClient Credentials · Device Code
- Tokenasymmetric JWT · short-lived
- Verifyoffline against JWKS
- Scopesgranted per client and audience
In development, with the people who will run it.
We are looking for a few engineering teams to run Orkestera on their own infrastructure while it is still being shaped, and to have a say in what ships next. If that is you, leave a way to reach you.
Protected by Cloudflare Turnstile. We’ll only use your details to talk to you about Orkestera. No list, no drip, no spam.