An organization's capture mode decides how much session content crewkit collects. There are three modes: minimal, structured and full. An org admin sets it in Settings → Organization → Privacy & Telemetry, and it applies to every member of the organization. An organization that never set it is on structured.
The CLI reads the mode once, when a session starts. If it cannot establish the mode, because the session could not be created or the value is one it does not recognise, it behaves as minimal. When the mode is full, the CLI says so before Claude Code launches.
What leaves the machine
The CLI collects through three channels: Claude Code's hook events, the session transcript (one record per prompt, response, tool call and tool result), and a few smaller reports. Secret-shaped strings (API keys, tokens, passwords) are redacted before sending from prompts, from transcript text, and from the tool-call inputs that hook events keep. Other hook-event fields are sent as Claude Code wrote them.
Hook events
minimal | structured | full | |
|---|---|---|---|
| Prompts | Removed. A /command skill invocation is still marked. | Sent | Sent |
| Tool calls | Tool name and call id only | Depends on the tool (below) | Full input |
| Tool results | Tool name and call id only | Depends on the tool (below) | Full result |
| Workflow runs and goals | Numeric run metadata only; no goal text | Sent | Sent |
| Other events (session start and end, subagent start and stop, stop, notifications, permission requests, compaction, model switches) | Forwarded unchanged, with whatever fields Claude Code put in them; crewkit removes the fields listed under What crewkit stores before storing them; any other field is stored | Sent | Sent |
Under structured, each tool call keeps:
| Tool | Input kept | Result kept |
|---|---|---|
| Read, Write, Edit | File path only | See the file-result rule below |
| Bash | Command and description. A command that writes a file inline, such as a heredoc, carries that file's text | Nothing |
| Task / Agent (subagents) | Agent type, description, prompt, model | Agent id, status, duration, token usage, tool-use count and the prompt |
| Skill | Skill name and arguments | Full result |
| Glob, WebSearch | Full input | Full result |
| Grep | Full input | Mode, match and file counts, and the matching file names; not the matched lines |
| WebFetch | Full input | URL, status, size and duration; not the page |
| LSP | Input minus its content fields (below) | Operation, file path and result counts |
| TodoRead | Input minus its content fields | Full result |
| Workflow | Description, workflow name and phase names; the script is removed | Nothing |
| Any other tool, including MultiEdit, NotebookEdit and MCP tools | Input minus its content fields, at any depth | Nothing, unless the file-result rule below applies |
The content fields are content, old_string, new_string, new_source, oldString, newString, oldText, newText, old_str, new_str, file_text, patch and diff. This is a list of names to remove, not of names to keep: a tool that puts its content under another name, such as body or code, still sends it (#1514 tracks closing this).
File-result rule. A tool result (other than Bash) that has a top-level filePath keeps only its filePath, type, userModified and replaceAll fields and the position of each changed block in structuredPatch (start line and line count, before and after), and each of those only as the type it should have: text for the path, a short word for type, true or false for the flags and whole numbers for the positions. The edited code, the file's contents and the changed lines are removed.
Transcript
Every mode streams one record per user message, assistant response, thinking block, tool call and tool result. What the record carries depends on the mode:
minimal— no text. The record keeps its role, type, timestamp, token count, model, tool name and ids, and a label saying whether a person typed the message or it was injected.structured— the text of prompts, assistant responses and thinking. A tool call keeps its tool name and the input the hook-event rules above keep, such as the file path. A tool result keeps what the "Result kept" column above keeps for the tool that was called: the file path and the positions of the changed lines for a file tool, Grep's and WebFetch's metadata, a subagent's telemetry, and the full result of Skill, Glob, WebSearch and TodoRead. A result whose call crewkit cannot find, or that does not arrive as structured data, keeps nothing. The old and new text of edits, the files the agent read and command output are not sent. Each tool input is cut at 50,000 bytes.full— the complete text of every record, including whole tool inputs and tool results (file contents read by the agent, the old and new text of each edit, command output), cut at 50,000 bytes each, plus the raw transcript line each record was built from.
Other reports
minimal | structured | full | |
|---|---|---|---|
Session summary, written by a local claude process (which sends the transcript to Anthropic under the developer's own Claude account) and then sent to crewkit | Not produced | Sent | Sent |
| Your prompt, sent as a search query to fetch relevant project documents | Off | On, unless --no-artifacts or no project | Same as structured |
| Usage reporting (subscription limit percentages and reset times) | Off | On unless the org turns it off | On unless the org turns it off |
| Per-request records from Claude Code's OpenTelemetry (off by default) | Off | When the org enables it | When the org enables it |
The LLM gateway is off by default. When an org turns it on, it reports each model request's model, token counts, duration and stop reason, in every mode. It never captures request or response bodies, whatever the capture mode.
What crewkit stores
minimal | structured | full | |
|---|---|---|---|
| Hook events | The event minus its prompt, content, response, tool_response, tool_input, output, result, summary, goal_text, transcript_path and cwd fields | What the CLI sent, with the tool-result filter above applied again on the server | As received |
| Transcript text | None | Up to 100,000 characters per record. The server removes the content fields from tool calls and applies each result's tool rule again, and does not store a tool record it cannot read as structured data or a result whose call it cannot find | Up to 100,000 characters per record |
| Raw transcript lines | None | None | Up to 500 KB per line |
| The conversation's first prompt | None | Up to 10,000 characters | Up to 10,000 characters |
| Subagent task descriptions | None | Stored | Stored |
| Session metrics (tokens, cost, duration, models, tool counts) | Stored | Stored | Stored |
Under structured and full, four retention switches decide which kinds of transcript text are kept at all: prompts, tool calls, tool results and assistant responses. All four are on by default. They apply to transcript text only, not to hook events.
Under structured, the main agent's assistant responses are stored but hidden when the transcript is shown or read by any crewkit feature; prompts, tool calls, tool results and subagent output stay visible. Under full, the responses are visible too.
That filtering always uses the organization's current mode. Moving to a narrower mode hides content stored under the wider one; it does not delete it.
Tool calls and tool results stored under structured before October 2026 kept their full text, including edit and file contents. They are left as they were stored; the rules above apply to records stored from then on.
Retention
The retention term (retention_days, 365 days by default, settable from 7 to 365) is enforced by a daily sweep that erases transcript text and raw lines older than the term. The rest of each record (its role, timing, token count and model) is kept, so metrics stay intact.
The retention term does not age out: hook event payloads (including any edit contents they hold), a conversation's first prompt and summaries, subagent task descriptions, the project-search documents built from conversations, and agent notes.
What feeds analysis
Session analysis, project search, correction detection and convention override resolution never run on a conversation that is minimal, marked sensitive, or held under data residency.
- Session analysis sends a digest of a finished conversation to Anthropic's Batch API (Claude Haiku 4.5): its metrics, its first prompt (up to 2,000 characters), the CLI's session summary, subagent task descriptions, skill names and tool-call counts. It does not send the transcript.
- Project search indexes each analyzed conversation so teammates can find prior work. The indexed document is the analysis plus the prompts and responses visible under the mode: under
structured, prompts and subagent output; underfull, assistant responses too. Semantic search embeds that text with crewkit's embedding provider. Conversations attributed to a non-public repository are not indexed. - Correction detection is off unless an org admin turns it on. It reads the visible transcript and sends short windows around likely self-corrections to Claude Haiku 4.5.
- Convention override resolution sends the visible transcript to Claude Haiku 4.5 to decide whether a challenged convention was followed.
- Convention checks match the code in each edit against your project's conventions. They run on crewkit's servers with no LLM. They read only hook-event tool inputs, which keep edit contents only under
fullin a hosted organization.
Three more features send conversation text to Claude Haiku 4.5. They skip sensitive and resident conversations, conversations attributed to a non-public repository, and users who have not accepted the acceptable-use policy. Under minimal there is no first prompt or summary for them to send.
- Blueprint matching: when a conversation ends in a project with an active Blueprint, its short summary (or, when there is none, its summary cut at 500 characters) and its first prompt cut at 500 characters are compared with the open Blueprint tasks.
- Team digests: the daily digest is written from each contributor's conversation analysis, summary or first prompt, up to 400 characters per conversation.
- Shadow replay: when a shadow replay of a resource version is run, the first prompts of recent conversations that used it are replayed, and the prompt, summary and replay output are stored for the replay's results. These copies are on the retention sweep.
Some features need a specific mode:
- JSONL export of a conversation requires
full. - Share links with transcript or full access are refused under
minimal.
Sensitive sessions
Starting a session with crewkit code --sensitive marks the conversation sensitive.
In a hosted organization, the transcript and hook events are still sent and stored under the org's capture mode. The conversation is then excluded from session analysis, project search, correction detection and convention override resolution, and no one else can create a share link for it. On the machine, the CLI turns off the LLM gateway, OpenTelemetry per-request records, session summaries and prompt-driven document search for that session.
Data residency
When an organization keeps its data resident, the CLI sends transcript and hook-event content to the organization's own data plane, applying the capture mode there too; under minimal it also withholds the first prompt. crewkit receives hook events reduced to the minimal shape described above, so session start and end, subagent start and stop, stop, notification, permission-request, compaction and model-switch events still arrive unchanged; it stores them minus the fields listed under What crewkit stores and minus subagent task descriptions and workflow names. It stores no transcript text, and none of the analysis above runs. If the data plane cannot be reached, or the session is sensitive, the content goes nowhere: it never falls back to crewkit.