What is sent where
Unless you pass --no-llm, friskme runs one analyzer CLI: claude -p (calls go to Anthropic under your own Claude login), codex exec (calls go to OpenAI under your own Codex login) or pi -p (calls go to the provider of the model pi uses, under your own pi login for that provider). Any analyzer labels sessions from every agent, so with --analyzer codex your Claude Code and Pi cards go to OpenAI, and with claude your Codex and Pi cards go to Anthropic. Nothing goes anywhere else: no telemetry, and no FriskAI endpoint.
friskme shows you the planned number of calls and asks before making any. It makes three kinds of call:
-
Labeling: batches of up to 30 session cards. A card holds:
- the first prompt you typed, cut to 600 characters
- up to 5 follow-ups, 200 characters each
- the project folder’s name (not its path)
- tool names with coarse details (
Bash:git,Edit:ts,exec_command:package_manager,apply_patch:ts,bash:git,edit:ts,mcp:github) - error and interrupt counts
It never includes tool output, file contents, command lines or session ids.
-
Grouping: only the short labels from step 1 and their counts.
-
Skill drafting: 3 to 5 of the same cards, for each repeated workflow.
Before a card is cached or sent, friskme redacts everything the sensitive-data scan finds (secrets and personal data, see below), plus bearer tokens, .env-style *_KEY=/*_SECRET=/*_PASSWORD= lines and long random strings. The report’s “Method and caveats” section lists how many of each it redacted.
Every claude -p call runs isolated:
claude -p --no-session-persistence --safe-mode --strict-mcp-config \
--tools "" --disallowedTools "mcp__*" --max-turns 1 \
--system-prompt <friskme's> --output-format json --json-schema <schema> --model haiku
It runs from an empty temp directory, with the prompt on stdin. These flags mean:
- No transcripts left behind: friskme’s calls don’t add sessions to the folder it reads.
- Nothing to act with: the model has no tools, so it cannot act on anything written in your transcripts.
- No customizations: your hooks, CLAUDE.md, plugins and MCP servers are not loaded.
--bare is not used because it does not work with subscription login.
Every codex exec call runs as isolated as Codex allows:
codex exec --ephemeral --ignore-user-config --ignore-rules --skip-git-repo-check \
--sandbox read-only --color never --cd <empty temp dir> \
-c approval_policy="never" -c web_search="disabled" -c project_doc_max_bytes=0 \
-c history.persistence="none" -c features.shell_tool=false -c features.multi_agent=false \
-c features.apps=false -c features.view_image=false -c features.memories=false \
--output-schema <schema file> --output-last-message <answer file> [--model <name>] -
- No rollouts left behind:
--ephemeralwrites no session to the folder friskme reads, and history is off. - Nothing to act with: web search, the shell tool, subagents, apps and image viewing are off. Codex has no switch that removes every built-in tool, so a read-only sandbox, no approvals and an empty working folder back that up.
- No customizations: your
config.toml(MCP servers, plugins, profiles), execpolicy rules and AGENTS.md are not loaded. Your login still is. codex exechas no system-prompt flag, so friskme’s instructions go at the top of the prompt on stdin. The schema and answer files are written to a separate temp folder and deleted after each call.codex execdoes not report cost, so the report says friskme’s own calls are unpriced.
Every pi -p call runs isolated:
PI_TELEMETRY=0 PI_OFFLINE=1 pi --print --mode json --no-session --no-tools \
--no-extensions --no-mcp --no-skills --no-prompt-templates --no-themes \
--no-context-files --no-approve --offline \
--system-prompt <friskme's> --thinking off [--model <name>]
It runs from an empty temp directory, with the prompt on stdin. These flags mean:
- No sessions left behind:
--no-sessionkeeps the session in memory, so nothing lands in the folder friskme reads. - Nothing to act with:
--no-toolsturns off every built-in, extension and MCP tool. - No customizations: your extensions, MCP servers, skills, prompt templates and AGENTS.md/CLAUDE.md are not loaded, and trust-gated project files are ignored. Your provider login still is.
- Only the model call goes out:
--offlineandPI_TELEMETRY=0turn off pi’s model-catalog refresh, version check and install telemetry. - Thinking off: labeling doesn’t need it. Name a level in the model (
--model sonnet:low) to keep one. - pi has no structured-output flag, so the JSON schema goes at the end of the prompt, and friskme checks every answer against it, retrying once.
- pi reports what each call cost, so the report prices friskme’s own calls.
- Before the first call, friskme runs
pi auth checkfor the provider in--model(provider/id), or else for thedefaultProviderin pi’ssettings.json. That one field is all friskme reads from pi’s config.
A typical month (about 50 sessions) takes 3 to 7 calls, a few cents on Haiku at API list price.