skills/build/SKILL.md
Build small-to-medium features with lightweight planning and full agent orchestration. Use for "build this component", "add this feature", "create this utility" — work that doesn't need full ideate/implement but still deserves proper planning and quality gates.
npx skillsauth add howells/arc buildInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
<tool_restrictions>
AskUserQuestion — Preserve the one-question-at-a-time interaction pattern. In Claude Code, use the tool. In Codex, ask one concise plain-text question at a time unless a structured question tool is actually available in the current mode. Do not narrate missing tools or fallbacks to the user.EnterPlanMode — BANNED. Do NOT call this tool. This skill has its own lightweight planning process. Execute it directly.ExitPlanMode — BANNED. You are never in plan mode.
</tool_restrictions><arc_runtime>
This workflow requires the full Arc bundle, not a prompts-only install.
Resolve the Arc install root from this skill's location and refer to it as ${ARC_ROOT}.
Use ${ARC_ROOT}/... for Arc-owned files such as references/, disciplines/, agents/, templates/, and scripts/.
Use project-local paths such as .ruler/ or rules/ for the user's repository.
</arc_runtime>
<required_reading> Read these before building:
${ARC_ROOT}/references/testing-patterns.md — Test philosophy${ARC_ROOT}/references/frontend-design.md — If UI work${ARC_ROOT}/references/component-design.md — If React components
</required_reading>| Agent | Model | Use For |
|-------|-------|---------|
| implementer | opus | General implementation (utilities, services) |
| ui-builder | opus | UI components from spec |
| design-specifier | opus | Design decisions when no spec exists |
| unit-test-writer | sonnet | Unit tests (vitest) |
| integration-test-writer | sonnet | Integration tests (vitest + MSW) |
| e2e-test-writer | opus | E2E tests (Playwright) |
| fixer | haiku | TS/lint cleanup |
| debugger | sonnet | Failing tests |
| test-runner | haiku | Run vitest, analyze results |
| spec-reviewer | sonnet | Verify matches spec |
| code-reviewer | haiku | Code quality gate |
| plan-completion-reviewer | sonnet | Whole-plan gate (if >3 tasks) |
</agents>
<rules_context> Check for project coding rules:
Use Glob tool: .ruler/*.md
If .ruler/ exists, read relevant rules by detection:
Always load:
code-style.md — formatting, naming, file organizationtypescript.md — type definitions, strict modeerror-handling.md — error boundaries, Result patternssecurity.md — OWASP, input validation, secretsenv.md — environment variable handlinggit.md — commit conventions, branchingtesting.md — test strategy, coverage requirementsversions.md — minimum version requirementsstack.md — approved technologiesLoad by detection:
react/next): react.md, react-correctness.md, react-performance.mdnext): nextjs.mdtailwindcss): tailwind.mddatabase.mdcloudflare-workers.mdai): ai-sdk.mdauth.mdapi.mdcli.mdintegrations.mdturborepo.mdtooling.mdseo.mdIf .ruler/ does NOT exist, suggest running /arc:rules first.
For UI work, load interface rules from rules/interface/:
Always for UI:
design.md — visual design principlescolors.md — color system and palettespacing.md — spacing scale and consistencytypography.md — type scale, font choiceslayout.md — layout patterns, grid systemsBy detection:
forms.md — form design, validation UXanimation.md — motion principlesinteractions.md — hover, focus, click patternsapp-ui.md — dashboard, settings patternsmarketing.md — landing page patternsresponsive.md — breakpoints, mobile-firstcontent-accessibility.md — WCAG, screen readersperformance.md — rendering, loading optimization
</rules_context>| Use Build | Use Ideate | |-----------|------------| | Single component | New app or major feature | | Add utility function | Multiple interconnected features | | Extend existing feature | New architecture patterns | | 1-5 files affected | 10+ files affected | | Clear requirements | Exploratory/unclear scope |
If in doubt: Start with build. If scope grows, pivot to ideate.
Assess the request:
If scope is large (>5 files, new patterns):
AskUserQuestion:
question: "This looks substantial — multiple features and new patterns. Would benefit from /arc:ideate for proper design."
header: "Scope Check"
options:
- label: "Switch to /arc:ideate"
description: "Start a full design process for this larger scope"
- label: "Continue with /arc:build"
description: "Keep going with lightweight planning despite the scope"
If scope is appropriate: Proceed.
Document a lightweight plan (not just mental notes):
## Build Plan: [Feature Name]
### What We're Building
[1-2 sentence description]
### Files to Create/Modify
| File | Action | Purpose |
|------|--------|---------|
| src/components/OrgSwitcher.tsx | Create | Main component |
| src/components/OrgSwitcher.test.tsx | Create | Unit tests |
| src/hooks/useOrganizations.ts | Create | Data fetching hook |
### Implementation Approach
1. [First step]
2. [Second step]
3. [Third step]
### Agents Needed
| Task | Agent |
|------|-------|
| Component UI | ui-builder or design-specifier |
| Hook logic | implementer |
| Unit tests | unit-test-writer |
| Integration tests | integration-test-writer (if API calls) |
### Test Coverage
- Unit: [what to test]
- Integration: [what to test, if any]
- E2E: [what to test, if critical flow]
### Design Decisions (if UI)
- [ ] Needs design-specifier? [yes/no]
- [ ] Has existing patterns to follow? [reference]
Share the plan with the user, then confirm:
AskUserQuestion:
question: "Here's my build plan. Look right?"
header: "Confirm Build Plan"
options:
- label: "Looks good"
description: "Proceed with the plan as written"
- label: "Needs changes"
description: "I want to adjust the plan before you start building"
Wait for confirmation before proceeding.
If not on a feature branch:
git branch --show-current
If on main:
git checkout -b feat/[feature-name]
# or for isolated work:
git worktree add .worktrees/[feature-name] -b feat/[feature-name]
For each task in the plan, follow the per-task loop:
┌─────────────────────────────────────────────────────────┐
│ 1. TEST → spawn test agent (unit/integration) │
│ 2. BUILD → spawn build agent (implementer/ui) │
│ 3. TDD → run test (fail → impl → pass) │
│ 4. FIX → fixer (TS/lint cleanup) │
│ 5. SPEC → spec-reviewer (matches plan?) │
│ 6. QUALITY → code-reviewer (well-built?) │
│ 7. COMMIT → atomic commit │
└─────────────────────────────────────────────────────────┘
Determine test type: | Building | Test Agent | |----------|------------| | Pure function/hook | unit-test-writer | | Component with props | unit-test-writer | | Component + API | integration-test-writer | | Auth-related | integration-test-writer (with Clerk/WorkOS mocks) |
Spawn test agent:
Task [unit-test-writer] model: sonnet: "Write unit tests for [component/function].
From build plan:
- [what to test]
- [edge cases]
File: [path]"
Select build agent based on task:
For UI components:
Task [ui-builder] model: opus: "Build [component] from plan.
Requirements:
- [from build plan]
Existing patterns: [reference similar components]
Follow spacing and design rules."
For logic/utilities:
Task [implementer] model: opus: "Implement [function/service].
Requirements:
- [from build plan]
Follow project conventions."
If design decisions needed (no existing spec):
Task [design-specifier] model: opus: "Design [component/feature].
Context: [what it's for]
Output spec for ui-builder."
Hard gate: Test file must exist and fail before any implementation code is written.
pnpm vitest run [test-file] # MUST FAIL first
# Implementation happens
pnpm vitest run [test-file] # Should PASS
Fixer (TS/lint):
pnpm tsc --noEmit
pnpm biome check --write .
If issues:
Task [fixer] model: haiku: "Fix TS/lint errors in [files]"
Spec review:
Task [spec-reviewer] model: sonnet: "Verify implementation matches build plan.
Plan said: [requirements]
Files: [list]
Check: nothing missing, nothing extra."
Code quality:
Task [code-reviewer] model: haiku: "Quick code quality check.
Files: [list]
Check: no any, error handling, tests exist."
pnpm test # All tests pass
pnpm tsc --noEmit # No TS errors
pnpm biome check . # No lint errors
If UI work, screenshot and verify:
mcp__claude-in-chrome__computer action=screenshot
Re-read the build plan from Phase 2. For each item in the plan:
If >3 tasks in the build plan, spawn plan-completion-reviewer:
Task [plan-completion-reviewer] model: sonnet: "Verify implementation matches build plan.
BUILD PLAN:
[paste build plan from Phase 2]
FILES CHANGED:
[list files created/modified]
Check every item was built. Nothing skipped, nothing extra."
Do NOT proceed to Phase 6 until every item in the build plan is verified.
Commit:
git add .
git commit -m "feat([scope]): [description]"
Report:
## Build Complete: [Feature]
### Created
- [file] — [purpose]
### Tests
- Unit: [N] tests
- Integration: [N] tests (if any)
### Verified
- [X] All tests passing
- [X] TS/lint clean
- [X] Spec review passed
- [X] Code review passed
Offer next steps:
AskUserQuestion:
question: "Build complete. What would you like to do next?"
header: "Next Steps"
options:
- label: "Merge to main"
description: "Merge the feature branch into main"
- label: "Create PR"
description: "Push the branch and open a pull request"
- label: "Add more features"
description: "Continue building on this branch"
- label: "Done"
description: "Nothing else needed right now"
<progress_append> After completing the build:
## YYYY-MM-DD HH:MM — /arc:build
**Task:** [What was built]
**Outcome:** Complete
**Files:** [Key files]
**Agents used:** [list]
**Tests:** [N] unit, [N] integration
**Next:** [Merge / PR / Continue]
---
</progress_append>
<success_criteria> Build is complete when:
development
Go-live and shareability checklist covering the basics needed to make a project visitable, shareable, and ready for a first real audience. Use when asked to "launch", "go live", "make this shareable", "get this ready to show people", or prepare a project for a public URL.
development
Discover architectural friction and propose structural refactors with competing interface options. Focuses on deepening shallow modules, extracting grouped concerns into packages/modules, breaking up god files, reducing duplication, and improving testability. Use when asked to "improve the architecture", "find refactoring opportunities", "deepen modules", "consolidate coupling", "break up god components", "extract this into a package", "make this more testable", or "find architectural friction".
development
Create, review, or revise a concise project vision document that captures what a project is, who it is for, why it exists, success criteria, constraints, non-goals, and decision principles. Use when starting a new project, clarifying product direction, aligning a codebase for future agent work, defining a north star, or turning a vague idea into docs/vision.md.
tools
Use when starting any conversation - establishes Arc's skill routing, instruction priority, and bootstrap rules