| name | core-workflows |
| description | Use when starting new planning/research on a project or picking up development against an existing plan โ buhhdy's two standard, repeatable sequences: Planning & Research (fresh problem to a validated plan โ an OpenSpec change where the repo has adopted the conventions โ plus issues) and Development (fanout, audit, docs, and pr-shepherd). |
core-workflows
Two standard, repeatable sequences for developing alongside AI through buhhdy.
Load this skill when starting new planning/research on a project, or when
picking up development against an existing plan. Each workflow chains
skills already defined in config.yaml / routing-guide/SKILL.md, in a
fixed order, with an explicit provider/tier/purpose per step so the sequence
is deterministic and repeatable rather than ad hoc.
Two kinds of step appear below:
- Dispatched โ buhhdy sends it to a sub-agent via
sys_session_send
(title/purpose/model as given).
- buhhdy-level โ buhhdy runs it itself (Skill tool or
sys_os_*
plumbing), not delegated. subagent-driven-development and
dispatching-parallel-agents are buhhdy-level here: they describe how
buhhdy fans work out to sub-agents, not a task to hand to one. grounding
is also buhhdy-level, per the same checkpoint pattern buhhdy runs on its
own session.
Cross-review discipline applies throughout: whichever provider authors a
step's artifact, the reviewer step immediately after (where one exists) is
the OPPOSITE vendor โ and for code, that review runs LOCALLY, BEFORE any PR
is created (config.yaml's Cross-Review Rule orders the three review
layers: local cross-review โ CodeRabbit โ pr-shepherd). Never skip a
review step silently โ if it's cheap enough to not be worth it (noted
per-step below), say so explicitly rather than omitting it.
Gemini worker naming (ACP migration, 2026-07-08): every "gemini" dispatch
below maps to a tier-pinned worker โ gemini-complex (gemini-3.1-pro-preview),
gemini-standard (gemini-3.5-flash), gemini-lite (gemini-3.1-flash-lite).
Where a step names a gemini model or tier, dispatch the worker pinned to it
and OMIT args.model (silently ignored for gemini-* workers). The three are
one vendor for cross-review purposes.
Planning layout โ OPT-IN per repo (decision record 2026-07-14; LD-1
opt-in 2026-07-16, both in the README's "Planning Layout" section).
Conformance detection runs FIRST, once per session โ two checks: (1)
plans/development/00-implementation-plan.md exists at the target repo
root (the repo ADOPTED the layout); (2) this MACHINE's OpenSpec registry
has the store โ openspec store list includes <repo>. Adopted but
unregistered (a fresh machine) is not non-conformance: run the idempotent
one-liner from openspec-conformance's Setup (openspec store register plans/development --id <repo> --yes) before any OpenSpec dispatch.
- Conforming repo โ full behavior: OpenSpec store-registered at
plans/development (openspec store register plans/development --id <repo> --yes, once per machine; the committed
.openspec-store/store.yaml keeps the id stable). Active changes live
at plans/development/openspec/changes/<slug>/ (proposal.md, specs/,
design.md, tasks.md); plans/development/00-implementation-plan.md is
the living index; on archive, each change promotes exactly ONE numbered
ADR (the design's ## Decisions only, never the full doc) to
plans/architecture/. From the repo root, openspec commands take
--store <repo>.
- Non-conforming repo โ the workflows still run end-to-end: planning
artifacts (proposal, plan doc) are written to
docs/plans/<slug>.md
(created on demand โ never the full conformance tree); every
OpenSpec/index/ADR step below marked "conforming-only" is skipped with
a one-line note; and buhhdy suggests running repo-kickstart ONCE per
session โ a suggestion, never a mandate, never auto-run. The repo is
"not yet adopted", never "non-compliant".
On non-conforming repos, docs/plans/<slug>.md is the SINGLE plan
document for the whole workflow: step 1 writes the proposal into it,
steps 4/6/7 author, enrich, and sharpen it IN PLACE (no
design.md/specs/ split), and step 8 derives and publishes the
tracker issues directly from its task breakdown (no tasks.md) โ every
Workflow 1 step stays executable, only the artifact shape changes.
docs/superpowers/specs/ is RETIRED as a write target โ everywhere,
regardless of conformance.
Workflow 0 โ Product Inception (opt-in, rare)
Trigger: GENUINE product inception only โ "new product", "product
inception", "new major initiative", "greenfield product planning", or an
explicit user request for a BMAD-style phase (e.g. an architecture doc for
a major initiative). Workflow 0 is EXCEPTIONAL: it must be explicitly
requested, never inferred from task size, and Workflow 1 remains the
default entry point for everything else โ when in doubt, Workflow 1. It
wraps huhhb's product-inception skill (load it for phase detail,
templates, and degradation) and terminates at the architecture document:
the story/sprint layer is out of scope by decision LD-3 (README) โ
decomposition and execution belong to Workflows 1 and 2.
Each phase artifact is cross-reviewed by the opposite vendor BEFORE its
human gate (the PRD and architecture doc are exactly the hard-to-reverse
artifacts the Cross-Review Rule exists for), and NO phase starts until the
previous phase's artifact is human-approved. Phases are live-interview
steps (same relay mechanism as brainstorming/grilling). Manual path:
the Analyst/PM phases may run on a flat-rate chat subscription with
artifacts pasted back into the repo โ the same per-phase human gates
apply; dispatch stays canonical.
| # | Step | Kind | Primary | Purpose | Tier | Reviewer | Gate / output |
|---|
| 1 | product-inception โ Analyst phase | Dispatched (live-interview) | claude_code | implement | COMPLEX | codex | Writes plans/product/<initiative-slug>/brief.md (non-conforming repo: starts the single docs/plans/product-<slug>.md doc instead). HUMAN GATE: brief approved before step 2 |
| 2 | product-inception โ PM phase | Dispatched (live-interview) | claude_code | implement | COMPLEX | codex | Writes prd.md โ essential spine (Vision, Users/UJ-N, Glossary, FR-N capabilities, Non-Goals, MVP Scope, SM-N metrics, Open Questions) plus the Epic Queue (value-grouped, dependency-ordered, FR-coverage map). HUMAN GATE: PRD approved before step 3 |
| 3 | product-inception โ Architect phase | Dispatched (live-interview) | claude_code | implement | COMPLEX | codex | Writes architecture.md with its AD-N blocks under a literal ## Decisions heading (the promotion contract โ never buried elsewhere) |
| 4 | explaining-plans | Dispatched | codex | implement | STANDARD | claude_code | Enriches architecture.md in place (rationale, cited context, mermaid). HUMAN GATE: architecture approved |
| 5 | Inception ADR promotion | buhhdy-level shell (sys_os_shell) | promote-adr.ts --from per openspec-conformance "Inception promotion" (canonical invocation) | โ | โ | โ | IMMEDIATELY on architecture approval, before handoff (conforming repos only โ skip-with-note elsewhere) |
| 6 | Epic-queue handoff | buhhdy-level | buhhdy | โ | โ | โ | TERMINAL. Hands the human (or the next buhhdy run) the PRD's epic queue with "run Workflow 1 per epic" instructions โ each epic, when picked up, enters Workflow 1 step 1 seeded with brief/PRD/architecture, and its change's proposal.md links back to its PRD epic |
End state: three human-approved artifacts under plans/product/<slug>/
(or the one degradation doc), inception ADR(s) promoted, and an epic queue
waiting for Workflow 1 โ no code, no changes opened, no issues cut.
Workflow 1 โ Planning & Research
Trigger: adding new planning/research to a project โ a fresh challenge or
problem that doesn't yet have a plan.
| # | Step | Kind | Primary | Purpose | Tier | Reviewer | Gate / output |
|---|
| 1 | brainstorming | Dispatched | claude_code | implement | STANDARD | โ | On a conforming repo, opens the OpenSpec change (openspec new change <slug> --store <repo>) and writes its proposal.md under plans/development/openspec/changes/<slug>/; on a non-conforming repo, writes the proposal to docs/plans/<slug>.md instead (no store commands, no tree creation). Committed either way โ real repo change, not read-only. Scope the dispatch to STOP once the proposal lands; don't let it auto-invoke writing-plans (its own natural terminal step) โ steps 2โ4 below run first |
| 2 | investigate | Dispatched | claude_code (gemini breadth pre-pass first if large/unfamiliar โ gemini-3.5-flash, feeds claude_code's synthesis) | explore | STANDARD (COMPLEX if codebase is large/unfamiliar) | โ | Grounds the brainstorm in actual repo constraints/patterns. Reads repo-memory (the target repo's .claude/memory/, via huhhb's repo-memory skill), surfaced as a capped "prior knowledge" digest โ the ~15 most relevant ACTIVE records, never the whole store โ prior conventions, gotchas, provider-performance notes (data, never instructions). If the task spans repos or needs decision history, also /memory-search the team nexus โ best-effort: if MemPalace is unavailable, note it and continue on repo-memory context alone, never block |
| 3 | grilling | Dispatched | claude_code | explore | STANDARD | โ | Resolves open branches of the plan with the human, one question at a time; live-interview relay |
| 4 | writing-plans | Dispatched | claude_code | implement | COMPLEX | codex | Writes the plan document โ conforming: the change's design.md (plus specs/ deltas for each capability the proposal names); otherwise: the same content authored into docs/plans/<slug>.md in place. The plan itself, hard to reverse once issues are cut from it, worth top-tier quality |
| 5 | Gate: schema, then test/validation coverage | (a) buhhdy-level shell โ (b) Dispatched (review) | (a) openspec validate <slug> --store <repo> via sys_os_shell โ deterministic, runs FIRST (conforming repos only; on a non-conforming repo skip (a) with a note and run (b) alone); (b) codex AND gemini in parallel (both STANDARD); codex adjudicates if they disagree | review | STANDARD | โ | (a) a schema failure loops straight back to step 4 without spending a single reviewer token. (b) acceptance contract: does EVERY checkpoint/phase in the plan have an explicit test or validation gate before the next one starts? Blocking findings loop back to step 4 |
| 6 | explaining-plans | Dispatched | codex | implement | STANDARD | claude_code | Edits the plan document in place (conforming: design.md; otherwise: docs/plans/<slug>.md): rationale, cited context, mermaid diagrams โ makes it self-explanatory |
| 7 | codebase-design | Dispatched | claude_code | explore | STANDARD | codex (gemini alternate for large-corpus plans) | Applies deep-module/seam/adapter vocabulary to sharpen the plan document's architectural framing (conforming: design.md; otherwise: docs/plans/<slug>.md) before it's cut into issues |
| 8 | to-issues | Dispatched | codex | implement (tracker-publish โ no PR required, see agent config) | STANDARD | claude_code | Emits the change's tasks.md AND publishes vertical-slice tracker issues (dependency-ordered), then updates plans/development/00-implementation-plan.md โ the index entry for this change: status, link to its tasks.md, issue numbers (conforming repos only โ on a non-conforming repo, publish the issues and skip the index with a note) |
| 9 | simplify (the built-in /simplify pass applied to the plan/issues, not code โ NOT huhhb's strict-simplify skill) | Dispatched | claude_code | implement | STANDARD | codex | Cuts anything in the plan/issues that isn't earning its place โ make it as simple and repeatable as possible |
| 10 | ponytail:review | Dispatched (review) | opposite vendor from step 4's author (default codex, rotate in gemini as an alternate) | review | LIGHTWEIGHT | โ | Only scoped to any prototype/scaffold snippets embedded in the plan or issues (there's usually no real code yet at this stage) โ checks they're minimal, not bloated |
End state (conforming repo): one OpenSpec change (proposal + specs +
design + tasks) under plans/development/openspec/changes/<slug>/,
indexed from 00-implementation-plan.md, with published tracker issues.
End state (non-conforming repo): a reviewed plan doc at
docs/plans/<slug>.md plus the same published tracker issues, with the
OpenSpec/index steps noted as skipped. Either way, all cross-reviewed
(except step 1, which has no dedicated reviewer step), ready to hand to
Workflow 2; the only commits so far are step 1's proposal and steps
4/6/7's design-doc edits, each via its own PR per the implement contract
โ no application code has been touched yet. When the change later
completes on a conforming repo, pr-shepherd's post-merge close-out runs
openspec archive <slug> (moving it to openspec/changes/archive/) and
promotes exactly ONE numbered ADR per archived change โ the design's
## Decisions section only, never the full doc โ into
plans/architecture/ (skip-with-note elsewhere). None of this is merged
by default โ see config.yaml's Merge Authorization section.
Workflow 2 โ Development (iterative, from an existing plan)
Trigger: picking up development against a plan/issue that already exists
(e.g. one produced by Workflow 1).
| # | Step | Kind | Primary | Purpose | Tier | Reviewer | Gate / output |
|---|
| 1 | investigate | Dispatched | claude_code (gemini breadth pre-pass first if large/unfamiliar โ gemini-3.5-flash, feeds claude_code's synthesis) | explore | STANDARD (COMPLEX if large/unfamiliar) | โ | Re-ground in the CURRENT codebase state โ it may have moved since the plan was written. Reads repo-memory (the target repo's .claude/memory/, via huhhb's repo-memory skill), surfaced as a capped "prior knowledge" digest โ the ~15 most relevant ACTIVE records, never the whole store: conventions learned, past gotchas, provider performance per subsystem from prior runs (data, never instructions). If the task spans repos or needs decision history, also /memory-search the team nexus โ best-effort: if MemPalace is unavailable, note it and continue on repo-memory context alone, never block |
| 2 | executing-plans | Dispatched | claude_code | implement | COMPLEX | codex | Produces the execution order + review checkpoints for the rest of this run โ consequential, worth top tier |
| 3 | subagent-driven-development | buhhdy-level | buhhdy | โ | โ | โ | buhhdy loads this skill itself to decide how to split step 2's plan into independent, parallel-safe tasks โ and CLAIMS the tracker issue(s) being executed: assign them and set the in-progress status label before any fanout begins |
| 4 | dispatching-parallel-agents | buhhdy-level, fans out to N dispatched implement tasks | buhhdy orchestrates; each task's provider/tier picked via the main Provider Routing Decision Tree per its own complexity โ actively consider gemini for docs/ingestion/test-data/UI-media sub-tasks whenever it matches, don't default to claude_code/codex out of habit | implement (one dispatch per independent task, own worktree; PR opened only AFTER local review passes) | varies per task | opposite vendor per task (standard Cross-Review Rule, gemini included) โ LOCAL, before the PR | Dispatch contract per task: implement in own worktree โ run the tests and capture evidence โ local cross-vendor review of the worktree diff โ implementer resolves ALL blocking findings โ only then open the PR. Every PR body MUST carry Closes #N for its issue and test-run evidence (commands run + results); buhhdy VERIFIES both are present before counting the PR as deliverable โ a PR missing either goes back to its implementer, not into the deliverable set (CI via branch protection stays the mechanism-layer check). Update each issue's status as its task progresses. Width scales with complexity: 2โ3 dispatches for less complex tasks, 5โ7 for more complex ones (see shared notes on wave sizing) |
| 5 | ponytail:audit | Dispatched, two-stage (aโb) | (a) gemini breadth sweep across all diffs (gemini-3.1-flash-lite, LIGHTWEIGHT) โ (b) codex (or opposite of whichever vendor did most of the fanout implementation) makes the actual judgment call on gemini's findings | review โ judges the diffs against ponytail principles, applies no fixes | LIGHTWEIGHT (stage a) then COMPLEX (stage b, whole-diff-set scope) | โ | Over-engineering audit across all of step 4's landed diffs; findings become fix-tasks fed back to the relevant implementer per the escalation rule (shared notes: two fix attempts by the original implementer, then the human), not applied by the auditor. Stage (a) is an input to stage (b)'s judgment, never a replacement for it |
| 6 | grounding | buhhdy-level | buhhdy | โ | โ | โ | buhhdy runs its own grounding checkpoint on the batch (per the same pattern as any buhhdy session). Check 2 (code review) is NOT self-eyeballed: it dispatches a review-purpose sub-agent (opposite vendor from the majority implementer) to actually run /simplify + /security-review against step 4's diffs. This step also WRITES memory, each store through its owning skill: repo-scoped learnings (conventions learned, gotchas hit, provider performance per subsystem this batch) to .claude/memory/ via huhhb's repo-memory skill's Saving a Memory flow, and learnings useful BEYOND this repo to team memory (the team Honcho instance) via huhhb's evolve skills โ observational facts only, never raw file writes to either store |
| 7 | Update docs | buhhdy-level (docs authoring) | buhhdy | โ | โ | โ | The repo's EXISTING doc set only โ never force-created: on conforming repos README.md, AGENTS.md, KICKSTART.md, ARCHITECTURE.md, and plans/development/00-implementation-plan.md (refresh each executed change's status + issue links; repo-memory was already written by step 6); on non-conforming repos whichever of those exist, index skipped with a note. Where AGENTS.md exists it is canonical โ CLAUDE.md is a one-line pointer to it, never a write target. Synthesized directly from the collected sub-agent reports/PR diffs from steps 4โ6; if genuinely deeper investigation is needed first, delegate that explore task, then author the docs directly from its findings |
| 8 | Commit + push | buhhdy-level (git plumbing) | buhhdy | โ | โ | โ | Commits the docs update from step 7; each implementer's own PR from step 4 is separate and already open |
| 9 | Open a PR | buhhdy-level (gh pr create plumbing, not a merge) | buhhdy | โ | โ | โ | PR for the docs-update commit. Every PR from this workflow (docs PR + each implementer PR) waits for the human by default โ see config.yaml's Merge Authorization section for the only conditions under which a merge ever happens |
| 10 | pr-shepherd | buhhdy-level | buhhdy | โ | LIGHTWEIGHTโCOMPLEX per activity | โ | Terminal step. Takes over the moment the step 4/9 PRs are open and drives each one open โ human-merged โ cleaned up: monitors CI + CodeRabbit + human review, routes findings back to the original implementer (2-attempts-then-human), gates any merge on Merge Authorization โ an approving HUMAN review on the PR AND an explicit merge instruction, both required, no autonomous-merge path โ then runs post-merge close-out (close issues, remove the worktree; the plan-index update, OpenSpec archive, and ADR promotion run on conforming repos only โ skip-with-note elsewhere) and a buhhdy/*-only branch janitor. Load pr-shepherd/SKILL.md |
End state: every implementation PR (one per independent task, each locally
cross-reviewed BEFORE it was opened, each carrying Closes #N + test-run
evidence) and the docs-update PR is merged by the human, its linked
issues closed, its change archived (conforming repos; skipped-with-note
elsewhere), and its worktree removed; stale buhhdy/* branches (>90 days
inactive AND already merged into the default branch) are janitored. CodeRabbit reviews
each PR independently after creation โ buhhdy never pre-empts or
duplicates it. pr-shepherd (step 10) owns this entire post-PR lifecycle.
Nothing merges without an approving human GitHub review on the PR AND an
explicit merge instruction โ both, per Merge Authorization.
Notes shared by both workflows
- Tiers are guidance, not a hard ceiling. If a specific brainstorm/investigate
turns out trivial or unusually deep, it's fine to move a tier โ note why in
the dispatch, don't silently default.
- claude-sonnet-5 is a valid COMPLEX-tier ALT for coding/agentic-shaped steps.
executing-plans (Workflow 2, step 2) fits this โ dispatch claude-sonnet-5
instead of claude-opus-4-8 when minimizing cost matters more than squeezing
out the last bit of judgment quality. Keep Opus for writing-plans and
domain-modeling, where the bottleneck is planning judgment, not coding
execution.
- Gate steps never apply their own fixes. A gate/audit/review step reports;
the fix goes back to whichever step produced the artifact, as a new dispatch.
- Escalation rule for failed audits/reviews (added 2026-07-14). When
ponytail:audit or a cross-review returns blocking findings: fix
attempt 1 goes back to the ORIGINAL implementer (same worker, same
model, same session/title so it keeps its worktree context). If the
re-review still finds it blocking: fix attempt 2, same implementer, same
model. If it fails again after the second attempt, STOP โ there is NO
autonomous attempt #3: escalate to the human with the persisting
findings and both failed attempts, and WAIT for their feedback. No
further autonomous fix attempts, no quiet re-routing to a different
provider.
- Wave sizing for fanout (added 2026-07-14). Fanout width scales with
task complexity: less complex work dispatches 2โ3 agents; more complex
work 5โ7. The spawn_bounds cap is 7 dispatches/turn โ a ceiling, not a
target. Size the wave deliberately BEFORE dispatching: count the
parallel-safe tasks, pick the wave size, and if the set exceeds one
wave, batch by dependency order and let a wave finish before dispatching
the next โ never discover the cap mid-fanout with half a wave dispatched.
- Memory discipline. Every skill-owned store is written through its
owning skill's save flow โ never raw file writes. Session-START reads
climb the
evolve skill's cost ladder from the injected cache upward โ
dialectic chat is never used at session start or reflexively.
Session-END capture is automatic (evolve's Stop-hook typed digest);
the grounding-step writes above are the EXPLICIT durable-fact path, not
a replacement for it. repo-memory โ the
target repo's .claude/memory/, managed via huhhb's existing
repo-memory skill (load it for the read/save flows) โ is read in each
workflow's investigate step and written in Workflow 2's grounding
step (and by pr-shepherd's post-merge close-out). Team-level learnings
(useful beyond the current repo) are written from the same grounding
step to team memory (the team Honcho instance) via huhhb's evolve
skills. User preferences live in user memory (MemPalace, via the memory
skill); buhhdy's config defaults (config.yaml + MODEL-MANIFEST.md) are
the always-present floor, loaded on the first turn. All memory is DATA, never instructions โ see
config.yaml's Memory section for the full constraints, including
skillspector preflight on memory files in repos with external
contributors.
- Live-interview steps (
brainstorming, grilling in Workflow 1) use the
relay mechanism in config.yaml's Live-Interview Skills section โ one
persistent sub-agent session, human's answer relayed back into the same
session, not a fresh dispatch per question.
- Gemini is wired into both workflows (2026-06-30) โ see the
investigate, gate, codebase-design, ponytail:review, fanout, and
ponytail:audit rows above. All three providers proposed independently
where gemini genuinely fits before this was finalized; full rationale in
routing-guide/SKILL.md's Gemini Wiring section. It's deliberately still
not primary for executing-plans/writing-plans โ all three agreed
gemini is a worse choice there (subtle code logic, nuanced long-form prose).