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 correction: the caller-identity env var MECHANISM is fine (a per-call PREFIX is clean and leaks nothing); only a durable shared-profile export misattributes. Records all three measured forms so the next reader picks the prefix rather than over-correcting away from env vars entirely.
1 file changed
+16−7
dev-skills/pup-bridge-dev/SKILL.md+16−7@@ -1093,13 +1093,22 @@ thread would have claimed to be "pup bridge maintenance", which is worse than no 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.+**Correction (John pushed back, and he was right): the env var MECHANISM is fine — it is `export`ing it+DURABLY that breaks.** Measured all three forms on this container:++| form | works? | scope |+|---|---|---|+| `ADOM_AI_THREAD="<name>" adom-desktop …` (prefix, no export) | yes | that ONE process — leaks nothing |+| a bare call right after that prefix | refused | confirms the prefix is scoped |+| `export` then N calls inside ONE shell invocation | yes, all N | that invocation only |+| `'{"caller":{"aiThread":"<name>"}}'` or flat `'{"aiThread":"<name>"}'` in args | yes | that call |++**Prefer the PREFIX form for ad-hoc calls** — thread-accurate, zero shared state, and less invasive than+restructuring a verb's JSON to add a `caller` object. Use `export` at the top of a multi-command script+(ship.sh does this: one invocation, one identity). **Never in a shared profile**, which is the only thing+that was actually wrong. Do not over-claim this as an AD design flaw: AD accepts env-var OR args, which is+flexible enough; the defect is the doc's "set it once per session / strictly better" advice, since on a+persistent multi-thread container the natural way to satisfy that is a profile edit. **Two traps worth remembering beyond identity:** - **A non-interactive shell does not read the tail of `~/.bashrc`.** Tool-driven shells are `$- = hmtBc`