graphql-operations — скилл для Claude Code: запросы, мутации
Скилл для написания GraphQL-операций: запросы, мутации, подписки и фрагменты по правилам проекта. Пригодится, когда агент сочиняет операции наугад.
npx skills add apollographql/skills --skill graphql-operations -a claude-codeЧто делает graphql-operations
Скилл задаёт агенту порядок работы с GraphQL. Перед тем как писать операцию, он ищет схему проекта: запись schema в codegen.ts, graphql.config.* или apollo.config.*, затем файлы SDL *.graphql. Использовать разрешено только те поля, аргументы и значения enum, которые схема объявляет. Готовую операцию скилл сохраняет рядом с уже существующими операциями клиента, а серверную схему не трогает, пока вы не попросите.
Внутри — справочник по структуре запросов, мутаций и подписок, синтаксису переменных, директивам @include и @skip, а также отдельные файлы references/queries.md, references/mutations.md, references/fragments.md, references/variables.md и references/tooling.md. Правила простые: имена операциям давать всегда, динамические значения передавать переменными, запрашивать только нужные поля, для кэшируемых типов включать id, фрагменты держать рядом с компонентами. Настроены инструменты Bash(npm:*), Bash(npx:*), Read, Write, Edit, Glob, Grep.
Скилл рассчитан на любой GraphQL-клиент: Apollo Client, urql, Relay и другие. Но примеры полей в нём — иллюстрации, а не готовый набор для вашего API. Если схема не найдена, агент упрётся в первые же имена полей, поэтому стоит заранее убедиться, что она лежит в проекте или доступна через конфиг.
Какие задачи решает
- написать запрос по реальной схеме, а не по памяти
- разложить повторяющиеся выборки полей по фрагментам
- убрать лишние поля из тяжёлого запроса
- вынести значения в переменные вместо хардкода
- подключить генерацию типов и линтинг операций
Примеры запросов агенту
- Напиши мутацию CreatePost по нашей схеме и сохрани её рядом с остальными операциями
- Разбей этот запрос на фрагменты и положи их в файлы компонентов
- Проверь мои операции: где переизбыток полей и хардкод вместо переменных?
Как установить graphql-operations
1Через Skills CLI (Vercel)
npx skills add apollographql/skills --skill graphql-operations -a claude-code2Вручную: положить файлы
~/.claude/skills/graphql-operations/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/graphql-operations/
1Через Skills CLI (Vercel)
npx skills add apollographql/skills --skill graphql-operations -a codex2Вручную: положить файлы
.agents/skills/graphql-operations/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add apollographql/skills --skill graphql-operations -a cursor2Вручную: положить файлы
.cursor/skills/graphql-operations/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install apollographql/skills graphql-operations2Вручную: положить файлы
.github/skills/graphql-operations/SKILL.md1Через Skills CLI (Vercel)
npx skills add apollographql/skills --skill graphql-operations -a gemini-cli2Командой платформы
gemini skills install https://github.com/apollographql/skills --path skills/graphql-operationsВручную: положить файлы
.devin/skills/graphql-operations/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add apollographql/skills --skill graphql-operations -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о graphql-operations
Как установить graphql-operations в Claude?
Выполните npx skills add apollographql/skills --skill graphql-operations -a claude-code. Скилл окажется в ~/.claude/skills/graphql-operations/SKILL.md.
Что делает graphql-operations?
Помогает агенту писать запросы, мутации и подписки: сначала читает схему проекта, потом собирает операцию из её полей и аргументов. Заодно подсказывает, как организовать фрагменты и настроить генерацию типов.
С какими GraphQL-клиентами он совместим?
С любым: Apollo Client, urql, Relay и прочие. Скилл не привязан к конкретной библиотеке, потому что опирается на схему и синтаксис операций.
Исходный текст
SKILL.md · MIT
---
name: graphql-operations
description: >
Guide for writing GraphQL operations (queries, mutations, fragments) following best practices. Use this skill when:
(1) writing GraphQL queries or mutations,
(2) organizing operations with fragments,
(3) optimizing data fetching patterns,
(4) setting up type generation or linting,
(5) reviewing operations for efficiency.
license: MIT
compatibility: Any GraphQL client (Apollo Client, urql, Relay, etc.)
metadata:
author: apollographql
version: "1.0.1"
allowed-tools: Bash(npm:*) Bash(npx:*) Read Write Edit Glob Grep
---
# GraphQL Operations Guide
This guide covers best practices for writing GraphQL operations (queries, mutations, subscriptions) as a client developer. Well-written operations are efficient, type-safe, and maintainable.
## Start From the Schema
Write every operation against the project's schema, not against the examples in this guide.
1. Find the schema before you write anything. Check the `schema` entry in `codegen.ts`, `graphql.config.*`, or `apollo.config.*`, then look for `*.graphql` SDL files.
2. Use only the fields, arguments, and enum values that the schema defines. Field names in this guide, such as `updatedAt` or `orderBy: { field: CREATED_AT, direction: DESC }`, are illustrations.
3. Save the operation as a document next to the client's existing operations. Leave the server schema unchanged unless the user asks for a schema change.
## Operation Basics
### Query Structure
```graphql
query GetUser($id: ID!) {
user(id: $id) {
id
name
email
}
}
```
### Mutation Structure
```graphql
mutation CreatePost($input: CreatePostInput!) {
createPost(input: $input) {
id
title
createdAt
}
}
```
### Subscription Structure
```graphql
subscription OnMessageReceived($channelId: ID!) {
messageReceived(channelId: $channelId) {
id
content
sender {
id
name
}
}
}
```
## Quick Reference
### Operation Naming
| Pattern | Example |
| ------------ | ------------------------------------------- |
| Query | `GetUser`, `ListPosts`, `SearchProducts` |
| Mutation | `CreateUser`, `UpdatePost`, `DeleteComment` |
| Subscription | `OnMessageReceived`, `OnUserStatusChanged` |
### Variable Syntax
```graphql
# Required variable
query GetUser($id: ID!) { ... }
# Optional variable with default
query ListPosts($first: Int = 20) { ... }
# Multiple variables
query SearchPosts($query: String!, $status: PostStatus, $first: Int = 10) { ... }
```
### Fragment Syntax
```graphql
# Define fragment
fragment UserBasicInfo on User {
id
name
avatarUrl
}
# Use fragment
query GetUser($id: ID!) {
user(id: $id) {
...UserBasicInfo
email
}
}
```
### Directives
```graphql
query GetUser($id: ID!, $includeEmail: Boolean!) {
user(id: $id) {
id
name
email @include(if: $includeEmail)
}
}
query GetPosts($skipDrafts: Boolean!) {
posts {
id
title
draft @skip(if: $skipDrafts)
}
}
```
## Key Principles
### 1. Request Only What You Need
```graphql
# Good: Specific fields
query GetUserName($id: ID!) {
user(id: $id) {
id
name
}
}
# Avoid: Over-fetching
query GetUser($id: ID!) {
user(id: $id) {
id
name
email
bio
posts {
id
title
content
comments {
id
}
}
followers {
id
name
}
# ... many unused fields
}
}
```
### 2. Name All Operations
```graphql
# Good: Named operation
query GetUserPosts($userId: ID!) {
user(id: $userId) {
posts {
id
title
}
}
}
# Avoid: Anonymous operation
query {
user(id: "123") {
posts {
id
title
}
}
}
```
### 3. Use Variables, Not Inline Values
```graphql
# Good: Variables
query GetUser($id: ID!) {
user(id: $id) {
id
name
}
}
# Avoid: Hardcoded values
query {
user(id: "123") {
id
name
}
}
```
### 4. Colocate Fragments with Components
```tsx
// UserAvatar.tsx
export const USER_AVATAR_FRAGMENT = gql`
fragment UserAvatar on User {
id
name
avatarUrl
}
`;
function UserAvatar({ user }) {
return <img src={user.avatarUrl} alt={user.name} />;
}
```
## Reference Files
Detailed documentation for specific topics:
- [Queries](references/queries.md) - Query patterns and optimization
- [Mutations](references/mutations.md) - Mutation patterns and error handling
- [Fragments](references/fragments.md) - Fragment organization and reuse
- [Variables](references/variables.md) - Variable usage and types
- [Tooling](references/tooling.md) - Code generation and linting
## Ground Rules
- ALWAYS read the project's schema first, and use only the fields, arguments, and enum values it defines
- ALWAYS name your operations (no anonymous queries/mutations)
- ALWAYS use variables for dynamic values
- ALWAYS request only the fields you need
- ALWAYS include `id` field for cacheable types
- NEVER hardcode values in operations
- NEVER duplicate field selections across files
- PREFER fragments for reusable field selections
- PREFER colocating fragments with components
- USE descriptive operation names that reflect purpose
- USE `@include`/`@skip` for conditional fields
© apollographql · MIT · apollographql/skills