CB Bash
Writes, debugs, and hardens Bash shell scripts — quoting, arrays, strict mode, traps, argument parsing, and macOS/Linux portability. Use when writing or reviewing any script, one-liner, cron job, deploy script, container entrypoint, or CI step; when a script breaks on spaces in filenames, exits silently, ignores set -e, hangs, or returns the wrong exit code; when quoting, IFS, globs, arrays, heredocs, process substitution, trap, getopts, or mapfile misbehave; when shellcheck flags SC2086 and friends; when unbound variable, bad substitution, command not found, ambiguous redirect, or unexpected end of file show up; when a script works by hand but fails under cron, systemd, sudo, or a CI runner; or when porting between macOS bash 3.2, GNU/Linux, WSL, and POSIX sh. Not for interactive zsh or fish configuration, not for PowerShell, and not for host-level cron, systemd, or permission failures (linux).
Как процесс B 66/100 · Почти готов — слабые места: входы и предусловия, повторный запуск
Чем это грозит
Находки средней серьёзности: скорее всего скилл честный, но прочитайте, что именно насторожило сканер.
Ниже описан худший случай для этой категории. Здесь находка средней серьёзности: guard увидел признак, но не доказательство.
Скилл содержит команды, которые удаляют файлы, переписывают диски или исполняют код, скачанный из сети. Агент может выполнить их без вопроса, если считает, что так требует инструкция.
Замените разрушительные команды на безопасные аналоги с подтверждением, ограничьте область действия конкретной папкой и не тяните код через curl | bash: укажите версию и контрольную сумму.
Как улучшить
- Свои кейсы (evals/evals.json, 4–6 реальных запросов с ожидаемыми ответами): тогда полная проверка прогонит именно их, а не черновик от модели.
- spec.yaml с триггерными фразами и утверждениями — контракт поведения для CI; `skilltest init` создаст шаблон.
Находки guard · 14
✓ Критических и высоких находок нет
Средние и низкие: 14
-
средняя Опасные команды
cmd-persistencecron.md:33Механизм закрепления (cron / launchd / планировщик / автозапуск в реестре) (определение детектора / чёрного списка)- Files in `/etc/cron.d/` are ignored by `run-parts` if the filename contains a dot — `backup.sh` there never runs, `backup` does. `/etc/cron.d` and `/etc/crontab` also take a USER field before the co
детектор -
средняя Опасные команды
cmd-persistencecron.md:81Механизм закрепления (cron / launchd / планировщик / автозапуск в реестре) (в кавычках — упоминание, а не команда)- `~/Library/LaunchAgents/<label>.plist` for user jobs, `/Library/LaunchDaemons/` for system ones; `StartCalendarInterval` for a schedule, `StartInterval` for "every N seconds", `RunAtLoad` for boot
в кавычках -
средняя Опасные команды
cmd-persistencecron.md:85Механизм закрепления (cron / launchd / планировщик / автозапуск в реестре) (в кавычках — упоминание, а не команда)- Reload after editing: `launchctl unload` then `launchctl load` the plist; editing alone changes nothing
в кавычках -
средняя Опасные команды
cmd-pipe-to-shellSKILL.md:189Скачивание и запуск удалённого кода с неизвестного хоста (pipe в shell) (в кавычках — упоминание, а не команда)- **Safety posture**: whether scripts may `sudo`, dry-run first, banned constructs (`eval`, `curl | sh`, `rm -rf` on a variable) — affects `security.md` and destructive workflows
в кавычках -
низкая Опасные команды
cmd-cron-mentioncron.md:35Упоминание редактирования crontab (в кавычках — упоминание, а не команда)- `crontab -e` validates syntax; copying a file over `/var/spool/cron/…` by hand does not
в кавычках -
низкая Опасные команды
cmd-privilegedebugging.md:75Повышение привилегий / права на запись для всех (в кавычках — упоминание, а не команда)- Redirection is done by YOUR shell before sudo runs: `sudo cmd > /root/out` fails on permissions; `cmd | sudo tee /root/out >/dev/null` works.
в кавычках -
низкая Опасные команды
cmd-background-processprocesses.md:79Запуск фонового / автозапускаемого процесса (в кавычках — упоминание, а не команда)- `nohup cmd &` survives a hangup but still shares the terminal's session; `setsid cmd` starts a new session, fully detached
в кавычках -
низкая Опасные команды
cmd-background-processprocesses.md:80Запуск фонового / автозапускаемого процесса (в кавычках — упоминание, а не команда)- `disown -h %1` removes a running job from the shell's SIGHUP list without stopping it — the fix when you forgot `nohup`
в кавычках -
низкая Опасные команды
cmd-privilegequoting.md:59Повышение привилегий / права на запись для всех (определение детектора / чёрного списка)- `su -c`, `bash -c`, `sudo sh -c`, `xargs sh -c`, `find -exec sh -c` — same hop, same fix. With `find`, keep the data out of the string: `find . -exec sh -c 'process "$1"' _ {} \;` passes the filenamдетектор -
низкая Опасные команды
cmd-pipe-to-shellsecurity.md:15Скачивание и запуск удалённого кода с неизвестного хоста (pipe в shell) (строка таблицы в документации; документация security-скилла)| `bash <(curl …)`, `curl … \| sh` | Executes whatever the server returns, including a truncated download | Download, verify a published checksum or signature, inspect, then run |
таблицаsecurity-скилл -
низкая Опасные команды
cmd-privilegesecurity.md:45Повышение привилегий / права на запись для всех (с отрицанием — текст это запрещает)- Never `chmod 777` a temp path to "fix permissions"; set the umask (`umask 077`) before creating instead
с отрицанием -
низкая Опасные команды
cmd-privilegesecurity.md:52Повышение привилегий / права на запись для всех (документация security-скилла)- Setuid on a shell script does nothing on Linux — the kernel ignores it, and every workaround (wrapper binaries, `sudo` shims) is a privilege-escalation surface. Grant a narrow `sudo` rule for one ex
security-скилл -
низкая Опасные команды
cmd-privilegeSKILL.md:205Повышение привилегий / права на запись для всех (строка таблицы в документации)| `sudo cmd > /root/out` | the redirection is performed by YOUR shell before sudo runs — permission denied | `cmd \| sudo tee /root/out >/dev/null` |
таблица
Ещё 1 совпадений отнесены к цитатам в документации скилла по безопасности и не считаются находками.
Просканировано файлов: 23. Улики замаскированы. Пометки в серых чипах объясняют, почему серьёзность понижена.
По спецификации Agent Skills
- предупреждение
name-formatname должен быть в kebab-case (строчные буквы, цифры, дефисы) - заметка
frontmatter-keyнеизвестное поле фронтматтера "slug" - заметка
frontmatter-keyнеизвестное поле фронтматтера "homepage" - заметка
frontmatter-keyнеизвестное поле фронтматтера "changelog"
Процессный рейтинг: все десять параметров 66/100
- 0Входы и предусловия. Не сказано, что нужно иметь на входе
- 30Повторный запуск. Изменяющих операций: 10, без проверки текущего состояния
- 50Когда включается. Не сказано, при каком запросе скилл включается
- 60Инструменты и файлы. Используются инструменты (bash, web, python), но во frontmatter они не объявлены
- 60Результат и критерий готовности. Формат результата описан, критерия завершения нет
- 70Стоимость исполнения. Тело инструкции 4204 токенов
- 100Шаги. Шагов: 52
- 100Ошибки и развилки. Развилок: 1, есть раздел про ошибки
- 100Согласованность. Имя и обязательные поля на месте
- 100Отчётность по ходу. Скилл сообщает о ходе работы
- medium Правила безопасности и запреты внутри скилла: их место в системном промпте, здесь они не защищают
- low Разделов верхнего уровня: 14. Похоже на несколько доменов в одном скилле
Всё перечисленное измерено по тексту скилла, а не оценено моделью: цифры проверяемы. Вес параметра тем больше, чем чаще из-за него процесс встаёт.
Сигналы качества
- +5В description нет примеров фраз, по которым скилл должен срабатывать
- +3Длина description 908: рекомендуется 120–800 символов
- +1Лицензия не указана
- +2Инструкции на одном языке
- +4Описание говорит, когда скилл НЕ применять
- +4Структура: 14 заголовков
- +3Пошаговые инструкции: 52 пунктов
- +3Формат ответа описан явно
- +4Есть примеры (1 блоков кода)
База качества 70; замечания lint вычитаются, сигналы прибавляют до 100. Итог: 80.