← Commit history
README.md+177−1
@@ -1,3 +1,179 @@ # Adom Wiki Skill Pack -How to use the Adom Wiki without breaking pages β€” five tools in one, three repo archetypes (Page, Skillpack, Family), 13 skills in one install.+**One install, 13 skills that teach the AI to use the Adom Wiki without breaking+pages β€” plus a write-up of the wiki repo archetypes that have emerged from real+use.**++![Adom Wiki Skill Pack](/blob/skill/adom-wiki-skillpack/screenshots/hero.png)++Publishing to [wiki.adom.inc](https://wiki.adom.inc) is powerful but fraught: the+AI re-breaks pages (unlinks heroes, base64-mangles READMEs, writes only one of+the two storage layers, forgets to verify what it shipped). And as the wiki has+been used heavily, a set of **repo archetypes** has quietly emerged β€” patterns+nobody had named or written down. This pack fixes both: it bundles the publishing+know-how as installable skills, and it names the archetypes so they can be used+deliberately.++> **πŸ“Œ Note for Colby (and anyone building the wiki):** the section+> [**The repo archetypes**](#the-repo-archetypes-emerging-from-real-use) is for+> you. It documents the page structures that have emerged from heavy real-world+> use of the wiki β€” Page, Skillpack, and Family β€” and a few features they lean on+> (private source + public releases, the private readme, breadcrumbs, scoring).+> Some of it is built, some is partial, some is still a spec; each skill labels+> its status honestly. This is meant as a design mirror: here's how your heaviest+> user is actually structuring repos, so the platform can meet those patterns.++## Install++```bash+adompkg install adom-wiki-skillpack+```++This drops the main `adom-wiki-skillpack` skill plus 12 sub-skills onto your+container, and pulls in **`adom-wiki-hero-image`** (a dependency) for hero+generation.++## The wiki is five tools in one++It feels like a wiki, but it's a fusion of five tools you already know, all keyed+off one slug per page:++| # | Tool | Like | What it powers |+|---|---|---|---|+| 1 | **Git host** | GitHub repo | Files tab, README, commits, contributors |+| 2 | **adompkg** | npm | `install` / `publish` / `update`, dependency maps |+| 3 | **Release database** | GitHub Releases | versioned downloadable binaries |+| 4 | **Discussions** | GitHub Issues | a forum thread per page |+| 5 | **Pull requests** | GitHub PRs | community edits, owner reviews/merges |++Plus a **scoring/trending** layer (stars / high-fives / installs) and a+**presentation** layer (`README.md` or a custom `readme.html`, and a separate+**private readme** for proprietary pages).++The single most important consequence: **the git repo and the package registry are+two independent storage layers.** `adompkg publish` does *not* push your source to+git, and pushing files does *not* make a tarball. A correct publish writes both.+Doing one leaves the page half-broken β€” the root of most incidents.++## The repo archetypes (emerging from real use)++Three repo shapes have emerged. Naming them turns "how should I structure this?"+into a deliberate choice.++![The three Adom Wiki repo archetypes](/blob/skill/adom-wiki-skillpack/screenshots/archetypes.png)++### 1. Page β€” one page = one thing++A single page for a single app/tool/skill/doc. Two sub-variants by **source+visibility**:++- **Open-source Page** β€” source public + installable. _e.g._ `chip-fetcher`,+  `adom-usb`. MIT, contributions welcome.+- **Closed-source Page** β€” source **private**, releases/adompkg **public**, so+  people install the compiled app but can't read the code. _e.g._+  `hydrogen-desktop`, `adom-desktop`. Uses the **private readme** so the page+  still has public docs.++> The wiki lets the git source, the release/package, and the readme each be public+> or private independently β€” that's what makes a proprietary app and an+> open-source library both first-class on the same platform.++### 2. Skillpack β€” one repo, one main skill + N sub-skills++One repo / one installable package carrying a whole set of skills, deployed+together by a single `adompkg install`. Sub-skills are files under `skills/`, not+separate pages. **Convention: the slug ends in `-skillpack`** so the class is+recognizable.++- _e.g._ `adom-ui-design` (grandfathered, predates the suffix), and **this pack**.+- **This very repo is a Skillpack** β€” it dogfoods its own archetype.++### 3. Family β€” an anchor page + separately-published children++An anchor page plus children published as **their own pages**, joined by+convention rather than living in one repo:++- **Slug** `<parent>-<descriptor>`; **Title** leads with the parent+  (`Adom USB - CDC serial sniffer`); a **family tag** (`<parent>-plugin`); and+  **breadcrumbs** linking children back to the anchor.+- _e.g._ `adom-desktop` (+ bridges), `adom-usb` (+ sniffer/firmware plugins).++### Skillpack vs Family β€” the decision rule++Both are "a main thing + many smaller things." The divider is **ownership and+update cadence**:++- **Skillpack** when one author owns all the parts and they version *together*.+- **Family** when children have *independent owners or release cadences* β€” each is+  its own page, and third parties can add their own without touching the anchor.++**Worked example β€” `chip-fetcher`:** it's open source AND has many per-vendor+scraper skills (DigiKey, Mouser, TI, Analog Devices) that **change daily** and+that **third parties** want to own. As a Skillpack, every vendor tweak would force+the single owner to re-publish the whole pack. So it's better as a **Family**: an+anchor plus `chip-fetcher-digikey`, `chip-fetcher-mouser`, … each independently+publishable, discovered via the family tag + breadcrumbs. Rule of thumb: _does+each part need its own lifecycle and maybe its own author?_ Yes β†’ Family.++## The hard rules (page-breakers)++The pack encodes these; they're worth stating here too:++1. **Write both storage layers** every publish (git + registry).+2. **`adompkg publish` clobbers the hero** β€” it overwrites the repo's `page.json`+   (no `hero`), so the hero gets *unlinked* (not deleted) on every publish. Fix:+   **publish first, push a complete `page.json` LAST.** (This is the recurring+   "hero disappeared" bug.)+3. **Never base64 a text file** β€” only real binaries are base64.+4. **Versions are immutable** β€” bump; never delete-and-recreate (soft-delete trips+   a UNIQUE constraint).+5. **Verify with your eyes** β€” open the live page in pup and screenshot it before+   calling any wiki edit done.++## Skills in this pack++| Skill | What it's for |+|---|---|+| **adom-wiki-skillpack** | Entry point: the five-tools model, the archetypes, the hard rules, the map. |+| **wiki-anatomy** | The mental model β€” five tools in one, and the two storage layers. |+| **wiki-api** | The REST API + `adompkg` CLI and the publish workflow. |+| **wiki-publish-safely** | Operational pitfalls as hard rules + the verify-in-pup gate. |+| **wiki-readme** | Make a great README β€” `README.md` vs `readme.html`, sections, embeds. |+| **wiki-visibility** | Public vs private source, public releases, the private readme. |+| **wiki-repo-styles** | The archetype taxonomy and how to choose. |+| **wiki-family** | Build a Family: naming, family tag, anchor registry, breadcrumbs. |+| **wiki-skillpack** | Build a Skillpack: layout, install.sh, files[], the `-skillpack` suffix. |+| **wiki-hero** | Generate a hero, and never let it get unlinked. |+| **wiki-breadcrumbs** | Third-party "I built an add-on for X" links _(implemented, basic)_. |+| **wiki-forking** | Fork + community-PR contribution _(PRs live; fork-button planned)_. |+| **wiki-scoring** | Stars / high-fives / installs / trending _(stars live; rest partial)_. |++## Talk to the AI++- "Publish this tool to the wiki" β†’ wiki-api + wiki-publish-safely+- "What kind of wiki repo should this be?" β†’ wiki-repo-styles+- "Make a hero for this page" / "the hero disappeared" β†’ wiki-hero+- "Write a README for this page" β†’ wiki-readme+- "Keep the source private but let people install it" β†’ wiki-visibility+- "Bundle these skills into one package" β†’ wiki-skillpack+- "Add a child plugin to adom-usb / a bridge to adom-desktop" β†’ wiki-family++## Dependencies++| Dependency | Required? | Why |+|---|---|---|+| **adom-wiki-hero-image** | Yes | Generates the 16:10 hero billboard every page needs; self-contained (bundles brand fonts + wordmark + render pipeline). Pulled automatically by `adompkg install`. |++Companion tools (not hard dependencies): `adompkg` itself (the package manager),+and `adom-desktop` / pup for the verify-in-pup step.++## Relationship to gallia++Gallia's `adom-wiki-v2` and `adom-wiki-hero-image` skills remain the+employee-internal source of truth. This pack is the **public, installable digest**+of that knowledge plus the archetype taxonomy β€” same model as `adom-ui-design`.+Update gallia first, then refresh this page.++## License++MIT.
SKILL.mdadded+100
@@ -0,0 +1,100 @@+---+name: adom-wiki-skillpack+user-invocable: true+description: >-+  The Adom Wiki Skill Pack β€” the entry point for working with the Adom Wiki+  (wiki.adom.inc). Read this BEFORE creating, publishing, or restructuring any+  wiki page. The wiki is five tools in one (git host + adompkg package manager ++  release database + discussion forum + pull requests), and three repo+  archetypes have emerged from real use: Page, Skillpack, and Family. This pack+  routes to 12 focused sub-skills and carries the hard rules that keep pages from+  breaking. Trigger words: the wiki, adom wiki, wiki.adom.inc, publish to the+  wiki, wiki repo, wiki page, what kind of wiki repo, repo archetype, skillpack,+  super-skill, wiki family, parent child repo, wiki readme, hero unlinked,+  proprietary wiki page, private source public app, wiki breadcrumb, fork a wiki+  page, wiki scoring, trending, high five, adompkg publish.+---++# Adom Wiki Skill Pack++The Adom Wiki at **https://wiki.adom.inc** is the single canonical wiki. This+pack is the map for working with it. Gallia's `adom-wiki-v2` and+`adom-wiki-hero-image` skills remain the employee-internal source of truth; this+pack is the **public, installable digest** of that knowledge plus the repo+archetypes that have emerged from heavy real-world use β€” update gallia first,+then refresh this page.++## The wiki is five tools in one++It feels like a wiki, but it's a fusion of five tools you already know, all+keyed off one slug per page:++1. **Git host** β€” every page is a real git repo (Files tab, commits, contributors).+2. **adompkg** β€” an npm-style package manager: dependency maps, `adompkg update`.+3. **Release database** β€” versioned binary/tarball releases (like GitHub Releases).+4. **Discussion forum** β€” a thread per page (like GitHub Issues).+5. **Pull requests** β€” community edits proposed to a repo, the owner reviews/merges.++Cross-cutting: a **scoring/trending** system (stars / high-fives / install counts)+and a **presentation layer** (a plain `README.md`, or a custom `readme.html`, plus+a separate **private readme** for proprietary-source pages). Full model β†’+**wiki-anatomy**.++## Three repo archetypes (pick one before you publish)++| Archetype | One line | Examples | Build skill |+|---|---|---|---|+| **Page** | One page = one thing. Open-source (public source) or Closed-source (private source, public compiled app). | chip-fetcher, adom-usb / hydrogen-desktop, adom-desktop | wiki-visibility |+| **Skillpack** | One repo, one main skill + N sub-skills, installed together. Suffix `-skillpack`. | adom-ui-design, **this pack** | wiki-skillpack |+| **Family** | An anchor page + children published as separate pages, joined by naming + a family tag + breadcrumbs. | adom-desktop, adom-usb | wiki-family |++Decision: **Skillpack** when one author owns all the skills and they version+together; **Family** when children have independent owners or update cadences+(e.g. per-vendor scrapers that change daily). Full taxonomy β†’ **wiki-repo-styles**.++## The hard rules (the page-breakers)++These are the mistakes that recur. They each have a dedicated skill, but they're+important enough to state up front:++1. **Write BOTH storage layers, every publish.** The git repo (Files/README) and+   the package registry (tarball/`adompkg install`) are independent. Do only one+   and the page is broken. β†’ **wiki-api**, **wiki-publish-safely**.+2. **`adompkg publish` clobbers the hero.** It overwrites the repo's `page.json`+   with the package manifest (which has no `hero`), so the page-header hero gets+   unlinked on every publish. The image isn't deleted β€” its reference is. **Fix:+   publish FIRST, then push a complete `page.json` (with `hero`) to git LAST.** β†’+   **wiki-hero**, **wiki-publish-safely**.+3. **Never base64 a text file.** Text (`.md`, `.json`, `.sh`) goes as plain+   `content`; only real binaries (images) go base64. β†’ **wiki-api**.+4. **Versions are immutable.** Bump before republishing; never delete-and-recreate+   (soft-delete trips a UNIQUE constraint). β†’ **wiki-publish-safely**.+5. **Verify with your eyes.** After ANY wiki edit, open the live page in pup and+   screenshot-confirm it rendered before calling it done. β†’ **wiki-publish-safely**.++## Skill map++| Skill | Use it for |+|---|---|+| **wiki-anatomy** | The mental model: the five tools in one, and how the layers relate. |+| **wiki-api** | The REST API + `adompkg` CLI, the two storage layers, the publish workflow. |+| **wiki-publish-safely** | The operational pitfalls as hard rules; the verify-in-pup gate. |+| **wiki-readme** | How to make a great README β€” `README.md` vs `readme.html`, sections, embeds, images. |+| **wiki-visibility** | Public vs private source, public releases, the private readme, open vs closed pages. |+| **wiki-repo-styles** | The archetype taxonomy (Page / Skillpack / Family) and how to choose. |+| **wiki-family** | Build a Family: naming convention, family tag, anchor registry, breadcrumbs. |+| **wiki-skillpack** | Build a Skillpack: layout, install.sh, files[], skill map, the `-skillpack` suffix. |+| **wiki-hero** | The hero image: generate it (adom-wiki-hero-image), and never let it get unlinked. |+| **wiki-breadcrumbs** | Third-party "I built an add-on for X" links β€” the breadcrumb system. |+| **wiki-forking** | Fork + community-PR contribution flow (PRs live; fork-button planned). |+| **wiki-scoring** | Stars / high-fives / installs / trending β€” what's tracked and how to earn it. |++## Talk to the AI++- "Publish this tool to the wiki" β†’ wiki-api + wiki-publish-safely+- "What kind of wiki repo should this be?" β†’ wiki-repo-styles+- "Make a hero for this page" / "the hero disappeared" β†’ wiki-hero+- "Write a README for this page" β†’ wiki-readme+- "Keep the source private but let people install it" β†’ wiki-visibility+- "Bundle these skills into one package" β†’ wiki-skillpack+- "Add a child plugin to adom-usb" β†’ wiki-family
install.shadded+26
@@ -0,0 +1,26 @@+#!/usr/bin/env bash+# Install the Adom Wiki Skill Pack: the main skill plus every bundled sub-skill.+# The publish linter requires each skill be listed explicitly (not a glob), so+# every skill below is named. Keep this list in sync with skills/ and uninstall.sh.+set -e+DEST="$HOME/.claude/skills"+install_skill() { mkdir -p "$DEST/$1"; cp "$2" "$DEST/$1/SKILL.md"; }++# main pack skill (REQUIRED at repo root by the registry)+install_skill adom-wiki-skillpack SKILL.md+# bundled sub-skills (one skill file each)+install_skill wiki-anatomy        skills/wiki-anatomy/SKILL.md+install_skill wiki-api            skills/wiki-api/SKILL.md+install_skill wiki-publish-safely skills/wiki-publish-safely/SKILL.md+install_skill wiki-readme         skills/wiki-readme/SKILL.md+install_skill wiki-visibility     skills/wiki-visibility/SKILL.md+install_skill wiki-repo-styles    skills/wiki-repo-styles/SKILL.md+install_skill wiki-family         skills/wiki-family/SKILL.md+install_skill wiki-skillpack      skills/wiki-skillpack/SKILL.md+install_skill wiki-hero           skills/wiki-hero/SKILL.md+install_skill wiki-breadcrumbs    skills/wiki-breadcrumbs/SKILL.md+install_skill wiki-forking        skills/wiki-forking/SKILL.md+install_skill wiki-scoring        skills/wiki-scoring/SKILL.md++echo "OK: Installed the Adom Wiki Skill Pack plus 12 bundled skills to $DEST/."+echo "Hint: Ask Claude 'publish this to the wiki', 'what kind of wiki repo should this be', or 'how do I make a readme'."
package.jsonadded+45
@@ -0,0 +1,45 @@+{+  "slug": "adom-wiki-skillpack",+  "version": "0.1.0",+  "type": "skill",+  "description": "The Adom Wiki Skill Pack β€” one main skill plus 12 focused sub-skills that teach the AI to publish to wiki.adom.inc without breaking pages, and that name and document the wiki repo archetypes (Page, Skillpack, Family) that have emerged from real use. One adompkg install drops the whole set onto your container.",+  "dependencies": {+    "john/adom-wiki-hero-image": "^0.2.2"+  },+  "files": [+    "SKILL.md",+    "README.md",+    "page.json",+    "install.sh",+    "uninstall.sh",+    "screenshots/hero.png",+    "screenshots/archetypes.png",+    "skills/wiki-anatomy/SKILL.md",+    "skills/wiki-api/SKILL.md",+    "skills/wiki-publish-safely/SKILL.md",+    "skills/wiki-readme/SKILL.md",+    "skills/wiki-visibility/SKILL.md",+    "skills/wiki-repo-styles/SKILL.md",+    "skills/wiki-family/SKILL.md",+    "skills/wiki-skillpack/SKILL.md",+    "skills/wiki-hero/SKILL.md",+    "skills/wiki-breadcrumbs/SKILL.md",+    "skills/wiki-forking/SKILL.md",+    "skills/wiki-scoring/SKILL.md"+  ],+  "scripts": {+    "install": "./install.sh",+    "uninstall": "./uninstall.sh"+  },+  "tags": [+    "wiki",+    "adompkg",+    "publishing",+    "skillpack",+    "guidelines",+    "documentation",+    "repo-archetypes",+    "open-source",+    "mit"+  ]+}
page.json+41−20
@@ -1,28 +1,49 @@ {-  "schema_version": 1,-  "type": "skill",   "slug": "adom-wiki-skillpack",-  "title": "Adom Wiki Skill Pack",-  "brief": "How to use the Adom Wiki without breaking pages β€” five tools in one, three repo archetypes (Page, Skillpack, Family), 13 skills in one install.",   "version": "0.1.0",-  "visibility": {-    "public": true+  "type": "skill",+  "description": "The Adom Wiki Skill Pack β€” one main skill plus 12 focused sub-skills that teach the AI to publish to wiki.adom.inc without breaking pages, and that name and document the wiki repo archetypes (Page, Skillpack, Family) that have emerged from real use. One adompkg install drops the whole set onto your container.",+  "dependencies": {+    "john/adom-wiki-hero-image": "^0.2.2"   },+  "files": [+    "SKILL.md",+    "README.md",+    "page.json",+    "install.sh",+    "uninstall.sh",+    "screenshots/hero.png",+    "screenshots/archetypes.png",+    "skills/wiki-anatomy/SKILL.md",+    "skills/wiki-api/SKILL.md",+    "skills/wiki-publish-safely/SKILL.md",+    "skills/wiki-readme/SKILL.md",+    "skills/wiki-visibility/SKILL.md",+    "skills/wiki-repo-styles/SKILL.md",+    "skills/wiki-family/SKILL.md",+    "skills/wiki-skillpack/SKILL.md",+    "skills/wiki-hero/SKILL.md",+    "skills/wiki-breadcrumbs/SKILL.md",+    "skills/wiki-forking/SKILL.md",+    "skills/wiki-scoring/SKILL.md"+  ],+  "scripts": {+    "install": "./install.sh",+    "uninstall": "./uninstall.sh"+  },+  "tags": [+    "wiki",+    "adompkg",+    "publishing",+    "skillpack",+    "guidelines",+    "documentation",+    "repo-archetypes",+    "open-source",+    "mit"+  ],   "author": {-    "id": "6738b00a4dc87b8adbb0a5a3",     "name": "John Lauer",     "email": "[email protected]"-  },-  "tags": [],-  "license": "proprietary",-  "hero": null,-  "sample_prompts": [],-  "discovery_triggers": [],-  "discovery_pitch": null,-  "metadata": {},-  "created_at": "2026-06-21T14:48:36.247Z",-  "updated_at": "2026-06-21T14:48:36.247Z",-  "source_path": "SKILL.md",-  "sub_skills": [],-  "parent_app": null+  } }\ No newline at end of file
screenshots/archetypes.pngadded
⋯ 1 unchanged line ⋯
screenshots/hero.pngadded
⋯ 1 unchanged line ⋯
skills/wiki-anatomy/SKILL.mdadded+74
@@ -0,0 +1,74 @@+---+name: wiki-anatomy+description: >-+  The mental model of the Adom Wiki (wiki.adom.inc): it is five familiar tools+  fused into one product keyed off a single slug per page β€” a git host, the+  adompkg package manager, a release database, a discussion forum, and pull+  requests β€” plus a scoring layer and a presentation layer. Read this to+  understand WHAT the wiki is before learning HOW to drive it. Trigger words:+  what is the adom wiki, how does the wiki work, wiki architecture, wiki mental+  model, git plus npm plus releases, wiki page is a repo, two storage layers,+  why both git and registry, wiki anatomy, explain the wiki.+---++Parent skill: **adom-wiki-skillpack**++# What the Adom Wiki actually is++The Adom Wiki looks like a wiki, but it is **five tools you already know, fused+into one**, all addressed by a single `slug` per page. Understanding this is the+prerequisite for everything else β€” most publishing mistakes come from treating+it as one tool when it is really several stacked together.++## The five tools++1. **A git host (per page).** Every page owns a real git repo. The Files tab,+   README rendering, commit log, and contributors all read from it. You push to+   it via `POST /api/v1/pages/:slug/files` β€” that call *is* a `git commit`.++2. **adompkg β€” an npm-style package manager.** Alongside the git repo, each page+   can carry a package: versioned tarballs, a `package.json` manifest, a+   `dependencies` map, and dist-tags. `adompkg install <slug>` resolves and+   installs dependencies transitively, just like `npm i`. `adompkg update`+   upgrades everything installed.++3. **A release database.** Like GitHub Releases: a page can attach versioned,+   downloadable assets (per-platform binaries) via `adompkg release upload`. This+   is how closed-source apps ship a compiled binary without shipping source.++4. **A discussion forum.** Each page has discussions + threaded replies, the+   GitHub-Issues equivalent β€” for questions, bug reports, and feature requests.++5. **Pull requests.** Community members propose edits to a page's repo; the owner+   reviews and merges. The contribution path for a wiki you don't own.++## Two cross-cutting layers++- **Scoring / trending.** The wiki tracks signals β€” stars, high-fives, install+  counts β€” to surface what's trending. See **wiki-scoring**.+- **Presentation.** The Overview tab renders either a plain `README.md` or a+  custom `readme.html` for full control. A page whose source is private can also+  carry a **private readme** so the public still sees docs. See **wiki-readme**+  and **wiki-visibility**.++## The one idea that prevents most bugs: two independent storage layers++```+  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”+  β”‚   GIT REPO           β”‚        β”‚   PACKAGE REGISTRY        β”‚+  β”‚  (browse / read)     β”‚        β”‚  (install / resolve)      β”‚+  β”‚  Files tab, README,  β”‚        β”‚  tarballs, versions,      β”‚+  β”‚  commits, page.json  β”‚        β”‚  dependencies, dist-tags  β”‚+  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜+   written by POST /files          written by `adompkg publish`+```++They are **not** synchronized. `adompkg publish` does **not** push your source to+the git repo, and pushing files does **not** create a tarball. A correct publish+writes **both**. Doing only one leaves the page half-broken (placeholder Files+tab, or a README that won't install). This is the single most common failure β€”+the **wiki-api** and **wiki-publish-safely** skills exist to make you do both,+in the right order.++Same split as the rest of the world: GitHub (repo) + npm (registry). The wiki+just puts both behind one slug.
skills/wiki-api/SKILL.mdadded+118
@@ -0,0 +1,118 @@+---+name: wiki-api+description: >-+  How to drive the Adom Wiki (wiki.adom.inc) programmatically: the adompkg CLI,+  the REST API (/api/v1/...), authentication, and the publish workflow that+  writes BOTH storage layers (git repo + package registry). Read this before any+  create-page, push-files, or publish call. Trigger words: wiki api, adompkg,+  adompkg publish, adompkg install, POST pages, push files to wiki, wiki rest+  api, publish to the wiki, create wiki page, commit to wiki repo, wiki bearer+  token, adompkg login, two storage layers, wiki tarball.+---++Parent skill: **adom-wiki-skillpack**++# Driving the Adom Wiki: adompkg + the REST API++Canonical host: **https://wiki.adom.inc**. Read **wiki-anatomy** first if you+don't yet know why the wiki has two independent storage layers β€” this skill is+the how. Read **wiki-publish-safely** for the pitfalls.++## Auth++```bash+bash <(curl -fsSL https://wiki.adom.inc/static/bootstrap.sh)   # if adompkg missing+export PATH="$HOME/.local/bin:$PATH"+adompkg login --token "$(cat /var/run/adom/api-key)"+adompkg whoami+# For curl: -H "Authorization: Bearer $(cat /var/run/adom/api-key)"+```++## adompkg CLI (the bits you use most)++| Command | Purpose |+|---|---|+| `adompkg install <slug>[@ver]` | Install a package (+ its dependencies) |+| `adompkg info <slug>` / `view` | Manifest / full metadata + versions |+| `adompkg search <query>` | Search the registry |+| `adompkg list` / `outdated` / `update` | Manage installed packages |+| `adompkg version <patch\|minor\|major>` | Bump version in package.json |+| `adompkg publish [--org adom] [-y]` | Build + upload the tarball to the registry |+| `adompkg release upload <slug>@<ver> <file> --platform <os>` | Attach a downloadable binary |++Namespace: `adompkg publish` goes to your personal namespace (`john/<slug>`).+Add `--org adom -y` to publish a canonical org package (`adom/<slug>`).++## The publish workflow β€” both layers, in this order++The git repo and the package registry are written separately (see wiki-anatomy).+Write both, and order matters because of the hero-clobber gotcha (see step 4).++**Step 1 β€” `package.json` first.** Set `slug`, `version`, `type`, `description`,+`dependencies`, `files[]` (list every shipped file), and `scripts.install/uninstall`.++**Step 2 β€” create the page (first publish only).** Inits the git repo.++```bash+WIKI="https://wiki.adom.inc"+curl -s -X POST "$WIKI/api/v1/pages" \+  -H "Authorization: Bearer $(cat /var/run/adom/api-key)" \+  -H "Content-Type: application/json" \+  -d '{"type":"skill","slug":"my-tool","title":"my-tool","brief":"One line","version":"0.1.0"}'+```++**Step 3 β€” `adompkg publish`.** Builds the tarball and uploads it to the registry.+(Do this before the final file push β€” see step 4.)++```bash+cd /path/to/my-tool && adompkg publish+```++**Step 4 β€” push ALL source files to the git repo, with a complete `page.json` LAST.**+This is the equivalent of `git push`. **Critical:** `adompkg publish` overwrote+the repo's `page.json` with the package manifest, which has no `hero` β€” so you+re-push a *complete* `page.json` (including `hero:{type,path}`, title, brief,+tags) as the final step to re-index and re-link the hero. See **wiki-hero**.++```python+import requests, base64, os+BINARY_EXTS = {'.png','.jpg','.jpeg','.webp','.gif','.ico','.woff','.woff2',+               '.tgz','.gz','.zip','.bin','.exe','.glb','.step','.stl','.wasm','.so','.dll'}+files, skip = [], {'.git','target','node_modules'}+for root, dirs, fnames in os.walk(project_dir):+    dirs[:] = [d for d in dirs if d not in skip]+    for f in fnames:+        full = os.path.join(root, f); rel = os.path.relpath(full, project_dir)+        if os.path.getsize(full) > 10_000_000: continue+        if os.path.splitext(f)[1].lower() in BINARY_EXTS:+            files.append({"path": rel, "content": base64.b64encode(open(full,'rb').read()).decode(), "encoding": "base64"})+        else:+            files.append({"path": rel, "content": open(full).read()})  # TEXT = plain, never base64+for i in range(0, len(files), 50):  # batch by 50 (payload limit)+    requests.post(f"{WIKI}/api/v1/pages/{slug}/files",+        headers={"Authorization": f"Bearer {token}", "User-Agent": "adompkg/2.1.0"},  # UA dodges Cloudflare WAF+        json={"files": files[i:i+50], "message": "Publish source"})+```++**Step 5 β€” verify in pup** (non-negotiable; see **wiki-publish-safely**).++## Encoding rule (memorize)++Text files (`.md`, `.rs`, `.toml`, `.js`, `.json`, `.sh`) β†’ plain `{"content": "..."}`.+Binary files (images, fonts, archives) β†’ `{"content": "<base64>", "encoding": "base64"}`.+Base64-encode a text file and the README renders as gibberish.++## REST API quick reference++- Pages: `POST /pages`, `GET/PUT/DELETE /pages/:slug`, `GET /pages` (`?type=&limit=&offset=`)+- Files (git): `GET/POST /pages/:slug/files`, `GET /pages/:slug/files/:path`, `GET /pages/:slug/log`+- Packages: `POST /packages/:slug/publish`, `GET /packages/:slug/manifest|versions`, `POST /packages/resolve`, `PUT .../deprecate`+- Social: `POST/DELETE /pages/:slug/star`, `GET /pages/:slug/stars`, discussions under `/pages/:slug/discussions`+- PRs: `GET/POST /pages/:slug/prs`, `POST /prs/:id/merge|close`+- Breadcrumbs: `GET /pages/:slug/breadcrumbs` (see **wiki-breadcrumbs**)+- Search/discover: `GET /search?q=`, `GET /discover?triggers=<csv>`++Two gotchas worth pinning here: **Cloudflare WAF blocks Python urllib without a+`User-Agent`** (use `adompkg/2.1.0`; curl is fine), and **FTS search chokes on+hyphens** (`chip-fetcher` β†’ "no such column: fetcher"). Full pitfall list β†’+**wiki-publish-safely**.
skills/wiki-breadcrumbs/SKILL.mdadded+63
@@ -0,0 +1,63 @@+---+name: wiki-breadcrumbs+description: >-+  The breadcrumb system on the Adom Wiki β€” how a third party attaches a small+  "trail marker" link to someone else's page to announce a related thing they+  built ("I made a new OrCAD bridge, so adom-desktop should know an add-on+  exists"), without editing that page. Like Hansel & Gretel dropping breadcrumbs+  so a path can be followed back. Read this when an add-on/plugin/bridge for an+  existing page needs to be discoverable from it. Trigger words: wiki breadcrumb,+  attach a breadcrumb, announce an add-on, third party plugin link, new bridge for+  adom-desktop, link my page to another, trail marker, discover add-ons, breadcrumb+  api.+---++Parent skill: **adom-wiki-skillpack**++# Breadcrumbs β€” third-party "a path leads here" links++**Status: Implemented (basic).** `GET /api/v1/pages/:slug/breadcrumbs` is live and+returns a breadcrumb list (`{"breadcrumbs":[]}` on a page with none). The attach+write-path and UI are still settling β€” confirm the exact POST schema with the wiki+team before relying on automated attachment, and don't claim it works without+reading the API response.++## The idea (Hansel & Gretel)++A **breadcrumb** is a small link a third party drops *on someone else's page* to+mark a trail to a related thing they built β€” without needing edit rights on that+page. The metaphor is the fairy tale: drop breadcrumbs through the forest so a+path can be followed.++The motivating case: someone builds a **new OrCAD bridge** for `adom-desktop`.+They don't own `adom-desktop` and shouldn't edit it β€” but `adom-desktop` (and its+users, and the AI) should be able to discover that a new add-on bridge exists. So+they drop a breadcrumb on `adom-desktop` pointing at their bridge page. Now the+anchor surfaces "add-ons that lead here," and the trail is followable both ways.++## How it fits the archetypes++Breadcrumbs are the discovery glue for the **Family** archetype (see+**wiki-family**), especially when children are owned by third parties:++- A Family child announces itself to its anchor with a breadcrumb (in addition to+  the `<parent>-plugin` family tag and the anchor's registry table).+- This is what lets a family grow *without* the anchor's owner doing anything β€”+  the third party drops the breadcrumb; the anchor lists it.++## Reading breadcrumbs++```bash+curl -s -H "User-Agent: adompkg/2.1.0" \+  "https://wiki.adom.inc/api/v1/pages/<anchor-slug>/breadcrumbs"+# β†’ {"breadcrumbs":[ ... ]}+```++## Attaching a breadcrumb++The intended author flow: from your add-on's page, attach a breadcrumb targeting+the anchor page with a short label and your page's slug, so it appears in the+anchor's breadcrumb list. **Verify the current POST endpoint/schema with the wiki+team** (Colby) before automating β€” this skill documents the model; the exact+write contract is still firming up. Until then, treat breadcrumb attachment as a+manual/confirmed step and always read back the anchor's `breadcrumbs` to confirm.
skills/wiki-family/SKILL.mdadded+78
@@ -0,0 +1,78 @@+---+name: wiki-family+description: >-+  How to build a Family-style wiki repo on the Adom Wiki β€” an anchor page plus+  children published as their own pages, joined by a naming convention, a family+  tag, and breadcrumbs (e.g. adom-usb + adom-usb-sniffer-cdc, adom-desktop ++  bridges). Use this when a hub has parts that need their own owners or release+  cadence, or when adding a child/plugin to an existing family. Trigger words:+  wiki family repo, parent child wiki page, add a plugin to the family, anchor+  page, family tag, name a child page, adom-usb plugin, adom-desktop bridge,+  publish a child page, family naming convention, register a child.+---++Parent skill: **adom-wiki-skillpack**++# Building a Family repo++A **Family** is an anchor page plus children published as **separate** wiki pages+(not files in one repo), joined by convention so the relationship survives even+when a child is seen out of context. Use it when children need independent owners+or update cadences β€” see **wiki-repo-styles** for Family-vs-Skillpack. Examples:+`adom-usb` (+ sniffer/firmware plugins), `adom-desktop` (+ bridges).++## 1. Naming β€” every member announces its family++Users meet children out of context (a card, a search hit, a screensaver+billboard), so the family must be obvious without reading the slug:++- **Slug**: `<parent>-<descriptor>` β€” `adom-usb-sniffer-cdc`,+  `adom-usb-stub-rp2040`. Dash separators; **never a colon** (illegal in slugs).+- **Title** (the human name shown on cards/search/screensaver β€” the one that+  matters): **MUST lead with the parent name**, plain ASCII hyphen with spaces β€”+  `Adom USB - CDC serial sniffer`. **Never an em-dash (β€”)**; keep it identical to+  siblings. A bare title like "CDC serial sniffer" hides the family.+- **Family tag/keyword**: include `<parent>-plugin` (e.g. `adom-usb-plugin`) so+  the anchor's discovery and `<parent> plugins search` find the child.+- **Hero billboard**: carry a small family chip (e.g. `ADOM-USB Β· SNIFFER`) so the+  relationship survives even when only the image shows. Build it per **wiki-hero**.++## 2. The anchor page is a registry++The anchor (e.g. `adom-usb`) documents the family and keeps a **table of known+children** in its README ("install any of these"), plus the conventions so every+child adopts them. The anchor's skill explains how to author and publish a child.+Children point back to the anchor via **breadcrumbs** (see **wiki-breadcrumbs**),+which is how third-party children announce themselves to the anchor.++## 3. Ship reference children as templates++Include copyable child templates in the anchor repo under `examples/` (as+`adom-usb` does with `examples/adom-usb-sniffer-cdc/` and `.../adom-usb-stub-rp2040/`),+each with its own `plugin.json` + `package.json` + `install.sh`/`uninstall.sh` ++`README.md`. Third parties copy a template, rename per the convention, and publish.++## 4. Publishing a child++Each child is a normal Page publish (see **wiki-api** / **wiki-publish-safely**),+with the family conventions applied:++```bash+# canonical org children publish into the org namespace, not personal:+adompkg publish --org adom -y+# if the child ships a binary, attach it as a release asset:+adompkg release upload adom/<child-slug>@<ver> ./bin/<bin> --platform linux+# then push source + a COMPLETE page.json (title leads with the parent, hero set,+# family tag in metadata) to the git layer LAST (the hero-clobber rule applies).+```++After any title/hero change, confirm `GET /api/v1/pages/<child-slug>` shows the+`title` leading with the parent and `hero_path` set β€” cards, search, and the+screensaver read those fields.++## 5. Discovery++Children are found three ways, so set all three: the **family tag**+(`<parent>-plugin`), the anchor's **registry table** in its README, and+**breadcrumbs** from the child back to the anchor. The anchor can also query the+registry for everything tagged `<parent>-plugin` to list the family live.
skills/wiki-forking/SKILL.mdadded+61
@@ -0,0 +1,61 @@+---+name: wiki-forking+description: >-+  Forking and community contribution on the Adom Wiki β€” how someone who doesn't+  own a page proposes changes to it. Pull requests are live (propose edits to a+  page's repo, the owner reviews and merges); a dedicated fork button is planned.+  Read this when contributing to a wiki repo you don't own, or planning the+  community-contribution path for a repo you do. Trigger words: fork a wiki page,+  fork wiki repo, contribute to a wiki page, propose changes wiki, wiki pull+  request, wiki PR, community update wiki, submit a change to someone's page,+  review a wiki PR, accept community changes.+---++Parent skill: **adom-wiki-skillpack**++# Forking & community contribution++The wiki is a git host, so the goal is a familiar fork β†’ change β†’ propose β†’+review β†’ merge loop for pages you don't own. The pieces are at different+maturity, so be precise about what works today.++## Status++- **Pull requests: live.** `GET/POST /api/v1/pages/:slug/prs` and+  `POST /api/v1/prs/:id/merge|close` work β€” you can propose changes to a page's+  repo and the owner can review and merge. (`GET .../prs` returns `{"prs":[]}` on a+  page with none.)+- **Fork (a dedicated fork-your-own-copy button): Planned (spec).**+  `POST /api/v1/pages/:slug/fork` returns 404 today β€” there is no fork endpoint+  yet. Don't tell a user they can fork until this lands; use the PR path instead.++Per the standing rule: don't claim a feature works without reading the API+response. Re-probe before relying on either path in automation.++## The contribution path that works today (PRs)++1. **Open a PR against the page's repo** with your proposed file changes:+   `POST /api/v1/pages/:slug/prs` (see **wiki-api** for auth + the files/commit+   model β€” a PR proposes a commit to the page's git layer).+2. **The owner reviews** the PR on the page's PR list (`GET .../prs`).+3. **Merge or close**: `POST /api/v1/prs/:id/merge` or `.../close`.++This is the right answer to "I want to improve someone else's wiki page": don't+ask for write access, open a PR. It's also how a **Family** anchor owner accepts+improvements to the anchor while third-party *children* stay independent pages+(see **wiki-family**).++## Designing for contribution (if you own the repo)++- Keep the repo clean and the README's "how to contribute" explicit so a PR is+  low-friction.+- For things that should be **separately owned** rather than merged into your+  repo, prefer the **Family** pattern (a child page + a breadcrumb) over a PR β€”+  don't absorb a third party's independently-evolving work into your repo.++## When fork lands++When a fork endpoint ships, the flow becomes the standard GitHub one: fork to your+namespace, change freely, open a PR back to the upstream page. Until then, this+skill's PR path is the supported route. Update this status after re-probing+`POST /pages/:slug/fork`.
skills/wiki-hero/SKILL.mdadded+75
@@ -0,0 +1,75 @@+---+name: wiki-hero+description: >-+  The hero image for an Adom Wiki page β€” how to generate one (via the+  adom-wiki-hero-image package, a dependency of this pack) and, critically, how to+  stop it from getting unlinked. adompkg publish overwrites the repo's page.json+  (which has no hero), so the page-header hero is dropped on every publish unless+  you re-push a complete page.json LAST. Read this when adding a hero, or when a+  hero that used to show is suddenly gone. Trigger words: wiki hero, hero image,+  hero disappeared, hero unlinked, hero gone after publish, page shows placeholder+  icon, generate a hero, billboard image, adom-wiki-hero-image, re-link hero,+  hero_path empty.+---++Parent skill: **adom-wiki-skillpack**++# The hero image β€” generating it, and keeping it linked++Every wiki page needs a hero: the 16:10 dark-mode billboard the page header, the+landing-grid card, the Hydrogen Desktop installer, the homepage, and the+adom-screensaver all reuse. A page without one shows a placeholder icon and reads+as unfinished.++## Generating it++Use the **adom-wiki-hero-image** package β€” it's a declared **dependency of this+pack**, so `adompkg install adom-wiki-skillpack` pulls it automatically. It+bundles the brand fonts + ADOM wordmark + the render pipeline, so it works+standalone with no gallia dependency. Invoke it (the `adom-wiki-hero` /+`adom-wiki-hero-image` skill) to render `screenshots/hero.png`: the app NAME as+the headline, a one-line value prop, the tealβ†’blueβ†’purple accent, and one gorgeous+shot of the real UI as a floating Windows-style webview window. Readable in one+second. (Faux app windows use **Windows** min/max/close controls, never macOS+dots.) For Family children, also carry the family chip (e.g. `ADOM-USB Β· SNIFFER`).++> TODO (pack maintainers): we depend on `adom-wiki-hero-image` rather than folding+> its content in. Revisit whether to inline it here later.++## ⚠️ The recurring bug: the hero gets UNLINKED on publish++This is the #1 hero problem and it looks like the image was deleted β€” **it+wasn't**. The mechanism:++- The page-header hero renders from the DB `hero_type` / `hero_path`, which the+  wiki indexer derives from the repo's **`page.json` β†’ `hero:{type,path}`**.+- **`adompkg publish` OVERWRITES `page.json` in the repo with the package+  manifest, which has no `hero` field.** So every publish silently drops the hero+  reference. The PNG file is still in the repo at `screenshots/hero.png`; only the+  pointer in `page.json` is gone.++The same overwrite also resets the page **title and brief** to the package values.++## The fix: push a complete page.json LAST++Order every publish so the complete `page.json` is the final commit:++1. `adompkg publish` (registry/tarball) β€” this clobbers `page.json` in the repo.+2. **THEN** push a **complete** `page.json` to `POST /api/v1/pages/<slug>/files`+   as the last step β€” including `hero:{type:"image",path:"screenshots/hero.png"}`,+   plus title, brief, visibility, tags. This re-indexes and re-links the hero+   (and restores title/brief).+3. Confirm: `GET /api/v1/pages/<slug>` shows+   `hero_type:"image", hero_path:"screenshots/hero.png"`.+4. Open the page in pup and confirm the hero renders (see **wiki-publish-safely**).++If a hero "disappeared" on an existing page, you don't need to regenerate it β€”+just re-push a complete `page.json` with the `hero` block and verify `hero_path`.++## Checklist++- [ ] `screenshots/hero.png` exists in the repo and is listed in `package.json` `files[]`+- [ ] `page.json` has the `hero` block+- [ ] Complete `page.json` pushed AFTER `adompkg publish`+- [ ] `GET /pages/<slug>` β†’ `hero_path` set+- [ ] Hero visually confirmed in pup
skills/wiki-publish-safely/SKILL.mdadded+91
@@ -0,0 +1,91 @@+---+name: wiki-publish-safely+description: >-+  The hard rules and operational pitfalls for editing Adom Wiki pages+  (wiki.adom.inc) without breaking them β€” write both storage layers, never+  base64 a text file, versions are immutable, soft-delete blocks re-creation, the+  hero gets clobbered on publish, rate limits, and the non-negotiable verify-in-pup+  step. Read this before AND after any publish, file push, README change, or+  metadata edit. Trigger words: wiki publish broke the page, page shows+  placeholder, readme is gibberish, files tab empty, hero disappeared, hero+  unlinked, UNIQUE constraint pages, immutable version, adompkg 429, ghost page,+  verify wiki in pup, wiki publish checklist, don't break the wiki page.+---++Parent skill: **adom-wiki-skillpack**++# Publishing to the wiki without breaking the page++Every item here is a real incident that recurs. Treat them as hard rules. The+mechanics live in **wiki-api**; this is the "don't shoot yourself in the foot"+companion.++## The five rules that prevent broken pages++1. **Write BOTH layers, every publish.** Git repo (`POST /files`) *and* package+   registry (`adompkg publish`). Only one β†’ the page is broken (placeholder Files+   tab, or a README that won't `adompkg install`). See **wiki-anatomy**.++2. **The hero gets clobbered β€” re-push `page.json` LAST.** `adompkg publish`+   overwrites the repo's `page.json` with the package manifest, which has **no+   `hero`** β€” so the page-header hero is unlinked on every publish. The PNG is NOT+   deleted; only its reference is dropped. **Fix:** publish first, then push a+   *complete* `page.json` (with `hero:{type:"image",path:"screenshots/hero.png"}`,+   title, brief, tags) as the final commit, and confirm+   `GET /api/v1/pages/<slug>` shows `hero_path` set. Full detail β†’ **wiki-hero**.+   The same clobber resets the page **title and brief** to the package values β€”+   the complete `page.json` re-push restores those too.++3. **Text is plain; only binaries are base64.** Base64-encoding a `.md`/`.json`/+   `.sh` makes the wiki store the base64 string as the file content β†’ README+   renders as gibberish. Images/fonts/archives go base64; everything else plain.++4. **Versions are immutable; never delete-and-recreate.** Once `0.1.0` is+   published it can't be overwritten β€” `adompkg version patch` before republishing+   changed source. And `DELETE /pages/:slug` only *soft*-deletes (sets+   `deleted_at`), after which republishing the same slug fails with+   `UNIQUE constraint failed: pages.owner, pages.slug`. Bump the version instead+   of deleting. (Hard purge exists β€” `DELETE /pages/<slug>?hard=true` β€” but it's+   irreversible and rarely the right move.)++5. **Verify with your eyes β€” open the live page in pup.** After ANY wiki edit+   (publish, file push, metadata/README/hero change, even a one-file fix), open+   the page in a pup window on the user's laptop and screenshot-confirm it+   rendered. Do not report a wiki edit as done from API JSON alone.++   ```bash+   OWNER=john; SLUG=my-page; LAP=AdomLapper   # `adom-desktop status` shows the laptop host+   adom-desktop browser_open_window \+     "{\"sessionId\":\"wiki\",\"profile\":\"wiki\",\"url\":\"https://wiki.adom.inc/$OWNER/$SLUG\"}" \+     --target "$LAP"+   sleep 3+   adom-desktop browser_screenshot '{"sessionId":"wiki","maxWidth":1500}' --target "$LAP"+   # Read the screenshot; confirm it rendered before telling the user it's done.+   ```++   Reuse `sessionId:"wiki"` / `profile:"wiki"` every time so the login persists;+   `browser_navigate` an already-open window rather than spawning new ones.++## Other gotchas++- **Cloudflare WAF blocks Python urllib/requests without a `User-Agent`** β†’+  send `User-Agent: adompkg/2.1.0`. curl sends its own UA and is fine.+- **Publish-only pages create ghost rows.** `adompkg publish` without first+  `POST /pages` makes a tarball but no git repo; a later `POST /files` then+  inserts a *second* page row (a duplicate on the listing). Always create the+  page first.+- **Rate limit: ~10 publishes/minute** β†’ HTTP 429. Space them or retry.+- **Search hyphen bug:** FTS reads `-` as a column operator (`chip-fetcher` β†’+  "no such column: fetcher"). Most slugs have hyphens; expect this until fixed.+- **Inline images need HEAD support** on `/blob/` routes β€” a known wiki bug means+  `<img>` can 404 on preflight even though the tag is correct. Verify visually.++## The publish checklist++- [ ] `package.json`: version bumped, `files[]` complete, `dependencies` set+- [ ] Page created (first time only) via `POST /pages`+- [ ] `adompkg publish` succeeded (tarball in registry)+- [ ] ALL source pushed to git (text plain, binaries base64, UA header)+- [ ] **Complete `page.json` pushed LAST** β†’ `hero_path`, title, brief restored+- [ ] Opened in pup + screenshot read: README renders, Files tab full, hero shows+- [ ] `adompkg info <slug>` shows the right version + dependencies
skills/wiki-readme/SKILL.mdadded+88
@@ -0,0 +1,88 @@+---+name: wiki-readme+description: >-+  How to make a great Adom Wiki page presentation β€” the README is the page. Covers+  the choice between a plain README.md and a fully custom readme.html, the+  mandatory sections every page needs, embedding live demos / videos / iframes,+  and referencing inline images from the repo. Read this when writing or fixing+  the Overview tab of a wiki page. Trigger words: how to make a readme, wiki+  readme, readme.html, custom readme, write a readme for the wiki, wiki page+  overview, embed iframe wiki, embed demo, inline images readme, wiki page+  presentation, mandatory readme sections, readme renders blank.+---++Parent skill: **adom-wiki-skillpack**++# How to make a README (the presentation layer)++On the Adom Wiki the **README is the page** β€” the Overview tab is the first thing+a human sees, and it's what sells the page in search and on cards. The renderer+(`marked`) passes HTML through, so you can go from a plain doc to a fully+designed page.++## Two modes++- **`README.md`** β€” plain Markdown. The default; right for most pages. You can+  still embed raw HTML (iframes, video, styled divs) inline.+- **`readme.html`** β€” a fully custom HTML document, when you want complete control+  over layout, embeds, and styling (landing-page-grade pages). Use when Markdown+  can't express the design you want; otherwise prefer `README.md` for+  maintainability.++There is also a **private readme** for pages whose git source is private but whose+releases are public β€” so the public still gets docs without seeing the source.+That's a visibility concern β†’ see **wiki-visibility**.++## The README is for humans, and humans need images++**Never publish a text-only README.** Every page needs a hero and at least two+inline screenshots; any page with a UI also needs an embedded live demo. A skill+`description` is for the AI β€” the README is for the person deciding whether to+install.++## Mandatory sections (in this order)++1. **Title + one-line description**+2. **Hero image** β€” right after the description. Generate it with the+   `adom-wiki-hero-image` skill (see **wiki-hero**).+3. **Live demo** (if there's any UI) β€” an `<iframe>` of a self-contained+   `demo/index.html` with baked-in sample data (no server dependency).+4. **Install** β€” `adompkg install <slug>`+5. **Quick start** β€” 3–5 lines showing the most common workflow+6. **Screenshots** β€” 2–4 inline images, each with a caption heading+7. **Dependencies** β€” a table: Dependency / Required? / Why (explain the *why*)+8. **Features** β€” bullet list+9. **Talk to the AI** β€” paste-ready prompts grouped by action, using the exact+   trigger words so routing works (this teaches humans the vocabulary)+10. **Skills** β€” table of the main skill + sub-skills with a purpose column+11. **CLI reference** β€” command table (if there's a CLI)++## Embeds++Inline image from the repo (blob endpoint):++```markdown+![Dashboard](/blob/<type>/<slug>/screenshots/hero.png)+```++Self-contained demo (bake sample data into the HTML, no fetch/WebSocket):++```html+<iframe src="/blob/app/<slug>/demo/index.html" width="100%" height="500"+  frameborder="0" style="border-radius:8px;border:1px solid #333;"></iframe>+```++Video β€” local file from the repo (the blob endpoint supports Range, so seeking+works), or YouTube via `youtube-nocookie.com`, or Vimeo:++```html+<video width="100%" controls poster="/blob/app/<slug>/screenshots/hero.png">+  <source src="/blob/app/<slug>/demo/walkthrough.webm" type="video/webm"></video>+```++## Known rendering pitfalls++- Inline images can 404 on `<img>` HEAD preflight (a wiki bug) even though the+  tag is correct β€” always verify visually in pup.+- After `adompkg publish`, the page title/brief reset to the package values;+  re-push a complete `page.json` to restore them (see **wiki-publish-safely**).
skills/wiki-repo-styles/SKILL.mdadded+99
@@ -0,0 +1,99 @@+---+name: wiki-repo-styles+description: >-+  The taxonomy of Adom Wiki repo archetypes that have emerged from real use, and+  how to choose between them BEFORE you publish: Page (open- or closed-source),+  Skillpack (one repo, many bundled sub-skills, suffix -skillpack), and Family (an+  anchor page plus separately-published children). Read this when starting any new+  wiki repo or deciding how to structure related pages. Trigger words: what kind+  of wiki repo, wiki repo archetype, wiki repo style, page vs skillpack vs family,+  parent child wiki, super skill repo, bundle skills or separate, how to structure+  a wiki repo, skillpack vs family, one repo or many, chip-fetcher structure.+---++Parent skill: **adom-wiki-skillpack**++# Wiki repo archetypes β€” pick one before you publish++Three repo shapes have emerged from heavy real-world use of the Adom Wiki. Naming+them makes the choice deliberate instead of accidental. Decide which one a new+thing is **before** you create the page, because the layout, naming, and publish+flow differ.++## 1. Page β€” one page = one thing++A single wiki page for a single app, tool, skill, or doc. Two sub-variants by+**source visibility** (see **wiki-visibility**):++- **Open-source Page** β€” source public + installable. e.g. `chip-fetcher`,+  `adom-usb`. MIT, contributions welcome.+- **Closed-source Page** β€” source **private**, releases/adompkg **public** β†’+  install the compiled app, can't read the code. e.g. `hydrogen-desktop`,+  `adom-desktop`. Uses the private readme.++## 2. Skillpack β€” one repo, one main skill + N sub-skills++One repo, one installable package, that carries a whole set of skills installed+together by a single `adompkg install`. The sub-skills are files under `skills/`,+**not** separately published pages. Convention: the slug ends in **`-skillpack`**+so the class is recognizable in the grid and in `~/.claude/skills/`.++- Examples: **adom-ui-design** (grandfathered β€” predates the suffix), and **this+  pack, adom-wiki-skillpack**.+- Build it β†’ **wiki-skillpack**.++## 3. Family β€” an anchor page + separately-published children++A parent ("anchor") page plus multiple **children published as their own pages**,+joined not by living in one repo but by convention:++- **Slug**: `<parent>-<descriptor>` (e.g. `adom-usb-sniffer-cdc`).+- **Title**: leads with the parent β€” `Adom USB - CDC serial sniffer` (plain ASCII+  hyphen, never em-dash) β€” because cards/search/screensaver show the title, and+  nobody reads slugs.+- **Family tag**: `<parent>-plugin` so the anchor's discovery finds children.+- **Breadcrumbs**: third parties attach a link back to the anchor (see+  **wiki-breadcrumbs**).++- Examples: **adom-desktop**, **adom-usb**.+- Build it β†’ **wiki-family**.++## Skillpack vs Family β€” the decision rule++Both involve "a main thing plus many smaller things." The dividing question is+**ownership and update cadence**:++- **Skillpack** when **one author owns all the parts and they version together.**+  Shipping a new sub-skill means re-publishing the one pack. (The Adom UI design+  guidelines: one author, one coherent release.)+- **Family** when **children have independent owners or change on their own+  cadence.** Each child is its own page with its own version, and third parties+  can publish their own children without touching the anchor.++### Worked example: chip-fetcher++`chip-fetcher` is the instructive edge case. It's open source AND has many+per-vendor scraper skills (DigiKey, Mouser, TI, Analog Devices) that **change+daily** as those sites change, and **third parties** want to own and update the+ones they care about.++- If it were a **Skillpack**, every vendor tweak would force a re-publish of the+  whole pack by its single owner β€” a bottleneck, and third parties couldn't+  contribute their own scraper without a PR to the core repo.+- So `chip-fetcher` is better as a **Family**: an anchor (`chip-fetcher`) plus+  children like `chip-fetcher-digikey`, `chip-fetcher-mouser`, each separately+  publishable and independently owned, discovered via the `chip-fetcher-plugin`+  family tag and breadcrumbs. The anchor keeps a registry table of known children.++Rule of thumb: **does each part need its own lifecycle and possibly its own+author?** Yes β†’ Family. No β†’ Skillpack.++## Quick chooser++```+New wiki thing?+β”œβ”€ One self-contained app/tool/doc?            β†’ Page  (open or closed source)+β”œβ”€ A set of skills, one owner, ship together?  β†’ Skillpack  (-skillpack suffix)+└─ A hub with parts that have their own        β†’ Family  (anchor + children+   owners / release cadences?                            + family tag + breadcrumbs)+```
skills/wiki-scoring/SKILL.mdadded+69
@@ -0,0 +1,69 @@+---+name: wiki-scoring+description: >-+  The scoring / trending system on the Adom Wiki β€” the signals tracked to know+  whether a page is doing well (stars / high-fives, install counts, and a+  trending surface) and how an author legitimately earns them (great hero, strong+  README, working demo). Stars are live; install counts, high-fives, and a+  dedicated trending endpoint are still being surfaced. Read this when asked how a+  page is performing or how to make one trend. Trigger words: wiki scoring, wiki+  trending, high five, star a page, install count, is my page trending, page+  popularity, wiki metrics, how to trend, what's popular on the wiki, page score.+---++Parent skill: **adom-wiki-skillpack**++# Scoring & trending++The wiki tracks engagement signals so good pages surface β€” the equivalent of+stars + download counts driving a "trending" view. The intent is to capture+everything that indicates a page is valued; the surfacing is partly built.++## Status++- **Stars: live.** `POST/DELETE /api/v1/pages/:slug/star` and+  `GET /api/v1/pages/:slug/stars` work (`β†’ {"count":N,"starred_by_me":bool}`).+- **High-fives / install counts / a dedicated trending endpoint: Partial /+  Planned.** These signals are intended but not yet exposed through the public API+  β€” page metadata doesn't surface install/high-five/score fields today, and+  `GET /api/v1/trending` returns 404. Treat trending rank as not-yet-queryable.++Don't report a numeric "score" or "trending rank" you can't read from the API.+Stars you can read and state; the rest, describe as intended, and re-probe before+claiming numbers.++## The signals (the model)++- **High-fives** β€” lightweight positive user feedback on a page.+- **Stars** β€” a user bookmarking/endorsing a page (live).+- **Install counts** β€” how many times the package was installed (the strongest+  signal of real use).+- **Activity** β€” commits, releases, discussions, recency.++These roll up into a **trending** surface so the wiki homepage and the+adom-screensaver billboards can promote what's hot.++## How to earn it (what actually moves the needle)++Scoring rewards the same things that make a page genuinely good β€” there's no trick+substitute:++- **A great hero** (see **wiki-hero**) β€” it's what cards, the homepage, and the+  screensaver display; readable in one second.+- **A strong README with a working demo** (see **wiki-readme**) β€” humans install+  what they can see working; install count is the heaviest signal.+- **Clear value + correct discovery triggers** so the right people find it.+- **Keep it alive** β€” releases, answered discussions, merged PRs.++So "how do I make this trend?" reduces to: make the page legitimately excellent+and easy to discover. The scoring system is designed to surface exactly that.++## Reading what's available now++```bash+curl -s -H "User-Agent: adompkg/2.1.0" \+  "https://wiki.adom.inc/api/v1/pages/<slug>/stars"   # {"count":N,"starred_by_me":bool}+```++Update this skill as install-count / high-five / trending endpoints come online β€”+re-probe and label them honestly.
skills/wiki-skillpack/SKILL.mdadded+99
@@ -0,0 +1,99 @@+---+name: wiki-skillpack+description: >-+  How to build a Skillpack β€” one Adom Wiki repo that bundles a main skill plus+  many sub-skills, installed together by a single adompkg install, with the slug+  suffix -skillpack so the class is recognizable. Covers the bundle layout (root+  SKILL.md + skills/<sub>/SKILL.md), an install.sh that lists every skill, the+  package.json files[] whitelist, frontmatter conventions, and the skill-map+  table. Read BEFORE creating a new skill set so you never make a repo per skill.+  Trigger words: make a skillpack, super skill, bundle skills, one repo many+  skills, skill bundle, do not make a repo per skill, skillpack suffix, author a+  skill set, SKILL.md bundle, install.sh skills, wiki skill package.+---++Parent skill: **adom-wiki-skillpack**++# Building a Skillpack (super-skill bundle)++A **Skillpack** is one wiki repo / one installable package that carries a main+skill plus many sub-skills, all deployed by a single `adompkg install`. Use it+when one author owns all the skills and they version together β€” see+**wiki-repo-styles** for Skillpack-vs-Family.++> **The mistake to never make:** do **not** create one wiki page per small skill.+> A skill as small as a tooltip spec is a *file in a bundle*, not its own repo. A+> page per skill clutters the namespace, fragments install, and duplicates+> metadata. If you catch yourself looping `POST /pages` for many small skills,+> stop β€” you want one Skillpack with many files under `skills/`.++## The `-skillpack` suffix convention++A Skillpack's slug ends in **`-skillpack`** (e.g. `adom-wiki-skillpack`) so the+class is instantly recognizable in the wiki grid and in `~/.claude/skills/`. The+prior example `adom-ui-design` predates the convention and is grandfathered; new+super-skill bundles should adopt the suffix.++## The bundle layout++```+my-thing-skillpack/            (one wiki repo, one adompkg package)+  SKILL.md                     # the main skill β€” REQUIRED at repo root by the registry+  README.md                    # rendered on the Overview tab; includes the skill-map table+  page.json                    # title, brief, hero, visibility+  package.json                 # version, files[] lists EVERY skill file, scripts.install/uninstall+  install.sh                   # copies the main skill AND every sub-skill to ~/.claude/skills/<name>/+  uninstall.sh                 # removes them all+  screenshots/hero.png+  skills/+    sub-a/SKILL.md             # each sub-skill: its own folder + SKILL.md+    sub-b/SKILL.md+```++`adompkg install my-thing-skillpack` then drops the main skill plus every+sub-skill onto the container as separate, independently-loadable skill files.++## install.sh lists every skill explicitly++The publish linter rejects an `install.sh` that misses any bundled sub-skill, so+**list each one β€” do not rely on a glob.**++```bash+#!/usr/bin/env bash+set -e+DEST="$HOME/.claude/skills"+install_skill() { mkdir -p "$DEST/$1"; cp "$2" "$DEST/$1/SKILL.md"; }+install_skill my-thing-skillpack SKILL.md+install_skill sub-a              skills/sub-a/SKILL.md+install_skill sub-b              skills/sub-b/SKILL.md+echo "OK: Installed my-thing-skillpack plus 2 bundled skills to $DEST/."+```++`uninstall.sh` removes the same set. `package.json` `files[]` must list `SKILL.md`,+`README.md`, `page.json`, `install.sh`, `uninstall.sh`, every `skills/<sub>/SKILL.md`,+and any `screenshots/*`, plus `scripts.install`/`scripts.uninstall`.++## Sub-skill naming & frontmatter++- Name sub-skills to avoid clobbering generic names in the shared+  `~/.claude/skills/` dir β€” prefix them with the pack's domain (this pack uses+  `wiki-*`: `wiki-api`, `wiki-hero`). The folder name = the `name:` frontmatter.+- First body line of each sub-skill: `Parent skill: **<pack-slug>**`.+- Only `name` + `description` are pre-loaded, so the description must carry enough+  signal to be picked, ending with a generous list of quoted trigger phrases. Keep+  each body to one job; if a skill grows past one purpose, split it into another+  file in the same bundle.++## The skill-map table++The main `SKILL.md` and the `README.md` should each carry a **skill-map table**+(Skill | what it's for) so both the AI and humans can see the whole set and route+to the right sub-skill. This is the navigational backbone of a Skillpack.++## Publishing++Publish the whole package via the standard workflow (**wiki-api** /+**wiki-publish-safely**): create the page once, `adompkg publish` the tarball,+push all files to git with a complete `page.json` LAST, then verify in pup that+`adompkg install` deploys every skill. The live reference for this whole pattern+is **adom-ui-design** (and this pack itself).
skills/wiki-visibility/SKILL.mdadded+72
@@ -0,0 +1,72 @@+---+name: wiki-visibility+description: >-+  How visibility and licensing work on the Adom Wiki (wiki.adom.inc): a page can+  keep its git source PRIVATE while its releases / adompkg package stay PUBLIC, so+  people install the compiled app but can't read the code β€” the pattern for+  proprietary apps. Covers public vs private source, the private readme, and the+  open-source vs closed-source Page variants. Read this when deciding how much of+  a page to expose, or shipping a proprietary tool. Trigger words: private wiki+  source, public app private source, proprietary wiki page, closed source app,+  private readme, hide source code wiki, install compiled app no source, open+  source wiki repo, license a wiki repo, visibility settings wiki, who can see my+  source.+---++Parent skill: **adom-wiki-skillpack**++# Visibility & licensing: public app, private source++A wiki page is not all-or-nothing. The **git source**, the **release/adompkg+package**, and the **readme** each have their own exposure, which lets a single+repo serve both open-source and proprietary models.++## The independently-controllable parts++| Part | Public means | Private means |+|---|---|---|+| **Git source** (Files tab) | Anyone can read the code | Code hidden; only the owner sees the repo |+| **Releases / adompkg package** | Anyone can `adompkg install` / download the binary | Restricted install |+| **Readme** | Public README shown | A separate **private readme** can document a private-source page |++## The proprietary pattern (closed-source Page)++The combination that makes proprietary apps work on the wiki:++- **Git source: private** β€” the code isn't browsable.+- **Releases / adompkg: public** β€” anyone can install the compiled binary.+- **Readme: public** (or a private readme for internal docs).++So users install and run the app just fine, but never see the source. This is how+**hydrogen-desktop** and **adom-desktop** ship: the binary is a public release+asset, the Rust/Tauri source stays private. Contrast with **chip-fetcher** and+**adom-usb**, which are fully open source β€” source public, MIT-licensed,+contributions welcome.++This visibility split is exactly what distinguishes the **two Page sub-variants**+in the archetype taxonomy (see **wiki-repo-styles**):++- **Open-source Page** β€” public source + public install (chip-fetcher, adom-usb).+- **Closed-source Page** β€” private source + public install (hydrogen-desktop,+  adom-desktop).++## The private readme++When the source is private, the public still needs docs. The **private readme**+lets the page show a curated public-facing README (what it does, how to install,+how to use) while the actual source repo stays hidden. Use it so a closed-source+page still looks complete and trustworthy β€” don't leave a proprietary page with+an empty Overview tab.++## Mechanics++- Set source/package visibility in `page.json` `visibility` (e.g.+  `{"public": true}`) and via the page metadata API (`PUT /pages/:slug`).+- For a closed-source app, ship the binary as a **release asset**+  (`adompkg release upload <slug>@<ver> <file> --platform <os>`) so install pulls+  the compiled artifact, and keep the source repo out of the public files.+- Always state the license in the README so intent is unambiguous (MIT for open;+  a proprietary notice for closed).++When in doubt about exposure for a specific page, confirm with the owner β€” once+source is public and indexed it may be cached even after you flip it private.
uninstall.shadded+10
@@ -0,0 +1,10 @@+#!/usr/bin/env bash+set -e+DEST="$HOME/.claude/skills"+for n in adom-wiki-skillpack \+         wiki-anatomy wiki-api wiki-publish-safely wiki-readme wiki-visibility \+         wiki-repo-styles wiki-family wiki-skillpack wiki-hero \+         wiki-breadcrumbs wiki-forking wiki-scoring; do+  rm -rf "$DEST/$n"+done+echo "OK: Removed the Adom Wiki Skill Pack and its 12 bundled skills."