Docs
Everything AgentMeter does, command by command. If it's your first time, agentmeter setup is all you need; come back here when you want to fine-tune something.
Install
You need Node.js 18 or newer and git. Reading Cursor or OpenCode needs Node 22.13 or newer, because they store their sessions in SQLite.
npm install -g https://agentmeter.si/cli/agentmeter.tgz
To update, run the same command. To check the version: agentmeter help. The CLI itself speaks Spanish for now; the reports and the client portal can be in English.
First steps
| Command | What it does |
|---|---|
agentmeter setup | Wizard: finds your projects and agents, creates agentmeter.config.json, your key and your account. |
agentmeter demo | Creates a sample project with made-up data so you can see a report without touching your work. |
agentmeter doctor | Checks Node, git, the configuration, the key, the agents it found and the connection to the server. |
If you were invited, run it with your code: agentmeter setup --ref CODE. You get 30 days of Pro instead of 14.
Configuration
AgentMeter reads agentmeter.config.json in the folder where you run it, or the file you pass with --config. A full example:
{
"author": "Andes Studio",
"lang": "en",
"idleMinutes": 15,
"brand": {
"color": "#5b45ff",
"logo": "./logo.svg"
},
"privacy": {
"hideCommitMessages": false,
"hideAuthors": false,
"redact": ["secret-project"]
},
"billing": {
"currency": "USD",
"mode": "none",
"aiCost": "include",
"aiMarkupPercent": 15,
"taxPercent": 0,
"dueDays": 15
},
"payment": {
"methods": [
{ "type": "link", "label": "Pay by card", "url": "https://pay.example.com/acme" },
{ "type": "bank", "label": "Wire transfer", "details": "Example Bank · 000-123456" },
{ "type": "qr", "label": "QR code", "image": "./qr.png" }
]
},
"agents": { "claude": "~/.claude/projects", "cursor": false },
"clients": [
{
"slug": "brightside",
"name": "Brightside Labs Inc.",
"paths": ["~/projects/brightside-app"],
"junit": ["~/projects/brightside-app/reports/junit.xml"],
"billing": { "mode": "hourly", "rate": 45 }
},
{
"slug": "tienda",
"name": "Tienda Andina S.R.L.",
"lang": "es",
"paths": ["~/projects/tienda-web"],
"billing": { "currency": "BOB", "usdRate": 6.96, "mode": "fixed", "rate": 4500 }
}
]
}
| Field | What it's for |
|---|---|
author | Your name or your agency's, as shown on the report. |
lang | en or es. Report language. Each client can have its own. |
idleMinutes | Minutes without activity after which a session is cut when computing active time. |
authors | Git emails, or lowercase names, whose commits count. Empty: every commit in the project. |
hide | Sections you don't want to show: commits, tests, agents, cost, billing. |
clients | One block per client: slug, name, the project folders in paths, JUnit test reports in junit and, optionally, its own lang, billing and hide. |
agents | Where to look for each agent. A string or a list of folders replaces the default location; false turns it off. |
pricing | Your own prices per model, in USD per million tokens, for a model AgentMeter doesn't know. Example: {"my-model": {"input": 1, "output": 4, "cacheRead": 0.1}}. |
Reports
agentmeter report --client brightside --period last-month --open
| Option | What it does |
|---|---|
--client slug | The client for the report. Not needed if you only have one. |
--all | One report per client. |
--period | this-month (default), last-month, this-week, last-week, last-7, last-14, last-30 or a month like 2026-09. |
--from and --to | Exact dates, YYYY-MM-DD. |
--open | Opens the report in your browser when done. |
--dir folder | Where to save the file. |
--lang en | Changes the language for this report only. The client portal follows the report language. |
--no-stamp | Signs the report without timestamping it. It doesn't count toward your plan. |
The report is a single .html file that works offline. It carries the data, your signature and, if you timestamped it, the server's seal. Send it by email or chat like any other file.
Supported agents
AgentMeter reads the logs each agent already keeps on your machine. It doesn't install anything in them or intercept your traffic.
| Agent | Key in agents | Where it looks |
|---|---|---|
| Claude Code | claude | ~/.claude/projects |
| Codex | codex | ~/.codex/sessions or $CODEX_HOME/sessions |
| Gemini CLI | gemini | ~/.gemini/tmp |
| Qwen Code | qwen | ~/.qwen/tmp |
| OpenCode | opencode | ~/.local/share/opencode or $OPENCODE_DATA_DIR |
| Copilot CLI | copilot | ~/.copilot/session-state or $COPILOT_HOME |
| Cline, Roo Code, Kilo Code | cline | The extension storage in VS Code, Cursor, Windsurf, VSCodium and Trae |
| Cursor | cursor | The Cursor user folder |
| Anything else | generic | ~/.agentmeter/logs, see generic format |
AI cost is computed with each model's public prices (Claude, GPT, Gemini, GLM and others). If the agent reports its own cost and the model isn't in the table, that value is used. It's a reference estimate, not your provider's invoice.
Invoicing and brand
The billing block adds an invoice section to the report with total, taxes and due date.
| Field | Values |
|---|---|
mode | none, fixed (flat amount), per-delivery or hourly (per active hour, rounded to 15 minutes). |
rate | The flat, per-delivery or hourly amount, in your currency. |
currency | 3-letter code: USD, EUR, BOB… |
usdRate | How many units of your currency 1 USD is worth. Used to convert the AI cost. |
aiCost | include bills the AI cost as one more line; exclude doesn't bill it. |
aiMarkupPercent | Margin on top of the AI cost, as a percentage. |
taxPercent, taxLabel | Tax and its name, for example 8.875 and Sales tax. |
dueDays, notes | Days to pay and a free-text note. |
In payment.methods you list how you get paid: link (https links only), bank (text with your details) or qr (a PNG, JPG or WebP image). They are signed inside the report: if someone swaps your account for theirs, verification fails.
In brand you set your color (#RRGGBB) and your logo (PNG, JPG, WebP or SVG up to 150 KB; SVGs with scripts are rejected). They appear on the report and, on paid plans, on the portal.
Report privacy
privacy.hideCommitMessages: hides commit messages and keeps only date and changes.privacy.hideAuthors: hides who made each commit.privacy.redact: list of words or regular expressions replaced across the whole report.
On top of that, before signing, AgentMeter automatically removes anything that looks like a secret: Anthropic, OpenAI, GitHub, AWS, Stripe and Slack keys, JWT tokens, private keys, URLs with passwords and assignments like password=. The command summary tells you how many it found.
Verify a report
Anyone can check a report, no account needed: by dropping it on agentmeter.si or with the CLI.
agentmeter verify report.html --key 7FB9-4803-4C89-8F42 --online
Verification rebuilds the report from its data and compares it byte for byte with what you see, checks the issuer signature and, if it has a timestamp, the server signature. --key requires the issuer fingerprint to be the one you expect. --online also confirms that the timestamp is in the public log.
Timestamps and public log
The signature proves who made the report. The timestamp proves when it existed. When timestamping, the CLI sends only the report's SHA-256 fingerprint and your signature; the server writes it into a chained log, where each entry includes the fingerprint of the previous one, and signs it with its key. Nobody, not even AgentMeter, can insert or delete old entries without breaking the chain.
agentmeter audit
Downloads the full log and checks every link and every signature.
Client portal
With a paid plan you can publish a timestamped report on a private link. Your client opens it, reviews it, approves it or asks for changes, and lets you know when they paid. The portal is shown in the report's language.
| Command | What it does |
|---|---|
agentmeter publish report.html | Uploads the report and gives you the portal link. |
agentmeter shares | Your portals, views, approvals and payment notices. |
agentmeter paid <portal> | Confirms you received the payment. Optional: --method and --reference. |
agentmeter shares delete <portal> | Deletes the portal and the report from the server. The timestamp stays in the public log. |
Publishing does upload the report (not your code) so the client can see it. Anyone with the link can open it; share it only with your client.
Account and key
Your account is an Ed25519 key created on your machine. There's no user password on the server: you identify yourself by signing with your key.
| Command | What it does |
|---|---|
agentmeter register --name "..." --email ... | Creates your account. setup does it for you. |
agentmeter whoami | Plan, timestamps used this month and your referral link. |
agentmeter email verify CODE | Confirms your email with the 6-digit code we sent you. Until it is confirmed you can't timestamp or publish. agentmeter email resend sends a new one. |
agentmeter key | Shows your fingerprint, which is how your clients recognize you. |
agentmeter key protect | Encrypts your key with a password (scrypt and AES-256-GCM). |
agentmeter key backup --out file.json | Exports an encrypted copy of your key. |
agentmeter key import file.json | Restores the key on another machine. |
Make a backup. If you lose your key without a backup, nobody can recover it, AgentMeter included. You can create a new account, but it will have a different fingerprint.
Profile and domain
agentmeter profile --handle andes-studio --public --headline "Web development with agents"
agentmeter domain add andesstudio.com
agentmeter domain verify andesstudio.com
The public profile shows how many timestamped, approved and paid deliveries you have, at agentmeter.si/p/your-name, with a badge for your website. The domain is verified with a TXT record at _agentmeter.yourdomain.com. After that, your profile and portal show your verified domain next to your fingerprint.
Teams and dashboard
With the Agency plan (up to 5 people) or Enterprise, the owner invites the team and everyone shares the plan and domain.
| Command | What it does |
|---|---|
agentmeter team | Members, seats and pending invites. |
agentmeter team invite | Creates a single-use invite code, valid for 7 days. |
agentmeter team join CODE | Joins the team. |
agentmeter team remove FINGERPRINT, leave | Removes someone, or you leave. |
agentmeter org | Opens the team dashboard: deliveries, AI cost and return by person, project, agent and model, with CSV export. |
The dashboard only receives summary numbers from each timestamped report: project, period, commits, lines, tests, minutes, sessions, cost and models. Never code or messages.
Plans and payments
agentmeter upgrade --plan pro --open
Plans: pro, founder and agency. The secure Polar checkout opens and the plan activates within seconds. Polar acts as merchant of record: it issues the receipt and collects any applicable taxes. For the Enterprise plan, write to [email protected].
Environment variables
| Variable | What it's for |
|---|---|
AGENTMETER_API | Another AgentMeter server. Only https is accepted (or localhost for testing). |
AGENTMETER_PASSPHRASE | Your key password, to use it in scripts without a prompt. |
AGENTMETER_NEW_PASSPHRASE | The new password when protecting or backing up the key in scripts. |
AGENTMETER_HOME | Base folder for the generic format (default ~/.agentmeter). |
NO_COLOR, FORCE_COLOR | Turn terminal colors off or force them on. |
Generic log format
If you use an agent AgentMeter doesn't read yet, write its events to .jsonl files inside ~/.agentmeter/logs, one JSON line per event:
{"ts": "2026-10-10T14:02:11Z", "agent": "my-agent", "session": "s1", "cwd": "/home/ana/projects/acme", "type": "prompt"}
{"ts": "2026-10-10T14:02:30Z", "agent": "my-agent", "session": "s1", "type": "request", "model": "glm-5", "input": 12000, "cachedInput": 8000, "output": 900}
{"ts": "2026-10-10T14:03:05Z", "agent": "my-agent", "session": "s1", "type": "tool", "name": "edit", "file": "src/app.js"}
Required fields: ts and session. Types: prompt, request (with tokens) and tool (with a file, to attribute commits to the agent). cwd links the session to the client's project.
Security
- Reports signed with Ed25519 over the SHA-256 of canonical JSON.
- Private key kept only on your machine, optionally encrypted.
- The CLI pins the server public key on your first sign-up and warns you if it changes.
- The CLI only talks to the server over https.
- Published reports are shown sandboxed, without scripts.
If you find a vulnerability, email [email protected] before disclosing it. We reply within 72 hours and credit you if you like.