skills/proposal-act/SKILL.md
Accept, defer, dismiss, or resolve a proposal. For accepted proposals, asks how to proceed — create a session task or note for manual implementation. Activates on messages like "accept PROP-", "dismiss PROP-", "defer PROP-", "resolve PROP-".
npx skillsauth add gtapps/claude-code-hermit proposal-actInstall 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.
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.
tools
Presence history & tracker-health report — current home/away state, reliability, recent arrival/departure transitions, and activity patterns for person/device_tracker entities. Use when the operator asks about presence history or when a presence-dependent automation (locks, alarm, vacuum, climate) misbehaves.
development
Evening house brief — end-of-day security check, device status, and energy snapshot. Runs as a daily routine at 22:30 or on demand.
tools
Browse and explain the hermit's Home Assistant automations — list by topic, filter by keyword with plain-language YAML explanations, or sort by last-fired. Read-only. Use when the operator asks "what automations do I have / what does this one do / which haven't fired."
tools
On-demand HA-voice brainstorm — reads entity inventory, automation/script listings, and operator intent to surface at most 2 capability-gap ideas, each gated by proposal-triage before becoming a PROP. Invoke when the operator asks "what automations am I missing?", "any coverage gaps?", or "brainstorm improvements". Never runs autonomously.