Summary
In v5.6.1 (and current HEAD, e12376c), the Settings/Agents Hub status checks look for skills and hooks under ~/agents/ (no dot), but gxserver agent-skills install writes them to ~/.agents/ (with dot). Since nothing in the codebase ever creates ~/agents/, every skill / hook / Desktop Control Runtime status permanently shows Not installed even though installation succeeds — clicking Install works, writes the files, and the badge never changes. Cua Driver + skill installs also re-run on every attempt because of this.
Where
Checker (no dot) — native/sidebar/native-sidebar.tsx:
- L22441:
const home = os.homedir();
- L22449–22460:
path.join(home, "agents", "skills", "ghostex-…", "SKILL.md") for all six bundled skills
- L39687: agents-hub
root: path.join(home, "agents", "skills")
- L39839:
const hooksRoot = path.join(home, "agents", "hooks");
Installer (with dot) — gxserver-rs/src/agent_skills.rs:
- L180 / L201:
paths.home_dir.join(".agents").join("skills")
Repro (macOS, Ghostex 5.6.1 from the homebrew cask)
- Fresh machine state (no
~/agents or ~/.agents).
- Settings → install any bundled skill or Desktop Control.
- Files appear in
~/.agents/skills/<skill>/SKILL.md (plus per-agent symlinks, e.g. ~/.claude/skills/).
- Status still reports Not installed;
desktopControlReady stays false because computerUseSkillInstalled reads the non-existent ~/agents/… path.
Workaround
ln -s ~/.agents ~/agents — after which all statuses report Installed using the app's own detection logic.
Happy to provide more environment details if useful. Diagnosed with Claude Code by tracing the shipped native-sidebar.js status script against the repo source.
Summary
In v5.6.1 (and current HEAD,
e12376c), the Settings/Agents Hub status checks look for skills and hooks under~/agents/(no dot), butgxserver agent-skills installwrites them to~/.agents/(with dot). Since nothing in the codebase ever creates~/agents/, every skill / hook / Desktop Control Runtime status permanently shows Not installed even though installation succeeds — clicking Install works, writes the files, and the badge never changes. Cua Driver + skill installs also re-run on every attempt because of this.Where
Checker (no dot) —
native/sidebar/native-sidebar.tsx:const home = os.homedir();path.join(home, "agents", "skills", "ghostex-…", "SKILL.md")for all six bundled skillsroot: path.join(home, "agents", "skills")const hooksRoot = path.join(home, "agents", "hooks");Installer (with dot) —
gxserver-rs/src/agent_skills.rs:paths.home_dir.join(".agents").join("skills")Repro (macOS, Ghostex 5.6.1 from the homebrew cask)
~/agentsor~/.agents).~/.agents/skills/<skill>/SKILL.md(plus per-agent symlinks, e.g.~/.claude/skills/).desktopControlReadystays false becausecomputerUseSkillInstalledreads the non-existent~/agents/…path.Workaround
ln -s ~/.agents ~/agents— after which all statuses report Installed using the app's own detection logic.Happy to provide more environment details if useful. Diagnosed with Claude Code by tracing the shipped
native-sidebar.jsstatus script against the repo source.