Channels
Ledger Claw
Sign EVM transactions from Telegram using your Ledger Signer.
Install
npm install
pnpm
Configuration Example
{
"requireSigningAbove": "0.00",
"wallets": [],
"chains": {
"arbitrum": { "enabled": true, "rpc": "https://arb1.arbitrum.io/rpc" },
"ethereum": { "enabled": true, "rpc": "https://eth.llamarpc.com" },
"optimism": { "enabled": true, "rpc": "https://mainnet.optimism.io" },
"polygon": { "enabled": true, "rpc": "https://1rpc.io/matic" },
"base": { "enabled": true, "rpc": "https://mainnet.base.org" }
},
"contacts": {}
}
README
<p align="center">
<img src="banner.png" alt="Ledger Claw" />
</p>
<p align="center">
Sign on-chain transactions from Telegram using your Ledger hardware wallet.
</p>
---
> **Disclaimer** — Ledger Claw is an independent community project, not an official Ledger product.
Ledger Claw is an [OpenClaw](https://github.com/openclaw/openclaw) extension that lets your AI agent trigger EVM payments directly in a Telegram conversation. When a transaction is needed, the agent sends a button — you tap it, connect your Ledger via WalletConnect, and sign. Your keys never leave the device.
## How it works
1. Your AI agent detects a payment is needed
2. It calls the `ledger_sign` tool — a button appears in your Telegram chat
3. You tap the button, which opens the Ledger Claw mini-app
4. Connect your Ledger via WalletConnect and confirm the transaction
5. The tx hash is sent back to the chat — the agent confirms it went through
## Supported chains
Arbitrum · Ethereum · Optimism · Polygon · Base
All chains are enabled by default. You can toggle them via the `ledger_claw_config` tool.
## Supported transaction types
Currently only **token transfers** are supported (ETH, POL, USDC, USDT). Swaps, bridges, and other transaction types will be added in future updates.
## Mini-app
The mini-app is deployed at `https://ledger-claw.vercel.app` and is used by default when the plugin sends a signing or connect request.
If you want full control, you can audit the source code in `packages/mini-app/`, deploy your own instance, and point the plugin to it via the `miniAppUrl` config in your OpenClaw plugin settings.
## Project structure
```
packages/
├── mini-app/ # Telegram Mini App (React + Vite)
├── ledger-claw-plugin/ # OpenClaw plugin (tools + config)
├── tests/ # Unit tests (vitest)
└── test-bot/ # Dev-only Telegram bot for testing the mini-app
```
The `test-bot` is a development utility only — it simulates signing/connect requests to test the mini-app locally. It is not part of the plugin.
## Tests
```bash
pnpm test
```
Runs unit tests for the plugin's pure functions (validation, URL building, tx encoding, price lookup).
## Setup
### Prerequisites
- [OpenClaw](https://github.com/openclaw/openclaw) with Telegram channel configured
- A Ledger hardware wallet + Ledger Live on your phone
- Node.js 22+, pnpm
### Install the extension
```bash
openclaw plugins install @ledger-claw/plugin
```
The extension uses the `TELEGRAM_BOT_TOKEN` from your OpenClaw Telegram channel configuration.
### Run the mini-app locally (development)
```bash
git clone https://github.com/YazhuEth/Ledger-Claw.git
cd Ledger-Claw
pnpm install
pnpm dev:mini-app
```
Create a `.env` file at the root (see `.env.example`):
```
VITE_WALLETCONNECT_PROJECT_ID=your_project_id
```
Get a WalletConnect project ID at [cloud.walletconnect.com](https://cloud.walletconnect.com).
To also run the test-bot (`pnpm dev:test-bot`), add:
```
BOT_TOKEN=your_bot_token
MINI_APP_URL=https://ledger-claw.vercel.app
TEST_RECIPIENT=0x...
```
## Extension tools
| Tool | Description |
|---|---|
| `ledger_sign` | Send a transaction for Ledger signing |
| `ledger_connect` | Connect a Ledger to get the wallet address |
| `ledger_claw_config` | Read/update config (threshold, chains, RPCs, wallets) |
| `ledger_claw_contacts` | Manage saved contacts (add, remove, resolve by name) |
| `ledger_claw_rpc` | Check balance or verify a transaction on-chain |
| `get_token_price` | Get the current USD price of a token (ETH, POL, USDC, USDT) |
| `token_to_smallest_unit` | Convert a token amount to hex (ETH, POL, USDC, USDT) |
## Configuration
The extension stores its config in `~/.ledger-claw/config.json` (created automatically on first use):
```json
{
"requireSigningAbove": "0.00",
"wallets": [],
"chains": {
"arbitrum": { "enabled": true, "rpc": "https://arb1.arbitrum.io/rpc" },
"ethereum": { "enabled": true, "rpc": "https://eth.llamarpc.com" },
"optimism": { "enabled": true, "rpc": "https://mainnet.optimism.io" },
"polygon": { "enabled": true, "rpc": "https://1rpc.io/matic" },
"base": { "enabled": true, "rpc": "https://mainnet.base.org" }
},
"contacts": {}
}
```
- `requireSigningAbove` — ETH threshold for requiring Ledger signing (`"0.00"` = always sign)
- `wallets` — saved wallets for balance checks (e.g. `[{ "label": "Main", "address": "0x..." }]`). Optional — not required for signing.
- `chains` — per-chain config: `enabled` to toggle, `rpc` for the RPC endpoint (changeable if one goes down)
- `contacts` — saved contacts for quick transfers (e.g. `{ "Jean": { "address": "0x..." } }`)
All settings can be modified by the AI via the `ledger_claw_config` and `ledger_claw_contacts` tools, or manually in the file.
## Contributing
Contributions are welcome! Feel free to open issues and pull requests.
## License
MIT
channels
Comments
Sign in to leave a comment