{"_id":"claude-devtools","_rev":"4-ca56e23f19962138f1aa266fb6ac03e5","name":"claude-devtools","dist-tags":{"latest":"0.3.5"},"versions":{"0.3.2":{"name":"claude-devtools","version":"0.3.2","author":{"name":"claude-devtools contributors"},"license":"MIT","_id":"claude-devtools@0.3.2","maintainers":[{"name":"matt1218","email":"matthewkim20122012@gmail.com"}],"homepage":"https://github.com/matt1398/claude-devtools","bugs":{"url":"https://github.com/matt1398/claude-devtools/issues"},"bin":{"claude-devtools":"bin/claude-devtools.js"},"dist":{"shasum":"1c75f7dcbb736ed6fd337531ad385bbfe1ada61a","tarball":"https://registry.npmjs.org/claude-devtools/-/claude-devtools-0.3.2.tgz","fileCount":8,"integrity":"sha512-S8wTyzlmvhr397hanXp4rgvjEDjhXnb0c8w+qZZbAUfuEgHhcJOSkeX7DLbMQZZrjZ5ZNSxkn4VTx+QKrjSplQ==","signatures":[{"sig":"MEUCIDVnkaQyyT7UpyD0wiY2F9MLle2YNNJFEkP7FzyQcAzRAiEAgVDGCuSj39DTjWcrYvOym2IJ8/H1DsvcuGlblrtTYrg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29862},"type":"module","build":{"dmg":{"sign":false},"mac":{"icon":"resources/icons/mac/icon.icns","target":["dmg","zip"],"category":"public.app-category.developer-tools","notarize":true,"entitlements":"resources/entitlements.mac.plist","hardenedRuntime":true,"gatekeeperAssess":false,"entitlementsInherit":"resources/entitlements.mac.inherit.plist"},"win":{"icon":"resources/icons/win/icon.ico","target":["nsis"]},"asar":true,"nsis":{"oneClick":false,"perMachine":false,"allowToChangeInstallationDirectory":true},"appId":"com.claudecode.context","files":["out/renderer/**","dist-electron/**","bin/**","scripts/**","package.json"],"publish":[{"provider":"github","releaseType":"draft"}],"npmRebuild":false,"directories":{"output":"release"},"productName":"claude-devtools","extraMetadata":{"main":"dist-electron/main/index.cjs"},"extraResources":[{"to":"bin-dist","from":"bin-dist","filter":["**/*"]}]},"gitHead":"834b736af1fd83328d6cc4524fc448e282c34e17","scripts":{"dev":"electron-vite dev","fix":"pnpm lint:fix && pnpm format","dist":"electron-builder --mac --win","lint":"eslint src/","test":"vitest run","build":"electron-vite build","check":"pnpm typecheck && pnpm lint && pnpm test && pnpm build","format":"prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css}\"","preview":"electron-vite preview","quality":"pnpm check && pnpm format:check && npx knip","dist:mac":"electron-builder --mac --publish always","dist:win":"electron-builder --win --publish always","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:local":"node scripts/test-local.js","test:noise":"tsx test/test-noise-filtering.ts","test:watch":"vitest","postinstall":"node scripts/postinstall.js","test:chunks":"tsx test/test-chunk-building.ts","format:check":"prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css}\"","test:coverage":"vitest run --coverage","test:semantic":"tsx test/test-semantic-steps.ts","remotion:render":"remotion render remotion/index.ts DemoVideo out/demo.mp4","remotion:preview":"remotion studio remotion/index.ts","remotion:render:gif":"remotion render remotion/index.ts DemoVideo out/demo.gif --image-format png","test:task-filtering":"tsx test/test-task-filtering.ts","test:coverage:critical":"vitest run --coverage --config vitest.critical.config.ts"},"_npmUser":{"name":"matt1218","email":"matthewkim20122012@gmail.com"},"repository":{"url":"git+https://github.com/matt1398/claude-devtools.git","type":"git"},"_npmVersion":"11.6.2","description":"Desktop app that visualizes Claude Code session execution — explore conversations, track context usage, and analyze tool calls","directories":{},"_nodeVersion":"25.2.1","dependencies":{"tar":"^7.5.7","ssh2":"^1.17.0","react":"^18.3.1","fastify":"^5.7.4","unified":"^11.0.5","zustand":"^4.5.0","date-fns":"^3.6.0","react-dom":"^18.3.1","idb-keyval":"^6.2.2","remark-gfm":"^4.0.1","ssh-config":"^5.0.4","extract-zip":"^2.0.1","lucide-react":"^0.562.0","remark-parse":"^11.0.0","@dnd-kit/core":"^6.3.1","@fastify/cors":"^11.2.0","react-markdown":"^10.1.0","@fastify/static":"^9.0.0","electron-updater":"^6.7.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","mdast-util-to-hast":"^13.2.1","@remotion/light-leaks":"4.0.421","@tanstack/react-virtual":"^3.10.8"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.25.0+sha512.5e82639027af37cf832061bcc6d639c219634488e0f2baebe785028a793de7b525ffcd3f7ff574f5e9860654e098fe852ba8ac5dd5cefe1767d23a020a92f501","devDependencies":{"tsx":"^4.21.0","knip":"^5.82.1","vite":"^5.4.2","eslint":"^9.39.2","vitest":"^3.1.4","globals":"^17.2.0","postcss":"^8.4.35","electron":"^40.3.0","prettier":"^3.8.1","remotion":"^4.0.421","happy-dom":"^17.4.6","@eslint/js":"^9.39.2","typescript":"^5.9.3","@types/hast":"^3.0.4","@types/node":"^25.0.7","@types/ssh2":"^1.15.5","tailwindcss":"^3.4.1","@types/mdast":"^4.0.4","@types/react":"^18.3.3","autoprefixer":"^10.4.17","@remotion/cli":"^4.0.421","electron-vite":"^2.3.0","@remotion/media":"^4.0.421","@types/react-dom":"^18.3.0","electron-builder":"^25.1.8","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^3.1.4","eslint-plugin-react":"^7.37.5","@vitejs/plugin-react":"^4.3.1","eslint-plugin-import":"^2.32.0","@remotion/transitions":"^4.0.421","eslint-plugin-sonarjs":"^3.0.6","@remotion/google-fonts":"^4.0.421","eslint-config-prettier":"^10.1.8","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@tailwindcss/typography":"^0.5.19","eslint-plugin-boundaries":"^5.3.1","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-tailwindcss":"^3.18.2","eslint-plugin-react-refresh":"^0.4.26","prettier-plugin-tailwindcss":"^0.7.2","eslint-plugin-simple-import-sort":"^12.1.1","eslint-import-resolver-typescript":"^4.4.4","@eslint-community/eslint-plugin-eslint-comments":"^4.6.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-devtools_0.3.2_1771002905513_0.18005347066248167","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"claude-devtools","version":"0.3.3","author":{"name":"claude-devtools contributors"},"license":"MIT","_id":"claude-devtools@0.3.3","maintainers":[{"name":"matt1218","email":"matthewkim20122012@gmail.com"}],"homepage":"https://github.com/matt1398/claude-devtools","bugs":{"url":"https://github.com/matt1398/claude-devtools/issues"},"bin":{"claude-devtools":"bin/claude-devtools.js"},"dist":{"shasum":"5ec5c2911476763e45954c0fde310bd13f9e65ae","tarball":"https://registry.npmjs.org/claude-devtools/-/claude-devtools-0.3.3.tgz","fileCount":8,"integrity":"sha512-zl/bzpovYBtEGnshiEIt5K8+166LixrweVQ/6KXDPgtKy5p3y3Eu4htKUXl8my9hTUmCFDKmmXB48WFuL+Il+Q==","signatures":[{"sig":"MEUCIQC3vaS3AirzPil6RSefl4l2i9IwSHUuuav5SDC2WNjGYQIgaJNhNr946DIjVUIw9L6ljb8v6Z0h1tjaj1EqOhXjP6Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29791},"type":"module","build":{"dmg":{"sign":false},"mac":{"icon":"resources/icons/mac/icon.icns","target":["dmg","zip"],"category":"public.app-category.developer-tools","notarize":true,"entitlements":"resources/entitlements.mac.plist","hardenedRuntime":true,"gatekeeperAssess":false,"entitlementsInherit":"resources/entitlements.mac.inherit.plist"},"win":{"icon":"resources/icons/win/icon.ico","target":["nsis"]},"asar":true,"nsis":{"oneClick":false,"perMachine":false,"allowToChangeInstallationDirectory":true},"appId":"com.claudecode.context","files":["out/renderer/**","dist-electron/**","bin/**","scripts/**","package.json"],"publish":[{"provider":"github","releaseType":"draft"}],"npmRebuild":false,"directories":{"output":"release"},"productName":"claude-devtools","extraMetadata":{"main":"dist-electron/main/index.cjs"},"extraResources":[{"to":"bin-dist","from":"bin-dist","filter":["**/*"]}]},"gitHead":"834b736af1fd83328d6cc4524fc448e282c34e17","scripts":{"dev":"electron-vite dev","fix":"pnpm lint:fix && pnpm format","dist":"electron-builder --mac --win","lint":"eslint src/","test":"vitest run","build":"electron-vite build","check":"pnpm typecheck && pnpm lint && pnpm test && pnpm build","format":"prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css}\"","preview":"electron-vite preview","quality":"pnpm check && pnpm format:check && npx knip","dist:mac":"electron-builder --mac --publish always","dist:win":"electron-builder --win --publish always","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:local":"node scripts/test-local.js","test:noise":"tsx test/test-noise-filtering.ts","test:watch":"vitest","postinstall":"node scripts/postinstall.js","test:chunks":"tsx test/test-chunk-building.ts","format:check":"prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css}\"","test:coverage":"vitest run --coverage","test:semantic":"tsx test/test-semantic-steps.ts","remotion:render":"remotion render remotion/index.ts DemoVideo out/demo.mp4","remotion:preview":"remotion studio remotion/index.ts","remotion:render:gif":"remotion render remotion/index.ts DemoVideo out/demo.gif --image-format png","test:task-filtering":"tsx test/test-task-filtering.ts","test:coverage:critical":"vitest run --coverage --config vitest.critical.config.ts"},"_npmUser":{"name":"matt1218","email":"matthewkim20122012@gmail.com"},"repository":{"url":"git+https://github.com/matt1398/claude-devtools.git","type":"git"},"_npmVersion":"11.6.2","description":"Desktop app that visualizes Claude Code session execution — explore conversations, track context usage, and analyze tool calls","directories":{},"_nodeVersion":"25.2.1","dependencies":{"tar":"^7.5.7","ssh2":"^1.17.0","react":"^18.3.1","fastify":"^5.7.4","unified":"^11.0.5","zustand":"^4.5.0","date-fns":"^3.6.0","react-dom":"^18.3.1","idb-keyval":"^6.2.2","remark-gfm":"^4.0.1","ssh-config":"^5.0.4","extract-zip":"^2.0.1","lucide-react":"^0.562.0","remark-parse":"^11.0.0","@dnd-kit/core":"^6.3.1","@fastify/cors":"^11.2.0","react-markdown":"^10.1.0","@fastify/static":"^9.0.0","electron-updater":"^6.7.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","mdast-util-to-hast":"^13.2.1","@remotion/light-leaks":"4.0.421","@tanstack/react-virtual":"^3.10.8"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.25.0+sha512.5e82639027af37cf832061bcc6d639c219634488e0f2baebe785028a793de7b525ffcd3f7ff574f5e9860654e098fe852ba8ac5dd5cefe1767d23a020a92f501","devDependencies":{"tsx":"^4.21.0","knip":"^5.82.1","vite":"^5.4.2","eslint":"^9.39.2","vitest":"^3.1.4","globals":"^17.2.0","postcss":"^8.4.35","electron":"^40.3.0","prettier":"^3.8.1","remotion":"^4.0.421","happy-dom":"^17.4.6","@eslint/js":"^9.39.2","typescript":"^5.9.3","@types/hast":"^3.0.4","@types/node":"^25.0.7","@types/ssh2":"^1.15.5","tailwindcss":"^3.4.1","@types/mdast":"^4.0.4","@types/react":"^18.3.3","autoprefixer":"^10.4.17","@remotion/cli":"^4.0.421","electron-vite":"^2.3.0","@remotion/media":"^4.0.421","@types/react-dom":"^18.3.0","electron-builder":"^25.1.8","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^3.1.4","eslint-plugin-react":"^7.37.5","@vitejs/plugin-react":"^4.3.1","eslint-plugin-import":"^2.32.0","@remotion/transitions":"^4.0.421","eslint-plugin-sonarjs":"^3.0.6","@remotion/google-fonts":"^4.0.421","eslint-config-prettier":"^10.1.8","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@tailwindcss/typography":"^0.5.19","eslint-plugin-boundaries":"^5.3.1","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-tailwindcss":"^3.18.2","eslint-plugin-react-refresh":"^0.4.26","prettier-plugin-tailwindcss":"^0.7.2","eslint-plugin-simple-import-sort":"^12.1.1","eslint-import-resolver-typescript":"^4.4.4","@eslint-community/eslint-plugin-eslint-comments":"^4.6.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-devtools_0.3.3_1771003186182_0.15455954938290506","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"claude-devtools","version":"0.3.4","author":{"name":"claude-devtools contributors"},"license":"MIT","_id":"claude-devtools@0.3.4","maintainers":[{"name":"matt1218","email":"matthewkim20122012@gmail.com"}],"homepage":"https://github.com/matt1398/claude-devtools","bugs":{"url":"https://github.com/matt1398/claude-devtools/issues"},"bin":{"claude-devtools":"bin/claude-devtools.js"},"dist":{"shasum":"8c948a5fdd4ffe1ca649703317fb14480859cc7f","tarball":"https://registry.npmjs.org/claude-devtools/-/claude-devtools-0.3.4.tgz","fileCount":8,"integrity":"sha512-EVDGC8KyrhUV2yeE0QwNgEyRMOB+cy4vGXkB7mZHKM76Ubph7AxKDl+O92Sk87c8rGTSXtPpmg08LQUWSoi/dw==","signatures":[{"sig":"MEYCIQCw6om4p/7dGfrv85FnT88e2eVny7gDjAoLn3JDLMQVQAIhAKHB5O7IdsWdFMgHawkufN/FDGW1GIVkSLQQD4MppXRq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29812},"type":"module","build":{"dmg":{"sign":false},"mac":{"icon":"resources/icons/mac/icon.icns","target":["dmg","zip"],"category":"public.app-category.developer-tools","notarize":true,"entitlements":"resources/entitlements.mac.plist","hardenedRuntime":true,"gatekeeperAssess":false,"entitlementsInherit":"resources/entitlements.mac.inherit.plist"},"win":{"icon":"resources/icons/win/icon.ico","target":["nsis"]},"asar":true,"nsis":{"oneClick":false,"perMachine":false,"allowToChangeInstallationDirectory":true},"appId":"com.claudecode.context","files":["out/renderer/**","dist-electron/**","bin/**","scripts/**","package.json"],"publish":[{"provider":"github","releaseType":"draft"}],"npmRebuild":false,"directories":{"output":"release"},"productName":"claude-devtools","extraMetadata":{"main":"dist-electron/main/index.cjs"},"extraResources":[{"to":"bin-dist","from":"bin-dist","filter":["**/*"]}]},"gitHead":"834b736af1fd83328d6cc4524fc448e282c34e17","scripts":{"dev":"electron-vite dev","fix":"pnpm lint:fix && pnpm format","dist":"electron-builder --mac --win","lint":"eslint src/","test":"vitest run","build":"electron-vite build","check":"pnpm typecheck && pnpm lint && pnpm test && pnpm build","format":"prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css}\"","preview":"electron-vite preview","quality":"pnpm check && pnpm format:check && npx knip","dist:mac":"electron-builder --mac --publish always","dist:win":"electron-builder --win --publish always","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:local":"node scripts/test-local.js","test:noise":"tsx test/test-noise-filtering.ts","test:watch":"vitest","postinstall":"node scripts/postinstall.js","test:chunks":"tsx test/test-chunk-building.ts","format:check":"prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css}\"","test:coverage":"vitest run --coverage","test:semantic":"tsx test/test-semantic-steps.ts","remotion:render":"remotion render remotion/index.ts DemoVideo out/demo.mp4","remotion:preview":"remotion studio remotion/index.ts","remotion:render:gif":"remotion render remotion/index.ts DemoVideo out/demo.gif --image-format png","test:task-filtering":"tsx test/test-task-filtering.ts","test:coverage:critical":"vitest run --coverage --config vitest.critical.config.ts"},"_npmUser":{"name":"matt1218","email":"matthewkim20122012@gmail.com"},"repository":{"url":"git+https://github.com/matt1398/claude-devtools.git","type":"git"},"_npmVersion":"11.6.2","description":"Desktop app that visualizes Claude Code session execution — explore conversations, track context usage, and analyze tool calls","directories":{},"_nodeVersion":"25.2.1","dependencies":{"tar":"^7.5.7","ssh2":"^1.17.0","react":"^18.3.1","fastify":"^5.7.4","unified":"^11.0.5","zustand":"^4.5.0","date-fns":"^3.6.0","react-dom":"^18.3.1","idb-keyval":"^6.2.2","remark-gfm":"^4.0.1","ssh-config":"^5.0.4","extract-zip":"^2.0.1","lucide-react":"^0.562.0","remark-parse":"^11.0.0","@dnd-kit/core":"^6.3.1","@fastify/cors":"^11.2.0","react-markdown":"^10.1.0","@fastify/static":"^9.0.0","electron-updater":"^6.7.3","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","mdast-util-to-hast":"^13.2.1","@remotion/light-leaks":"4.0.421","@tanstack/react-virtual":"^3.10.8"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.25.0+sha512.5e82639027af37cf832061bcc6d639c219634488e0f2baebe785028a793de7b525ffcd3f7ff574f5e9860654e098fe852ba8ac5dd5cefe1767d23a020a92f501","devDependencies":{"tsx":"^4.21.0","knip":"^5.82.1","vite":"^5.4.2","eslint":"^9.39.2","vitest":"^3.1.4","globals":"^17.2.0","postcss":"^8.4.35","electron":"^40.3.0","prettier":"^3.8.1","remotion":"^4.0.421","happy-dom":"^17.4.6","@eslint/js":"^9.39.2","typescript":"^5.9.3","@types/hast":"^3.0.4","@types/node":"^25.0.7","@types/ssh2":"^1.15.5","tailwindcss":"^3.4.1","@types/mdast":"^4.0.4","@types/react":"^18.3.3","autoprefixer":"^10.4.17","@remotion/cli":"^4.0.421","electron-vite":"^2.3.0","@remotion/media":"^4.0.421","@types/react-dom":"^18.3.0","electron-builder":"^25.1.8","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^3.1.4","eslint-plugin-react":"^7.37.5","@vitejs/plugin-react":"^4.3.1","eslint-plugin-import":"^2.32.0","@remotion/transitions":"^4.0.421","eslint-plugin-sonarjs":"^3.0.6","@remotion/google-fonts":"^4.0.421","eslint-config-prettier":"^10.1.8","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@tailwindcss/typography":"^0.5.19","eslint-plugin-boundaries":"^5.3.1","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-tailwindcss":"^3.18.2","eslint-plugin-react-refresh":"^0.4.26","prettier-plugin-tailwindcss":"^0.7.2","eslint-plugin-simple-import-sort":"^12.1.1","eslint-import-resolver-typescript":"^4.4.4","@eslint-community/eslint-plugin-eslint-comments":"^4.6.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-devtools_0.3.4_1771003515986_0.035247866129361594","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"claude-devtools","type":"module","version":"0.3.5","description":"Desktop app that visualizes Claude Code session execution — explore conversations, track context usage, and analyze tool calls","license":"MIT","author":{"name":"claude-devtools contributors"},"homepage":"https://github.com/matt1398/claude-devtools","repository":{"type":"git","url":"git+https://github.com/matt1398/claude-devtools.git"},"bugs":{"url":"https://github.com/matt1398/claude-devtools/issues"},"bin":{"claude-devtools":"bin/claude-devtools.js"},"scripts":{"postinstall":"node scripts/postinstall.js","dev":"electron-vite dev","build":"electron-vite build","dist":"electron-builder --mac --win","dist:mac":"electron-builder --mac --publish always","dist:win":"electron-builder --win --publish always","preview":"electron-vite preview","typecheck":"tsc --noEmit","lint":"eslint src/","lint:fix":"eslint src/ --fix","format":"prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css}\"","format:check":"prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css}\"","check":"pnpm typecheck && pnpm lint && pnpm test && pnpm build","fix":"pnpm lint:fix && pnpm format","quality":"pnpm check && pnpm format:check && npx knip","test:chunks":"tsx test/test-chunk-building.ts","test:semantic":"tsx test/test-semantic-steps.ts","test:noise":"tsx test/test-noise-filtering.ts","test:task-filtering":"tsx test/test-task-filtering.ts","test:local":"node scripts/test-local.js","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","test:coverage:critical":"vitest run --coverage --config vitest.critical.config.ts","remotion:preview":"remotion studio remotion/index.ts","remotion:render":"remotion render remotion/index.ts DemoVideo out/demo.mp4","remotion:render:gif":"remotion render remotion/index.ts DemoVideo out/demo.gif --image-format png"},"dependencies":{"@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@fastify/cors":"^11.2.0","@fastify/static":"^9.0.0","@remotion/light-leaks":"4.0.421","@tanstack/react-virtual":"^3.10.8","date-fns":"^3.6.0","electron-updater":"^6.7.3","extract-zip":"^2.0.1","fastify":"^5.7.4","idb-keyval":"^6.2.2","lucide-react":"^0.562.0","mdast-util-to-hast":"^13.2.1","react":"^18.3.1","react-dom":"^18.3.1","react-markdown":"^10.1.0","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","ssh-config":"^5.0.4","ssh2":"^1.17.0","tar":"^7.5.7","unified":"^11.0.5","zustand":"^4.5.0"},"devDependencies":{"@eslint-community/eslint-plugin-eslint-comments":"^4.6.0","@eslint/js":"^9.39.2","@remotion/cli":"^4.0.421","@remotion/google-fonts":"^4.0.421","@remotion/media":"^4.0.421","@remotion/transitions":"^4.0.421","@tailwindcss/typography":"^0.5.19","@types/hast":"^3.0.4","@types/mdast":"^4.0.4","@types/node":"^25.0.7","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@types/ssh2":"^1.15.5","@vitejs/plugin-react":"^4.3.1","@vitest/coverage-v8":"^3.1.4","autoprefixer":"^10.4.17","electron":"^40.3.0","electron-builder":"^25.1.8","electron-vite":"^2.3.0","eslint":"^9.39.2","eslint-config-prettier":"^10.1.8","eslint-import-resolver-typescript":"^4.4.4","eslint-plugin-boundaries":"^5.3.1","eslint-plugin-import":"^2.32.0","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.26","eslint-plugin-security":"^3.0.1","eslint-plugin-simple-import-sort":"^12.1.1","eslint-plugin-sonarjs":"^3.0.6","eslint-plugin-tailwindcss":"^3.18.2","globals":"^17.2.0","happy-dom":"^17.4.6","knip":"^5.82.1","postcss":"^8.4.35","prettier":"^3.8.1","prettier-plugin-tailwindcss":"^0.7.2","remotion":"^4.0.421","tailwindcss":"^3.4.1","tsx":"^4.21.0","typescript":"^5.9.3","typescript-eslint":"^8.54.0","vite":"^5.4.2","vitest":"^3.1.4"},"build":{"appId":"com.claudecode.context","productName":"claude-devtools","directories":{"output":"release"},"files":["out/renderer/**","dist-electron/**","bin/**","scripts/**","package.json"],"extraResources":[{"from":"bin-dist","to":"bin-dist","filter":["**/*"]}],"asar":true,"npmRebuild":false,"extraMetadata":{"main":"dist-electron/main/index.cjs"},"mac":{"category":"public.app-category.developer-tools","target":["dmg","zip"],"hardenedRuntime":true,"gatekeeperAssess":false,"notarize":true,"entitlements":"resources/entitlements.mac.plist","entitlementsInherit":"resources/entitlements.mac.inherit.plist","icon":"resources/icons/mac/icon.icns"},"dmg":{"sign":false},"win":{"target":["nsis"],"icon":"resources/icons/win/icon.ico"},"nsis":{"oneClick":false,"perMachine":false,"allowToChangeInstallationDirectory":true},"publish":[{"provider":"github","releaseType":"draft"}]},"packageManager":"pnpm@10.25.0+sha512.5e82639027af37cf832061bcc6d639c219634488e0f2baebe785028a793de7b525ffcd3f7ff574f5e9860654e098fe852ba8ac5dd5cefe1767d23a020a92f501","gitHead":"834b736af1fd83328d6cc4524fc448e282c34e17","_id":"claude-devtools@0.3.5","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-OHrmcefT6nlf0dcw47Pz7f3kIDUijrv1y2NRBP2Z1BrX/fO1opcSnxqogjVCnxqWCjMFMNNkUM6CE8tFtTr8lA==","shasum":"705e2b973b4997491f45dee85ab0d60f87a4c685","tarball":"https://registry.npmjs.org/claude-devtools/-/claude-devtools-0.3.5.tgz","fileCount":8,"unpackedSize":30127,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBhH7L5Ipxc3V9xlo6R/grtZyKF2XegjzIZ9KUZdIK9tAiBzq7z+PcDO8RY9f7ILkmVMPI8JxCkh37IemK9w4vgj3Q=="}]},"_npmUser":{"name":"matt1218","email":"matthewkim20122012@gmail.com"},"directories":{},"maintainers":[{"name":"matt1218","email":"matthewkim20122012@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/claude-devtools_0.3.5_1771003790807_0.9564062213524873"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-13T17:15:05.512Z","modified":"2026-02-13T17:29:51.072Z","0.3.2":"2026-02-13T17:15:05.714Z","0.3.3":"2026-02-13T17:19:46.356Z","0.3.4":"2026-02-13T17:25:16.129Z","0.3.5":"2026-02-13T17:29:50.951Z"},"bugs":{"url":"https://github.com/matt1398/claude-devtools/issues"},"author":{"name":"claude-devtools contributors"},"license":"MIT","homepage":"https://github.com/matt1398/claude-devtools","repository":{"type":"git","url":"git+https://github.com/matt1398/claude-devtools.git"},"description":"Desktop app that visualizes Claude Code session execution — explore conversations, track context usage, and analyze tool calls","maintainers":[{"name":"matt1218","email":"matthewkim20122012@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"resources/icons/png/1024x1024.png\" alt=\"claude-devtools\" width=\"120\" />\n</p>\n\n<h1 align=\"center\">claude-devtools</h1>\n\n<p align=\"center\">\n  <strong><code>Terminal tells you nothing. This shows you everything.</code></strong>\n  <br />\n  A desktop app that reconstructs exactly what Claude Code did — every file path, every tool call, every token — from the raw session logs already on your machine.\n</p>\n\n\n\n<p align=\"center\">\n  <a href=\"https://claude-dev.tools\"><img src=\"https://img.shields.io/badge/Website-claude--dev.tools-blue?style=flat-square\" alt=\"Website\" /></a>&nbsp;\n  <a href=\"https://github.com/matt1398/claude-devtools/releases/latest\"><img src=\"https://img.shields.io/github/v/release/matt1398/claude-devtools?style=flat-square&label=version&color=blue\" alt=\"Latest Release\" /></a>&nbsp;\n  <a href=\"https://github.com/matt1398/claude-devtools/actions/workflows/ci.yml\"><img src=\"https://github.com/matt1398/claude-devtools/actions/workflows/ci.yml/badge.svg\" alt=\"CI Status\" /></a>&nbsp;\n  <a href=\"https://github.com/matt1398/claude-devtools/releases\"><img src=\"https://img.shields.io/github/downloads/matt1398/claude-devtools/total?style=flat-square&color=green\" alt=\"Downloads\" /></a>&nbsp;\n  <img src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Windows-lightgrey?style=flat-square\" alt=\"Platform\" />\n</p>\n\n<br />\n\n<p align=\"center\">\n  <a href=\"https://claude-dev.tools\">\n    <img src=\"https://img.shields.io/badge/Website-claude--dev.tools-171717?logo=googlechrome&logoColor=white&style=flat\" alt=\"Website\" height=\"30\" />\n  </a>&nbsp;&nbsp;\n  <a href=\"https://github.com/matt1398/claude-devtools/releases/latest\">\n    <img src=\"https://img.shields.io/badge/macOS-Download-black?logo=apple&logoColor=white&style=flat\" alt=\"Download for macOS\" height=\"30\" />\n  </a>&nbsp;&nbsp;\n  <a href=\"https://github.com/matt1398/claude-devtools/releases/latest\">\n    <img src=\"https://img.shields.io/badge/Windows-Download-0078D4?logo=windows&logoColor=white&style=flat\" alt=\"Download for Windows\" height=\"30\" />\n  </a>\n</p>\n\n<p align=\"center\">\n  <sub>No API keys. No configuration. Just download, open, and see everything Claude Code did.</sub>\n</p>\n\n<br />\n\n<p align=\"center\">\n  <video src=\"https://github.com/user-attachments/assets/2b420b2c-c4af-4d10-a679-c83269f8ee99\">\n    Your browser does not support the video tag.\n  </video>\n</p>\n\n---\n\n## Installation\n\n### Download Binary\n\n| Platform | Download | Notes |\n|----------|----------|-------|\n| **macOS** (Apple Silicon) | [`.dmg`](https://github.com/matt1398/claude-devtools/releases/latest) | Drag to Applications. On first launch: right-click → Open |\n| **Windows** | [`.exe`](https://github.com/matt1398/claude-devtools/releases/latest) | Standard installer. May trigger SmartScreen — click \"More info\" → \"Run anyway\" |\n\nThe app reads session logs from `~/.claude/` — the data is already on your machine. No setup, no API keys, no login.\n\n### Install via npm\n\n```bash\n# Install globally\nnpm install -g claude-devtools\n\n# Or run directly with npx\nnpx claude-devtools\n```\n\nThe installer automatically downloads the platform-specific binary for your OS (macOS, Windows, or Linux).\n\n---\n\n## Why This Exists\n\n### Claude Code stopped telling you what it's doing.\n\nRecent Claude Code updates replaced detailed tool output with opaque summaries. `Read 3 files`. `Searched for 1 pattern`. `Edited 2 files`. No paths, no content, no line numbers. The context usage indicator became a three-segment progress bar with no breakdown. To get the details back, the only option is `--verbose` — which dumps raw JSON, internal system prompts, and thousands of lines of noise into your terminal.\n\n**There is no middle ground in the CLI.** You either see too little or too much.\n\nclaude-devtools restores the information that was taken away — structured, searchable, and without a single modification to Claude Code itself. It reads the raw session logs from `~/.claude/` and reconstructs the full execution trace: every file path that was read, every regex that was searched, every diff that was applied, every token that was consumed — organized into a visual interface you can actually reason about.\n\n### The wrapper problem.\n\nThere are many GUI wrappers for Claude Code — Conductor, Craft Agents, Vibe Kanban, 1Code, ccswitch, and others. I tried them all. None of them solved the actual problem:\n\n**They wrap Claude Code.** They inject their own prompts, add their own abstractions, and change how Claude behaves. If you love the terminal — and I do — you don't want that. You want Claude Code exactly as it is.\n\n**They only show their own sessions.** Run something in the terminal? It doesn't exist in their UI. You can only see what was executed through *their* tool. The terminal and the GUI are two separate worlds.\n\n**You can't debug what went wrong.** A session failed — but why? The context filled up too fast — but what consumed it? A subagent spawned 5 child agents — but what did they do? Even in the terminal, scrolling back through a long session to reconstruct what happened is nearly impossible.\n\n**You can't monitor what matters.** Want to know when Claude reads `.env`? When a single tool call exceeds 4K tokens of context? When a teammate sends a shutdown request? You'd have to wire up hooks manually, every time, for every project.\n\n**claude-devtools takes a different approach.** It doesn't wrap or modify Claude Code at all. It reads the session logs that already exist on your machine (`~/.claude/`) and turns them into a rich, interactive interface — regardless of whether the session ran in the terminal, in an IDE, or through another tool.\n\n> Zero configuration. No API keys. Works with every session you've ever run.\n\n---\n\n## Key Features\n\n### :mag: Visible Context Reconstruction\n\n<img width=\"100%\" alt=\"context\" src=\"https://github.com/user-attachments/assets/9ff4a5a7-bcf6-47fb-8ca5-d4021540804b\" />\n\nClaude Code doesn't expose what's actually in the context window. claude-devtools reverse-engineers it.\n\nThe engine walks each turn of the session and reconstructs the full set of context injections — **CLAUDE.md files** (broken down by global, project, and directory-level), **skill activations**, **@-mentioned files**, **tool call inputs and outputs**, **extended thinking**, **team coordination overhead**, and **user prompt text**.\n\nThe result is a per-turn breakdown of estimated token attribution across 7 categories, surfaced in three places: a **Context Badge** on each assistant response, a **Token Usage popover** with percentage breakdowns, and a dedicated **Session Context Panel**.\n\n### :chart_with_downwards_trend: Compaction Visualization\n\n<video src=\"https://github.com/user-attachments/assets/25281f09-05ed-4f81-97bc-7b1754b08b06\" controls=\"controls\" muted=\"muted\" style=\"max-width: 100%;\"></video>\n\n**See the moment your context hits the limit.**\n\nWhen Claude Code hits its context limit, it silently compresses your conversation and continues. Most tools don't even notice this happened. \n\nclaude-devtools detects these compaction boundaries, measures the token delta before and after, and visualizes how your context fills, compresses, and refills over the course of a session. You can see exactly what was in the window at any point, and how the composition shifted after each compaction event.\n\n\n### :bell: Custom Notification Triggers\n\n<video src=\"https://github.com/user-attachments/assets/3b07b3b4-57af-49ed-9539-be7c56a244f5\" controls=\"controls\" muted=\"muted\" style=\"max-width: 100%;\"></video>\n\nDefine rules for when you want to receive **system notifications**. Match on regex patterns, assign colors, and filter your inbox by trigger.\n\n- **Built-in defaults**: `.env File Access Alert`, `Tool Result Error` (`is_error: true`), and `High Token Usage` (default: 8,000 total tokens).\n- **Custom matching**: use regex against specific fields like `file_path`, `command`, `prompt`, `content`, `thinking`, or `text`.\n- **Sensitive-file monitoring**: create alerts for `.env`, `secrets`, payment/billing/stripe paths, or any project-specific pattern.\n- **Noise control**: choose input/output/total token thresholds, add ignore patterns, and scope triggers to selected repositories.\n\n\n### :hammer_and_wrench: Rich Tool Call Inspector\n\nEvery tool call is paired with its result in an expandable card. Specialized viewers render each tool natively:\n- **Read** calls show syntax-highlighted code with line numbers\n- **Edit** calls show inline diffs with added/removed highlighting\n- **Bash** calls show command output\n- **Subagent** calls show the full execution tree, expandable in-place\n\n\n### :busts_in_silhouette: Team & Subagent Visualization\n\nClaude Code now spawns subagents via the Task tool and coordinates entire teams via `TeamCreate`, `SendMessage`, and `TaskUpdate`. In the terminal, all of this collapses into an unreadable stream. claude-devtools untangles it.\n\n- **Subagent sessions** are resolved from Task tool calls and rendered as expandable inline cards — each with its own tool trace, token metrics, duration, and cost. Nested subagents (agents spawning agents) render as a recursive tree.\n- **Teammate messages** — sent via `SendMessage` with color and summary metadata — are detected and rendered as distinct color-coded cards, separated from regular user messages. Each teammate is identified by name and assigned color.\n- **Team lifecycle** is fully visible: `TeamCreate` initialization, `TaskCreate`/`TaskUpdate` coordination, `SendMessage` direct messages and broadcasts, shutdown requests and responses, and `TeamDelete` teardown.\n- **Session summary** shows distinct teammate count separately from subagent count, so you can tell at a glance how many agents participated and how work was distributed.\n\n### :zap: Command Palette & Cross-Session Search\n\nHit **Cmd+K** for a Spotlight-style command palette. Search across all sessions in a project — results show context snippets with highlighted keywords. Navigate directly to the exact message.\n\n### :globe_with_meridians: SSH Remote Sessions\n\nConnect to any remote machine over SSH and inspect Claude Code sessions running there — same interface, no compromise.\n\nclaude-devtools parses your `~/.ssh/config` for host aliases, supports agent forwarding, private keys, and password auth, then opens an SFTP channel to stream session logs from the remote `~/.claude/` directory. Each SSH host gets its own isolated service context with independent caches, file watchers, and parsers. Switching between local and remote workspaces is instant — the app snapshots your current state to IndexedDB before the switch and restores it when you return, tabs and all.\n\n### :bar_chart: Multi-Pane Layout\n\nOpen multiple sessions side-by-side. Drag-and-drop tabs between panes, split views, and compare sessions in parallel — like a proper IDE for your AI conversations.\n\n### :hammer_and_wrench: Rich Tool Call Inspector\n\nEvery tool call is paired with its result in an expandable card. Specialized viewers render each tool natively:\n- **Read** calls show syntax-highlighted code with line numbers\n- **Edit** calls show inline diffs with added/removed highlighting\n- **Bash** calls show command output\n- **Subagent** calls show the full execution tree, expandable in-place\n\n\n---\n\n## What the CLI Hides vs. What claude-devtools Shows\n\n| What you see in the terminal | What claude-devtools shows you |\n|------------------------------|-------------------------------|\n| `Read 3 files` | Exact file paths, syntax-highlighted content with line numbers |\n| `Searched for 1 pattern` | The regex pattern, every matching file, and the matched lines |\n| `Edited 2 files` | Inline diffs with added/removed highlighting per file |\n| A three-segment context bar | Per-turn token attribution across 7 categories — CLAUDE.md breakdown, skills, @-mentions, tool I/O, thinking, teams, user text — with compaction visualization showing how context fills, compresses, and refills |\n| Subagent output interleaved with the main thread | Isolated execution trees per agent, expandable inline with their own metrics |\n| Teammate messages buried in session logs | Color-coded teammate cards with name, message, and full team lifecycle visibility |\n| Critical events mixed into normal output | Trigger-filtered notification inbox for `.env` access, payment-related file paths, execution errors, and high token usage |\n| `--verbose` JSON dump | Structured, filterable, navigable interface — no noise |\n\n---\n\n## Development\n\n<details>\n<summary><strong>Build from source</strong></summary>\n\n<br />\n\n**Prerequisites:** Node.js 20+, pnpm 10+\n\n```bash\ngit clone https://github.com/matt1398/claude-devtools.git\ncd claude-devtools\npnpm install\npnpm dev\n```\n\nThe app auto-discovers your Claude Code projects from `~/.claude/`.\n\n#### Build for Distribution\n\n```bash\npnpm dist:mac     # macOS (.dmg)\npnpm dist:win     # Windows (.exe)\npnpm dist         # Both platforms\n```\n\n#### Scripts\n\n| Command | Description |\n|---------|-------------|\n| `pnpm dev` | Development with hot reload |\n| `pnpm build` | Production build |\n| `pnpm typecheck` | TypeScript type checking |\n| `pnpm lint:fix` | Lint and auto-fix |\n| `pnpm test` | Run all tests |\n| `pnpm test:watch` | Watch mode |\n| `pnpm test:coverage` | Coverage report |\n| `pnpm check` | Full quality gate (types + lint + test + build) |\n\n</details>\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development guidelines. Please read our [Code of Conduct](CODE_OF_CONDUCT.md).\n\n## Security\n\nIPC handlers validate all inputs with strict path containment checks. File reads are constrained to the project root and `~/.claude`. Sensitive credential paths are blocked. See [SECURITY.md](SECURITY.md) for details.\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}