Troubleshooting
Real failure modes, real causes, real fixes — ordered by how often they bite.
Claude Code (terminal)
Symptom: "ANTHROPIC_API_KEY is not set" but you set it in .env.
Likely cause: the line in .env is commented
out (starts with #), or you pasted onto a commented placeholder
line without removing the #. tsx ignores commented
lines.
Fix: open .env in your editor, check that the
ANTHROPIC_API_KEY= line has no leading #, save.
Or run lwc env set ANTHROPIC_API_KEY and let the lwc store
serve it. See /secrets for the full secret-handling
story.
Symptom: "ANTHROPIC_API_KEY is not set" everywhere — no .env, no lwc env get.
Likely cause: you skipped the lwc setup
hidden prompt and never set the key any other way.
Fix: run lwc env set ANTHROPIC_API_KEY in
your terminal. Hidden prompt; paste the key; it's stored at
~/.lwc/env.json with chmod 600.
Symptom: verify returns 401 from Anthropic.
Likely cause: the key value itself is wrong — a typo, a
revoked key, or a partial copy. Or you pasted onto a .env
placeholder line where some characters survived from the template.
Fix: confirm the key's shape with
jq -r .ANTHROPIC_API_KEY ~/.lwc/env.json | wc -c — should be
about 108 characters. Re-set if anything looks off.
Verify: hit the API directly.
curl -H "x-api-key: $(lwc env get ANTHROPIC_API_KEY)" \
https://api.anthropic.com/v1/messages \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-haiku-4-5","max_tokens":4,"messages":[{"role":"user","content":"hi"}]}'
A 200 confirms the key is valid; 401 means the
key is bad.
Symptom: Claude Code's first session after install doesn't see the workshop plugin.
It greets you generically and never fires the setup-workshop
skill.
Likely cause: the plugin marketplace clone is async on first launch. The first session shipped before the clone completed.
Fix: exit Claude Code (Ctrl-C twice or
/exit) and relaunch. The second session has the marketplace
ready. The install.sh script pre-clones the marketplace to
mitigate this, but per-version cache extraction is still lazy, so a
relaunch may be needed.
Symptom: lwc: command not found.
Likely cause: npm install -g @learning-with-court/cli succeeded but the
global npm bin directory isn't on your PATH.
Fix: run npm config get prefix to find your
npm prefix. Add <prefix>/bin to your shell
PATH. Or rerun
curl -fsSL https://workshop.institute/install.sh | bash — the
installer detects this and prints a PATH export hint.
Symptom: pnpm install warns about ignored build scripts.
Typically better-sqlite3, esbuild, or
lefthook.
Likely cause: pnpm 10 changed the default for transitive
deps' install scripts. Workshop repos ship an
onlyBuiltDependencies allowlist; if you're seeing this, your
local clone is older than 2026-05-11.
Fix: lwc update <workshop-id> to pull
the latest workshop content, then rerun pnpm install.
Symptom: setup-workshop picks a workshop without asking.
You said something generic like "I want to start a workshop" and Claude jumped straight into one instead of presenting the catalog.
Likely cause: stale plugin cache from a pre-fix version.
Fix: exit Claude Code, then refresh:
lwc auth logout
rm -rf ~/.claude/plugins/cache/learning-with-court
curl -fsSL https://workshop.institute/install.sh | bash Relaunch Claude Code.
Cowork (claude.ai, Desktop, mobile)
Symptom: adding the marketplace fails with a generic "sync failed".
Likely cause: the UI surfaces a generic message regardless of the real error. The actual reason is logged locally.
Fix: open the log to see the real error —
~/Library/Logs/Claude/claude.ai-web.log on macOS. The most
common culprit is a plugin name that doesn't match
[a-z][a-z0-9-]* (lowercase letters, digits, hyphens). If you
typed the marketplace as anything other than
learning-with-court/lwc, re-check the spelling.
Symptom: the connector won't connect, or sign-in loops.
Likely cause: a stale connection from an earlier attempt, or you connected before the plugin finished installing.
Fix: disconnect the connector, confirm the plugin shows as installed, then connect again and sign in. Order matters — install the plugin first, connect second. The full sequence with screenshots is on the Add to Claude page.
Symptom: Claude asks "which workshop?" instead of starting one.
Likely cause: a new chat doesn't carry workshop context. Until you pick one, the tools don't know which workshop you mean.
Fix: say "I want to start a workshop" and let it list the catalog, or name the workshop directly ("start the skill-authoring workshop"). Once one is active, the rest of the session stays on it.
If you hit something not on this list
File an issue at
github.com/learning-with-court/<workshop-id> and paste
the verbatim error message plus the output of lwc --version
and lwc list. We'd rather get a noisy "is this a bug?" issue
than have you give up — most of the entries on this page started as one of
those.