Gallia Bundle
Public UnreviewedAdom platform bundle for Hydrogen Desktop. Built by adom-inc/gallia-hd-bundle from upstream adom-inc/gallia — strips legacy-container cleanup, drops bootstrap.sh, ships 117 skills + cleaned-down insta
What Hydrogen Desktop runs
curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/gallia-bundle/gallia-bundle.tar.gz \
-o /tmp/gallia-bundle.tar.gz
tar xzf /tmp/gallia-bundle.tar.gz -C ~/
cd ~/gallia && npm install --no-audit --no-fund
node ~/gallia/install.mjs --project ~/project
This bundle is trimmed for fresh Hydrogen Desktop containers — all the legacy-container uninstall logic in install.mjs has been stripped (no old MCP servers to remove, no retired kel/adom-rc/skill-pilot/ds-queue/conduit/AV residue to scrub). The full installer with cleanup lives in adom-inc/gallia for cloud containers.
bootstrap.sh is not in this bundle either — Hydrogen Desktop handles its own Claude-Code-extension install, VS Code settings, auth, and pre-reqs.
What install.mjs actually installs
All work is done in a single pass with a /tmp/gallia-install.pid mutex (prevents concurrent runs that race on ~/.claude/skills/).
| § | Step | What it does |
|---|---|---|
| 0 | PATH | Adds ~/.local/bin and ~/.claude/bin to ~/.bashrc |
| 1 | Skills | Copies all SKILL.mds into ~/.claude/skills/adom/guides/<skill>.md under a single adom umbrella skill (so only /adom appears in the slash-command list); skills with user-invocable: true also get a standalone ~/.claude/skills/<skill>/SKILL.md so they get their own slash command. Also prunes orphan guides — if a skill was previously deployed but no longer exists in source (e.g. retired skills), its guides/<skill>.md is deleted so the umbrella adom skill stops referencing it |
| 1a / 1b6 | Codex sync | Mirrors ~/.claude/skills/* into ~/.codex/skills/ |
| 1b | adom-cli | Downloads adom-cli from GitHub Releases (fallback: wiki), installs to /usr/local/bin/adom-cli, runs adom-cli skills install |
| 1b2 | adom-wiki | Downloads adom-wiki from GitHub Releases (fallback: wiki), installs binary + SKILL.md, seeds the wiki CLI token from /var/run/adom/api-key |
| 1b3 | adom-vscode | Downloads adom-vscode from GitHub Releases (fallback: wiki), disables the built-in github-authentication VS Code extension (and the github.gitAuthentication / git.autofetch settings), runs adom-vscode install to deploy the VSIX + SKILL.md + bash completions + screenshot bridge |
| 1c | Tier A apps | Downloads + installs these binaries from the wiki: adom-mouser, adom-digikey, adom-jlcpcb, adom-parts-search, adom-gchat. Each binary's own install subcommand deploys its SKILL.md + bash completions |
| 1d | Default agents | Reads default-agents.json, fetches each agent's skill_source from the wiki API, writes to ~/.claude/agents/<slug>.md |
| 1b4 | Wiki catalog | Runs hooks/refresh-wiki-catalog.mjs to pull the auto-discovery catalog snippet |
| 1c | MEMORY.md | Injects the managed block from memory-rules.md (between <!-- ADOM-BEGIN --> markers) into ~/.claude/projects/<encoded-projectRoot>/memory/MEMORY.md |
| 2 | Claude Code settings | Writes ~/.claude/settings.json — merges permissions.allow/ask, pins model: claude-opus-4-7[1m], marks trustedDirectories, registers hooks/check-updates.sh as a UserPromptSubmit hook, sets hooks/statusline.sh as the statusline. Also updates ~/.claude.json onboarding flags and forces python.interpreter.infoVisibility: never in code-server settings |
| 3 | Identity cache | Calls adom-cli carbon user get + carbon containers current + carbon user orgs, writes safe identifiers (user name, display name, repo name, org names — never slug/hostname) to ~/.config/adom-identity.json |
| 5 | Shared services | Prints info banner: service-kicad, JLCPCB, and Mouser run on shared service containers — nothing local needed. Honors KICAD_SERVICE_API override |
| 7 | Project dirs | Creates <projectRoot>/project-content/screenshots and .../schematics (sudo + chown fallback on EACCES) |
| 8 | Background services | Runs services/adom-start.sh (which discovers any services/*/service.json whose service tag matches $GALLIA_SERVICE, default local); runs each matching services/*/setup.sh; patches /usr/local/bin/code-server-entrypoint.sh to re-run adom-start.sh on reboot; installs a */2 * * * * cron calling services/adom-watchdog.sh only on service containers (where /etc/environment sets GALLIA_SERVICE to something other than local) |
| 10 | Summary | Prints "Open Claude Code and try your first prompt!" |
| extra | Org bootstraps | For each org in the cached identity that has a customer entry in CUSTOMER_BOOTSTRAPS (currently only ntx-embedded), clones or wiki-downloads the customer repo to ~/<org>/ and runs its install.sh |
| extra | Hash stamp | Writes sha256(install.mjs) to ~/.adom/last-install-hash so hooks/check-updates.sh can detect upstream changes |
Not installed by this bundle: MCP servers (none — they were all retired); bootstrap.sh (HD handles bootstrap itself); kel, adom-rc, skill-pilot, ds-queue (all retired). On a fresh HD container, the installer logs are linear and clean — every line is a positive "✓ installed X", no scrubs or removals.
Skill inventory (117)
Skills below are deployed as guides under the single adom umbrella; ones marked user-invocable: true in their frontmatter also get their own slash command.
Adom platform — core
adom, adom-api, adom-app-header, adom-app-model, adom-auth, adom-cli-design, adom-cloud, adom-footprint, adom-inventory, adom-layouts, adom-lbr, adom-panels, adom-pin-mapping, adom-plan, adom-port-hints, adom-publish, adom-repo-management, adom-schematics, adom-screenshot, adom-security, adom-symbol, adom-tts, adom-ui-linter, adom-update, adom-viewer, adom-workspace-control
Adom Desktop bridge
adom-desktop, adom-desktop-bridge-author, adom-desktop-demo, adom-desktop-direct-api, adom-desktop-discovery, desktop-setup, desktop-ssh, ssh-connection, remote-bootstrap, oauth
Wiki + sharing
adom-wiki, adom-wiki-v2, wiki-backup, wiki-first-lookup, wiki-split, app-creator, readme-creator, library-creator, tool-publisher, skill-catalog, skill-creator, standalone-service
KiCad, PCB, electrical engineering
service-kicad, service-kicad-admin, kicad-donut-pad, kicad-to-markdown, kicad-to-molecule, pcb-design, footprint-creator, schematic-creator, altium-pcblib, gerber-viewer, fp3d-viewer, pin1-indicator, electrical-engineering, solder-jet-sizer, solder-jetting, up-axis-conventions
Fusion 360
fusion-360, fusion-export-for-hydrogen, fusion-update-libraries
3D models + viewers
3d-component-creator, 3d-viewer-design, basic-3d-viewer, instrument-viewer, measure-tool-design, mosfet-visualizer, molecule-breakout-board-creator, board-creator
tscircuit
adom-tscircuit-skill, board-building-pipeline, instapcb
Parts search + sourcing
adom-parts-search, digikey
Chipsmith
adom-chipsmith, adom-chipsmith-build
Datasheets
datasheet-parser, datasheet-parser-interactive, process-datasheets
Test instruments
pyvisa-testscript, red-pitaya
Process, demos, ops
brand, bug-filing, container-bootstrap, debug, definitions, demo-recording, tour, tts-pronunciation, use-cases
Other tools + references
curium, neon-mirror, pup, pup-vs-webview, claude-api, claude-code-1m-context, ai-hints-in-clis, relay-hint-pattern, avatar, movie-maker, carbon-preferences, human-ui-patterns
Differences from the upstream gallia repo
| Item | Upstream adom-inc/gallia |
This HD bundle |
|---|---|---|
bootstrap.sh |
present (legacy cloud-container bootstrap) | removed — HD does its own bootstrap |
install.mjs oldSkillDirs cleanup loop |
present | removed |
install.mjs nested-adom-skill cleanup |
present | removed |
install.mjs ~/.claude/commands/ scrub |
present | removed |
install.mjs §1b3 broken-extension removal |
present | removed |
install.mjs §1b5 ds-queue retirement |
present | removed |
install.mjs §3 + §4 MCP cleanup |
present | removed — no MCP servers anywhere |
install.mjs §4b gchat / kel legacy cleanup |
present | removed |
install.mjs §4c desktop-conduit / AV retirement |
present | removed |
install.mjs §4d2 jst / neon-mirror / piper-tts retirement |
present | removed |
install.mjs §4d skill-pilot retirement |
present | removed |
install.mjs §4e adom-rc retirement |
present | removed |
install.mjs §8 legacy check-kicad-update.sh cron scrub + stale-watchdog else-branch |
present | removed |
install.mjs shrinks from 1434 → 976 lines (-32%). The bundle tarball ships at 4.9 MB (641 files) vs ~16 MB stale.
Bundle contents
gallia/
├── install.mjs # cleaned installer (no legacy uninstall code)
├── package.json # npm deps for installer + MCP servers
├── default-agents.json # which agents to install from the wiki
├── memory-rules.md # global memory hygiene rules
├── PORT-REGISTRY.md # platform port allocations
├── skills/ # 117 SKILL.md packages
├── services/ # service skeletons (kicad-cli, ds-extract, oauth-gateway)
├── hooks/ # statusline.sh, check-updates.sh, refresh-wiki-catalog.mjs
├── scripts/ # bootstrap-guest, publish-to-wiki, claude-auth, etc.
├── dns/, jst/ # MCP servers (source — not auto-registered by installer)
├── symbol-creator/ # KiCad/EAGLE symbol creator MCP server + UI
├── footprint-creator/ # KiCad footprint creator MCP server + UI
├── youtube/ # YouTube OAuth + API tooling
├── brand/, docs/, plans/, demo/
└── .claude/ # per-project Claude Code config baseline
Source + build process
- Skill source: adom-inc/gallia. This bundle never touches that repo — it snapshots
HEAD, applies HD-specific transforms in a sandbox, ships. - Build pipeline: adom-inc/gallia-hd-bundle is the HD layer. It owns the build script, the strip policy (
strip-install-mjs.py, 12 exact-match excisions, fails loud on any upstream drift), and a.gallia-pinrecording which gallia commit each bundle was built from.
Rebuild flow:
cd ~/project/gallia && git pull
cd ~/project/gallia-hd-bundle && bash build.sh
git add .gallia-pin && git commit -m "Build bundle from gallia $(cat .gallia-pin | cut -c1-7)" && git push
Every build uploads two assets to this page: gallia-bundle.tar.gz and bundle-meta.json. The meta sidecar pins the exact gallia commit, build timestamp, tarball SHA256, skill count, and the strip list applied — so for any deployed bundle you can answer "which gallia SHA was this built from?" with a single curl:
curl -s https://wiki-ufypy5dpx93o.adom.cloud/static/apps/gallia-bundle/bundle-meta.json | jq .
The page's asset upload history (visible via adom-wiki page log app/gallia-bundle) is the canonical build log.
## What Hydrogen Desktop runs
```bash
curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/gallia-bundle/gallia-bundle.tar.gz \
-o /tmp/gallia-bundle.tar.gz
tar xzf /tmp/gallia-bundle.tar.gz -C ~/
cd ~/gallia && npm install --no-audit --no-fund
node ~/gallia/install.mjs --project ~/project
```
This bundle is **trimmed for fresh Hydrogen Desktop containers** — all the legacy-container uninstall logic in `install.mjs` has been stripped (no old MCP servers to remove, no retired `kel`/`adom-rc`/`skill-pilot`/`ds-queue`/conduit/AV residue to scrub). The full installer with cleanup lives in [adom-inc/gallia](https://github.com/adom-inc/gallia) for cloud containers.
`bootstrap.sh` is **not** in this bundle either — Hydrogen Desktop handles its own Claude-Code-extension install, VS Code settings, auth, and pre-reqs.
## What `install.mjs` actually installs
All work is done in a single pass with a `/tmp/gallia-install.pid` mutex (prevents concurrent runs that race on `~/.claude/skills/`).
| § | Step | What it does |
|---|------|--------------|
| 0 | PATH | Adds `~/.local/bin` and `~/.claude/bin` to `~/.bashrc` |
| 1 | Skills | Copies all SKILL.mds into `~/.claude/skills/adom/guides/<skill>.md` under a single `adom` umbrella skill (so only `/adom` appears in the slash-command list); skills with `user-invocable: true` also get a standalone `~/.claude/skills/<skill>/SKILL.md` so they get their own slash command. **Also prunes orphan guides** — if a skill was previously deployed but no longer exists in source (e.g. retired skills), its `guides/<skill>.md` is deleted so the umbrella `adom` skill stops referencing it |
| 1a / 1b6 | Codex sync | Mirrors `~/.claude/skills/*` into `~/.codex/skills/` |
| 1b | adom-cli | Downloads `adom-cli` from GitHub Releases (fallback: wiki), installs to `/usr/local/bin/adom-cli`, runs `adom-cli skills install` |
| 1b2 | adom-wiki | Downloads `adom-wiki` from GitHub Releases (fallback: wiki), installs binary + SKILL.md, seeds the wiki CLI token from `/var/run/adom/api-key` |
| 1b3 | adom-vscode | Downloads `adom-vscode` from GitHub Releases (fallback: wiki), disables the built-in `github-authentication` VS Code extension (and the `github.gitAuthentication` / `git.autofetch` settings), runs `adom-vscode install` to deploy the VSIX + SKILL.md + bash completions + screenshot bridge |
| 1c | Tier A apps | Downloads + installs these binaries from the wiki: `adom-mouser`, `adom-digikey`, `adom-jlcpcb`, `adom-parts-search`, `adom-gchat`. Each binary's own `install` subcommand deploys its SKILL.md + bash completions |
| 1d | Default agents | Reads `default-agents.json`, fetches each agent's `skill_source` from the wiki API, writes to `~/.claude/agents/<slug>.md` |
| 1b4 | Wiki catalog | Runs `hooks/refresh-wiki-catalog.mjs` to pull the auto-discovery catalog snippet |
| 1c | MEMORY.md | Injects the managed block from `memory-rules.md` (between `<!-- ADOM-BEGIN -->` markers) into `~/.claude/projects/<encoded-projectRoot>/memory/MEMORY.md` |
| 2 | Claude Code settings | Writes `~/.claude/settings.json` — merges `permissions.allow`/`ask`, pins `model: claude-opus-4-7[1m]`, marks `trustedDirectories`, registers `hooks/check-updates.sh` as a `UserPromptSubmit` hook, sets `hooks/statusline.sh` as the statusline. Also updates `~/.claude.json` onboarding flags and forces `python.interpreter.infoVisibility: never` in code-server settings |
| 3 | Identity cache | Calls `adom-cli carbon user get` + `carbon containers current` + `carbon user orgs`, writes safe identifiers (user name, display name, repo name, org names — **never** slug/hostname) to `~/.config/adom-identity.json` |
| 5 | Shared services | Prints info banner: `service-kicad`, JLCPCB, and Mouser run on shared service containers — nothing local needed. Honors `KICAD_SERVICE_API` override |
| 7 | Project dirs | Creates `<projectRoot>/project-content/screenshots` and `.../schematics` (sudo + chown fallback on EACCES) |
| 8 | Background services | Runs `services/adom-start.sh` (which discovers any `services/*/service.json` whose `service` tag matches `$GALLIA_SERVICE`, default `local`); runs each matching `services/*/setup.sh`; patches `/usr/local/bin/code-server-entrypoint.sh` to re-run `adom-start.sh` on reboot; installs a `*/2 * * * *` cron calling `services/adom-watchdog.sh` **only on service containers** (where `/etc/environment` sets `GALLIA_SERVICE` to something other than `local`) |
| 10 | Summary | Prints "Open Claude Code and try your first prompt!" |
| extra | Org bootstraps | For each org in the cached identity that has a customer entry in `CUSTOMER_BOOTSTRAPS` (currently only `ntx-embedded`), clones or wiki-downloads the customer repo to `~/<org>/` and runs its `install.sh` |
| extra | Hash stamp | Writes `sha256(install.mjs)` to `~/.adom/last-install-hash` so `hooks/check-updates.sh` can detect upstream changes |
**Not installed by this bundle:** MCP servers (none — they were all retired); `bootstrap.sh` (HD handles bootstrap itself); `kel`, `adom-rc`, `skill-pilot`, `ds-queue` (all retired). On a fresh HD container, the installer logs are linear and clean — every line is a positive "✓ installed X", no scrubs or removals.
## Skill inventory (117)
Skills below are deployed as guides under the single `adom` umbrella; ones marked `user-invocable: true` in their frontmatter also get their own slash command.
### Adom platform — core
`adom`, `adom-api`, `adom-app-header`, `adom-app-model`, `adom-auth`, `adom-cli-design`, `adom-cloud`, `adom-footprint`, `adom-inventory`, `adom-layouts`, `adom-lbr`, `adom-panels`, `adom-pin-mapping`, `adom-plan`, `adom-port-hints`, `adom-publish`, `adom-repo-management`, `adom-schematics`, `adom-screenshot`, `adom-security`, `adom-symbol`, `adom-tts`, `adom-ui-linter`, `adom-update`, `adom-viewer`, `adom-workspace-control`
### Adom Desktop bridge
`adom-desktop`, `adom-desktop-bridge-author`, `adom-desktop-demo`, `adom-desktop-direct-api`, `adom-desktop-discovery`, `desktop-setup`, `desktop-ssh`, `ssh-connection`, `remote-bootstrap`, `oauth`
### Wiki + sharing
`adom-wiki`, `adom-wiki-v2`, `wiki-backup`, `wiki-first-lookup`, `wiki-split`, `app-creator`, `readme-creator`, `library-creator`, `tool-publisher`, `skill-catalog`, `skill-creator`, `standalone-service`
### KiCad, PCB, electrical engineering
`service-kicad`, `service-kicad-admin`, `kicad-donut-pad`, `kicad-to-markdown`, `kicad-to-molecule`, `pcb-design`, `footprint-creator`, `schematic-creator`, `altium-pcblib`, `gerber-viewer`, `fp3d-viewer`, `pin1-indicator`, `electrical-engineering`, `solder-jet-sizer`, `solder-jetting`, `up-axis-conventions`
### Fusion 360
`fusion-360`, `fusion-export-for-hydrogen`, `fusion-update-libraries`
### 3D models + viewers
`3d-component-creator`, `3d-viewer-design`, `basic-3d-viewer`, `instrument-viewer`, `measure-tool-design`, `mosfet-visualizer`, `molecule-breakout-board-creator`, `board-creator`
### tscircuit
`adom-tscircuit-skill`, `board-building-pipeline`, `instapcb`
### Parts search + sourcing
`adom-parts-search`, `digikey`
### Chipsmith
`adom-chipsmith`, `adom-chipsmith-build`
### Datasheets
`datasheet-parser`, `datasheet-parser-interactive`, `process-datasheets`
### Test instruments
`pyvisa-testscript`, `red-pitaya`
### Process, demos, ops
`brand`, `bug-filing`, `container-bootstrap`, `debug`, `definitions`, `demo-recording`, `tour`, `tts-pronunciation`, `use-cases`
### Other tools + references
`curium`, `neon-mirror`, `pup`, `pup-vs-webview`, `claude-api`, `claude-code-1m-context`, `ai-hints-in-clis`, `relay-hint-pattern`, `avatar`, `movie-maker`, `carbon-preferences`, `human-ui-patterns`
## Differences from the upstream gallia repo
| Item | Upstream `adom-inc/gallia` | This HD bundle |
|------|----------------------------|-----------------|
| `bootstrap.sh` | present (legacy cloud-container bootstrap) | **removed** — HD does its own bootstrap |
| `install.mjs` `oldSkillDirs` cleanup loop | present | **removed** |
| `install.mjs` nested-adom-skill cleanup | present | **removed** |
| `install.mjs` `~/.claude/commands/` scrub | present | **removed** |
| `install.mjs` §1b3 broken-extension removal | present | **removed** |
| `install.mjs` §1b5 ds-queue retirement | present | **removed** |
| `install.mjs` §3 + §4 MCP cleanup | present | **removed** — no MCP servers anywhere |
| `install.mjs` §4b gchat / `kel` legacy cleanup | present | **removed** |
| `install.mjs` §4c desktop-conduit / AV retirement | present | **removed** |
| `install.mjs` §4d2 jst / neon-mirror / piper-tts retirement | present | **removed** |
| `install.mjs` §4d skill-pilot retirement | present | **removed** |
| `install.mjs` §4e adom-rc retirement | present | **removed** |
| `install.mjs` §8 legacy `check-kicad-update.sh` cron scrub + stale-watchdog else-branch | present | **removed** |
`install.mjs` shrinks from **1434 → 976 lines** (-32%). The bundle tarball ships at **4.9 MB** (641 files) vs ~16 MB stale.
## Bundle contents
```
gallia/
├── install.mjs # cleaned installer (no legacy uninstall code)
├── package.json # npm deps for installer + MCP servers
├── default-agents.json # which agents to install from the wiki
├── memory-rules.md # global memory hygiene rules
├── PORT-REGISTRY.md # platform port allocations
├── skills/ # 117 SKILL.md packages
├── services/ # service skeletons (kicad-cli, ds-extract, oauth-gateway)
├── hooks/ # statusline.sh, check-updates.sh, refresh-wiki-catalog.mjs
├── scripts/ # bootstrap-guest, publish-to-wiki, claude-auth, etc.
├── dns/, jst/ # MCP servers (source — not auto-registered by installer)
├── symbol-creator/ # KiCad/EAGLE symbol creator MCP server + UI
├── footprint-creator/ # KiCad footprint creator MCP server + UI
├── youtube/ # YouTube OAuth + API tooling
├── brand/, docs/, plans/, demo/
└── .claude/ # per-project Claude Code config baseline
```
## Source + build process
- **Skill source:** [adom-inc/gallia](https://github.com/adom-inc/gallia). This bundle never touches that repo — it snapshots `HEAD`, applies HD-specific transforms in a sandbox, ships.
- **Build pipeline:** [adom-inc/gallia-hd-bundle](https://github.com/adom-inc/gallia-hd-bundle) is the HD layer. It owns the build script, the strip policy (`strip-install-mjs.py`, 12 exact-match excisions, fails loud on any upstream drift), and a `.gallia-pin` recording which gallia commit each bundle was built from.
Rebuild flow:
```bash
cd ~/project/gallia && git pull
cd ~/project/gallia-hd-bundle && bash build.sh
git add .gallia-pin && git commit -m "Build bundle from gallia $(cat .gallia-pin | cut -c1-7)" && git push
```
Every build uploads two assets to this page: `gallia-bundle.tar.gz` and `bundle-meta.json`. The meta sidecar pins the exact gallia commit, build timestamp, tarball SHA256, skill count, and the strip list applied — so for any deployed bundle you can answer "which gallia SHA was this built from?" with a single `curl`:
```bash
curl -s https://wiki-ufypy5dpx93o.adom.cloud/static/apps/gallia-bundle/bundle-meta.json | jq .
```
The page's asset upload history (visible via `adom-wiki page log app/gallia-bundle`) is the canonical build log.