Insaidy for VS Code
Personal coaching for your AI coding workflow. Review local activity, try one daily practice and choose what aggregate information to share.
Start with a standard Free personal account at Insaidy. Install from this store, then open the Insaidy Activity Bar and sign in. For manual or offline installation, use the install guide.
Insaidy reads supported local assistant history, including Claude Code, Codex and GitHub Copilot. These names describe compatibility; Insaidy is an independent Velantix product and is not affiliated with their vendors.
The application address is https://app.insaidy.com. Sign in before the plugin
reads local assistant sessions. Open Insaidy from its Activity Bar icon; report
and sandbox actions become available after sign-in. Published by Velantix;
copyright holder Velantix EOOD. The public extension ID is velantix.insaidy. Uninstall the previous internal test extension and reload before installing this release. Sign in again and revoke the old device on the web Account page.
Product · Support ·
Privacy notice · Terms.
Data collection: account-linked aggregate measurements and allowlisted device/reporting metadata are sent to your selected Insaidy workspace after confirmation. After the first confirmed report, VS Code sends periodically while signed in; sign out to stop. Named reports are personal data. Raw prompt text, responses, code, file paths and project names are excluded. Read the privacy notice before sharing.
- Local first. The plugin reads your assistants' local logs on this computer and computes the numbers here.
- Only aggregates leave the computer. Counts per day, assistant and editor, and ratios — never prompts, responses,
code, file paths or project names. Model names are sent only when they are public model ids (a fixed list in the
plugin); a name you chose (a custom deployment, a local model) is sent as
other. Insaidy: Show what will be sent
opens, read-only, the JSON the next report would post, indented for reading (nothing is sent); Insaidy: Show what is
sent opens the last one that was.
- One practice a day. The Today view compares yesterday with your own pace and suggests one practice with a
first step. Mark a suggestion Not applicable and it comes back after 30 days, or sooner if the habit gets worse.
- Sandbox projects. Insaidy: Mark project as sandbox leaves experiments and demos out of the report. The list is
~/.aicoach/sandbox.json; if that file exists but cannot be read (permissions, damaged JSON), no report is sent until
it is fixed or deleted — the view says so — so a sandbox project never slips back in.
- Numbers only. Before anything is sent, the report is checked against the same report schema the server applies
(every number finite and in range, every name from a fixed list), and only what passes is sent. A report that does
not pass is held, with the reason shown in the view and in Show what will be sent.
Getting started
- The default server is https://app.insaidy.com. Sign in there through your browser.
Explicit
coach.serverUrl overrides remain available for self-hosting and isolated
localhost development. When changing a previously configured server, revoke the
old device and sign in again; credentials are bound to their original server.
- Run Insaidy: Sign in. Your browser opens; choose the workspace (personal or your organisation) to report to.
- The first report waits for you: the dialog first offers only What will be sent (the exact report, read-only);
after that it offers Send, which sends exactly the bytes you saw — if your logs changed in between, the new
report is shown again first. After that, the report is sent on start, every
coach.reportIntervalHours hours, and with Insaidy: Refresh / Send
report now.
Sign in before any assistant sessions are read. The signed-out panel offers only
Sign in and Connection settings. Report preview and sandbox commands also
require sign-in when invoked from the Command Palette or Explorer. Live capture
waits for sign-in and explicit consent; it pauses on sign-out and resumes after
signing in again. Resetting/restoring a previous capture configuration remains
available for cleanup without sign-in.
Remote windows
The extension runs on your local computer (extensionKind: ["ui"]): it reads this computer's logs and receives the
sign-in on this computer's loopback address. Copilot Chat in a remote window is counted — VS Code keeps its chats on
your computer. Claude Code sessions that run inside the remote host (Remote-SSH, WSL or containers) are not read: their
transcripts are on that host. A remote window's folder can be marked as a sandbox from its Explorer; it is kept as its
vscode-remote:// address.
Sign in again to switch to another workspace. coach.language switches between English and Bulgarian (not set: the
language VS Code is shown in). Days are counted in the time zone of your account (UTC until one is set).
Live capture (optional)
coach.liveCapture (user settings only) points Claude Code's and Copilot Chat's own OpenTelemetry export at this
plugin on 127.0.0.1. It keeps compact events on this computer (numbers, model and tool names, accept/reject
decisions — no prompt content); the report carries only their totals, with tool decisions in a fixed set of categories.
After a confirmation it changes the env block of ~/.claude/settings.json and Copilot's github.copilot.chat.otel.*
user settings. Those three Copilot settings are application settings that Settings Sync would copy to your other
computers: while capture is on they are listed in settingsSync.ignoredSettings (only the entries it added are
removed again when it is turned off). That list itself is synced (VS Code does not let it be ignored): your other
computers then keep those three settings to themselves too. If one of them takes the entries out, they are put back
here within 10 seconds (1.5 s once the list stops changing), and live Copilot capture is not sent until then (its
events stay on this computer and go with a later report). What remains possible: in that gap Settings Sync itself may
upload this computer's three Copilot settings (enabled, file, and the export file path under ~/.aicoach), and your
other computers would then receive them. The plugin cannot see or stop a push Settings Sync makes; it only shortens
the gap.
With sandbox projects, live events are matched to sessions by session id and a sandbox session's events are left
out. Events that cannot be matched (Copilot's carry no session id) could be sandbox work, so then the report carries
no live totals at all, and the view says so.
It refuses, changing nothing, when telemetry is already configured: any OTEL_* / CLAUDE_CODE_ENABLE_TELEMETRY
in the editor's environment, in ~/.claude/settings.json or in Claude Code's managed settings. Copilot is left alone
(only Claude is captured) when its export is already set up or would include content.
What it changes is recorded in ~/.aicoach/vscode-live-capture.json before the first change; a failure half-way is
rolled back, and an interrupted change is undone on the next start. Values you already had (equal to what live
capture would write) are not touched and stay when it is turned off.
Copilot exports to ~/.aicoach/vscode-live/copilot-otel.jsonl. The file is rotated by renaming it once it is large
(never truncated while Copilot may be writing), and the old part is deleted only after it was read to the end.
One VS Code window receives at a time (~/.aicoach/vscode-live.lock); every other window checks once a minute and
takes over when the receiving window closes. A window never displaces a receiver that still has the port.
Turning it off restores the previous values — except ones you changed yourself afterwards, which are left as they are.
If a value cannot be written back (e.g. a settings file is read-only), it stays in the journal and is retried on the
next start; you are told which.
Live capture is one per computer. While it is on (or still being undone) in another VS Code profile, turning it on
is refused before anything is asked or changed. If that profile no longer exists, Insaidy: Reset live capture
undoes what can be undone from here and names the other profile's Copilot settings to remove by hand.
Uninstalling restores ~/.claude/settings.json and deletes ~/.aicoach/vscode-live/ (the vscode:uninstall
hook runs on the next VS Code start). VS Code's own settings cannot be changed from that hook — the confirmation
says so: turn live capture off before uninstalling, or remove github.copilot.chat.otel.enabled,
github.copilot.chat.otel.exporterType and github.copilot.chat.otel.outfile from your user settings by hand,
and the same three entries from settingsSync.ignoredSettings (a synced list: removing them on one computer removes
them on the others too). In that case the journal
~/.aicoach/vscode-live-capture.json stays, with what those settings were before: installing the plugin again
restores them from it; delete it once you have removed them by hand.
Files on this computer
Everything the plugin keeps outside VS Code's own storage is in ~/.aicoach, readable only by you (files 0600,
folders 0700; files left by older versions are made private on start). Neither of the two below ever leaves the
computer.
vscode-claude-transcripts.v<N>.json — what the plugin parsed from each Claude Code transcript, so that a
transcript that has not changed is not read again (<N> is the version of the counting rules; each version keeps its
own). It holds no paths (a hash of each), no prompt text, no command lines, no skill, MCP server or slash-command
names and no private model names — only the counts the metrics use, the request ids that tell a copied request from
its original, and the session's project folder (for the context-file check and the sandbox). It is rebuilt from the
transcripts every 7 days. If it cannot be read or written, every transcript is read in full and the report goes
ahead; the problem is written to the log once.
vscode-ledger.json — what this computer has reported, per account: for each day and source, a hash of each session
counted in it, and for each session, hashes of the model requests it was reported with. With it, a day whose logs
have lost a session since is left out of a report instead of replacing the complete day the server has, and a
request keeps the session it was first reported under. Entries older than 400 days are dropped. If it cannot be
written (a read-only home folder, a full disk, a file held by an antivirus scan), reports still go out: every day is
sent as possibly incomplete, so the server keeps any larger day it already has and deletes nothing; the recount
waits for a report the ledger could record, and the problem is written to the log once.
Both are removed on uninstall (installing again starts a new ledger, which sends every earlier day as possibly
incomplete: the server keeps a larger day it already has). These stay after uninstalling, because other plugins on the
computer may use them: machine-id, sandbox.json (and vscode-live-capture.json in the case above). Delete
~/.aicoach yourself if you want them gone.
Accounts on one computer
The device token and the account it belongs to are one secret shared by every VS Code window. Signing in, signing out
or switching in one window shows in the others; a token that is replaced is revoked, or kept and retried until the
server confirms. Changing coach.serverUrl signs out and revokes the token at the old server. Dismissal notes stay with
the account that wrote them. The practice notice is shown once a day on the computer, whichever profile is open.
When the server refuses:
- 401 (the sign-in expired — at most 180 days, 90 without use — the account was disabled, or the computer was
signed out on the web): the token is dropped (and its revocation retried), the live-capture journal is kept, and
Signed out by the server — sign in again is shown once, in the window that got it.
- 429 / 503 with
Retry-After (at most 120 reports an hour from a person's computers to one workspace, 240 to all
their workspaces together, or a busy server — a small one stores one
report at a time): no report before that time, kept across restarts; never retried at once. The report then goes
with the next scheduled one (or Send report now after that time).
- 409
{ machines } (the person's limit of computers: 10 in the workspace, or 20 over all their workspaces with
scope: 'account'): the message names the limit and its scope (this organisation, the personal workspace, or all
of them together) and Account → Your computers; no automatic report until a setting changes or the person signs in again or chooses Send report
now.
- At sign-in, 403
{ sso: true } (the organisation now requires its SSO) and 400 (no longer a member) are
explained in those words.
| |