OpenOnion Top-up
Check your browser credit balance and get a recharge link with your key pre-filled.
Installation
- Make sure Claude is on your device and in your terminal.
Skills load from
~/.claude/skills/when Claude Code starts up β so you need it on your machine first. If you don't have it yet, install it once with the command below, then runclaudein any terminal to verify.One-time setupnpm i -g @anthropic-ai/claude-codeAlready have it? Skip ahead.
- Paste into Claude Code or into your terminal.
This copies the whole skill folder into
~/.claude/skills/topup-openonion/β the SKILL.md plus any scripts, reference docs, or templates the skill ships with. Safe default: works for every skill.Faster alternative (instruction-only skills)
Skips the clone and grabs only the SKILL.md file. Don't use this if the skill ships Python scripts, reference markdowns, or asset templates β they won't be downloaded and the skill will fail when it tries to load them.
Quick install (SKILL.md only)Sign up to copy - Restart Claude Code.
Quit and reopen Claude Code (or any other agent that loads from
~/.claude/skills/). New skills are picked up on startup. - Just ask Claude.
Skills auto-activate when your request matches the skill's description β no slash command needed. Trigger phrases live in the skill's own frontmatter; you can read them in the βWhat this skill doesβ section above.
Prefer to read the source first? Open on GitHub.
When Claude uses it
Check the OpenOnion balance and open the recharge page with the user's own key pre-filled. Reports the balance in plain money, says how long it lasts at $0.10/hour of browser time, and hands over a purchase link that needs no login β the key is already in it. If connectonion is not installed yet, install it first (install-connectonion). Use when the user says "top up", "add credit", "recharge", "check my balance", "how much do I have left", "ε εΌ", or a paid action failed because the balance is empty.
What this skill does
Top-up Skill
Answer one question β "how much do I have, and how do I add more" β and hand back a recharge link the person can click without logging in, because their own key is already in it.
Assume the person may not be technical. They came to run a browser or an agent, not to learn about public keys. Do the lookup for them; say the result in plain money.
Step 0: Is connectonion here at all?
co --version
- It runs β go to Step 1.
- It does not β this machine has no
coyet. Run the install-connectonion skill first (it installsco, and itsco initstep creates the key this skill needs), then come back here. Do not ask the user to install anything by hand β the install skill does it.
Step 1: The key that identifies this account
The recharge page fills in from the account's public key, and it lives in ~/.co. Read it β
never type it, never show its full value in logs:
python3 -c "from connectonion import address; from pathlib import Path; d=address.load(Path.home()/'.co'); print(d['address'] if d else '')"
- Prints a
0xβ¦address β that isKEY. Keep it. - Prints nothing β the account was never created. Run install-connectonion (its
co initwrites the key), then retry this step. On Windows usepy -3orpython.
Step 2: The balance
Ask the API with the stored token β co already has it, so this needs nothing from the
user. /auth/me returns balance_usd directly (credits minus what has been spent):
TOKEN=$(python3 -c "from connectonion.cli.commands.project_cmd_lib import load_api_key; print(load_api_key() or '')")
BACKEND=$(python3 -c "from connectonion.backend import backend_url; print(backend_url())")
curl -s "$BACKEND/api/v1/auth/me" -H "Authorization: Bearer $TOKEN"
Read balance_usd from the JSON. (Verified against production: /auth/me gives
balance_usd; /api/v1/tokens/balance gives the raw credits_usd and total_spent_usd
whose difference is the same number β use /auth/me, it does the subtraction.)
There is no co status --balance β co status only lists credential sources, not the
money. The API call above is the read.
Recovery β the token names a different account. If the balance looks wrong or the call is refused, the stored token may predate a key migration. Run
co authonce to refresh it, then retry. (This is the openonion/oo-api#67 case β the CLI re-authenticates itself, you just have to let it.)
Step 3: Say it in money, and in hours
Browser time is $0.10/hour. Turn the balance into something a person acts on:
Balance: $BALANCE
That is about $HOURS hours of browser time at $0.10/hour.
HOURS = BALANCE / 0.10. Round down; a partial hour is not a promise. If the balance is
zero or low, say it plainly and without alarm β the recharge link is the answer, not a
warning.
Step 4: The recharge link, key already in it
Hand over exactly this, with KEY substituted β no login, no re-typing the key:
https://o.openonion.ai/purchase?key=KEY
Tell the person: open it, pick a top-up, pay β the credit lands on this same account and
both co and the browser draw from it. One balance, one link.
Set expectations about the page, because it will not match your words otherwise. The
purchase page shows fixed top-up packages (currently around $0.99, $19.90, $109.90), and
it is worded for API credit β it does not say "browser hours." That is not a wrong page:
it is the same credits_usd browser time bills against. Tell the person plainly: the page
sells credit in fixed amounts; any of them adds to the one balance, and browser time draws
from it at $0.10/hour. Do not promise an arbitrary-amount field the page does not have.
The plain-language summary
Close with the money facts and nothing else β no key value, no token, no table:
π° Balance: $12.40 (~124 hours of browser time at $0.10/h)
π Add credit: https://o.openonion.ai/purchase?key=0x10e6β¦5508
Adjust: balance is healthy β one calm line, still offer the link for later. Balance is
empty β lead with the link, "add any amount to start." No co and the user declined to
install β say the top-up needs connectonion and stop; do not fake a balance.
Notes
- One balance for everything. LLM calls (
co/*models), agent email, and browser time all draw from the samecredits_usd. Topping up here funds all of them β do not imply a separate "browser wallet." - The link needs no account on our side.
?key=is the whole identity the page needs; Stripe returns the credit to that key via webhook. There is nothing to log in to. - Never print or store the key's full value beyond the URL the user is meant to click.
The summary shows a truncated form (
0x10e6β¦5508); the link is the one place it appears in full. - $0.10/hour is the browser rate, single session. Multi-session is an enterprise conversation, not something this skill quotes.
- The purchase page is live at
https://o.openonion.ai/purchase(verified 200). The barehttps://openonion.ai/purchaseis not the page β always use theo.host.
Related skills
Contract & Proposal Writer
alirezarezvani
Generate professional contracts, proposals, and legal documents for multiple jurisdictions.
CFO Financial Advisor
alirezarezvani
Build financial models, analyze unit economics, and plan fundraising strategy for startups.
CHRO People Advisor
alirezarezvani
Build hiring plans, compensation frameworks, and organizational structures that scale.
Domain Name Brainstormer
Prat011
Generate creative domain name ideas and check availability across multiple extensions.