Codefinds — Typing & AI Code Tracker
See exactly how your code was written — typed, pasted, or AI-generated.
Features
- Live gutter highlights — Green = typed, amber = pasted, purple = AI-assisted, gray = bulk edit
- Status bar — Real-time percentage breakdown at a glance:
⚡ 62% typed · 18% pasted · 20% AI
- Sidebar dashboard — Donut chart, timeline, per-file breakdown, and live activity log
- Classroom mode — Teachers can monitor student coding activity in real time via a local server
- WPM tracking — Rolling words-per-minute counter
- Session persistence — Survives restarts; auto-prunes data older than your retention setting
- Export reports — Dump session data as Markdown or JSON
How It Works
Codefinds listens to VS Code's document change events and classifies each edit using a multi-signal heuristic:
| Category |
Signal |
| Typed |
Single-character insertions at human typing speed (30–500 ms intervals) |
| Pasted |
Multi-character single-event insertion that matches clipboard content |
| AI-assisted |
Large insertion (>20 chars) not matching clipboard, no active selection, AI extension detected |
| Bulk edit |
Multiple ranges changed in one event (multi-cursor, format-on-save, find-replace) |
Important: AI detection is heuristic-based, not definitive. It infers intent from patterns — it cannot read Copilot's mind. See Known Limitations.
Classroom Mode
Codefinds includes an optional classroom feature for educators:
- Students connect to a teacher's local server using a short classroom code
- Teachers see a live dashboard of all student activity — typing rate, paste %, AI %, flagged students
- Only metadata is transmitted (character counts and classifications) — actual code is never sent
- Each student gets a unique identity per workspace and per classroom, so sessions stay isolated
To use classroom mode:
- The teacher runs the included
codepulse-server Node.js server (node server.js)
- Students use
Codefinds: Connect to Classroom from the Command Palette and enter the server URL, their name, and the classroom code
- The teacher opens
http://localhost:3000 to view the live dashboard
Configuration
| Setting |
Default |
Description |
codefinds.enabled |
true |
Master on/off switch |
codefinds.showGutterDecorations |
true |
Show color-coded line highlights |
codefinds.showStatusBar |
true |
Show stats in status bar |
codefinds.aiDetectionSensitivity |
"medium" |
low / medium / high — how aggressively to flag AI |
codefinds.excludePatterns |
["*.min.js", ...] |
Glob patterns for files to skip |
codefinds.sessionRetentionDays |
7 |
Days of history to keep |
codefinds.classroomServer |
"localhost:3000" |
Address of the classroom server |
codefinds.studentName |
"" |
Your display name in classroom sessions |
codefinds.classroomFlagThreshold |
40 |
AI % above which students are flagged on the teacher dashboard |
Commands
| Command |
Description |
Codefinds: Toggle Line Highlights |
Show/hide gutter decorations |
Codefinds: Show Dashboard |
Open the sidebar dashboard |
Codefinds: Reset Session Data |
Clear all tracked data for this workspace |
Codefinds: Export Report |
Export session as Markdown or JSON |
Codefinds: Pause/Resume |
Temporarily pause tracking |
Codefinds: Connect to Classroom |
Join a teacher's classroom session |
Codefinds: Disconnect from Classroom |
Leave the current classroom session |
Access all commands via the Command Palette (Cmd+Shift+P / Ctrl+Shift+P).
Privacy
In standalone mode, all data stays on your machine — stored locally in VS Code's workspace storage, never transmitted anywhere.
In classroom mode, only metadata is sent to your teacher's server: character counts and edit classifications (typed / pasted / AI). Your actual code is never transmitted.
No telemetry, no analytics, no crash reports — in either mode.
Known Limitations
- AI detection is heuristic only. It cannot reliably distinguish between a snippet expansion, a multi-character autocomplete, a large paste that doesn't match the current clipboard, and an actual AI suggestion. It makes an educated guess based on size, timing, and whether AI extensions are installed.
- Clipboard check is asynchronous. There's a small window where a paste might briefly appear as "AI-assisted" before the clipboard is read and the classification is updated.
- Undo/redo sequences are skipped and do not re-classify lines.
- Formatter on save is detected heuristically and classified as
bulk_edit. May occasionally misfire on legitimate multi-cursor edits.
- Snippet expansions (including Emmet) may be classified as
ai_assisted if they exceed the AI threshold size.
- Auto-closing brackets and quotes are classified as
typed with slightly lower confidence.
License
MIT — see LICENSE
| |