Design Principles
The toolkit is designed with these goals:- Small, Reviewable Changes: Agents and skills guide Copilot to make minimal, focused edits
- Consistent Patterns: Reusable conventions across components, features, and state management
- Spec-Driven Development: Multi-phase planning before implementation
- Decoupled Architecture: Clear separation between UI primitives, compositions, and domain logic
Three Main Components
1. Agents (Planning & Workflow)
Agents are multi-phase workflows stored in.github/agents/. They guide GitHub Copilot through structured feature development:
Requirements Phase
The Requirements Agent clarifies the feature, captures user stories, defines acceptance criteria (using EARS syntax), and identifies constraints. It produces a requirements document under
specs/features/{NNN}-{feature-name}/requirements.md.Plan Phase
The Plan Agent converts approved requirements into technical design decisions: component structure, state management approach, API contracts, and integration points.
Each agent is phase-scoped: it only produces its own artifact and never jumps ahead to implementation. This prevents rework and ensures stakeholder alignment at each stage.
2. Skills (Domain Expertise)
Skills are reusable knowledge modules stored in.github/skills/. They provide best practices for specific technologies and patterns:
3. Demo App (Reference Implementation)
Theweb/ directory contains a working Next.js application that demonstrates toolkit patterns:
Tech Stack Decisions
Why Bun?
Why Bun?
Bun serves as both runtime and package manager:
- Faster installs than npm/yarn/pnpm
- Native TypeScript execution
- Built-in bundler and test runner
- Drop-in Node.js replacement
package.json use bun commands:Why Next.js App Router?
Why Next.js App Router?
The App Router provides:
- Server Components by default (better performance)
- Streaming and Suspense built-in
- Simplified data fetching
- File-based routing with layouts
app/page.tsx
Why shadcn/ui?
Why shadcn/ui?
shadcn/ui is not a package dependency—it’s a collection of copy-paste components:
- Built on Base UI primitives (accessible by default)
- Full TypeScript support
- Tailwind-based styling
- Customizable (you own the code)
web/components/ui/ and use class-variance-authority (CVA) for variants:Why Zustand with Decoupled Actions?
Why Zustand with Decoupled Actions?
Zustand with the decoupled actions pattern provides:
- No hook for actions (avoids re-renders)
- Plain functions (easy to test)
- Tree-shakeable (unused actions removed from bundle)
- TypeScript-first
Why oxlint/oxfmt?
Why oxlint/oxfmt?
oxlint and oxfmt replace ESLint and Prettier:
- Written in Rust (10-100x faster)
- Zero config needed
- Compatible with existing rules
- Bun-native execution
How the Pieces Fit Together
Here’s a typical workflow using all three components:Run the Requirements Agent
Define what to build:The agent researches existing patterns (using skills), clarifies goals with you, and produces
specs/features/001-user-dashboard/requirements.md.Run the Plan Agent
Create the technical design:The agent consults skills (React, Next.js, Zustand) to design:
- Component hierarchy (
features/dashboard/) - State management approach (Zustand store)
- UI components (reuse existing shadcn/ui primitives)
Run the Task Agent
Generate implementation tasks:The agent produces an ordered task list with file paths and verification steps.
Skills are always available to Copilot during implementation. Agents reference skills during planning, and Copilot applies them during coding.
Quality Standards
The toolkit enforces quality through both automation and guidance: Automated Checks:- Type checking:
tsc --noEmit - Linting:
bun run lint(oxlint) - Formatting:
bun run format(oxfmt)
Next Steps
Build Your First Feature
Use the 3-phase agent workflow to create a new feature
Work with UI Components
Learn shadcn/ui conventions and component placement rules
Manage State
Master the Zustand decoupled actions pattern
Explore Skills
Browse all available skills for React, Next.js, and more