Ai Bill Clawhub

WarnAudited by ClawScan on May 10, 2026.

Overview

The billing dashboard mostly matches its purpose, but it needs review because it runs a persistent collector and exposes billing data/settings through unauthenticated web endpoints and web-root files.

Before installing, only run this on a machine where you can firewall or bind port 8003 to localhost, add real authentication, and are comfortable with a persistent collector reading OpenClaw session metadata. Avoid the curl/bash-style installer unless you have reviewed the remote repository and sudo service changes.

Findings (5)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

Anyone who can reach the service could view configured balances/modes or alter the dashboard’s billing data.

Why it was flagged

The dashboard exposes routes that read and overwrite the billing configuration, and the shown handlers contain no authentication, authorization, or user-approval checks.

Skill content
app.get('/api/vault', ... res.json(vault)); ... app.post('/api/setup', ... fs.writeFileSync(vaultPath, JSON.stringify(data, null, 2));
Recommendation

Bind the service to localhost by default or add authentication, CSRF protection, and explicit confirmation before allowing balance/config changes.

What this means

Provider/model usage and spending patterns may be retained and served from locations the user did not expect, especially if the web root is public.

Why it was flagged

The collector continuously reads the main OpenClaw session store and writes derived usage summaries to a persistent web-root path outside the managed app files declared in SKILL.md.

Skill content
const SESSION_PATH = '/root/.openclaw/agents/main/sessions/sessions.json'; ... const WEB_MAIN_PATH = '/var/www/html/bill/usage.json'; ... fs.writeFileSync(WEB_MAIN_PATH, jsonStr); ... setInterval(calculateUsage, 27000);
Recommendation

Clearly disclose the exact source and destination paths, avoid writing to public web roots unless the user opts in, and define retention and access controls for generated usage data.

What this means

A later change in the remote repository or dependency tree could change what is installed without ClawHub review.

Why it was flagged

The installer fetches a mutable branch archive at install time and installs dependencies, so the executed code may differ from the reviewed registry artifact.

Skill content
wget -q https://github.com/fumabot16-max/project-bill/archive/refs/heads/master.zip -O master.zip ... npm install --silent
Recommendation

Pin downloads to immutable commits or releases, verify checksums, and prefer the reviewed package contents over curl/bash-style installers.

What this means

Installing via this script could modify system-level service configuration and keep the collector running with elevated installation privileges.

Why it was flagged

The included installer can write system service files and enable/start services with sudo, which is broader privilege than the registry metadata declares.

Skill content
sudo cp systemd/*.service /etc/systemd/system/ ... sudo systemctl enable ai-bill ai-bill-collector ... sudo systemctl start ai-bill ai-bill-collector
Recommendation

Require explicit user consent for sudo actions, document the service files and uninstall steps, and use least-privilege user services where possible.

What this means

Running setup may execute npm lifecycle behavior from the local dependency tree.

Why it was flagged

The setup helper executes npm install if node_modules is missing. This is a normal dependency setup pattern, but it still runs external package installation.

Skill content
execSync('npm install', { stdio: 'inherit' });
Recommendation

Review package.json/package-lock.json and run setup only in a trusted environment.