For energy-automation developers

The flight recorder for dispatch algorithms.

Every autonomous decision your BESS optimizer, plant controller, or alarm-triage model makes — captured with its inputs, replayable and defensible when the market operator or your asset owner asks why.

Upload a trace file

MIT-licensed CLI · runs locally · --push sends results to your private inbox

Scroll to follow a broken run ↓

Bring the decision logs you already have

OpenTelemetryLangfuseLangSmithOpenAI

Start with a CSV or JSON decision log — no SDK or OpenTelemetry required. These formats are also accepted.

How it works

Three steps from decision log to private inbox.

01

Export your decision log

Bring the CSV or JSON your optimizer already writes: timestamp, inputs, and the bid or dispatch action it chose.

02

npx lieva import

Lieva normalizes and categorizes the run on your machine. Your dispatch data stays local and the timeline works offline.

03

Add --push for the inbox

Only when you choose, send the trace to your private inbox to share the decision record with your team.

The cost of missing decision evidence

The asset moved. Can you prove why?

Dispatch failures can stay invisible for months. Auditors, asset owners, and lenders need the inputs, action, and reason behind each autonomous decision.

Months

A firmware change silently changed dispatch behavior for months.

Grid-scale battery incident

Weekly

Flagged bids are examined, with rebids requiring a brief, verifiable and specific reason.

AEMO · AER rebid records

$5,720/MW

Lost to underperformance across US solar assets in 2024.

US solar underperformance

The silent failure

Telemetry healthy. Setpoint delivered. Dashboard green. And the dispatch logic still drifted.

The worst dispatch failures don't throw. A firmware or configuration change alters behavior, while the controller keeps producing valid actions and routine telemetry stays green.

Operations dashboards show what the asset did. A decision record preserves the inputs, action, and expected outcome you need to replay the interval and explain it in a postmortem or owner and lender report.

// Lieva records the decision behind the healthy telemetry.

bess-dispatch · status: healthy
telemetrystreaming ✓
dispatch_ackaccepted ✓
asset_statusonline ✓
change_contextnot recorded ⚠
decision_reasonunavailable for audit ⚠

Pricing

Start free. Pay per production asset.

Plans scale by asset count, not seats. The MIT CLI runs locally, and nothing leaves your machine unless you use --push.

Free

$0/mo

Record decisions for one asset.

  • 1 asset
  • 14-day retention
  • Full import + categorize
  • No card required

Per-asset

Start here
$149/asset/mo

Replay and diff one production asset.

  • 1 asset
  • Replay + diff
  • 13-month retention

Fleet

$499/mo

Decision records for a five-asset fleet.

  • 5 assets
  • Audit-ready decision reports
  • AEMO rebid-record format
  • Owner/lender reliability report
  • Priority support

// Free needs no card. The CLI is MIT-licensed and runs locally.

Questions

Do I need an SDK or OpenTelemetry?

No. Export the decision log your optimizer already writes, then run npx lieva import. Nothing needs to wrap or change your control loop.

Which decision-log formats work?

Start with CSV or JSON containing a timestamp, inputs, and the bid or dispatch action. OpenTelemetry, Langfuse, LangSmith, and OpenAI trace exports are also accepted.

Is the CLI open source?

Yes — the lieva CLI and the RepairSpec format are MIT-licensed. The hosted inbox is the paid product.

What does Lieva do today?

Lieva imports a dispatch run, normalizes its steps into a timeline, categorizes the run, and surfaces the broken step. Add --push only when you want the record in your private inbox.

Where does my dispatch data go?

The CLI and timeline run on your machine, so trading-sensitive inputs and actions stay local. Nothing leaves unless you add --push to send the trace to your private inbox.