From claude-code-hermit
Evolves Hermit configuration after claude-code-hermit plugin updates: detects version gaps, runs changelog migrations, prompts for new settings.
npx claudepluginhub gtapps/claude-code-hermit --plugin claude-code-homeassistant-hermitThis skill uses the workspace's default tool permissions.
Upgrade the project's hermit configuration after a plugin update.
Smart update for SDLC wizard — shows changelog, compares files, lets you selectively adopt changes while preserving customizations.
Audits Claude Code configurations (CLAUDE.md, skills, settings, agents) against latest features, best practices, and changelog. Triggers on 'evolve', 'audit config', 'upgrade' requests.
View and modify Hermit agent configuration for projects including model, channels, budget prompts, morning brief, heartbeat, routines, idle behavior, compaction thresholds, Docker packages, and unattended mode.
Share bugs, ideas, or general feedback.
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.