@nitra/cursor
CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій
Package details
Install @nitra/cursor from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@nitra/cursor- Package
@nitra/cursor- Version
1.27.3- Published
- May 26, 2026
- Downloads
- 24.1K/mo · 8,036/wk
- Author
- vitaliytv
- License
- ISC
- Types
- extension, skill
- Size
- 2.3 MB
- Dependencies
- 6 dependencies · 0 peers
Pi manifest JSON
{
"skills": "skills",
"extensions": ".pi-template/extensions"
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@nitra/cursor
Консольна утиліта для завантаження cursor-правил із префіксом n- у локальний git-репозиторій.
Як це працює
Репозиторій @nitra/cursor містить cursor-правила у директорії rules/<id>/. CLI копіює <id>.mdc обраних правил з каталогу rules/ того пакету, з якого виконується bin/n-cursor.js: після npm i / bun add це зазвичай node_modules/@nitra/cursor/rules/<id>/<id>.mdc; при npx @nitra/cursor пакет потрапляє в кеш npx/npm, і правила читаються з тієї розпакованої копії (у корені проєкту залежність не обов’язкова). Жодних окремих HTTP-запитів до CDN для файлів правил немає — лише те, що вже є в tarball пакету.
Наприклад, правило rules/text/text.mdc буде збережено як .cursor/rules/n-text.mdc.
Підготовка
Перед першим запуском у вашому репозиторії створіть файл .n-cursor.json у корені проекту зі списком правил для завантаження:
{
"$schema": "https://unpkg.com/@nitra/cursor/schemas/n-cursor.json",
"rules": ["npm-module", "text"],
"skills": ["fix", "lint"]
}
Доступні правила:
| Назва | Опис |
|---|---|
npm-module |
Структура репозиторію для npm-модуля (bun mono) |
text |
Текст, oxfmt, cspell, markdownlint, v8r, CI |
k8s |
Kubernetes YAML, Kustomize, kubeconform |
Щоб використовувати конкретну версію правил, оновіть залежність @nitra/cursor у проєкті (bun add -d @nitra/cursor@<версія> тощо). Поле version у .n-cursor.json, якщо воно лишилось у старих конфігах, ігнорується.
Виключення цілих дерев — поле ignore
Поле ignore у .n-cursor.json — список директорій (posix-шляхи відносно кореня репозиторію), які CLI повністю пропускає під час обходу: жоден check-*.mjs не сканує і не валідує файли всередині них, а агент не редагує/не створює/не видаляє там файли. Стандартні виключення (node_modules, .git, dist, coverage, .turbo, .next) працюють завжди — додавати їх у ignore не потрібно.
Типові кандидати: vendored Helm-чарти, генеровані маніфести, legacy-дерева, які не підтягуються під поточні правила:
{
"$schema": "https://unpkg.com/@nitra/cursor/schemas/n-cursor.json",
"rules": ["k8s"],
"ignore": ["dremio/dev/dremio_v2", "postgres-master"]
}
Правило k8s і Kustomize
У цільовому репозиторії з маніфестами під **/k8s дотримуйтесь rules/k8s/k8s.mdc з пакету (після синку — .cursor/rules/n-k8s.mdcабо копія зnode_modules/@nitra/cursor/rules/k8s/k8s.mdc).
Коротко:
- Структура Kustomize: спільне виноситься в
base; вміст base відповідає тому, як має виглядати середовище dev; окремої директоріїdev/немає — за dev відповідаєbase. У інших середовищах — тонкі overlays (часто лишеkustomization.yamlі patches / оверрайди). - Namespace задається в
kustomization.yaml(namespace:), а не черезmetadata.namespaceу кожному ресурсі; окремі patches лише на зміну namespace не потрібні. - У Deployment для кожного контейнера:
resources(перевіряєnpx @nitra/cursor fix k8s); - Рядки в base, які змінюються в overlays, позначайте коментарем на рядку (узгоджено в команді), наприклад:
# буде замінено через kustomize. - Після перенесення в
base/ overlays видаляйте застарілі маніфести та каталоги, які більше не потрібні.
Повний текст правил — у k8s.mdc; programmatic перевірки — у npm/rules/k8s/: JS-checks у js/<concern>/check.mjs, rego-policies у policy/<concern>/<name>.rego (обидва запускаються через npx @nitra/cursor fix k8s).
v8r і власний каталог схем
Скрипт scripts/run-v8r.mjs передає в v8r каталог schemas/v8r-catalog.json пакета автоматично (у репозиторії той самий файл, що й npm/schemas/v8r-catalog.json від кореня монорепо). Якщо викликаєш bunx v8r напряму, передай -c: локально node_modules/@nitra/cursor/schemas/v8r-catalog.json або unpkg. JSON Schema конфігурації: n-cursor.json.
Запуск
npx @nitra/cursor
npx @nitra/cursor fix
npx @nitra/cursor fix bun ga
Команда check запускає programmatic перевірки з каталогу scripts/ пакету. Якщо в корені репозиторію вже є .n-cursor.json, перед перевірками виконується зчитування конфігу — зокрема додається або виправляється поле $schema, якщо воно відсутнє або не збігається з очікуваним URL.
CLI автоматично (команда завантаження правил без підкоманди check):
- Знайде або створить
.n-cursor.jsonу поточній директорії (із полем$schemaна JSON Schema пакету; якщо файл уже є без коректного$schema, поле буде додано або оновлено при зчитуванні конфігу) - Створить директорію
.cursor/rules/, якщо її ще немає - Скопіює кожне з перелічених у конфігу правило з
rules/<id>/<id>.mdcустановленого пакету і збереже файли з префіксомn- - Після оновлення файлів на диску згенерує в корені проєкту
AGENTS.md: повний вміст береться з шаблону пакетуAGENTS.template.md, а список правил у шаблоні формується з усіх наявних файлів*.mdcу.cursor/rules/(відсортовано за ім’ям); секція команд — зpackage.jsonкореня (див.{{#commands}}у шаблоні).
Приклад виводу
🔧 @nitra/cursor — завантаження cursor-правил
📋 Правил до завантаження: 2
⬇ npm-module → .cursor/rules/n-npm-module.mdc ... ✅
⬇ text → .cursor/rules/n-text.mdc ... ✅
📝 Оновлено AGENTS.md з AGENTS.template.md
✨ Готово: 2 завантажено, 0 з помилками
Структура пакету
npm/
├── AGENTS.template.md # шаблон AGENTS.md для цільових репозиторіїв (потрапляє в npm-архів)
├── rules/ # cursor-правила (підкаталог на правило, див. «Структура одного правила»)
│ ├── npm-module/
│ ├── text/
│ └── ...
├── skills/ # скіли (каталоги <id>/; після синку — .cursor/skills/n-<id>/)
├── scripts/ # CLI-утиліти, спільні runner-и, discovery
└── bin/
└── n-cursor.js # CLI-скрипт (точка входу)
Структура одного правила
Кожне правило npm/rules/<id>/ ділиться за технологією реалізації на три сиблінги — js/, lint/, policy/:
npm/rules/<id>/
├── <id>.mdc # текст правила (після синку — .cursor/rules/n-<id>.mdc)
├── auto.md # умова автоактивації скілу (опційно)
├── js/ # JS для `npx @nitra/cursor fix`
│ └── <concern>/
│ ├── check.mjs # діагностика — повертає список violations
│ ├── check.test.mjs
│ └── autofix.mjs # опційно — програмний автофікс
├── lint/ # JS, що живить `bun run lint-<id>` (для правил з канонічним lint-скриптом)
│ ├── lint.mjs # CLI entry для `n-cursor lint-<id>`
│ └── run-*.mjs # допоміжні runner-и (shellcheck, v8r тощо)
└── policy/ # rego для `npx @nitra/cursor fix`
└── <concern>/
├── <concern>.rego # правила (`deny contains msg if …`)
├── <concern>_test.rego # юніт-тести (запускає `bun run lint-rego` → conftest verify)
└── target.json # які файли подавати в conftest (single / walkGlob)
Принцип: технологія реалізації визначає директорію.
| Що реалізує | Канал виклику | Куди |
|---|---|---|
| JS-діагностика + автофікс | npx @nitra/cursor fix (fix-канал) |
js/<concern>/ |
| JS-orchestrator лінту | bun run lint-<id> через n-cursor lint-<id> |
lint/ |
| Rego-діагностика | npx @nitra/cursor fix (fix-канал) |
policy/<concern>/ |
js/ і policy/ обидва живлять fix-канал (npx @nitra/cursor fix запускає і JS-checks, і rego-policies), але розділені за технологією: JS у js/, rego у policy/. lint/ тримає лише JS, що оркеструє bun run lint-<id>.
AGENTS.md у проєкті користувача
Після кожного успішного проходу завантаження правил CLI повністю перезаписує файл AGENTS.md у корені поточної директорії (та сама директорія, де лежить .n-cursor.json).
- Джерело тексту — файл
AGENTS.template.mdз установленого пакету@nitra/cursor(його не редагують у чужому репозиторії; зміни вносять у цьому репозиторії пакету). - Динамічний список правил - Скрипт зчитує каталог
.cursor/rules/і для кожного файлу з розширенням.mdcдодає в шаблон рядок виду- .cursor/rules/<ім’я>.mdc. Туди потрапляють і керовані правила з префіксомn-, і будь-які інші.mdc, які вже лежать у цій папці. - Редагувати згенерований
AGENTS.mdу проєкті користувача немає сенсу — наступний запуск CLI знову замінить файл. Власні інструкції для агентів треба закладати вAGENTS.template.mdу репозиторії@nitra/cursorабо тримати окремо від автогенерації.
Інструкція для розробників пакету
Зміна шаблону AGENTS
- Редагуйте
npm/AGENTS.template.md. Файл має бути перелічений у поліfilesуnpm/package.json, щоб потрапляти в публікацію npm (разом зrules/,skills/,bin/). - Для вставки списку файлів правил використовуйте блок у стилі Mustache з ім’ям секції
servicesі плейсхолдером{{name}}:
{{#services}}
{{name}}
{{/services}}
Під час запуску CLI тіло між {{#services}} і {{/services}} повторюється для кожного *.mdc у .cursor/rules/; у {{name}} підставляється вже готовий markdown-рядок (наприклад - .cursor/rules/n-text.mdc).
Для секції Skills використовуйте блок
{{#skills}}…{{/skills}}з тим самим{{name}}: рядки формуються з каталогів у.cursor/skills/(див. такожbuildSkillBulletItemsуbin/n-cursor.js).Для секції Commands використовуйте
{{#commands}}…{{/commands}}: список генерується з кореневогоpackage.json(полеscripts— відомі ключі у фіксованому порядку, плюс додатковіlint-*) та завжди доповнюється рядками проnpx @nitra/cursorіnpx @nitra/cursor fix. Логіка винесена вnpm/scripts/build-agents-commands.mjs.Після змін у шаблоні перевірте локально: у тестовому репозиторії з
.n-cursor.jsonвиконайтеnpx/bunxна зібраному пакеті абоnode npm/bin/n-cursor.jsз кореня того репозиторію і переконайтеся, щоAGENTS.mdвиглядає як очікується.
Логіка в коді CLI
- Шлях до шаблону: поруч із
rules/, тобто…/node_modules/@nitra/cursor/AGENTS.template.mdпісля встановлення пакету. - Оновлення
AGENTS.mdвиконується після циклу завантаження правил, щоб список відображав актуальний вміст.cursor/rules/на диску. - Якщо каталогу
.cursor/rules/немає або в ньому немає*.mdc, блок{{#services}}стає порожнім; решта шаблону все одно записується вAGENTS.md. - Секція
commandsзалежить лише відpackage.jsonу корені cwd; якщо файлу немає абоscriptsвідсутній, у блоці лишаються мінімальні рядки (bun i, виклики CLI).
Мета проекту
Консольна утиліта яка дозволить оновлювати в локальних GIT репозиторіях правила для cursor з можливістю наслідування правил від файлів в цьому репозиторії та забезпечення версійності правил для cursor.