sync: auto-sync from HOWARD-HOME at 2026-06-02 13:13:39
Author: Howard Enos Machine: HOWARD-HOME Timestamp: 2026-06-02 13:13:39
This commit is contained in:
73
session-logs/2026-06-02-howard-laptop-claude-setup-fix.md
Normal file
73
session-logs/2026-06-02-howard-laptop-claude-setup-fix.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# Session Log — 2026-06-02 — Howard Laptop Claude Setup / Crash Fix
|
||||
|
||||
## User
|
||||
- **User:** Howard Enos (howard)
|
||||
- **Machine:** Howard-Home
|
||||
- **Role:** tech
|
||||
|
||||
## Session Summary
|
||||
|
||||
Howard reported that the `claudesetup.bat` he was sent no longer works on his laptop: Claude crashes when it opens. It worked previously but has been broken for many weeks. The goal was to produce a new setup batch file that correctly sets up ClaudeTools on the laptop. Work was performed on Howard's desktop (Howard-Home); the deliverable is to be manually moved to the laptop.
|
||||
|
||||
Investigation of the existing bootstrap package (`projects/msp-tools/howard-bootstrap/`) and the repo's startup configuration identified the root cause. The repo's git-tracked `.mcp.json` instructs Claude to launch a grepai MCP server via `C:\claudetools\grepai.exe mcp-serve` on every startup in the claudetools folder. `grepai.exe` is gitignored (a 23 MB binary that never ships via clone/pull) and was missing on the laptop. With the binary absent, Claude waits on an MCP server that never initializes, producing the observed "hangs then closes with no error" — and only when launched from the claudetools folder, since `.mcp.json` is project-scoped. Howard confirmed the diagnosis from the laptop: `dir C:\claudetools\grepai.exe` returned PathNotFound.
|
||||
|
||||
A new installer was written at `projects/msp-tools/howard-bootstrap/claude-laptop-setup.bat`. The first version was a full setup/repair (prereqs, repo+vault clone, git identity/remote, identity.json, submodules, grepai handling, robust launcher). Per Howard's follow-up ("just have it install the needed programs so it will run"), it was trimmed to a focused fix: install required programs (git, Node.js, Claude Code, Python, SOPS), apply the grepai MCP fix, and create a robust desktop launcher. The grepai fix writes `disabledMcpjsonServers: ["grepai"]` into `C:\claudetools\.claude\settings.local.json` when the binary is absent (verified `disabledMcpjsonServers` is a real Claude Code settings key by grepping the installed `claude.exe`).
|
||||
|
||||
Finally, per Howard's request to bundle the binary, `grepai.exe` was copied into the bootstrap folder and the bat was wired to install it to `C:\claudetools\` from alongside the script. When the binary is present, the bat leaves the grepai MCP server enabled (full semantic search); the disable path remains only as a fallback. The bootstrap folder is now a self-contained package to be moved to the laptop together (the binary is gitignored and will not travel via sync).
|
||||
|
||||
## Key Decisions
|
||||
|
||||
- Diagnosed the crash as a project-scoped MCP startup hang, not a broken Claude install or corrupted global config — based on Howard's report that Claude runs fine from a normal folder but not from the claudetools folder.
|
||||
- Verified `disabledMcpjsonServers` is a valid Claude Code settings key by grepping the installed `claude.exe` binary, rather than trusting memory, since the entire fix depends on it.
|
||||
- Used machine-local `.claude/settings.local.json` (gitignored) for the disable flag so the fix does not affect other machines via the shared, git-tracked `.mcp.json`.
|
||||
- Generated `settings.local.json` as a clean known-good file (env + optional disable key) instead of attempting a JSON merge in batch; `bypassPermissions` in the tracked `settings.json` makes the per-machine permissions allow-list redundant, so clobbering it (with a `.bak` backup) is safe.
|
||||
- Trimmed the installer from full-setup to programs+fix per Howard's instruction, while keeping the grepai fix because installing programs alone does not stop the hang.
|
||||
- Bundled `grepai.exe` in the bootstrap folder so the laptop gets full semantic search, with the bat copying it into place; kept the disable path as a fallback when the binary is not shipped.
|
||||
- Added a "re-run after install" flow: when git/node/python are freshly installed (not yet on PATH), the bat exits and asks for a second run rather than failing.
|
||||
- Launcher rewritten to stay open on a non-zero exit (`if errorlevel 1 ... pause`) so any future startup error is visible instead of the window vanishing.
|
||||
|
||||
## Problems Encountered
|
||||
|
||||
- Batch + Windows PowerShell 5.1 quoting/JSON pitfalls: PS 5.1 `ConvertTo-Json` unwraps single-element arrays to scalars, which would corrupt `disabledMcpjsonServers`. Avoided by writing literal JSON with batch `echo` rather than serializing.
|
||||
- Delayed-expansion `!` hazard: under `EnableDelayedExpansion`, `!` in echoed `[!]` markers would be eaten. Resolved by dropping delayed expansion (not needed — no in-block var reads) and using ASCII markers (`[OK]`, `[WARNING]`, etc.).
|
||||
- `grepai.exe` is gitignored, so it cannot be delivered to the laptop via git. Resolved by bundling it in the bootstrap folder for manual transfer and documenting that it must move together with the .bat.
|
||||
|
||||
## Configuration Changes
|
||||
|
||||
- Created: `projects/msp-tools/howard-bootstrap/claude-laptop-setup.bat` — new focused laptop installer/fix.
|
||||
- Added: `projects/msp-tools/howard-bootstrap/grepai.exe` — 23 MB binary copied from `C:\claudetools\grepai.exe` (gitignored; bundled for manual transfer to the laptop).
|
||||
- The bat, when run on the laptop, will create/overwrite `C:\claudetools\.claude\settings.local.json` (with a `.bak` backup) and create `%USERPROFILE%\Desktop\ClaudeTools.bat`.
|
||||
|
||||
## Credentials & Secrets
|
||||
|
||||
- None created or discovered this session. The bootstrap folder's `keys.txt` (vault age key) is unchanged and was not modified.
|
||||
|
||||
## Infrastructure & Servers
|
||||
|
||||
- Laptop target paths: ClaudeTools `C:\claudetools`, Vault `D:\vault` (per Howard).
|
||||
- Age key location on Windows: `%APPDATA%\sops\age\keys.txt`.
|
||||
- Gitea: `https://git.azcomputerguru.com`, user `howard`; claudetools remote `https://howard@git.azcomputerguru.com/azcomputerguru/claudetools.git`.
|
||||
- Desktop where work was performed: Howard-Home; Claude Code 2.1.160, Node v24.15.0, npm 11.14.1.
|
||||
|
||||
## Commands & Outputs
|
||||
|
||||
- Root cause confirmation (laptop): `dir C:\claudetools\grepai.exe` → `PathNotFound` (binary missing — confirms the hang).
|
||||
- Settings key verification (desktop): grep of installed `claude.exe` confirmed `disabledMcpjsonServers`, `enabledMcpjsonServers`, `enableAllProjectMcpServers` are all real keys.
|
||||
- `.mcp.json` (git-tracked) content: `{"mcpServers":{"grepai":{"command":"C:\\claudetools\\grepai.exe","args":["mcp-serve"]}}}`.
|
||||
- `git check-ignore grepai.exe` → ignored; `git ls-files | grep grepai` → only docs tracked, binary not tracked.
|
||||
|
||||
## Pending / Incomplete Tasks
|
||||
|
||||
- Howard to move the `howard-bootstrap` folder (at minimum `claude-laptop-setup.bat` + `grepai.exe` + `keys.txt`, kept together) to the laptop and run the bat as administrator.
|
||||
- On first run, if programs are installed fresh, the bat exits and must be run a second time (PATH refresh).
|
||||
- Verify on the laptop that Claude opens from `C:\claudetools` without hanging and that grepai semantic search works (binary now bundled).
|
||||
- Optional future cleanup: consider shipping `grepai.exe` via a Gitea release artifact so new machines get it without manual transfer.
|
||||
|
||||
## Reference Information
|
||||
|
||||
- Installer: `projects/msp-tools/howard-bootstrap/claude-laptop-setup.bat`
|
||||
- Bundled binary: `projects/msp-tools/howard-bootstrap/grepai.exe`
|
||||
- Old installer (kept): `projects/msp-tools/howard-bootstrap/setup.bat`
|
||||
- Repo startup config: `.mcp.json` (root), `.claude/settings.json`, `.claude/settings.local.json`
|
||||
- Claude Code MCP-disable key: `disabledMcpjsonServers` (array) in `.claude/settings.local.json`
|
||||
- Desktop launcher created on laptop: `%USERPROFILE%\Desktop\ClaudeTools.bat`
|
||||
Reference in New Issue
Block a user