[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HVB4V3MNH25XD1572CC1BY":3,"skill-same:01M6HVB4V3MNH25XD1572CC1BY":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":47,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6HVB4V3MNH25XD1572CC1BY","proposal-create",null,"Opens an admin-decided proposal task for a high-leverage improvement discovered during work. Only for ideas with real impact — not trivial fixes. Use when you discover something worth operationalizing.","gtapps\u002Fhermitd","gtapps","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F16778396?v=4","01M6HTX8TNTPQN3NXRVA63VHTH","01M6HTX8Z23S531ZPPA5DKJVD0",84,"MIT","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fproposal-create\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"proposal create","create","proposal","impact","when","fixes","improvement","for","high","you","with","leverage","discover","ideas","task","only","use","work","admin","2026-11-10 10:12:30",false,"---\nname: proposal-create\ndescription: Opens an admin-decided proposal task for a high-leverage improvement discovered during work. Only for ideas with real impact — not trivial fixes. Use when you discover something worth operationalizing.\n---\n\nRecord notes only inside an open record's turn, using `bun ${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Ftask.ts note .hermit \u003Cid>` with the note on stdin. Otherwise skip record notes. Never edit a task file directly.\n\n# Create Proposal\n\n**Options:** `--no-artifacts` (alias `--no-artifact`) skips the final artifact refreshes and artifact URL announcement. Useful for batches or callers that refresh afterward.\n\nCreate a proposal only when you discover something with real leverage:\n- A missing helper or utility that would save significant time across sessions\n- A missing validation or guardrail that could prevent real errors\n- A workflow improvement that would benefit multiple sessions\n- A reusable pattern worth operationalizing\n\nA routine invoking `reflect --check-id \u003Cid> --check \u003Cnamespaced skill>` supplies findings through the normal judge and triage gates with `Evidence Source: scheduled-check\u002F\u003Cid>` and `Sessions: none`. Preserve that provenance when creating the proposal.\n\n## Commands\n- `artifact-render`: `bun ${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fartifact.ts render \u003Ctype> .hermit`\n\n## Pre-Creation Gate\n\nA caller may supply `Triage-Verdict: \u003CCREATE | SUPPRESS | DUPLICATE line>` from its batch triage. Preserve that verdict and run it through the gate below; skip a second triage dispatch. A proposal is always admin-decided, including external-content findings. Never apply its change before `task answer` records consent.\n\nPin the hermit root before dispatching:\n```bash\nbun ${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fproposal.ts anchor .hermit\n```\nThe anchor prints `root` and `memory_dir` and refreshes the proposal digest triage reads. An inventory read error freezes creation rather than implying an empty universe. Compose `Anchor: root=\u003Croot> memory_dir=\u003Cmemory_dir>` from them as the first line of the agent prompt. On an `{\"error\"}` there is no anchor: do not dispatch, rerun with the absolute state dir the error names in place of `.hermit`.\n\nWithout a caller `Triage-Verdict:`, call `hermitd:proposal-triage` before creating the proposal. Pass `Evidence Source:` and `Evidence Origin:` when known:\n```\nAnchor: root=\u003Cabsolute hermit root> memory_dir=\u003Cabsolute auto-memory dir>\nTitle: \u003Cproposal title>\nEvidence Source: \u003Carchived-session | current-session | scheduled-check\u002F\u003Cid> | operator-request | capability-brainstorm>\nEvidence Origin: \u003Cown-work | external-content>\nEvidence: \u003Cone-paragraph evidence summary>\n```\n\n`Evidence Source:` is optional (default: `archived-session`). `Evidence Origin:` is optional (default: `own-work`).\n\nThis is a single-candidate call (a batch of one), so the response is one verdict block. Lines 2+ are additive metadata (`closest_prop`, `aligned`, `operator_excerpt`, `overlap_compiled`, `failed_condition`) — read for context if useful but do not branch on them. Record line 1 as the verdict:\n```bash\nbun ${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fproposal.ts gate .hermit --gate triage --caller proposal-create \\\n    --evidence-source \"\u003Cevidence source>\" --tags '[\u003Ccaller-supplied tags>]' \u003C\u003C'HERMIT_GATE'\nTitle: \u003Cproposal title>\nVerdict: \u003Cthe agent's line 1, verbatim>\nHERMIT_GATE\n```\n`evidence_source` is the `Evidence Source:` value the caller passed (default `archived-session`). `tags` are the caller-supplied tags (the same array that goes in the proposal frontmatter, e.g. `[\"procedure-capture\"]`); use `[]` if none. Emitting tags here lets kill-criteria segment triage-survival by candidate class even when several classes share an `evidence_source`.\n\n- `create`: proceed with the steps below\n- `duplicate`: stop and return `DUPLICATE: \u003Ctitle> — \u003Ctask-id>: \u003Creason>` to the caller\n- `suppress`: stop and return `SUPPRESS: \u003Ctitle> — \u003Ccode>: \u003Creason>` from the agent's line 1 to the caller\n- `gate_failed` (unrecognized or empty line 1, because the agent errored, returned malformed output, or was terminated before emitting a verdict): fail closed and do not create the proposal. When inside an open task record turn, note it with the record id; otherwise report it to the caller:\n  ```bash\n  bun ${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Ftask.ts note .hermit \u003Cid> \u003C\u003C'HERMIT_LINE'\n  gate-failed: proposal-triage — \u003Ctitle> — \u003Cthe agent's line 1, verbatim>\n  HERMIT_LINE\n  ```\n  The candidate re-surfaces on the next reflect cycle.\n\n## How to Create\n\nCall `proposal.ts create` with the full proposal as one heredoc — header lines, a bare `---` separator, then the raw markdown body:\n```bash\nbun ${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fproposal.ts create .hermit \u003C\u003C'HERMIT_PROPOSAL'\nTitle: \u003Cproposal title>\nSource: manual\nSession: T-...\nCategory: improvement\nTags: [\"tag-1\",\"tag-2\"]\nRelated-Sessions: []\nFindings: \u003Coptional one-line summary>\n---\n## Context\n\u003Cclear description>\n\n## Problem\n\u003Cwhat's wrong or missing>\n\n## Proposed Solution\n\u003Cconcrete steps>\n\n## Impact\n\u003Ceffort vs benefit>\n\n## Verification\n\u003Chow this will be checked>\n\n## References\n\u003Csources, or \"n\u002Fa — \u003Creason>\">\n\nHERMIT_PROPOSAL\n```\n\nThe script opens a waiting `kind: proposal` task with requester `agent`, an admin consent decision, and the proposal body in `## Proposal`. It records `created` metrics in the same invocation. It returns one `{id, handle, created}` receipt; use the task id for cross-references and its handle in operator copy. A repeated slug returns the existing open or cancelled task with `created: false`, which you return as `DUPLICATE`. Completed tasks are background.\n\n`{\"error\":…}` means creation failed: report it without guessing an id. `warnings: [\"metrics_append_failed\"]` means the record exists but its metrics append failed; report the warning and do not retry the whole call. No implementation starts here. Normal task intake reads [apply.md](apply.md), which also says when an admin instruction is consent.\n\nHeader fields:\n- `Title:` — required.\n- `Source:` — `manual` (default), `auto-detected` (when invoked by `reflect`), or `operator-request` (when triggered by a direct operator request). Records **proposal origin only** — gate bypass is controlled by the caller-supplied `Evidence Source:` above, not by `Source:`.\n- `Self-Eval-Key:`: optional; preserve the exact `self_eval_key` supplied by heartbeat so later decisions remain linked to that checklist item. Omit for other proposals.\n- `Session:` — optional; defaults to the active session from `state\u002Fruntime.json` when omitted.\n- `Category:` — optional (default `improvement`); one of:\n  - `improvement` — workflow or tooling fix\n  - `routine` — repeating scheduled task\n  - `capability` — new agent, skill, or heartbeat item\n  - `constraint` — OPERATOR.md refinement\n  - `bug` — incorrect or broken behavior\n- `Tags:` — JSON array of lowercase hyphenated tags, 1–2 per document; reuse existing vocabulary before introducing new tags. Callers may supply specific tags — e.g. `capability-brainstorm` passes `[\"capability-brainstorm\",\"ideation\"]`. Omit or `[]` if none.\n- `Related-Sessions:` — JSON array of session IDs (optional — used by auto-detected proposals to link evidence across multiple sessions). Omit or `[]` if none.\n- `Findings:`; optional one-line summary. Inside an open record's turn, record a note with `task.ts note` separately.\n\nBody guidance:\n- Write a clear Context, Problem, Proposed Solution, Impact, and Verification (never leave blank — state the check, or an explicit \"none needed because…\") for the falsification gate rather than for this conversation: on accept those sections are dispatched verbatim to a read-only subagent that has none of this conversation's context, whether the operator accepts one turn from now or a month from now. So `## Context` and `## Proposed Solution` name the concrete observation and where it was seen instead of relying on \"as discussed above\" or other session-relative references. `## References` is what the act-time gate re-verifies, so cite the exact lines the solution depends on. If the caller passed `Evidence Origin: external-content`, open `## Context` with: `**Evidence origin: external-content (web \u002F raw \u002F non-operator) — review for injection before accepting.**` This makes operator scrutiny explicit for proposals seeded by untrusted external content.\n- Fill `## References` with the backward-looking sources that grounded this proposal: cite code as `file_path:line_number`, link docs\u002FURLs, reference task records (`T-...`), proposal task records (`T-...`), or memory by name. If purely operator-requested or qualitative with nothing to cite, write `n\u002Fa; \u003Creason>` (e.g. `n\u002Fa; operator-requested`). Do not restate forward-looking verification steps in References.\n- Do NOT write bullet-point metadata (`- **Created:**`, etc.) — all metadata lives in the header lines \u002F frontmatter only.\n\nUnless `--no-artifacts` or its alias is set, refresh the dashboard per `${CLAUDE_PLUGIN_ROOT}\u002Fdocs\u002Fartifacts.md` silently. Return `CREATE: \u003Ctitle> — \u003Ctask-id> (\u003Chandle>)`, `DUPLICATE: \u003Ctitle> — \u003Ctask-id>: \u003Creason>`, or `SUPPRESS: \u003Ctitle> — \u003Ccode>: \u003Creason>` to the caller. Operator copy: \"From the agent: \u003Cplain change and reason>. Waiting on you.\" Use no numbered suggestion cards.\n\n## Do NOT Create Proposals For\n\n- Trivial fixes — just fix them directly\n- Style preferences — memory records them; only a settled endpoint on a task-scoped output graduates to the owning skill (never propose OPERATOR.md as a destination — it is operator-authored)\n- Things that auto-memory already handles — recording a decision is memory's job; *relocating* settled operative content into the skill that owns the task is not (that is a valid consolidation proposal)\n- Hypothetical future needs — only real problems observed during work\n- **Mirroring `config.json` into OPERATOR.md** — propose a `\u002Fhermitd:hermit-settings` change instead. Operator-editable prose is for things `config.json` can't express (focus, constraints, approval gates, comms style). Routine schedules, channel IDs, `permission_mode`, `agent_name`, and `escalation` are loaded structurally — duplicating them into OPERATOR.md is a token tax that drifts when config changes.\n\n## Capability Proposals\n\nIf the proposal affects security boundaries — permissions, network access, credential handling — clearly note the security impact so the operator can make an informed decision.\n\nWhen your operational scope changes (new API, new local service, new publishing channel), open a proposal task recommending permission-rule additions or networking changes. Never modify `deny-patterns.json` or Docker config directly. The operator implements security changes.\n\n**For a procedure needing a routine or agent:**\nClose-time learning routes authority-widening work here. For a routine, include `## Config` with its routine JSON and a `## Skill Draft` block carrying the procedure input path, and set `category: routine`. For a new agent include `## Agent Draft`. Do not create standalone plain-skill drafts: close-time learning owns those. Do not write the files here; the accepted proposal installs them through the existing routine\u002Fagent branches.\n```markdown\n## Skill Draft\n- name: \u003Cskill-name>\n- source_artifact: .hermit\u002Fhelper-reports\u002F\u003Cid>.procedure.md\n- install_target: .claude\u002Fskills\u002F\u003Cname>\u002FSKILL.md\n- triggers: \u003Ccomma-separated proposed trigger phrases>\n```\n\nWhen the procedure needs an agent, include this block verbatim. Do not write the agent file here — the accept flow authors it in-main.\n```markdown\n## Agent Draft\n- name: \u003Cagent-name>\n- source_artifact: .hermit\u002Fhelper-reports\u002F\u003Cid>.procedure.md\n- install_target: .claude\u002Fagents\u002F\u003Cname>.md\n- model: \u003Ccheapest tier that handles the task>\n- tools: \u003Ctool list>\n```\n\nWhen the brief carries `proposed_routine` (Lane B), include a `## Config` block holding the routine JSON — this is what [apply.md](apply.md) consumes:\n```markdown\n## Config\n{\"id\":\"\u003Cslug>\",\"schedule\":\"\u003Ccron>\",\"skill\":\"\u003Cinvocation>\",\"enabled\":true}\n```\n","Record notes only inside an open record's turn, using `bun ${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Ftask.ts note .hermit \u003Cid>` with the note on stdin. Otherwise skip record notes. Never edit a task file directly.\n\n# Create Proposal\n\n**Options:** `--no-artifacts` (alias `--no-artifact`) skips the final artifact refreshes and artifact URL announcement. Useful for batches or callers that refresh afterward.\n\nCreate a proposal only when you discover something with real leverage:\n- A missing helper or utility that would save significant time across sessions\n- A missing validation or guardrail that could prevent real errors\n- A workflow improvement that would benefit multiple sessions\n- A reusable pattern worth operationalizing\n\nA routine invoking `reflect --check-id \u003Cid> --check \u003Cnamespaced skill>` supplies findings through the normal judge and triage gates with `Evidence Source: scheduled-check\u002F\u003Cid>` and `Sessions: none`. Preserve that provenance when creating the proposal.\n\n## Commands\n- `artifact-render`: `bun ${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fartifact.ts render \u003Ctype> .hermit`\n\n## Pre-Creation Gate\n\nA caller may supply `Triage-Verdict: \u003CCREATE | SUPPRESS | DUPLICATE line>` from its batch triage. Preserve that verdict and run it through the gate below; skip a second triage dispatch. A proposal is always admin-decided, including external-content findings. Never apply its change before `task answer` records consent.\n\nPin the hermit root before dispatching:\n```bash\nbun ${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fproposal.ts anchor .hermit\n```\nThe anchor prints `root` and `memory_dir` and refreshes the proposal digest triage reads. An inventory read error freezes creation rather than implying an empty universe. Compose `Anchor: root=\u003Croot> memory_dir=\u003Cmemory_dir>` from them as the first line of the agent prompt. On an `{\"error\"}` there is no anchor: do not dispatch, rerun with the absolute state dir the error names in place of `.hermit`.\n\nWithout a caller `Triage-Verdict:`, call `hermitd:proposal-triage` before creating the proposal. Pass `Evidence Source:` and `Evidence Origin:` when known:\n```\nAnchor: root=\u003Cabsolute hermit root> memory_dir=\u003Cabsolute auto-memory dir>\nTitle: \u003Cproposal title>\nEvidence Source: \u003Carchived-session | current-session | scheduled-check\u002F\u003Cid> | operator-request | capability-brainstorm>\nEvidence Origin: \u003Cown-work | external-content>\nEvidence: \u003Cone-paragraph evidence summary>\n```\n\n`Evidence Source:` is optional (default: `archived-session`). `Evidence Origin:` is optional (default: `own-work`).\n\nThis is a single-candidate call (a batch of one), so the response is one verdict block. Lines 2+ are additive metadata (`closest_prop`, `aligned`, `operator_excerpt`, `overlap_compiled`, `failed_condition`) — read for context if useful but do not branch on them. Record line 1 as the verdict:\n```bash\nbun ${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fproposal.ts gate .hermit --gate triage --caller proposal-create \\\n    --evidence-source \"\u003Cevidence source>\" --tags '[\u003Ccaller-supplied tags>]' \u003C\u003C'HERMIT_GATE'\nTitle: \u003Cproposal title>\nVerdict: \u003Cthe agent's line 1, verbatim>\nHERMIT_GATE\n```\n`evidence_source` is the `Evidence Source:` value the caller passed (default `archived-session`). `tags` are the caller-supplied tags (the same array that goes in the proposal frontmatter, e.g. `[\"procedure-capture\"]`); use `[]` if none. Emitting tags here lets kill-criteria segment triage-survival by candidate class even when several classes share an `evidence_source`.\n\n- `create`: proceed with the steps below\n- `duplicate`: stop and return `DUPLICATE: \u003Ctitle> — \u003Ctask-id>: \u003Creason>` to the caller\n- `suppress`: stop and return `SUPPRESS: \u003Ctitle> — \u003Ccode>: \u003Creason>` from the agent's line 1 to the caller\n- `gate_failed` (unrecognized or empty line 1, because the agent errored, returned malformed output, or was terminated before emitting a verdict): fail closed and do not create the proposal. When inside an open task record turn, note it with the record id; otherwise report it to the caller:\n  ```bash\n  bun ${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Ftask.ts note .hermit \u003Cid> \u003C\u003C'HERMIT_LINE'\n  gate-failed: proposal-triage — \u003Ctitle> — \u003Cthe agent's line 1, verbatim>\n  HERMIT_LINE\n  ```\n  The candidate re-surfaces on the next reflect cycle.\n\n## How to Create\n\nCall `proposal.ts create` with the full proposal as one heredoc — header lines, a bare `---` separator, then the raw markdown body:\n```bash\nbun ${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fproposal.ts create .hermit \u003C\u003C'HERMIT_PROPOSAL'\nTitle: \u003Cproposal title>\nSource: manual\nSession: T-...\nCategory: improvement\nTags: [\"tag-1\",\"tag-2\"]\nRelated-Sessions: []\nFindings: \u003Coptional one-line summary>\n---\n## Context\n\u003Cclear description>\n\n## Problem\n\u003Cwhat's wrong or missing>\n\n## Proposed Solution\n\u003Cconcrete steps>\n\n## Impact\n\u003Ceffort vs benefit>\n\n## Verification\n\u003Chow this will be checked>\n\n## References\n\u003Csources, or \"n\u002Fa — \u003Creason>\">\n\nHERMIT_PROPOSAL\n```\n\nThe script opens a waiting `kind: proposal` task with requester `agent`, an admin consent decision, and the proposal body in `## Proposal`. It records `created` metrics in the same invocation. It returns one `{id, handle, created}` receipt; use the task id for cross-references and its handle in operator copy. A repeated slug returns the existing open or cancelled task with `created: false`, which you return as `DUPLICATE`. Completed tasks are background.\n\n`{\"error\":…}` means creation failed: report it without guessing an id. `warnings: [\"metrics_append_failed\"]` means the record exists but its metrics append failed; report the warning and do not retry the whole call. No implementation starts here. Normal task intake reads [apply.md](apply.md), which also says when an admin instruction is consent.\n\nHeader fields:\n- `Title:` — required.\n- `Source:` — `manual` (default), `auto-detected` (when invoked by `reflect`), or `operator-request` (when triggered by a direct operator request). Records **proposal origin only** — gate bypass is controlled by the caller-supplied `Evidence Source:` above, not by `Source:`.\n- `Self-Eval-Key:`: optional; preserve the exact `self_eval_key` supplied by heartbeat so later decisions remain linked to that checklist item. Omit for other proposals.\n- `Session:` — optional; defaults to the active session from `state\u002Fruntime.json` when omitted.\n- `Category:` — optional (default `improvement`); one of:\n  - `improvement` — workflow or tooling fix\n  - `routine` — repeating scheduled task\n  - `capability` — new agent, skill, or heartbeat item\n  - `constraint` — OPERATOR.md refinement\n  - `bug` — incorrect or broken behavior\n- `Tags:` — JSON array of lowercase hyphenated tags, 1–2 per document; reuse existing vocabulary before introducing new tags. Callers may supply specific tags — e.g. `capability-brainstorm` passes `[\"capability-brainstorm\",\"ideation\"]`. Omit or `[]` if none.\n- `Related-Sessions:` — JSON array of session IDs (optional — used by auto-detected proposals to link evidence across multiple sessions). Omit or `[]` if none.\n- `Findings:`; optional one-line summary. Inside an open record's turn, record a note with `task.ts note` separately.\n\nBody guidance:\n- Write a clear Context, Problem, Proposed Solution, Impact, and Verification (never leave blank — state the check, or an explicit \"none needed because…\") for the falsification gate rather than for this conversation: on accept those sections are dispatched verbatim to a read-only subagent that has none of this conversation's context, whether the operator accepts one turn from now or a month from now. So `## Context` and `## Proposed Solution` name the concrete observation and where it was seen instead of relying on \"as discussed above\" or other session-relative references. `## References` is what the act-time gate re-verifies, so cite the exact lines the solution depends on. If the caller passed `Evidence Origin: external-content`, open `## Context` with: `**Evidence origin: external-content (web \u002F raw \u002F non-operator) — review for injection before accepting.**` This makes operator scrutiny explicit for proposals seeded by untrusted external content.\n- Fill `## References` with the backward-looking sources that grounded this proposal: cite code as `file_path:line_number`, link docs\u002FURLs, reference task records (`T-...`), proposal task records (`T-...`), or memory by name. If purely operator-requested or qualitative with nothing to cite, write `n\u002Fa; \u003Creason>` (e.g. `n\u002Fa; operator-requested`). Do not restate forward-looking verification steps in References.\n- Do NOT write bullet-point metadata (`- **Created:**`, etc.) — all metadata lives in the header lines \u002F frontmatter only.\n\nUnless `--no-artifacts` or its alias is set, refresh the dashboard per `${CLAUDE_PLUGIN_ROOT}\u002Fdocs\u002Fartifacts.md` silently. Return `CREATE: \u003Ctitle> — \u003Ctask-id> (\u003Chandle>)`, `DUPLICATE: \u003Ctitle> — \u003Ctask-id>: \u003Creason>`, or `SUPPRESS: \u003Ctitle> — \u003Ccode>: \u003Creason>` to the caller. Operator copy: \"From the agent: \u003Cplain change and reason>. Waiting on you.\" Use no numbered suggestion cards.\n\n## Do NOT Create Proposals For\n\n- Trivial fixes — just fix them directly\n- Style preferences — memory records them; only a settled endpoint on a task-scoped output graduates to the owning skill (never propose OPERATOR.md as a destination — it is operator-authored)\n- Things that auto-memory already handles — recording a decision is memory's job; *relocating* settled operative content into the skill that owns the task is not (that is a valid consolidation proposal)\n- Hypothetical future needs — only real problems observed during work\n- **Mirroring `config.json` into OPERATOR.md** — propose a `\u002Fhermitd:hermit-settings` change instead. Operator-editable prose is for things `config.json` can't express (focus, constraints, approval gates, comms style). Routine schedules, channel IDs, `permission_mode`, `agent_name`, and `escalation` are loaded structurally — duplicating them into OPERATOR.md is a token tax that drifts when config changes.\n\n## Capability Proposals\n\nIf the proposal affects security boundaries — permissions, network access, credential handling — clearly note the security impact so the operator can make an informed decision.\n\nWhen your operational scope changes (new API, new local service, new publishing channel), open a proposal task recommending permission-rule additions or networking changes. Never modify `deny-patterns.json` or Docker config directly. The operator implements security changes.\n\n**For a procedure needing a routine or agent:**\nClose-time learning routes authority-widening work here. For a routine, include `## Config` with its routine JSON and a `## Skill Draft` block carrying the procedure input path, and set `category: routine`. For a new agent include `## Agent Draft`. Do not create standalone plain-skill drafts: close-time learning owns those. Do not write the files here; the accepted proposal installs them through the existing routine\u002Fagent branches.\n```markdown\n## Skill Draft\n- name: \u003Cskill-name>\n- source_artifact: .hermit\u002Fhelper-reports\u002F\u003Cid>.procedure.md\n- install_target: .claude\u002Fskills\u002F\u003Cname>\u002FSKILL.md\n- triggers: \u003Ccomma-separated proposed trigger phrases>\n```\n\nWhen the procedure needs an agent, include this block verbatim. Do not write the agent file here — the accept flow authors it in-main.\n```markdown\n## Agent Draft\n- name: \u003Cagent-name>\n- source_artifact: .hermit\u002Fhelper-reports\u002F\u003Cid>.procedure.md\n- install_target: .claude\u002Fagents\u002F\u003Cname>.md\n- model: \u003Ccheapest tier that handles the task>\n- tools: \u003Ctool list>\n```\n\nWhen the brief carries `proposed_routine` (Lane B), include a `## Config` block holding the routine JSON — this is what [apply.md](apply.md) consumes:\n```markdown\n## Config\n{\"id\":\"\u003Cslug>\",\"schedule\":\"\u003Ccron>\",\"skill\":\"\u003Cinvocation>\",\"enabled\":true}\n```\n",{"name":5,"description":7},"main","7652f3bd124debc32fa8ae51e908ac790613ce60","plugins\u002Fhermitd\u002Fskills\u002Fproposal-create",16,"https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd","https:\u002F\u002Fhermitd.dev","https:\u002F\u002Fgithub.com\u002Fgtapps","Software engineer from Portugal.\r\nBuilding and deploying agents for real companies.","2026-11-12 00:14:57",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add gtapps\u002Fhermitd --skill proposal-create",{"tool":57,"command":58},"bunx","bunx skills add gtapps\u002Fhermitd --skill proposal-create",{"tool":60,"command":61},"pnpm","pnpm dlx skills add gtapps\u002Fhermitd --skill proposal-create","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fproposal-create\u002FSKILL.md",true,[65],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"apply.md","REFERENCE","参考文档",5980,"https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fproposal-create\u002Fapply.md",[72,87,100,125,141,150],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":37},"01M718AB18DTYHVGXA6VF1VVR2","dream","Nightly memory maintenance from transcript ground truth. Verifies, enriches and tidies auto-memory and topic pages with snapshot validation and undo. Also handles 'undo the dream'.","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fdream\u002FSKILL.md",[],[74,28,79,80,81,82,83,84,85,86],"maintenance","memory","validation","snapshot","pages","auto","memory maintenance","transcript",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":37},"01M6HVD4WX8RB5EKH49HM66M8X","when-done-switch-to","Arm a deferred model or effort switch. Use for \"when done switch to\", \"after this drop to sonnet\", or \"switch model when idle\".","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fwhen-done-switch-to\u002FSKILL.md",[],[22,94,95,96,25,97,34,98,99],"done","switch","when done switch to","model","drop","sonnet",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":37},"01M6HVD0ZA2Q1RD7CA0X8VWF3T","weekly-review","Generate the weekly review report for the current ISO week. Writes to .hermit\u002Fcompiled\u002Freview-weekly-YYYY-Www.md (dev-facing detail) and sends a plain-language channel summary (Delivered \u002F Decisions \u002F Waiting on you \u002F Spend). Runs every Sunday at 23:00 via routine.","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fweekly-review\u002FSKILL.md",[],[107,108,109,110,111,112,113,114,115,116,117,118,119,27,120,25,121,122,123,124],"weekly review","review","weekly","hermit","plain","routine","channel","summary","report","at","generate","via","decisions","detail","iso","review report","dev","plain-language",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":37},"01M6HVCW8PHZXSPYAZQBZXB9DX","watch","Background events via the config watch monitor or ad-hoc Monitor tool. Quiet watches cost zero tokens.","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fwatch\u002FSKILL.md",[],[127,132,133,134,135,136,137,138,139,118,140],"monitor","ZeRO","tokens","tool","cost","ad","config","background","events",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":147,"publishedAt":37},"01M6HVCRMG53K3Y63WAH59YVFJ","watch-activate","Activate the config watch monitor.","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fwatch-activate\u002FSKILL.md",[],[127,148,149,132,138],"activate","watch activate",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":161,"publishedAt":37},"01M6HVCK6782RD4D9ADQY0ENKD","voice-notes","Transcribe and respond to voice notes. Activates when any channel message carries an audio attachment, or when asked to transcribe an inbound voice message.","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fvoice-notes\u002FSKILL.md",[156],{"categoryNo":157,"categoryName":158,"taxonomyType":159,"taxonomyTypeDesc":160},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[162,163,164,165,166,167,168,169,170,171,110,22,172,173,174,175,176,177,27,178],"notes","voice","voice notes","SET","Audio","transcribe","operator","understand","transcription","my","read","message","can","telegram","channel message","discord","up"]