# AO — Abstract Objective

> Free browser tools that run entirely on the visitor's machine — no upload, no file-size limit, no daily cap, no sign-up — plus short evidence-backed knowledge entries, plus AIsle, a product for connecting the assistants a person already pays for into one conversation. Every knowledge claim is at most 256 characters and carries measured numbers with dated sources. Every page has a Markdown copy at its address plus index.md (AIsle's is at https://abstractobjective.dev/aisle/about/index.md), and the page's own address answers in Markdown to a request that puts text/markdown first in its Accept header. How to point an agent here: https://abstractobjective.dev/agents/

## Tools
- [Background Remover](https://abstractobjective.dev/tools/background-remove/index.md): Cut the background out of a portrait at full resolution, free and uncapped — the neural network runs in your browser, so the photo never leaves it. Scriptable via window.AOBackgroundRemove.
- [EXIF & Metadata Remover](https://abstractobjective.dev/tools/exif-strip/index.md): See what your photos are quietly carrying — GPS, camera, serial numbers — and strip it without touching a pixel. Scriptable via window.AOMetadata.

## AI knowledge
Written for AI agents (https://abstractobjective.dev/ai/): measured facts about Claude Code, MCP, Windows and the web, each with its numbers, what it did not prove, and dated sources. The same entries, with the human ones below, as a read-only MCP connector, no sign-in: https://abstractobjective.dev/knowledge/mcp (how to connect: https://abstractobjective.dev/agents/)
- [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): 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): 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): 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): 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): 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): 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): 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): 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): 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): 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): 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): 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): 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): 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): 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.

## Knowledge
Short reading for people (https://abstractobjective.dev/knowledge/).
- [How AI works: an LLM is a next-word guesser at giant scale](https://abstractobjective.dev/knowledge/how-ai-works/index.md): An LLM is a next-word guesser at giant scale: text becomes numbers, flows through billions of learned weights, and out comes a probability for every possible next token. All it "knows" was pressed into those weights by predicting trillions of words.
- [Why tools that never upload can stay free](https://abstractobjective.dev/knowledge/why-ao-tools-are-free/index.md): Web tools that compute in your browser cost their operator almost nothing per use — so they can stay free, without caps. The big converters upload your files to servers instead; paying for those servers is why they limit you and charge.
- [llms.txt and AI bots: 97% of files got no fetches; coding agents fetch it, not by habit](https://abstractobjective.dev/knowledge/ai-search-does-not-read-llms-txt/index.md): AI search barely reads llms.txt: across 137,210 domains, 97% of the files got no fetches, and AI search bots sent 1.1% of the requests (Ahrefs, 2026). Coding agents do fetch it when a link points there. Publish one, link it, never build around it.

## AIsle by AO — one product, not a shelf
Unlike the tools above, AIsle needs an account and runs on a server, so it cannot make the tools'
no-caps promise and does not pretend to. Note the direction of the connection: an assistant joins a
conversation by reaching AIsle, either by signing in to AIsle (Claude) or with a key AIsle issued
(any other assistant). AIsle does not collect, store or intermediate any AI vendor's credentials, and
offers no "sign in with" for any AI vendor. People sign in with Google.
- [AIsle by AO](https://abstractobjective.dev/aisle/about/index.md) — STATUS: IN PREVIEW (Usable, with people invited a few at a time.): AIsle turns one goal into finished, checked work, done by many AIs and people at once. Assistants that can join: Claude (first), Codex, Cursor, Antigravity CLI, Copilot CLI. Free: Everything, during the invite-only pilot: no ceiling on the people or assistants in a room, and up to three assistants for each person, each on its owner's own subscription.

## Attribution
- [Licences of everything we serve](https://abstractobjective.dev/licenses/)
