/besimple-broccoli-blind
Non-interactive wrapper: plan-sketch -> auto-pick recommended options -> plan-write -> plan-critique-loop -> implement-from-plan -> claude-simplify-wrapper -> dedup -> code-review-loop. No PR creation and no Linear comments.
$ npx -y skills add besimple-oss/broccoli --skill besimple-broccoli-blind --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/besimple-broccoli-blind
Context preview
The summary Claude sees to decide when to auto-load this skill.
Non-interactive wrapper: plan-sketch -> auto-pick recommended options -> plan-write -> plan-critique-loop -> implement-from-plan -> claude-simplify-wrapper -> dedup -> code-review-loop. No PR creation and no Linear comments.
SKILL.md
besimple-broccoli-blind.SKILL.mdname: besimple-broccoli-blind
description: "Non-interactive wrapper: plan-sketch -> auto-pick recommended options -> plan-write -> plan-critique-loop -> implement-from-plan -> claude-simplify-wrapper -> dedup -> code-review-loop. No PR creation and no Linear comments."
Sketch -> Auto-select -> Plan -> Critique -> Implement -> Simplify -> Dedup -> Review (blind wrapper)
This is the automation-safe variant of `besimple-broccoli`.
- It uses the same planning + implementation flow.
- It automatically chooses **recommended** clarification options.
- It does **not** open PRs and does **not** post Linear comments.
Preconditions
- Confirm repo: `git rev-parse --show-toplevel`
- Ensure CLIs: `codex`, `claude`
- Ensure git commits are possible (`user.name` / `user.email` configured)
Required subskills
- `plan-sketch`
- `plan-write`
- `plan-critique-loop`
- `implement-from-plan`
- `claude-simplify-wrapper`
- `dedup`
- `code-review-loop`
Workflow
0. **Prepare subagent logs and heartbeat**
LOG_DIR="/tmp/codex-subagent-logs/$(basename "$PWD")"
HEARTBEAT_SECONDS=60
SUBAGENT_TIMEOUT_SECONDS=7200
mkdir -p "${LOG_DIR}"
SKETCH_LOG="${LOG_DIR}/plan-sketch.log"
WRITE_LOG="${LOG_DIR}/plan-write.log"
CRITIQUE_LOG="${LOG_DIR}/plan-critique.log"
SIMPLIFY_LOG="${LOG_DIR}/simplify.log"
DEDUP_LOG="${LOG_DIR}/dedup.log"
REVIEW_LOG="${LOG_DIR}/code-review.log"
: > "${SKETCH_LOG}"
: > "${WRITE_LOG}"
: > "${CRITIQUE_LOG}"
: > "${SIMPLIFY_LOG}"
: > "${DEDUP_LOG}"
: > "${REVIEW_LOG}"Resolve installed skill directories (so the wrapper works from any repo):
resolve_skill_dir() {
local name="$1"
local repo_root=""
repo_root="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
local candidates=(
"$repo_root/.agents/skills/$name"
"$repo_root/.claude/skills/$name"
"$HOME/.agents/skills/$name"
"$HOME/.codex/skills/$name"
"$HOME/.claude/skills/$name"
)
for d in "${candidates[@]}"; do
if [[ -d "$d" ]]; then
echo "$d"
return 0
fi
done
echo "Error: skill '$name' not found in repo-scoped or user-scoped skill dirs." >&2
return 1
}
BESIMPLE_BROCCOLI_BLIND_SKILL_DIR="$(resolve_skill_dir besimple-broccoli-blind)"
PLAN_SKETCH_SKILL_DIR="$(resolve_skill_dir plan-sketch)"
PLAN_WRITE_SKILL_DIR="$(resolve_skill_dir plan-write)"
PLAN_CRITIQUE_LOOP_SKILL_DIR="$(resolve_skill_dir plan-critique-loop)"
SIMPLIFY_SKILL_DIR="$(resolve_skill_dir claude-simplify-wrapper)"
DEDUP_SKILL_DIR="$(resolve_skill_dir dedup)"
CODE_REVIEW_LOOP_SKILL_DIR="$(resolve_skill_dir code-review-loop)"1. **Write `IDEA_FILE` from user input**
- `IDEA_FILE="${LOG_DIR}/idea.md"`
- Preserve the user message verbatim.
2. **Run `plan-sketch` and auto-select recommended options**
SKETCH_DOC=$(python3 "$PLAN_SKETCH_SKILL_DIR/scripts/run_plan_sketch.py" --idea-file "${IDEA_FILE}" --output "${LOG_DIR}/sketch.md" --timeout "${SUBAGENT_TIMEOUT_SECONDS}" --progress-log "${SKETCH_LOG}" --heartbeat-seconds "${HEARTBEAT_SECONDS}")Extract the last user-questions block:
QUESTIONS_BLOCK=$(awk '
/^BEGIN_USER_QUESTIONS$/ {in_block=1; block=""; next}
/^END_USER_QUESTIONS$/ {in_block=0; last=block; next}
in_block {block = block $0 ORS}
END {printf "%s", last}
' "${SKETCH_LOG}")Auto-pick recommended options by reading `QUESTIONS_BLOCK` directly in the LLM context (no shell/regex parsing):
- Set `AUTO_SELECTIONS` to a comma-separated list of all labels whose option text ends with `(Recommended)` (for example: `1a, 2c`).
- Do not compute `AUTO_SELECTIONS` with `awk`, `jq`, or `python`.
- If no recommended options are present, continue to empty feedback.
Save synthetic feedback:
USER_FEEDBACK_FILE="${LOG_DIR}/user-feedback.md"
cat > "${USER_FEEDBACK_FILE}" <<'FEEDBACK'
## User feedback (verbatim)
<auto-populated by wrapper>
FEEDBACK
printf "%s\n" "${AUTO_SELECTIONS}" >> "${USER_FEEDBACK_FILE}"Append to `IDEA_FILE`:
- Clarification mode: automatic recommended picks
- Selected labels: `${AUTO_SELECTIONS}`
3. **Create working branch**
- Ensure clean tree:
if [ -n "$(git status --porcelain)" ]; then
echo "Working tree is not clean. Aborting before branch creation." >&2
exit 1
fi- Choose `BASE_REF` explicitly:
- If the user explicitly asked for a base branch/commit in the request, use that.
- Otherwise, derive the default remote branch:
DEFAULT_BRANCH="$(git symbolic-ref --quiet --short refs/remotes/origin/HEAD 2>/dev/null | sed 's#^origin/##')"
if [ -z "${DEFAULT_BRANCH}" ]; then
if git show-ref --verify --quiet refs/remotes/origin/main; then DEFAULT_BRANCH=main;
elif git show-ref --verify --quiet refs/remotes/origin/master; then DEFAULT_BRANCH=master;
else
echo "Could not determine origin default branch (origin/HEAD, main, master). Aborting." >&2
exit 1
fi
fi
BASE_REF="origin/${DEFAULT_BRANCH}"- Choose branch name explicitly from clarified scope:
- Use `task/` prefix.
- Build a short slug from the clarified goal in `IDEA_FILE` (letters/numbers/dashes only, concise and specific).
- Example: `task/auto-select-recommended-options`.
- Sanitize, avoid collisions, and create the branch:
BRANCH_NAME_SEED="task/<clarified-scope-slug>"
BRANCH_NAME="${BRANCH_NAME_SEED}"
BRANCH_NAME="$(echo "${BRANCH_NAME}" | tr '[:upper:]' '[:lower:]' | sed -E 's@[^a-z0-9._/-]+@-@g; s@/+@/@g; s@^-+@@; s@-+$@@; s@^/+@@; s@/+$@@')"
if [ -z "${BRANCH_NAME}" ]; then
echo "Branch name is empty after sanitization. Aborting." >&2
exit 1
fi
BRANCH="${BRANCH_Read more
name: besimple-broccoli-blind description: "Non-interactive wrapper: plan-sketch -> auto-pick recommended options -> plan-write -> plan-critique-loop -> implement-from-plan -> claude-simplify-wrapper -> dedup -> code-review-loop. No PR creation and no Linear comments."
Sketch -> Auto-select -> Plan -> Critique -> Implement -> Simplify -> Dedup -> Review (blind wrapper)
This is the automation-safe variant of `besimple-broccoli`.
- It uses the same planning + implementation flow.
- It automatically chooses **recommended** clarification options.
- It does **not** open PRs and does **not** post Linear comments.
Preconditions
- Confirm repo: `git rev-parse --show-toplevel`
- Ensure CLIs: `codex`, `claude`
- Ensure git commits are possible (`user.name` / `user.email` configured)
Required subskills
- `plan-sketch`
- `plan-write`
- `plan-critique-loop`
- `implement-from-plan`
- `claude-simplify-wrapper`
- `dedup`
- `code-review-loop`
Workflow
0. **Prepare subagent logs and heartbeat**
LOG_DIR="/tmp/codex-subagent-logs/$(basename "$PWD")"
HEARTBEAT_SECONDS=60
SUBAGENT_TIMEOUT_SECONDS=7200
mkdir -p "${LOG_DIR}"
SKETCH_LOG="${LOG_DIR}/plan-sketch.log"
WRITE_LOG="${LOG_DIR}/plan-write.log"
CRITIQUE_LOG="${LOG_DIR}/plan-critique.log"
SIMPLIFY_LOG="${LOG_DIR}/simplify.log"
DEDUP_LOG="${LOG_DIR}/dedup.log"
REVIEW_LOG="${LOG_DIR}/code-review.log"
: > "${SKETCH_LOG}"
: > "${WRITE_LOG}"
: > "${CRITIQUE_LOG}"
: > "${SIMPLIFY_LOG}"
: > "${DEDUP_LOG}"
: > "${REVIEW_LOG}"Resolve installed skill directories (so the wrapper works from any repo):
resolve_skill_dir() {
local name="$1"
local repo_root=""
repo_root="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
local candidates=(
"$repo_root/.agents/skills/$name"
"$repo_root/.claude/skills/$name"
"$HOME/.agents/skills/$name"
"$HOME/.codex/skills/$name"
"$HOME/.claude/skills/$name"
)
for d in "${candidates[@]}"; do
if [[ -d "$d" ]]; then
echo "$d"
return 0
fi
done
echo "Error: skill '$name' not found in repo-scoped or user-scoped skill dirs." >&2
return 1
}
BESIMPLE_BROCCOLI_BLIND_SKILL_DIR="$(resolve_skill_dir besimple-broccoli-blind)"
PLAN_SKETCH_SKILL_DIR="$(resolve_skill_dir plan-sketch)"
PLAN_WRITE_SKILL_DIR="$(resolve_skill_dir plan-write)"
PLAN_CRITIQUE_LOOP_SKILL_DIR="$(resolve_skill_dir plan-critique-loop)"
SIMPLIFY_SKILL_DIR="$(resolve_skill_dir claude-simplify-wrapper)"
DEDUP_SKILL_DIR="$(resolve_skill_dir dedup)"
CODE_REVIEW_LOOP_SKILL_DIR="$(resolve_skill_dir code-review-loop)"1. **Write `IDEA_FILE` from user input**
- `IDEA_FILE="${LOG_DIR}/idea.md"`
- Preserve the user message verbatim.
2. **Run `plan-sketch` and auto-select recommended options**
SKETCH_DOC=$(python3 "$PLAN_SKETCH_SKILL_DIR/scripts/run_plan_sketch.py" --idea-file "${IDEA_FILE}" --output "${LOG_DIR}/sketch.md" --timeout "${SUBAGENT_TIMEOUT_SECONDS}" --progress-log "${SKETCH_LOG}" --heartbeat-seconds "${HEARTBEAT_SECONDS}")Extract the last user-questions block:
QUESTIONS_BLOCK=$(awk '
/^BEGIN_USER_QUESTIONS$/ {in_block=1; block=""; next}
/^END_USER_QUESTIONS$/ {in_block=0; last=block; next}
in_block {block = block $0 ORS}
END {printf "%s", last}
' "${SKETCH_LOG}")Auto-pick recommended options by reading `QUESTIONS_BLOCK` directly in the LLM context (no shell/regex parsing):
- Set `AUTO_SELECTIONS` to a comma-separated list of all labels whose option text ends with `(Recommended)` (for example: `1a, 2c`).
- Do not compute `AUTO_SELECTIONS` with `awk`, `jq`, or `python`.
- If no recommended options are present, continue to empty feedback.
Save synthetic feedback:
USER_FEEDBACK_FILE="${LOG_DIR}/user-feedback.md"
cat > "${USER_FEEDBACK_FILE}" <<'FEEDBACK'
## User feedback (verbatim)
<auto-populated by wrapper>
FEEDBACK
printf "%s\n" "${AUTO_SELECTIONS}" >> "${USER_FEEDBACK_FILE}"Append to `IDEA_FILE`:
- Clarification mode: automatic recommended picks
- Selected labels: `${AUTO_SELECTIONS}`
3. **Create working branch**
- Ensure clean tree:
if [ -n "$(git status --porcelain)" ]; then
echo "Working tree is not clean. Aborting before branch creation." >&2
exit 1
fi- Choose `BASE_REF` explicitly:
- If the user explicitly asked for a base branch/commit in the request, use that.
- Otherwise, derive the default remote branch:
DEFAULT_BRANCH="$(git symbolic-ref --quiet --short refs/remotes/origin/HEAD 2>/dev/null | sed 's#^origin/##')"
if [ -z "${DEFAULT_BRANCH}" ]; then
if git show-ref --verify --quiet refs/remotes/origin/main; then DEFAULT_BRANCH=main;
elif git show-ref --verify --quiet refs/remotes/origin/master; then DEFAULT_BRANCH=master;
else
echo "Could not determine origin default branch (origin/HEAD, main, master). Aborting." >&2
exit 1
fi
fi
BASE_REF="origin/${DEFAULT_BRANCH}"- Choose branch name explicitly from clarified scope:
- Use `task/` prefix.
- Build a short slug from the clarified goal in `IDEA_FILE` (letters/numbers/dashes only, concise and specific).
- Example: `task/auto-select-recommended-options`.
- Sanitize, avoid collisions, and create the branch:
BRANCH_NAME_SEED="task/<clarified-scope-slug>"
BRANCH_NAME="${BRANCH_NAME_SEED}"
BRANCH_NAME="$(echo "${BRANCH_NAME}" | tr '[:upper:]' '[:lower:]' | sed -E 's@[^a-z0-9._/-]+@-@g; s@/+@/@g; s@^-+@@; s@-+$@@; s@^/+@@; s@/+$@@')"
if [ -z "${BRANCH_NAME}" ]; then
echo "Branch name is empty after sanitization. Aborting." >&2
exit 1
fi
BRANCH="${BRANCH_AI teammates for your engineering loop. Broccoli turns Linear tickets into shipped PRs — powered by Claude and Codex, running on your own Google Cloud.
Repo: besimple-oss/broccoli
Other skills on broccoli.
- /besimple-tiny-broccoli
Small-change wrapper: implement → run repo checks → atomic commit → run dedup (BASE_SHA..HEAD).
Open skill - /claude-simplify-wrapper
Run Claude's built-in /simplify skill on BASE_SHA..HEAD, validate checks, and commit.
Open skill - /code-review-loop
Iterative review+fix loop for BASE_SHA..HEAD: generate findings, apply accepted fixes, run checks, commit, and re-review up to 3 iterations or until clean.
Open skill - /dedup
Dedupe-only pass for BASE_SHA..HEAD: remove duplicate code introduced by the diff or reuse existing shared utils; applies changes + commits.
Open skill - /implement-from-plan
Implement an approved plan doc step-by-step in application or systems codebases, including Node/TS, Python, and C/C++ repos (build/lint/test per step, atomic commits, progress log hygiene). Use when you have a plan/*.md and want to execute it.
Open skill - /plan-critique-loop
Critique and revise an existing plan doc up to 3 iterations, using accept/reject triage and stopping early when no important feedback remains. Use when refining a plan/*.md before implementation.
Open skill

