Commands reference
Every selltraces command, flag, exit code and JSON output shape.
selltraces <command> [options]Global options
| Option | Effect |
|---|---|
--json | Print one JSON document to stdout. Human text and progress go to stderr. |
--no-input | Never prompt. Commands that need an answer fail with interactive_required. |
--no-browser | Print URLs instead of opening a browser. |
--no-color | Plain output. NO_COLOR is also respected. |
-v, --verbose | Extra diagnostics on stderr. |
--api <url> | Use another API base. Same as SELLTRACES_API_URL. |
-h, --help | Help for the command. |
-V, --version | Print the version. |
Unknown flags are errors, so a typo can never turn into an approval.
Environment
| Variable | Default | Purpose |
|---|---|---|
SELLTRACES_API_URL | https://dashboard.selltraces.ai | API base URL. |
SELLTRACES_HOME | ~/.selltraces | Where config, credentials and upload state live. |
SELLTRACES_UPDATE_URL | https://selltraces.ai/cli/latest.json | Release manifest for update. |
Account
login
selltraces login [--force]Starts a browser device login and stores a token in ~/.selltraces/credentials.json (mode 0600). --force replaces an existing session.
logout
selltraces logoutDeletes the local token.
status
selltraces status [--json]Shows who you are logged in as, eligibility, trace totals by status, earnings and recent batches.
{
"user": { "id": "usr_9f2c", "email": "you@example.com", "name": "Ada" },
"eligibility": { "eligible": true, "reason": null },
"totals": {
"traces": 422,
"queued": 12,
"listed": 371,
"sold": 0,
"rejected": 31,
"excluded": 8,
"estimateCents": 18240,
"earnedCents": 0
},
"recentBatches": [
{ "id": "bat_71d0", "status": "queued", "traceCount": 12, "createdAt": "2026-10-22T14:03:11Z" }
]
}eligibility
selltraces eligibility [--json]Explains whether you can upload, and what to do if not. See Login and eligibility for every reason code and the JSON shape.
Sources and projects
sources
selltraces sources [--json]Lists detected agents with session counts. Reads metadata only.
{
"sources": [
{ "id": "claude_code", "detected": true, "approved": true, "sessions": 418, "bytes": 912384011, "location": "~/.claude/projects" },
{ "id": "cursor", "detected": true, "approved": false, "sessions": 11, "bytes": 30410022, "location": "~/Library/Application Support/Cursor/User" }
]
}onboard
selltraces onboard [--no-upload]Interactive setup: pick sources, approve projects, mark projects private, add blocked terms. Ends with a dry run and offers an upload. --no-upload stops after the dry run. Needs a terminal.
projects
selltraces projects [list]
selltraces projects approve <name>
selltraces projects private <name>
selltraces projects reset <name>Manage project states. list --json returns:
{
"projects": [
{ "name": "api-server", "state": "approved", "sources": ["claude_code", "codex"], "sessions": 141 },
{ "name": "client-acme", "state": "private", "sources": ["claude_code"], "sessions": 42 },
{ "name": "dotfiles", "state": "pending", "sources": ["codex"], "sessions": 6 }
]
}block and unblock
selltraces block <term>
selltraces unblock <term>Add or remove a blocked term. Traces containing a blocked term are excluded from uploads. Terms stay on your machine.
Uploading
upload --dry-run
selltraces upload --dry-run [--json]Builds the upload plan locally. Sends nothing.
{
"dryRun": true,
"sources": [
{ "id": "claude_code", "sessions": 418, "approved": 361, "private": 42, "uploaded": 0 }
],
"skipped": { "tooShort": 37, "blockedTerm": 6, "excluded": 0, "alreadyUploaded": 0 },
"redactions": { "openai_key": 31, "anthropic_key": 22, "email": 213, "home_path": 1902 },
"plan": { "traces": 422, "bytes": 61132800 },
"estimate": { "lowCents": 9600, "highCents": 31000, "note": "Estimates are not payouts." }
}upload
selltraces upload [--confirm-policy --confirm-upload] [--yes]Uploads approved traces that have not been sent before. Prompts for two confirmations in a terminal. Non-interactive runs need both --confirm-policy and --confirm-upload. --yes answers prompts in a terminal only.
{
"batchId": "bat_71d0",
"status": "queued",
"uploaded": 12,
"duplicates": 0,
"failed": 0,
"receipt": { "id": "rcpt_5be1", "traceCount": 12, "queuedAt": "2026-10-22T14:03:19Z" }
}exclude
selltraces exclude <traceId>Removes an uploaded, unsold trace from future datasets. Find trace IDs in the dashboard or with status.
Maintenance
update
selltraces updateReplaces the binary with the latest release for your platform.
Errors and exit codes
With --json, errors are printed as:
{ "error": { "code": "not_eligible", "message": "Accept the current contributor terms first.", "hint": "Open https://dashboard.selltraces.ai/terms" } }| Exit | Codes |
|---|---|
| 0 | Success |
| 1 | config_error, update_failed, internal_error |
| 2 | usage_error, confirmation_required, interactive_required |
| 3 | auth_required, auth_failed |
| 4 | not_eligible |
| 5 | network_error, api_error |
| 6 | not_found |
| 7 | upload_incomplete |
JSON fields may be added over time. Existing fields are not removed or renamed without a major version change.