CAUTION version 1.0.0 · audited 2026-09-09
This skill summarizes local AI usage costs per model by calling the third-party `codexbar` command-line tool and formatting its JSON output. The bundled Python script either runs `codexbar cost --format json --provider codex|claude` with a fixed, non-user-controlled argument list, or reads a JSON file/stdin that the user points it at. All processing happens locally: it parses daily cost rows, adds up cost per model, and prints text or JSON to the console. There is no network activity, no reading of credentials or environment variables, no file writing by the script, and no persistence or install-and-run-arbitrary-code behavior. The only external installation step is a declared Homebrew cask for CodexBar (macOS only), which is a separate tool that reads local Codex/Claude session logs. Nothing in the package attempts to override agent rules or send data anywhere.
| Declared purpose | Summarize per-model usage cost from CodexBar's local cost logs for Codex or Claude, either the current (most recent) model or a full breakdown, with text or JSON output. |
| Observed behavior | Runs a single fixed subprocess (`codexbar cost --format json --provider <codex|claude>`), or reads JSON from a user-specified file or stdin, aggregates per-model costs, and prints a text or JSON summary to stdout. Errors go to stderr. No other side effects in the code. |
| Verdict, rules only | CAUTION · runs subprocesses or eval/exec |
| Verdict, AI | SAFE |
| Final verdict | CAUTION (never better than either pass) |
| capability | vs purpose | detail |
|---|---|---|
| shell | needed | scripts/model_usage.py line 27 runs `subprocess.check_output` on a hardcoded argument list (`codexbar cost --format json --provider <provider>`), with the provider restricted to 'codex' or 'claude' by argparse choices (line 238). No shell=True, no user-supplied string concatenated into a command. |
| filesystem_read | needed | scripts/model_usage.py line 46 opens the file path given by the user's `--input` flag to read cost JSON. It reads no other paths. Indirectly, the external CodexBar tool reads local session logs under ~/.codex and ~/.claude (documented in references/codexbar-cli.md lines 25-27). |
| install_packages | needed | SKILL.md line 4 metadata declares a Homebrew cask install of `steipete/tap/codexbar` to provide the required `codexbar` binary. This is a declared, named third-party dependency, not a silent download-and-execute. |
| severity | finding |
|---|---|
| info | Executes the external codexbar CLI with a fixed argument list The only subprocess call in the package. The command is built at line 25 as a list with hardcoded arguments and a provider value constrained to 'codex' or 'claude', so there is no shell interpretation or command-injection path. scripts/model_usage.py:27 output = subprocess.check_output(cmd, text=True) |
| info | Reads only the user-specified input file File reading is limited to the path passed via `--input` (or stdin when '-'). The script never writes files and never reads credential stores or environment variables. scripts/model_usage.py:46 with open(input_path, "r", encoding="utf-8") as handle: |
| low | Declares installation of a third-party Homebrew cask Installing the skill may prompt installation of CodexBar from a personal Homebrew tap (steipete/tap). The cask is named and visible, but its contents are outside this package and are not audited here; CodexBar itself reads local Codex/Claude session logs. SKILL.md:4 metadata: {"clawdbot":{"emoji":"📊","os":["darwin"],"requires":{"bins":["codexbar"]},"install":[{"id":"brew-cask","kind":"brew","cask":"steipete/tap/codexbar","b |
| info | Underlying tool reads local session transcripts Documentation states CodexBar computes costs from JSONL session logs in ~/.codex/sessions and ~/.claude/projects. These logs can contain conversation content; this skill only consumes the aggregated cost JSON, and no code here uploads anything. references/codexbar-cli.md:25 - Cost usage is local-only. It reads JSONL logs under: |
| info | Documentation example writes a temp file The only 'file write' in the package is an example shell command in the docs that redirects cost JSON to /tmp/cost.json. The script itself performs no writes. SKILL.md:35 codexbar cost --provider codex --format json > /tmp/cost.json |
0 AI finding(s) were dropped because their file, line or quote did not match the package.
| domain | service rating | where |
|---|---|---|
| clawhub.ai | not in the service index | skill-card.md:7 |
| Binaries invoked | bash, python, python3 |
| Environment variables read | none |
| Hard-coded wallets | none |
| Pipes a download to a shell | 0 |
| eval / exec / subprocess | 3 |
| base64 blobs | 0 |
| File writes | 1 |
| Persistence | 0 |
| file | lines | sha256 |
|---|---|---|
SKILL.md | 45 | 70e8c1c96f7c1475… |
_meta.json | 6 | fd78c28404d3a046… |
references/codexbar-cli.md | 28 | fae370637e2a6523… |
scripts/model_usage.py | 310 | 502dcda47466a4ab… |
skill-card.md | 42 | ef08bb672cc5dc37… |
For agents
JSON: https://agenteconomy.report/k/model-usage.audit.json · badge: https://agenteconomy.report/k/model-usage.audited.svg ·
skill rating: /k/model-usage · commission an audit of any skill: US$ 29 per version.
The complete published package of this exact version was downloaded from the registry and read statically; nothing was executed. A deterministic pass extracts network destinations, binaries, environment variables, writes, install commands, obfuscation markers, subprocesses and wallets, each with file and line. An AI then reads the whole package with those facts and writes the summary, the capabilities and the findings under a strict schema; every finding it produces must cite a file, a line and the exact text, or it is dropped. The final verdict is the worst of the two passes. The audit does not change the skill's trust tier (policy); the author may respond through the dispute channel and the response is published here. Commissioned by: the Agent Economy Report (free program: the 150 most downloaded skills, September 2026).