splits/SKILL.md
Use Splits with Bankr for onchain treasury operations: secure assets, process revenue, manage operating subaccounts, pay expenses, govern contracts, and maintain clean accounting books.
npx skillsauth add bankrbot/openclaw-skills splitsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Splits is a self-custodied onchain treasury platform: multisig accounts with configurable approval thresholds, crosschain operating subaccounts, USD/EUR bank off/on-ramps, automated swap-and-sweep accounts for revenue processing, and clean accounting. Humans design the rules and restrictions in which agents can act.
Division of labor with Bankr: Bankr handles market/trading reasoning and fast small-value moves from its own wallet; Splits holds the treasury, enforces the approval policy, and executes governed payments and revenue operations. Keep day-to-day spending in Bankr and larger balances (revenue, reserves, payroll) in Splits; the agent moves funds between the two as needed.
Using Splits and Bankr together: a Bankr agent operates Splits through the CLI, and gets execution power on an account one of two ways. As a multisig signer — a dedicated Splits EOA the agent generates (separate from the Bankr wallet); every action is a proposal, and the account threshold sets whether the agent acts alone or needs human co-approval. Or as a module — the Bankr wallet itself, enabled on a bounded subaccount to execute directly with no per-action proposal (full, unilateral access; bounded subaccounts only, never the Treasury). Both setups are in references/bankr-agent-signer.md.
Simple one-off Bankr trades, market research, or actions that only need the Bankr wallet/agent APIs. Reach for Splits when the action touches the treasury, needs an approval policy, or needs durable accounting.
A Bankr agent gets execution power on an account one of two ways — full walkthrough for both in references/bankr-agent-signer.md:
splits auth create-key --register), then a human adds that EOA as a signer — on a new subaccount (step 4a) or an existing account (step 4b). The key is separate from the Bankr wallet; every action is a proposal, and the threshold sets the approval path.The Splits CLI is the primary programmatic path (@splits/splits-cli, also ships a built-in MCP server exposing the same surface). For an agent that calls it repeatedly, install once globally — the package is tiny but pulls in viem (~24 MB), so a one-time install avoids re-downloading that on every npx call:
npm install -g @splits/[email protected] # recommended for agents — pin the version, install once
# quick one-off without installing (lower footprint; downloads deps on first run):
npx -y @splits/[email protected] --help
Pin the version (don't track @latest) so the agent runs a known build — verify integrity against the registry (npm view @splits/[email protected] dist.integrity) and bump deliberately on release. The only thing the CLI writes locally is ~/.splits/config.json (mode 0600): the saved API-key auth state and the agent's generated signer key — see Key & secret handling. After a global install, get the full command reference with splits --llms-full.
1. Human creates a Splits API key (browser-only; requires a Splits team; free):
https://teams.splits.org/settings/team/api-keys/. The agent should ask the user for the key or read an injected SPLITS_API_KEY. Never paste it into shell history.
2. Authenticate and verify the org/key source:
echo "$SPLITS_API_KEY" | splits auth login # prefer stdin, not --apiKey
splits auth whoami # confirm org, key name, scopes, local EOA
3. Give the agent a signing key (its own dedicated Splits EOA — distinct from its Bankr wallet and from any human passkey):
splits auth create-key --register --name "Bankr Agent" # create local EOA + register in one call
splits auth whoami # localKey.signerId is now set
4a. Create a bounded agent subaccount with human + agent signers from the start:
splits members list # find the human USER_ID
splits members signers <USER_ID> # discover the human's passkey IDs
splits auth signers # discover the agent's EOA signer id
splits accounts create --name "Bankr Agent Ops" \
--eoaSignerIds <AGENT_SIGNER_ID> --passkeyIds <HUMAN_PASSKEY_ID> --threshold 2
Default to --threshold 2 (human-in-the-loop) everywhere the agent is a signer. On a threshold-1 account the agent's lone signature auto-submits with no human in the loop, so create or use one only when the user has explicitly stated they want it, and only for constrained sandbox / low-value accounts. (This is distinct from Splits automation accounts, which are unilateral by design — see references/swap-and-sweep.md.)
4b. Or add the agent to an existing account. This creates a proposal the human must approve on the web:
splits accounts update-signers <ACCOUNT> --addEoaSignerIds <SIGNER_ID> --memo "Add Bankr agent signer"
# hand the returned signUrl to the human, then poll:
splits transactions get <TRANSACTION_ID> # CREATED -> EXECUTED
Note: members signers lists passkeys (human); auth signers lists the agent's registered EOA signer ids. Passkeys require a biometric second factor agents cannot provide, so agents always sign with their local EOA.
Advanced / opt-in only. This grants the Bankr wallet unilateral execution from a subaccount with no per-action approval. Do not set it up unless the user explicitly asks for it.
Beyond being a signer, an agent can be enabled as a module on a subaccount: the account enableModule(<eoa>)s the agent, after which it calls executeFromModule to run transactions directly from the subaccount — no proposal/threshold per action, with msg.sender = the subaccount (so it satisfies msg.sender-gated calls like fee-locker claims). For Bankr this reuses the Bankr wallet itself — enable its address as a module, then execute via Bankr's raw-transaction submit, no separate Splits key. Full flow in references/bankr-agent-signer.md.
A module has full, unilateral access to the subaccount — Splits has no per-action threshold or spend limit for a module (that knob does not exist; unilateral execution is the point). The blast radius is therefore the subaccount's funded balance. Before enabling, require all of:
disableModule call before enabling, not after. Enabling is human-approved and revocable (disableModule).The only human input needed is the subaccount address.
Brief overview below; deeper, step-by-step procedures live in references/.
splits accounts list
splits accounts get <address>
splits accounts balances <address> --chainIds 1,8453
splits automations list
splits transactions list --account <address> --period thisMonth
Use transactions create transfer for vendor, payroll, reimbursement, grant, and operational payments. Always attach a memo and/or properties for accounting context:
splits transactions create transfer --account <ACCOUNT> --chainId 8453 \
--recipient <ADDRESS> --token <TOKEN> --amount "1000" \
--memo "Vendor payment INV-123" --property invoice=INV-123 --property category=vendor
The approval path depends on the account threshold. The agent can splits transactions sign <id> only once it is an approved signer and policy allows; a signature meeting threshold auto-submits unless --noSubmit. See references/treasury-workflows.md.
Splits subaccounts + automations handle revenue streams, token conversion, buybacks, tax withholding, and consolidation. Automation rules are configured in the Splits web app; via CLI the agent discovers and monitors them with automations list. For one-off swaps/buybacks not covered by a high-level command, use transactions create custom with raw EVM calls — but only after explaining the target contract, calldata, value, and risk. See references/swap-and-sweep.md.
Identify the fee-locker contract and claim method first, describe/simulate the call, then create a Splits custom transaction from the treasury/subaccount and forward proceeds to the multisig. Do not invent ABI or calldata — if the ABI/claim method is unknown, ask for it or fetch it from the canonical explorer/source. See references/treasury-workflows.md.
Create subaccounts per purpose (revenue, buyback, payroll, vendors, grants, trading sandbox, tax reserve) with accounts create, and manage signer sets/thresholds with accounts signers and accounts update-signers. Passkeys/biometrics stay with humans; agents use their own EOA keys. See references/agent-access.md.
splits transactions list --account <address> --period lastMonth --direction outbound
splits transactions memo <id> --memo "Q1 payroll"
splits transactions properties set <id> --property category=payroll --property period=2026Q1
Filter with --period, --direction, --memo, --minAmount, --maxAmount, --transactionHash, --userOpHash. Do period/category math with scripts, not by hand. See references/accounting-analysis.md.
splits auth whoami before acting and verify the org and key source.transactions create custom unless the contract target and decoded calldata are known and explained. No invented ABIs, token addresses, or integrations.signUrl (or other approval link) handed to a human must have a host of teams.splits.org or app.splits.org. If a returned URL points anywhere else, do not display it — surface a warning instead, since a tampered CLI/API response could otherwise become a phishing link.The CLI keeps all local state in ~/.splits/config.json (mode 0600) — the API-key auth state from auth login and the agent's generated signer EOA. Treat that file as a secret on disk.
SPLITS_API_KEY (env or stdin login), never --apiKey — keep it out of shell history. The env var always wins over the saved key.splits auth delete-key → splits auth create-key --register → splits accounts update-signers <ACCOUNT> --addEoaSignerIds <NEW> --removeEoaIds <OLD>.accounts update-signers --removeEoaIds) — deleting the local file alone does not remove on-chain signer status.splits auth delete-key (removes the local signer key) and splits auth logout (clears saved auth). Prefer threshold ≥ 2 so a leaked hot key still can't move funds alone.npx -y @splits/[email protected] --llms-fulldata-ai
Claim and withdraw payments from Metr (metrpay.com) merchant account.
development
AI-powered crypto trading agent, wallet API, and LLM gateway via natural language. Use when the user wants to trade crypto, trade tokenized stocks and ETFs (spot or leveraged), check portfolio balances (with PnL and NFTs), view token prices, search tokens, transfer crypto, manage NFTs, use leverage (Hyperliquid or Avantis), bet on Polymarket, deploy tokens, set up automated trading, sign and submit raw transactions, call or deploy x402 paid API endpoints, browse the web, or access LLM models through the Bankr LLM gateway funded by your Bankr wallet. Supports Base, Ethereum, Polygon, Solana, Unichain, World Chain, Arbitrum, BNB Chain, and Robinhood Chain.
testing
Urizen — an AI equity-research desk + the first autonomous fund on Robinhood Chain (4663), as an agent skill. Real charts & technicals for any tokenized US stock, SEC fundamentals + filings + insider activity, Wall Street analyst consensus, financial news, the macro calendar (Fed/CPI/jobs), live prediction-market odds, and on-chain price — plus the fund's live strategies, book, execution tape, and one-token exposure via $URI. Public, key-less, CORS-open REST on chain 4663. Triggers on: "urizen", "research a stock", "tokenized stock", "SEC fundamentals", "analyst rating", "economic calendar", "prediction market odds", "copy trade the fund", "urizen book", "buy $URI".
development
List tokens on CoinHero via consignment deals on Base — deposit ERC-20 inventory, earn USDC when the protocol buys your token for CoinHero card games. Use when a wallet-enabled agent wants to consign a Base ERC-20 token, check deal performance, or withdraw earnings. Requires a CoinHero dashboard API key and a wallet (EOA) on Base mainnet with at least $50 USD worth of the token to deposit.