From bsky
End-to-end development workflow with sub-agent specialization. Use when implementing features, fixing bugs, or making code changes that should follow project standards. Dispatches focused sub-agents for planning, implementation, quality checks, and architectural review — keeping the coordinator lean and the overarching goals visible.
How this skill is triggered — by the user, by Claude, or both
Slash command
/bsky:developThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Implement changes using specialized sub-agents, each with a dedicated context window.
Implement changes using specialized sub-agents, each with a dedicated context window. The coordinator (you) stays lean — orchestrate, don't accumulate.
If a required-environment-variables memory exists (scope: global), read and apply it.
Also load rust-code-standards if working in a Rust project.
(scope: global) if not already loaded this session. Check for project-scoped memories (use
list filtered by project scope) — pass their contents to sub-agents as context.
$ARGUMENTS describes the work to do. It can be:
| Form | Meaning |
|---|---|
| Free text | Feature/bug description — run full workflow |
plan <text> | Phase 1 only — produce a plan, stop |
implement <text> | Phases 1-2 — plan and implement |
quality | Phase 3 only — check quality of current changes |
review | Phase 4 only — architectural review of current changes |
issue <N> | Fetch issue details, then run full workflow |
You are the orchestrator. Your job:
You do NOT: read implementation files into your own context, write code directly, or run tests yourself. Sub-agents do the focused work.
Before planning begins, establish the "so what?" — why does this work matter?
For small, well-scoped tasks (bug fix with a clear issue, config change), this can be a one-sentence acknowledgment. For larger work — new features, architectural changes, greenfield components — this is a deliberate pause to align on intent before investing in a plan.
State the framing to the user. If the "so what?" isn't clear from the task description, ask. This framing anchors everything downstream — the plan, the implementation decisions, and the flight log entry at the end.
Dispatch a planning sub-agent (model: opus) to:
$ARGUMENTS references an issue, fetch it: gh issue view <N> --json title,body,commentsget_symbols_overview for structure,
find_symbol with include_body=true only for symbols that need modificationfind_referencing_symbols to find callersSub-agent prompt template:
You are a planning agent. Your job is to understand the task and propose a concrete
implementation approach. Do NOT write code — produce a plan.
Task: <task description>
Project language: <language>
Build command: <from CLAUDE.md or Cargo.toml etc.>
Project conventions: <from memory-mcp project memories if available>
Use Serena's symbolic tools to explore the codebase efficiently:
- get_symbols_overview for file structure
- find_symbol with include_body=true only for symbols you need to understand deeply
- find_referencing_symbols for impact analysis
Output format:
## Plan
1. [Change description] — `file:symbol`
- Why: [rationale]
- Impact: [callers/dependents affected]
2. ...
## Risks
- [risk description and mitigation]
## Questions (if any)
- [question for the user]
Present the plan to the user. Always wait for explicit approval before proceeding to Phase 1.5. Do not auto-proceed — the user reviews and greenlights every plan.
After the plan is approved, write Architecture Decision Records for any significant decisions made during planning. This is the coordinator's job — no sub-agent needed.
ADRs live in docs/adr/ in the project repo. Use sequential numbering:
0001-short-title.md, 0002-short-title.md, etc. Check existing ADRs to get the
next number.
Format:
# ADR-NNNN: <Title>
## Status
Accepted
## Context
<Why this decision was needed — the problem or constraint>
## Decision
<What was decided>
## Consequences
<What follows from this — tradeoffs, things enabled, things ruled out>
What warrants an ADR:
What does NOT warrant an ADR:
Write ADRs concisely — 5-15 lines total. The value is in recording why, not in being thorough. If the plan discussion already captured the rationale, distill it.
Dispatch an implementation sub-agent (model: sonnet) with the plan from Phase 1.
The sub-agent works in isolation — it gets the plan, conventions, and relevant file paths, then writes the code. See references/implementation-guide.md for the detailed prompt template and conventions checklist passed to this agent.
Key constraints for the implementation agent:
replace_symbol_body, insert_after_symbol)
for precise modifications when appropriatecargo fmt and cargo clippy -- -D warnings (or equivalent) before handing off —
formatting and lint issues are the implementation agent's responsibility, not the quality agent'sAfter the sub-agent returns, briefly summarize what was implemented.
After the implementation agent returns, check the size of the changes:
git diff --stat | tail -1
If the net change exceeds ~500 lines, pause and present the user with:
Large diffs compound review rounds — a 1000-line PR averages 4+ review rounds while a 200-line PR typically converges in 1-2.
Dispatch a quality sub-agent (model: sonnet) to verify the changes. This agent's context is fresh — it has no bias from having written the code.
See references/quality-checklist.md for the language-specific checks. The quality agent:
cargo fmt -- --check / equivalent) — the implementation agent
should have already fixed these, but verify. If failures remain, fix them.cargo clippy -- -D warnings / equivalent) — same as above.cargo nextest run --workspace / equivalent).clone(), .unwrap(), .expect() (Rust)Output: pass/fail with details on any issues found and fixed.
If the quality agent reports unfixed issues, present them to the user with options.
Invoke the /code-review skill with branch scope. This runs three parallel sub-agents
(correctness, design, architecture+security) and produces deduplicated, verified findings.
The /code-review skill is the single source of truth for review methodology — do not
duplicate its logic here.
/code-review branch
The code-review skill will post findings to the PR if one exists, or display in-session. Collect the findings from the review output.
If there are any findings (P1, P2, or P3), present them to the user, then proceed to Phase 4.5. All severity levels are addressed — P3 is a priority signal, not a skip signal. If there are zero findings, skip to Phase 5.
When Phase 4 produces findings:
Dispatch an implementation sub-agent (model: sonnet) with the findings as its task. The sub-agent receives:
After fixes are applied, dispatch the quality sub-agent (model: sonnet) again to verify fmt/clippy/tests still pass.
Run /code-review branch --since <last-reviewed-commit> to use incremental review
mode. This scopes the review to only the fix commits, verifies prior findings are
resolved, and checks for new issues — without re-reviewing unchanged code.
Record the HEAD commit SHA before each review round so you can pass it as --since
to the next round.
Loop: if the re-review produces new P1 or P2 findings, repeat from step 1. Present each iteration's findings to the user.
Circuit breaker: if 3 iterations haven't converged to a clean review, stop and present the remaining findings to the user. Something structural needs human judgment.
After all phases pass (review is clean):
.serena/: commit everything that
.serena/.gitignore doesn't exclude — this includes project.yml (project config),
.gitignore, and memories/ (project-scoped knowledge shared across sessions).
Serena's own .gitignore already excludes cache/ and project.local.yml.cargo doc --no-deps before committing. This verifies that
documentation builds cleanly — doc warnings or errors must be fixed before proceeding.
The generated output in target/doc/ is not committed (it's gitignored).required-environment-variables memory for git/gh operationsgh pr createOn the first PR for a new repo, check if main has branch protection rulesets:
gh api repos/{owner}/{repo}/rulesets --jq 'length'
If 0 (no rulesets), create them per references/repo-setup.md.
This is a one-time setup — skip on subsequent PRs.
butterflyskies/tasks for this workgh issue create --repo butterflyskies/tasks --title "<work description>"Detect project language from:
Cargo.toml → Rust (load references/rust.md)package.json → TypeScript/JavaScriptgo.mod → Gopyproject.toml / setup.py → Python.serena/project.yml)Pass the language-specific reference to sub-agents that need it.
| Sub-agent | Model | Rationale |
|---|---|---|
| Planning | opus | Resolves ambiguity, weighs tradeoffs, asks the right questions |
| Implementation | sonnet | Concrete execution from a well-defined plan |
| Quality | sonnet | Mechanical verification — run tools, fix what fails |
| Architectural review | opus | Judgment-heavy — completeness gaps, subtle contract breaks, "this will hurt later" |
The coordinator inherits the user's session model (typically opus). Use the model parameter
on the Agent tool to set each sub-agent's model explicitly.
npx claudepluginhub butterflyskies/claude-marketplace --plugin bskyCreates bite-sized, testable implementation plans from specs or requirements, with file structure and task decomposition. Activates before coding multi-step tasks.