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:| Policy Decision | Approval Required? |
|---|---|
allow | No — transaction proceeds automatically |
require_approval | Yes — operator must confirm |
deny | N/A — transaction is rejected |
require_approval when:
- Its value exceeds
requireApprovalAbove.valueWei - Its risk score exceeds
maxRiskScore
Approval modes
Set the mode viaISCL_APPROVAL_MODE environment variable:
- CLI Mode
- Web Mode
- Auto Mode
Mode: Best for: development, single-user setups where someone watches the terminal.
cli (default)A readline prompt appears in the ISCL Core terminal:Approval tokens
When a transaction is approved, ISCL Core issues an approval token:| Property | Value |
|---|---|
| Format | UUID v4 |
| TTL | 300 seconds (5 minutes) |
| Usage | Single-use (consumed on first sign-and-send) |
| Binding | Cryptographically bound to the intent’s canonical hash |
- 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 athttp://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
Telegram approval
The Telegram bot (@clavion/adapter-telegram) provides inline approval keyboards:
ISCL_APPROVAL_MODE=web on ISCL Core.
PendingApprovalStore
In web mode, pending requests are stored in an in-memoryMap:
- TTL: 300 seconds per request
- Cleanup: Every 30 seconds, expired entries are removed
- Blocking: The
approve-requestHTTP call blocks until the operator submits a decision or the TTL expires
Next steps
- Transaction Lifecycle — How approval fits into the full pipeline
- Telegram Bot Setup — Configure Telegram approval
- Web Approval Dashboard — API endpoints for web approval