Magic Tools
Hands-OnBy CooconAugust 7, 2026146 views2 min read

claude install Creates a Broken %h Symlink? Clean Debian Test Comes Out Fine (Not Reproduced)

What this article is: a not-reproduced field report. We could not reproduce the reported problem — which does not mean the report is wrong, only that it does not show up in the environment and with the method below. Every command and its raw output is included; cross-check us.

What the original report says

GitHub issue #83484 (Fedora 44 + bash, Claude Code 2.1.220): after running the official one-line installer, ~/.local/bin/claude is a broken symlink —

$ curl -fsSL https://claude.ai/install.sh | bash
$ file ~/.local/bin/claude
/home/user/.local/bin/claude: broken symbolic link to %h/.local/share/claude/versions/2.1.220

The %h in the target is an unexpanded placeholder (the systemd-style home-directory specifier) that should have become /home/user. The reporter traced the problem not to the shell installer but to the binary's internal install subcommand, and confirmed it is a regression ("this worked in a previous version"). The issue links a fix PR (#83738, unmerged at reporting time).

Our test: it comes out fine

Environment: a clean debian:bookworm-slim Docker container, root user, 2026-08-06, running the exact command from the report:

$ curl -fsSL https://claude.ai/install.sh | bash
$ ls -la /root/.local/bin/claude
lrwxrwxrwx 1 root root 42 Aug  6 10:23 /root/.local/bin/claude -> /root/.local/share/claude/versions/2.1.223
$ file /root/.local/bin/claude
/root/.local/bin/claude: symbolic link to /root/.local/share/claude/versions/2.1.223

Two key observations:

  1. The symlink is valid — the home directory in the target path expanded correctly to /root, with no literal %h anywhere
  2. install.sh currently ships 2.1.223, three releases past the reported 2.1.220 (2.1.221/222/223 released August 3/4/5)

Why it did not reproduce: three candidate explanations

Ordered by strength of evidence:

Explanation 1: fixed somewhere in 2.1.221–2.1.223 (most likely). The report was against 2.1.220, a fix PR exists, and install.sh now ships 2.1.223 — if the fix landed in any of those releases, fresh installs simply no longer hit it. We could not find release notes explicitly saying "fixed %h expansion", so this remains unconfirmed.

Explanation 2: distro-specific. The report is from Fedora 44; we tested Debian 12. %h is the home-directory specifier used in systemd unit files — if the binary's install subcommand reads a path template from systemd-related configuration on some systems, behavior could vary by distro. This is a mechanism guess; we have no Fedora environment to verify it.

Explanation 3: leftover state in the reporter's environment. The reporter said a previous version worked, so remnants of the older install may have participated in path generation. A clean container has no remnants — which might be exactly why we cannot trigger it. Equally unconfirmed.

Whatever the root cause, the repair is deterministic (the workaround the reporter verified in the issue):

# Point the broken link at the version directory that actually exists
ls ~/.local/share/claude/versions/        # see what versions you have
ln -sf ~/.local/share/claude/versions/<version> ~/.local/bin/claude
claude --version                          # verify

Or simpler: re-run the official install command — the 2.1.223 it currently ships came out clean in our test.

Scope and boundaries

  • This article proves only: a clean Debian 12 environment + the 2026-08-06 install.sh (shipping 2.1.223) does not exhibit the problem
  • It does not prove: that Fedora is fixed, that the 2.1.220 problem never existed, or that every environment is fine
  • If you can still reproduce it on another distro (especially Fedora with 2.1.221+), please add your environment details to issue #83484 — that would directly falsify explanation 1 and substantiate explanation 2

Related Articles

You Set ANTHROPIC_BASE_URL. Claude Code Ignored It.

I exported ANTHROPIC_BASE_URL in .zshrc to point at a self-hosted API gateway, and Claude Code kept talking to Google Vertex anyway. On the same machine, a launchd-managed web UI insisted it wasn't authenticated at all. Neither bug was in the gateway — both were in the gap between 'I set the env var' and 'the process actually has it.'

claude-codebug-postmortem+2
pitfallsAug 24, 20265 min
32

Claude Didn't Write That Printer Driver: 14KB of Glue, a Linux Container, and HP's Own Binary

A tweet claiming Claude wrote a macOS driver for a Windows-only HP printer pulled 2.62 million views. Pull the repo and you find 6,497 bytes of shell, 7,638 of Python, 550 of Dockerfile — not one line of C. The actual encoding is done by rastertospl, a binary from HP's official Linux driver, running in a Linux container on the Mac. Hacker News caught this. But debunking isn't the point: the genuinely valuable parts of that four-hour session (reading the printer's own error pages, escaping the CUPS sandbox, writing USB directly) and the fact that the decisive turn came from the human, not from Claude, are a precise measurement of where AI's grunt-work ability currently ends.

claude-codeopen-source+6
claudeAug 19, 202611 min
98

Fable 5 Has a 1M Context Window, So Why Does the Status Line Say 200k? Capture the Data Before You Swap the Tool

Claude Fable 5 officially ships with a 1M-token context window, yet the Claude Code status line kept showing 200k as the denominator. The first instinct — 'let's switch to a better statusline' — was wrong. This postmortem walks through the full debugging process: one line of tee to capture the statusline's stdin, hard evidence that the official field misreports 200000 for new models, and a model-table fix. Plus a general lesson: swapping tools never fixes a broken data source.

llmclaude-code+3
pitfallsAug 14, 20264 min
192

Claude Code Says No conversation found to continue — Your -p Sessions Are Being Filtered Out

You run a headless claude -p command, then type claude --continue to pick it up interactively — and get No conversation found to continue, even though the session file sits right there on disk. This is a regression introduced in v2.1.90: the --resume picker's 'hide -p/SDK sessions' filter was mistakenly applied to --continue, which should continue the latest session unconditionally. We reproduced it end to end on macOS + v2.1.220 (the GitHub issue reports Fedora, so both platforms confirm), and verified two workarounds: headless -p --continue has always worked, and prefixing CLAUDE_CODE_ENTRYPOINT=sdk-cli lets interactive --continue bypass the filter with full history loaded.

claude-codeheadless+4
hands-onAug 6, 20263 min
231