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

cue-kind-definition — скилл для Claude Code: CUE-схемы

Помогает описывать ресурсы приложения в CUE: схемы spec и status, версии, ограничения полей и кодогенерация через grafana-app-sdk.

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

Что делает cue-kind-definition

Скилл ведёт агента по работе с CUE-описаниями kind'ов в приложениях на grafana-app-sdk. Он подсказывает порядок шагов: создать каркас через grafana-app-sdk project kind add MyKind --overwrite, заполнить поля schema.spec и schema.status, затем запустить grafana-app-sdk generate. Отдельно разбирается добавление новой версии к существующему kind'у — копирование файла версии, переименование верхнего объекта и регистрация в kinds/manifest.cue.

Внутри три справочника: полное описание общих полей kind'а и манифеста, типы полей схемы с ограничениями (regex, enum, диапазоны) и именованные типы с префиксом #, а также кастомные маршруты с регистрацией обработчиков в app.go. Есть блок про конфигурацию кодогенерации: флаги ts и go включают или выключают TypeScript и Go, по умолчанию оба включены.

Важное ограничение: ломающие изменения — удаление полей, смена типов, новые обязательные поля — идут только в новую версию. Стабильную версию (v1, v2) править на месте нельзя. Файлы в pkg/generated/ перезаписываются при каждом запуске генератора, поэтому правки там теряются — это повод держать изменения только в .cue.

Когда generate падает с ошибкой CUE, скилл советует прочитать сообщение: там указан файл, строка и ограничение, которое не прошло. Частые причины — пропущенное обязательное поле, несовпадение типов или неразрешённая ссылка между файлами версий.

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

  • создать каркас нового kind'а и не забыть про манифест
  • добавить версию к существующему kind'у без правки стабильной
  • задать ограничения поля через regex, enum или диапазон
  • вынести повторяющуюся структуру в именованный тип с #
  • разобрать ошибку CUE при генерации и понять, что чинить

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

  • Добавь новый kind MyKind в приложение на grafana-app-sdk и заполни схему spec и status
  • Заведи версию v1 для kind'а mykind, скопировав v1alpha1, и зарегистрируй её в kinds/manifest.cue
  • Опиши поле count как int с ограничением >= 0 и вынеси общую структуру в именованный тип

Как установить cue-kind-definition

1Через Skills CLI (Vercel)

npx skills add grafana/skills --skill cue-kind-definition -a claude-code

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

~/.claude/skills/cue-kind-definition/SKILL.md

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

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

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

fleet-management Скилл для управления парком коллекторов Grafana Alloy: один раз описать пайплайн, раскатать его на нужные коллекторы по атрибутам и без перезапуска. CX Codex +1 4 200установок cost-management Скилл разбирает счёт Grafana Cloud по командам и сервисам и подсказывает, как урезать метрики, логи и трейсы. CX Codex +1 4 200установок k6-docs Скилл для составления и проверки документации k6, генерации типов TypeScript и подготовки заметок к релизу. CX Codex +1 4 200установок testing Настраивает проверки доступности, нагрузочные тесты k6 и наблюдаемость фронтенда через Grafana Cloud. Нужен перед релизом и для поиска сбоев. CX Codex +1 4 200установок reconciler-logic Помогает создавать реконсилеры и вотчеры для приложений на grafana-app-sdk. Настраивает цикл согласования, атомарные обновления статуса и фильтры ресурсов. CX Codex +1 4 200установок app-sdk-concepts Скилл помогает начинать разработку приложений для Grafana App Platform: выбрать режим, создать каркас и связать CUE-схемы с Go-логикой. CX Codex +1 4 200установок adaptive-metrics Скилл для работы с правилами агрегации Adaptive Metrics: помогает уменьшить число активных серий в Grafana Cloud Metrics и разобраться с высоким счётом за Mimir. CX Codex +1 4 200установок private-connectivity Настраивает приватное подключение к Grafana Cloud через AWS PrivateLink, Azure Private Link, GCP Private Service Connect и PDC. Пригодится, когда телеметрия не должна идти через публичный интернет. CX Codex +1 4 100установок

Похожие

prometheus-grafana devops-skills Скилл помогает агенту поднять сбор метрик в Prometheus, писать запросы PromQL и собирать панели Grafana. Пригодится, когда в проект нужно добавить мониторинг. CX Codex +1 449установок loki-logging devops-skills Скилл помогает настроить Grafana Loki, Promtail и запросы LogQL прямо в проекте, без похода в документацию. CX Codex +1 330установок dashboard-builder affaan-m Скилл помогает создавать рабочие дашборды для Grafana и SigNoz на основе вопросов дежурного инженера, а не случайного списка метрик. CX Codex +1 4 800установок observability-designer Alireza Rezvani Генерирует дашборды Grafana и находит шумные алерты в конфигах мониторинга. Помогает подготовить базовую наблюдаемость для сервиса перед ростом нагрузки. 671установок cost-export ruvnet Выгружает телеметрию расходов агента в формате Prometheus textfile или отправляет JSON через вебхук для внешнего мониторинга. CX Codex +1 681установок monitor-setup Seth Hobson Слэш-команда, которая разворачивает сбор метрик Prometheus, дашборды Grafana, распределённую трассировку и агрегацию логов. CX Codex ★ 41 729звёзд репо

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

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

Вопросы о cue-kind-definition

Как установить cue-kind-definition в Claude?

Выполните npx skills add grafana/skills --skill cue-kind-definition -a claude-code. Скилл появится в ~/.claude/skills/cue-kind-definition/SKILL.md.

Что делает cue-kind-definition?

Проводит агента по написанию CUE-описаний kind'ов: каркас через grafana-app-sdk project kind add, схемы spec и status с ограничениями полей, версии в манифесте и запуск grafana-app-sdk generate с разбором ошибок.

Можно ли править стабильную версию kind'а на месте?

Нет. Ломающие изменения — удаление полей, смена типов, новые обязательные поля — выносятся в новую версию, а v1 и v2 остаются как есть.

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

SKILL.md · Apache-2.0
---
name: cue-kind-definition
license: Apache-2.0
description: Author CUE kind definitions for grafana-app-sdk apps - schemas, versioning, field constraints, named type definitions, custom routes, and codegen configuration. Scaffolds kinds via `grafana-app-sdk project kind add`, writes spec/status schemas with type constraints (regex, enum, range), defines `#`-prefixed named types for reusable structs, registers versions in the app manifest, and runs `grafana-app-sdk generate` with explicit error recovery. Use when working with CUE kinds, adding a new resource type, adding a version to an existing kind, writing schema field constraints, defining `#Definition` types, adding custom routes, editing files under `kinds/`, or when the user asks to "model a resource", "add a CUE schema", or "write a kind" — even without saying "CUE" explicitly.
---

# CUE Kind Definition

## Common Workflows

### Adding a new kind

```bash
# 1. Scaffold the kind files
grafana-app-sdk project kind add MyKind --overwrite
# Produces kinds/mykind.cue + kinds/mykind_v1alpha1.cue + updates kinds/manifest.cue.

# 2. Edit the generated .cue files — fill in schema.spec / schema.status fields

# 3. Generate types and clients
grafana-app-sdk generate

# 4. Verify the generated artifacts exist
ls pkg/generated/    # should contain new types for MyKind
```

If `generate` fails with CUE errors:
- Read the error — CUE prints the offending file + line + which constraint failed
- Common causes: missing required field, type mismatch (e.g. `string` field assigned an `int`), unresolved reference between version files
- Fix the `.cue` source, re-run `grafana-app-sdk generate`. Never edit files under `pkg/generated/` — they're overwritten on every run.

### Adding a new version to an existing kind

```bash
# 1. Copy the existing version file
cp kinds/mykind_v1alpha1.cue kinds/mykind_v1.cue

# 2. Edit kinds/mykind_v1.cue — rename the top-level object (e.g. myKindv1) and adjust the schema

# 3. Register the new version in kinds/manifest.cue
#    Add a versions["v1"]: { schema: myKindv1 } entry

# 4. Re-generate
grafana-app-sdk generate

# 5. Verify both versions were generated — per-version Go types live under pkg/generated/<group>/<version>/
ls pkg/generated/             # should list both version directories (e.g. v1alpha1/ v1/)
# Optionally inspect the CRD spec under definitions/ to confirm both versions appear in `spec.versions[]`
```

**Breaking changes** (removing fields, changing types, adding required fields) must go into a new version — never modify a stable version (`v1`, `v2`) in place.

## Kind file structure

The CLI produces a flat layout under `kinds/`:

```
kinds/
├── manifest.cue           # App manifest + version list declarations
├── mykind.cue             # Common (cross-version) kind metadata
└── mykind_v1alpha1.cue    # v1alpha1 schema + codegen config
```

For multi-version kinds, additional version files sit alongside (`mykind_v1.cue`, etc.). For very large kind sets (10+ kinds), consider the per-kind subdirectory layout — full kind anatomy reference in [references/kind-layout.md](references/kind-layout.md).

## CUE Kind Anatomy

Three layers per kind:

### 1. Common kind metadata

```cue
// kinds/mykind.cue
package kinds

myKind: {
    kind: "MyKind"               // Required: PascalCase kind name
    // other cross-version fields (scope, pluralName, validation, mutation, conversion, …)
    // Full field reference in references/kind-layout.md.
}
```

### 2. Per-version schema

```cue
// kinds/mykind_v1alpha1.cue
package kinds

myKindv1alpha1: myKind & {
    schema: {
        spec: {                       // desired state — user-set
            title:       string
            description: string | *""
            count:       int & >=0
            enabled:     bool | *true
        }
        status: {                     // observed state — operator-set
            lastObservedGeneration: int | *0
            state:                  string | *""
            message:                string | *""
        }
    }
    codegen: {
        ts: { enabled: true }
        go: { enabled: true }
    }
}
```

### 3. App manifest

```cue
// kinds/manifest.cue
package kinds

App: {
    appName: "my-app"
    versions: {
        "v1alpha1": { schema: myKindv1alpha1 }
    }
}
```

## Codegen configuration

Control what gets generated per kind per version:

```cue
codegen: {
    ts: { enabled: true | false }   // TypeScript types
    go: { enabled: true | false }   // Go types + client
}
```

Disabling `go` for frontend-only apps avoids unused Go code. Disabling `ts` for backend-only resources reduces bundle size. Both default to `true` when omitted.

## References

- [`references/kind-layout.md`](references/kind-layout.md) — full common-metadata field reference + app manifest fields + per-kind subdirectory layout
- [`references/schema-types.md`](references/schema-types.md) — CUE schema field types (basic types, constraints, regex, enums, maps, lists) + `#`-prefixed named type definitions
- [`references/custom-routes.md`](references/custom-routes.md) — kind-level + version-level custom routes + handler registration in `app.go`

## External resources

- [grafana-app-sdk GitHub](https://github.com/grafana/grafana-app-sdk)
- [CUE Language Reference](https://cuelang.org/docs/)
- [Example kinds layout](https://github.com/grafana/grafana/tree/main/apps/example/kinds)

© grafana · Apache-2.0 · grafana/skills

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

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

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