Files
StrixScripts/AGENTS.md
T

6.2 KiB
Raw Blame History

AGENTS.md — StrixScripts

Инструкции за AI coding агенти (Claude Code, GitHub Copilot, Cursor и др.), работещи в този repo. Ако инструментът ти чете CLAUDE.md вместо този файл — CLAUDE.md е кратък pointer към този документ; съдържанието не се дублира умишлено, за да не се разсинхронизира.

Какво е проектът

Колекция от самостоятелни bash скриптове, организирани по функционални папки. Всеки скрипт решава една конкретна задача и има собствена .md документация до себе си.

Задължителна структура при всеки нов скрипт

Когато създаваш нов скрипт, следните стъпки са ЗАДЪЛЖИТЕЛНИ, не опционални — пропускането на която и да е от тях е непълна задача, не "готово с TODO":

  1. Скриптът и неговият .md файл имат еднакво basename, в една и съща папка: deploy/restart-nginx.sh → deploy/restart-nginx.md. Виж templates/script-template.md за структурата, която .md файлът трябва да следва.

  2. Скриптът source-ва lib/common.sh и извиква common::show_help_if_requested "$@" веднага след дефиниране на SCRIPT_HELP heredoc-а, преди какъвто и да е друг argument parsing. Виж templates/script-template.sh за точния pattern и examples/hello-world.sh за работещ пример.

  3. --help (и -h) работи и показва пълна информация — какво прави скриптът, какви опции приема, поне един пример за извикване. Това е съдържанието на SCRIPT_HELP, не отделна имплементация — не пиши ръчен if [[ "$1" == "--help" ]] в скрипта, common.sh вече го прави.

  4. В README.md (корена на проекта) се добавя ред в секцията на съответната категория папка — кратко описание (едно изречение) + relative link към .md файла на скрипта. Пълното описание живее само в скрипт-специфичния .md, README не го дублира.

  5. Скриптът минава shellcheck без warnings (виж .shellcheckrc в корена). Ако warning-ът е false positive, добави # shellcheck disable=SCxxxx с коментар защо точно на реда, не глобално в файла.

  6. set -euo pipefail в началото на всеки скрипт, веднага след shebang реда и коментарния блок. Без изключения — ако скрипт умишлено трябва да продължи след грешка в конкретна команда, обгради само тази команда с || true или явна проверка, не маха global set -e.

Конвенции за именуване и стил

  • Файлови имена: kebab-case, описателни глагол+обект (backup-nextcloud.sh, не backup.sh или script1.sh).
  • Категория папки: функционална група (напр. backup/, network/, deploy/) — създавай нова папка само когато скриптовете вътре наистина споделят функционален домейн, не по проект или по дата.
  • Всички коментари в кода — само на английски, независимо от езика на разговора с агента. .md документацията и README.md могат да остават на български — те са за човека, не за компилатора/shellcheck.
  • Грешки: винаги през common::die "message", никога суров echo ... >&2; exit 1 — за консистентен формат на грешките между скриптове.
  • Статус/progress съобщения: през common::log, който пише на stderr, за да остане stdout чист за реален output, който може да бъде pipe-нат или captured от друг скрипт/потребител.

lib/common.sh — НЕ дублирай логика от него

Ако скрипт се нуждае от поведение, което common.sh не предоставя (напр. retry logic, temp file cleanup trap, конкретен validation helper) — разшири common.sh, не пиши локална версия вътре в отделния скрипт. Целта е всеки скрипт да остава кратък и всички споделят едно и също поведение за грешки/help/logging.

examples/ и templates/ — само референция

examples/hello-world.sh е работещ демонстрационен скрипт, показващ пълната конвенция накратко. templates/ съдържа празни шаблони за копиране. Нито едната папка не съдържа реални production скриптове — не ги викай от други скриптове или automation, и не добавяй реални utility скриптове там.

Статус

Проектът е в начален етап — само structural скелет (lib/common.sh, templates/, examples/hello-world.sh) съществува. Реални функционални категории папки и скриптове предстои да бъдат създадени.