updatelisted
Install: claude install-skill leonhoffmann86/lhtask-plugin
You are updating the **vendored** LHTask chain in already-bootstrapped repos from the
freshly-installed plugin templates. The plugin ships the canonical `agents/` + `.mcp.json`
(those auto-update with the plugin); this command refreshes the **vendored copies** that the
headless git-hook path depends on, plus the stage scripts and hooks.
**Only refresh logic. Never touch the user's config or content:** leave `lhtask.conf`,
`TODO.md`, `DONE.md`, `AGENT_LOG.md`, `AGENTS.md`, `CLAUDE.md` and `.gitignore` alone.
## 0. Locate templates + the target repo(s)
Templates come from the plugin **as installed** — never from a development checkout:
```bash
TPL="${CLAUDE_PLUGIN_ROOT:-}/templates"
# Fallback when CLAUDE_PLUGIN_ROOT is unset (e.g. skill executed manually): resolve the
# INSTALLED plugin from the marketplace cache — most recently installed version wins.
[ -d "$TPL" ] || TPL="$(ls -dt "$HOME"/.claude/plugins/cache/*/lhtask/*/templates 2>/dev/null | head -1)"
[ -d "${TPL:-}" ] || { echo "lhtask is not installed. Run:
claude plugin marketplace add leonhoffmann86/lhtask-plugin
claude plugin install lhtask@lhtask-marketplace"; }
REG="${XDG_CONFIG_HOME:-$HOME/.config}/lhtask/registry" # one repo path per line
```
If neither resolves, **stop** with that install instruction. Do NOT search the filesystem
for a plugin source tree and do NOT accept a git checkout of the plugin repo as `$TPL` —
only the installed (versioned) copy is a valid template source (see `docs/DISTRIBUTION.m