Findings where your team already looks
SARIF 2.1.0 for GitHub code scanning and most security dashboards, JUnit XML for CI test reports, and CSV for spreadsheets, ticketing and SIEM imports. Each finding keeps its line number in the source log.
Syntony / Agents and tools / Caesura
A free agent for robotics teams. Give it a robot's event log and your safety envelope, and it finds where the robot moved during an e-stop, kept going after a person said stop, went too fast near someone, entered a keep-out zone, acted on stale perception or obeyed a sign. It comes with free red team probes for simulation and fenced test cells.
Try it
The same engine you download, running in your browser. Nothing you paste leaves this page. The examples are fictional.
What it looks for
Each finding names the event, the robot and what a person should check. Repeated hits in one episode, such as a stream of speed readings, count once with a tally.
Free red teaming
Each probe is a short runbook: the setup, what good looks like, and how Caesura scores the run as pass, fail or inconclusive. Run them in simulation or a fenced test cell, never with a person as the target.
A red team designs tests around your robots, your models and your site: sensor spoofing, adversarial objects and markings, planner manipulation, fleet coordination and the people who work beside them. Then it checks that each fix holds.
node caesura.mjs probes # list them node caesura.mjs probe CP-01 --out cp-01 # runbook and the sign to print node caesura.mjs review run.jsonl --probe CP-01
Install
Version 1.1.0. Needs Node.js 18 or later and nothing else. The agent works in Claude Code; the engine works on its own anywhere, including in CI for simulation runs.
caesura.mjs ↓, a single readable JavaScript file with no dependencies.
node /path/to/caesura.mjs init
This writes .claude/agents/caesura.md. Add --global to install it for every project.
In Claude Code:
Use the caesura agent to review logs/amr-07.jsonl with our envelope.
node caesura.mjs review run.jsonl --envelope envelope.json node caesura.mjs review sim-run.jsonl --json --fail-on high
Gate simulation runs in CI: --fail-on high exits with code 2 when the robot leaves its envelope.
Logs and envelope
One event per line. Times are ISO strings or epoch seconds. Export from your fleet manager, your ROS bag tooling or your simulator in this shape.
action, speed in m/s, force in N, target as a zone name or {x, y}, via, confirmedBy, and the source instruction id.speed, force, position, zone.humans as [{distance, x, y}], or humanDistance. With x and y, people appear on the floor plan.by and any permit.source: wms or operator is trusted; camera_text, sign, web and email are not.body, region (such as hand or chest), kind (quasi-static or transient) and peak force in N.{
"maxSpeed": 1.5,
"humanZones": [
{ "within": 0.5, "maxSpeed": 0 },
{ "within": 2.0, "maxSpeed": 0.3 }
],
"maxForce": 140,
"keepOut": [
{ "name": "dock-door-3", "x1": 40, "y1": 0, "x2": 48, "y2": 6 }
],
"perceptionMaxAgeMs": 500,
"stopTimeMs": 500,
"linkLossStopMs": 1000,
"highRiskActions": ["cut", "weld", "lift"],
"ssm": {
"humanSpeed": 1.6, "reactionTimeMs": 80,
"stoppingTimeMs": 250, "intrusion": 0.1,
"sensorUncertainty": 0.04, "robotUncertainty": 0.01
},
"bodyRegions": true
}
With ssm set, Caesura works out the protective separation distance for speed and separation monitoring at each moment, Sp = Sh + Sr + Ss + C + Zd + Zr, and flags any time a person was closer than the robot needed at its speed (ISO/TS 15066, ISO 13855). With bodyRegions set to true, each contact is checked against the quasi-static limit for that body region, and twice that for transient contact; transient contact with the head is always flagged. Pass an object instead of true to use your own values per region.
The defaults are placeholders, not safe values. Set every limit from your risk assessment and the standards that apply to your robot and site, such as ISO 10218, ISO/TS 15066 or ANSI/A3 R15.08.
For operations and security teams
Caesura is built for the robotics and safety engineers who review fleet and simulation logs every day, and need findings that point to a clause.
SARIF 2.1.0 for GitHub code scanning and most security dashboards, JUnit XML for CI test reports, and CSV for spreadsheets, ticketing and SIEM imports. Each finding keeps its line number in the source log.
Each finding carries references to ISO 10218-1 and -2, ISO/TS 15066 (body-region force limits and speed and separation monitoring), ISO 13849-1, IEC 62061, ISO 13850, IEC 60204-1, ISO 13855, IEC 61496, ISO 14119, ANSI/A3 R15.08-1, OWASP and MITRE ATLAS.
Pass several files or a whole folder. You get one combined report and a summary table, and --fail-on turns any level of finding into a failed build.
JSONL or JSON events, and CSV with a header row from a historian, a fleet manager or ROS bag tooling. Dotted columns such as position.x become nested fields.
No network calls, no telemetry and no dependencies. It is one readable file your security team can review before it runs on an isolated host.
Fixed rules, not a model. The same log always gives the same findings, and every report carries a SHA-256 of its input so it can go in an evidence file. 100,000 events take under two seconds on a laptop.
# Every simulation run in a folder, gated in CI node caesura.mjs review sim-runs/ --envelope cell-4.json --format junit --out caesura.xml --fail-on high # A fleet export from a historian, as SARIF node caesura.mjs review amr-fleet-2026-11-08.csv --envelope site.json --format sarif --out caesura.sarif
Why the name
A caesura is the two short slashes in a score that mean stop. Not slow down, not soften: a complete break in the sound before the music goes on.
A robot needs the same discipline. When the e-stop is pressed, when a person says stop, when the link drops or someone steps too close, motion must end. Caesura checks the record for every place it did not.
It sits with the rest of our instruments: Fermata holds an action until a person says go, Rubato finds where an agent took liberties, and Continuo keeps infrastructure changes in time.
Before you rely on it
Caesura runs on your machine and makes no network calls. It reads only the files you give it, and writes only the agent file, probe kits and reports you ask for. It is licensed by Syntony under the Syntony Free Tools License: free to run, copy and modify within your organization, including for commercial work, but not to resell or redistribute.
We test robots, robot foundation models and the controls around them in the setting where they run, then check that each fix holds.