A gamified desktop client for GitHub Copilot
Turn every AI interaction into a slot-machine experience β track tokens, hit milestones, level up, and make coding with Copilot feel like winning.
Copilot Tokens wraps the full power of GitHub Copilot's agentic coding assistant inside a desktop app that makes every session feel alive. It's not a toy β underneath the animations is a complete multi-panel AI coding environment with tool permissions, diff viewing, git integration, and session replay. The gamification layer sits on top, giving you real-time feedback on how you and the AI are working together.
Watch the agent review code changes, provide feedback, and the full tool execution pipeline in action.
review-720.mov
One click to skip all permission prompts. The satisfying toggle, the flash β and then the agent runs free.
yolo-720.mov
Hit milestones, earn badges, and level up across 5 categories. Every session adds to your progress.
achievements-720.mov
Toggle SDK capabilities on and off β reasoning chains, custom tools, infinite sessions, hooks, and more. All configurable from the Settings panel.
settings-720.mov
What happens when you hit 1,000,000 tokens? Find out.
1million-720.mov
- Agentic coding powered by the
@github/copilot-sdkβ file edits, shell commands, web fetches, and more - Multi-panel chat with draggable split panes for parallel conversations
- Tool permission system with YOLO mode for the brave
- Model selector with live context window tracking
- MCP server support for extensible tool integrations
- Custom agents β pick from presets or create your own personas with tailored system prompts
Every feature toggleable from Settings β turn things on and off to match your preferences:
- Reasoning chains β stream the model's chain-of-thought in a collapsible thinking panel with effort selector (low β max)
- Ask user flow β the agent asks clarifying questions mid-task with interactive choice buttons
- Native tools β desktop notifications, clipboard read/write, system info, app launching, sound playback via
defineTool() - Infinite sessions β conversations never die; auto-compaction keeps the context window managed
- Session hooks β pre/post tool hooks, prompt validation, error recovery, session summaries
- Session events β error banners, model change notifications, truncation warnings, shutdown report cards
- Real-time odometer counters for input tokens, output tokens, and totals
- Context window progress bar showing actual session utilization with compaction awareness
- Git stats β files changed, lines added/removed β polled live from your working directory
- 100 levels across 5 categories: tokens, messages, tool calls, files, and lines changed
- 7 tiers from Novice to Legendary β all category bars must fill to level up
- Milestone celebrations at token/file/line thresholds with sparkle, confetti, and jackpot effects
- Level-up overlays with animated fanfare
- Neon Arcade β dark GitHub palette with neon glows and particles
- Retro Casino β warm reds and golds with a vintage feel
- Minimal β clean and distraction-free
- Create your own themes, milestone packs, and sound packs in the Pack Studio
Every sound is synthesized at runtime β no audio files. Lever pulls, token ticks, milestone chimes, jackpot fanfares, and celebration sequences are all generated from oscillators and envelopes using the Web Audio API.
- Every session is automatically recorded β messages, tool calls, stats, and timing
- Browse past sessions or resume SDK sessions with full conversation history
- Full replay with timeline scrubbing
- Reads under your working directory auto-approve
- Writes, shell commands, and URL fetches prompt for approval
- "Always allow" rules persist across sessions
- YOLO mode bypasses all dialogs (with a satisfying toggle sound)
src/
βββ main/ Electron main process
β βββ copilot-service SDK wrapper β sessions, streaming, tools, hooks, agents
β βββ permission-service Tool permission rules & evaluation
β βββ auth-service GitHub OAuth Device Flow + gh CLI detection
β βββ stats-service Lifetime stats, streaks, level progress
β βββ pack-service Custom milestone/sound/theme pack CRUD
βββ preload/ Context-isolated bridge
β βββ preload 13 typed APIs: copilot, stats, git, auth, model,
β settings, features, sessions, agents, pack, mcp, cwd, util
βββ renderer/ React 19 + Tailwind 4 + Motion
βββ App Root β panels, modals, state orchestration
βββ components/
β βββ ReelArea Animated chat feed (30+ event types)
β βββ TokenDashboard Live counters & context progress
β βββ SplitLayout Multi-panel with draggable dividers
β βββ PermissionDialog Tool approval UI
β βββ Settings General, SDK Features, System Prompt tabs
β βββ AgentPicker Custom agent personas & presets
β βββ HooksIndicator Hook pipeline activity display
β βββ PackStudio Theme/milestone/sound editor
β βββ SessionBrowser Past sessions + SDK session resume
β βββ DiffViewer Unified diff rendering
β βββ tiles/ 16 per-tool UI components
β βββ ReasoningTile Chain-of-thought streaming
β βββ AskUserTile Interactive choice buttons
β βββ SessionEventTiles Error/compaction/shutdown banners
β βββ NativeToolTiles Notification/clipboard/system info
β βββ SqlTile, MemoryTile, SubagentTile, SkillTile
β βββ BashTile, FileEditTile, FileReadTile, WebFetchTile...
βββ lib/
βββ level-system 100-level polynomial progression
βββ milestones Threshold-based achievement triggers
βββ sound-manager Web Audio procedural synthesis
βββ themes CSS variable-driven theming
βββ tile-registry Plugin-style tile registration
βββ party-bus Cross-component event pub/sub
- Three-process Electron architecture β main (Node.js), preload (context bridge), renderer (browser). All IPC is typed end-to-end.
- No external audio files β all sounds are procedurally generated with the Web Audio API.
- CSS variable theming β themes swap a set of CSS custom properties; components reference variables, never hard-coded colors.
- Event-driven gamification β a lightweight pub/sub bus (PartyBus) decouples game events from UI, so milestones, level-ups, and celebrations trigger without tight coupling.
- Everything is toggleable β every SDK feature (reasoning, tools, hooks, agents, sessions) can be turned on/off from Settings without restarting the app.
- Persistent state β auth, permissions, stats, packs, feature flags, and level progress all persist via
electron-store.
- Node.js 20+
- A GitHub account with Copilot access
- The GitHub Copilot CLI installed (
copilotin your PATH)
npm install
npm run startOn first launch, you'll authenticate via GitHub OAuth Device Flow (or it picks up your existing gh CLI session).
# Package the app
npm run package
# Create platform-specific installers
npm run make- Create a component in
src/renderer/components/tiles/ - Export from the barrel
index.ts - Register in
src/renderer/lib/register-tiles.tswith the tool name as key
Create themes in the Pack Studio or register them programmatically. A theme is a set of color tokens and effect flags:
{
name: 'my-theme',
label: 'My Theme',
colors: { bgPrimary, bgSecondary, border, textPrimary, textSecondary,
accentGold, accentPurple, accentBlue, accentGreen, accentRed },
effects: { neonGlow: true, particles: false }
}Define milestones that trigger at token, file, or line thresholds with visual effects (sparkle, banner, confetti, jackpot, mega) and sound cues.
Create agent personas from the Agent Picker or via the agentsAPI. Each agent gets a name, description, system prompt, and optional tool restrictions.
The app registers Electron-native tools that the AI agent can call: desktop notifications, clipboard read/write, system info, URL opening, and sound playback. Add your own in buildNativeTools() in copilot-service.ts.
| Layer | Technology |
|---|---|
| Runtime | Electron 40 |
| Bundler | Vite 7 + Electron Forge |
| Frontend | React 19, Tailwind CSS 4, Motion |
| AI | @github/copilot-sdk |
| Persistence | electron-store |
| Language | TypeScript (strict) |
MIT