/besimple-tiny-broccoli
Small-change wrapper: implement → run repo checks → atomic commit → run dedup (BASE_SHA..HEAD).
$ npx -y skills add besimple-oss/broccoli --skill besimple-tiny-broccoli --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-tiny-broccoli
Context preview
The summary Claude sees to decide when to auto-load this skill.
Small-change wrapper: implement → run repo checks → atomic commit → run dedup (BASE_SHA..HEAD).
SKILL.md
besimple-tiny-broccoli.SKILL.mdname: besimple-tiny-broccoli
description: "Small-change wrapper: implement → run repo checks → atomic commit → run dedup (BASE_SHA..HEAD)."
Tiny Broccoli: Implement → Check → Commit → Dedup
Use this when the user request is already clear and you can safely implement directly (no plan docs), but you still want: 1) repo checks to be green, and 2) a dedupe pass over the resulting diff.
Not for
- Big/ambiguous work that needs research, design decisions, or a multi-phase plan.
- “Refactor the whole repo” style requests.
Preconditions (hard stop if missing)
- Confirm you are in the intended repo: `git rev-parse --show-toplevel`
- Start from a clean working tree: `git status --porcelain` is empty
- Ensure git can create commits (`user.name` / `user.email` configured)
- Ensure required CLIs exist (dedup requires distinct vendors): `codex`, `claude`
Required subskills
- `dedup`
Workflow
0) Record `BASE_SHA` (required)
Capture the base ref **before any changes** (used later for `dedup`):
BASE_SHA="$(git rev-parse HEAD)"
1) Choose the repo check command(s) once (required)
Do a one-time **tooling detection + configuration** so the per-step “build/lint” commands match the target repo.
**Detect languages and entrypoints**
- **Node/TS**: look for `package.json` in repo root and common subprojects (for example `functions/package.json`).
- **Python**: look for `pyproject.toml`, `uv.lock`, `poetry.lock`, `requirements.txt`.
**Pick build/lint/typecheck commands (prefer repo-native scripts)**
- Prefer existing package scripts when present (e.g. `npm run build`, `npm run lint`, `npm test`).
- Prefer the repo’s configured Python toolchain:
- If `uv` is clearly in use: use `uv`-based commands.
- If Poetry is clearly in use: use `poetry run ...`.
- If neither: use the repo’s documented commands (README/CONTRIBUTING) if available.
- If multiple options exist or it’s unclear, ask the user **once** for the canonical build/lint/typecheck commands, then reuse them for every step.
**Write down a “Tooling config” block and reuse it for every step**
- Example format (adapt to the repo):
- **Root (Node)**: build=`...`, lint=`...`
- **functions/ (Node)**: build=`...`, lint=`...`
- **Root (Python)**: build=`...`, typecheck=`...`, lint/format=`...`
- From now on, *only* run the commands from this block after each step (instead of hard-coded defaults).
**If the repo has no build/lint tooling**
- Explicitly record “No build/lint configured” and skip build/lint steps (do not invent tooling). Call this out in the final summary.
2) Implement the requested change (required)
- Make the smallest correct change that satisfies the request.
- Prefer reusing existing patterns/utilities over creating new ones.
- Keep the change set small and reviewable.
3) Run repo checks and fix only what you broke (required)
- Run the commands from your **Tooling config**.
- If checks fail due to changes you introduced, fix and re-run until green.
- If checks fail for clearly pre-existing/unrelated reasons, stop and report:
- the exact command(s) you ran, and
- the first actionable error output.
4) Commit once checks are green (required)
- `git add -A`
- Make a single atomic commit for the user-requested change:
- `git commit -m "<imperative summary>"` (example: `Fix flaky upload retry`).
- Do not create empty/no-op commits (`--allow-empty` is prohibited).
5) Run `dedup` against `BASE_SHA` (required)
Ensure the working tree is clean, then run the dedupe loop:
if [ -n "$(git status --porcelain)" ]; then
echo "Working tree is not clean; commit or stash before running dedup." >&2
exit 1
fi
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
}
DEDUP_SKILL_DIR="$(resolve_skill_dir dedup)"
python3 "$DEDUP_SKILL_DIR/scripts/run_dedup_loop.py" "${BASE_SHA}"If `dedup` creates additional commits, re-run the **Tooling config** checks once at the end and fix only issues introduced by dedupe changes. Do not interrupt/restart the dedup loop if it looks quiet; the loop script owns timeouts and retries.
Guardrails
- Keep changes tightly scoped to the user request + required dedupe.
- Avoid drive-by refactors, renames, formatting-only churn, or dependency upgrades unless required.
- End state must be: checks green (or explicitly “no checks configured”), clean working tree, and at least one meaningful commit.
Read more
name: besimple-tiny-broccoli description: "Small-change wrapper: implement → run repo checks → atomic commit → run dedup (BASE_SHA..HEAD)."
Tiny Broccoli: Implement → Check → Commit → Dedup
Use this when the user request is already clear and you can safely implement directly (no plan docs), but you still want: 1) repo checks to be green, and 2) a dedupe pass over the resulting diff.
Not for
- Big/ambiguous work that needs research, design decisions, or a multi-phase plan.
- “Refactor the whole repo” style requests.
Preconditions (hard stop if missing)
- Confirm you are in the intended repo: `git rev-parse --show-toplevel`
- Start from a clean working tree: `git status --porcelain` is empty
- Ensure git can create commits (`user.name` / `user.email` configured)
- Ensure required CLIs exist (dedup requires distinct vendors): `codex`, `claude`
Required subskills
- `dedup`
Workflow
0) Record `BASE_SHA` (required)
Capture the base ref **before any changes** (used later for `dedup`):
BASE_SHA="$(git rev-parse HEAD)"
1) Choose the repo check command(s) once (required)
Do a one-time **tooling detection + configuration** so the per-step “build/lint” commands match the target repo.
**Detect languages and entrypoints**
- **Node/TS**: look for `package.json` in repo root and common subprojects (for example `functions/package.json`).
- **Python**: look for `pyproject.toml`, `uv.lock`, `poetry.lock`, `requirements.txt`.
**Pick build/lint/typecheck commands (prefer repo-native scripts)**
- Prefer existing package scripts when present (e.g. `npm run build`, `npm run lint`, `npm test`).
- Prefer the repo’s configured Python toolchain:
- If `uv` is clearly in use: use `uv`-based commands.
- If Poetry is clearly in use: use `poetry run ...`.
- If neither: use the repo’s documented commands (README/CONTRIBUTING) if available.
- If multiple options exist or it’s unclear, ask the user **once** for the canonical build/lint/typecheck commands, then reuse them for every step.
**Write down a “Tooling config” block and reuse it for every step**
- Example format (adapt to the repo):
- **Root (Node)**: build=`...`, lint=`...`
- **functions/ (Node)**: build=`...`, lint=`...`
- **Root (Python)**: build=`...`, typecheck=`...`, lint/format=`...`
- From now on, *only* run the commands from this block after each step (instead of hard-coded defaults).
**If the repo has no build/lint tooling**
- Explicitly record “No build/lint configured” and skip build/lint steps (do not invent tooling). Call this out in the final summary.
2) Implement the requested change (required)
- Make the smallest correct change that satisfies the request.
- Prefer reusing existing patterns/utilities over creating new ones.
- Keep the change set small and reviewable.
3) Run repo checks and fix only what you broke (required)
- Run the commands from your **Tooling config**.
- If checks fail due to changes you introduced, fix and re-run until green.
- If checks fail for clearly pre-existing/unrelated reasons, stop and report:
- the exact command(s) you ran, and
- the first actionable error output.
4) Commit once checks are green (required)
- `git add -A`
- Make a single atomic commit for the user-requested change:
- `git commit -m "<imperative summary>"` (example: `Fix flaky upload retry`).
- Do not create empty/no-op commits (`--allow-empty` is prohibited).
5) Run `dedup` against `BASE_SHA` (required)
Ensure the working tree is clean, then run the dedupe loop:
if [ -n "$(git status --porcelain)" ]; then echo "Working tree is not clean; commit or stash before running dedup." >&2 exit 1 fi
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
}
DEDUP_SKILL_DIR="$(resolve_skill_dir dedup)"
python3 "$DEDUP_SKILL_DIR/scripts/run_dedup_loop.py" "${BASE_SHA}"If `dedup` creates additional commits, re-run the **Tooling config** checks once at the end and fix only issues introduced by dedupe changes. Do not interrupt/restart the dedup loop if it looks quiet; the loop script owns timeouts and retries.
Guardrails
- Keep changes tightly scoped to the user request + required dedupe.
- Avoid drive-by refactors, renames, formatting-only churn, or dependency upgrades unless required.
- End state must be: checks green (or explicitly “no checks configured”), clean working tree, and at least one meaningful commit.
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-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.
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

