7.1 KiB
AGENTS.md — StrixScripts
Инструкции за AI coding агенти (Claude Code, GitHub Copilot, Cursor и др.),
работещи в този repo. Ако инструментът ти чете CLAUDE.md вместо този
файл — CLAUDE.md е кратък pointer към този документ; съдържанието не се
дублира умишлено, за да не се разсинхронизира.
Какво е проектът
Колекция от самостоятелни bash скриптове, организирани по функционални
папки. Всеки скрипт решава една конкретна задача и има собствена .md
документация до себе си.
Задължителна структура при всеки нов скрипт
Когато създаваш нов скрипт, следните стъпки са ЗАДЪЛЖИТЕЛНИ, не опционални — пропускането на която и да е от тях е непълна задача, не "готово с TODO":
-
Скриптът и неговият
.mdфайл имат еднакво basename, в една и съща папка:deploy/restart-nginx.sh→deploy/restart-nginx.md. Вижtemplates/script-template.mdза структурата, която.mdфайлът трябва да следва. -
Скриптът source-ва
lib/common.shи извикваcommon::show_help_if_requested "$@"веднага след дефиниране наSCRIPT_HELPheredoc-а, преди какъвто и да е друг argument parsing. Вижtemplates/script-template.shза точния pattern иexamples/hello-world.shза работещ пример. -
--help(и-h) работи и показва пълна информация — какво прави скриптът, какви опции приема, поне един пример за извикване. Това е съдържанието наSCRIPT_HELP, не отделна имплементация — не пиши ръченif [[ "$1" == "--help" ]]в скрипта, common.sh вече го прави. -
В
README.md(корена на проекта) се добавя ред в секцията на съответната категория папка — кратко описание (едно изречение) + relative link към.mdфайла на скрипта. Пълното описание живее само в скрипт-специфичния.md, README не го дублира. -
В началото се проверяват всички задължителни команди и програми. След
common::show_help_if_requested "$@"и преди основната работа извикайcommon::require_cmdза всяка външна команда, без която скриптът не може да изпълни предназначението си. При липсваща команда helper-ът извежда разбираемо съобщение и прекратява изпълнението. Незадължителните команди се проверяват условно и трябва да имат fallback или описано ограничено поведение; липсата им не бива да спира скрипта без причина. Изброй задължителните и незадължителните зависимости в съответния.md. -
Скриптът минава
shellcheckбез warnings (виж.shellcheckrcв корена). Ако warning-ът е false positive, добави# shellcheck disable=SCxxxxс коментар защо точно на реда, не глобално в файла. -
set -euo pipefailв началото на всеки скрипт, веднага след shebang реда и коментарния блок. Без изключения — ако скрипт умишлено трябва да продължи след грешка в конкретна команда, обгради само тази команда с|| trueили явна проверка, не маха globalset -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) съществува. Реални функционални
категории папки и скриптове предстои да бъдат създадени.