v6.1.3: manager-setup - gate HARD wall arm behind explicit confirm

This commit is contained in:
kochetkov-ma
2026-08-16 20:45:36 +01:00
parent bdd30823da
commit eab5cf443a
73 changed files with 151 additions and 94 deletions
+5 -5
View File
@@ -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": "6.1.2"
"version": "6.1.3"
},
"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": "6.1.2",
"version": "6.1.3",
"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": "6.1.2",
"version": "6.1.3",
"category": "productivity",
"keywords": [
"brewdoc",
@@ -72,7 +72,7 @@
{
"name": "brewtools",
"description": "Brewtools - universal utilities for Claude Code: text optimization, humanization, secrets scanning",
"version": "6.1.2",
"version": "6.1.3",
"category": "productivity",
"keywords": [
"brewtools",
@@ -100,7 +100,7 @@
{
"name": "brewui",
"description": "Placeholder for future UI/visual/creative tools (currently empty, installable)",
"version": "6.1.2",
"version": "6.1.3",
"category": "productivity",
"keywords": [
"ui",
@@ -11,7 +11,7 @@ Inspect repository instructions, architecture, tests, and recent changes, then c
Follow every phase below. When a phase delegates work, use Codex collaboration with only `task_name` and `message`; treat each "Codex delegation brief" block as role and message content, not executable syntax. Use `request_user_input` for the documented user gates. Resolve `<skill-directory>`, `<plugin-root>`, `<project-root>`, and `<arguments>` before running commands.
<!-- brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewcode:superreview-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewcode:superreview-setup -->
# Super Review Generator (brewcode:superreview-setup)
@@ -11,7 +11,7 @@ Use collaboration agents only when the user or project instructions explicitly r
Follow every phase below. When a phase delegates work, use Codex collaboration with only `task_name` and `message`; treat each "Codex delegation brief" block as role and message content, not executable syntax. Use `request_user_input` for the documented user gates. Resolve `<skill-directory>`, `<plugin-root>`, `<project-root>`, and `<arguments>` before running commands.
<!-- brewcode-meta: version=6.1.2 content_version=6.1.0 generated_by=brewcode:teams-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=6.1.0 generated_by=brewcode:teams-setup -->
<instructions>
@@ -1,5 +1,5 @@
#!/bin/sh
# brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewcode:teams-setup
# brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewcode:teams-setup
set -eu
USAGE="Usage: trace-ops.sh <add|read|cursor|migrate> <team_dir> [args...]"
@@ -11,7 +11,7 @@ Convert a local Markdown file with `scripts/md_to_pdf.py`. Check dependencies wi
Follow every phase below. When a phase delegates work, use Codex collaboration with only `task_name` and `message`; treat each "Codex delegation brief" block as role and message content, not executable syntax. Use `request_user_input` for the documented user gates. Resolve `<skill-directory>`, `<plugin-root>`, `<project-root>`, and `<arguments>` before running commands.
<!-- brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewdoc:md-to-pdf -->
<!-- brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewdoc:md-to-pdf -->
# MD to PDF
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewtools:think-short-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewtools:think-short-setup
/**
* think-short UserPromptSubmit hook (self-contained, no plugin-root deps).
*
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewtools:think-short-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewtools:think-short-setup
/**
* think-short SessionStart hook (self-contained, no plugin-root deps).
*
+12
View File
@@ -2,6 +2,18 @@
---
## v6.1.3 (2026-08-16)
> Docs: [manager-setup](https://doc-claude.brewcode.app/brewtools/skills/manager-setup/)
### brewtools
#### Fixed
- **`manager-setup` no longer arms the HARD delegation wall automatically on `install`/`enable`/`hard-one-shot`.** Arming now requires an explicit `AskUserQuestion` confirmation or the user's own prompt naming "hard wall"/"хард уолл" plus an enable/arm verb — plain `install` or autonomy phrasing ("decide for me") no longer sets `state.hard=true`. Declining `install` still installs the guard files disarmed; declining `enable`/`hard-one-shot` aborts with nothing changed
---
## v6.1.2 (2026-08-16)
> Docs: [setup-status](https://doc-claude.brewcode.app/brewcode/skills/setup-status/)
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "brewcode",
"version": "6.1.2",
"version": "6.1.3",
"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",
@@ -11,7 +11,7 @@ Inspect repository instructions, architecture, tests, and recent changes, then c
Follow every phase below. When a phase delegates work, use Codex collaboration with only `task_name` and `message`; treat each "Codex delegation brief" block as role and message content, not executable syntax. Use `request_user_input` for the documented user gates. Resolve `<skill-directory>`, `<plugin-root>`, `<project-root>`, and `<arguments>` before running commands.
<!-- brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewcode:superreview-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewcode:superreview-setup -->
# Super Review Generator (brewcode:superreview-setup)
+1 -1
View File
@@ -11,7 +11,7 @@ Use collaboration agents only when the user or project instructions explicitly r
Follow every phase below. When a phase delegates work, use Codex collaboration with only `task_name` and `message`; treat each "Codex delegation brief" block as role and message content, not executable syntax. Use `request_user_input` for the documented user gates. Resolve `<skill-directory>`, `<plugin-root>`, `<project-root>`, and `<arguments>` before running commands.
<!-- brewcode-meta: version=6.1.2 content_version=6.1.0 generated_by=brewcode:teams-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=6.1.0 generated_by=brewcode:teams-setup -->
<instructions>
@@ -1,5 +1,5 @@
#!/bin/sh
# brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewcode:teams-setup
# brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewcode:teams-setup
set -eu
USAGE="Usage: trace-ops.sh <add|read|cursor|migrate> <team_dir> [args...]"
+1 -1
View File
@@ -4,7 +4,7 @@
| Field | Value |
|-------|-------|
| Version | 6.1.2 |
| Version | 6.1.3 |
| Skills | 9 |
| Agents | 5 |
| Hooks | 4 |
+1 -1
View File
@@ -6,7 +6,7 @@ maxTurns: 80
color: cyan
tools: Read, Write, Edit, Glob, Grep, Bash, Agent, WebFetch, WebSearch
doc_type: llm
version: "6.1.2"
version: "6.1.3"
content_version: "6.0.0"
generated_by: "brewcode"
last_updated: "2026-08-16"
+1 -1
View File
@@ -6,7 +6,7 @@ maxTurns: 60
color: green
tools: Read, Write, Edit, Glob, Grep, Bash, WebFetch
doc_type: llm
version: "6.1.2"
version: "6.1.3"
content_version: "6.0.0"
generated_by: "brewcode"
last_updated: "2026-08-16"
+1 -1
View File
@@ -5,7 +5,7 @@ model: haiku
maxTurns: 60
tools: Read, Write, Edit, Glob, Grep, Bash, Agent
doc_type: llm
version: "6.1.2"
version: "6.1.3"
content_version: "6.0.0"
generated_by: "brewcode"
last_updated: "2026-08-16"
+1 -1
View File
@@ -6,7 +6,7 @@ maxTurns: 80
color: yellow
tools: Read, Write, Edit, Glob, Grep, Bash, WebFetch, WebSearch
doc_type: llm
version: "6.1.2"
version: "6.1.3"
content_version: "6.0.0"
generated_by: "brewcode"
last_updated: "2026-08-16"
+1 -1
View File
@@ -6,7 +6,7 @@ maxTurns: 80
color: green
tools: Read, Write, Edit, Glob, Grep, Bash, Agent
doc_type: llm
version: "6.1.2"
version: "6.1.3"
content_version: "6.0.0"
generated_by: "brewcode"
last_updated: "2026-08-16"
+1 -1
View File
@@ -6,7 +6,7 @@ description: Detailed description of all brewcode plugin commands
# BC Plugin Commands
> **ver:** 6.1.2 | **Author:** Maksim Kochetkov | **License:** MIT
> **ver:** 6.1.3 | **Author:** Maksim Kochetkov | **License:** MIT
## Naming
+3 -3
View File
@@ -4,7 +4,7 @@ description: Complete file tree of the brewcode plugin with descriptions
# Brewcode Plugin - File Tree
> Version: 6.1.2 | Files: 161 | Directories: 47 (excludes the generated `.codex/` mirror; no dotfiles, `__pycache__`, or `node_modules` exist under `brewcode/`)
> Version: 6.1.3 | Files: 161 | Directories: 47 (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 6.1.2, skills/ reference)
│ └── plugin.json # Manifest (name, version 6.1.3, skills/ reference)
├── hooks/ # Node.js scripts for Claude Code events (4 hooks)
│ ├── hooks.json # Binds 2 events (UserPromptSubmit, SessionStart); SessionStart has 2 groups: unmatched + matcher "compact"
@@ -113,7 +113,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@6.1.2, build/publish scripts
└── package.json # npm: claude-plugin-brewcode@6.1.3, build/publish scripts
```
## Target Project Structure
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "claude-plugin-brewcode",
"version": "6.1.2",
"version": "6.1.3",
"description": "Infinite task execution with automatic handoff for Claude Code",
"keywords": [
"claude-code",
@@ -30,6 +30,6 @@
],
"claude-plugin": {
"name": "brewcode",
"version": "6.1.2"
"version": "6.1.3"
}
}
+1 -1
View File
@@ -7,7 +7,7 @@ argument-hint: "[prompt] [status|install|create|update|review|rules]"
allowed-tools: [Read, Write, Edit, Glob, Grep, Bash, Agent, AskUserQuestion, Skill, WebSearch, WebFetch]
model: opus
---
<!-- brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewcode:e2e -->
<!-- brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewcode:e2e -->
<instructions>
@@ -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: "6.1.2"
version: "6.1.3"
content_version: "5.6.0"
generated_by: "brewcode:semble-setup"
---
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewcode:semble-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 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.
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewcode:semble-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewcode:semble-setup
/**
* brewcode:semble-setup SessionStart hook (self-contained, installed into a project).
*
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewcode:semble-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewcode:semble-setup
/**
* brewcode:semble-setup PostToolUse / PostToolUseFailure hook (self-contained,
* installed into a project). PURE OBSERVER.
@@ -1,4 +1,4 @@
# brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewcode:semble-setup
# brewcode-meta: version=6.1.3 content_version=5.6.0 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
@@ -1,6 +1,6 @@
---
doc_type: llm
version: "6.1.2"
version: "6.1.3"
content_version: "5.6.0"
generated_by: "brewcode"
last_updated: "2026-08-16"
+1 -1
View File
@@ -7,7 +7,7 @@ argument-hint: "[prompt] [status|install|upgrade|enable|disable|uninstall|purge]
allowed-tools: [Read, Write, Edit, Glob, Grep, Bash, Agent, AskUserQuestion]
model: opus
---
<!-- brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewcode:superreview-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewcode:superreview-setup -->
# Super Review Generator (brewcode:superreview-setup)
+1 -1
View File
@@ -7,7 +7,7 @@ argument-hint: "[prompt] [status|install|upgrade|enable|disable|uninstall|purge]
allowed-tools: [Read, Write, Edit, Glob, Grep, Bash, Agent, AskUserQuestion, Skill]
model: opus
---
<!-- brewcode-meta: version=6.1.2 content_version=6.1.0 generated_by=brewcode:teams-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=6.1.0 generated_by=brewcode:teams-setup -->
<instructions>
@@ -1,5 +1,5 @@
#!/bin/sh
# brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewcode:teams-setup
# brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewcode:teams-setup
set -eu
USAGE="Usage: trace-ops.sh <add|read|cursor|migrate> <team_dir> [args...]"
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "brewdoc",
"version": "6.1.2",
"version": "6.1.3",
"description": "Brewdoc - Claude Code documentation tools: my-claude installation docs, memory-sync generator",
"author": {
"name": "Maksim Kochetkov",
+1 -1
View File
@@ -11,7 +11,7 @@ Convert a local Markdown file with `scripts/md_to_pdf.py`. Check dependencies wi
Follow every phase below. When a phase delegates work, use Codex collaboration with only `task_name` and `message`; treat each "Codex delegation brief" block as role and message content, not executable syntax. Use `request_user_input` for the documented user gates. Resolve `<skill-directory>`, `<plugin-root>`, `<project-root>`, and `<arguments>` before running commands.
<!-- brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewdoc:md-to-pdf -->
<!-- brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewdoc:md-to-pdf -->
# MD to PDF
+1 -1
View File
@@ -4,7 +4,7 @@
| Field | Value |
|-------|-------|
| Version | 6.1.2 |
| Version | 6.1.3 |
| Skills | 5 |
| Agents | 0 |
| Hooks | 0 |
+1 -1
View File
@@ -4,7 +4,7 @@ description: Detailed description of all brewdoc plugin commands
# Brewdoc Plugin Commands
> **Version:** 6.1.2 | **Author:** Maksim Kochetkov | **License:** MIT
> **Version:** 6.1.3 | **Author:** Maksim Kochetkov | **License:** MIT
## Quick Reference
+1 -1
View File
@@ -7,7 +7,7 @@ argument-hint: "[prompt] [status|install|upgrade|enable|disable|uninstall|purge]
allowed-tools: [Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion]
model: sonnet
---
<!-- brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewdoc:docsync-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewdoc:docsync-setup -->
# docsync-setup
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewdoc:docsync-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewdoc:docsync-setup
/**
* docsync-gate Stop hook (self-contained, project-local)
*
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewdoc:docsync-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewdoc:docsync-setup
/**
* docsync-track PostToolUse:Write|Edit|MultiEdit hook (self-contained, project-local)
*
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewdoc:docsync-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewdoc:docsync-setup
/**
* docsync-watch PostToolUse:Read hook (self-contained, project-local)
*
+1 -1
View File
@@ -7,7 +7,7 @@ argument-hint: "[prompt] <file.md> [--engine name] [\"llm prompt\"] | styles | t
allowed-tools: [Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion]
model: sonnet
---
<!-- brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewdoc:md-to-pdf -->
<!-- brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewdoc:md-to-pdf -->
# MD to PDF
+1 -1
View File
@@ -7,7 +7,7 @@ argument-hint: "[prompt] [status|install|upgrade|enable|disable|uninstall|purge]
allowed-tools: [Read, Edit, Glob, Grep, Bash, Agent, AskUserQuestion]
model: opus
---
<!-- brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewdoc:memory-sync-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewdoc:memory-sync-setup -->
# Memory Sync Generator (brewdoc:memory-sync-setup)
@@ -1,4 +1,4 @@
<!-- brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewdoc:memory-sync-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewdoc:memory-sync-setup -->
# 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
@@ -1,4 +1,4 @@
<!-- brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewdoc:memory-sync-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewdoc:memory-sync-setup -->
# Hard Sync
The two aggressive DELETION passes of `/memory-sync`. Cited by the emitted skill's Phase 2 batch prompt at
@@ -1,4 +1,4 @@
<!-- brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewdoc:memory-sync-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewdoc:memory-sync-setup -->
# Memory Guide
Where a fact BELONGS, how to compress it, and what never gets written at all. Cited by every `/memory-sync`
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "brewtools",
"version": "6.1.2",
"version": "6.1.3",
"description": "Brewtools - universal utilities for Claude Code: text optimization, humanization, secrets scanning",
"author": {
"name": "Maksim Kochetkov",
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewtools:think-short-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewtools:think-short-setup
/**
* think-short UserPromptSubmit hook (self-contained, no plugin-root deps).
*
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewtools:think-short-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewtools:think-short-setup
/**
* think-short SessionStart hook (self-contained, no plugin-root deps).
*
+1 -1
View File
@@ -4,7 +4,7 @@
| Field | Value |
|-------|-------|
| Version | 6.1.2 |
| Version | 6.1.3 |
| Skills | 14 |
| Agents | 3 |
| Hooks | 2 |
+1 -1
View File
@@ -5,7 +5,7 @@ model: inherit
maxTurns: 80
tools: Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch
doc_type: llm
version: "6.1.2"
version: "6.1.3"
content_version: "6.0.0"
generated_by: "brewtools"
last_updated: "2026-08-16"
+1 -1
View File
@@ -5,7 +5,7 @@ model: inherit
maxTurns: 80
tools: Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch
doc_type: llm
version: "6.1.2"
version: "6.1.3"
content_version: "6.0.0"
generated_by: "brewtools"
last_updated: "2026-08-16"
+1 -1
View File
@@ -7,7 +7,7 @@ color: magenta
tools: Read, Write, Edit, Glob, Grep, Bash, WebFetch
skills: brewtools:text-optimize
doc_type: llm
version: "6.1.2"
version: "6.1.3"
content_version: "6.0.0"
generated_by: "brewtools"
last_updated: "2026-08-16"
+1 -1
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.1.1 generated_by=brewtools:manager-setup
// brewcode-meta: version=6.1.3 content_version=6.1.1 generated_by=brewtools:manager-setup
// brewtools:manager-setup — HARD wall guard (PreToolUse, matcher "*").
//
// SELF-CONTAINED — copied into <project>/.claude/brewtools/manager/ by
+1 -1
View File
@@ -1,4 +1,4 @@
// brewcode-meta: version=6.1.2 content_version=6.1.0 generated_by=brewtools:manager-setup
// brewcode-meta: version=6.1.3 content_version=6.1.0 generated_by=brewtools:manager-setup
// brewtools:manager-setup — Manager mode state resolver/writer.
// State shape: { hard:boolean, level:'strict'|'balanced', mode:'full', mcpAllow?:string[] }
// + artifact metadata written by writeState: version/generated_by/last_updated.
@@ -1,4 +1,4 @@
<!-- brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewtools:agent-deadline-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewtools:agent-deadline-setup -->
# agent-deadline hooks — install / configure / remove runbook
Self-contained hook assets. The `/brewtools:agent-deadline-setup` skill copies these into a
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewtools:agent-deadline-setup
// brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewtools:agent-deadline-setup
/**
* agent-deadline SubagentStop hook (self-contained, Node built-ins only).
*
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewtools:agent-deadline-setup
// brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewtools:agent-deadline-setup
/**
* agent-deadline PreToolUse hook (self-contained, Node built-ins only).
*
@@ -1,4 +1,4 @@
<!-- brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewtools:agent-return-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewtools:agent-return-setup -->
# agent-return hooks — install / configure / remove runbook
Self-contained hook assets. The `/brewtools:agent-return-setup` skill copies these into a
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewtools:agent-return-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 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.
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewtools:agent-return-setup
// brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewtools:agent-return-setup
/**
* agent-return-contract SubagentStart hook (Node built-ins only).
*
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewtools:agent-return-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 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).
@@ -1,4 +1,4 @@
<!-- brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewtools:agent-router-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewtools:agent-router-setup -->
# agent-router hook — install / configure / remove runbook
Self-contained hook asset. The `/brewtools:agent-router-setup` skill copies it into the
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewtools:agent-router-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewtools:agent-router-setup
/**
* agent-router - PreToolUse hook for the `Agent` tool (Node built-ins only, ESM).
*
@@ -1,4 +1,4 @@
<!-- brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewtools:agent-router-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewtools:agent-router-setup -->
[PreToolUse gate | Agent tool | type: agent, matcher: Agent | agent-router tier 2]
Purpose: the project routes implementation/review work to a domain expert - a project agent in `.claude/agents/*.md`, or a plugin specialist - before falling back to a generic agent. Tier 1 (`agent-router.mjs`) already caught every deterministic case; you exist only for the ambiguous ones it deliberately let through. Mechanically BLOCKING (`ok:false` denies the Agent call) but ADVISORY in effect: the reason comes back to Claude as a tool error, so it can retry with the suggested agent - no human interruption. Tier 1 runs in parallel with you and cannot suppress you, so your own Step 1 fast exit is the only cost control that exists. The reverse also holds and is deliberate: an explicit deny from any hook wins the call, so your `{"ok": true}` cannot revive a call tier 1 already denied - the model's retry does, and tier 1's anti-loop marker lets that retry through.
+8 -7
View File
@@ -28,9 +28,9 @@ The block applies to that one turn only. When the HARD wall is armed, the Manage
|---------|-------------|
| `/brewtools:manager-setup` | No argument = `status`. |
| `/brewtools:manager-setup status` | Print wall state (armed/disarmed, level, registered?), prompt sources, and both injected blocks |
| `/brewtools:manager-setup install` | Install the HARD wall guard into this project + arm it. `/reload` only on FIRST install. |
| `/brewtools:manager-setup install` | Install the HARD wall guard into this project. Asks to confirm before arming (`AskUserQuestion`) unless your prompt already said so explicitly (e.g. "enable the hard wall") — plain `install` or autonomy phrasing never counts; declining still installs and leaves `state.hard=false`. `/reload` only on FIRST install. |
| `/brewtools:manager-setup upgrade` | Re-copy the guard from the current plugin version and re-register if missing. `hard`/`level` preserved; aborts if not installed. |
| `/brewtools:manager-setup enable` | Arm an already-installed wall (state flip only). Not installed → routes you to `install`. |
| `/brewtools:manager-setup enable` | Arm an already-installed wall (state flip only) — same confirm gate as `install`; declining aborts with nothing changed. Not installed → routes you to `install`. |
| `/brewtools:manager-setup disable` | Disarm the HARD wall (state flip only; registration stays in `settings.local.json`). Guard no-ops until re-armed. |
| `/brewtools:manager-setup uninstall` | Deregister the wall from `settings.local.json` + delete the copied guard. Auto-disarms first. State and prompt overrides KEPT. Run `/reload` after. |
| `/brewtools:manager-setup purge [--scope global\|project]` | `uninstall` + delete `state.json` and the prompt override(s). The only destructive action. |
@@ -85,9 +85,9 @@ The HARD wall is an **installed-into-the-project** `PreToolUse` guard, NOT a plu
| Registration | `<cwd>/.claude/settings.local.json``PreToolUse "*"` entry | Personal, gitignored. Persistent plumbing; harmless inert when wall is off. |
| Runtime kill-switch | `<cwd>/.claude/brewtools/manager/state.json` `{hard}` | `enable`/`disable` flip this only — never touch `settings.local.json` |
`install` = copy guard + off-switch CLI + register (idempotent) + arm. `/reload` only on first install.
`install` = copy guard + off-switch CLI + register (idempotent), then arm ONLY on explicit confirmation (`AskUserQuestion` "Yes, arm it now", or explicit wording already in the prompt) — declining still installs but leaves `hard=false`. `/reload` only on first install.
`upgrade` = re-copy both files + re-register if missing + restamp `state.json`'s `version`/`generated_by`/`last_updated` (empty-partial `writeState`, so `hard`/`level` survive verbatim — that is what clears the `stale` verdict `setup-status` reads off the same key). Aborts when not installed. Also backfills the off-switch CLI into projects installed before it existed.
`enable` / `disable` = flip `state.hard` only. Guard stays registered; while disabled it no-ops.
`enable` / `disable` = flip `state.hard` only. `enable` is gated by the same confirm step as `install` — declining aborts, nothing changes. Guard stays registered; while disabled it no-ops.
`uninstall` = TWO Bash calls: the bare exempt disarm, then deregister + delete copies. Then `/reload`.
`purge` = `uninstall` + delete `.claude/brewtools/manager/` (state + prompt overrides).
@@ -154,10 +154,11 @@ Universal fallback: delegate to a subagent — `Task`/`Agent` are always allowed
# Architecture-first, combine with Manager delegation:
++m ++a implement the new caching layer
# Hard wall — install and arm for this project
# Hard wall — install for this project (arming requires confirmation)
/brewtools:manager-setup install
# → copies guard, registers in settings.local.json, arms state.hard=true
# → if first install: "run /reload to activate"
# → copies guard, registers in settings.local.json
# → asks "Arm the HARD wall now?" unless your prompt already said so explicitly; Yes arms state.hard=true, No leaves it disarmed
# → if newly registered: "run /reload to activate"
# Tighten to strict (no Bash at all in main session)
/brewtools:manager-setup level strict
+50 -11
View File
@@ -19,7 +19,7 @@ model: sonnet
> - `++rr` → Regression Review discipline (`review-regression`) — after each significant phase: no regression + project standard + correctness; two-phase review→double-check→fix; final cross-review at task end. Tested before `++r`.
> - `++r` → Review discipline (`review-double`) — two-phase multi-agent review→double-check→fix after each significant change; codeword-only (no ambient/wall injection).
> - When the HARD wall is ON, the Manager (full) block is ALSO auto-injected on EVERY turn — no codeword needed. Codewords and wall injection are independent.
> 2. **HARD wall — opt-in, this skill only, PER-PROJECT, INSTALLED-INTO-THE-PROJECT, persistent.** The wall is **NOT** a plugin hook. `install` does two things: it **installs** a self-contained `PreToolUse` guard into THIS project (copies the guard file + idempotently registers it in `<cwd>/.claude/settings.local.json`) and **arms** it by flipping `state.hard=true`. The registered guard then **physically denies** mutating tools (Write/Edit/Bash/WebFetch/...) in the **main session**, leaving only delegate/read/track. Subagents stay fully free (`agent_id` linchpin). `enable` re-arms an already-installed wall; `disable` only flips `state.hard=false` — registration stays, the guard no-ops. `uninstall` removes the registration and the copied guard; `purge` also deletes the state file and the prompt overrides. The wall lives in project state + project settings, defaults OFF, persists until `disable`/`uninstall`. There is **no codeword** for the wall.
> 2. **HARD wall — opt-in, this skill only, PER-PROJECT, INSTALLED-INTO-THE-PROJECT, persistent.** The wall is **NOT** a plugin hook. `install` does two things: it **installs** a self-contained `PreToolUse` guard into THIS project (copies the guard file + idempotently registers it in `<cwd>/.claude/settings.local.json`) and, **only after the user has explicitly confirmed arming** (P1 arm-confirmation gate — an `AskUserQuestion` answered "Yes, arm it now", or explicit wording like "enable the hard wall"/"включи хард уолл" already in the user's own prompt; the bare verb `install`/`установи` and any autonomy phrasing like "decide everything yourself"/"автономно" NEVER count as confirmation), **arms** it by flipping `state.hard=true`. Declining still installs the guard, leaving `state.hard=false`. The registered guard then **physically denies** mutating tools (Write/Edit/Bash/WebFetch/...) in the **main session**, leaving only delegate/read/track. Subagents stay fully free (`agent_id` linchpin). `enable` re-arms an already-installed wall — same confirmation gate, decline aborts with nothing changed; `disable` only flips `state.hard=false` — registration stays, the guard no-ops. `uninstall` removes the registration and the copied guard; `purge` also deletes the state file and the prompt overrides. The wall lives in project state + project settings, defaults OFF, persists until `disable`/`uninstall`. There is **no codeword** for the wall.
>
> The two layers are orthogonal: the wall enforces delegation by removing hands; the codewords/prompt-text shape the Manager mindset. Either can be used alone.
>
@@ -172,6 +172,11 @@ Actions, canonical order: `status`, `install`, `upgrade`, `enable`, `disable`, `
> `on` / `off` / `reset` / `setup` / `remove` are REMOVED as command words. `on` and `off` survive only as free-text synonyms routed to `enable` / `disable` above; `reset` routes to `purge`. Never print them as commands.
> **Arming is never automatic.** `install`, `enable`, and `hard-one-shot` are the only actions that can
> write `state.hard=true`. Resolving the action (even from an explicit keyword like `install`, or
> autonomy phrasing like "autonomous, decide everything yourself"/"автономно выбирай сам") is NOT
> confirmation to arm — that confirmation is a separate, mandatory P1 gate. See P1 below.
Prompt-text override scope (ONLY for `edit`/`purge`): default = `project`. `--scope global` OR `глобально` / `globally``global`. This scope does NOT apply to `install`/`upgrade`/`enable`/`disable`/`uninstall`/`level` (those are project-only).
---
@@ -186,6 +191,28 @@ If the action is ambiguous or signals conflict (e.g. enable + disable, a task th
> Distinguish carefully: `hard-one-shot` (task + "в хард режиме"/"in hard mode") flips the wall and auto-reverts; `manager-run` (task + "от роли менеджера"/"as manager") never touches the wall, discipline by prompt only. If both/neither marker is present and a task exists, ask.
**Arm-confirmation gate (unconditional — not only on ambiguity).** `install`, `enable`, and
`hard-one-shot` are the only actions that can write `state.hard=true`. Before P2 runs any of them,
check whether the user's OWN prompt already carries EXPLICIT confirming wording: the words "hard
wall" / "хард уолл" / "стену" TOGETHER with an enable/arm verb ("enable"/"arm"/"включи"/"заarmи"),
e.g. "enable the hard wall", "arm the wall", "включи Hard Wall", "включи хард уолл", "заarmи стену".
The bare skill verb alone (`install`/`установи`/`enable`/`включи` with no "wall" wording) does
**not** count, and no autonomy-permission phrasing ever counts ("autonomous, decide everything
yourself", "автономно", "выбирай сам" — these NEVER satisfy the gate). If explicit wording is
present, treat the arm as already confirmed and skip the question. Otherwise ask exactly ONE
`AskUserQuestion` before P2:
- `install`: "Arm the HARD wall in this project now? It will block Write/Edit/Bash in the MAIN
session (subagents stay free) until disabled." — options `Yes, arm it now` / `No, just install
(stay disarmed)`.
- `enable` / `hard-one-shot`: the same question, options `Yes, arm it now` / `No, cancel`.
Record the outcome as `ARM` (`true`/`false`) for P2:
- `install` proceeds either way — it always copies the guard and registers the hook; `ARM` only
decides whether `state.hard` is written `true` or `false`. `ARM=false` → report "installed but
NOT armed — run `enable` (or confirm next time) to arm it."
- `enable` / `hard-one-shot`: `ARM=false` aborts the whole action before running anything — do not
touch `state.hard`, report plainly that nothing changed.
---
## P2: Execute
@@ -198,8 +225,8 @@ Print the `## Prompt contract` PLAN block first — INPUT/MODE from P0, SCOPE na
### install (INSTALL + ARM the HARD wall — project only)
`install` is a five-step sequence: (1) arm state, (2) copy the guard into the project, (3) idempotently register it in `settings.local.json`, (4) turn the task-graph tools on in that same file, (5) report whether a `/reload` is needed. All five run in ONE node Bash block so the registration is atomic and self-contained. The block:
- arms `state.hard=true` via `writeState('project', {hard:true})`,
`install` is a five-step sequence: (1) set arm state per the P1 confirm gate (`ARM`), (2) copy the guard into the project, (3) idempotently register it in `settings.local.json`, (4) turn the task-graph tools on in that same file, (5) report whether a `/reload` is needed. All five run in ONE node Bash block so the registration is atomic and self-contained. **`ARM` (`true`/`false`) is resolved by the P1 arm-confirmation gate — substitute it into the block below before running, same as `LEVEL` in the `level` action.** The block:
- sets `state.hard = (ARM === 'true')` via `writeState('project', {hard:arm})` — arms only when P1 confirmed,
- copies `$BT_ROOT/hooks/hardmode-guard.mjs``<cwd>/.claude/brewtools/manager/hardmode-guard.mjs` **and** `$BT_ROOT/hooks/lib/manager-state.mjs``<cwd>/.claude/brewtools/manager/manager-state.mjs` (both overwritten on EVERY `install`, so plugin updates propagate; the second one is the off-switch CLI),
- read-merge-atomic-writes `<cwd>/.claude/settings.local.json`, adding a `PreToolUse` matcher `"*"` entry that runs `node <ABS copied-guard path>` tagged `brewtools-manager-guard`, but ONLY if no entry already points at the manager guard (idempotent — running twice = ONE entry),
- in that SAME merge sets `env.CLAUDE_CODE_ENABLE_TODO_TOOLS = "1"` when Claude Code is >= 2.1.233 — creating the `env` object if absent, preserving every other key. This is unconditional and never asks: from 2.1.233 `TaskCreate`/`TaskUpdate`/`TaskGet`/`TaskList` are gated OFF by default, and the manager framework has no task graph without them. Below 2.1.233 the var does nothing and the tools are on anyway, so the write is skipped and the block says so,
@@ -214,10 +241,12 @@ test -f "$BT_ROOT/hooks/hardmode-guard.mjs" || { echo "❌ BT_ROOT invalid: $BT_
ROOT=$(if [ -n "$CLAUDE_PROJECT_DIR" ] && [ -d "$CLAUDE_PROJECT_DIR" ]; then printf %s "$CLAUDE_PROJECT_DIR"; elif r=$(git rev-parse --show-toplevel 2>/dev/null) && [ -n "$r" ]; then printf %s "$r"; else d=$PWD; while [ "$d" != "/" ]; do if [ -d "$d/.git" ] || [ -d "$d/.claude" ]; then printf %s "$d"; break; fi; d=$(dirname "$d"); done; fi)
[ -n "$ROOT" ] || { echo "❌ cannot resolve project root — looked for CLAUDE_PROJECT_DIR, git toplevel, then .git/.claude above $PWD; nothing written"; exit 1; }
CCVER=$(claude --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true)
ARM=<true|false>
node --input-type=module -e "
import {writeState} from '${BT_ROOT}/hooks/lib/manager-state.mjs';
import fs from 'node:fs'; import path from 'node:path';
const cwd = '${ROOT}';
const arm = '${ARM}' === 'true';
const src = '${BT_ROOT}/hooks/hardmode-guard.mjs';
const dir = path.join(cwd, '.claude', 'brewtools', 'manager');
const guard = path.join(dir, 'hardmode-guard.mjs');
@@ -232,8 +261,8 @@ const todoToolsGated = geVersion(ccVer, [2,1,233]);
const todoTools = todoToolsGated ? 'enabled (CC ' + ccVer + ')'
: ccVer ? 'skipped — CC ' + ccVer + ' predates the 2.1.233 gate, task tools are on by default'
: 'skipped — could not read the Claude Code version; on 2.1.233+ set env.CLAUDE_CODE_ENABLE_TODO_TOOLS=1 by hand';
// 1. arm
await writeState('project', {hard:true}, cwd);
// 1. arm only if P1 confirmed
await writeState('project', {hard:arm}, cwd);
// 2. copy guard + off-switch CLI (overwrite each install)
fs.mkdirSync(dir, {recursive:true});
fs.copyFileSync(src, guard);
@@ -271,8 +300,8 @@ try {
fs.writeFileSync(tmp, JSON.stringify(cfg, null, 2) + '\n', 'utf8');
fs.renameSync(tmp, settings);
} finally { fs.rmSync(lock, {recursive:true, force:true}); }
console.log(JSON.stringify({armed:true, guard, helper, settings, newlyRegistered, todoTools, root:cwd}));
" && echo "✅ wall installed + armed" || echo "❌ FAILED install wall"
console.log(JSON.stringify({armed:arm, guard, helper, settings, newlyRegistered, todoTools, root:cwd}));
" && echo "✅ wall install step done (see armed field above)" || echo "❌ FAILED install wall"
```
> **Root, lock, backup — the three invariants every settings-writing block here shares.**
@@ -286,9 +315,10 @@ console.log(JSON.stringify({armed:true, guard, helper, settings, newlyRegistered
> ABORTS before anything is staged — a malformed settings file is never "the file is empty".
After the block:
- Tell the user the exit command verbatim, with the real absolute path: `node <ABS project root>/.claude/brewtools/manager/manager-state.mjs set hard=false` — or just `/brewtools:manager-setup disable`, which runs exactly that.
- If `armed:true` → tell the user the exit command verbatim, with the real absolute path: `node <ABS project root>/.claude/brewtools/manager/manager-state.mjs set hard=false` — or just `/brewtools:manager-setup disable`, which runs exactly that.
- If `armed:false` → tell the user plainly: **installed but NOT armed** — the guard is in place but `state.hard=false`; run `/brewtools:manager-setup enable` (or answer "Yes, arm it now" next time) to arm it.
- If `newlyRegistered:true` → tell the user verbatim: `Hook installed in .claude/settings.local.json — run /reload (or restart the session) for the wall to take effect.`
- If `newlyRegistered:false` → the entry already existed; the state flip alone armed the wall — no reload needed.
- If `newlyRegistered:false` → the entry already existed; a reload is only needed if `armed:true` just flipped a previously-disarmed state.
- Report `todoTools` in one line: `enabled` → say `TaskCreate/TaskUpdate/TaskGet/TaskList enabled via env.CLAUDE_CODE_ENABLE_TODO_TOOLS in .claude/settings.local.json`; `skipped` → print the reason verbatim and move on.
> The command in the registered entry uses an ABSOLUTE path to the copied guard and a `# brewtools-manager-guard` tag comment so `uninstall` can find it. Scope is always `project` — there is no global wall, never pass `'global'`.
@@ -387,6 +417,11 @@ Surface the `/reload` note only when `newlyRegistered:true`. Report `todoTools`
### enable (ARM an installed wall — state flip only)
**Gated by P1.** This block only runs if the P1 arm-confirmation gate resolved `ARM=true` (explicit
wording in the user's prompt, or an `AskUserQuestion` answered "Yes, arm it now"). If P1 resolved
`ARM=false`, do NOT run this block at all — report plainly that arming was declined and nothing
changed, and stop.
`enable` flips `state.hard=true` and nothing else. If the wall was never installed there is no guard to arm, so the block reports `notInstalled` instead of writing a state that no hook reads — route the user to `install`.
**EXECUTE** using Bash tool:
@@ -761,9 +796,13 @@ if (!fs.existsSync(dest)) {
### hard-one-shot (`<task> в хард режиме` / `<task> in hard mode`)
The user gave a REAL task plus a hard-mode marker. Run it once under the wall, then auto-revert:
The user gave a REAL task plus a hard-mode marker. **Gated by P1**: this whole action only proceeds
if the P1 arm-confirmation gate resolved `ARM=true` (explicit wording, or "Yes, arm it now"). If P1
resolved `ARM=false`, abort the arm entirely — do not turn the wall on, do not run the task under
it, report plainly that nothing changed (suggest `manager-run` if they want the task done without
the wall). Otherwise, run it once under the wall, then auto-revert:
1. **Turn the wall ON** — run the `install` block (it installs the guard + the off-switch CLI and arms), or the `enable` block if the wall is already installed.
1. **Turn the wall ON** — run the `install` block with `ARM=true` (it installs the guard + the off-switch CLI and arms), or the `enable` block if the wall is already installed.
2. **Act as Manager** for the task: resolve the `full` block, treat it as your operating contract, **build a TaskGraph** (`TaskCreate`/`TaskUpdate`) and **delegate** to the best-matching expert agent(s) in parallel where independent. **Never implement by hand** — and with the wall ON, mutating tools are denied anyway.
3. **Auto-revert** — when the task is complete, **turn the wall back OFF** with the `disable` command, VERBATIM (the wall is armed at this point, so nothing else gets through): `node <ABS_CWD>/.claude/brewtools/manager/manager-state.mjs set hard=false`.
@@ -49,6 +49,11 @@ only in what they do to the wall:
If a task is present but the marker is ambiguous (both or unclear), ask via
AskUserQuestion: hard-one-shot vs manager-run.
> Resolving `install`/`enable`/`hard-one-shot` here only picks the ACTION. None of them may write
> `state.hard=true` without going through the separate P1 arm-confirmation gate in SKILL.md —
> the bare verb (`install`/`enable`/`установи`/`включи`) and autonomy phrasing never confirm arming
> on their own; see SKILL.md P1.
## Scope (prompt-text overrides ONLY)
Flag `--scope global|project`, default `project`. Applies ONLY to `edit`/`purge`
+1 -1
View File
@@ -7,7 +7,7 @@ argument-hint: "[prompt] [status|install|upgrade|enable|disable|uninstall|purge]
allowed-tools: [Read, Write, Edit, Bash, Glob, Grep, Agent, AskUserQuestion]
model: opus
---
<!-- brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewtools:task-board-setup -->
<!-- brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewtools:task-board-setup -->
[DICT: TT=task-tracker agent (generated), TB=task-board skill (generated), BRD=board.md, FEAT=.claude/features, EXCL=source-path exclusions, REL=release style (vX.Y.Z tag | commit SHA | no tag), DOM=domain id segment, FM=frontmatter, TS=task-spec skill (generated), SPEC_MODE=spec+design layer opt-in, PS=status phase, PU=upgrade phase, PR=uninstall/purge phase]
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewtools:think-short-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewtools:think-short-setup
/**
* think-short UserPromptSubmit hook (self-contained, no plugin-root deps).
*
@@ -1,4 +1,4 @@
<!-- think-short brewcode-meta: version=6.1.2 content_version=5.6.0 generated_by=brewtools:think-short-setup -->
<!-- think-short brewcode-meta: version=6.1.3 content_version=5.6.0 generated_by=brewtools:think-short-setup -->
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.
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=6.0.0 generated_by=brewtools:think-short-setup
// brewcode-meta: version=6.1.3 content_version=6.0.0 generated_by=brewtools:think-short-setup
/**
* think-short SessionStart hook (self-contained, no plugin-root deps).
*
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// brewcode-meta: version=6.1.2 content_version=5.6.1 generated_by=brewtools:think-short-setup
// brewcode-meta: version=6.1.3 content_version=5.6.1 generated_by=brewtools:think-short-setup
/**
* think-short SubagentStart hook (self-contained, no plugin-root deps).
*
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "brewui",
"version": "6.1.2",
"version": "6.1.3",
"description": "Brewui -- placeholder for future UI/visual/creative tools",
"author": {
"name": "Maksim Kochetkov",
+1 -1
View File
@@ -4,7 +4,7 @@
| Field | Value |
|-------|-------|
| Version | 6.1.2 |
| Version | 6.1.3 |
| Skills | 0 |
## Install