Clarm
Vessel ETA Tracking · live AIS · 6-step walkthrough
AIS feed
Workflow walkthrough · 6 steps

Real ship data, approved customer notifications, every 6 hours.

Atlas opens a live AIS session for Anushka's reefer fleet, compares each voyage's vessel-reported ETA against the booked ETA, and drafts a factual customer notification when a voyage shifts past 24 hours. Anushka reviews and approves before any draft lands in Outlook - nothing leaves the bank without her one-click sign-off.

Data: AISStream.io (live)
Cadence: every 6h, top of hour
Boundary: human-approved, source-cited
Step 01

Cron fires every 6 hours

Trigger

06:00 Europe/Berlin, Monday morning. Atlas's cron scheduler fires the vessel_eta_tracking workflow. Anushka's 5 in-flight reefer voyages get checked - without her touching Outlook, SAP, or vessel-tracker.com.

Trigger
cron: 0 */6 * * *
Every 6h, top of hour, Europe/Berlin
Action
maritime.vessel_positions
Open live AIS, collect positions for 5 MMSIs, 30s window
Output
Vessel rows + ETA deltas
Position, course, speed, reported ETA, delta vs booking
Step 02

Live AIS positions for the reefer fleet

AISStream.io · 5 vessels

One WebSocket session against AISStream.io, filtered by MMSI for Anushka's 5 contracted vessels. Each row carries a PositionReport (lat/lon, speed, course) and a ShipStaticData frame (destination, vessel-reported ETA). Source-receipted in the audit log.

Reefer fleet · live positions
Collected 2026-05-22T06:00:12Z · session 12.4s
Vessel BL Position Speed / course Destination
MV Cool Express
MMSI 211281000 · Hapag-Lloyd
DOLE-CR-2026-0142
36.73°N · 38.60°W
16.7 kn · 075°
HAMBURG, DE
Maersk Stratford
MMSI 219024580 · Maersk Line
DOLE-CR-2026-0143
33.71°N · 37.18°W
17.2 kn · 080°
HAMBURG, DE
Star Lysefjord
MMSI 257123450 · Star Reefers
DOLE-EC-2026-0089
29.45°N · 28.92°W
15.8 kn · 070°
ROTTERDAM, NL
Cool Eagle
MMSI 305987210 · Seatrade
DOLE-EC-2026-0090
21.18°N · 30.41°W
8.4 kn · 062°
ROTTERDAM, NL
Baltic Summer
MMSI 477234680 · Eastern Pacific
DOLE-CR-2026-0144
41.02°N · 41.85°W
18.1 kn · 085°
ALGECIRAS, ES
Source receipts · Atlas audit log
  • wss://stream.aisstream.io/v0/stream - session 06:00:12.218Z
  • 5 PositionReport frames · 5 ShipStaticData frames · 0 dropped
  • tool_tag=maritime_tracking · org_id=…dole · persona_id=vessel_eta_tracking
Step 03

ETA delta vs booking

transform.rule_filter

Each row's vessel-reported ETA gets compared against the booked expected_eta on the BL. One voyage out of five has slipped past the 24-hour rule. The other four continue silently - Anushka isn't pinged for clean runs.

5 voyages · 1 delay detected (>24h)
rule: row.eta_delta_hours > 24
Voyage Booked ETA Reported ETA Delta Status
MV Cool Express
DOLE-CR-2026-0142
Jun 02 14:00 UTC
Jun 02 18:30 UTC
+4.5h
on time
Maersk Stratford
DOLE-CR-2026-0143
Jun 04 08:00 UTC
Jun 04 11:15 UTC
+3.3h
on time
Star Lysefjord
DOLE-EC-2026-0089
Jun 05 16:00 UTC
Jun 05 22:42 UTC
+6.7h
on time
Cool Eagle
DOLE-EC-2026-0090
Jun 07 10:00 UTC
Jun 08 22:18 UTC
+36.3h
delay > 24h
Baltic Summer
DOLE-CR-2026-0144
Jun 09 12:00 UTC
Jun 09 09:50 UTC
−2.2h
on time
Step 04

Draft customer notification

llm.draft · non-claim boundary

Atlas drafts one short, factual notification for the delayed voyage. The non-claim boundary on the LLM step keeps the language tight - no new arrival date, no remediation promise, no compensation commitment.

Non-claim boundary enforced on this step:
  • State only what AIS shows; do not promise a new arrival date.
  • Do not commit to remediation actions or compensation on Dole's behalf.
  • Cite the AIS position + timestamp in the body, never invent.
Source receipts attached to this draft:
  • AIS position frame · 2026-05-22T06:00:12Z · MMSI 305987210
  • AIS static frame · 2026-05-22T06:00:14Z · ETA "06 08 22 18" decoded
  • booking_db.shipments.bl=DOLE-EC-2026-0090 · expected_eta 2026-06-07T10:00:00Z
Step 05

Anushka reviews and approves

gate.approval · operator-in-the-seat

The draft lands in Atlas's approval queue. Anushka sees the summary, the rationale, the source receipts, and one of three actions. Nothing leaves Outlook until she clicks Approve.

Approval queue · 1 pending action
deadline 06:00 UTC + 6h · category=customer_notification
DOLE-EC-2026-0090: Cool Eagle delayed +36.3h
proposed_by=vessel_eta_tracking · requested_at=06:00:14Z
pending review
Rationale. Vessel-reported ETA on AIS static frame at 06:00:14Z is Jun 08 22:18 UTC. Booking expected_eta is Jun 07 10:00 UTC. Net delta is +36.3 hours, past the 24-hour notification rule. Customer (Anushka, copied per BL contact) has not been notified in this voyage yet.
What happens on reject: Atlas captures Anushka's reason in operator_note. She can later one-click promote that reason into a permanent agent_lesson rule - the agent reads it before every future LLM step. No auto-promote; every rule is her conscious decision.
Step 06

Draft lands in Outlook · Anushka manual-sends

output.email.draft · MS Graph

Approved drafts write to Anushka's Outlook drafts folder via the MS Graph connector. Atlas never auto-sends - Outlook is the operator's control surface. Anushka can do a final review, attach an internal note, then send when she's ready.

Drafts (47) [email protected]
  • Inbox
  • Drafts
  • Sent Items
  • Junk Email
  • Archive
  • - Atlas
To: [email protected] · drafted 06:01 UTC · just now
Reefer ETA update - DOLE-EC-2026-0090
Cool Eagle (MMSI 305987210), carrying BL DOLE-EC-2026-0090 from Guayaquil to Rotterdam, is currently…
To: [email protected] · drafted yesterday
Re: Q3 shipping volume + lane locks
Thanks, Christoph. The Q3 lock will be 14 reefers across the…
To: [email protected] · drafted yesterday
Weekly margin review - week 21
Below 8% contribution margin on three SKUs this week; suggest…
What Atlas does NOT do.
  • Does not auto-send. Outlook is the only send button.
  • Does not write back to ERP / SAP. Read-only on the booking side.
  • Does not predict the new arrival date. Reports vessel's own AIS ETA only.
  • Does not maintain a vessel history database. Atlas reads live each cron tick.
Composed from Atlas primitives
trigger.cron maritime.vessel_positions transform.rule_filter llm.draft gate.approval output.email.draft
Every cell above is a reusable canvas node - same blocks the Allocations Control, Supply Chain Agent, and Norway Container Tracking workflows compose from. maritime.vessel_positions is the new primitive shipped for this demo; it falls back to deterministic synthetic positions when AISSTREAM_API_KEY is unset, so the operator UI works locally without secrets.

Want this for Anushka's Monday brief?

The agent ships as one YAML in the Dole pilot module. ~3 days of operator-side work: pick the contracted MMSIs, wire the customer email list, set the AISStream key, choose the cron cadence. Same shape covers port-disruption alerts, transshipment chases, and SLA dashboards next.