From claude-code-hermit
Accepts, defers, dismisses, or resolves proposals in .claude-code-hermit. Updates YAML status and timestamps, tracks metrics via Node scripts, handles routine configs, prompts for session task on accept.
npx claudepluginhub gtapps/claude-code-hermit --plugin claude-code-homeassistant-hermitThis skill uses the workspace's default tool permissions.
Take action on a proposal: accept, defer, dismiss, or resolve.
Creates structured proposals for high-leverage workflow improvements in Claude Code sessions. Use only for repeatable patterns with meaningful consequences and operator-actionable fixes, after triage gate.
Manages Chorus proposals: create containers with document/task drafts, dependency DAGs, validate, and submit for admin review. For AI-driven project planning.
Intakes PR review feedback, code comments, or issues for structured processing before action. Verifies suggestions against codebase in default PR Review Mode; triages issues into ready-for-agent states in Issue Triage Mode.
Share bugs, ideas, or general feedback.
Take action on a proposal: accept, defer, dismiss, or resolve.
/claude-code-hermit:proposal-act accept PROP-019
/claude-code-hermit:proposal-act defer PROP-015
/claude-code-hermit:proposal-act dismiss PROP-012
/claude-code-hermit:proposal-act resolve PROP-008
If no action or ID is provided, ask the operator which proposal and action.
All timestamps in frontmatter and Operator Decision text use ISO 8601 with timezone offset (e.g., 2026-04-06T14:30:00+01:00). Use the timezone from config.json if set, otherwise UTC.
When the operator accepts a proposal:
.claude-code-hermit/proposals/PROP-NNN.mdstatus to accepted, add accepted_date as timestamp. Do NOT set resolved_date — resolution happens when reflect confirms the pattern is gone. If the file uses old bullet-point metadata (- **Status:**), update that instead.
2b. First-response tracking: Check if the proposal's responded field is already true. If false: set responded: true in frontmatter, then append a responded event:
node ${CLAUDE_PLUGIN_ROOT}/scripts/append-metrics.js .claude-code-hermit/state/proposal-metrics.jsonl '{"ts":"<now ISO>","type":"responded","proposal_id":"PROP-NNN","action":"accept"}'
Then call node ${CLAUDE_PLUGIN_ROOT}/scripts/generate-summary.js .claude-code-hermit/state/. If responded is already true, skip the append (prevents double-counting).Accepted on 2026-04-06T14:30:00+01:00.
3a. Session tracking: Read state/runtime.json. If session_id is non-null, set accepted_in_session to that session ID in the proposal's YAML frontmatter. If no session is active (session_id is null), leave accepted_in_session: null.
3b. Routine proposals. If the proposal metadata contains Type: routine and a ## Config section with a JSON block:
- Parse the JSON block. Validate: must have id, schedule, skill, enabled fields.
- Check for duplicate id in existing config.json routines array — if found, update the existing entry instead of appending.
- If no duplicate found, append the routine entry to config.json routines array.
- Respond: "Routine '{id}' added to config. Run /claude-code-hermit:hermit-routines load to register it immediately."
- Notify the operator.
- Skip step 4 — no further implementation needed.
"Create a session task" → Write .claude-code-hermit/sessions/NEXT-TASK.md:
# Next Task (from PROP-NNN)
## Task
[One-line task derived from the proposal's Proposed Solution]
## Context
[Summary of the pattern/problem from the proposal, including Related Sessions]
## Suggested Plan
1. [Step derived from Proposed Solution]
2. [Step derived from Proposed Solution]
3. Verify the fix resolves the pattern
Confirm: "Task prepared. The next /session-start will offer this as the default task."
"I'll handle it manually" → Just mark accepted. Respond: "Marked as accepted. No further action taken."
4b. Skill creation proposals. If the accepted proposal contains a ## Skill Improvement section OR the proposal title/body indicates a new skill should be created:
- Check if /skill-creator is available (plugin installed)
- If available AND operator chose "Create a session task":
- Append to the NEXT-TASK.md suggested plan: "Use /skill-creator to build and validate the skill. Run /skill-creator eval after creation to verify quality."
- Note in the task context: "This proposal was flagged for skill-creator — use it for structured iteration instead of manual SKILL.md edits."
- If /skill-creator is not available:
- Proceed normally (manual implementation or direct SKILL.md edits)
- Note: "skill-creator not installed — skill changes will be applied directly."
Note: There is no "Update OPERATOR.md" path. OPERATOR.md is operator-owned — the agent reads it but does not modify it. If the operator wants to update OPERATOR.md based on a proposal, they do it themselves.
status to deferred, add deferred_date as timestamp. Do NOT set resolved_date — deferral is not a terminal state. If the file uses old bullet-point metadata (- **Status:**), update that instead.
2b. First-response tracking: Same as accept flow — check responded field, set to true if false, append responded event with "action":"defer", call generate-summary.js. Skip if already true.Deferred on 2026-04-06T14:30:00+01:00. Reason: [operator's note]
Deferred proposals still appear in /proposal-list but are sorted below open proposals.
status to dismissed, add dismissed_date and resolved_date as timestamps. If the file uses old bullet-point metadata (- **Status:**), update that instead.
2b. First-response tracking: Same as accept flow — check responded field, set to true if false, append responded event with "action":"dismiss", call generate-summary.js. Skip if already true.Dismissed on 2026-04-06T14:30:00+01:00. Reason: [operator's reason]
Dismissed proposals are hidden from the default /proposal-list view. Use "show all" with /proposal-list to see them.
Used when reflect has surfaced a sparse-cadence proposal as a resolution candidate (pattern absent from recent sessions but cadence too infrequent to auto-resolve). Also available directly: /claude-code-hermit:proposal-act resolve PROP-NNN.
status to resolved, resolved_date to current timestamp. Do NOT set dismissed_date. If the file uses old bullet-point metadata (- **Status:**), update that instead.resolved event to proposal-metrics.jsonl:
node ${CLAUDE_PLUGIN_ROOT}/scripts/append-metrics.js .claude-code-hermit/state/proposal-metrics.jsonl '{"ts":"<now ISO>","type":"resolved","proposal_id":"PROP-NNN"}'
Resolved on 2026-04-06T14:30:00+01:00. Pattern confirmed absent.
No first-response tracking on resolve — the proposal was already accepted and that event was already logged.