$codehelm

Generated 2026-05-31 22:30 GMT+2 ·3 sessions ·last commit 2026-04-24

6h 26m
Active tool time
Time the agent spent running tools (edits, reads, commands) — not wall-clock.
42,889
Lines of code
Non-blank source lines across the codebase.
134
Commits
Git commits recorded (— if not a git repo).
8
Features
Distinct capabilities found, each backed by code evidence.
SUMMARYreadme.md

codehelm is a local-only web UI that manages Claude Code CLI sessions in one Chromium window, reading the ~/.claude/projects JSONL you already have and spawning real shells per tab. It streams session JSONL through a custom parser into a virtualised conversation viewer, multiplexes up to 16 node-pty terminals over an authenticated WebSocket, and schedules cron prompts into persistent server-side tabs. Everything runs in-process on 127.0.0.1 behind a one-shot token, CSRF double-submit, Host allowlist, and per-request CSP nonce.

Features 8

Multi-tab embedded terminal
Spawns up to 16 concurrent node-pty PTYs over a WebSocket, each tab with a 64KB ring buffer for re-attach across reloads.
lib/pty/manager.ts · lib/pty/spawn.ts · lib/ws/pty-channel.ts · app/(ui)/terminal/Terminal.tsx · stores/terminal-slice.ts
Session conversation viewer
Streams and parses session JSONL into 9 event types, rendering tool_use cards and Edit/Write diffs with search, filters, and outline over virtualised lists.
lib/jsonl/parser.ts · lib/jsonl/tool-pairs.ts · app/(ui)/conversation/Viewer.tsx · components/conversation/messages.tsx
Project and session discovery API
Reads ~/.claude/projects via Route Handlers, exposing projects, per-session metadata, aliases, and Markdown export endpoints.
app/api/projects/route.ts · app/api/projects/[slug]/sessions/route.ts · app/api/sessions/[id]/route.ts · app/api/sessions/[id]/export/route.ts · lib/jsonl/export-md.ts
Scheduled cron prompts
Binds cron expressions to persistent tabs and writes prompts into a live Claude PTY via croner, gated by a hybrid ready-check and per-tab mutex.
lib/cron/scheduler.ts · lib/cron/executor.ts · lib/cron/tab-lock.ts · lib/pty/ready-check.ts · app/jobs/JobsView.tsx
Persistent server-side tabs
Registers PTYs in a server-side store that auto-respawns at startup so tabs survive browser reload and process restart.
lib/pty/persistent-tabs-registry.ts · lib/pty/persistent-tabs-service.ts · lib/pty/persistent-tabs-store.ts · app/api/persistent-tabs/route.ts
Localhost security hardening
Enforces a one-shot token, CSRF double-submit, Host/Origin allowlist, per-request CSP nonce, and fs.realpath path-traversal guards on the 127.0.0.1 socket.
lib/security/host-check.ts · lib/security/csrf.ts · lib/security/token.ts · lib/security/csp.ts · lib/security/path-guard.ts · middleware.ts
Live filesystem updates
Watches ~/.claude/projects with chokidar and pushes project/session add/update events over WebSocket to invalidate TanStack Query caches.
lib/watcher/chokidar.ts · lib/ws/watch-channel.ts · hooks/use-watch.ts
CLAUDE.md markdown editor
Edits per-project and global CLAUDE.md in a CodeMirror 6 editor with markdown preview split, diff-before-save, and atomic write.
app/(ui)/editor/MarkdownEditor.tsx · lib/claude-md · app/api/claude-md/route.ts · hooks/use-claude-md.ts

Stack

framework15.0.0 ui19.0.0 node-pty0.12.0 xterm.js5.5.0 ws8.18.0 watcher4.0.1 cron10.0.1 state5.0.1 query5.62.0 virtual4.12.0 zod3.23.8 tailwind4.0.0 shiki1.24.0
Production
@codemirror/commands 6.10.3 @codemirror/lang-markdown 6.3.0 @codemirror/state 6.5.0 @codemirror/theme-one-dark 6.1.2 @codemirror/view 6.35.0 @homebridge/node-pty-prebuilt-multiarch 0.12.0 @radix-ui/react-dialog 1.1.15 @radix-ui/react-popover 1.1.15 @radix-ui/react-scroll-area 1.2.10 @radix-ui/react-slot 1.2.4 @radix-ui/react-tooltip 1.2.8 @radix-ui/react-visually-hidden 1.2.4 @tanstack/react-query 5.62.0 @xterm/addon-canvas 0.7.0 @xterm/addon-fit 0.10.0 @xterm/addon-web-links 0.11.0 @xterm/addon-webgl 0.19.0 @xterm/xterm 5.5.0 chokidar 4.0.1 class-variance-authority 0.7.1 clsx 2.1.1 cmdk 1.1.1 croner 10.0.1 diff 7.0.0 lucide-react 1.8.0 next 15.0.0 pino 9.5.0 react 19.0.0 react-dom 19.0.0 react-markdown 9.0.1 react-resizable-panels 4.10.0 react-virtuoso 4.12.0 rehype-sanitize 6.0.0 shiki 1.24.0 sonner 2.0.7 tailwind-merge 3.5.0 tailwindcss 4.0.0 tw-animate-css 1.4.0 ws 8.18.0 zod 3.23.8 zustand 5.0.1
Dev
@eslint/eslintrc 3.2.0 @playwright/test 1.49.0 @tailwindcss/postcss 4.0.0 @testing-library/dom 10.4.1 @testing-library/react 16.3.2 @testing-library/user-event 14.6.1 @types/diff 7.0.0 @types/node 22.10.0 @types/react 19.0.0 @types/react-dom 19.0.0 @types/supertest 6.0.2 @types/ws 8.5.13 @vitest/ui 2.1.8 eslint 9.16.0 eslint-config-next 15.0.0 eslint-plugin-react-hooks 7.0.1 husky 9.1.7 jsdom 29.0.2 lint-staged 15.2.10 pino-pretty 13.0.0 prettier 3.4.0 supertest 7.0.0 tsx 4.19.0 typescript 5.7.0 vitest 2.1.8

Activity timeline

6h16m 2026-04-16 6m 2026-04-19 4m 2026-04-19

Language breakdown

42,889
lines
TypeScript22,69752.9%
Other14,49833.8%
Markdown3,4037.9%
CSS2,0774.8%
JSON1670.4%
JavaScript470.1%
$docs — 3,403 Markdown lines across README, spec & docs/

Top files 10

app/globals.css2,077 lines
components/conversation/messages.tsx659 lines
app/(ui)/terminal/Terminal.tsx556 lines
stores/terminal-slice.ts422 lines
app/(ui)/editor/MarkdownEditor.tsx402 lines
components/SettingsDialog.tsx377 lines
app/(ui)/conversation/Viewer.tsx365 lines
app/jobs/JobFormDialog.tsx350 lines
hooks/use-cron-jobs.ts345 lines
hooks/use-pty.ts332 lines

Sessions 3

2026-04-16
Edit
2,078 tool calls
6h 16m active
2026-04-19
Bash
183 tool calls
5m 48s active
2026-04-19
Bash
39 tool calls
3m 46s active

Commit log

GIT LOG--oneline
04-24feat(term-head): live cwd and branch updates via head-info endpoint
04-19feat(tabs): editable restart command + auto-derive from resume aliasKey
04-19feat(ui): add focus mode toggle in main panel header
04-19fix(pty): RESTART now truly restarts the backing PTY for persistent tabs
04-19fix(pty): clean WS teardown on RESTART to stop duplicated output and frozen tabs
04-19text
04-19Merge pull request #12 from bartek-filipiuk/fix/tab-sync-reconcile
04-19Merge pull request #11 from bartek-filipiuk/docs/cron-readme
04-19fix(tabs): reconcile Zustand with server on every mount + auto-respawn on attach
04-19docs: cover scheduled prompts + persistent tabs in README
04-19Merge pull request #10 from bartek-filipiuk/feat/cron-prompt-injection
04-19fix(tabs): keep terminal open on project switch + preselect project on boot
04-19fix(tabs): eager persistent-tab hydration + default title on every new tab
04-18feat(tabs): persist tab rename server-side so it survives reload
04-18fix(pty): cross-graph-safe singletons for ptyManager + registry + cron
04-18diag(tabs): log persistent-tab lifecycle + bump xterm scrollback
04-18diag(pty): surface server-sent error codes in console + terminal
04-18fix(build): mark node-pty + chokidar as serverExternalPackages
04-18docs(tabs): document persistent tabs + known follow-ups
04-18feat(tabs): promote project terminals to persistent PTYs by default
04-18feat(cron): scheduled prompts to persistent Claude Code tabs
04-18Merge pull request #9 from bartek-filipiuk/fix/terminal-split-cols-mismatch
04-18fix(terminal): sync xterm/PTY cols in split panes, kill cursor-overwrite
04-18Merge pull request #8 from bartek-filipiuk/feat/terminal-split-panes
04-18fix(terminal): drop WebGL addon (v1) + clear resize timeout on unmount
04-18perf(terminal): WebGL renderer with DOM fallback + refit on pane resize end
04-18feat(terminal): LayoutPicker toolbar (1 / 1x2 / 2x1 / 2x2)
04-18feat(terminal): PaneGrid + TabManager delegation + paneId rename
04-18feat(terminal): persist split pane sizes per layout
04-18feat(terminal): add split pane store ops (setLayout/closePane/activePane)
04-18feat(terminal): add layout + panes to TerminalTab model
04-18feat(deps): add react-resizable-panels + xterm addon-webgl
04-18Merge pull request #7 from bartlomiej-filipiuk/fix/macos-support
04-18fix(tests): resolve tmpdir symlinks for macOS compatibility
04-18fix(scripts): drop --turbopack from build; run test suites sequentially
04-18Merge pull request #6 from bartek-filipiuk/perf/prod-launcher
04-18perf(launcher): run prod build by default + prewarm + Chromium flags
04-18Merge pull request #5 from bartek-filipiuk/feat/editable-tab-title
04-18feat(terminal): inline-rename tabs with persisted aliases
04-18Merge pull request #4 from bartek-filipiuk/design/claude-design-v1
04-18feat(design): port Claude Design V1 + update Opus 4.7 pricing
04-17Merge pull request #3 from bartek-filipiuk/docs/design-brief
04-17docs: add DESIGN_BRIEF.md for Claude Design hand-off
04-17Merge pull request #2 from bartek-filipiuk/docs/readme-banner-ascii-blocks
04-17docs(readme): replace matrix banner with minimalist ASCII-block wordmark
04-17Merge pull request #1 from bartek-filipiuk/docs/readme-polish-codehelm-banner
04-17docs(readme): refresh numbers, feature table, roadmap + new banner
04-17Merge pull request #15 from bartek-filipiuk/rebrand/claude-ui-to-codehelm
04-17rebrand: claude-ui → codehelm
04-17Merge pull request #14 from bartek-filipiuk/fix/ci-integration-tests
04-17fix(ci): run integration tests serially + accept Next 15 cache header
04-17Merge pull request #13 from bartek-filipiuk/feat/docs-english-sweep
04-17docs: translate SECURITY, ARCHITECTURE, PHASE-0..7 to english
04-17Merge pull request #12 from bartek-filipiuk/feat/T28b-finalize-i18n
04-17chore: mark T28 done (tests english + guard)
04-17feat(i18n): T28 full test suite sweep to english + extend guard
04-17Merge pull request #11 from bartek-filipiuk/feat/T24-T26-cross-platform
04-17chore: mark T24 and T26 done
04-17feat(platform): T24 platform helpers + T26 claude-ui-install
04-17Merge pull request #10 from bartek-filipiuk/feat/T19-T23-terminal-cluster
04-17chore: mark T19 and T23 done
04-17feat(terminal): T19 quick-actions + T23 git branch badge
04-17Merge pull request #9 from bartek-filipiuk/feat/i18n-complete-english-only
04-17feat(i18n): T27 + T29 + guard — english-only UI
04-17Merge pull request #8 from bartek-filipiuk/feat/T21-diff-before-save
04-17chore: mark T21 done
04-17feat(editor): T21 diff-before-save modal in CLAUDE.md editor
04-17Merge pull request #7 from bartek-filipiuk/feat/T22-recent-claude-md-files
04-17chore: mark T20 and T22 done
04-17feat(editor): T22 recent CLAUDE.md files dropdown
04-17Merge pull request #6 from bartek-filipiuk/feat/T20-parent-tool-use-popover
04-17Merge pull request #5 from bartek-filipiuk/feat/T28-translate-lib-comments
04-17feat(conversation): T20 parent tool_use popover on tool_result blocks
04-17feat(i18n): T28 translate Polish comments + ResizableColumns a11y to English
04-17Merge pull request #4 from bartek-filipiuk/feat/T18-project-grouping-by-path-prefix
04-17style: run prettier over the repo
04-17chore: mark T18 done
04-17feat(sidebar): T18 project grouping by path prefix
04-17chore: mark T17 done
04-17feat(conversation): T17 timestamp display format
04-17chore: mark T16 done
04-17feat(settings): T16 default event-category filters
04-17Merge pull request #2 from bartek-filipiuk/docs/rebrand-codehelm
04-17docs: switch rebrand target from ptybook to codehelm
04-17Merge pull request #1 from bartek-filipiuk/docs/platform-i18n-plan
04-17docs: add cross-platform + english-only plan + T24-T29 queue
04-17chore: queue T16-T23 (perf-safe UX features)
04-17feat(ui): jump-to-event input + terminal clear/save buffer
04-17feat(ui): T15 replay mode — play/pause/scrub over session events
04-17feat(ui): remove conversation graph mode
04-17fix(settings): split io.ts into pure types module for client imports
04-17chore: mark T14 done
04-17feat(jsonl): T14 cost estimator
04-17chore: mark T13 done
04-17feat(conversation): T13 conversation graph mode
04-17chore: mark T12 done
04-17feat(ui): T12 toast notifications (shadcn Sonner)
04-17chore: mark T11 done
04-17feat(editor): T11 markdown preview in CLAUDE.md editor
04-17chore: mark T10 done
04-17feat(conversation): T10 diff-friendly tool_result for Edit/Write
04-17chore: mark T09 done
04-17feat(conversation): T09 session stats bar
04-16chore: mark T08 done
04-16feat(settings): T08 settings modal (fonts, density, theme)
04-16chore: mark T07 done
04-16feat(ui): T07 session outline / minimap
04-16chore: mark T06 done
04-16feat(ui): T06 command palette (Ctrl+K)
04-16chore: mark T05 done
04-16feat(ui): T05 keyboard shortcuts overlay
04-16chore: mark T04 done
04-16feat(sidebar): T04 sort toggle in sidebar
04-16chore: mark T03 done
04-16feat(projects): T03 favorites and pin-to-top sidebar
04-16chore: mark T02 done
04-16feat(layout): T02 resizable panel columns
04-16chore: mark T01 done
04-16feat(jsonl): T01 resolve-cwd fallback for legacy projects
04-16docs: add REBRANDING_PLAN.md for claude-ui → ptybook migration
04-16docs: replace ASCII banner with generated image (flux-2-pro)
04-16docs: rewrite README in English with tighter structure and principles
04-16docs: README + TASKS queue for autonomous scheduler
04-16feat: move project alias edit to session-list header + IMPROVEMENTPLAN
04-16feat(ui): always-visible alias pencil + viewer category filters
04-16feat: content-block rendering + project aliases + wider sidebar + resume fix
04-16fix: chromium --app compatibility + sniff cwd past huge hooks
04-16feat(editor): phase 7 — CLAUDE.md editor (CodeMirror 6)
04-16feat(watcher): phase 6 — file watcher + live updates
04-16feat(terminal): phase 5 — multi-tab + open-session-in-terminal
04-16feat(pty): phase 4 — WebSocket + node-pty + single terminal
04-16feat(ui): phase 3 — conversation viewer
04-16feat(ui): phase 2 — sidebar + session explorer
04-16chore: bootstrap claude-ui (phases 0 + 1)