К основному содержанию
скилл CX Codex

fastify — скилл для Claude Code: паттерны Fastify на TypeScript

Скилл для ИИ-агентов с готовыми паттернами Fastify на TypeScript: схемы, плагины, обработка ошибок, тесты через inject.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add bobmatnyc/claude-mpm-skills --skill fastify -a claude-code
Открыть на GitHub

Что делает fastify

Скилл описывает, как собирать бэкенд на Fastify в TypeScript: валидация через JSON schema, изоляция маршрутов и зависимостей в плагинах, типизированные роуты, централизованный обработчик ошибок, логирование, graceful shutdown и тесты через inject() без поднятия порта.

Внутри — примеры кода и разбор частых ошибок. Отдельный блок про выбор провайдера типов: Zod подойдёт, если в проекте уже стандартизировали Zod, TypeBox — если нужна генерация OpenAPI. Есть разделы про безопасность (@fastify/helmet, @fastify/cors, @fastify/rate-limit) и сравнение Fastify с Express. Скилл не вызывается пользователем напрямую и не запускает модель сам — он подгружается как справочник, когда агент пишет код на Fastify.

Ограничение простое: скилл про Fastify, и для Express-проекта он бесполезен. Плагины безопасности и провайдеры типов нужно ставить в проект отдельно — в скилле только паттерны их подключения.

Какие задачи решает

  • поднять типизированный сервер на Fastify с логированием
  • связать Zod-схему с валидацией запроса и статическими типами
  • разнести маршруты и зависимости по плагинам с префиксами
  • задать единый формат ответа при ошибке и логировать детали
  • протестировать роут через inject() без открытия порта

Примеры запросов агенту

  • Собери Fastify-сервер на TypeScript с Zod-провайдером и валидацией querystring
  • Добавь в приложение helmet, cors и rate-limit по паттернам из скилла
  • Напиши тест для роута /health через app.inject()

Как установить fastify

1Через Skills CLI (Vercel)

npx skills add bobmatnyc/claude-mpm-skills --skill fastify -a claude-code

2Вручную: положить файлы

~/.claude/skills/fastify/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/fastify/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора65

session-compression Скилл с приёмами сжатия многошаговых диалогов: суммаризация, поиск по эмбеддингам, управление контекстом. Пригодится, когда история чата подбирается к лимиту окна. CX Codex +1 642установок opentelemetry Скилл с паттернами OpenTelemetry: трейсы, метрики, логи, проброс контекста и пайплайны Collector. Пригодится, когда сервис пора инструментировать, а не гадать по логам. CX Codex +1 635установок xlsx Скилл для чтения, записи и правки Excel-файлов из кода: openpyxl, pandas и библиотека xlsx для JavaScript. CX Codex +1 588установок wordpress-security-validation Скилл для безопасной разработки плагинов и тем WordPress: санитизация ввода, проверка логики и экранирование вывода. Пригодится, когда обрабатываете формы, AJAX или выводите чужие данные. CX Codex +1 581установок git-workflow Скилл с готовыми Git-паттернами: коммиты, ветки, конфликты, rebase и хуки. Пригодится, когда агент трогает версионирование. CX Codex +1 556установок zustand Скилл по zustand: минимальный стейт-менеджер для React на хуках, без провайдеров и лишнего кода. Пригодится, когда глобальное состояние нужно, а Redux не хочется. CX Codex +1 485установок hono-core Скилл по Hono: маршрутизация, контекст, обработчики и ответы для одного кода на Cloudflare Workers, Deno, Bun и Node.js. CX Codex +1 483установок asyncio Скилл по Python asyncio: корутины, задачи, event loop, aiohttp и асинхронные эндпоинты FastAPI. Пригодится, когда код ждёт сеть или базу. CX Codex +1 476установок

Похожие

fastify-typescript Mindrally Задаёт агенту соглашения по Fastify и TypeScript: схемы валидации, плагины, Prisma и тесты через Jest. Пригодится, когда пишете типизированный REST API. CX Codex +1 856установок fastify-best-practices mcollina Скилл обучает ассистента архитектуре серверов на Fastify для Node.js. Он помогает настраивать маршруты, плагины, валидацию схем и логирование через Pino. CX Codex +1 81 400установок nodejs-backend-patterns Seth Hobson Подсказывает агенту, как строить серверы на Express и Fastify: middleware, обработка ошибок, авторизация, работа с базами. CX Codex 48 535установок zod-validation-utilities giuseppe-trisciuoglio Помогает писать схемы Zod v4 для проверки API, форм и конфигурации в TypeScript. Пригодится для разбора внешних данных и понятной обработки ошибок. CX Codex +1 3 800установок encore-api encoredev Помогает агенту писать эндпоинты Encore.ts через api(...): типы запроса и ответа, параметры пути, валидация, ошибки. CX Codex +1 828установок nodejs-backend alinaqi Скилл задаёт структуру Node.js-проекта и готовые шаблоны для Express, Fastify и репозиториев. Подключается, когда агент правит код в src/api, src/routes или src/server. CX Codex +1 434установок

Рядом в теме «Бэкенд и API»

Всё по теме «Бэкенд и API» →

Вопросы о fastify

Как установить fastify в Claude?

Выполните npx skills add bobmatnyc/claude-mpm-skills --skill fastify -a claude-code. Файл скилла окажется по пути ~/.claude/skills/fastify/SKILL.md.

Что делает скилл fastify?

Даёт агенту паттерны production-бэкенда на Fastify: схемы и провайдеры типов, плагины, обработку ошибок, безопасность, логирование, тесты через inject и graceful shutdown.

Zod или TypeBox — что выбрать?

Скилл советует Zod, если в проекте уже используют Zod (формы, tRPC, общие типы), и TypeBox — под генерацию OpenAPI и валидацию, где важна производительность.

Исходный текст

SKILL.md · MIT
---
name: fastify
description: "Production Fastify (TypeScript) patterns: schema validation, plugins, typed routes, error handling, security hardening, logging, testing with inject, and graceful shutdown"
user-invocable: false
disable-model-invocation: true
version: 1.0.0
category: toolchain
author: Claude MPM Team
license: MIT
progressive_disclosure:
  entry_point:
    summary: "Build fast, type-safe Node APIs with Fastify using schema-first validation, plugin encapsulation, and production middleware patterns"
    when_to_use: "When building TypeScript backends needing high performance, schema-based validation, clean plugin composition, and strong testability"
    quick_start: "1. Create Fastify instance 2. Add Type Provider (Zod/TypeBox) 3. Register plugins (CORS/Helmet) 4. Add error handler + logging 5. Test with inject()"
  token_estimate:
    entry: 130
    full: 5200
context_limit: 900
tags:
  - typescript
  - fastify
  - nodejs
  - api
  - validation
  - json-schema
  - security
  - testing
requires_tools: []
---

# Fastify (TypeScript) - Production Backend Framework

## Overview

Fastify is a high-performance Node.js web framework built around JSON schema validation, encapsulated plugins, and great developer ergonomics. In TypeScript, pair Fastify with a type provider (Zod or TypeBox) to keep runtime validation and static types aligned.

## Quick Start

### Minimal server

✅ **Correct: basic server with typed response**
```ts
import Fastify from "fastify";

const app = Fastify({ logger: true });

app.get("/health", async () => ({ status: "ok" as const }));

await app.listen({ host: "0.0.0.0", port: 3000 });
```

❌ **Wrong: start server without awaiting listen**
```ts
app.listen({ port: 3000 });
console.log("started"); // races startup and hides bind failures
```

## Schema Validation + Type Providers

Fastify validates requests/responses via JSON schema. Use a type provider to avoid duplicating types.

### Zod provider (recommended for full-stack TypeScript)

✅ **Correct: Zod schema drives validation + types**
```ts
import Fastify from "fastify";
import { z } from "zod";
import { ZodTypeProvider } from "fastify-type-provider-zod";

const app = Fastify({ logger: true }).withTypeProvider<ZodTypeProvider>();

const Query = z.object({ q: z.string().min(1) });

app.get(
  "/search",
  { schema: { querystring: Query } },
  async (req) => {
    return { q: req.query.q };
  },
);

await app.listen({ port: 3000 });
```

### TypeBox provider (recommended for OpenAPI + performance)

✅ **Correct: TypeBox schema**
```ts
import Fastify from "fastify";
import { Type } from "@sinclair/typebox";
import { TypeBoxTypeProvider } from "@fastify/type-provider-typebox";

const app = Fastify({ logger: true }).withTypeProvider<TypeBoxTypeProvider>();

const Params = Type.Object({ id: Type.String({ minLength: 1 }) });
const Reply = Type.Object({ id: Type.String() });

app.get(
  "/users/:id",
  { schema: { params: Params, response: { 200: Reply } } },
  async (req) => ({ id: req.params.id }),
);

await app.listen({ port: 3000 });
```

## Plugin Architecture (Encapsulation)

Use plugins to keep concerns isolated and testable (auth, db, routes).

✅ **Correct: route plugin**
```ts
import type { FastifyPluginAsync } from "fastify";

export const usersRoutes: FastifyPluginAsync = async (app) => {
  app.get("/", async () => [{ id: "1" }]);
  app.get("/:id", async (req) => ({ id: (req.params as any).id }));
};
```

✅ **Correct: register with a prefix**
```ts
app.register(usersRoutes, { prefix: "/api/v1/users" });
```

## Error Handling

Centralize unexpected failures and return stable error shapes.

✅ **Correct: setErrorHandler**
```ts
app.setErrorHandler((err, req, reply) => {
  req.log.error({ err }, "request failed");
  reply.status(500).send({ error: "internal" as const });
});
```

## Security Hardening (Baseline)

Add standard security plugins and enforce payload limits.

✅ **Correct: Helmet + CORS + rate limiting**
```ts
import helmet from "@fastify/helmet";
import cors from "@fastify/cors";
import rateLimit from "@fastify/rate-limit";

await app.register(helmet);
await app.register(cors, { origin: false });
await app.register(rateLimit, { max: 100, timeWindow: "1 minute" });
```

## Graceful Shutdown

Close HTTP server and downstream clients (DB, queues) on SIGINT/SIGTERM.

✅ **Correct: close on signals**
```ts
const close = async (signal: string) => {
  app.log.info({ signal }, "shutting down");
  await app.close();
  process.exit(0);
};

process.on("SIGINT", () => void close("SIGINT"));
process.on("SIGTERM", () => void close("SIGTERM"));
```

## Testing (Fastify inject)

Test routes in-memory without binding ports.

✅ **Correct: inject request**
```ts
import Fastify from "fastify";
import { describe, it, expect } from "vitest";

describe("health", () => {
  it("returns ok", async () => {
    const app = Fastify();
    app.get("/health", async () => ({ status: "ok" as const }));

    const res = await app.inject({ method: "GET", url: "/health" });
    expect(res.statusCode).toBe(200);
    expect(res.json()).toEqual({ status: "ok" });
  });
});
```

## Decision Trees

### Fastify vs Express

- Prefer **Fastify** for schema-based validation, predictable plugins, and high throughput.
- Prefer **Express** for minimal middleware and maximal ecosystem familiarity.

### Zod vs TypeBox

- Prefer **Zod** for app codebases that already standardize on Zod (forms, tRPC, shared types).
- Prefer **TypeBox** for OpenAPI generation and performance-critical validation.

## Anti-Patterns

- Skip request validation; validate at boundaries with schemas.
- Register everything in `main.ts`; isolate routes and dependencies into plugins.
- Return raw error objects; return stable error shapes and log the details.

## Resources

- Fastify: https://www.fastify.io/
- fastify-type-provider-zod: https://github.com/turkerdev/fastify-type-provider-zod
- @fastify/type-provider-typebox: https://github.com/fastify/fastify-type-provider-typebox

© Claude MPM Team · MIT · bobmatnyc/claude-mpm-skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой