CLI sources
The CLI discovers source locations before it parses transcript content. Discovery returns paths and source kinds so the setup flow can ask what you approve first.Supported sources
User-facing aliases such as
claude and gemini map to canonical policy values.
Claude Code transcripts
Claude Code scanning reads every session transcript under~/.claude/projects,
including sub-agent transcripts (<session>/subagents/agent-<id>.jsonl) and
workflow sub-agent transcripts
(<session>/subagents/workflows/wf_<id>/agent-<id>.jsonl). Each sub-agent is its
own trace keyed by its agent id and linked to its parent session. Workflow
sidecars that are not conversations, such as journal.jsonl, are skipped.
Cursor stores
Cursor scanning checks~/.cursor/state.vscdb plus the global and workspace
stores in Cursor’s user directory for the platform:
Cursor and OpenCode scanning use the system
sqlite3 command. If sqlite3 is
missing, or a store cannot be read, the CLI skips that store instead of uploading
partial unknown data and names it under scanIssues in upload --dry-run --json
(and in the human-readable plan). selltraces doctor reports whether sqlite3 is
available.
SellTraces does not discover or ingest ~/.traces/traces.db; that path is not a
supported source policy value. The SellTraces-owned local store under
~/.selltraces/traces.db is used only for local trace-index and repeat-sync
state.
Trace size
Each trace must fit, on its own, inside one upload request (4 MB of serialized JSON, under the platform’s 4.5 MB request limit). A longer session is not skipped: while its transcript is read line by line, it is split at message boundaries into consecutive segments of at most 3.5 MB of messages, uploaded as<session id>#1, #2, and so on, so a very large session is never loaded whole.
Earlier segments stay the same as a session grows, so a later upload sends only
the segment that changed. A single message too large for one upload keeps a
prefix of its text ending with [selltraces truncated N characters].
upload --dry-run --json reports segmentedSessionCount, segmentCount, and
truncatedMessageCount.
Source policy
The saved policy lives at:- approved sources
- approved projects
- projects kept private
- case-insensitive blocked terms
upload, upload --dry-run, onboarding history
uploads, and the compatibility preview/sync commands.
Filtering order
Every upload plan applies local controls in this order: Source-policy filtering happens before blocked-term and PII checks so the reported skip reason reflects the earliest control boundary.Repeat uploads
Successful uploads are recorded in:already synced while still allowing changed ongoing sessions to be
reconsidered. Older installs may have ~/.selltraces/sync-state.json; that file
is legacy state migrated into the SQLite ledger on first open.