HYPER-KIT ยท arcade power-up cartridge for HYPER TERMINAL
INSERT COIN ยท VERTICAL TABS ยท NEON ACCENTS ยท NOW PLAYING
One cartridge. No plugin soup. Turns Hyper into a vertical arcade HUD โ every module toggles from one config block.
- VERTICAL TABS โ dual-row HUD, live cwd (OSC 7), agent icons, pane-count badges, drag & drop reorder, resizable dock
- CLOSE GUARD โ confirms before closing a tab/window still running a command (native dialog)
- INVENTORY PANEL โ probes 87 tools, agents, runtimes & languages
- STATUS PANEL โ Wi-Fi, throughput, battery, CPU, RAM, dir, clock
- EXPLORER โ whole-disk folder tree from the status panel, opens a new tab at any folder, pin to bookmark
- BOOKMARKS โ pinned folders as a grid, one click opens a new tab there
- NOW PLAYING โ pick any playing app: cover, transport, volume slider (browser tabs too)
- AGENT MONITOR โ popup cards for opencode permission requests; per-agent on/off, scoped to this Hyper window by default (mDNS + port scan)
git clone https://github.com/jonaskahn/hyper-kit.git ~/.hyper_plugins/local/hyper-kit
cd ~/.hyper_plugins/local/hyper-kit
npm install && npm run buildAdd to ~/.hyper.js, quit & relaunch Hyper (Cmd + Q):
localPlugins: ['hyper-kit'],All knobs under hyperKit in ~/.hyper.js:
hyperKit: {
leftPanel: { enable: true, envPanel: true, mediaPanel: { enabled: true } },
bottomPanel: true,
topPanel: { enabled: true, runningCat: true }, // running cat
explorer: true,
bookmarks: true,
paneCountBadge: true,
agentIcons: true,
newTabSameDir: true,
confirmClose: true,
agentMonitor: {
enabled: true,
popup: true,
scope: 'self', // 'all' | 'hyper' | 'self'
optimistic: true,
agents: { // per-agent monitor toggle
opencode: true,
claude: true,
codex: true,
agent: true, // cursor agent CLI (also matches 'cursor')
agy: true,
// everything else defaults off: gemini, copilot, aider, amp, goose,
// devin, qwen, kiro, kimi, openhands, zed, windsurf, trae
},
},
},agentMonitor.scope decides which opencode instances get caught:
'self' (default) only this Hyper window's tabs, 'hyper' any Hyper
instance, 'all' every terminal on the machine. agentMonitor.agents
turns the monitor on per agent; optimistic: true treats an unreachable
reply (request already answered another way) as accepted โ any button
closes the card instead of erroring.
agentMonitor.persist keeps a permission card on screen until you answer.
heartbeatSec (15) = rescan cadence; debounceMs (150) = scan coalescing.
Without the OSC 7 hook, tab attribution falls back to the unique opencode tab.
| shell | hook |
|---|---|
| zsh | precmd() { printf '\e]7;file://%s%s\a' "$HOSTNAME" "${PWD// /%20}" } |
| bash / git-bash | PROMPT_COMMAND='printf "\e]7;file://%s%s\a" "$HOSTNAME" "${PWD// /%20}"' |
| powershell | function global:Set-Osc7 { $p = $PWD.Path -replace ' ', '%20'; Write-Host "e]7;file://$env:COMPUTERNAME$pa" -NoNewline }; Set-Alias cd -Value Set-Osc7 -Force |
npm run build # compile TS โ dist/
npm run test # vitest suite
npm run check # typecheck + lint + format + tests + buildnpm run check is CI's gate. Strict mode: no unused exports, locals or params.
| symptom | fix |
|---|---|
| no tab bar | npm install && npm run build, relaunch Hyper |
| plugin not loading | folder must be named exactly hyper-kit |
| stale UI | full quit Cmd + Q โ config doesn't hot-reload |
| build errors | Node 18+, delete node_modules + dist, reinstall |
Input freeze while a command runs (Hyper 3.4.1 / Electron 20.3.6 on macOS).
Hyper's bundled Electron is broken in a fundamental way on current macOS:
the moment a foreground command runs (even a bare sleep), the window
permanently stops receiving keyboard and mouse input. Reproduced with the
plugin completely removed (localPlugins: [], default config), with both
WebGL and canvas renderers, and with any config โ so this is a Hyper bug,
not a plugin bug. There is no workaround from a plugin; report it upstream
(https://github.com/vercel/hyper/issues) and/or try Hyper canary (newer
Electron). Hyper 3.4.1 is the latest stable release.
Cancelling the close guard's dialog freezes the terminal (same root
cause). The confirmClose guard prevents the native window close and
shows a dialog; because of the Electron bug above, any window that survives
a native close attempt also dies to input. If you cancel the dialog while a
tab is running, the terminal stops responding until the window is actually
closed. Quitting (force-quit or the dialog's confirm button) still works.
The tab-level close guard (TERM_GROUP_EXIT + HTML dialog) never touches
the native window and is unaffected.
GAME OVER ยท INSERT COIN TO CONTINUE

