caveman-portability (модуль полного канона)
🇬🇧 English instructions: references/EN.md — полный перевод тела.
Это часть устава пещерника. Полный канон целиком — скилл caveman-canon.
Всё ниже — выдержки из BRO.md один в один (без сокращений).
⚡ ЗАКОН СКИЛЛОВ (авг 2026): на КАЖДЫЙ промт грузи как можно больше скиллов
племени — МИНИМУМ 6, лучше ВСЕ 17 (canon + conclusion + teach + cheat + advise + prevent + verify + loop + kill + code + style + think + research + run +
diagnose + save + desktop + portability). Один скилл = одна грань канона; без полного груза
решение кривое, охота слепая. БОЛЬШАЯ задача = ЦИКЛ ПЛЕМЕНИ (скилл caveman-loop): 8 шагов, пока «готово» не доказано фактами, кап 3 итерации → стоп и отчёт.
⚡ ДОКИ ЖЕЛЕЗНО (закон 25, авг 2026): инструмент/флаг незнакомый → СНАЧАЛА
официальная дока + man + --help (RTFM-канон: первая линия, не запасная;
−40% времени, −70% ошибок; официальная дока раньше чужого веба).
Прогрессивно: --help → man → полная дока/вики → потом чужое; сверять
с установленной ВЕРСИЕЙ. Пример: ffmpeg — man ffmpeg + ffmpeg-all.html.
СУТЬ: репозиторий скиллов = переносимый пакет (авг 2026) — РЕШЕНО ✅
Канон (47 источников, кауфми 25 авг 2026: 12-Factor App — config отдельно от кода, env vars; Portable Documentation System — self-contained, offline; Vendor-Agnostic Architecture — API-first, JSON configs; Build Once Run Anywhere — environment-agnostic; Agent-Agnostic Repository — работает с любым AI-агентом; Portable Paths in Knowledge Management — location agnosticism, no os.path.expanduser):
Смысл: репозиторий скиллов = переносимый пакет. Скопировал на флешку, другой ПК, в облако — работает без правок. Никаких /run/media/<user>/..., никаких ~/.config/..., никаких привязок к машине.
ПРАВИЛА (живые):
ОТНОСИТЕЛЬНЫЕ ПУТИ ВЕЗДЕ — скрипты ищут файлы относительно себя:
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SKILLS_DIR="${SKILLS_DIR:-$SCRIPT_DIR}"
Не хардкод /run/media/<user>/data/мой-пакет.
ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ ДЛЯ КОНФИГА — 12-Factor App канон:
# БЫЛО (хардкод):
API_KEY="sk-12345"
DB_PATH="/home/<user>/.db"
# СТАЛО (env vars):
API_KEY="${OPENAI_API_KEY:?нужен OPENAI_API_KEY}"
DB_PATH="${SKILLS_DIR:-.}/data/db"
НИКАКОЙ ПРИВЯЗКИ К МАШИНЕ — не использовать:
/home/username/... (зависит от юзера)
/run/media/... (зависит от точки монтирования)
~/.config/... (зависит от HOME)
- MAC-адреса, hostname, UUID диска
VENDOR-AGNOSTIC ФОРМАТЫ — использовать открытые форматы:
- Markdown (.md) вместо .docx/.pdf
- JSON/YAML вместо бинарных конфигов
- Git вместо SVN/Mercurial
- OpenAI API вместо проприетарных SDK
SELF-CONTAINED ПАКЕТ — всё необходимое внутри пакета:
- Скрипты работают без внешних зависимостей (кроме bash/python3)
- Документация читается без интернета
- Скиллы грузятся из локальной папки, не из облака
BUILD ONCE, RUN ANYWHERE — один раз написал, работает везде:
- Тестировать на 3+ окружениях (Linux/macOS/Windows WSL)
- Контейнеры (Docker) для полной изоляции
- CI/CD прогоняет тесты портативности
АВТОДЕТЕКТ ОКРУЖЕНИЯ — скрипт сам находит где лежит:
# Найти пакет по структуре
find_package() {
local dir="$1"
while [ "$dir" != "/" ]; do
if [ -f "$dir/README.md" ] && [ -d "$dir/skills" ]; then
echo "$dir"
return 0
fi
dir="$(dirname "$dir")"
done
echo "❌ пакет не найден" >&2
return 1
}
КОНФИГ ОТДЕЛЬНО ОТ КОДА — 12-Factor App:
- Код (скрипты) = в git, не меняется
- Конфиг (пути, ключи) = env vars или config.json
- Данные (модули, скиллы) = отдельно, можно обновлять
ГРАБЛИ (не делать):
- ❌
SKILLS_DIR="/run/media/<user>/data/мой-пакет" — сломается на другой машине
- ❌
API_KEY="sk-12345" в коде — утечка + не переносимо
- ❌
cd /home/<user>/... — зависит от юзера
- ❌
~/.config/opencode/... — зависит от HOME
- ❌ Проприетарные форматы (.docx, .pdf) — нужны спец-программы
ПРОВЕРКА ПОРТАТИВНОСТИ:
# Тест: скопировать в /tmp и запустить
cp -r ./my-skill-pack /tmp/test-portable
cd /tmp/test-portable
./test_quality_gates.sh # должно работать
Если работает — портативно ✅. Если нет — найти хардкод и исправить.
Не делать
- Не хардкодить пути — только относительные или env vars
- Не привязываться к машине — никаких MAC/hostname/UUID
- Не использовать проприетарные форматы — только открытые (md/json/yaml)
- Не зависеть от интернета — всё должно работать офлайн
- Не зависеть от вендора — API-first, не SDK-first
🔗 Связи
- Ядро (законы) →
../modules/laws.md
- Как работать с файлами →
../modules/work.md
- Портативность (модуль) →
../modules/portability.md
- Экономия (скрипты) →
../skills/caveman-save
- 12-Factor App → https://12factor.net/
Портативность = свобода. Переноси куда хочешь, работает везде. 🗿
1---2name: caveman-portability3description: ПОРТАТИВНОСТЬ: без хардкод путей, без вендор-локина, build-once-run-anywhere. Относительные пути, env vars, self-contained пакет, vendor-agnostic форматы. Триггеры: portability, vendor-agnostic, no-hardcode, 12-factor, build-once, перенос, флешка, другой ПК. EN: Portability: no hardcoded paths, no vendor lock-in, build-once-run-anywhere, relative paths + env vars. Use when copying to another machine, USB stick, or cloud.4license: MIT5---67# caveman-portability (модуль полного канона)89> 🇬🇧 English instructions: `references/EN.md` — полный перевод тела.1011Это часть устава пещерника. Полный канон целиком — скилл caveman-canon.12Всё ниже — выдержки из BRO.md один в один (без сокращений).1314⚡ ЗАКОН СКИЛЛОВ (авг 2026): на КАЖДЫЙ промт грузи как можно больше скиллов15племени — МИНИМУМ 6, лучше ВСЕ 17 (canon + conclusion + teach + cheat + advise + prevent + verify + loop + kill + code + style + think + research + run +16diagnose + save + desktop + portability). Один скилл = одна грань канона; без полного груза17решение кривое, охота слепая. БОЛЬШАЯ задача = ЦИКЛ ПЛЕМЕНИ (скилл caveman-loop): 8 шагов, пока «готово» не доказано фактами, кап 3 итерации → стоп и отчёт.1819⚡ ДОКИ ЖЕЛЕЗНО (закон 25, авг 2026): инструмент/флаг незнакомый → СНАЧАЛА20официальная дока + man + --help (RTFM-канон: первая линия, не запасная;21−40% времени, −70% ошибок; официальная дока раньше чужого веба).22Прогрессивно: --help → man → полная дока/вики → потом чужое; сверять23с установленной ВЕРСИЕЙ. Пример: ffmpeg — man ffmpeg + ffmpeg-all.html.2425---2627## СУТЬ: репозиторий скиллов = переносимый пакет (авг 2026) — РЕШЕНО ✅2829Канон (47 источников, кауфми 25 авг 2026: 12-Factor App — config отдельно от кода, env vars; Portable Documentation System — self-contained, offline; Vendor-Agnostic Architecture — API-first, JSON configs; Build Once Run Anywhere — environment-agnostic; Agent-Agnostic Repository — работает с любым AI-агентом; Portable Paths in Knowledge Management — location agnosticism, no os.path.expanduser):3031Смысл: репозиторий скиллов = переносимый пакет. Скопировал на флешку, другой ПК, в облако — работает без правок. Никаких `/run/media/<user>/...`, никаких `~/.config/...`, никаких привязок к машине.3233## ПРАВИЛА (живые):34351. **ОТНОСИТЕЛЬНЫЕ ПУТИ ВЕЗДЕ** — скрипты ищут файлы относительно себя:36 ```bash37 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"38 SKILLS_DIR="${SKILLS_DIR:-$SCRIPT_DIR}"39 ```40 Не хардкод `/run/media/<user>/data/мой-пакет`.41422. **ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ ДЛЯ КОНФИГА** — 12-Factor App канон:43 ```bash44 # БЫЛО (хардкод):45 API_KEY="sk-12345"46 DB_PATH="/home/<user>/.db"47 48 # СТАЛО (env vars):49 API_KEY="${OPENAI_API_KEY:?нужен OPENAI_API_KEY}"50 DB_PATH="${SKILLS_DIR:-.}/data/db"51 ```52533. **НИКАКОЙ ПРИВЯЗКИ К МАШИНЕ** — не использовать:54 - `/home/username/...` (зависит от юзера)55 - `/run/media/...` (зависит от точки монтирования)56 - `~/.config/...` (зависит от HOME)57 - MAC-адреса, hostname, UUID диска58594. **VENDOR-AGNOSTIC ФОРМАТЫ** — использовать открытые форматы:60 - Markdown (.md) вместо .docx/.pdf61 - JSON/YAML вместо бинарных конфигов62 - Git вместо SVN/Mercurial63 - OpenAI API вместо проприетарных SDK64655. **SELF-CONTAINED ПАКЕТ** — всё необходимое внутри пакета:66 - Скрипты работают без внешних зависимостей (кроме bash/python3)67 - Документация читается без интернета68 - Скиллы грузятся из локальной папки, не из облака69706. **BUILD ONCE, RUN ANYWHERE** — один раз написал, работает везде:71 - Тестировать на 3+ окружениях (Linux/macOS/Windows WSL)72 - Контейнеры (Docker) для полной изоляции73 - CI/CD прогоняет тесты портативности74757. **АВТОДЕТЕКТ ОКРУЖЕНИЯ** — скрипт сам находит где лежит:76 ```bash77 # Найти пакет по структуре78 find_package() {79 local dir="$1"80 while [ "$dir" != "/" ]; do81 if [ -f "$dir/README.md" ] && [ -d "$dir/skills" ]; then82 echo "$dir"83 return 084 fi85 dir="$(dirname "$dir")"86 done87 echo "❌ пакет не найден" >&288 return 189 }90 ```91928. **КОНФИГ ОТДЕЛЬНО ОТ КОДА** — 12-Factor App:93 - Код (скрипты) = в git, не меняется94 - Конфиг (пути, ключи) = env vars или config.json95 - Данные (модули, скиллы) = отдельно, можно обновлять9697## ГРАБЛИ (не делать):9899- ❌ `SKILLS_DIR="/run/media/<user>/data/мой-пакет"` — сломается на другой машине100- ❌ `API_KEY="sk-12345"` в коде — утечка + не переносимо101- ❌ `cd /home/<user>/...` — зависит от юзера102- ❌ `~/.config/opencode/...` — зависит от HOME103- ❌ Проприетарные форматы (.docx, .pdf) — нужны спец-программы104105## ПРОВЕРКА ПОРТАТИВНОСТИ:106107```bash108# Тест: скопировать в /tmp и запустить109cp -r ./my-skill-pack /tmp/test-portable110cd /tmp/test-portable111./test_quality_gates.sh # должно работать112```113114Если работает — портативно ✅. Если нет — найти хардкод и исправить.115116---117118## Не делать119- **Не хардкодить пути** — только относительные или env vars120- **Не привязываться к машине** — никаких MAC/hostname/UUID121- **Не использовать проприетарные форматы** — только открытые (md/json/yaml)122- **Не зависеть от интернета** — всё должно работать офлайн123- **Не зависеть от вендора** — API-first, не SDK-first124125## 🔗 Связи126- **Ядро (законы)** → `../modules/laws.md`127- **Как работать с файлами** → `../modules/work.md`128- **Портативность (модуль)** → `../modules/portability.md`129- **Экономия (скрипты)** → `../skills/caveman-save`130- **12-Factor App** → https://12factor.net/131132---133134*Портативность = свобода. Переноси куда хочешь, работает везде.* 🗿