← Commit history
SKILL.md+9−5
@@ -1,11 +1,15 @@ --- name: adom-vscode-description: "Control VS Code Server (code-server) from inside an Adom workspace (a cloud container, or the Hydrogen workspace machine on Windows/macOS). THIS is the wrapper for the VS Code FILE EXPLORER sidebar, editor tabs, markdown preview, etc., when the user says 'reveal in file explorer' or 'open in vscode' they mean this CLI, NOT adom-bridge (which controls Chrome browser windows via pup_*). START-HERE skill of the adom-vscode pack: file ops, workspace scoping, port discovery, and the map to the sub-skills covering live settings (adom-vscode-settings), container exec (adom-vscode-exec), the frontend event queue (adom-vscode-queue), container identity + api key (adom-vscode-container), extension management (adom-vscode-extensions). Trigger words: adom-vscode, open in vscode, reveal in explorer, file explorer, sidebar reveal, preview markdown, vscode command, vscode api, port 8821, port 8822, code-server control, drive vscode, vscode verbs."+description: >-+  Control VS Code (code-server) in an Adom workspace with the adom-vscode CLI: open, reveal in the+  Explorer sidebar, markdown preview, any VS Code command; maps to the adom-vscode-* sub-skills. Use+  when the user says open in vscode, reveal in file explorer, preview markdown, run a vscode+  command. --- -# adom-vscode, VS Code Control (start here)+# adom-vscode, VS Code Control -> **Disambiguation, read first.** When the user says "open in+> **Disambiguation.** When the user says "open in > file explorer" / "reveal" / "show me where this file is" / > "click to open in vscode" they almost always mean the > **VS Code Server's sidebar Explorer** (the panel inside this@@ -30,7 +34,7 @@ description: "Control VS Code Server (code-server) from inside an Adom workspace  A VS Code extension inside code-server runs an HTTP server on **127.0.0.1:8821**; the `adom-vscode` CLI wraps those verbs with AI-oriented colored output. Everything-is plain HTTP too, so scripts and the HD/HW frontend hit the API directly.+is plain HTTP too, so scripts and the Hydrogen frontend (ah or hc) hit the API directly. `GET /health` returns the full verb roster (`verbs: [...]`) for feature detection.  If 8821 is taken the extension falls back to 8822..8831 (then an ephemeral port)@@ -48,7 +52,7 @@ Binary: `~/.local/bin/adom-vscode` (also `/usr/local/bin/adom-vscode`). | **adom-vscode-settings** | Get/set ANY setting, theme, fonts, font sizes, all LIVE with no reload; resolved (truly rendered) font families | | **adom-vscode-exec** | Run shell commands in the workspace, streamed (SSE) or buffered; why it beats an out-of-band host spawn | | **adom-vscode-queue** | The container-to-frontend event queue: push/pull/status/clear, topics, TTL, persistence |-| **adom-vscode-container** | Workspace identity (hd = local Hydrogen workspace on Windows/macOS, hw = cloud), api-key status/inject, port discovery details, /health feature detection |+| **adom-vscode-container** | Workspace identity (`kind` hd = local Hydrogen workspace on Windows/macOS, hw = cloud hc; legacy identifiers), api-key status/inject, port discovery details, /health feature detection | | **adom-vscode-extensions** | List/query/update extensions, the AI assistants (Claude/Codex/Kimi/Antigravity), the AI thread icons, `ai`/`tabs` verbs |  ## CRITICAL: workspace scope is `/home/adom/project`
install.sh+6−2
@@ -52,17 +52,21 @@ install_skill adom-vscode "$HERE/SKILL.md" N=0 for d in "$HERE"/skills/*/; do   [ -f "$d/SKILL.md" ] || continue+  [ "$(basename "$d")" = adom-vscode-modes ] && continue   # retired in 1.1.97   install_skill "$(basename "$d")" "$d/SKILL.md"; N=$((N+1)) done-rm -rf "$SKILLS_DEST/adom-vscode-modes"   # retired in 1.1.97 echo "Installed the adom-vscode skill pack (parent + $N sub-skills)."  # The CLI handles the rest, including self-elevating to sudo for the # workbench.html patch (see inject_browser_scripts in cli/src/main.rs). "$BIN_DST" install +# Retired in 1.1.97. Removed AFTER the CLI install: the 1.1.120 CLI still fetches+# adom-vscode-modes from the wiki by a hard-coded name and would re-create it.+rm -rf "$SKILLS_DEST/adom-vscode-modes"+ # Tell the (possibly still-running OLD) :8821 server that an update is staged,-# so the HD frontend can offer "reload when convenient" and auto-reload when+# so the Hydrogen frontend can offer "reload when convenient" and auto-reload when # no Claude sessions are active. Best-effort: pre-1.1.10 servers 404 this. STAGED_VERSION="$(cat "$HERE/VERSION" 2>/dev/null || echo unknown)" "$BIN_DST" queue push system --type update-pending \
package.json+4−5
@@ -1,8 +1,8 @@ {   "slug": "adom-vscode",-  "version": "1.1.120",+  "version": "1.1.121",   "type": "app",-  "description": "CLI + VS Code extension that lets AI assistants and the Hydrogen Desktop frontend drive VS Code from inside an Adom container: open files, live get/set of any setting/theme/font (no reload), native streamed exec, a frontend event queue, container identity (hd/hw), api-key status/inject, extension query/update, modes, paste screenshots, and any VS Code command via a local HTTP API on port 8821 (with port-file fallback discovery).",+  "description": "CLI + VS Code extension that lets AI assistants and the Hydrogen frontend drive VS Code from inside an Adom container: open files, live get/set of any setting/theme/font (no reload), native streamed exec, a frontend event queue, container identity (kind hd/hw), api-key status/inject, extension query/update, paste screenshots, and any VS Code command via a local HTTP API on port 8821 (with port-file fallback discovery).",   "license": "PROPRIETARY",   "tags": [     "automation",@@ -11,7 +11,7 @@     "code-server",     "docker",     "exec",-    "hydrogen-desktop",+    "hydrogen",     "ide",     "queue",     "settings",@@ -43,7 +43,6 @@     "adom-vscode-exec",     "adom-vscode-queue",     "adom-vscode-container",-    "adom-vscode-extensions",-    "adom-vscode-modes"+    "adom-vscode-extensions"   ] }
page.json+4−5
@@ -4,7 +4,7 @@   "slug": "adom-vscode",   "title": "adom-vscode",   "brief": "Let Claude, Codex and Kimi drive VS Code inside your Adom container",-  "version": "1.1.120",+  "version": "1.1.121",   "license": "PROPRIETARY",   "visibility": "public",   "hero": {@@ -19,7 +19,7 @@     "code-server",     "docker",     "exec",-    "hydrogen-desktop",+    "hydrogen",     "ide",     "queue",     "settings",@@ -104,7 +104,7 @@       "prompt": "push a login-refresh event to the HD frontend queue"     }   ],-  "description": "CLI + VS Code extension that lets AI assistants and the Hydrogen Desktop frontend drive VS Code from inside an Adom container: open files, live get/set of any setting/theme/font (no reload), native streamed exec, a frontend event queue, container identity (hd/hw), api-key status/inject, extension query/update, modes, paste screenshots, and any VS Code command via a local HTTP API on port 8821 (with port-file fallback discovery).",+  "description": "CLI + VS Code extension that lets AI assistants and the Hydrogen frontend drive VS Code from inside an Adom container: open files, live get/set of any setting/theme/font (no reload), native streamed exec, a frontend event queue, container identity (kind hd/hw), api-key status/inject, extension query/update, paste screenshots, and any VS Code command via a local HTTP API on port 8821 (with port-file fallback discovery).",   "dependencies": {     "adom/adom-theme": "^2.0.0"   },@@ -138,7 +138,6 @@     "adom-vscode-exec",     "adom-vscode-queue",     "adom-vscode-container",-    "adom-vscode-extensions",-    "adom-vscode-modes"+    "adom-vscode-extensions"   ] }\ No newline at end of file
skills/adom-vscode-container/SKILL.md+7−3
@@ -1,6 +1,10 @@ --- name: adom-vscode-container-description: "Identify the Adom workspace (hd = local Hydrogen workspace — WSL2 on Windows, the systemd-nspawn workspace machine on macOS; hw = Adom cloud container), check and inject the Adom api key at /var/run/adom/api-key, discover the extension's real port when 8821 is taken, and feature-detect verbs via GET /health. Trigger words: container type, hd or hw, what kind of container, am I in hydrogen desktop, cloud container, container identity, api key status, is the api key good, refresh api key, inject api key, /var/run/adom/api-key, session key expiring, port discovery, port.json, ADOM_VSCODE_PORT, health verbs, feature detect, carbon url, vscode proxy uri."+description: >-+  Identify the Adom workspace (kind hd = local Hydrogen workspace, hw = cloud container; legacy+  identifiers), check or inject the Adom api key, find the extension's real port, feature-detect+  verbs via /health. Use when asked what kind of container this is, is the api key good, refresh api+  key. ---  Parent skill: **adom-vscode**@@ -47,7 +51,7 @@ adom-vscode apikey set <value>   the frontend completes a login refresh and needs the container to pick up the   new session key. - Typical flow with the queue (adom-vscode ships NO built-in watcher; the-  polling process and its cadence belong to HD or another owner): that process+  polling process and its cadence belong to Hydrogen or another owner): that process   sees the key aging, pushes a `login/refresh-needed` event (see   **adom-vscode-queue**); frontend refreshes the session and calls `apikey   set`; the process confirms via `apikey status` (fresh mtime + new@@ -82,7 +86,7 @@ adom-vscode health  `GET /health` returns `{version, port, preferredPort, portFile, verbs: [...]}`. Gate on the `verbs` array (e.g. `exec.stream`, `queue.push`, `apikey.set`), not-on version strings. Note: `exec` / `exec.stream` only appear on HD-local+on version strings. Note: `exec` / `exec.stream` only appear on local (`kind:hd`) containers; on cloud (hw) containers they are disabled by security policy and absent from the roster (`execAllowed: false`). An extension that answers /health without a `verbs` field predates 1.1.10 and needs a window reload or update.
skills/adom-vscode-exec/SKILL.md+5−1
@@ -1,6 +1,10 @@ --- name: adom-vscode-exec-description: "Run shell commands inside the Adom container through the adom-vscode extension, streamed live (SSE) or buffered, as the workspace user via a login shell. LOCAL-WORKSPACE ONLY (kind:hd — WSL2 on Windows, the Hydrogen workspace machine on macOS): cloud (hw) containers refuse exec (exec_disabled_on_cloud), check /health verbs first. THE native replacement for routing workspace commands through an out-of-band host spawn (wsl.exe on Windows, limactl/nsenter on macOS). Trigger words: exec disabled, exec_disabled_on_cloud, exec in container, run command in container, adom-vscode exec, stream exec, streamed output, exec stream, container shell, run npm test in container, long running command, exec timeout, exec cwd, no wsl.exe, wsl exec replacement, POST /exec, SSE exec."+description: >-+  Run shell commands in the Adom workspace through the adom-vscode extension, streamed (SSE) or+  buffered. Local workspaces only (kind hd, a legacy identifier); cloud+  refuses with exec_disabled_on_cloud. Use when you need exec in container, stream a long command,+  run npm test in container. ---  Parent skill: **adom-vscode**
skills/adom-vscode-extensions/SKILL.md+4−1
@@ -1,6 +1,9 @@ --- name: adom-vscode-extensions-description: "Query and manage VS Code extensions in the Adom container: list installed with versions and running state, get one extension's detail plus whether a newer gallery version exists, update one or all, search, install. Includes the AI assistant summary (claude = anthropic.claude-code, codex = openai.chatgpt, kimi = moonshot-ai.kimi-code). Trigger words: is claude installed, claude extension version, codex extension, kimi extension, list extensions, extension version, update extension, extension update pending, install extension, search extensions, extension running, extension state, workbench extensions, open-vsx latest, update claude code extension."+description: >-+  List, inspect, update, search and install VS Code extensions in the Adom workspace, including the+  AI assistants (Claude Code, Codex, Kimi). Use when asked is claude installed, claude extension+  version, update extension, install extension, list extensions. ---  Parent skill: **adom-vscode**
skills/adom-vscode-modes/SKILL.md+15−80
@@ -1,90 +1,25 @@ --- name: adom-vscode-modes-description: "Full-screen VS Code modes (claudecode = Claude panel UI, claudetty = terminal + claude CLI, tty = generic terminal with optional auto-command), layout control (sidebar, bottom panel, terminal, activity bar), URL auto-triggers (?mode=...), and Claude Code chat verbs. Trigger words: claude code mode, claudecode, claudetty, tty mode, full screen terminal, mode reset, vscode mode, toggle sidebar, toggle panel, new terminal, activity bar, hide sidebar, show terminal, new claude chat, claude context viewer, mode url, ?mode=claudecode, onboarding link."+disable-model-invocation: true+description: >-+  Retired in adom-vscode 1.1.97: the full-screen `adom-vscode mode` verbs are gone. For layout use+  `adom-vscode sidebar|panel|terminal|activity-bar`; see the adom-vscode skill. ---  Parent skill: **adom-vscode** -# adom-vscode-modes, modes / layout / Claude / paste+# adom-vscode-modes (retired) -## Modes (full-screen experiences)+This skill was retired in adom-vscode 1.1.97. The `adom-vscode mode claudecode|claudetty|tty|reset`+verbs no longer exist (`adom-vscode --help` does not list `mode`). -```bash-adom-vscode mode claudecode              # Claude Code panel UI (graphical chat)-adom-vscode mode claudetty               # Full-screen terminal running the claude CLI-adom-vscode mode tty                     # Blank full-screen terminal-adom-vscode mode tty -c "htop" -n "Monitor"   # TTY with auto-command + tab name-adom-vscode mode reset                   # Exit any mode, restore default layout-```+What still exists, and where to read about it: -Modes hide the sidebar, activity bar and status bar for a focused screen. Always-offer `mode reset` as the way back. HTTP: `POST /mode/claudecode|claudetty|tty|reset`.+- Layout: `adom-vscode sidebar`, `adom-vscode panel`, `adom-vscode terminal`,+  `adom-vscode activity-bar` (`adom-vscode <verb> --help` for each).+- Claude Code and AI threads: `adom-vscode claude --help`, `adom-vscode ai --help`, and the+  `adom-vscode-extensions` skill.+- Everything else: the `adom-vscode` skill (`~/.claude/skills/adom-vscode/SKILL.md`). -### URL auto-trigger--Append `?mode=X` to the VS Code URL to auto-enter a mode on page load, great for-onboarding links:--- `?mode=claudecode`, `?mode=claudetty`, `?mode=tty`, `?mode=tty&cmd=echo%20hello`--Examples:-- Cloud: `https://<slug>.adom.cloud/?mode=claudecode&folder=/home/adom/project`-- Hydrogen workspace (Windows/macOS), where code-server is served locally: `http://127.0.0.1:7380/?mode=claudecode&folder=/home/adom/project`--## Layout--```bash-adom-vscode sidebar show|hide|toggle       # Primary (left) sidebar-adom-vscode panel show|hide|toggle         # Bottom panel (terminal, output)-adom-vscode terminal show|hide|toggle|new  # Integrated terminal-adom-vscode activity-bar toggle            # Left icon strip (toggle only)-```--## Claude Code--```bash-adom-vscode claude new                   # New Claude Code conversation-adom-vscode claude context               # Open the live Claude Context viewer panel-adom-vscode claude context --json        # Session stats as JSON: context %, cache, tools, compactions-```--The context viewer lists every ACTIVE Claude Code session in the container with-token usage, cache hit ratio, tool frequency, largest tool results, and-compaction history. HTTP: `GET /claude/context`, `POST /claude/new`.--## Named TUI terminals as editor tabs (for AI CLIs)--```bash-adom-vscode terminal tui --name Claude --shell-path ~/.local/bin/claude --icon sparkle --color terminal.ansiYellow-adom-vscode terminal tui --name Bash --command "htop"      # command form: typed into a shell-adom-vscode terminal tui --name Kimi --command kimi --view-column beside-adom-vscode terminal tui-list                               # ids, names, running state-adom-vscode terminal tui-dispose <id>                       # or --name Claude-```--Built for Hydrogen's AI Threads panel: a real Terminal handle (unlike-executeCommand), always in the editor area, never the bottom panel, and never-touching the user's terminal.integrated.defaultLocation. Optional `--icon` (codicon name) and `--color` (theme color id, `terminal.ansi*`)-give each AI its own tab identity; feature-detect via the `terminal.tui.icon`-marker in the /health verbs roster. HTTP: `POST-/terminal/tui {name, command?, shellPath?, shellArgs?, env?, cwd?, viewColumn?, icon?, color?}` -> `{id}`.-Prefer shellPath for a CLI TUI: it runs AS the terminal process (no shell, no-echoed launch line, tab closes on exit; marker terminal.tui.shell); command-types into an interactive shell and stays echoed at the top, `GET-/terminal/tui/list`, `POST /terminal/tui/dispose {id?|name?}`.--## Paste-screenshot interceptor — REMOVED (2026-09-03)--Gone: the Claude CLI handles image paste itself, so there is no-`POST /paste-screenshot` route and nothing writes to `/tmp/shots/`. `adom-vscode-install` only *strips* the old injected block from `workbench.html` on machines-that were patched before. Do not tell a user to Ctrl+V an image into a terminal-expecting a file path; hand the CLI the path directly.--## Gotchas--- Mode switches close editors; do not enter a mode while the user has unsaved-  work without telling them.-- `activity-bar` only has a toggle in code-server (no explicit show/hide).-- `adom-vscode reload` restores extension updates and clears stale state, but-  kills every active Claude Code session; warn first.+This file stays in the page repo only because adom-vscode 1.1.120's `install` step still+fetches it from the wiki by a hard-coded name; install.sh removes the installed copy afterwards.
skills/adom-vscode-queue/SKILL.md+6−3
@@ -1,6 +1,9 @@ --- name: adom-vscode-queue-description: "The shared event queue between container processes and the Hydrogen Desktop / Hydrogen Web frontend, hosted by the adom-vscode extension. Any process pushes events (login refresh needed, long-job progress, arbitrary payloads); the frontend pulls when it wants. Survives window reloads. Trigger words: event queue, queue push, queue pull, push event to frontend, notify hd frontend, frontend event, progress dialog event, api key expiring event, login refresh event, queue status, queue peek, queue topic, adom-vscode queue, POST /queue/push, pull events."+description: >-+  The adom-vscode event queue between workspace processes and the Hydrogen frontend (ah or hc): push+  events (login refresh, job progress, payloads), the frontend pulls them; survives reloads. Use+  when asked to push an event to the frontend, queue push/pull/status, notify the Hydrogen frontend. ---  Parent skill: **adom-vscode**@@ -8,7 +11,7 @@ Parent skill: **adom-vscode** # adom-vscode-queue, container-to-frontend events  A simple durable FIFO inside the extension. Producers are anything in the-container (a watcher, a build, an AI thread); the consumer is usually the HD/HW+container (a watcher, a build, an AI thread); the consumer is usually the Hydrogen (ah/hc) frontend polling when it cares. Events survive VS Code window reloads (persisted to `~/.local/share/adom-vscode/queue.json`), are capped at 1000 items, and can carry a per-item TTL.@@ -35,7 +38,7 @@ Each item: `{id, ts, topic, type, payload, ttlSec}`. Default topic is ## Patterns  - **Login refresh**: NOTE, adom-vscode ships NO built-in key watcher; this is-  the pattern for whichever process owns key freshness (an HD daemon, a cron+  the pattern for whichever process owns key freshness (a Hydrogen daemon, a cron   job, any container process). That process decides its own cadence, notices   the session key in `/var/run/adom/api-key` is close to expiry, and pushes   `topic: login, type: refresh-needed`; the frontend pulls, shows the "needs a
skills/adom-vscode-settings/SKILL.md+6−3
@@ -1,6 +1,9 @@ --- name: adom-vscode-settings-description: "Get/set ANY VS Code setting, the color theme, fonts, and font sizes LIVE from inside the container, with no window reload, so active Claude/AI sessions survive. Uses the native VS Code API (ConfigurationTarget.Global), the fix for settings.json merges that hang or need a workbench reload. Also reports the RESOLVED font family the renderer truly shows (document.fonts.check), not just the configured stack. Trigger words: change theme, set theme, vscode theme, dark theme, set font, change font, font size, editor font, terminal font size, chat font, prose font, vscode setting, config get, config set, workbench.colorTheme, editor.fontFamily, editor.fontSize, chat.fontFamily, live settings, no reload, which font is active, resolved font, font not applying, theme without reload."+description: >-+  Get or set any VS Code setting, the color theme, fonts and font sizes LIVE (no window reload, so+  AI sessions survive), and read the font the renderer really shows. Use when asked to change theme,+  set font, font size, vscode setting, font not applying, theme without reload. ---  Parent skill: **adom-vscode**@@ -70,10 +73,10 @@ The key map (CLI flag -> settings key): HTTP: `GET /fonts`, `POST /fonts {editorFamily?, proseFamily?, proseCodeFamily?, editorSize?, terminalSize?, proseSize?, proseCodeSize?}` (any subset). -## Resolved fonts, the part HD needs+## Resolved fonts, the part Hydrogen needs  The configured stack often names fonts that are NOT installed on the rendering-side (the user's browser or the HD webview), so reading the setting alone lies.+side (the user's browser or the Hydrogen webview), so reading the setting alone lies. `font get` also returns `resolved`: the first family in each stack that the renderer can truly draw, checked with `document.fonts.check` inside the workbench (via the Adom sidebar webview). If the sidebar webview is not alive