All systems operational--:--:-- UTC

Sense, reason, act: the loop behind ConsciousLab

Why we built one control surface for agents, machines, money and markets instead of five dashboards.

Mira Okafor

Co-founder, CEO

Published
Reading time
5 min read

In 2021 Jonas and I spent a week in a distribution centre outside Rotterdam watching 140 autonomous mobile robots move pallets. The robots were good. The control room was not. There were seven screens on the wall: a fleet manager from the robot vendor, a warehouse management system, a maintenance ticketing tool, a spreadsheet of battery swaps, a Grafana board someone had built on a weekend, the ERP, and a browser tab with the bank portal for paying the parts supplier.

When a drive motor on one robot started running hot, an operator noticed it on the Grafana board, opened a ticket in the maintenance tool, asked a colleague to check the parts budget in the ERP, and emailed finance to pay the supplier for a new motor. Four people, five systems, two days. Nobody did anything wrong. The systems simply did not share a record of what was happening.

That week is the reason ConsciousLab exists.

Every autonomous system runs the same loop

Strip away the domain and every system that acts on its own does three things.

It senses. A robot reads its motor temperature. An agent reads a support ticket. A trading model reads the order book. A payments system receives a webhook that an invoice was paid.

It reasons. Given what it sensed and what it knows about the current state of the world, it decides what to do. Sometimes that is a rule (pause above 60 °C). Sometimes it is a model (this ticket describes a damaged pallet and the customer is owed a refund). Sometimes it is a person.

It acts. It pauses the robot, issues the refund, places the order, sends the invoice reminder. And then the action itself becomes something to sense: did the refund settle, did the order fill, did the temperature come down?

The industry has built excellent tools for each of those steps in each of those domains. What it has not built is a way to see the loop as a whole. That is the gap we set out to close.

One record of what happened

The core of ConsciousLab is not a dashboard. It is an event log. Every module writes to it and reads from it: a telemetry sample from a robot, a step in an agent run, a posting in the ledger, a fill on an order. Each event carries the same envelope: an entity it is about, an actor that caused it, a timestamp, and typed data.

That sounds like plumbing, and it is. But it changes what questions you can ask. When AMR-0398 runs hot, the threshold breach is an event. The agent that reads it and opens a work order writes its reasoning as events. The purchase order it raises posts to the ledger as events. The motor replacement shows up in telemetry as a temperature that drops back to 46 °C. One query, across four modules, tells you how long the whole loop took and what it cost.

In Rotterdam that loop now closes in under four hours, most of which is the courier.

Why one surface, not five products

We are often asked why we did not build five separate products and integrate them. We tried. In 2022 the Robotics module and an early version of Payments were separate deployments with a sync between them. The sync was the most fragile thing we owned. Every incident review ended with the same finding: the two systems disagreed about what had happened, and nobody could say which one was right.

So we made a rule that still holds. Modules do not sync. They share one event store, one permission model and one audit log. A role that can approve refunds up to €250 has that permission whether the refund was proposed by a person in the console, an agent in a run, or a script calling the API. An auditor reading the log sees one sequence of events, not five.

Humans hold the switch

The other rule we hold is that autonomy is granted per action, not per product. An agent can be allowed to look up any order but only to issue refunds under a threshold. A robot can be allowed to reroute itself but not to accept new firmware without a staged rollout. A trading strategy can be allowed to place paper orders freely and live orders only within a daily loss limit.

Those limits are policies, and policies are data you can read, version and audit. When a policy pauses an action, the person approving it sees the full trace: what was sensed, how the decision was reached, and exactly what will change if they click Approve. The emergency stop on a robot is never behind a policy. Some switches should always be one press away.

What comes next

Today ConsciousLab runs 2,418 robots across 31 sites, around 184,000 agent runs a day, and routes 1.28 million orders daily. Those numbers matter less to us than a smaller one: the median time from a sensed problem to a resolved action, across every customer, is down 71% since this time last year.

The next year is about making the loop easier to trust. Replaying any recorded trace against a new model before you promote it. Letting finance set policies in plain language that compile to the same rules engineers write. Bringing the trading module's pre-trade risk checks, which run in under a millisecond, to every other kind of action.

The control room in Rotterdam has two screens now. We are working on one.