{
  "schema_version": 1,
  "type": "skill",
  "slug": "adom-update",
  "title": "Adom Update",
  "brief": "Use when the user wants to update Adom from GitHub, pull the latest code, refresh skills, reinstall, or asks \"update adom\", \"pull latest\", \"update from github\", \"refresh skills\", \"reinstall adom\".",
  "version": "1.0.0",
  "tags": [],
  "license": "MIT",
  "source_path": "SKILL.md",
  "readme": "# Update Adom from GitHub\n\nPull the latest Adom code, install dependencies, deploy skills, and verify everything is running.\n\n## Step 1: Pull from GitHub\n\nCheck for local changes first:\n\n```bash\ncd ~/gallia && git status --short\n```\n\n**If local changes exist:**\n\n```bash\ncd ~/gallia && git stash && git pull && git stash pop\n```\n\nIf `git stash pop` reports merge conflicts, show the user the conflicting files and stop. They must resolve manually, then ask you to continue.\n\n**If clean:**\n\n```bash\ncd ~/gallia && git pull\n```\n\n**Report what changed.** Save the diff for later steps:\n\n```bash\ncd ~/gallia && git diff --name-only HEAD@{1}..HEAD 2>/dev/null\ncd ~/gallia && git log --oneline HEAD@{1}..HEAD 2>/dev/null\n```\n\nIf already up to date, tell the user but still proceed with steps 3-5 (the installer is idempotent and fixes drift).\n\n## Step 2: Install npm dependencies\n\nOnly if dependency files changed in the pull:\n\n```bash\ncd ~/gallia && git diff --name-only HEAD@{1}..HEAD 2>/dev/null | grep -E 'package\\.json|package-lock\\.json'\n```\n\nIf any matched, run `cd ~/gallia && npm install`. The root package.json uses npm workspaces (server, viewer, jlcpcb, mouser, digikey, gchat), so one install handles everything.\n\nIf none matched, skip and report \"Dependencies unchanged.\"\n\n## Step 3: Run the installer\n\nThis is the most important step. It deploys skills, configures MCP servers, and starts background servers.\n\n```bash\ncd ~/gallia && node install.mjs\n```\n\nLet the installer output speak for itself.\n\n## Step 4: Restart all servers\n\nThe installer only starts servers that aren't already running — it never restarts them. After a pull, always restart all background servers so they pick up any code changes. Skipping this leaves the user on stale server code.\n\nKill all existing server processes and restart them:\n\n```bash\npkill -f 'node.*server/server.js' 2>/dev/null\npkill -f 'node.*viewer/server.js' 2>/dev/null\npkill -f 'node.*jlcpcb/server.js' 2>/dev/null\nsleep 1\ncd ~/gallia && nohup node server/server.js > /dev/null 2>&1 &\ncd ~/gallia && nohup node viewer/server.js > /dev/null 2>&1 &\ncd ~/gallia && nohup node jlcpcb/server.js > /dev/null 2>&1 &\n```\n\nWait a couple seconds, then verify they're responding (step 5).\n\n## Step 5: Verify\n\nRun these checks and report results:\n\n**Servers responding:**\n\n```bash\ncurl -s --max-time 2 -o /dev/null -w '%{http_code}' http://127.0.0.1:8766/ 2>/dev/null || echo 'DOWN'\ncurl -s --max-time 2 -o /dev/null -w '%{http_code}' http://127.0.0.1:8770/ 2>/dev/null || echo 'DOWN'\ncurl -s --max-time 2 -o /dev/null -w '%{http_code}' http://127.0.0.1:8774/ 2>/dev/null || echo 'DOWN'\n```\n\n**Skills deployed** (every skill dir in `~/gallia/skills/` except `adom` should have a matching guide):\n\n```bash\nls ~/gallia/skills/ | grep -v README | grep -v adom | sort\nls ~/.claude/skills/adom/guides/ | sed 's/\\.md$//' | sort\n```\n\n**Umbrella in sync:**\n\n```bash\ndiff ~/gallia/skills/adom/SKILL.md ~/.claude/skills/adom/SKILL.md\n```\n\n## Step 6: Summary\n\nReport to the user:\n\n1. **Commits pulled** — count and notable changes\n2. **New skills** — any new guide files that appeared\n3. **Server status** — Conduit (8766), Viewer (8770), JLCPCB (8774)\n4. **Action items** — missing env vars for optional servers (Mouser, DigiKey, Google Chat), merge conflicts, or anything else\n\nIf new MCP tools were added (new servers or new tools in existing servers), tell the user: **\"Restart your Claude Code session for new MCP tools to appear.\"**",
  "author": {
    "name": "Kyle Bergstedt",
    "email": "[email protected]"
  },
  "visibility": {
    "public": true
  },
  "hero": null,
  "sample_prompts": [],
  "discovery_triggers": [],
  "discovery_pitch": null,
  "metadata": {},
  "created_at": "2026-05-28T05:30:02.775Z",
  "updated_at": "2026-05-28T05:30:02.775Z",
  "sub_skills": [],
  "parent_app": null,
  "org": "adom"
}