# AI knowledge — AO

> Written for AI agents. Measured facts about Claude Code, MCP, Windows and the web that the vendors' docs do not state. Each entry has the symptom as people write it, a claim of at most 256 characters, the numbers that prove it, what it did not prove, and dated sources.

Read-only MCP connector, no sign-in: https://abstractobjective.dev/knowledge/mcp (tools: search_knowledge, get_entry).

- [claude --desktop "can't run non-interactively" from a script: open claude://resume instead](https://abstractobjective.dev/ai/claude-desktop-cant-run-non-interactively-redirected-output/index.md) (2026-10-17; claude-code, claude-desktop, windows): claude --desktop exits 1 when its output is redirected, from a script or hook: "can't run non-interactively (... or redirected output)". Opening claude://resume?session=<id> via rundll32 switched the app to that chat. Measured by AO, 2026-10-09 to 10-17.
- [Claude Code leaves MCP servers running on Windows when killed: cmd /c and npx servers stay](https://abstractobjective.dev/ai/claude-code-windows-killed-session-leaves-mcp-servers/index.md) (2026-10-17; claude-code, mcp, windows): When claude.exe is killed on Windows, a stdio MCP server started via cmd /c or npx that ignores stdin closing keeps running: 4 of 4 kills. Normal ends left nothing, 0 of 10; servers that exit on stdin end never leaked. Measured by AO, 2026-10-17.
- [MCP server instructions cut off in the Claude desktop app: 2,048 characters, not 4,096](https://abstractobjective.dev/ai/claude-code-mcp-server-instructions-cut-2048-desktop-app/index.md) (2026-10-17; claude-code, mcp, claude-desktop): In the Claude desktop app, Claude Code 2.1.299 cut a connector's MCP server instructions at 2,048 characters, mid-word, with no marker. The docs give 4,096 from 2.1.296, and the CLI passed the same text whole. Measured by AO, 2026-10-17.
- [Claude Code Bash tool on Windows halves backslashes; long commands fail near 7,800 chars](https://abstractobjective.dev/ai/claude-code-bash-tool-windows-halves-backslashes/index.md) (2026-10-17; claude-code, windows, git-bash, shell): On Windows, Claude Code's Bash tool turns every pair of backslashes into one, even inside single quotes and a quoted heredoc, and a command over about 7,786 characters fails with a misleading quote error. Measured by AO, 2026-10-17.
- [Headless Chrome --window-size=375 screenshot shows the desktop layout, cut off at 375 px](https://abstractobjective.dev/ai/headless-chrome-window-size-375-screenshot-shows-desktop-layout/index.md) (2026-10-10; chrome, testing, windows, css): On Windows 11, Chrome 154 and Edge 155 with --headless=new lay a page out at least 504 and 496 px wide, so a --window-size=375 screenshot shows the wide layout cut off at 375 px. chrome-headless-shell gives 375. Measured by AO, 2026-10-10.
- [White square behind Claude connector icons: Google's copy of an SVG-only favicon is opaque](https://abstractobjective.dev/ai/google-favicon-copy-of-svg-favicon-loses-transparency/index.md) (2026-10-11; favicons, google, mcp, claude): Google's favicon service, which Claude's apps use for connector icons, returned 7 of 7 transparent SVG-only favicons at size 64 with no transparency left (white behind the mark in 6), and kept it in 8 of 8 PNG or ICO favicons. Measured by AO, 2026-10-09.
- [Caddy access logs in journalctl despite a log file: unknown hosts go to the default log](https://abstractobjective.dev/ai/caddy-unmatched-host-requests-go-to-default-log/index.md) (2026-10-09; caddy, linux, systemd, logging, privacy): Once a Caddyfile site has its own log, Caddy also logs requests for unknown hosts (a bare IP, no Host) to its default log, the journal under systemd (journalctl), with the whole address: 8,577 lines in 15.5 days on AO's server. Measured by AO, 2026-10-09.
- [Connection refused on localhost takes 2 seconds on Windows: SYN retries, except in Node.js](https://abstractobjective.dev/ai/windows-refused-localhost-connection-takes-2-seconds/index.md) (2026-10-08; windows, networking, testing): On Windows 11 a connection to a closed port on localhost (127.0.0.1) is refused only after 2 s in curl before 8.22.0, Python and .NET, because Windows retries the SYN. Node.js gets ECONNREFUSED in 1-5 ms, Linux in 0.2 ms. Measured by AO, 2026-10-08.
- [Deterministic git commit hashes on Windows and Linux: build test repos with fast-import](https://abstractobjective.dev/ai/git-fast-import-same-commit-ids-on-every-machine/index.md) (2026-10-08; git, testing, windows): git fast-import gave the same commit hashes on Windows (Git 2.54) and Linux (Git 2.53), with no config and with failing commit hooks, signing, autocrlf and another user, where git commit failed. SHA-256 repos get other hashes. Measured by AO, 2026-10-08.
- [Git Bash find / may not finish: / is not C:, and a killed bash can leave find.exe orphaned](https://abstractobjective.dev/ai/git-bash-find-root-outlives-its-shell/index.md) (2026-10-08; windows, git-bash, shell): In Git Bash on Windows, / is Git's own folder, not C:, and find / may not end: AO found 26 running, the oldest for 22 hours. Killing bash, even with taskkill /T, left its child running, orphaned, in 2 of 2 runs. Measured by AO, 2026-09-21 and 2026-10-08.
- [Claude Code plugins not auto-updating in the desktop app: it sets DISABLE_AUTOUPDATER=1](https://abstractobjective.dev/ai/claude-desktop-app-skips-plugin-auto-update/index.md) (2026-10-08; claude-code, plugins, desktop-app): The Claude desktop app starts each chat with DISABLE_AUTOUPDATER=1, so its log says "Plugin autoupdate: skipped (auto-updater disabled)" despite autoUpdate: true. FORCE_AUTOUPDATE_PLUGINS=1 in settings restores it. Measured by AO on Windows, 2026-10-06.
- [Claude Code PreToolUse updatedInput drops fields silently: it replaces the whole input](https://abstractobjective.dev/ai/claude-code-pretooluse-updatedinput-replaces-whole-input/index.md) (2026-10-08; claude-code, hooks, mcp): In Claude Code, a PreToolUse hook's updatedInput replaces the whole tool input, so a field it leaves out is silently dropped. AO's hook returned one field, and the room Claude named never reached the server. Seen by AO, 2026-10-08; fixed in plugin 0.3.7.
- [Claude Code hooks slow on Windows: each program a hook starts cost AO 43 to 203 ms](https://abstractobjective.dev/ai/claude-code-hooks-on-windows-cost-per-program/index.md) (2026-10-08; claude-code, hooks, windows, git-bash): Claude Code hooks (PreToolUse, PostToolUse) run in Git Bash on Windows: each program a hook starts cost AO 43-203 ms, against 1.4 ms on Linux, same PC. Builtins took AO's edit hook from a median of 3.0-5.3 s to 0.09-0.17 s. Measured by AO, 2026-10-08.
- [Caddy reload "permission denied" on a log file, though caddy validate as root passed](https://abstractobjective.dev/ai/caddy-validate-as-root-misses-log-file-permissions/index.md) (2026-10-08; caddy, linux, systemd, deploys): As root, caddy validate passes a log file the caddy user cannot open; Caddy then refuses the config: "permission denied". A refused reload keeps the old config serving; restarting after one cost AO 4 minutes offline. Seen by AO, 2026-09-24 and 2026-10-08.
- [Claude Code MCP server connected but no tools: "missing required resultType" (2026-07-28)](https://abstractobjective.dev/ai/mcp-2026-07-28-claude-code-drops-tools/index.md) (2026-10-07; ai, mcp, claude-code): Claude Code 2.1.286 drops every tool of an MCP server that speaks revision 2026-07-28 but sends no resultType ("missing required resultType") or no ttlMs and cacheScope on tools/list. Echoing the client's version opts you in. Measured by AO, 2026-10-06.

Page for people: https://abstractobjective.dev/ai/

The index of the whole site, for agents: https://abstractobjective.dev/llms.txt
