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
publish skill: fold in all recent learnings — source-only dev skills (not SKILL.md), lean tarball/no-zip check, .codex deploy, stale retired-wiki URL scrub, canonical URL formats, user-first discovery triggers
1 file changed
+74−4
dev-skills/pup-bridge-publish.md+74−4@@ -1,7 +1,7 @@ --- name: pup-bridge-publish user-invocable: false-description: "DEVELOPER skill — the exact, battle-tested recipe for publishing a new version of the Adom Desktop Puppeteer (pup) bridge to wiki.adom.inc, plus every gotcha hit live. NOT for general users. Read before cutting a release: which artifact goes where (pkg=skills, release=bridge zip), the version-lockstep rules, the `files` allowlist + `skills/**` glob trap, the hero-bloat fix, sha matching, and the verify steps. Trigger words: publish pup bridge, ship pup bridge, release pup, pkg publish, repo push, adom-wiki release, bridge manifest, pup version bump, adom-desktop-puppeteer-bridge publish."+description: "DEVELOPER skill — the exact, battle-tested recipe for publishing a new version of the Adom Desktop Puppeteer (pup) bridge to wiki.adom.inc, plus every gotcha hit live. NOT for general users. Read before cutting a release: which artifact goes where (pkg=skills, release=bridge zip), version-lockstep, the `files` allowlist + `skills/**` glob trap, keeping the tarball lean (NO zip / NO src / NO heroes), keeping dev/publish skills SOURCE-ONLY (not SKILL.md), deploying skills to .claude AND .codex, scrubbing stale retired-wiki (wiki-ufypy5dpx93o.adom.cloud) URLs, user-first discovery triggers, sha matching, and verify steps. Trigger words: publish pup bridge, ship pup bridge, release pup, pkg publish, repo push, adom-wiki release, bridge manifest, pup version bump, no zip in tarball, dev skill source only, scrub old wiki url, codex skills, discovery triggers, adom-desktop-puppeteer-bridge publish." --- # pup-bridge-publish — shipping a new pup bridge version@@ -105,9 +105,11 @@ The pkg description lives in the root **`package.json`** `description` — keep just because a version appears in `pkg info`. - **sha/size mismatch → `bridge_install` rejects the manifest.** Releases preserve the uploaded sha, so use the `release upload` response values verbatim and re-download to confirm.-- **The Skills tab is populated from the published PKG, not `page.json`** (`page.skills` is null even on- pages with a full Skills tab). If skills aren't showing, you didn't `pkg publish` them (or the `files`- glob dropped them).+- **The Skills tab + `skill_count` + `adom-wiki skills install` come from the GIT REPO, not the pkg.**+ The wiki indexes **every `SKILL.md`** in the page repo (root = main skill; `<dir>/SKILL.md` = sub-skills)+ — `page.skills` is null; it's a repo scan. So a file named `SKILL.md` ANYWHERE in the repo becomes an+ indexed, tab-listed, `skills install`-able skill. (This is *separate* from `pkg install`, which installs+ the pkg tarball governed by the `files` allowlist.) Corollary → see "Keep dev/publish skills source-only". ## Verify (every ship) @@ -119,3 +121,71 @@ adom-desktop --target <name> bridge_install '{"manifestUrl":".../files/adom-brid adom-desktop --target <name> browser_readiness '{}' # render the page in pup + READ the screenshot (curl 200 is NOT verification). Confirm version + Skills tab. ```++## Keep dev/publish skills SOURCE-ONLY (not on the Skills tab, not installed)++Everyday users should get ONLY the `pup` user skill — not the dev/publish skills. But the wiki indexes+every `SKILL.md` in the repo (above), so a dev skill named `SKILL.md` would show on the Skills tab AND+install via `skills install`. The fix: keep dev/publish skills as **source-only docs that are NOT named+`SKILL.md`** — they live in `dev-skills/` as `pup-bridge-dev.md` / `pup-bridge-publish.md`. Then they are:++- **not indexed** (`skill_count` stays 1), **not on the Skills tab**, **not `skills install`-able**;+- still in git → available via `adom-wiki repo clone` (and the Files tab);+- excluded from the pkg too (the `files` allowlist lists only `SKILL.md` + `skills/**`).++`dev-skills/README.md` tells a developer how to load one as a live skill (copy it to+`~/.claude/skills/<name>/SKILL.md`). **Verify after publish:** `skill_count` should be **1** —+`curl -s https://wiki.adom.inc/api/pages/adom/adom-desktop-puppeteer-bridge | jq '.page.skill_count'`.++## Keep the pkg tarball LEAN — NO zip, NO src/, NO heroes++The pkg tarball must be the `pup` user skill ONLY — never the bridge runtime zip, `src/`, or hero PNGs.+Guards: the `package.json` `files` allowlist (`SKILL.md`, `skills/**`, `install.sh`, `uninstall.sh`,+`README.md`, `package.json`) **plus** `.gitignore` (`*.zip`, `*.png`, `*.bundle`, `*.tgz`, the old+`*-source.tar.gz`). **ALWAYS** `adom-wiki pkg pack` then `tar tzf *.tgz` and confirm there is **no+`*.zip`, no `src/`, no `*.png`**. A lean tarball is ~10 KB; if it's megabytes, something heavy leaked in+(it was 16 MB before the guards). `rm -f *.tgz` after inspecting.++## Skills install to BOTH .claude AND .codex++`install.sh` deploys the user skill into **both `~/.claude/skills/` and `~/.codex/skills/`** (Codex only+if `~/.codex` exists); `uninstall.sh` removes from both. Codex is a real second agent skills home now —+don't ship an install.sh that only does `.claude`.++## Scrub stale retired-wiki URLs (the #1 fork/extract gotcha)++**The only wiki host is `wiki.adom.inc`. `wiki-ufypy5dpx93o.adom.cloud` is RETIRED** — as are the+`/static/apps/...` and `/wiki/apps/...` path formats. When you fork/extract a page, the inherited+`README.md` and the `page.json` `readme` body carry OLD URLs (this bit us live — a dead `static/apps`+zip link). Before every publish:++```bash+grep -rnI 'wiki-ufypy5dpx93o\|adom\.cloud\|/static/apps\|/wiki/apps' . --exclude-dir=node_modules+```++Fix every hit (README + the `page.json` `readme` body are the usual culprits), then VERIFY the **live**+entity (not just local):++```bash+curl -s https://wiki.adom.inc/api/pages/adom/adom-desktop-puppeteer-bridge | grep -c wiki-ufypy5dpx93o # want 0+```++Also `repo rm` any stale source-mirror artifacts left on the page (old `*-source.tar.gz` / `*.bundle`).+(`https://adom.inc/fonts/...` is fine — that's the brand font CDN, not a wiki host.)++## Canonical wiki.adom.inc URL formats++- **Page:** `https://wiki.adom.inc/adom/<slug>`+- **File (served, anon):** `https://wiki.adom.inc/api/v1/pages/<slug>/files/<name>`+- **Release download:** `https://wiki.adom.inc/download/adom/<slug>/<ver>/<file>`+- **Sibling pages:** `/adom/adom-desktop-bridges`, `/adom/adom-desktop-kicad-bridge`,+ `/adom/adom-desktop-fusion-bridge`, `/adom/adom-desktop`++## Discovery triggers — lead with everyday USER phrases++Lead `discovery_triggers` with everyday phrases, not dev jargon — the single most important is bare+**`pup`**, plus `open in pup`, `open my app in pup`, `screenshot the page`, `record a browser window`,+etc. The wiki **auto-generates** the discover snippet from `discovery_triggers` + `discovery_pitch`+(there is no separate "upload a snippet" — those two fields ARE the snippet). Set them via+`adom-wiki discover triggers <ref> --add ...` OR `page.json` `discovery_triggers`/`discovery_pitch` + push.+**Verify:** `adom-wiki discover preview "open my app in pup"` should rank this page #1.