Privacy¶
What cctrace collects, where it keeps it, who can read it, and how long it stays.
The server stores conversation content
Session logs include what people typed, the agent's replies, and tool commands and output. By default they are kept until an operator sets a retention period. Decide on retention and redaction before you connect other people.
What is collected¶
| Data | Sent by | Contents |
|---|---|---|
| OTEL telemetry | The agent itself, to the OTLP ports | Metrics and events: token counts, cost, model, tool activity. cctrace init labels them with the user ID, name, email, and team through OTEL_RESOURCE_ATTRIBUTES. |
| Session logs | The sync daemon, to /api/sync |
Each line of the agent's session files as written on disk: prompts, replies, reasoning text, tool calls with their arguments and output. Each upload also carries project details: directory name, git remote URL, repository name, branch, and commit. |
| Rule files | The sync daemon | The CLAUDE.md and AGENTS.md files at the root of the git repositories your sessions run in |
| Usage-limit readings | The client | The plan's rate-limit usage as read on your machine |
cctrace init does not set OTEL_LOG_USER_PROMPTS, so Claude Code's own telemetry does not carry prompt text unless you set that variable yourself. Session logs carry the full conversation either way.
Where it is stored¶
Collected data goes to the server you configured and into its TimescaleDB database. Other outbound requests:
- To read usage limits, the client queries Anthropic's usage API with the local Claude Code login.
- The server downloads OpenAI's public pricing and changelog pages to price Codex usage.
The weekly AI report feature, when enabled, sends data to the AI provider it is configured with. It is under active development and is not documented here.
Clients warn, but do not refuse, when an endpoint is plain http:// to anything but the same machine (loopback), private addresses included. Put the server behind TLS before clients connect over a network you do not control; see Install the server.
Who can see what¶
| Data | admin |
user |
|---|---|---|
Session transcripts (/sessions) |
Every user's | Their own |
Rule files (/rules) |
All repositories | Repositories where they have sessions |
| Aggregates: usage, cost, tools, plugins and skills, per-user lists | Everyone's | Everyone's |
Telemetry rows (/logs) |
Everyone's | Everyone's |
User management, /admin |
Yes | No |
- Aggregates are shared on purpose, so the whole team's usage adds up in one place.
- Attributes that carry free text (prompts, tool arguments and output, command text, stdout and stderr) are removed from telemetry rows before any dashboard response, for administrators too. They may still be stored.
- A
useraccount sees its own sessions through its cctrace user ID. An account without one sees no session data (with the defaultCCTRACE_USERID_ACCESS_CONTROL). See Users.
CCTRACE_USERID_ACCESS_CONTROL¶
| Value | How a user account's sessions are matched |
|---|---|
unset or anything but false (default) |
By the account's cctrace user ID |
false |
By the account's sign-in email against the email the client uploaded with |
The setting changes only how sessions are matched to their owner. It does not make aggregates private.
Redact on the client¶
Two profile options remove content from session logs before they leave your machine. Both are off by default.
cctrace config set options.redact_user_prompts true
cctrace config set options.redact_tool_details true
| Option | Replaces the values of these fields |
|---|---|
redact_user_prompts |
content, text, thinking, summary, title |
redact_tool_details |
arguments, input, output, result, command, description, stdout, stderr |
- Values are replaced with
[redacted by cctrace client], wherever the field appears in the record. A line that cannot be parsed is replaced as a whole. - Token counts, cost, model, and timestamps are left alone, so dashboard figures do not change.
- Redaction covers session logs only. It does not touch OTEL telemetry, which the agent sends directly, or rule files.
- It applies to uploads made after the change. Records already on the server stay as they are.
- A running sync daemon keeps the options it started with. Restart it with
cctrace sync --stopand thencctrace sync --daemon.
Add --profile <name> to act on a named profile. cctrace status lists the redaction that is on.
Delete data¶
| What | Who | How |
|---|---|---|
| One session | Its owner (while the owner-delete policy allows it) or an administrator | Trash icon on /sessions. See Pages. |
| A project's sessions, and future collection of it | Administrator | Session delete dialog or the project picker on /sessions |
| Everything stored under one account's email | Administrator | Clear Collected Data on /users. See Users. |
A deleted session is refused if a client uploads it again.
Retention¶
| Table | Contents | Default |
|---|---|---|
otel_events |
Telemetry events | Dropped after 90 days, compressed after 30 |
otel_metrics |
Telemetry metrics | Dropped after 90 days, compressed after 30 |
session_records |
Session logs (conversation content) | No policy: kept until an operator sets one |
While session_records has no policy, the server logs this at startup:
[cctraced] notice: session_records (conversation content) has no retention policy and is kept indefinitely, while otel_events/otel_metrics are dropped after 90 days. Set SESSION_RETENTION_DAYS (0 = keep forever) or choose an interval in Admin -> Storage.
Set retention on the Storage tab of /admin. cctraced also reads SESSION_RETENTION_DAYS and OTEL_RETENTION_DAYS, but the shipped compose file does not pass them to the container (Configuration). When one reaches the container, it wins and locks that setting in the dashboard. Shortening retention deletes existing data. Details: Operations.