Skip to main content

What you will learn

  • When and why transactions require human approval
  • The three approval modes (CLI, web, auto)
  • How approval tokens provide single-use authorization
  • How the web approval dashboard and Telegram bot work

When approval is required

The policy engine determines whether a transaction needs human confirmation: A transaction triggers require_approval when:
  • Its value exceeds requireApprovalAbove.valueWei
  • Its risk score exceeds maxRiskScore

Approval modes

Set the mode via ISCL_APPROVAL_MODE environment variable:
Mode: cli (default)A readline prompt appears in the ISCL Core terminal:
Best for: development, single-user setups where someone watches the terminal.

Approval tokens

When a transaction is approved, ISCL Core issues an approval token: The token prevents:
  • Replay attacks — tokens cannot be reused
  • Substitution attacks — approving intent A and signing intent B is impossible (hash binding)
  • Stale approvals — expired tokens are rejected

Token lifecycle

Web approval dashboard

The built-in web dashboard at http://localhost:3100/approval-ui provides:
  • Real-time polling for pending requests (1-second interval)
  • Approve / Deny buttons for each pending request
  • Risk score with color coding (green/yellow/red)
  • Recent audit history (5-second polling)
  • Dark theme, zero external dependencies
No authentication is required because the API is bound to localhost.

Telegram approval

The Telegram bot (@clavion/adapter-telegram) provides inline approval keyboards:
Security: only the user who initiated the command can tap Approve/Deny (same-sender enforcement). Requires ISCL_APPROVAL_MODE=web on ISCL Core.

PendingApprovalStore

In web mode, pending requests are stored in an in-memory Map:
  • TTL: 300 seconds per request
  • Cleanup: Every 30 seconds, expired entries are removed
  • Blocking: The approve-request HTTP call blocks until the operator submits a decision or the TTL expires

Next steps