skills/hermit-evolve/SKILL.md
Evolves hermit configuration and templates after a plugin update. Detects version gaps, presents new features, walks through new settings. Run after updating the plugin.
npx skillsauth add gtapps/claude-code-hermit hermit-evolveInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Upgrade the project's hermit configuration after a plugin update.
.claude-code-hermit/config.json${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json to get the current plugin version_hermit_versions from config (default to {"claude-code-hermit": "0.0.0"} if the field is missing — this means the project was initialized before version tracking existed)config_version vs plugin_versionIf versions match: report "You're up to date (vX.Y.Z). Nothing to upgrade." and stop.
If config.json doesn't exist: report "No config found. Run /claude-code-hermit:hatch first." and stop.
${CLAUDE_PLUGIN_ROOT}/CHANGELOG.mdFor each CHANGELOG.md version entry between config_version (exclusive) and plugin_version (inclusive), processed in oldest-first order:
### Upgrade Instructions section within that version's entryThis is the same pattern used for hermit plugin upgrades in step 7. The CHANGELOG.md ### Upgrade Instructions sections are the single source of truth for migrations — do not skip or merely display them.
${CLAUDE_PLUGIN_ROOT}/state-templates/config.json.template for the current schemaFor each new key, check the table below. If the key is interactive, ask the operator. If not, add it silently with the default value. Batch interactive questions into a single numbered list.
Interactive keys (ask operator if missing):
agent_name (0.0.1), language (0.0.1, auto-detect from $LANG), timezone (0.0.1, auto-detect), escalation (0.0.1), idle_behavior (0.0.9)sign_off (0.0.1) — only if agent_name is setremote (0.0.1): default trueSilent keys (add with default if missing):
always_on (0.0.1): false | scope (0.3.15): "local" | auto_session (0.0.1): truemodel (0.0.1): "sonnet" | permission_mode (0.0.1): "acceptEdits" | ask_budget (0.0.1): falsetmux_session_name (0.0.1): "hermit-{project_name}" | chrome (0.0.1): falsechannels (0.0.1): {} | monitors (0.3.14): []heartbeat.waiting_timeout (0.3.0): null | heartbeat.stale_threshold (0.0.9): "2h"idle_budget (0.0.9): "$0.50" | routines (0.0.9): []scheduled_checks (0.3.1): []env (0.0.7): {"AGENT_HOOK_PROFILE":"standard","COMPACT_THRESHOLD":"50","CLAUDE_AUTOCOMPACT_PCT_OVERRIDE":"50","MAX_THINKING_TOKENS":"10000"}docker (0.0.7): {"packages":[],"recommended_plugins":[]}compact (0.0.7): {"monitoring_threshold":30,"monitoring_keep":20,"summary_threshold":30,"summary_keep":15}knowledge (0.4.0): {"raw_retention_days":14,"compiled_budget_chars":1000,"working_set_warn":20}Prompts — use the exact same AskUserQuestion structures as hatch Phase 2 (see skills/hatch/SKILL.md):
agent_name: AskUserQuestion with options (Atlas / Hermit / Skip) + Other for custom inputlanguage + timezone: single batched AskUserQuestion, auto-detected value as first optionescalation: AskUserQuestion with options (Balanced / Conservative / Autonomous)sign_off: AskUserQuestion with options ({name} out. / -- {initial}. / Skip) — only if agent_name was setidle_behavior: AskUserQuestion with options (Discover / Wait)Tell the operator: "New settings available in this version:" then present only the questions for keys that are actually missing from their config. If no interactive keys are missing, skip this step.
If CLAUDE_CODE_TASK_LIST_ID is not already set in .claude/settings.local.json:
hermit-{project_basename} (lowercase, alphanumeric + hyphens).claude/settings.local.json, merge into env block, write backAlso: if an active SHELL.md has a ## Plan section (legacy plan table), warn the operator: "Close active sessions before upgrading, or the old plan table will be orphaned." Strip the ## Plan section from the active SHELL.md if operator confirms.
${CLAUDE_PLUGIN_ROOT}/state-templates/ against the corresponding file in .claude-code-hermit/templates/## Plan section — plan tracking is now handled by native Claude Code TasksNever touch: sessions, proposals, OPERATOR.md, HEARTBEAT.md, IDLE-TASKS.md (operator-editable), or config.json (handled separately).
Only update files in templates/:
SHELL.md.templateSESSION-REPORT.md.templatePROPOSAL.md.templateIf .claude-code-hermit/cortex-manifest.json does not exist:
${CLAUDE_PLUGIN_ROOT}/state-templates/cortex-manifest.json.template to .claude-code-hermit/cortex-manifest.json/obsidian-setup or edit directly."${CLAUDE_PLUGIN_ROOT}/state-templates/bin/ into .claude-code-hermit/bin/.claude-code-hermit/bin/ are executableCLAUDE.md<!-- claude-code-hermit: Session Discipline --> marker${CLAUDE_PLUGIN_ROOT}/state-templates/CLAUDE-APPEND.md for the current version--- separator) with the template${CLAUDE_PLUGIN_ROOT}/../*/.claude-plugin/plugin.json for names containing "hermit" that aren't "claude-code-hermit"plugin.json version_hermit_versions[hermit_name] (default "0.0.0" if missing)CHANGELOG.md if it exists and extract version entries between the config version (exclusive) and the current version (inclusive)### Upgrade Instructions section. If found, execute every instruction in that section — do not skip or merely display them.state-templates/CLAUDE-APPEND.md. If it doesn't exist, skip.<!-- hermit-name: Section Title -->)_hermit_versions[hermit_name] to the current hermit versionSame logic as init step 8: check .claude/settings.json for the plugin's required permissions (git diff/status/log, per-script node entries, the SessionStart bash -c hook, and Edit/Write on .claude-code-hermit/**). The required node entries are: cost-tracker.js, suggest-compact.js, run-with-profile.js, evaluate-session.js, append-metrics.js, generate-summary.js. If any are missing, show the operator which ones and ask for confirmation before adding. Only add missing entries — never remove existing ones. If all are already present, skip silently. Also remove stale permissions from previous versions if found:
Bash(python3:*), Bash(node:*) — replaced by scoped node entriesEdit(.claude/.claude-code-hermit/**), Write(.claude/.claude-code-hermit/**) — replaced by .claude-code-hermit/** (v0.0.6 path change)_hermit_versions["claude-code-hermit"] to the current plugin version_hermit_versions — never add new keys here.claude-code-hermit/config.jsonPrint a summary:
Upgrade complete: vOLD -> vNEW
New settings configured:
Agent name: Atlas
Language: pt
Timezone: Europe/Lisbon
Escalation: balanced
Sign-off: Atlas out.
Templates updated:
SHELL.md.template (refreshed)
SESSION-REPORT.md.template (unchanged)
PROPOSAL.md.template (unchanged)
CLAUDE.md:
Session discipline block updated
Hermits:
example-hermit: v0.2.0 -> v0.3.0 (updated)
Run /claude-code-hermit:hermit-settings to adjust any settings.
Adjust the summary based on what actually changed. Omit sections where nothing changed.
data-ai
Initializes or resumes a work session. Loads context from OPERATOR.md and SHELL.md, orients the agent, and establishes what to work on. Use at the beginning of every work session.
tools
Evolves hermit configuration and templates after a plugin update. Detects version gaps, presents new features, walks through new settings. Run after updating the plugin.
testing
Initializes the autonomous agent in the current project. Creates the state directory, templates, OPERATOR.md, and config.json. Appends session discipline to CLAUDE.md. Detects installed hermits. Run once per project, like git init.
tools
Generates Docker scaffolding and walks the operator through the full deployment — token setup, build, start, MCP plugin configuration, workspace trust, and verification. Offers to back up and overwrite existing Docker files. Run after /hatch.