opencode-config-profiles-manager
v0.2.0
Published
Full config-directory profiles for OpenCode
Readme
ocpm — OpenCode Config Profiles Manager
Профили OpenCode как отдельные каталоги конфигурации. Каждый профиль — полная копия
~/.config/opencode со своими opencode.json, cli.json, agents/, commands/,
plugins/, skills/ и AGENTS.md.
default — это существующий глобальный каталог OpenCode. ocpm его не изменяет.
Зачем
В OpenCode V2 один фоновый сервис обслуживает один конфиг. Если просто подставить
OPENCODE_CONFIG_DIR, запущенный сервис продолжит использовать старый конфиг.
ocpm кладёт в каждый профиль свой service.json:
{ "disabled": true }OpenCode видит disabled и поднимает приватный сервер для профиля. Глобальный
service.json и общий сервис остаются нетронутыми.
Этот приватный сервер не читает блок env из service.json — OpenCode применяет его
только к общему фоновому сервису. Поэтому ocpm читает service.json сам и передаёт
его env в окружение запускаемого процесса:
{ "disabled": true, "env": { "OPENCODE_DISABLE_PROJECT_CONFIG": "1" } }Установка
npm install -g opencode-config-profiles-managerПосле этого доступна команда ocpm.
Из исходников:
npm install
npm run build
npm linkБыстрый старт
ocpm init
ocpm create unity --from default
ocpm list
ocpm run unityПроверка:
ocpm doctor
ocpm doctor unity --fixКоманды
| Команда | Назначение |
|---|---|
| ocpm init | Создать каталог профилей |
| ocpm create <name> [--from default\|<profile>] [--empty] [--force] | Создать профиль полной копией |
| ocpm list | Список профилей, источника и статуса |
| ocpm run <name> [args...] | Запустить OpenCode с профилем |
| ocpm exec <name> -- <cmd...> | Выполнить команду с окружением профиля |
| ocpm shell <name> | Shell с окружением профиля |
| ocpm env <name> [--shell sh\|fish\|powershell] | Напечатать export-команды |
| ocpm path <name> | Путь к профилю |
| ocpm which | Текущий профиль |
| ocpm remove <name> [--force] | Удалить профиль |
| ocpm doctor [name] [--fix] | Проверить конфиги и service.json |
Примеры
ocpm run unity
ocpm run unity -- --model provider/model
ocpm run unity -- run "почини тесты"
ocpm exec unity -- opencode plugin add @scope/plugin
ocpm exec unity -- opencode debug config
eval "$(ocpm env unity)"
opencodeocpm run передаёт всё после имени профиля в OpenCode. ocpm exec требует --
перед командой.
Где лежат профили
По умолчанию:
~/.config/opencode/profiles/<name>То есть внутри глобального каталога OpenCode. Профили можно коммитить в git.
default — сам ~/.config/opencode.
Переопределение путей:
OCPM_BASE_DIR=/path/to/opencode-config
OCPM_PROFILES_DIR=/path/to/profiles
OCPM_OPENCODE_BIN=/path/to/opencodeИли флагами до подкоманды:
ocpm --base-dir /path/to/config --profiles-dir /path/to/profiles listЧто копируется
При ocpm create копируется всё, кроме:
.git/,.log/,.opencode/(состояние board);profiles/(чтобы не было рекурсии);service.json(в профиль пишется{"disabled":true});.env,.env.*,.credentials*;.npmrc,.netrc,.git-credentials,.pypirc,auth.json;node_modules/,sessions/,storages/,logs/,cache/,tmp/;*.log,.DS_Store,Thumbs.db,chrome-devtools-profile/.
Копирование атомарное: профиль собирается во временном каталоге и переименовывается только после успеха.
Скопированный .gitignore игнорирует service.json, поэтому в git он не попадёт;
ocpm run создаст его заново.
Сервис и данные
- У профиля свой
service.jsonсdisabled: true→ приватный сервер. - Глобальный
~/.config/opencode/service.jsonне читается и не изменяется. - Auth и сессии общие:
~/.local/share/opencode/auth.json,opencode.db. - Если в профиле уже есть
service.jsonбезdisabled,ocpm runдобавит--standaloneи предупредит. - Если
ocpm runзапущен изнутри~/.config/opencode, ставитсяOPENCODE_DISABLE_PROJECT_CONFIG=1, чтобы глобальныйopencode.jsonне подхватился ещё и как проектный и не перекрыл профиль. - Блок
envизservice.jsonпрофиля попадает в окружениеocpm run,ocpm exec,ocpm shellиocpm env. Переносятся только строки с корректными именами переменных;XDG_STATE_HOMEпропускается, как и в самом OpenCode. Это единственный способ включитьOPENCODE_DISABLE_PROJECT_CONFIGдля профиля. - Для
defaultenvиз общегоservice.jsonприменяет сам общий сервис при старте, а не клиент. После правки файла выполнитеopencode service restart. ocpm env, выполненный изнутри каталога конфигурации, оставляетOPENCODE_DISABLE_PROJECT_CONFIG=1в текущей оболочке. Если потом перейти в проект со своимopencode.json, выполнитеunset OPENCODE_DISABLE_PROJECT_CONFIGилиeval "$(ocpm env default)".
Ограничения
- Профили — независимые копии. Изменения в
defaultне попадают в них автоматически. service.jsonв профиле отключает remote-доступ и пароль. Если нужен remote — настройте его отдельно в профиле.profiles/не синхронизируется с базой; для обновления создайте профиль заново или скопируйте нужные файлы вручную.ocpmне управляет git и не коммитит профили.
Windows
- Пути определяются через
opencode debug paths, с fallback на~/.config/opencode. - Запуск идёт через
cross-spawn, поэтому находитсяopencode.cmd. ocpm shellиспользует%COMSPEC%или$SHELL.ocpm envподдерживает PowerShell.
Разработка
npm install
npm run build
npm test
npm run typecheckТесты используют временные каталоги и фейковый opencode, реальный конфиг не
изменяется.
