A coordinated agent team that builds full-stack features by pairing a Haskell backend agent with a React frontend agent.
Install
mkdir -p .claude/skills/api-birdgg && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/18241" && unzip -o skill.zip -d .claude/skills/api-birdgg && rm skill.zipInstalls to .claude/skills/api-birdgg
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Create an agent team for full-stack feature development. One agent writes the Haskell Servant backend API, another builds the React frontend UI consuming that API. Use when asked to "build a feature", "add a new page", "create an endpoint with UI", or "fullstack feature".Key capabilities
- →Define domain types for backend
- →Create DTO types for API
- →Add Servant routes and implement handlers
- →Build UI components with shadcn/ui
- →Regenerate API client and create hooks
How it works
The skill spawns a team of two agents, one for backend (Haskell Servant) and one for frontend (React), coordinating their tasks to implement a full-stack feature.
Inputs & outputs
When to use api
- →Build a new feature
- →Add a new page
- →Create a new API endpoint with UI
- →Full-stack feature implementation
About this skill
Full-Stack Feature Team
Spawn a coordinated agent team for implementing full-stack features across the Haskell backend and React frontend.
Team Structure
Two agents working in coordination:
- backend-api - Writes Haskell Servant API (routes, handlers, DTOs, domain logic)
- frontend-ui - Builds React UI consuming the API (components, hooks, routes)
Workflow
When invoked with a feature description:
Step 1: Create Team
Use TeamCreate to create a team named fullstack-{feature-slug}.
Step 2: Create Tasks
Create tasks for the feature, frontend task first create essential ui, and wait for backend to complete before api dependent work.:
-
Backend tasks (assigned to backend-api):
- Define domain types if needed (in
src/Moe/Domain/) - Create DTO types (in
src/Moe/Web/API/DTO/) - Add Servant routes (in
src/Moe/Web/API/Routes.hs) - Implement handlers (in
src/Moe/Web/API/{Feature}/Handler.hs) - Wire into server (in
src/Moe/Web/API/Server.hs) - Build and verify with
cabal build
- Define domain types if needed (in
-
Frontend tasks (assigned to frontend-ui, blocked by backend completion):
- Build UI components with shadcn/ui + Tailwind (in
web/src/features/{feature}/components/) - Regenerate API client with
cd web && bun run gen:api - Create hooks using
@tanstack/react-query(inweb/src/features/{feature}/hooks/) - Add route if needed (in
web/src/routes/) - Verify with
cd web && bun run build
- Build UI components with shadcn/ui + Tailwind (in
Step 3: Spawn Agents
Launch two agents via Task tool with the team_name parameter:
backend-api agent
subagent_type: general-purpose
name: backend-api
team_name: fullstack-{feature-slug}
Prompt should include:
- The feature requirement
- Backend architecture context (below)
- Assigned task IDs
frontend-ui agent
subagent_type: general-purpose
name: frontend-ui
team_name: fullstack-{feature-slug}
Prompt should include:
- The feature requirement
- Frontend architecture context (below)
- Assigned task IDs
- Note: wait for backend tasks to complete before starting API-dependent work
Step 4: Coordinate
Monitor task progress. When backend completes, send message to frontend-ui to proceed. When all tasks complete, shut down the team.
Backend Architecture Context
Provide this to the backend-api agent:
Project: moe-bangumi (Haskell, GHC 9.14.1, GHC2024)
Prelude: Relude via Moe.Prelude
Effect system: Effectful
Key patterns:
- Routes: Servant NamedRoutes in src/Moe/Web/API/Routes.hs
- DTOs: src/Moe/Web/API/DTO/{Feature}.hs with toXxxResponse converters
- Handlers: src/Moe/Web/API/{Feature}/Handler.hs
- Handler type: ServerEff (defined in Moe.Web.Types)
- Domain types: src/Moe/Domain/
- Database: Effectful.Sqlite, queries in src/Moe/Infra/Database/
- Server wiring: src/Moe/Web/API/Server.hs
Handler pattern:
handleXxx :: Param -> ServerEff ResponseType
handleXxx param = do
result <- someEffect param
pure $ toResponse result
Route pattern (add field to Routes' record):
newRoute ::
mode
:- "path"
:> QueryParam' '[Required, Strict] "param" ParamType
:> Get '[JSON] ResponseType
DTO pattern:
data XxxResponse = XxxResponse { field :: Type }
deriving stock (Generic, Show)
deriving anyclass (ToJSON)
Build command: cabal build
Style: simple haddock, use "bangumi" not "anime", no field suffixes, run hlint after edits
Frontend Architecture Context
Provide this to the frontend-ui agent:
Project: moe-bangumi frontend (React 19, TypeScript)
Router: @tanstack/react-router
State: @tanstack/react-query
UI: shadcn/ui + Tailwind CSS 4 + @base-ui/react
Icons: @tabler/icons-react
Animation: framer-motion
Build: Vite 7, Bun
Key patterns:
- API client: auto-generated in web/src/client/ from OpenAPI spec
- Regenerate: cd web && bun run gen:api
- Import from @/client/@tanstack/react-query.gen for query options
- Import from @/client/sdk.gen for direct API calls
- Hooks: web/src/features/{feature}/hooks/use-{feature}.ts
- Use useQuery with generated options: useQuery({ ...getApiXxxOptions({ query: params }) })
- Components: web/src/features/{feature}/components/
- Routes: web/src/routes/{route-name}.tsx
- Use createFileRoute for new routes
- Shared components: web/src/components/ (shadcn/ui based)
- Layout: AppLayout with sidebar navigation
Route pattern:
import { createFileRoute } from "@tanstack/react-router"
export const Route = createFileRoute("/path")({ component: PageComponent })
Hook pattern:
export function useFeature(params) {
return useQuery({ ...getApiFeatureOptions({ query: params }) })
}
Build command: cd web && bun run build
Style: functional components, no class components
Important Notes
- Backend agent should build and verify before frontend starts API integration
- Frontend agent can start on non-API-dependent UI work (layout, static components) while waiting
- Both agents should follow project CLAUDE.md conventions
- Backend: run hlint on changed files
- Frontend: use existing shadcn components where possible
- Do not write tests unless explicitly requested
When not to use it
- →When only backend or frontend development is needed, not full-stack
- →When the project does not use Haskell Servant for backend and React for frontend
- →When tests are explicitly not requested
Limitations
- →Limited to Haskell Servant for backend and React for frontend
- →Backend agent must build and verify before frontend starts API integration
- →Does not write tests unless explicitly requested
How it compares
This skill orchestrates a specialized agent team for parallel backend and frontend development, ensuring coordination and adherence to specific architectural patterns, unlike a single agent handling both.
Compared to similar skills
api side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| api (this skill) | 0 | 5mo | No flags | Advanced |
| convex-realtime | 1 | 5mo | No flags | Intermediate |
| lifi-dev | 0 | 5mo | Review | Advanced |
| shadmin-dev | 0 | 1mo | Review | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
convex-realtime
waynesutton
Patterns for building reactive apps including subscription management, optimistic updates, cache behavior, and paginated queries with cursor-based loading
lifi-dev
mashharuki
>
shadmin-dev
ahaodev
Apply Shadmin feature-development standards (backend Go/Gin/Ent + frontend React/TS). Use when adding/modifying features, CRUD modules, API routes/controllers/usecases/repositories, Ent schemas, frontend pages/routes, React components, TanStack hooks, or any full-stack work in this project. Trigger
hr-portal-skill
hariventures2000-ship-it
Use this skill when developing, testing, debugging, or modifying code inside the HR Portal frontend (apps/hr-portal). It applies to handling HR administration tasks such as employee roster management, contract seeding, leave request approvals, attendance monitoring, payroll calculation, and recruitm
add-feature
adamint
Adds new features to the application including API endpoints, React pages, components, and curriculum content. USE FOR: implementing new features, adding API endpoints, creating React components, adding curriculum content, writing unit/API tests. DO NOT USE FOR: E2E browser tests (use add-e2e-tests
zustand
lobehub
Zustand state management guide. Use when working with store code (src/store/**), implementing actions, managing state, or creating slices. Triggers on Zustand store development, state management questions, or action implementation.