Platform architecture

An Agentic Business Platform

Salesforce, NetSuite and HubSpot were built for humans to enter and read data. Their AI features are bolt-ons. We build the modules, the agents and the command center as one product, agent-first — humans supervise.

The execution loop

Every agent run is a closed loop. Context assembles from git, organizational memory and a semantic layer over your data sources. The agent reasons, calls typed tools, and renders widgets to a chat where humans supervise — approving, rejecting, editing, gating every outcome before it commits. Outcomes — state, learnings, artifacts, third-party actions, role refinements — feed the next cycle's context.

The agent execution loop A closed-loop architecture across four zones. Zone 1 (Context): agent definitions, priorities, squad memory, and the semantic layer over your data sources all load into every run. Zone 2 (Agent Execution Cycle): assemble context, reason, call typed tools, render widget. Zone 3 (Human in the Loop): the Central Command where humans chat with the agent, approve / reject / edit, escalate, and audit — gating every outcome before it commits. Zone 4 (Outcomes): internal memory side-effects (state, learnings, role refinement) and external work product (data writes, artifacts, third-party actions). A closing-loop arrow on the right margin feeds outcomes back into context for the next run. CONTEXT — git · organizational memory · data — assembled per run Agent definitions .agents/squads/<squad>/* role · mission · tools · permissions Priorities · directives goals.md · directives.md founder + cofounder set direction Squad memory state · feedback · learnings accumulates across runs SEMANTIC LAYER & DATA SOURCES typed views · scoped tools — over your DB · ERP · CRM · external SaaS loaded per run AGENT EXECUTION CYCLE — per run, one role at a time 1 assemble context role + memory + data state 2 reason · plan decide next typed action 3 call typed tool scoped, schema-checked 4 render widget e.g. invoice_table_v0 renders to chat · awaits approval HUMAN IN THE LOOP — the Central Command · gates every outcome before it commits Widgets render in chat. Humans supervise. chat redirect · clarify approve · reject · edit gate each tool call escalate route to operator audit trail everything reviewable chat feedback → re-plan once approved → committed OUTCOMES — what every run leaves behind INTERNAL · MEMORY EXTERNAL · WORK PRODUCT Outcome → state state.md (rotated, max 5) success · escalated · failed Learning → git commit cross-squad learnings durable, reviewable, replayable PR → refine role edit the agent definition product iteration is a git diff Data writes invoice paid · lead created rows changed this run · audit trail Artifacts PDFs · reports · docs · images files the agent produced 3rd-party actions Slack · email · GitHub · calendar messages sent · PRs opened · invites next cycle starts richer

Most agent frameworks ship open-ended chains. Ours closes the loop — memory compounds run over run, and product iteration is a PR to a role definition, not a code change.

Native business schemas, or your existing SaaS via MCP

Agents work the same way whether the data lives in our shared database or in the tools you already use. Native modules give you a single-tenant schema, lightweight and built for agent traversal. MCP connectors expose your existing SaaS to agents as the same typed-tool API — no migration required. Mix both.

Native business schemas

in our database

Built-in modules in your single-tenant database. Agents read and write directly through typed views — no integration layer, no ETL.

Modules
erp facturas · AR/AP · cash · bank reconciliation · periods live
crm leads · pipeline · conversations · contacts wip
operations deadlines · compliance · recurring filings · tasks planned

Existing SaaS via MCP

zero migration

Connect what you already use through Model Context Protocol servers. Agents see Salesforce, NetSuite, Stripe and the rest as the same typed-tool API as native modules.

Examples
salesforcehubspotnetsuitequickbooksstripegmailslacknotiondrivegithublinearasana + any MCP server

Widgets in chat

The Central Command has one UI primitive: a versioned widget the agent emits as a tool call. Data fetch and render are separate, so the agent's reasoning stays visible — it chose what to render — and the same data tool can feed text replies, multiple widgets, or a subagent.

1 Data tool

The agent calls a typed data tool, e.g. erp.list_overdue_facturas(days_overdue: 30), and gets back a clean dict of rows.

2 Render tool

The agent emits a tool_use block for a widget — e.g. invoice_table_v0 — with those rows as input. The frontend has a React component per widget name and renders it inline in chat.

Examples rendered in chat

A widget is a React component the agent invokes by tool name. Here's what four of them look like rendered inline.

invoice_table_v0 shipped
Overdue invoices · 3
Folio Party Amount Days
4523 ACME Mining SpA $850.000 45
4711 Andes Logistics $1.240.000 38
4801 Norte Trading $230.000 31
approval_card_v0 next

Send payment reminder?

to ACME Mining SpA · [email protected]
re invoice #4523 · $850K · 45d overdue
send tomorrow at 09:00 AM
ask_user_input_v0 next

Which forecast model for next quarter?

Conservative — assume late payments
Baseline — historical averages
Optimistic — committed pipeline
or type your own approach…
cash_position_chart_v0 planned

Cash position

30d · actual + projected
$4.2M +$320K vs. last month
actual projection

Every widget is suffixed _v0, _v1, and so on. When a widget's input schema changes, we add a new version — we never edit the old one. Old conversations keep working. New widgets are additive.

Where it runs

This is on-prem, local-first agentic enterprise software. Not multi-tenant SaaS. Customers deploy the stack into their own environment — their Mac, their server, their cloud. Whoever runs the deployment owns the data and the keys.

When customers want hosted-by-us, we run a dedicated per-customer stack. There is no shared infrastructure across customers, no shared schema, no row-level multi-tenancy. A breach of customer A has zero reach into customer B.

See it on a live module

30-minute walkthrough on a real deployment — agents working a real ERP, widgets rendering in chat, the audit log.

Request a Demo