A tiny Windows launcher for the Claude Code CLI. Pick a
project folder, pick a shell, hit launch — a new console opens in that directory with
claude already running.
Python stdlib only (tkinter, subprocess, json, pathlib). No dependencies at
runtime, no installer, no background service.
- Folder switcher — remembers the last project across restarts.
- New project — pick a parent directory, name the folder, it's created and selected.
- Shell toggle — PowerShell (default, blue) or CMD (grey), one click.
- Dark theme — VS Code
#1E1E1Esurfaces with Claude orange#D97757accents. - Keyboard driven —
Enterlaunch,Ctrl+Ttoggle shell,Escclose. - DPI aware — sharp text on scaled displays.
- Windows 10 or 11
- Python 3.11+ (only to run from source or build; the packaged exe bundles its own)
claudeonPATH— see the Claude Code install docs
git clone <repo-url> "Claude Manager"
cd "Claude Manager"
python main.pypip install pyinstaller
.\build.ps1build.ps1 cleans build/ and dist/, runs the unit tests and the UI smoke test,
builds via ClaudeCodeManager.spec (onefile, windowed, icon + version resource), and
writes dist\SHA256SUMS.txt. Any failing step aborts the build.
Output: dist\ClaudeCodeManager.exe
The build is unsigned, so first launch shows the SmartScreen "unknown publisher" prompt. Signing is a one-line uncomment in
build.ps1once a certificate is available. See SECURITY.md.
+ New Projector📁 Change Directoryto select a working directory.- Toggle
PS/CMDfor the shell you want. ⚡ Launch Claude Code— the button is disabled until a valid directory is selected.
| Key | Action |
|---|---|
Enter |
Launch |
Ctrl+T |
Toggle PowerShell / CMD |
Esc |
Close |
State lives in %APPDATA%\ClaudeCodeManager\config.json:
{
"current_dir": "C:\\Project\\MyApp",
"terminal": "powershell"
}Hand-edits are type-checked on load; unknown or malformed values fall back to defaults rather than reaching the launcher. An unwritable config degrades to non-persistence instead of erroring.
main.py entry point (DPI awareness, Tk root)
src/app_state.py config load/save, launch-readiness
src/launcher.py shell argv construction + spawn
src/ui.py Tkinter window, theme, folder-name validation
src/win_theme.py DPI awareness, dark title bar
tests/ unit tests, UI smoke test, exe verification
tools/make_icon.py generates assets/icon.ico
build.ps1 test + build + hash pipeline
ClaudeCodeManager.spec PyInstaller config
python tests\run_tests.py # unit tests (stdlib runner, no pytest needed)
python tests\smoke_ui.py # builds and tears down the window headlessly
.\tests\verify_exe.ps1 # post-build checks on dist\Covers config persistence and corruption handling, PowerShell/CMD command construction,
absolute System32 interpreter resolution, apostrophe escaping in paths, and folder-name
validation.
SECURITY.md documents the full posture: what the app touches, the unsigned-binary gap,
fixed findings (interpreter hijack via unqualified argv[0], PowerShell quote escape),
and one accepted residual risk (CMD resolves claude from the project directory first —
PowerShell mode is unaffected and is the default).
Report issues to the repository owner directly.
Keep it dependency-free and keep the diff small. Before opening a PR:
python tests\run_tests.pyandpython tests\smoke_ui.pypass.- New non-trivial logic ships with a test in
tests/. - Colors come from the
COLOR_*tokens insrc/ui.py, not literals. - Anything touching path handling or process spawning gets a note in
SECURITY.md.
By submitting a contribution you agree it is licensed under the MIT License.
MIT © 2026 Claude Code Manager contributors.
Bundled third-party components in the packaged executable keep their own licenses: CPython (PSF), Tcl/Tk (BSD-style), and the PyInstaller bootloader (GPL-2.0 with a linking exception permitting proprietary and permissively licensed applications).