ReplayFence logomarkReplayFence
openclaw tui --localprompt typed into TUI inputagent asks for exactly-once protection
Primary narrated demo
Prompt modetyped in TUI
No --messageconfirmed
Tool calls4
Failures0
OpenClaw result
verified TUI interaction
  1. 01
    Skill loaded by agent

    OpenClaw reads the installed ReplayFence SKILL.md before running the commands.

  2. 02
    First status

    CONSUMED

  3. 03
    Replay status

    REPLAY_REJECTED

  4. 04
    Verifier status

    VERIFIED

Honesty boundaryThis clip proves local OpenClaw skill use. Live Pharos consume/replay tx proof is recorded separately in the Pharos report.
Typed prompt

The recorder spawns the real TUI, types this request into the input line, and submits it with Enter.

prompt typed into OpenClaw
Can you use ReplayFence to protect a payout for me? Run it once, try the exact same payout again, verify the proof capsule, and tell me whether the duplicate was blocked. Please include the capsule path and finish with: ReplayFence check complete.
Session tool calls
  1. 01
    read installed SKILL.md

    ~/.openclaw/workspace/skills/replayfence/SKILL.md

  2. 02
    exec demo command

    SKILL_DIR="$HOME/.openclaw/workspace/skills/replayfence" OUT_DIR="$HOME/openclaw-test" mkdir -p "$OUT_DIR" node "$SKILL_DIR/scripts/replayfence.mjs" demo --reset --format pretty --out "$OUT_DIR/replayfence-capsule.json"

  3. 03
    exec verify command

    SKILL_DIR="$HOME/.openclaw/workspace/skills/replayfence" CAPSULE="$HOME/openclaw-test/replayfence-capsule.json" node "$SKILL_DIR/scripts/replayfence.mjs" verify --capsule "$CAPSULE" --format pretty

  4. 04
    read installed SKILL.md

    /Users/rick/openclaw-test/replayfence-capsule.json

Open session events JSON

Agent payout intent: invoice-042

local-demo

REPLAY_REJECTED
latch0xa9cabb066060a15f073d619b6570f6c7cbf75b5255a955ab053297b7cbde791d
action0xdd7634577227cb76521993f968a38f3fca5f581a579c94b49cdff45be3186ede
Inspect capsule
Evidence files
  1. 01
    Raw TUI typescript

    demo/openclaw-tui-interactive.typescript

  2. 02
    TUI report

    .hunter/openclaw-tui-interactive.report.json

  3. 03
    Agent-created capsule

    capsule_f17b29a188bd7390

Open TUI-created capsule artifact
final OpenClaw reply
Done. Here's what happened:

**Protected action:** Agent payout intent: `invoice-042` (via `demoTreasury.requestPayout`)

**Results:**
- **First attempt:** `CONSUMED` — payout accepted on first run
- **Replay attempt:** `REPLAY_REJECTED` — duplicate blocked because the same latch key was already consumed
- **Verifier result:** `VERIFIED` — all three capsule checks passed (canonical hash match, latch key match, replay rejected)

**Capsule path:** `/Users/rick/openclaw-test/replayfence-capsule.json`

**Important note:** This run was `local-demo` mode only — it's deterministic replay-fencing evidence, not live Pharos transaction proof. To get on-chain proof, you'd need `PHAROS_RPC_URL`, `PRIVATE_KEY`, and `ONCE_LATCH_REGISTRY_ADDRESS` configured and would pass `--pharos-report` to record the live tx.

The duplicate payout was blocked.

ReplayFence check complete.
OpenClaw-generated skill transcript
ReplayFence OpenClaw Skill Demo

Mode: local-demo
Purpose: prove a normal installed skill can canonicalize one agent action, consume it once, reject the exact replay, and export a capsule.

1. Canonicalize action
  label: Agent payout intent: invoice-042
  tool: demoTreasury.requestPayout
  actor scope: openclaw-guest-demo
  volatile fields stripped: timestamp
  canonical SHA-256: 0xdd7634577227cb76521993f968a38f3fca5f581a579c94b49cdff45be3186ede

2. Derive latch
  chain id: 688689
  registry: 0x000000000000000000000000000000000000f3ce
  latch key: 0xa9cabb066060a15f073d619b6570f6c7cbf75b5255a955ab053297b7cbde791d

3. Execute twice
  first attempt: CONSUMED
  replay attempt: REPLAY_REJECTED
  replay reason: same latch key already consumed

4. Export capsule
  capsule id: capsule_f17b29a188bd7390
  capsule path: /Users/rick/Documents/Project/Hackathon/Pharos/demo/openclaw-tui-replayfence-capsule.json
  verifier hint: node scripts/replayfence.mjs verify --capsule /Users/rick/Documents/Project/Hackathon/Pharos/demo/openclaw-tui-replayfence-capsule.json --format pretty

Live Pharos evidence attached
  report: /Users/rick/Documents/Project/Hackathon/Pharos/demo/pharos-consume-report.json
  status: CONSUMED_AND_REPLAY_REJECTED
  registry: 0xf3cb65898bc692495c64e2fa3981acbab2770a73
  first consume tx: 0x7dcfe6f8...cc74941d
  replay tx: 0xf428dbdf...bbdabe6d
  replay status: REPLAY_REJECTED
  decoded error: ReplayFenceReplay

Honesty boundary
  This run is local-demo evidence. Only an attached Pharos report or live Pharos command proves chain state.


Installing to /Users/rick/.openclaw/workspace/skills/replayfence…
Installed replayfence from path -> /Users/rick/.openclaw/workspace/skills/replayfence
replayfence ✓ Ready

Use ReplayFence to fence duplicate agent actions, derive stable action hashes and latch keys, run an OpenClaw-installable exactly-once demo, create ReplayFence Capsules, and verify whether a replay was rejected. Use when an agent needs a reusable Pharos/OpenClaw action replay guard or proof capsule workflow.

Details:
  Source: openclaw-workspace
  Path: ~/.openclaw/workspace/skills/replayfence/SKILL.md
  Visible to model: yes
  Available as command: yes

Tip: use `openclaw skills search`, `openclaw skills install`, and `openclaw skills update` for ClawHub-backed skills.


ReplayFence OpenClaw Skill Demo

Mode: local-demo
Purpose: prove a normal installed skill can canonicalize one agent action, consume it once, reject the exact replay, and export a capsule.

1. Canonicalize action
  label: Agent payout intent: invoice-042
  tool: demoTreasury.requestPayout
  actor scope: openclaw-guest-demo
  volatile fields stripped: timestamp
  canonical SHA-256: 0xdd7634577227cb76521993f968a38f3fca5f581a579c94b49cdff45be3186ede

2. Derive latch
  chain id: 688689
  registry: 0x000000000000000000000000000000000000f3ce
  latch key: 0xa9cabb066060a15f073d619b6570f6c7cbf75b5255a955ab053297b7cbde791d

3. Execute twice
  first attempt: CONSUMED
  replay attempt: REPLAY_REJECTED
  replay reason: same latch key already consumed

4. Export capsule
  capsule id: capsule_fcfb807cd480ae16
  capsule path: /Users/rick/Documents/Project/Hackathon/Pharos/demo/replayfence-capsule.json
  verifier hint: node scripts/replayfence.mjs verify --capsule /Users/rick/Documents/Project/Hackathon/Pharos/demo/replayfence-capsule.json --format pretty

Live Pharos evidence attached
  report: /Users/rick/Documents/Project/Hackathon/Pharos/demo/pharos-consume-report.json
  status: CONSUMED_AND_REPLAY_REJECTED
  registry: 0xf3cb65898bc692495c64e2fa3981acbab2770a73
  first consume tx: 0x7dcfe6f8...cc74941d
  replay tx: 0xf428dbdf...bbdabe6d
  replay status: REPLAY_REJECTED
  decoded error: ReplayFenceReplay

Honesty boundary
  This run is local-demo evidence. Only an attached Pharos report or live Pharos command proves chain state.
reproduce locally
set -a; source "$HOME/use_key.txt" >/dev/null 2>&1; set +a
npx --yes openclaw --no-color tui --local --session replayfence-tui-interactive-... --timeout-ms 600000

npx --yes openclaw skills install ./skills/replayfence --as replayfence --force
npx --yes openclaw skills info replayfence
node ~/.openclaw/workspace/skills/replayfence/scripts/replayfence.mjs demo --reset --format pretty --out demo/openclaw-tui-replayfence-capsule.json --transcript demo/openclaw-tui-skill-showcase.out --json-out demo/openclaw-tui-demo-output.json --pharos-report demo/pharos-consume-report.json
node ~/.openclaw/workspace/skills/replayfence/scripts/replayfence.mjs verify --capsule demo/openclaw-tui-replayfence-capsule.json --format pretty --json-out demo/openclaw-tui-verify-output.json