Type a sentence.The plugkeeps watch.

The drawing shows tripwire 01 armed: nobody at the ironing board, the plug on.

Breaker for circuit 01: lever up at ON; it drops to OFF on a trip CCT 01 ON OFF TRIP
TrippedOFF acknowledged by the plug

A scenario: Bu Sari leaves the iron on and runs to the warung. Her CCTV stays silent: an empty room has no motion. jaga is built for that sentence: Nemotron 3 Super on Nebius Token Factory compiles it, Cosmos-Embed1 watches the laptop's webcam (1.24 s a window, timed on a sample clip), and a trip can only switch a cheap smart plug OFF.

  • no model training
  • video frames never leave this laptop
  • served on 127.0.0.1 only
  • Apache-2.0

Status: built and tested, on recordings and fake plugs. The first run with a real webcam and plug is still to be recorded.

Measured so far, and where it is written down.

Rating platemeasured so far
Tests pass187

with no model, no key and no camera: the safety invariants, the decision rule, the measurement rules

→ evidence/runs · pytest
Rule, every pattern49,152

window patterns: the decision rule trips where an independent oracle says, and one window never trips

→ tests/…exhaustive.py
Cosmos on the laptop1.24s

per 8-frame window on the laptop's GPU, fp32: p50 of 200 timed calls (p95 2.91 s on a busy machine)

→ DEMO.md §1
Sentences compiled5/5

camera-visible sentences, each a valid tripwire from Nemotron 3 Super, 2 of 2 in Indonesian; a 6th a camera cannot see was refused

→ day0/tf-stage-t.json
Run the 187 testspip install -e ".[test]" && pytest3 of them need ffmpeg on PATH

The overlay you arm it from.

What jaga serves on 127.0.0.1 while it watches, and beside it, real runs of the command line.

jaga's overlay, tripped: the label-tape sentence NOBODY IS AT THE IRONING BOARD snapped across a test card, the dwell bar full, the breaker at OFF with a red TRIPPED flagQA render · scripted windows · fake plug · test card

Swipe the picture sideways to see all of it.

QA render The real overlay (jaga serve) on scripted windows, the test suite's fake plug and a test card. Not a detection: θ and the margins are scripted, the ack time is the fake plug's, and the footer's Job is the smoke run. → the record of this render
  1. 1The sentence as label tape, snapped at θ.
  2. 2The window: the last 8 frames, one a second.
  3. 3The margin trace, against θ.
  4. 4The dwell: 30 s here (a demo dwell; default 120 s).
  5. 5The breaker: OFF only once the plug acknowledges.
  6. 6The schedule: one row per tripwire.
zsh · jaga · four real runs, 2026-10-17
# ran 2026-10-17T08:11:10+0700 at commit 1355077$ jaga compile "nggak ada orang di meja setrika"“nggak ada orang di meja setrika” → IRONING BOARD EMPTY  (visual=True)  + empty ironing board with iron on top  + ironing board clear of people  + vacant ironing table seen from above  − person standing at ironing board  − someone ironing a shirt on the board  − hand resting on the ironing board  dwell 60 s → notify · cool-down 600 s · language id  nvidia/nemotron-3-super-120b-a12b · request e2a1f11c4ffc3a50c9d5bad87ea17a4c · 2.28 s # ran 2026-10-17T08:11:13+0700 at commit 1355077$ jaga compile "tell me if something is wrong"“tell me if something is wrong” → GENERIC ALERT  (visual=False)  can't see that: The sentence does not refer to any observable scene or object.  dwell 60 s → notify · cool-down 600 s · language en  nvidia/nemotron-3-super-120b-a12b · request 280be26c5fa7df675b14fb8781229c9a · 2.113 s # ran 2026-10-17T08:12:37+0700 at commit 1355077$ pytest........................................................................ [ 38%]........................................................................ [ 77%]...........................................                              [100%]187 passed in 64.75s (0:01:04) # ran 2026-10-17T08:12:27+0700 at commit 1355077$ python scripts/verify_offline.py{  "variant": "ci",  "window_source": "frozen caption vectors as stand-in windows (no clips committed yet)",  "tripped": true,  "plug_off_acknowledged": true,  "fake_plug_off_calls": 1,  "fake_plug_on_calls": 0,  "machine_online_before_block": true,  "outbound_after_block": false,  "blocked_attempts": [    "1.1.1.1"  ],  "pass": true}

Typed back from the transcripts, as printed: two live compiles (one Indonesian, one refused), the tests and the offline check → evidence/runs/

One sentence, wired to a plug.

Electricians draw a circuit as a single line; this is jaga's. The sentence goes out as text and captions come back; frames stay on the laptop; the calibration Job sees only labelled margins.

NEBIUS AI CLOUDTHE LAPTOP · the overlay listens on 127.0.0.1 onlyNEMOTRON 3 SUPERToken Factory · JSON schemanemotron-3-super-120b-a12bOBJECT STORAGEtwo presigned URLsjaga-calib · eu-west1SERVERLESS JOBfits θ, recall ≥ 0.9cpu-d3 · 4vcpu-16gbYOUR SENTENCEtyped in the overlayplain textCAPTIONS + NEGATIVEStext vectors, same space3–5 + 3–6 · 256-dCAMERAwebcam, 1 frame/sOpenCVCOSMOS-EMBED1last 8 frames → 1 vector224p · fp32 · MPSMARGINbest + minus best −cosineTHE RULEk of n over the dwellk = ⌈0.8 n⌉ · ≥ 2VIDEO FRAMES STAY HEREframes, window vectors, thumbnailsBREAKEROFF or notifyI1 · I2 · I3the sentence, as textcaptions backlabelled marginsθ backinputresulttripWI‑FI PLUGhome networkiron · lampTHE LAPTOPNEBIUS AI CLOUDYOUR SENTENCEtyped in the overlaysent as text →NEMOTRON 3 SUPERToken FactoryJSON schemaCAPTIONS+ hard negatives← from NemotronCAMERAwebcam, 1 frame/sCOSMOS-EMBED18 frames → 1 vectorfp32 · MPSMARGINbest + minus best −THE RULEk of n over the dwellk = ⌈0.8 n⌉OBJECT STORAGEmargins in, θ outpresigned URLsSERVERLESS JOBfits θcpu-d3BREAKEROFF or notifyI1 · I2 · I3VIDEO FRAMESstay on this sidetripWI‑FI PLUGhome network

Schedule of circuits

MeasuredTestedSmoke runPending
01Compilenemotron-3-super-120b-a12b
Token Factory · JSON schema
Measured

Nemotron writes what a camera can see.

The Cosmos-Embed1 card warns that prompts unlike its short action captions may not align with video. So Nemotron 3 Super rewrites your sentence into 3 to 5 captions of the scene and 3 to 6 hard negatives of the same place, and you check both before arming.

Compiled by Nemotron 3 Super · Token Factory

You typed “nobody is at the ironing board”

Cosmos looks for

  • empty ironing board with an iron on it
  • ironing board alone in the laundry room
  • bare ironing board next to a basket

…and tells it apart from

  • person standing at the ironing board folding clothes
  • someone ironing a shirt on the ironing board
  • hand touching the iron on the ironing board

nvidia/nemotron-3-super-120b-a12b · request 9727b666068a1e42a836b303ab8fd65c · 2.46 s · frozen 2026-10-15 06:43 · Super proposed notify after 30 s; the protocol runs it as plug OFF after 120 s

→ fixtures/tripwires/01.json: the frozen compile, verbatim
02SeeCosmos-Embed1-224p
fp32 · Apple MPS or CPU
Measured

Cosmos watches on the laptop.

Every window, the last 8 frames at one a second, becomes one 256-d vector in the same space as the captions. No model training: the sentence is the classifier.

Its card was tested with BF16 on Linux GPUs; these speeds are fp32 on an Apple M1 Max, with the load beside each.

GPU · MPS fp321.24 sp50 of 200 timed calls on one window · p95 2.91 s · load 4.55 → 9.82
CPU · fp323.09 sp50 of 200 timed calls on one window · p95 3.72 s · load 9.42 → 5.95
Live window period1.27 sp50 over 240 windows · p95 1.79 s · a recorded clip looped through the live loop, no camera
→ DEMO.md §1: the speed table and how to reproduce it
03Decidek = ⌈0.8 n⌉ · never fewer than 2
margin vs θ · cool-down
Tested

One window never cuts the power.

The model chooses where to look; the code decides when to act. By default a trip needs k = ⌈0.8 n⌉ of the n windows in the dwell above θ, the newest included, and never fewer than two. Flip the windows and watch the rule.

dwellstride
k = 8 of n = 10Trips at window 11

Blue (▲) = above θ. A JavaScript port of DecisionRule.push, checked against the Python rule on all 49,152 test patterns by scripts/check_page_rule.py. Cool-down: 3 strides, as in the test.

→ scripts/check_page_rule.py
04Acttinytuya · Shelly RPC
OFF or notify, never ON
Tested on fakes

A trip can only switch it off.

  • I1A trip can only cut power or notify. The one ON path, jaga/operator_on.py, is reached only by operator actions; tests check nothing else reaches it.
  • I2One bad window cannot cut power: most windows over the dwell, the newest included, never fewer than two.
  • I3OFF is shown only after the plug acknowledges this trip's OFF; a failed call shows ACTION FAILED and is retried, off only.

Power can be cut only for heating or cooking appliances; a fridge or a freezer never. Neither plug driver has met a real plug yet: in the tests, both run against fakes.

The overlay's breaker panel: OFF, a red TRIPPED flag, and the event log with 01 TRIPPED and 01 PLUG OFFQA render · fake plug
QA render The breaker after that trip: PLUG OFF in the log, and “✗ wrong” keeps a false trip as a labelled negative. Fake plug: 0 ON calls, 1 OFF. → record
05CalibrateNebius Serverless Job
cpu-d3 · 4vcpu-16gb · eu-west1
Smoke run

The threshold comes with a receipt.

A Nebius Serverless Job fits each tripwire's threshold from labelled margins (no vectors, no frames). It holds no account credential, only two Object Storage URLs that expire after 2 hours. So far it has run once, as a smoke test on synthetic numbers: the plumbing, not a calibration.

Smoke run
job
aijob-e01e9n3qk4qq8zzk13
kind
smoke, not a calibration
state
COMPLETED
compute
cpu-d3 · 4vcpu-16gb · python:3.11
region
eu-west1
provisioning
259 s
wall clock
0.6 s
cost
$0.000021 at the listed $0.132/h (computed, not billed)
in / out
presigned GET in, presigned PUT out · bucket jaga-calib

Object Storage stage: presigned PUT 200 · GET 200 · 1,024 bytes round-trip → evidence/day0/s3-stage.json · docs/RUNS.md

06Measureclips · soaks · outside people
clips and soaks pre-registered
Pending

Pending is a state, not a number.

Accuracy needs recordings only a person can make. The protocol was committed first, question and target included:

“Of the still episodes in Soak B1 + B2, how many does jaga cut, and how many does a stillness timer cut — judged by one decision rule — and how many real exits does each catch, how fast?”

Target: under half the stillness timer's cuts, and at least 0.8 of the exits caught. Otherwise the counts are read out with no claim of a win. A tie is called a tie.

  • Labelled clips: AUC and precision against a frame-difference baselinePendingDEMO.md §2
  • A fresh sentence with no labelled clipsPendingDEMO.md §3
  • Soak B: still episodes cut by jaga, a stillness timer, a person detector, a countdown timerPendingPROTOCOL §1–8
  • Soak A: false alarms per armed hour, one nightPendingPROTOCOL · Soak A
  • Self-ablation: what the rewrite and the negatives are worthPendingDEMO.md §5
  • Outside people's own clipsPendingDEMO.md §6

→ docs/PROTOCOL.md (committed before any data) · DEMO.md (written by bench.py)

Read the labels before you wire it.

Three limits, quoted from the README as written. A judge should know them before believing anything above.

An extra guard
jaga is an extra guard, not a fire-safety device. It can miss an event; a trip only ever cuts power or sends a notification, and switching power back on is always a person's job.
README · top
Scene states, not lights
224p is small: jaga watches scene states (a person present or not, a door open), not an iron's power light.
README · Honest limits 3
A lamp, not a hot iron
In the soak protocol the plug's visible load is a desk lamp and the iron is an unplugged prop: no heated iron is left unattended for a measurement.
README · Honest limits 2

Questions a judge would ask.

Does any video leave the laptop?

No. The typed sentence goes to Token Factory; labelled margins (no vectors) go to the calibration Job; an optional push, off unless you turn it on, sends one text line per alert. The overlay listens on 127.0.0.1. An offline check refuses every connection outside the home network, then trips a tripwire on stand-in window vectors and switches the fake plug OFF. A Tuya plug's own firmware may call Tuya's cloud; the Shelly path can be fully local.

How accurate is it?

Not measured yet. The clips, two attended soaks and one night are pre-registered in docs/PROTOCOL.md, committed before any data. An accuracy number appears here only once bench.py writes it to DEMO.md.

Is anything on this page mocked?

The overlay pictures are QA renders (the real app on scripted windows, a fake plug and a test card) and say so. The breaker at the top is a drawing of the rule. The terminal is typed back from real transcripts. Every measured number links its file.

Can it tell whether the iron is hot?

No. At 224p jaga sees scene states (a person there or not, a door open), not an iron's power light. So tripwire 01 watches for nobody at the board.

What stops a wrong trip from doing harm?

A trip can only cut power or notify (I1, tested); one window never trips (I2, all 49,152 patterns); OFF shows only on the plug's acknowledgement (I3). Only heating or cooking appliances can be cut, and a person switches power back on.

Why does Nemotron rewrite my sentence?

The Cosmos-Embed1 card says prompts unlike its short action captions may not align with video. Super writes that register, plus hard negatives that make “nobody” a visual contrast. What that is worth is a planned ablation (DEMO.md §5), not run yet.