Part of Revenant · a real, shipped feature

Vigil

Vigil is a keep-alive switch — a branching emergency escalation plan, sealed and unaltered, that fires the moment someone goes quiet. It ships today inside Revenant, the custody-chained OMEMO messenger Amanda built (real phone number, real SMS, every message permanently provable) — not a mockup, not a concept sketch: a working product surface with its own escalation tree, break-glass unlock, and draft/armed lifecycle.

Live product screenshot revenant.retrofuture.tech/vigil — open the real thing →
Vigil's escalation tree UI inside Revenant: START (if no check-in within the window) fires a call to Alice (partner), then Bob (brother) if unacknowledged, then Dispatch (authority) if still unacknowledged.

How it works

An escalation tree that fires itself

You set a check-in window. Miss it, and Vigil walks a pre-sealed contact tree — each tier a person, a scripted message, and a timeout — until someone acknowledges or the plan reaches its final, authority-facing step. The plan is sealed before it's needed, so nobody (including a coercer standing over your shoulder) can edit it in the moment.

Unforgeable

Each check-in reveals the next preimage in a Lamport hash chain, signed by a per-device ed25519 key. Only the real operator can produce the next valid beat — seeing every past beat reveals nothing about it.

Unpredictable

An observer watching the network can't distinguish a check-in from ordinary traffic, and can't predict when or where the next one lands — jittered cadence, channel rotation, no fixed "Vigil app" fingerprint.

Equivocation-resistant

Beats — and their absence — anchor to a public log (Rekor). A coercer can't fake liveness without the key, and can't hide going dark: the gap is publicly provable.

Duress-aware

A second hash chain: a duress check-in verifies exactly like a normal one, but silently flags coercion and fires the escalation covertly — the "forced to check in" case, handled without a visible tell.

Honest limits. Full device + biometric compromise defeats any device-held key — the duress channel and an M-of-N trustee quorum are mitigations, not a cure. Vigil complements, never replaces, a dedicated PLB/satellite SOS with professional dispatch and real physical-safety planning.

Interactive sketch, on this page

Explore a variant: proof-of-life by circle, not by tree

This is not Revenant's shipped Vigil — it's a self-contained interactive sketch, built to explore a different shape for the same problem: instead of a linear contact tree, a circle of role-assigned friends (anchor, herald, signal, counsel, chain) who fan out together, and instead of a fixed message, a rule only you know — a phrase, a grid pattern, a spelled acrostic — proves it's really you, under duress or not. Play with it below; nothing here is wired to the real product.

AnchorVerifies the lapse is real and coordinates the rest of the circle — click a member to make them Anchor.
HeraldPublishes the sealed statement to the pre-set channels once the circle fires.
SignalAlerts the press & media contacts on the list.
CounselNotifies legal and logs the last-known status.
ChainTriggers the re-share tree across the wider network. Try a check-in, then a duress check-in, to see the covert path.

Vigil

A privacy-preserving proof-of-life circle. You see what your people are up to, roughly where, and whether they're okay — and if someone can't check in, their sealed plan fires itself and the circle fans out.

Circle visibility

Censorship-heavy. Identities behind handles, location coarsened to a region, duress is covert.

08:00Day 1 · circle time
1 min ≈ 40 ms

The circle

6 watching each other
Y
You(you)
@you
Anchor
Alive
Editing field notes
Central Europe· precision stripped
checks in every 180 min · 180 min left
M
@mara.k
Herald
Alive
On assignment — quiet
Caucasus region· precision stripped
checks in every 120 min · 80 min left
I
@idris
Signal
Alive
Uploading footage
North Africa· precision stripped
checks in every 150 min · 135 min left
L
@lena.v
Counsel
Alive
At the courthouse
Central Europe· precision stripped
checks in every 240 min · 150 min left
S
@s_river
Chain
Alive
Coordinating volunteers
East Africa· precision stripped
checks in every 200 min · 170 min left
A
@ari.dot
Chain
Lapsing
Reading — low signal
Anatolia· precision stripped
checks in every 160 min · 40 min left
Duress check-in: a coerced "I'm okay" that verifies as normal to a watching adversary but silently arms the plan. It is a different rule, not a keyword — nothing to confess.

Sealed plan

Plan for @mara.k

On assignment — quiet

sha256:4df76424…21c3bcfc · window 120min
"If I go quiet past my window, this is not me choosing silence." — the sealed statement @mara.k pre-authorized, released by the circle only on lapse.
Phone-tree fan-out · role by role
Anchor
You
Verifies the lapse is real, coordinates the circle
awaiting cascade
Herald
@idris
Publishes the sealed statement to the pre-set channels
awaiting cascade
Signal
@idris
Alerts the press & media contacts on the list
awaiting cascade
Counsel
@lena.v
Notifies legal + logs the last-known status
awaiting cascade
Chain
@s_river
Triggers the re-share tree across the wider network
awaiting cascade

Verbal salt

where a check-in becomes proof it's you

A check-in isn't a tap or even a voice — a voice can be recorded, coerced, or cloned. It's a rule only you know, run in your head over a fresh grid. You reveal which words, never the rule. The distress version isn't a codeword an interrogator can beat out of you — it's a different rule over the same grid whose answer looks statistically identical to safety.

Choose your rule — you pick, nobody assigns it
Strength
≈5 bits

Memorize a row number and a column number. Read your ROW left-to-right, then your COLUMN top-to-bottom. Two small numbers, one crossing pattern. Your distress rule is a different one over the same grid — here Spell a keyword.

riveambequienortcedaplazsignochrmaplbeacdrivembeviolharbcindoliv

Your Row then column rule highlights these cells. A fresh grid every time; the shape stays yours.

Try it — build your own salt

No rule assigned here — just click the words you'd pick, in order, on a fresh grid. That ordered pick is a verbal salt. This is the short version of the same playground the full rule library above is teaching you to reproduce from memory.

Your salt: — click cells above —

Field log

custody-chained · append-only
08:00Circle initialized — 6 members, plans sealed & custody-chained

Sealed plan

Each plan is locked to a sha256 seal. What fires is provably the exact plan that was sealed — it returns, unaltered, and acts when you can't.

Proof of life

A check-in is a Lamport reveal signed by your verbal salt. The server stores only your public rule-key — zero knowledge, nothing to steal.

Dead-man's nonce

Minted when a window opens, burned on check-in. Left unburned, the keepalive_lapsed oracle fires the pre-agreed charter — authorization without you.

Fan-out roles

The plan is a phone tree for digital media: each friend holds one signed role — herald, signal, counsel, chain, anchor — executed the moment the nonce lapses.

Wired to the real Vigil guts — grid rules from lib/saltGridAlgorithms.js, speakable ciphers from lib/saltDialect.js (null cipher · Zancig · Cardan grille). Check-in windows, lapse detection, dead-man's-nonce authorization and the role fan-out are modeled on tools/vigil_lite.py. Circle and events are fictional.