Build with Praxis.
Everything you need to design business flows, provision tenants, and call the platform from your own code or your own agent. Conversational where you want it, typed and versioned underneath.
Overview
Praxis turns plain-language intent into a typed business-flow definition. From a single conversation it generates the data schema, validation rules, role-based access policies, the corresponding application views, and a test harness with sample data.
Underneath the conversation, everything is a versioned artifact. You can edit the definition directly, compare changes, roll back, and promote from a rehearsal copy to live — without losing the audit trail.
Intent in, tenant out. A business-flow definition compiles to entities, steps, forms, and permissions — all rendered into a live operation centre at your subdomain.
Quickstart
Create a workspace from the command line, or skip straight to the conversational onboarding. Authenticate with a tenant-administrator token, then publish a definition.
# install and authenticate npm i -g @praxis/cli praxis auth login --token $PRAXIS_TOKEN # scaffold from a sentence praxis init "claims intake with a fraud branch" # review, then publish to a tenant praxis publish --tenant sole --env live
The business-flow definition
A definition is a typed document: a trigger, a set of steps, the transitions between them, and the entities they touch. Praxis authors it for you, but it's plain to read and edit.
{
"name": "auto-claims-intake",
"trigger": { "on": "claim.filed", "channels": ["webhook", "whatsapp"] },
"steps": [
{ "id": "triage", "type": "ai.decision",
"route": { "by": "sensitivity", "max_cost": 0.02 } },
{ "id": "settle", "type": "action",
"when": "amount <= 5000", "do": "stripe.refund" },
{ "id": "escalate", "type": "human.gate",
"assign": "@senior", "sla_hours": 4 }
]
}What gets generated
- Entity schemas and field-level validation
- Role-based access policies per step and per field
- Forms for any step that collects input
- List and detail views for every output
- A test harness seeded with sample records
Multi-tenancy
Each tenant gets a physically isolated database. Tenancy is resolved from the request — a host header or a signed claim — at every boundary, so there is no code path that can read across tenants.
- Physical isolation: one database per tenant
- Per-tenant secret encryption at rest (
AES-256-GCM) - An audit log that is appended to and never edited, with a nightly cold archive
- Key-based authentication with salted, hashed storage
Pinning data to a region depends on multi-cluster routing and is not yet active — a single platform cluster today. Don't design around residency until we ship it.
Model routing
A local classifier decides, per step, whether to route to a hosted model, an open model, or your private endpoint — weighing cost, latency, and data sensitivity. You set the budget; Praxis stays inside it.
routing: classify: edge # on-device, $0 extract: small # fast, cheap reason: large # quality-critical pii: edge-only # never leaves your boundary max_cost_per_run: 0.05
The programmable interface
Every tenant exposes an interface over the same definitions the screens use. Authenticate with a token scoped to the tenant.
curl -X POST https://sole.praxis.app/v1/workflows/auto-claims-intake/trigger \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "claim": { "amount": 4200, "customer": "cus_91" } }'
Outbound hooks
Subscribe to run lifecycle events. Payloads are signed with HMAC-SHA256; verify the signature header before trusting a request.
run.started· a run beganstep.completed· a step finished, with its decision tracerun.escalated· a human gate was triggeredrun.completed· a terminal state was reached
The agent endpoint
Every tenant exposes a Model Context Protocol (2025-06-18) endpoint. Any agent that speaks it can call into the workspace as a tool — list entities, query business flows, read the stated intent, or suggest shared flows.
Tenant-administrator tokens scope an agent across all sessions; session-bound tokens scope it to a single conversation. Tokens rotate with reuse-attack detection, and administrators can revoke any session.
Praxis becomes the operations ledger external agents call into — not a competitor to them. Every agent action lands in the same audit trail as a human one.
{
"mcpServers": {
"praxis": {
"url": "https://sole.praxis.app/mcp",
"transport": "sse",
"auth": "bearer $PRAXIS_SESSION_TOKEN"
}
}
}