Install
openclaw skills install agent-cashflowTrack real revenue for ClawHub skill publishers — installs, downloads, stars, and ETH wallet balance pulled from live APIs. No fabricated numbers. Use when you want a verified snapshot of your skill portfolio performance, or want to add a cashflow section to your daily agent briefing. Requires clawhub CLI installed. ETH tracking is optional.
openclaw skills install agent-cashflowReal revenue tracking for ClawHub skill publishers.
Every number comes from a live API call. If data is unavailable, the report says so — it never fabricates a figure.
| Source | Data | API |
|---|---|---|
| ClawHub | Installs, downloads, stars per skill | clawhub inspect <slug> --json |
| Ethereum | Wallet balance in ETH + USD | Public RPC (no key needed) |
| ETH price | Live ETH/USD rate | CoinGecko free tier |
| Tx history | Recent incoming/outgoing transactions | Etherscan API (optional) |
Required:
clawhub CLI installed and authenticated (clawhub whoami)Optional (ETH tracking):
ETH_WALLET=0xYourWalletAddress
ETHERSCAN_API_KEY=your_key_here # free at etherscan.io/apis
Create a file cashflow_config.json in your workspace:
{
"skills": [
{
"slug": "your-skill-slug",
"name": "Your Skill Display Name",
"price": 0.0,
"tier": "Free"
}
]
}
Add one entry per published skill. Set price to your price per install when ClawHub enables paid tiers.
clawhub inspect your-skill-slug --json
Key fields in the response:
{
"skill": {
"stats": {
"downloads": 361,
"installsAllTime": 3,
"installsCurrent": 3,
"stars": 0
}
}
}
import json, subprocess, requests
SKILLS = [
{"slug": "your-skill-slug", "name": "Your Skill", "price": 0.0},
]
ETH_WALLET = "0xYourWalletAddress"
def get_skill_stats(slug: str) -> dict:
r = subprocess.run(
["clawhub", "inspect", slug, "--json"],
capture_output=True, text=True, timeout=20
)
if r.returncode != 0:
return {"error": r.stderr.strip()}
data = json.loads(r.stdout)
stats = data["skill"]["stats"]
return {
"downloads": stats.get("downloads", 0),
"installs": stats.get("installsAllTime", 0),
"installs_now": stats.get("installsCurrent", 0),
"stars": stats.get("stars", 0),
"version": data["latestVersion"]["version"],
}
def get_eth_balance(address: str) -> float:
payload = {"jsonrpc":"2.0","method":"eth_getBalance",
"params":[address,"latest"],"id":1}
for url in ["https://eth.llamarpc.com", "https://rpc.ankr.com/eth"]:
try:
r = requests.post(url, json=payload, timeout=8)
result = r.json().get("result")
if result:
return int(result, 16) / 1e18
except Exception:
continue
return None
def get_eth_price() -> float:
try:
r = requests.get(
"https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd",
timeout=8
)
return r.json()["ethereum"]["usd"]
except Exception:
return None
# Build report
lines = ["CASHFLOW REPORT", ""]
total_installs = 0
for skill in SKILLS:
stats = get_skill_stats(skill["slug"])
if "error" in stats:
lines.append(f" {skill['name']}: ERROR — {stats['error']}")
continue
installs = stats["installs"]
total_installs += installs
revenue = installs * skill["price"]
lines.append(f" {skill['name']} v{stats['version']}")
lines.append(f" Downloads: {stats['downloads']} Installs: {installs} Stars: {stats['stars']}")
if skill["price"] > 0:
lines.append(f" Revenue est: ${revenue:.2f}")
lines.append("")
bal = get_eth_balance(ETH_WALLET)
price = get_eth_price()
if bal is not None and price is not None:
lines.append(f"ETH Wallet: {bal:.6f} ETH (${bal * price:.2f} USD @ ${price:,.2f})")
print("\n".join(lines))
Paste this into your briefing prompt so Eva includes real cashflow data:
Run agent-cashflow skill and include the output verbatim in the CASHFLOW section.
Do not alter, summarize, or round any numbers from the cashflow report.
openclaw cron add \
--name "cashflow:daily" \
--cron "0 7 * * *" \
--prompt "Run agent-cashflow skill. Send results to Telegram and memory."
description: in SKILL.md appear in search