Install
Clone https://github.com/to-nexus/skill-cross-crossd into a temporary directory and run the install.sh script inside it to install the skill-cross-crossd skill into my Claude Code environment. Tell me the result in one line when you're done.
- For personal testing, keep signer config in the skill
.envonly forbridge+history. - For team, hosted-agent, or production funds, prefer Vault/KMS/HSM-backed signing.
pairs/tokens/quote/statuswork without a key.- Before signing, the skill estimates each upcoming tx's gas, multiplies by current gasPrice with 1.2× headroom, adds
msg.value, and refuses withinsufficient_gas(including a per-tx breakdown) if your native balance can't cover the total. Top up the wallet with the shortfall and retry. - Sub-path selection (native / permit / approve) is automatic. Same-chain swap and multi-step swap-bridge routes (not in
/bridge/pairs) are recognized + quoted but execution waits for the swap-router workstream.
Heads-up: CROSSD Bridge runs on local agent runtimes only — see the Where it runs section for the supported list. Hosted chat environments cannot execute this skill.
Where it runs
Supported
Not supported
What you can do
Canonical 8-pair UX list plus the raw `/bridge/pairs` catalog (the actual gate).
🟢 ReadToken metadata by chain (decimals, name, symbol).
🟢 ReadFee-breakdown quote for any pair (`valueWei`, `gasFeeWei`, `exFeeWei`, `totalPayableWei`, `belowMinimum`). Emits `canonical`, `canonicalKind`, `executable`.
🟢 ReadExecute any pair in `/bridge/pairs` with a per-tx native-gas guard. Refuses with `insufficient_gas` (incl. breakdown) if BNB / CROSS can't cover actual cost. Auto-picks native / permit / approve sub-path.
🔴 Write · txPoll progress of an in-flight bridge by `permitId` or tx hash.
🟢 ReadBridge history for the resolved EOA.
🟡 Read · addrTry it · natural-language prompts
Copy any of these into your agent — they map 1-to-1 onto a skill command.
Command reference
| command | args | auth | mutation | description |
|---|---|---|---|---|
| pairs | — | — | read | Emit the canonical 8-pair UX list plus the raw `/bridge/pairs` catalog (executable gate). |
| tokens | --chain <id> | — | read | Token metadata for the supported chains (BSC 56 or CROSS 612055). |
| quote | <FROM> <TO> <AMOUNT> | — | read | Fee-breakdown quote. Emits `canonical`, `canonicalKind`, `executable`. |
| bridge | <FROM> <TO> <AMOUNT> [--confirm] [--max-approve] [--path=native|permit|approve] | PK | tx | Execute any pair in `/bridge/pairs`. Refuses with `insufficient_gas` (with per-tx breakdown) when native balance is too low. |
| status | <permitId>|--tx <hash> [--watch <sec>] | — | read | Progress poll. |
| history | [--owner <0x…>] [--page N] [--size N] | PK | read | Bridge history. |
Safety & credentials
This skill signs on-chain transactions for routes in `/bridge/pairs`
- 🔴 Signs on-chain transactions — local signer config required only for
bridge+history; quotes work without. - Auto sub-path selection: native —
bridgeToken(...)withmsg.value = value + gasFee + exFee(canonical row #1). - permit — EIP-2612 sign +
POST /bridge/permit; backend submits the on-chain tx, user pays no source-chain gas (row #3). - approve + bridgeToken — exact-amount
approve()thenbridgeToken(...)withmsg.value = 0(row #8 + off-canonical USDT BSC → USDT CROSS).--max-approveopts into unlimited.
Troubleshooting
›insufficient_gas?
gasShortage block shows balanceHuman, requiredHuman, shortHuman, plus a per-tx breakdown (labels: approve, bridgeToken). Top up the wallet with the shortfall and retry.›unsupported_pair?
/bridge/pairs catalog. This includes the canonical same-chain swap rows and multi-step swap-bridge rows in §4 — informational only until a swap-router integration ships. Run pairs and pick a /bridge/pairs entry.›below_minimum?
/bridge/token-config.minimumValue (currently 5 token units for the live config). Increase the amount.›awaiting_confirm?
CONFIRM_THRESHOLD. Re-run with --confirm once the user explicitly approves.›status stuck on pending?
etaSeconds reports the per-route expected time.›When does the skill sign vs quote-only?
/bridge/pairs catalog. Canonical UX rows whose kind is swap or swap-bridge are NOT in /bridge/pairs (same-chain or multi-step), so quote works but bridge.mjs declines with unsupported_pair. Pairs outside the canonical 8 that happen to live in /bridge/pairs (e.g. USDT BSC → USDT CROSS Chain) are fully executable.