A desktop application for managing development workspaces. Organize projects, tasks, and tabs in a unified interface with integrated terminals, editors, browsers, and AI tool support.
Built with Electron, React, and TypeScript.
This repository is a fork of join3r/claude-project. join3r has said it may be forked and modified freely. All work stays on this repo (TeleporterGuy/DevTool); do not open PRs against upstream. Direction: Pi as the primary agent, primarily on Windows (Git Bash, portable Node, conda, native in-app .ipynb notebooks). Language servers are parked. How to progress is in ROADMAP.md. Company-deploy security snapshot: SECURITY.md.
Project Management -- Add, organize, and switch between projects. Group projects into folders. Support for local directories, remote SSH projects, and shell command projects.
Task Organization -- Create tasks within projects. Each task maintains its own set of tabs and layout state independently.
Split-Pane Layout -- Horizontal split view with independent left and right panes. Drag tabs between panes.
Terminal Tabs -- Full terminal emulation via xterm.js and node-pty. On Windows, tabs are Git Bash only (auto-detected Git\bin\bash.exe; optional path in Settings). PowerShell and Command Prompt are not offered. WebGL-accelerated rendering, scrollback preservation, search, clipboard integration, and copy-on-select.
Browser Tabs -- Embedded Chromium browser with URL bar, navigation, and DevTools. SOCKS proxy support for remote project access.
Editor Tabs -- Monaco editor with syntax highlighting, configurable fonts, line numbers, minimap, word wrap, and auto-save.
Notebook Tabs -- Native .ipynb editor. Only the focused cell mounts Monaco; idle code cells are syntax-highlighted read-only previews (not live editors). Run cells against ipykernel in the project's default conda env, or a per-notebook override (jupyter_client). Stream text, plain/text, PNG, and errors. Local projects only.
Agent Links -- Cursor-style "add to chat": in an editor or notebook, Ctrl+L / ⌘L inserts an @path (lines a-b) or @notebook.ipynb (cell N, id …) link into the task's agent tab (Pi, Claude, Codex or Claude chat) without sending it; Ctrl+Shift+L / ⌘⇧L links the whole file. Also from the editor and file-tree context menus, the palette, and an "Add to agent" hint on a selection.
Diff Viewer -- Git diff visualization with side-by-side rendering and whitespace options.
AI Tool Integration -- Dedicated tabs for Pi (primary), Claude Code, and Codex. Hook server enables bidirectional communication with AI tools running in terminals.
Conda environments -- Pick a conda or micromamba env per local project (Project Settings). New Pi/Claude/Codex tabs prepend that env onto PATH (plus install condabin). New interactive terminals run a login shell, then conda activate for the project env (Windows Git Bash uses --rcfile so conda init in .bash_profile is not dropped). Notebook tabs start ipykernel with the same env. Already-open tabs keep their old env. DevTool does not create or delete envs.
Remote SSH Projects -- Connect to remote machines via SSH with port forwarding, SOCKS proxy tunneling, key authentication, health checks, and auto-reconnection.
Git Worktree Management -- Create and delete isolated git worktrees for branch work directly from the UI.
File Browser -- Integrated file tree: open, create, rename, and delete files and folders. The Files tab has New file / New folder buttons and a quick filter.
Git Status -- Display current branch, changed files, and diffs.
Multi-Window -- Open multiple application windows with independent state.
npm installThis installs dependencies and rebuilds native modules (node-pty) for Electron.
npm warn deprecated … lines (for example glob, inflight, rimraf, boolean) come from Electron / electron-builder, not from DevTool itself. They do not fail the install. An electron-winstaller ignored-scripts warning is also expected until a Windows installer is needed; the portable folder path below does not use it.
Compiling node-pty for Electron uses MSBuild. That needs Visual Studio 2022 Build Tools (or full VS) with the Desktop C++ workload, Python (for node-gyp), and administrator rights to install or modify those tools. Git Bash / MinGW cannot replace MSVC here. There is no portable Spectre CRT zip.
- Install Build Tools for Visual Studio 2022 if the Visual Studio Installer is missing. The installer itself requires admin.
- Modify the same VS instance node-gyp will use (on this fork that is often Build Tools 2022, not Community, if both are installed).
- Workload: Desktop development with C++.
- Individual components → search Spectre → install MSVC v143 - VS 2022 C++ x64/x86 Spectre-mitigated libs (Latest) (
Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre).
Elevated Command Prompt (adjust --installPath if vswhere shows a different instance):
"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vs_installer.exe" modify ^
--installPath "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools" ^
--add Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre ^
--passive --norestart --waitLibs should exist at ...\VC\Tools\MSVC\<version>\lib\spectre\x64. Check:
"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -products * -requires Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre -property installationPathThen from the repo (Git Bash is fine):
npm installIf you added Spectre after a failed install, you do not need to delete node_modules. Re-run:
npx @electron/rebuild -m .MSB8040 (“Spectre-mitigated libraries are required”) means that component is still missing. Do not disable Spectre in node-pty’s binding.gyp.
Opening a Pi (or Claude/Codex) tab can fail with Cannot create process, error code: 2 if Windows cannot find the CLI, or error code: 193 if DevTool tries to CreateProcess a .cmd shim directly. Electron does not see Git Bash’s PATH, and npm’s pi is usually pi.cmd. Set Settings → AI Tools → Command path after enabling the tool, or put npm’s global bin on PATH (%AppData%\npm). DevTool wraps .cmd through cmd.exe.
New Terminal tabs on Windows are Git Bash (Git\bin\bash.exe --login -i), including when you start DevTool.exe or npm run dev from Explorer or cmd — the app does not rely on an inherited SHELL. Leave the Git Bash path empty in Settings → Terminal to auto-detect, or Browse to a bash.exe. PowerShell and Command Prompt are out of scope on this fork. SSH tabs still use the remote $SHELL.
Without admin, without the Visual Studio Installer, or without those Spectre libs, from-source npm install cannot succeed on Windows. Use a pre-built folder instead.
A machine that does have admin + VS produces an unpacked app. Recipients copy that folder and run it. They never compile and never run npm install.
On the build machine (Windows x64, after a successful npm install as above):
npm run build:winThat writes a portable directory (typically dist/win-unpacked). Zip that folder and give it to the locked-down PC. Run DevTool.exe from inside it. Keep a portable Node zip next to it if you want node on PATH for terminals later (Settings → Node directory). Pick a conda env per project in Project Settings when you want that project's python.
Limits of this path:
- It is run-only. You cannot
npm run devor change the Electron native addon without a VS build machine. - Architecture must match (x64 build for x64 Windows).
- The portable
DevTool.exeis unsigned. The build still stamps DevTool's icon and version resources onto it (anafterPackhook,scripts/win-rcedit.cjs, runs therceditnpm package; no certificate), so Task Manager and file properties say DevTool, not Electron.
npm run build:win:setupThat writes dist/DevTool-Setup-<version>.exe (per-user NSIS installer: no admin, installs under %LOCALAPPDATA%\Programs\DevTool, adds a Start Menu shortcut) and dist/DevTool-<version>-win.zip (the portable folder, zipped). The portable folder from npm run build:win stays the no-admin escape hatch. Uninstalling never touches ~/.devtool. It is electron-builder NSIS, so electron-winstaller stays unapproved.
Both are unsigned until a code-signing certificate exists. SmartScreen will warn: More info → Run anyway.
Releases are cut by hand on the Windows build machine: npm run release:win builds both and uploads them as a draft GitHub Release (needs gh logged in); publish the draft on GitHub. With a certificate, npm run release:win -- --signed (see scripts/sign-win.cjs for DEVTOOL_SIGN_CMD / DEVTOOL_PUBLISHER_NAME) also uploads latest.yml, which lets signed installs update themselves.
Packaged builds check github.com/TeleporterGuy/DevTool/releases at launch and every few hours (Settings → Updates, or the menu's Check for Updates…; the automatic check can be turned off). Unsigned builds — the portable folder, an unsigned Setup.exe, macOS/Linux dirs — never replace themselves: they say a new version exists and open its release page. Only a signed Setup.exe install downloads and installs updates on its own.
npm run devStarts the app in development mode with hot reload. On Windows this still needs the from-source native rebuild above.
npm run build # Typecheck, then production JS/CSS bundle
npm run build:win # Portable Windows folder (dist/win-unpacked)
npm run build:win:setup # Per-user Setup.exe + portable zip (dist/)
npm run build:mac # Package macOS app
npm run build:linux # Package Linux app./scripts/install.shBuilds and installs the app system-wide. Supports macOS (arm64) and Linux (x86_64, arm64). On macOS it copies to /Applications, on Linux it installs to /opt/DevTool with a desktop entry and /usr/local/bin/devtool symlink. Windows uses npm run build:win and copying dist/win-unpacked instead.
npm test # Run tests
npm run test:watch # Run tests in watch mode
npm run typecheck # tsc over src/ and tests/ (tsconfig.typecheck.json)
npm run lint # ESLint (eslint.config.mjs); warnings are allowed, errors failnpm install sets git config core.hooksPath .githooks, so commits run .githooks/pre-commit: ESLint on the staged JS/TS files plus a full typecheck. Skip it once with git commit --no-verify.
Live notebook kernel smoke (real jupyter_client / ipykernel, no Electron window). Needs a conda env with those packages. Git Bash:
NOTEBOOK_LIVE=1 npm test -- tests/notebook-kernel.live.test.tsCI (.github/workflows/ci.yml):
- test (macOS / Linux / Windows) — typecheck and tests with Node 24, plus lint and
npm run buildon Linux. The Windows job adds the MSVC Spectre-mitigated libs to the runner's Visual Studio if they are missing, sincepostinstallcompilesnode-pty. Live kernel and live SSH (DEMO_SSH=1) stay skipped. - notebook-live-windows — the unit suite plus the live kernel smoke (
NOTEBOOK_LIVE_REQUIRED=1) after Miniforge +ipykernel/jupyter_client. Skips the native rebuild (npm ci --ignore-scripts). Toolbar clicks and Monaco stay a human check on a Windows box.
MIT. Original work by join3r; this fork by TeleporterGuy.