One incident, start to finish
Watch
Samples each camera on the box and checks the frame with a local vision model.
Alert
Posts the hazard, zone, cited rule and a fix to Slack. The annotated, face-blurred frame stays on the box.
Approve
A supervisor approves or flags a false alarm in the channel, and the decision is recorded.
Escalate
An alert with no decision after 10 minutes is raised again, and a daily digest posts at 5 pm.
Record
Every event keeps its evidence, decision, owner and timestamps on the box.
Numbers from logged runs, not estimates
The recorded run
Why it runs on the box
- Raw video stays on site.Cameras can show employees all day. Only a face-blurred evidence frame and the alert text reach Slack.
- The agent cannot send it out.The agent runs in an OpenShell sandbox that blocks outbound traffic by default. We tried an upload from inside it, and policy refused it.
- No cloud model, not even as a fallback.Every model call goes to vLLM on the same box: no per-call fees and no video uploads, however many cameras are attached.
- A person decides.Every alert waits for a human approval or a false-alarm flag, and both are recorded.
Raw video and model calls: never.
Built for the EHS manager, used by the shift supervisor
Serious workplace injuries cost US employers $58.7B a year (Liberty Mutual, 2025), and OSHA's 2026 maximum is $16,550 per serious violation (OSHA). Sites already pay for cameras that nobody watches live. Site Safety Watch turns them into a record of hazards caught and decided, with evidence for each one.
Open-source components, all running locally
Test clips were staged and filmed by the team on the day. Everything in the repository was written after doors opened.