samples/claude-code/ in the repository
(veriqa.app/source), is MIT-licensed and is meant to be reworked for
your own needs. Its README is the setup guide.
Three demos
The costly run takes two approvers in turn — a developer, then a manager — each from their own
messenger account enrolled beforehand. A confirmation from any other account refuses the action.
How it works
The plugin is a Claude Code mod — a plugin of function hooks that runs inside Claude Code 2.1.295 or later — so the approval happens in the harness itself, without the model taking part.- A hook of the plugin holds the tool call or the slash command and matches it against its rules. If nothing matches, Claude Code continues as usual.
- If a rule matches, the plugin creates a confirmation with
POST /api/transaction/confirmation(client credentials). The action waits; nothing has run. - The plugin opens a pane of its own with what is asked, the QR code Veriqa returned and the link. On a narrow terminal its status line says what it is waiting for, and a command opens the pane.
- The hook waits for the outcome, reading
GET /api/transaction/{id}/resultuntil the transaction ends. The action runs only onconfirmed; declined, expired, refused in the pane, a confirmation from the wrong account or an unreachable host all refuse it. In a chain the pane moves on to the next approver’s code.
Channels of the sample
The person answers in Telegram by default — the host reads it by long polling, so the demo works onlocalhost. Messenger, WhatsApp and Instagram, or a page where the person picks one of these
channels on the phone, need the host on a public HTTPS address: Meta delivers the answer by webhook,
and the phone has to reach the page.
Why not the harness’s own “Allow” button
- A named person. The host checks which messenger account confirmed, not merely that someone pressed a button.
- Someone other than the developer. A chain asks a second person, so nobody signs off on their own spending.
- A trail outside the agent’s session. Approvals are recorded on the Veriqa host, not in a local transcript the same user can edit.
- A question the agent does not write, answered on a separate device over a channel the agent does not control.