From 267f566503d507a44d73404a32d0e68ff16d3d94 Mon Sep 17 00:00:00 2001 From: kochetkov-ma Date: Mon, 10 Aug 2026 18:21:03 +0100 Subject: [PATCH] fix(skills): generated skills stay model-invocable --- .claude-plugin/marketplace.json | 10 +++--- .../skills/superreview-setup/SKILL.md | 3 ++ .../skills/teams-setup/scripts/trace-ops.sh | 2 +- .../assets/think-short-prompt-counter.mjs | 2 +- .../assets/think-short-prompt.md | 2 +- .../assets/think-short-session.mjs | 2 +- RELEASE-NOTES.md | 32 +++++++++++++++++++ brewcode/.claude-plugin/plugin.json | 2 +- .../.codex/skills/superreview-setup/SKILL.md | 3 ++ .../skills/teams-setup/scripts/trace-ops.sh | 2 +- brewcode/README.md | 2 +- brewcode/agents/agent-creator.md | 2 +- brewcode/agents/bash-expert.md | 2 +- brewcode/agents/bc-rules-organizer.md | 2 +- brewcode/agents/hook-creator.md | 2 +- brewcode/agents/skill-creator.md | 2 +- brewcode/docs/commands.md | 2 +- brewcode/docs/file-tree.md | 6 ++-- brewcode/package.json | 4 +-- .../assets/semble-first.md.template | 2 +- .../semble-setup/assets/semble-prefetch.mjs | 2 +- .../semble-setup/assets/semble-session.mjs | 2 +- .../semble-setup/assets/semble-stats.mjs | 2 +- .../semble-setup/assets/sembleignore.template | 2 +- .../references/artifact-metadata.md | 7 ++-- brewcode/skills/superreview-setup/SKILL.md | 3 ++ .../skills/teams-setup/scripts/trace-ops.sh | 2 +- brewdoc/.claude-plugin/plugin.json | 2 +- brewdoc/README.md | 4 +-- brewdoc/docs/commands.md | 2 +- .../docsync-setup/assets/docsync-gate.mjs | 2 +- .../docsync-setup/assets/docsync-track.mjs | 2 +- .../docsync-setup/assets/docsync-watch.mjs | 2 +- brewdoc/skills/memory-sync-setup/README.md | 3 ++ brewdoc/skills/memory-sync-setup/SKILL.md | 10 ++++-- .../references/SKILL.md.template | 1 - .../references/agent-audit.md | 2 +- .../memory-sync-setup/references/hard-sync.md | 2 +- .../references/memory-guide.md | 2 +- .../memory-sync-setup/scripts/generate.sh | 15 +++++++++ brewtools/.claude-plugin/plugin.json | 2 +- .../assets/think-short-prompt-counter.mjs | 2 +- .../assets/think-short-prompt.md | 2 +- .../assets/think-short-session.mjs | 2 +- brewtools/README.md | 2 +- brewtools/agents/deploy-admin.md | 2 +- brewtools/agents/ssh-admin.md | 2 +- brewtools/agents/text-optimizer.md | 2 +- brewtools/hooks/hardmode-guard.mjs | 2 +- brewtools/hooks/lib/manager-state.mjs | 2 +- .../assets/agent-deadline-cleanup.mjs | 2 +- .../assets/agent-deadline-guard.mjs | 2 +- .../assets/agent-return-budget.mjs | 2 +- .../assets/agent-return-contract.mjs | 2 +- .../assets/agent-return-guard.mjs | 2 +- .../assets/agent-router.mjs | 2 +- .../references/03-task-board-skill.md | 2 ++ .../assets/think-short-prompt-counter.mjs | 2 +- .../assets/think-short-prompt.md | 2 +- .../assets/think-short-session.mjs | 2 +- .../assets/think-short-task.mjs | 2 +- brewui/.claude-plugin/plugin.json | 2 +- brewui/README.md | 2 +- .../docs/brewdoc/skills/memory-sync-setup.mdx | 5 +-- 64 files changed, 138 insertions(+), 68 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index a15482c..94a4bd0 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,13 +6,13 @@ }, "metadata": { "description": "Claude Code plugin suite: brewcode for infinite task execution, brewdoc for documentation tools, brewtools for text utilities, brewui for UI/visual/creative tools", - "version": "5.5.0" + "version": "5.5.1" }, "plugins": [ { "name": "brewcode", "description": "Brewcode - full-featured development platform for Claude Code: infinite focus tasks, prompt optimization, skill/agent creation, quorum reviews, rules management", - "version": "5.5.0", + "version": "5.5.1", "category": "productivity", "keywords": [ "brewcode", @@ -46,7 +46,7 @@ { "name": "brewdoc", "description": "Brewdoc - Claude Code documentation tools: my-claude installation docs, memory sync, md-to-pdf conversion", - "version": "5.5.0", + "version": "5.5.1", "category": "productivity", "keywords": [ "brewdoc", @@ -72,7 +72,7 @@ { "name": "brewtools", "description": "Brewtools - universal utilities for Claude Code: text optimization, humanization, secrets scanning", - "version": "5.5.0", + "version": "5.5.1", "category": "productivity", "keywords": [ "brewtools", @@ -100,7 +100,7 @@ { "name": "brewui", "description": "Placeholder for future UI/visual/creative tools (currently empty, installable)", - "version": "5.5.0", + "version": "5.5.1", "category": "productivity", "keywords": [ "ui", diff --git a/.codex/plugins/brewcode/skills/superreview-setup/SKILL.md b/.codex/plugins/brewcode/skills/superreview-setup/SKILL.md index 02d9167..c1d55be 100644 --- a/.codex/plugins/brewcode/skills/superreview-setup/SKILL.md +++ b/.codex/plugins/brewcode/skills/superreview-setup/SKILL.md @@ -342,6 +342,9 @@ stripped, provenance stamp kept). Every emitted artifact is stamped with the fou you export NOTHING for them. `version` is read out of the plugin's own `.codex-plugin/plugin.json` by script self-location and `last_updated` is `date +%F`. Both stay `{PLUGIN_VERSION}` / `{LAST_UPDATED}` in the raw `.template-baseline/` copies, so a plain version bump makes `upgrade` report IDENTICAL, never a diff. +> `disable-model-invocation` MUST NOT be set on the emitted skill: the model invoking it mid-plan is a +> first-class path, alongside the user typing `/superreview`. + Key off the ONE machine-readable status line the writer prints — the `already installed` refusal path prints NO status line, because nothing was written: diff --git a/.codex/plugins/brewcode/skills/teams-setup/scripts/trace-ops.sh b/.codex/plugins/brewcode/skills/teams-setup/scripts/trace-ops.sh index b6fc905..e5d0946 100755 --- a/.codex/plugins/brewcode/skills/teams-setup/scripts/trace-ops.sh +++ b/.codex/plugins/brewcode/skills/teams-setup/scripts/trace-ops.sh @@ -1,5 +1,5 @@ #!/bin/sh -# brewcode-meta: version=5.5.0 generated_by=brewcode:teams-setup +# brewcode-meta: version=5.5.1 generated_by=brewcode:teams-setup set -eu USAGE="Usage: trace-ops.sh [args...]" diff --git a/.codex/plugins/brewtools/skills/think-short-setup/assets/think-short-prompt-counter.mjs b/.codex/plugins/brewtools/skills/think-short-setup/assets/think-short-prompt-counter.mjs index 388ea44..8c526d3 100644 --- a/.codex/plugins/brewtools/skills/think-short-setup/assets/think-short-prompt-counter.mjs +++ b/.codex/plugins/brewtools/skills/think-short-setup/assets/think-short-prompt-counter.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:think-short-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:think-short-setup /** * think-short — UserPromptSubmit hook (self-contained, no plugin-root deps). * diff --git a/.codex/plugins/brewtools/skills/think-short-setup/assets/think-short-prompt.md b/.codex/plugins/brewtools/skills/think-short-setup/assets/think-short-prompt.md index ddfceb7..76201d9 100644 --- a/.codex/plugins/brewtools/skills/think-short-setup/assets/think-short-prompt.md +++ b/.codex/plugins/brewtools/skills/think-short-setup/assets/think-short-prompt.md @@ -1,4 +1,4 @@ - + Be terse. Lead with results. Use ASCII unless the requested artifact requires other text. Think short: keep internal reasoning minimal and do not narrate exploration. Search before opening large files. Prefer focused edits and parallel read-only checks. diff --git a/.codex/plugins/brewtools/skills/think-short-setup/assets/think-short-session.mjs b/.codex/plugins/brewtools/skills/think-short-setup/assets/think-short-session.mjs index 6ade917..cd5447e 100644 --- a/.codex/plugins/brewtools/skills/think-short-setup/assets/think-short-session.mjs +++ b/.codex/plugins/brewtools/skills/think-short-setup/assets/think-short-session.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:think-short-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:think-short-setup /** * think-short — SessionStart hook (self-contained, no plugin-root deps). * diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 660b458..296f6e7 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -2,6 +2,38 @@ --- +## v5.5.1 (2026-08-10) + +> Docs: [memory-sync-setup](https://doc-claude.brewcode.app/brewdoc/skills/memory-sync-setup/) | [superreview-setup](https://doc-claude.brewcode.app/brewcode/skills/superreview-setup/) | [task-board-setup](https://doc-claude.brewcode.app/brewtools/skills/task-board-setup/) | [setup-status](https://doc-claude.brewcode.app/brewcode/skills/setup-status/) + +> `disable-model-invocation: true` is the right answer for the 27 distributed skills — 27 model-visible descriptions would be a permanent token tax. It is the wrong answer for a skill a generator writes into your repo: that skill exists to be reached, and `/memory-sync` was the one emit still carrying the flag, invisible to the model that was supposed to call it. The flag now belongs to distributed `-setup` skills only, and the generator enforces that on every install, upgrade and validate. + +### brewdoc + +#### Fixed + +- **The emitted `/memory-sync` is model-invocable.** `references/SKILL.md.template` no longer bakes `disable-model-invocation: true`, so Claude can fire the skill mid-plan and prose triggers ("sync memory", "обнови память") resolve. The `-setup` skill itself is unchanged — still `user-invocable: true` **and** `disable-model-invocation: true`, still typed by hand + +#### Changed + +- **`upgrade` migrates a legacy install without a re-emit.** `generate.sh restamp` — the mandatory last step of `upgrade` — now DELETES a surviving `disable-model-invocation` key from an already-installed `SKILL.md` and prints a `REMOVED:` line. Nothing else in the body moves; hand-edits and SELF-SYNC changes survive +- **`generate.sh validate` check (5)** hard-fails when the emitted frontmatter carries `disable-model-invocation`, so a hand-edit or a stale template can never quietly hide the skill again + +### brewcode + +#### Changed + +- **`superreview-setup`** carries a normative guard: `disable-model-invocation` MUST NOT be set on the emitted `superreview` skill. Behavior is unchanged — that emit was already model-invocable; the rule is now written down where the generator can be read +- **`setup-status`**: the `.md` frontmatter example in `references/artifact-metadata.md` no longer shows the key, and a normative sentence states that a generated artifact stays model-invocable and that the flag belongs only to distributed `-setup` skills + +### brewtools + +#### Changed + +- **`task-board-setup`**: the same guard on the emitted `task-board` skill, matching the one `task-spec` already carried. Both emits were already model-invocable; nothing about the deployed board changes + +--- + ## v5.5.0 (2026-08-10) > Docs: [agent-return-setup](https://doc-claude.brewcode.app/brewtools/skills/agent-return-setup/) | [setup-status](https://doc-claude.brewcode.app/brewcode/skills/setup-status/) | [teams-setup](https://doc-claude.brewcode.app/brewcode/skills/teams-setup/) | [superreview-setup](https://doc-claude.brewcode.app/brewcode/skills/superreview-setup/) | [think-short-setup](https://doc-claude.brewcode.app/brewtools/skills/think-short-setup/) | [agent-creator](https://doc-claude.brewcode.app/brewcode/agents/agent-creator/) | [skill-creator](https://doc-claude.brewcode.app/brewcode/agents/skill-creator/) | [hook-creator](https://doc-claude.brewcode.app/brewcode/agents/hook-creator/) | [bash-expert](https://doc-claude.brewcode.app/brewcode/agents/bash-expert/) | [bc-rules-organizer](https://doc-claude.brewcode.app/brewcode/agents/bc-rules-organizer/) | [text-optimizer](https://doc-claude.brewcode.app/brewtools/agents/text-optimizer/) | [ssh-admin](https://doc-claude.brewcode.app/brewtools/agents/ssh-admin/) | [deploy-admin](https://doc-claude.brewcode.app/brewtools/agents/deploy-admin/) diff --git a/brewcode/.claude-plugin/plugin.json b/brewcode/.claude-plugin/plugin.json index 6249b2e..43128e5 100644 --- a/brewcode/.claude-plugin/plugin.json +++ b/brewcode/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "brewcode", - "version": "5.5.0", + "version": "5.5.1", "description": "Brewcode - full-featured development platform for Claude Code: infinite focus tasks, prompt optimization, skill/agent creation, quorum reviews, rules management", "author": { "name": "Maksim Kochetkov", diff --git a/brewcode/.codex/skills/superreview-setup/SKILL.md b/brewcode/.codex/skills/superreview-setup/SKILL.md index 02d9167..c1d55be 100644 --- a/brewcode/.codex/skills/superreview-setup/SKILL.md +++ b/brewcode/.codex/skills/superreview-setup/SKILL.md @@ -342,6 +342,9 @@ stripped, provenance stamp kept). Every emitted artifact is stamped with the fou you export NOTHING for them. `version` is read out of the plugin's own `.codex-plugin/plugin.json` by script self-location and `last_updated` is `date +%F`. Both stay `{PLUGIN_VERSION}` / `{LAST_UPDATED}` in the raw `.template-baseline/` copies, so a plain version bump makes `upgrade` report IDENTICAL, never a diff. +> `disable-model-invocation` MUST NOT be set on the emitted skill: the model invoking it mid-plan is a +> first-class path, alongside the user typing `/superreview`. + Key off the ONE machine-readable status line the writer prints — the `already installed` refusal path prints NO status line, because nothing was written: diff --git a/brewcode/.codex/skills/teams-setup/scripts/trace-ops.sh b/brewcode/.codex/skills/teams-setup/scripts/trace-ops.sh index b6fc905..e5d0946 100755 --- a/brewcode/.codex/skills/teams-setup/scripts/trace-ops.sh +++ b/brewcode/.codex/skills/teams-setup/scripts/trace-ops.sh @@ -1,5 +1,5 @@ #!/bin/sh -# brewcode-meta: version=5.5.0 generated_by=brewcode:teams-setup +# brewcode-meta: version=5.5.1 generated_by=brewcode:teams-setup set -eu USAGE="Usage: trace-ops.sh [args...]" diff --git a/brewcode/README.md b/brewcode/README.md index d8ab3b6..dc8bdef 100644 --- a/brewcode/README.md +++ b/brewcode/README.md @@ -4,7 +4,7 @@ | Field | Value | |-------|-------| -| Version | 5.5.0 | +| Version | 5.5.1 | | Skills | 9 | | Agents | 5 | | Hooks | 2 | diff --git a/brewcode/agents/agent-creator.md b/brewcode/agents/agent-creator.md index 5746bee..5139646 100644 --- a/brewcode/agents/agent-creator.md +++ b/brewcode/agents/agent-creator.md @@ -6,7 +6,7 @@ maxTurns: 80 color: cyan tools: Read, Write, Edit, Glob, Grep, Bash, Agent, WebFetch, WebSearch, AskUserQuestion doc_type: llm -version: "5.5.0" +version: "5.5.1" generated_by: "brewcode" last_updated: "2026-08-10" --- diff --git a/brewcode/agents/bash-expert.md b/brewcode/agents/bash-expert.md index d6058e1..fe877e8 100644 --- a/brewcode/agents/bash-expert.md +++ b/brewcode/agents/bash-expert.md @@ -6,7 +6,7 @@ maxTurns: 60 color: green tools: Read, Write, Edit, Glob, Grep, Bash, WebFetch doc_type: llm -version: "5.5.0" +version: "5.5.1" generated_by: "brewcode" last_updated: "2026-08-10" --- diff --git a/brewcode/agents/bc-rules-organizer.md b/brewcode/agents/bc-rules-organizer.md index 22810df..f904f66 100644 --- a/brewcode/agents/bc-rules-organizer.md +++ b/brewcode/agents/bc-rules-organizer.md @@ -5,7 +5,7 @@ model: haiku maxTurns: 60 tools: Read, Write, Edit, Glob, Grep, Bash, Agent doc_type: llm -version: "5.5.0" +version: "5.5.1" generated_by: "brewcode" last_updated: "2026-08-10" --- diff --git a/brewcode/agents/hook-creator.md b/brewcode/agents/hook-creator.md index cd8592b..4c9c111 100644 --- a/brewcode/agents/hook-creator.md +++ b/brewcode/agents/hook-creator.md @@ -6,7 +6,7 @@ maxTurns: 80 color: yellow tools: Read, Write, Edit, Glob, Grep, Bash, WebFetch, WebSearch doc_type: llm -version: "5.5.0" +version: "5.5.1" generated_by: "brewcode" last_updated: "2026-08-10" --- diff --git a/brewcode/agents/skill-creator.md b/brewcode/agents/skill-creator.md index 7cde054..9027146 100644 --- a/brewcode/agents/skill-creator.md +++ b/brewcode/agents/skill-creator.md @@ -6,7 +6,7 @@ maxTurns: 80 color: green tools: Read, Write, Edit, Glob, Grep, Bash, Agent, AskUserQuestion doc_type: llm -version: "5.5.0" +version: "5.5.1" generated_by: "brewcode" last_updated: "2026-08-10" --- diff --git a/brewcode/docs/commands.md b/brewcode/docs/commands.md index f14b8d8..b4fde6e 100644 --- a/brewcode/docs/commands.md +++ b/brewcode/docs/commands.md @@ -6,7 +6,7 @@ description: Detailed description of all brewcode plugin commands # BC Plugin Commands -> **ver:** 5.5.0 | **Author:** Maksim Kochetkov | **License:** MIT +> **ver:** 5.5.1 | **Author:** Maksim Kochetkov | **License:** MIT ## Naming diff --git a/brewcode/docs/file-tree.md b/brewcode/docs/file-tree.md index b3570ea..5536dcb 100644 --- a/brewcode/docs/file-tree.md +++ b/brewcode/docs/file-tree.md @@ -4,7 +4,7 @@ description: Complete file tree of the brewcode plugin with descriptions # Brewcode Plugin - File Tree -> Version: 5.5.0 | Files: 149 | Directories: 44 (excludes the generated `.codex/` mirror; no dotfiles, `__pycache__`, or `node_modules` exist under `brewcode/`) +> Version: 5.5.1 | Files: 149 | Directories: 44 (excludes the generated `.codex/` mirror; no dotfiles, `__pycache__`, or `node_modules` exist under `brewcode/`) ## Plugin Structure @@ -12,7 +12,7 @@ description: Complete file tree of the brewcode plugin with descriptions brewcode/ # Plugin root directory │ ├── .claude-plugin/ # Claude Code plugin configuration -│ └── plugin.json # Manifest (name, version 5.5.0, skills/ reference) +│ └── plugin.json # Manifest (name, version 5.5.1, skills/ reference) │ ├── hooks/ # Node.js scripts for Claude Code events │ ├── hooks.json # Binds 2 events (UserPromptSubmit, SessionStart) @@ -101,7 +101,7 @@ brewcode/ # Plugin root directory │ ├── README.md # Components, commands, agents, hooks, architecture, flow diagrams ├── INSTALL.md # Installation: plugin-dir, marketplace, embedding, troubleshooting -└── package.json # npm: claude-plugin-brewcode@5.5.0, build/publish scripts +└── package.json # npm: claude-plugin-brewcode@5.5.1, build/publish scripts ``` ## Target Project Structure diff --git a/brewcode/package.json b/brewcode/package.json index 828d5b5..9099ab5 100644 --- a/brewcode/package.json +++ b/brewcode/package.json @@ -1,6 +1,6 @@ { "name": "claude-plugin-brewcode", - "version": "5.5.0", + "version": "5.5.1", "description": "Infinite task execution with automatic handoff for Claude Code", "keywords": [ "claude-code", @@ -36,6 +36,6 @@ }, "claude-plugin": { "name": "brewcode", - "version": "5.5.0" + "version": "5.5.1" } } diff --git a/brewcode/skills/semble-setup/assets/semble-first.md.template b/brewcode/skills/semble-setup/assets/semble-first.md.template index 2ea06b8..a95df9e 100644 --- a/brewcode/skills/semble-setup/assets/semble-first.md.template +++ b/brewcode/skills/semble-setup/assets/semble-first.md.template @@ -3,7 +3,7 @@ paths: - "**/*" description: semble-first — one semantic search, then read the exact line; rg stays for exact matching doc_type: llm -version: "5.5.0" +version: "5.5.1" generated_by: "brewcode:semble-setup" --- diff --git a/brewcode/skills/semble-setup/assets/semble-prefetch.mjs b/brewcode/skills/semble-setup/assets/semble-prefetch.mjs index 2088e3b..86b9aca 100644 --- a/brewcode/skills/semble-setup/assets/semble-prefetch.mjs +++ b/brewcode/skills/semble-setup/assets/semble-prefetch.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewcode:semble-setup +// brewcode-meta: version=5.5.1 generated_by=brewcode:semble-setup /** * brewcode:semble-setup — UserPromptSubmit hook (self-contained, installed into * a project). It runs alongside the advisory hooks, it does not replace them. diff --git a/brewcode/skills/semble-setup/assets/semble-session.mjs b/brewcode/skills/semble-setup/assets/semble-session.mjs index 6dfdbc8..7888cd0 100644 --- a/brewcode/skills/semble-setup/assets/semble-session.mjs +++ b/brewcode/skills/semble-setup/assets/semble-session.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewcode:semble-setup +// brewcode-meta: version=5.5.1 generated_by=brewcode:semble-setup /** * brewcode:semble-setup — SessionStart hook (self-contained, installed into a project). * diff --git a/brewcode/skills/semble-setup/assets/semble-stats.mjs b/brewcode/skills/semble-setup/assets/semble-stats.mjs index 477a16c..ae7be28 100644 --- a/brewcode/skills/semble-setup/assets/semble-stats.mjs +++ b/brewcode/skills/semble-setup/assets/semble-stats.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewcode:semble-setup +// brewcode-meta: version=5.5.1 generated_by=brewcode:semble-setup /** * brewcode:semble-setup — PostToolUse / PostToolUseFailure hook (self-contained, * installed into a project). PURE OBSERVER. diff --git a/brewcode/skills/semble-setup/assets/sembleignore.template b/brewcode/skills/semble-setup/assets/sembleignore.template index 8c20423..43130b7 100644 --- a/brewcode/skills/semble-setup/assets/sembleignore.template +++ b/brewcode/skills/semble-setup/assets/sembleignore.template @@ -1,4 +1,4 @@ -# brewcode-meta: version=5.5.0 generated_by=brewcode:semble-setup +# brewcode-meta: version=5.5.1 generated_by=brewcode:semble-setup # brewcode:semble — managed file. Regenerate with # semble-guidance.sh install --part ignore --force # Edit it freely: any change makes it `user_modified`, and the installer then diff --git a/brewcode/skills/setup-status/references/artifact-metadata.md b/brewcode/skills/setup-status/references/artifact-metadata.md index 75fb5e4..8c86203 100644 --- a/brewcode/skills/setup-status/references/artifact-metadata.md +++ b/brewcode/skills/setup-status/references/artifact-metadata.md @@ -1,6 +1,6 @@ --- doc_type: llm -version: "5.5.0" +version: "5.5.1" generated_by: "brewcode" last_updated: "2026-08-10" --- @@ -142,7 +142,6 @@ must not report the version that `install` left. Six implementations, all four c name: superreview description: "Deep project-tailored review." user-invocable: true -disable-model-invocation: true doc_type: llm version: "X.Y.Z" generated_by: "brewcode:superreview-setup" @@ -150,6 +149,10 @@ last_updated: "YYYY-MM-DD" --- ``` +**A GENERATED artifact stays model-invocable - `disable-model-invocation: true` belongs ONLY to the +distributed `-setup` skills.** The generator is user-only so it never fires by itself; what it emits +must be reachable mid-plan without the user typing the slash command. + Every example in this document uses `X.Y.Z` / `YYYY-MM-DD` on purpose. A literal version in a normative document goes stale at the next bump and then teaches the wrong number - the release stamper rewrites only this file's own frontmatter, never diff --git a/brewcode/skills/superreview-setup/SKILL.md b/brewcode/skills/superreview-setup/SKILL.md index ebbb829..4332742 100644 --- a/brewcode/skills/superreview-setup/SKILL.md +++ b/brewcode/skills/superreview-setup/SKILL.md @@ -338,6 +338,9 @@ stripped, provenance stamp kept). Every emitted artifact is stamped with the fou you export NOTHING for them. `version` is read out of the plugin's own `.claude-plugin/plugin.json` by script self-location and `last_updated` is `date +%F`. Both stay `{PLUGIN_VERSION}` / `{LAST_UPDATED}` in the raw `.template-baseline/` copies, so a plain version bump makes `upgrade` report IDENTICAL, never a diff. +> `disable-model-invocation` MUST NOT be set on the emitted skill: the model invoking it mid-plan is a +> first-class path, alongside the user typing `/superreview`. + Key off the ONE machine-readable status line the writer prints — the `already installed` refusal path prints NO status line, because nothing was written: diff --git a/brewcode/skills/teams-setup/scripts/trace-ops.sh b/brewcode/skills/teams-setup/scripts/trace-ops.sh index b6fc905..e5d0946 100755 --- a/brewcode/skills/teams-setup/scripts/trace-ops.sh +++ b/brewcode/skills/teams-setup/scripts/trace-ops.sh @@ -1,5 +1,5 @@ #!/bin/sh -# brewcode-meta: version=5.5.0 generated_by=brewcode:teams-setup +# brewcode-meta: version=5.5.1 generated_by=brewcode:teams-setup set -eu USAGE="Usage: trace-ops.sh [args...]" diff --git a/brewdoc/.claude-plugin/plugin.json b/brewdoc/.claude-plugin/plugin.json index 36910d9..c6d2a64 100644 --- a/brewdoc/.claude-plugin/plugin.json +++ b/brewdoc/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "brewdoc", - "version": "5.5.0", + "version": "5.5.1", "description": "Brewdoc - Claude Code documentation tools: my-claude installation docs, memory-sync generator", "author": { "name": "Maksim Kochetkov", diff --git a/brewdoc/README.md b/brewdoc/README.md index 30eef66..8b714b2 100644 --- a/brewdoc/README.md +++ b/brewdoc/README.md @@ -4,7 +4,7 @@ | Field | Value | |-------|-------| -| Version | 5.5.0 | +| Version | 5.5.1 | | Skills | 5 | | Agents | 0 | | Hooks | 0 | @@ -81,7 +81,7 @@ claude --plugin-dir ./brewdoc > **Canonical modes.** Setup skills answer the same verbs, in this order: `status | install | upgrade | enable | disable | uninstall | purge`. No argument = `status` if installed, `install` if not. Extras (`sync`, `reread`, `frontmatter`, a fine-tune prompt) come *after* the canonical verb. The v4 aliases `init`, `on`, `off`, `setup`, `remove` and `reset` are gone -- v5.0.0 is a deliberate breaking change with no back-compat. Both brewdoc setup skills implement `enable`/`disable` -- `docsync-setup` flips the `enabled` key in `.claude/docsync/config.json`, `memory-sync-setup` renames `SKILL.md` <-> `SKILL.md.disabled` -- and both implement `purge`; the Arguments column below is authoritative. -> Every brewdoc skill is `user-invocable: true` **and** `disable-model-invocation: true` -- and so is every one of the 27 skills across the suite. Claude never sees their descriptions and never fires one on its own; you type the command. That is a deliberate trade: 27 model-visible descriptions would cost tokens in every request forever, and none of these skills wants to be auto-triggered. Run [`/brewcode:setup-status`](../brewcode/skills/setup-status/README.md) to see what is installed, stale, disabled or missing across every plugin. +> Every brewdoc skill is `user-invocable: true` **and** `disable-model-invocation: true` -- and so is every one of the 27 skills across the suite. Claude never sees their descriptions and never fires one on its own; you type the command. That is a deliberate trade: 27 model-visible descriptions would cost tokens in every request forever, and none of these skills wants to be auto-triggered. **Skills a generator emits are the opposite by design** -- `/memory-sync`, like `/superreview`, `/task-board` and `/task-spec`, ships model-invocable so Claude can fire it mid-plan; the flag is for distributed `-setup` skills only. Run [`/brewcode:setup-status`](../brewcode/skills/setup-status/README.md) to see what is installed, stale, disabled or missing across every plugin. | Skill | Purpose | Model | Arguments | |-------|---------|-------|-----------| diff --git a/brewdoc/docs/commands.md b/brewdoc/docs/commands.md index 34f2a57..85fbd9a 100644 --- a/brewdoc/docs/commands.md +++ b/brewdoc/docs/commands.md @@ -4,7 +4,7 @@ description: Detailed description of all brewdoc plugin commands # Brewdoc Plugin Commands -> **Version:** 5.5.0 | **Author:** Maksim Kochetkov | **License:** MIT +> **Version:** 5.5.1 | **Author:** Maksim Kochetkov | **License:** MIT ## Quick Reference diff --git a/brewdoc/skills/docsync-setup/assets/docsync-gate.mjs b/brewdoc/skills/docsync-setup/assets/docsync-gate.mjs index 7b65e55..6f84069 100644 --- a/brewdoc/skills/docsync-setup/assets/docsync-gate.mjs +++ b/brewdoc/skills/docsync-setup/assets/docsync-gate.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewdoc:docsync-setup +// brewcode-meta: version=5.5.1 generated_by=brewdoc:docsync-setup /** * docsync-gate — Stop hook (self-contained, project-local) * diff --git a/brewdoc/skills/docsync-setup/assets/docsync-track.mjs b/brewdoc/skills/docsync-setup/assets/docsync-track.mjs index db486e3..1e36f8f 100644 --- a/brewdoc/skills/docsync-setup/assets/docsync-track.mjs +++ b/brewdoc/skills/docsync-setup/assets/docsync-track.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewdoc:docsync-setup +// brewcode-meta: version=5.5.1 generated_by=brewdoc:docsync-setup /** * docsync-track — PostToolUse:Write|Edit|MultiEdit hook (self-contained, project-local) * diff --git a/brewdoc/skills/docsync-setup/assets/docsync-watch.mjs b/brewdoc/skills/docsync-setup/assets/docsync-watch.mjs index c0ea054..9d678eb 100644 --- a/brewdoc/skills/docsync-setup/assets/docsync-watch.mjs +++ b/brewdoc/skills/docsync-setup/assets/docsync-watch.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewdoc:docsync-setup +// brewcode-meta: version=5.5.1 generated_by=brewdoc:docsync-setup /** * docsync-watch — PostToolUse:Read hook (self-contained, project-local) * diff --git a/brewdoc/skills/memory-sync-setup/README.md b/brewdoc/skills/memory-sync-setup/README.md index f107038..609c55e 100644 --- a/brewdoc/skills/memory-sync-setup/README.md +++ b/brewdoc/skills/memory-sync-setup/README.md @@ -162,6 +162,9 @@ changes. Run `status` any time to see whether it is due. - The emitted skill is **self-contained** -- no plugin dependency. It uses only project-local agents (`.claude/agents/`) and built-ins (`Explore` / `Plan` / `general-purpose`). +- The emitted skill is **model-invocable** -- it carries no `disable-model-invocation`, so Claude can fire + `/memory-sync` mid-plan and prose triggers work. That flag is for distributed `-setup` skills only; + `restamp` deletes it from a pre-5.5.1 install and `validate` fails if it is present. - `emit` never overwrites a live installation. `MEMORY_SYNC_FORCE=1` is the conscious override and it destroys hand-edits; `upgrade` is the safe path. - A stale provenance stamp is NEVER a reason to re-emit. `generate.sh restamp` rewrites the metadata keys in diff --git a/brewdoc/skills/memory-sync-setup/SKILL.md b/brewdoc/skills/memory-sync-setup/SKILL.md index 8608fc1..d3757cf 100644 --- a/brewdoc/skills/memory-sync-setup/SKILL.md +++ b/brewdoc/skills/memory-sync-setup/SKILL.md @@ -342,7 +342,13 @@ bash "${CLAUDE_SKILL_DIR}/scripts/generate.sh" emit && echo "✅ emit" || echo " This writes the FOUR-file tree: `/.claude/skills/memory-sync/SKILL.md` with scalars substituted, plus `references/memory-guide.md`, `references/agent-audit.md` and `references/hard-sync.md` copied into the emitted -`references/`. It stamps provenance into the emitted SKILL.md's YAML FRONTMATTER, appended after the +`references/`. + +> `disable-model-invocation` MUST NOT be set on the emitted skill: plain-prose invocation ("память устарела", +> "sync memory") is a first-class path, alongside `/memory-sync [scope]`. Legacy installs that still carry the key +> are stripped by `generate.sh restamp`; `validate` fails on a survivor. + +It stamps provenance into the emitted SKILL.md's YAML FRONTMATTER, appended after the skill's own keys: ```yaml @@ -486,7 +492,7 @@ the single list -- do not restate it here. | Emit material | `${CLAUDE_SKILL_DIR}/references/` | `SKILL.md.template`, `memory-guide.md`, `agent-audit.md`, `hard-sync.md` -- four files emitted | | Emitted default depth | `NORMAL` | `HARD` is per-run, from the emitted skill's own arguments; nothing is regenerated to switch | | Generation script | `${CLAUDE_SKILL_DIR}/scripts/generate.sh` | `scan` \| `emit` \| `validate` \| `restamp` \| `status` \| `enable` \| `disable` \| `uninstall` \| `purge` | -| Provenance refresh | `generate.sh restamp` | Metadata-only, idempotent, mandatory tail of `upgrade`. Rewrites `version` / `last_updated` / `surface_files`, adds `doc_type` / `generated_by` when absent, deletes a pre-5.0 tail stamp, re-copies a reference ONLY when its sole difference from the plugin source is the release stamp. Aborts rather than write if anything outside the metadata block would move | +| Provenance refresh | `generate.sh restamp` | Metadata-only, idempotent, mandatory tail of `upgrade`. Rewrites `version` / `last_updated` / `surface_files`, adds `doc_type` / `generated_by` when absent, deletes a pre-5.0 tail stamp and a legacy `disable-model-invocation`, re-copies a reference ONLY when its sole difference from the plugin source is the release stamp. Aborts rather than write if anything outside the metadata block would move | | Mode | `status` when installed, else `install` | `status` (read-only) \| `install` \| `upgrade` \| `enable` \| `disable` \| `uninstall` \| `purge` | | Disabled marker | `/.claude/skills/memory-sync/SKILL.md.disabled` | What `disable` renames `SKILL.md` to. Its presence IS the disabled state -- there is no config file to keep in sync | | Overwrite | refused | `emit` never overwrites a live installation; `MEMORY_SYNC_FORCE=1` overrides and DESTROYS hand-edits | diff --git a/brewdoc/skills/memory-sync-setup/references/SKILL.md.template b/brewdoc/skills/memory-sync-setup/references/SKILL.md.template index 1a42260..ca40038 100644 --- a/brewdoc/skills/memory-sync-setup/references/SKILL.md.template +++ b/brewdoc/skills/memory-sync-setup/references/SKILL.md.template @@ -2,7 +2,6 @@ name: memory-sync description: "Syncs {PROJECT_NAME} instruction memory (CLAUDE.md at any depth, rules, conventions, agents, skills) against real code: verifies facts, deletes stale, dedups, compresses, re-audits agents; never grows. Excludes docs. Triggers: sync memory, memory sync, memory drift, sync agents, audit agents, обнови CLAUDE.md, синхронизируй память, память устарела" user-invocable: true -disable-model-invocation: true argument-hint: "[prompt] [session|branch|commit [..]|recent[:N]|all] [hard] [free-form focus]" allowed-tools: Read, Edit, Glob, Grep, Bash, Agent model: opus diff --git a/brewdoc/skills/memory-sync-setup/references/agent-audit.md b/brewdoc/skills/memory-sync-setup/references/agent-audit.md index 92b29b4..aae823d 100644 --- a/brewdoc/skills/memory-sync-setup/references/agent-audit.md +++ b/brewdoc/skills/memory-sync-setup/references/agent-audit.md @@ -1,4 +1,4 @@ - + # Agent and Skill Re-Audit The standing best-practice audit `/memory-sync` runs on EVERY agent file and EVERY skill file, on EVERY run, at diff --git a/brewdoc/skills/memory-sync-setup/references/hard-sync.md b/brewdoc/skills/memory-sync-setup/references/hard-sync.md index 478b3c2..e72c198 100644 --- a/brewdoc/skills/memory-sync-setup/references/hard-sync.md +++ b/brewdoc/skills/memory-sync-setup/references/hard-sync.md @@ -1,4 +1,4 @@ - + # Hard Sync The two aggressive DELETION passes of `/memory-sync`. Cited by the emitted skill's Phase 2 batch prompt at diff --git a/brewdoc/skills/memory-sync-setup/references/memory-guide.md b/brewdoc/skills/memory-sync-setup/references/memory-guide.md index 1f85e3f..e748d18 100644 --- a/brewdoc/skills/memory-sync-setup/references/memory-guide.md +++ b/brewdoc/skills/memory-sync-setup/references/memory-guide.md @@ -1,4 +1,4 @@ - + # Memory Guide Where a fact BELONGS, how to compress it, and what never gets written at all. Cited by every `/memory-sync` diff --git a/brewdoc/skills/memory-sync-setup/scripts/generate.sh b/brewdoc/skills/memory-sync-setup/scripts/generate.sh index a1613fd..2fd0de6 100755 --- a/brewdoc/skills/memory-sync-setup/scripts/generate.sh +++ b/brewdoc/skills/memory-sync-setup/scripts/generate.sh @@ -454,6 +454,9 @@ restamp_skill() { _was=$(_fm_meta "$_f" version); [ -n "$_was" ] || _was="(unstamped)" _wasl=$(_legacy_stamp "$_f") + # Legacy installs (emitted while the template still baked it) are user-only; the emitted skill must be + # model-invocable, so the key is dropped here - the only mode that can reach an installed SKILL.md. + _wasdmi=$(_fm_meta "$_f" disable-model-invocation) _dt=$(_fm_meta "$_f" doc_type) case "$_dt" in llm|user|skip) ;; *) _dt="$META_DOC_TYPE" ;; esac _sfv=$(printf '%s' "${SURFACE_COUNTS:-$(derive_surface_counts)}" | tr -d '"' | tr '\n\r' ' ') @@ -476,6 +479,7 @@ restamp_skill() { print; next } n == 1 && /^(doc_type|version|generated_by|last_updated|surface_files):/ { next } + n == 1 && /^disable-model-invocation:/ { next } n >= 2 && index($0, legacy) > 0 { next } { print } END { if (!done) exit 3 } @@ -500,6 +504,7 @@ restamp_skill() { echo " doc_type: -> $_dt" echo " surface_files: -> $_sfv" [ -z "$_wasl" ] || echo "REMOVED: pre-5.0 tail stamp -> $_wasl" + [ -z "$_wasdmi" ] || echo "REMOVED: disable-model-invocation: $_wasdmi -> /memory-sync is model-invocable again" refresh_refs rm -rf "$_bd"; _bd="" echo "✅ restamp (metadata keys only - body and every hand-edit verified byte-identical)" @@ -609,6 +614,16 @@ validate_emit() { [ -z "$_legacy" ] || echo "⚠️ a pre-5.0 tail stamp also survives in this file - delete that line, the frontmatter supersedes it" fi + # (5) the emitted skill stays model-invocable - plain prose must reach it, not only `/memory-sync` + _dmi=$(_fm_meta "$TARGET/SKILL.md" disable-model-invocation) + if [ -n "$_dmi" ]; then + echo "❌ FAILED: $TARGET/SKILL.md: frontmatter sets disable-model-invocation: $_dmi - the emitted skill must stay model-invocable" + echo " -> run \`generate.sh restamp\`: it deletes the key in place, body and hand-edits untouched" + _errors=$((_errors+1)) + else + echo "✅ model-invocable (no disable-model-invocation key - prose invocation works alongside /memory-sync)" + fi + if [ "$_errors" -eq 0 ]; then echo "✅ validate PASSED"; else echo "❌ FAILED: $_errors check(s) failed"; fi exit "$_errors" } diff --git a/brewtools/.claude-plugin/plugin.json b/brewtools/.claude-plugin/plugin.json index 3eb2648..7d9e398 100644 --- a/brewtools/.claude-plugin/plugin.json +++ b/brewtools/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "brewtools", - "version": "5.5.0", + "version": "5.5.1", "description": "Brewtools - universal utilities for Claude Code: text optimization, humanization, secrets scanning", "author": { "name": "Maksim Kochetkov", diff --git a/brewtools/.codex/skills/think-short-setup/assets/think-short-prompt-counter.mjs b/brewtools/.codex/skills/think-short-setup/assets/think-short-prompt-counter.mjs index 388ea44..8c526d3 100644 --- a/brewtools/.codex/skills/think-short-setup/assets/think-short-prompt-counter.mjs +++ b/brewtools/.codex/skills/think-short-setup/assets/think-short-prompt-counter.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:think-short-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:think-short-setup /** * think-short — UserPromptSubmit hook (self-contained, no plugin-root deps). * diff --git a/brewtools/.codex/skills/think-short-setup/assets/think-short-prompt.md b/brewtools/.codex/skills/think-short-setup/assets/think-short-prompt.md index ddfceb7..76201d9 100644 --- a/brewtools/.codex/skills/think-short-setup/assets/think-short-prompt.md +++ b/brewtools/.codex/skills/think-short-setup/assets/think-short-prompt.md @@ -1,4 +1,4 @@ - + Be terse. Lead with results. Use ASCII unless the requested artifact requires other text. Think short: keep internal reasoning minimal and do not narrate exploration. Search before opening large files. Prefer focused edits and parallel read-only checks. diff --git a/brewtools/.codex/skills/think-short-setup/assets/think-short-session.mjs b/brewtools/.codex/skills/think-short-setup/assets/think-short-session.mjs index 6ade917..cd5447e 100644 --- a/brewtools/.codex/skills/think-short-setup/assets/think-short-session.mjs +++ b/brewtools/.codex/skills/think-short-setup/assets/think-short-session.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:think-short-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:think-short-setup /** * think-short — SessionStart hook (self-contained, no plugin-root deps). * diff --git a/brewtools/README.md b/brewtools/README.md index a1b4e47..f6a079e 100644 --- a/brewtools/README.md +++ b/brewtools/README.md @@ -4,7 +4,7 @@ | Field | Value | |-------|-------| -| Version | 5.5.0 | +| Version | 5.5.1 | | Skills | 13 | | Agents | 3 | | Hooks | 2 | diff --git a/brewtools/agents/deploy-admin.md b/brewtools/agents/deploy-admin.md index 3e95f55..d5a8b70 100644 --- a/brewtools/agents/deploy-admin.md +++ b/brewtools/agents/deploy-admin.md @@ -5,7 +5,7 @@ model: inherit maxTurns: 80 tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion, WebFetch, WebSearch doc_type: llm -version: "5.5.0" +version: "5.5.1" generated_by: "brewtools" last_updated: "2026-08-10" --- diff --git a/brewtools/agents/ssh-admin.md b/brewtools/agents/ssh-admin.md index 8d2d752..18e2b1a 100644 --- a/brewtools/agents/ssh-admin.md +++ b/brewtools/agents/ssh-admin.md @@ -5,7 +5,7 @@ model: inherit maxTurns: 80 tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion, WebFetch, WebSearch doc_type: llm -version: "5.5.0" +version: "5.5.1" generated_by: "brewtools" last_updated: "2026-08-10" --- diff --git a/brewtools/agents/text-optimizer.md b/brewtools/agents/text-optimizer.md index d260633..2ef3fe5 100644 --- a/brewtools/agents/text-optimizer.md +++ b/brewtools/agents/text-optimizer.md @@ -7,7 +7,7 @@ color: magenta tools: Read, Write, Edit, Glob, Grep, Bash, WebFetch, AskUserQuestion skills: brewtools:text-optimize doc_type: llm -version: "5.5.0" +version: "5.5.1" generated_by: "brewtools" last_updated: "2026-08-10" --- diff --git a/brewtools/hooks/hardmode-guard.mjs b/brewtools/hooks/hardmode-guard.mjs index ab53594..18bea65 100644 --- a/brewtools/hooks/hardmode-guard.mjs +++ b/brewtools/hooks/hardmode-guard.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:manager-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:manager-setup // brewtools:manager-setup — HARD wall guard (PreToolUse, matcher "*"). // // SELF-CONTAINED — copied into /.claude/brewtools/manager/ by diff --git a/brewtools/hooks/lib/manager-state.mjs b/brewtools/hooks/lib/manager-state.mjs index 4ae57af..67482c2 100644 --- a/brewtools/hooks/lib/manager-state.mjs +++ b/brewtools/hooks/lib/manager-state.mjs @@ -1,4 +1,4 @@ -// brewcode-meta: version=5.5.0 generated_by=brewtools:manager-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:manager-setup // brewtools:manager-setup — Manager mode state resolver/writer. // State shape: { hard:boolean, level:'strict'|'balanced', mode:'full' } // + artifact metadata written by writeState: version/generated_by/last_updated. diff --git a/brewtools/skills/agent-deadline-setup/assets/agent-deadline-cleanup.mjs b/brewtools/skills/agent-deadline-setup/assets/agent-deadline-cleanup.mjs index ae59612..b315182 100644 --- a/brewtools/skills/agent-deadline-setup/assets/agent-deadline-cleanup.mjs +++ b/brewtools/skills/agent-deadline-setup/assets/agent-deadline-cleanup.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:agent-deadline-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:agent-deadline-setup /** * agent-deadline — SubagentStop hook (self-contained, Node built-ins only). * diff --git a/brewtools/skills/agent-deadline-setup/assets/agent-deadline-guard.mjs b/brewtools/skills/agent-deadline-setup/assets/agent-deadline-guard.mjs index 1bb9dc2..00ebb65 100644 --- a/brewtools/skills/agent-deadline-setup/assets/agent-deadline-guard.mjs +++ b/brewtools/skills/agent-deadline-setup/assets/agent-deadline-guard.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:agent-deadline-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:agent-deadline-setup /** * agent-deadline — PreToolUse hook (self-contained, Node built-ins only). * diff --git a/brewtools/skills/agent-return-setup/assets/agent-return-budget.mjs b/brewtools/skills/agent-return-setup/assets/agent-return-budget.mjs index 734b7ef..a22510b 100644 --- a/brewtools/skills/agent-return-setup/assets/agent-return-budget.mjs +++ b/brewtools/skills/agent-return-setup/assets/agent-return-budget.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:agent-return-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:agent-return-setup /** * agent-return-budget — shared config, thresholds and return contract * (Node built-ins only). Never invoked directly; imported by the pair. diff --git a/brewtools/skills/agent-return-setup/assets/agent-return-contract.mjs b/brewtools/skills/agent-return-setup/assets/agent-return-contract.mjs index 4f910a9..2600a3a 100644 --- a/brewtools/skills/agent-return-setup/assets/agent-return-contract.mjs +++ b/brewtools/skills/agent-return-setup/assets/agent-return-contract.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:agent-return-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:agent-return-setup /** * agent-return-contract — SubagentStart hook (Node built-ins only). * diff --git a/brewtools/skills/agent-return-setup/assets/agent-return-guard.mjs b/brewtools/skills/agent-return-setup/assets/agent-return-guard.mjs index 7b43fd4..5611ae4 100644 --- a/brewtools/skills/agent-return-setup/assets/agent-return-guard.mjs +++ b/brewtools/skills/agent-return-setup/assets/agent-return-guard.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:agent-return-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:agent-return-setup /** * agent-return-guard — SubagentStop hook (Node built-ins only, no I/O but stdin/stdout * plus the config read done by agent-return-budget.mjs). diff --git a/brewtools/skills/agent-router-setup/assets/agent-router.mjs b/brewtools/skills/agent-router-setup/assets/agent-router.mjs index 632d931..6eb50b5 100755 --- a/brewtools/skills/agent-router-setup/assets/agent-router.mjs +++ b/brewtools/skills/agent-router-setup/assets/agent-router.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:agent-router-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:agent-router-setup /** * agent-router - PreToolUse hook for the `Agent` tool (Node built-ins only, ESM). * diff --git a/brewtools/skills/task-board-setup/references/03-task-board-skill.md b/brewtools/skills/task-board-setup/references/03-task-board-skill.md index b6a561f..3c20aec 100644 --- a/brewtools/skills/task-board-setup/references/03-task-board-skill.md +++ b/brewtools/skills/task-board-setup/references/03-task-board-skill.md @@ -2,6 +2,8 @@ Substitute `{{LANG}}`, `{{CLOSE_MARKER_SHORT}}`. Spec-layer placeholders (gated by `{{SPEC_MODE}}`) -- LINE kind: `{{SPEC_INVARIANTS}}`, `{{SPEC_ADD_STEP}}`, `{{SPEC_MOVE_STEPS}}`, `{{SPEC_VIEW_FLOW}}`; INLINE kind: `{{SPEC_DESC_TRIGGERS}}`, `{{SPEC_ADD_ROW_COL}}`. Write the body below to `TARGET/.claude/skills/task-board/SKILL.md`. +> `disable-model-invocation` MUST NOT be set on the emitted skill: plain-prose invocation is a first-class path, alongside `/task-board [view|add|move|backlog|groom]`. + `{{CLOSE_MARKER_SHORT}}` map by RELEASE_STYLE: - `vtag` → `the closing version/commit (vX.Y.Z tag or SHA)` - `sha` → `the closing commit SHA` diff --git a/brewtools/skills/think-short-setup/assets/think-short-prompt-counter.mjs b/brewtools/skills/think-short-setup/assets/think-short-prompt-counter.mjs index b7d12bd..ec345b5 100644 --- a/brewtools/skills/think-short-setup/assets/think-short-prompt-counter.mjs +++ b/brewtools/skills/think-short-setup/assets/think-short-prompt-counter.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:think-short-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:think-short-setup /** * think-short — UserPromptSubmit hook (self-contained, no plugin-root deps). * diff --git a/brewtools/skills/think-short-setup/assets/think-short-prompt.md b/brewtools/skills/think-short-setup/assets/think-short-prompt.md index 4ac7c93..29aee67 100644 --- a/brewtools/skills/think-short-setup/assets/think-short-prompt.md +++ b/brewtools/skills/think-short-setup/assets/think-short-prompt.md @@ -1,4 +1,4 @@ - + Be terse. Results first, no preamble/filler/sycophancy. ASCII only. Think short: minimal internal reasoning, no exploring aloud. Grep before Read. Edit over Write. Parallel calls in one message. diff --git a/brewtools/skills/think-short-setup/assets/think-short-session.mjs b/brewtools/skills/think-short-setup/assets/think-short-session.mjs index 6ade917..cd5447e 100644 --- a/brewtools/skills/think-short-setup/assets/think-short-session.mjs +++ b/brewtools/skills/think-short-setup/assets/think-short-session.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:think-short-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:think-short-setup /** * think-short — SessionStart hook (self-contained, no plugin-root deps). * diff --git a/brewtools/skills/think-short-setup/assets/think-short-task.mjs b/brewtools/skills/think-short-setup/assets/think-short-task.mjs index 9f62b8f..680a039 100644 --- a/brewtools/skills/think-short-setup/assets/think-short-task.mjs +++ b/brewtools/skills/think-short-setup/assets/think-short-task.mjs @@ -1,5 +1,5 @@ #!/usr/bin/env node -// brewcode-meta: version=5.5.0 generated_by=brewtools:think-short-setup +// brewcode-meta: version=5.5.1 generated_by=brewtools:think-short-setup /** * think-short — PreToolUse hook for Task|Agent (self-contained, no plugin-root deps). * diff --git a/brewui/.claude-plugin/plugin.json b/brewui/.claude-plugin/plugin.json index 11c27ec..eb96970 100644 --- a/brewui/.claude-plugin/plugin.json +++ b/brewui/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "brewui", - "version": "5.5.0", + "version": "5.5.1", "description": "Brewui -- placeholder for future UI/visual/creative tools", "author": { "name": "Maksim Kochetkov", diff --git a/brewui/README.md b/brewui/README.md index f1a7494..74bb514 100644 --- a/brewui/README.md +++ b/brewui/README.md @@ -4,7 +4,7 @@ | Field | Value | |-------|-------| -| Version | 5.5.0 | +| Version | 5.5.1 | | Skills | 0 | ## Install diff --git a/web/docs/src/content/docs/brewdoc/skills/memory-sync-setup.mdx b/web/docs/src/content/docs/brewdoc/skills/memory-sync-setup.mdx index cd39430..54e11c3 100644 --- a/web/docs/src/content/docs/brewdoc/skills/memory-sync-setup.mdx +++ b/web/docs/src/content/docs/brewdoc/skills/memory-sync-setup.mdx @@ -87,7 +87,7 @@ Run it: /memory-sync -> scope session (default), whole su
  • Phase 1.5 — clarify

    AskUserQuestion only for what cannot be reliably inferred: which convention files count as memory, whether the memory dir is in scope, VERIFY-ONLY list, default branch, intentional non-English trigger aliases, batch splits.

  • Phase 2 — emit

    Exports scalar placeholders and runs generate.sh emit: awk-substitutes them into the template, copies the reference files, then stamps provenance into the emitted skill's YAML frontmatter — doc_type, version (the brewdoc plugin version, read from plugin.json by script self-location, never hardcoded), generated_by, last_updated, plus surface_files as the drift input, which is what status, validate and upgrade read back. Refuses to overwrite an existing installation — that is what upgrade is for.

  • Phase 3 — fill block placeholders

    Multi-row tables and multi-line bash go through Edit, not sed — twelve blocks total: ten in the emitted SKILL.md (batch table, exclusions, invariants, fact catalogue, enumeration bash, agent checks, skill checks, roster, proposal precedents, verify-extra assertions) and two in the emitted references/hard-sync.md (paths-precision table, obvious-vs-domain table).

  • -
  • Phase 4 — validate

    generate.sh validate fails on any surviving {'{PLACEHOLDER}'}, a missing emitted asset, or a cited reference that does not exist. Then every emitted subagent_type is asserted to resolve to a real project agent or a built-in.

  • +
  • Phase 4 — validate

    generate.sh validate fails on any surviving {'{PLACEHOLDER}'}, a missing emitted asset, a cited reference that does not exist, or a disable-model-invocation key in the emitted frontmatter (check 5 — the emitted skill must stay model-invocable). Then every emitted subagent_type is asserted to resolve to a real project agent or a built-in.

  • Phase 5 — report

    Prints surface counts, batches, exclusions, fact/invariant counts, and how to run the emitted skill — plus how to check on it later with status or refresh it with upgrade.

  • @@ -99,7 +99,7 @@ Run it: /memory-sync -> scope session (default), whole su |------|-------|--------|------| | `status` (default when installed) | target + emitted skill | nothing | Runs `generate.sh status`, which prints a machine-greppable `KEY=value` block — `PLUGIN_VERSION`, `STAMP_FORMAT`, the `META_*` provenance rows, surface files stamped vs enumerated now, missing emitted files, unfilled placeholders — closed by a verdict: `IN SYNC` / `STALE (n drifts)` / `STALE-LEGACY (n drifts)` (a pre-5.0 install still carrying the old tail-comment stamp — run `upgrade` to migrate it) / `NOT INSTALLED`, each prefixed `PARKED - ` when disabled. The skill then enriches it with its own reads: dead batch paths, memory layers gained since install | | `install` (default when nothing is installed) | target | 4 emitted files | Full Phase 0-5 analysis and emit. Refuses if `.claude/skills/memory-sync/` already exists | -| `upgrade` | target + emitted skill | edits the emitted skill | Reads the same `generate.sh status` drift list as its refresh worklist, then re-scans and refreshes surface/batch/fact/invariant tables, adds sections for new memory layers, preserves hand-edits — the emitted skill is expected to have self-modified via its own SELF-SYNC phase — and always finishes with `generate.sh restamp` | +| `upgrade` | target + emitted skill | edits the emitted skill | Reads the same `generate.sh status` drift list as its refresh worklist, then re-scans and refreshes surface/batch/fact/invariant tables, adds sections for new memory layers, preserves hand-edits — the emitted skill is expected to have self-modified via its own SELF-SYNC phase — and always finishes with `generate.sh restamp` — which also DELETES a `disable-model-invocation` key left by a pre-5.5.1 install, printing a `REMOVED:` line, so an old emit becomes model-invocable without a re-emit | | `enable` | target | one rename | `SKILL.md.disabled` -> `SKILL.md`, so `/memory-sync` is offered again next session. Regenerates nothing — no provenance stamp, no hand-edit change | | `disable` | target | one rename | `SKILL.md` -> `SKILL.md.disabled`. Claude Code discovers a project skill only through `SKILL.md`, so this withdraws `/memory-sync` from the roster while the 3 references and every SELF-SYNC hand-edit stay byte-identical on disk. Reversible by `enable`; deletes nothing | | `uninstall` | target | deletes the emit manifest | Removes exactly what `emit` wrote — `SKILL.md` (or its parked form) plus the 3 references — after confirmation. Files a user added to that dir are kept and listed. Nothing installed -> reports "nothing to uninstall" instead of deleting on a guess | @@ -120,6 +120,7 @@ Run it: /memory-sync -> scope session (default), whole su | Phases | GATHER (parallel read-only) -> SYNC (one bounded agent per disjoint batch, one message) -> VERIFY (independent checker per batch, never the writer) -> SELF-SYNC (re-checks itself) -> PROPOSE (new agent/skill proposed, never auto-created) -> REPORT (chat only, no report file) | | Non-growth | Every file ends `<=` its original line count; total delta `<= 0` | | Agents | Re-audited against current best practice every sweep, not just fact-checked | +| Invocation | **model-invocable** — the emitted `/memory-sync` carries no `disable-model-invocation`, so Claude can fire it mid-plan and prose triggers ("sync memory", "обнови память") work. That flag belongs only to the distributed `-setup` skills; a generated artifact is meant to be reachable by the model | ### Depth: NORMAL vs HARD