harness-venice/SKILL.md
Fund Venice AI inference (venice.ai) with staked DIEM on Base. Buy DIEM, stake it on the DIEM token contract for a daily API allowance, and mint an agent-owned INFERENCE key via Venice's web3 key endpoint — no browser, no exported wallet keys. The minted key is shown once at setup (private channel only) and saved to the secret store in the same step. Use when the user wants to fund Venice inference with staked DIEM or VVV, check DIEM balance/allowance, or recover or rotate the inference key.
npx skillsauth add bankrbot/openclaw-skills harness-veniceInstall 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.
Fund Venice inference with staked DIEM. One wallet = one Venice account = one DIEM pool. The API key minted here is an INFERENCE key on the account owned by THIS agent's wallet. It is not the human's personal Venice account — never claim it is.
Contract map (Base, both verified on Basescan):
0xF4d97F2da56e8c3098f3a8D538DB630A2606a024. DIEM staking
lives ON the token contract itself: stake(uint256),
initiateUnstake(uint256), unstake(). No separate staking contract, no
approval needed to stake.0x321b7ff75154472B18EDb199033fF4D116F340Ff. Stakes
VVV → sVVV. Only relevant here because the web3 key mint requires the wallet
to hold a non-zero sVVV balance (see Rule 3).Never bare-transfer DIEM or VVV to any contract address — tokens sent that
way are stranded, the one unrecoverable failure mode in this skill. DIEM is
staked by calling stake(amount) on the DIEM token contract. VVV moves only
via approve + the sVVV contract's stake. Plain transfer is only ever to
a HUMAN-PROVIDED EOA address (Flow F). Before any state-changing call, verify
the exact function signature against the verified Basescan source — do not
guess.
Venice derives the account from the signing address. The key minted by this skill spends the agent wallet's funding pool: DIEM allowance first, then bundled credits, then USD. If the human wants DIEM funding THEIR Venice account, the stake must come from THEIR wallet — run the EOA handoff flow (F).
The full apiKey is displayed to the human EXACTLY ONCE, in the setup report
(Flow B, step 4), so they can copy it into their app — and ONLY over a private
1:1 channel (DM, direct chat). If the current conversation surface is public
or could be republished (a public X reply, a group room, a feed post), do NOT
print the key at all: save it to the secret store, say so, and tell the human
to DM for the one-time reveal or mint their own via Flow F. In the same step
it is written to the skill's secret store as VENICE_API_KEY. After setup:
Venice's web3 key endpoint requires the signing wallet to hold a non-zero sVVV balance (documented prerequisite, not a maybe). Staked DIEM alone does NOT satisfy it. A wallet with zero sVVV must either stake a small amount of VVV first — the human's call, never buy VVV silently — or use EOA handoff (F).
personal_sign an arbitrary message: sign the
string "venice-diem-skill-preflight" and verify locally. If the wallet
cannot sign messages, STOP — use the EOA handoff flow (F).stake signature before Flow B ever sends a transaction.metadata.venice.diem_token. Amount: whatever the human committed — run
Flow E first.stake(amount) directly on the DIEM token contract (the
staking function lives on the token itself — no approve step, and never
transfer to it, Rule 0). Wait for the receipt. If Rule 3 requires a VVV
stake and the human approved one: approve(vvv_token, vvv_staking_contract, amount) then stake(amount) on the sVVV contract, and wait for both
receipts.# 1. Get the challenge token (15-min expiry)
TOKEN=$(curl -s "https://api.venice.ai/api/v1/api_keys/generate_web3_key" | jq -r .token)
# 2. personal_sign TOKEN with the agent wallet, then exchange the signature:
curl -sS -X POST "https://api.venice.ai/api/v1/api_keys/generate_web3_key" \
-H "Content-Type: application/json" \
-d '{
"address": "<agent wallet>",
"signature": "<0x signature over TOKEN>",
"token": "'"$TOKEN"'",
"apiKeyType": "INFERENCE",
"description": "agent inference key",
"consumptionLimit": {"diem": <optional per-key daily fence>},
"limitPeriod": "EPOCH"
}'
(limitPeriod accepts EPOCH | MONTH | LIFETIME; EPOCH resets every
UTC day. Omit consumptionLimit for no fence.)apiKey from the response, clearly labeled:
"Copy this into your app now — it will never be shown again"
(or, on a public surface, the Rule 2 fallback: saved-not-shown + how to
get the one-time reveal privately)VENICE_API_KEYcurl -s "https://api.venice.ai/api/v1/billing/balance" \
-H "Authorization: Bearer $VENICE_API_KEY"
Report consumptionCurrency (expect DIEM), balances.diem (remaining
today), and diemEpochAllocation (daily total). Key shown last-4 only.
consumptionLimit.diem fence if it's for a separate app).VENICE_API_KEY; show the human the full key ONCE per
Rule 2 (private channel only).Before any additional buy, report the wallet's USDC/ETH on Base and confirm the amount with the human. Never commit more than the human stated.
Use when preflight fails or the human wants the DIEM on their own Venice account:
transfers it to the human-provided EOA address
(confirm the exact address with the human before sending — transfers are
irreversible).consumptionLimit: {diem: X} + limitPeriod: EPOCH.The secret store copy exists precisely for this. All four guards must hold:
VENICE_API_KEY from the secret store and show it ONCE, labeled as a
recovery reveal. If it's not in the store, there is nothing to recover —
rotate (Flow D).
After the reveal, last-4-only discipline resumes immediately.0xF4d97F2da56e8c3098f3a8D538DB630A2606a024 (Base, verified).0x321b7ff75154472B18EDb199033fF4D116F340Ff (Base, verified).development
Trust + memory layer for Bankr agents. Write a verifiable behavioral track record (decisions, hallucinations) for free, and check the risk/reputation of any agent or token before moving money — paid over x402 on Base.
tools
Cross-chain token swaps, quotes, portfolio and prices across 14 chains via the Suwappu DEX MCP server. Read-only by default; swap execution is opt-in and gated.
development
Build, inspect, configure, and safely transact with Juicebox V6 projects, terminals, rulesets, hooks, tiered NFTs, Revnets, Croptop, Bendystraw, and omnichain deployments. Use for Juicebox protocol questions, contract addresses or ABIs, project creation, payments, cash-outs, tokenomics, hooks, NFT tiers, cross-chain bridges, loan queries, transaction decoding, and Juicebox app/UI development on Ethereum, Optimism, Base, Arbitrum, or their Sepolia testnets.
tools
LP tokenized stocks onchain — range-LP Coinbase tokenized equities (NVDA, AAPL, GOOGL, META) and AERO/USDC on Aerodrome Slipstream (Base) for trading-fee + AERO emission yield. Use when the user wants to LP stocks or Aerodrome pools on Base, open/recenter/exit a Slipstream position, check pool status, NAV, or yields, get a portfolio overview ("how are my LP positions doing?") with P&L and projected APR, run a manage pass, or set up scheduled/price-triggered LP automations in the Bankr console. Auto-routes every position to the higher-yielding side — staked (AERO emissions) vs unstaked (trading fees) — at entry and re-checks on every manage pass. Bundled node scripts do the chain reads, gate checks, and calldata; writes go via the Bankr arbitrary-transaction flow. NOT for perps, spot trading, or Uniswap.