xrpl muse skill
Muse trades XRP Ledger tokens
How to add it to Muse
Copy the skill's SKILL.md (from the copy box or the source) and paste it into a Muse chat, asking Muse to follow it. This lasts for that conversation; saving skills isn't documented by Meta. In Muse Code, install it with `muse skills install` per the README.
New to Muse? Join at muse.ai/join and use invite code Referral: using this code gives the site owner credits.
There's no official Muse install link, so musebot never makes one up. Skill For the Muse app, web or WhatsApp.
Skill text to copy
# xrpl-muse-skill
Trade the XRP Ledger from the terminal — any token pair, with a hard safety
boundary between proposing a trade and signing it.
## HOL Guard coverage
HOL Guard publishes [XRPL Muse Skill protection](https://hol.org/guard/extensions/command.xrpl-muse-skill),
a command-coverage profile for this skill. It classifies signing approval and
gate-transition commands for review, proposal commands for review, and
read-only queries as inert. The listing documents that external Guard
coverage; it does not replace this skill's own policy checks or the
operator's exact-hash approval.
## Read-only mode: the default (v0.11.0)
Fresh installs start **read-only**: everything keyless works, nothing can
sign. Balances, token lookups with XRPL.to risk scores, market movers, top
collections, tx-explain, whale-watch, incoming NFT offer scans, the watchlist,
Koi market reads, the trusted-links registry — all of it, no keys anywhere.
`xrpl-trade` can even *build* proposals (terms + hash, fully keyless) so you
can rehearse the whole flow and stop one step short of the chain.
Going live is a deliberate ceremony, not a flag:
- `xrpl-trade live` — prints what changes, then requires typing `go live`
- `xrpl-trade read-only` — locks back down, no confirmation needed
The `read_only` bit lives in `~/.xrpl/config.json` and can **only** be flipped
by those two commands. No CLI flag or environment variable overrides it, so a
prompt injection can't quietly re-enable signing. `xrpl-sign --approve`
checks the flag independently and refuses (audit-logged) while read-only.
Existing installs that predate the flag are grandfathered — an upgrade never
silently changes signing behavior.
## Architecture: propose → approve → sign (v0.7)
Two programs. The agent only ever runs the first.
1. **`xrpl-trade` — the proposer.** Builds transactions, autofills them against
the live network, prints the full ceremony (account, network, assets with
issuers, amounts, limit price, max spend, fee, sequence, expiry), and saves
a **hash-bound proposal envelope**. It **never sees the seed** and **never
submits**.
2. **`xrpl-sign` — the policy-gated signer.** The only program that touches the
seed. On mainnet it reads the seed from a **named signing profile**
(`~/.xrpl/profiles.json`, owner-only `0600`) that binds account + network +
credential reference + policy digest + spend-state selection; the seed
itself lives in the operator's vault (password manager) and is injected
for the single signing operation. `xrpl-sign` verifies the proposal
envelope, enforces the profile's policy, derives the summary from the
transaction itself, and signs **only** when a human passes
`--profile <name> --approve` for that exact hash.
### Signing profiles (v0.7)
A profile names the complete signing context so a proposal can't drift
across accounts, networks, policies, or wallets:
```json
{
"schema_version": 1,
"profiles": {
"main": {
"account": "r9e34ga9YxYHYoCe7UtWWpuLjp4iKs3gkB",
"network": "mainnet",
"credential_env": "XRPL_SEED",
"policy_path": "/home/user/.xrpl/policy.json",
"policy_sha256": "2d3aa5d2b830a43c…",
"spend_state": "default"
}
}
}
```
- `xrpl-trade` records `profile` + `policy_sha256` in every mainnet proposal.
- `xrpl-sign --profile <name>` rejects proposals bound to another profile,
a changed policy (digest mismatch → rebuild the proposal), or a different
account/network — *before* touching the credential.
- One profile = one spend-state file, so the main wallet and the giveaway
wallet can never share a budget.
- Manage with `xrpl-sign init-profiles` / `xrpl-sign sync-profile <name>`.
### Vault-only mainnet (v0.7)
Mainnet never keeps a seed on disk and never prints one to a terminal:
- `xrpl-trade wallet create --network mainnet` and `wallet backup --network
mainnet` are refused (creation/backup of mainnet keys happens in the
vault, outside this tool).
- The signer refuses to run on mainnet if legacy seeds remain in
`~/.xrpl/config.json` or `~/.xrpl/giveaway.json` — migrate them first
(`wallet forget-seed` removes a disk seed only after you type the address
to confirm the vault backup).
- Testnet keeps the convenient local flow (`wallet create` prints the seed
once; the faucet no longer does).
### Autopilot — at your own risk (opt-in local mainnet signing)
Two signing modes, clearly labeled:
- **Vault (default).** The key stays outside the agent's environment; the
vault injects it for one signing operation after genuine human approval.
External wallets (Xaman via its payload API, or a WalletConnect wallet
like Joey/Bifrost once the bridge lands) keep the key in a separate
wallet entirely — the user approves there.
- **Autopilot (explicit opt-in).** `xrpl-trade autopilot enable` stores the
wallet's seed in `~/.xrpl/autopilot.json` (owner-only 0600) after the
operator types `ENABLE AUTOPILOT` under a plain-language risk disclosure.
Seed sourcing, in order: (1) if `~/.xrpl/config.json` holds a seed for the
account (e.g. from `xrpl-trade wallet create`), it is adopted directly —
no pasting; (2) otherwise the operator may generate a fresh dedicated
autopilot wallet on the spot, with a one-time backup ceremony (the seed
is displayed exactly once; the operator types `I HAVE WRITTEN IT DOWN`
to confirm); (3) otherwise paste at a hidden prompt. The signer then
uses the local seed — but **only** for the exact account it was enabled
for, and **everything else is unchanged**: the proposal envelope, the
policy checks (spend caps, pairs, tx types, fee caps, expiries), the
audit log, and the human Submit/Cancel on the proposal hash in chat.
What Autopilot does and does not protect against — say this plainly:
- It bounds the agent's *mistakes*: policy + proposal + human confirmation
still gate every transaction.
- It does **not** defend against the agent's *compromise*: this is a
same-user in
SKILL.md from the repo, MIT licence. Read it before pasting. Muse asks before it acts.
What the source says
Chat-native XRPL trading with a hard safety boundary. Tokens, NFTs, giveaways.
Quoted from the source, by terramike. Licence: MIT.
Where we found it
- GitHub repository ↗ 2026-09-24