Your stats stay on your machine.
Toishi records how you work, so it has to be safe to run. It keeps counts and labels, encrypts them with a key only you can open, and lists everything that leaves your machine.
What it records
Kept
- How many lines each change added, and who most likely wrote them
- Labels for the kind of work, such as a language, a framework or a SQL join
- Hashes of lines, so a line can be recognised later without storing it
- How many keys you pressed, by group (typed, deleted, pasted), if you allow key counting
Never kept
- Your code
- Which keys you pressed or what you typed
- The text of your prompts to AI tools
Encrypted with a key only your password opens.
The recorder can lock new records but cannot read them back. Opening them takes your password, or the recovery code you get once when you set it.
Your Toishi account is separate. It tells our server who you are and which plan you have, and it cannot open your data.
Every call that leaves, in a list.
AI features are off until you switch them on. They use open-weight models through our gateway, which stores nothing. Recording and sorting your work never use a remote AI.
Every call that leaves your machine is logged in the app, including model downloads. Open one to see exactly what was sent.
Sent from this machine
- Oct 21, 2026, 2:48 PMhttps://app.toishi.example/api/timeline/describe
What was sent
{ "promptVersion": 4, "repository": "acme-api", "branches": [ "main" ], "startedAt": "13:36", "weekday": "Wednesday", "minutes": 71, "lines": { "you": 42, "ai": 251, "notTyped": 0, "unknown": 0, "removed": 58 }, "yourShare": 0.14334470989761092, "tools": [ "Claude Code" ], "prompts": 1, "averagePromptCharacters": 508, "commands": [ { "category": "read", "count": 3 }, { "category": "test", "count": 1 }, { "category": "build", "count": 0 } ], "tasks": [ { "name": "API endpoints", "lines": 176 }, { "name": "Testing & mocking", "lines": 75 }, { "name": "Schema & migrations", "lines": 42 } ], "constructs": [], "frameworks": [ { "name": "Tokio", "lines": 251 }, { "name": "Axum", "lines": 176 } ], "libraries": [ "axum", "tokio" ], "languages": [ { "name": "rust", "lines": 251 }, { "name": "sql", "lines": 42 } ], "workTypes": [ "Server & API", "Tests", "Database" ], "fileRoles": [ { "role": "app", "files": 2 }, { "role": "test", "files": 1 } ], "changeKinds": [ { "kind": "modification", "count": 4 }, { "kind": "addition", "count": 2 } ], "files": [ { "path": "src/routes/orders.rs", "added": 176, "removed": 48, "mainlyBy": "ai" }, { "path": "tests/orders.rs", "added": 75, "removed": 3, "mainlyBy": "ai" }, { "path": "migrations/0007_order_status.sql", "added": 42, "removed": 7, "mainlyBy": "you" } ], "commits": [ { "subject": "Add order status column", "filesChanged": 3, "linesAdded": 293, "yourShare": 0.14334470989761092 } ] } - Oct 18, 2026, 3:59 PMhttps://app.toishi.example/api/sharpen/project
What was sent
{ "promptVersion": 3, "area": { "name": "Data fetching", "dimension": "task" }, "language": "typescript", "stack": [ "React", "TanStack Query", "TanStack Table", "Zod", "Vitest", "Testing Library" ], "level": null, "experience": null, "focus": null } - Oct 1, 2026, 4:00 PMhttps://huggingface.co/jinaai/jina-embeddings-v2-base-code/resolve/516f4baf13dec4ddddda8631e019b5737c8bc250/onnx/model_quantized.onnx
What was sent
{ "download": "embedding model file (nothing about you is sent)" } - Oct 1, 2026, 4:00 PMhttps://huggingface.co/jinaai/jina-embeddings-v2-base-code/resolve/516f4baf13dec4ddddda8631e019b5737c8bc250/tokenizer.json
What was sent
{ "download": "embedding model file (nothing about you is sent)" }
Team stats are totals only.
On a team plan, the app sends one fixed report a day, split between two servers run by different parties. Neither can read it alone. Leads see totals for groups of five or more, never a single person.
A solo account never sends team stats.
Toishi for teams