app
Pup - the AI's own browser
Public Made by Adomby adom
pup gives your AI a real browser on your desktop that it drives completely, in the background, signed in as you: windows that never jump in front of your work, one shared profile that learns your logins, and every window labeled on the taskbar with its AI thread's name.
← Commit history
Dev skill: caller identity must be passed PER CALL, not via a shared-container env var (John's catch) — plus the non-interactive .bashrc guard that made the documented env-var fix a silent no-op.
1 file changed
+34
dev-skills/pup-bridge-dev/SKILL.md+34@@ -1076,3 +1076,37 @@ to a shared response path must ask "who is this response FOR?" first. Health pro supervisors will burn a caller-facing budget long before a caller ever arrives — and it fails silently, because the feature simply never appears. Verify by triggering the real path (restart, then inspect the FIRST verb), not by reading the code and assuming.++## Caller identity is PER-CALL, never an env var in a shared container (2026-07-25)++AD ≥1.9.180 refuses every relayed command that doesn't name the AI thread issuing it+(`errorCode: caller_identity_required`). The `adom-desktop-caller-identity` skill recommends setting+`ADOM_AI_THREAD` once per session and calls the env var "strictly better". **That guidance is wrong for+Adom's topology, and following it makes the Activity Log lie.** John caught it instantly: *"an env var+makes no sense... I typically have about 20 AI threads running... that env var would be getting changed+by every AI thread non-stop."*++**Why:** the env var scopes to a SHELL ENVIRONMENT, but many AI threads share ONE container and ONE+`$HOME` (measured: many `/tmp/claude-1001/-home-adom-project/<session-uuid>/` dirs, all this container).+So either every thread reports the SAME name (I put it in `~/.bashrc` as documented — every sibling+thread would have claimed to be "pup bridge maintenance", which is worse than no attribution because it+is plausible and wrong), or threads race to rewrite one shared value and concurrent calls are+misattributed. Identity belongs to the thread; the environment belongs to the container.++**Use the per-call form** (verified working with no env var set):+```bash+adom-desktop --target X <verb> '{"caller":{"aiThread":"<name>","containerName":"<c>"}}'+adom-desktop --target X <verb> '{"aiThread":"<name>"}' # flat form also accepted+```+An env var is only safe INSIDE a single script's own process (ship.sh does this: one invocation, one+identity, no sharing). Never in a shared profile.++**Two traps worth remembering beyond identity:**+- **A non-interactive shell does not read the tail of `~/.bashrc`.** Tool-driven shells are `$- = hmtBc`+ (no `i`) and the stock Ubuntu `.bashrc` has `case $- in *i*) ;; *) return;; esac` near the top, so+ anything appended below it NEVER RUNS. My "fix" produced no error and no identity — the export simply+ never executed. If an env var you set in a profile appears to have no effect, check that guard before+ anything else.+- **Verify a config change took effect in a FRESH shell, don't assume the write was the fix.** I claimed+ the profile fix worked; one `echo` of the variable proved it hadn't. Reported as adom/adom-desktop#37,+ asking for a global `--ai-thread` flag so the CORRECT mechanism is also the ergonomic one.