omp (oh-my-pi): полный гайд по функциям CLI-агента для кодинга
Основной чат
Чат для вайбкодеров: новости, гайды, поиск исполнителей, маркетплейс и разбор реальных кейсов.
omp (пакет называется oh-my-pi) — это опенсорсный (MIT) CLI-агент для кодинга, форк проекта Pi от Марио Цехнера (Mario Zechner), доработанный Каном Бёлюком (Can Bölük). Позиционируется как «harness» (обвязка вокруг LLM) с батарейками в комплекте: 31 встроенный инструмент, поддержка 60+ провайдеров моделей, интеграция с LSP и отладчиками, сабагенты, память между сессиями и многое другое.
На сентябрь 2026 года у репозитория 27,7 тыс. звёзд и 2,7 тыс. форков на GitHub — то есть это один из заметных игроков в нише кодинг-агентов вроде Claude Code, Cursor или Codex CLI, но с акцентом на максимальную «нашпигованность» функциями и открытый исходный код.
Ядро написано на Rust (~80 тыс. строк), обвязка — на TypeScript/Bun. Работает на macOS, Linux и Windows нативно, без моста через WSL.
Установка
macOS и Linux
curl -fsSL https://omp.sh/install | sh
Для Alpine/musl отдельно нужно поставить libstdc++ и libgcc:
apk add libstdc++ libgcc
Через Homebrew
brew install can1357/tap/omp
Через Bun (рекомендуемый способ)
bun install -g @oh-my-pi/pi-coding-agent
Через Nix
# запустить без установки
nix run github:can1357/oh-my-pi
# установить в активный профиль
nix profile install github:can1357/oh-my-pi
Windows (PowerShell)
irm https://omp.sh/install.ps1 | iex
Автодополнения для шелла
omp умеет генерировать автодополнения на лету из метаданных команд, так что они никогда не расходятся с реальным CLI:
# zsh
eval "$(omp completions zsh)"
# bash
eval "$(omp completions bash)"
# fish
omp completions fish > ~/.config/fish/completions/omp.fish
31 встроенный инструмент
Все инструменты живут в одном пространстве имён вместе с read и bash. Активный набор можно закрепить флагом --tools read,edit,bash,…, а редко используемые — спрятать за xd:// (список — командой read xd://).
Файлы и поиск
read— читает файлы, директории, архивы, SQLite, PDF, ноутбуки, URL, удалённые пути поssh://и внутренние схемы://— всё через один интерфейс.write— создаёт или перезаписывает файл, запись в архиве или строку в SQLite.edit— патчи по «хэшлайнам»: правки привязываются к хэшу содержимого строки, а не к точному тексту (подробнее ниже).ast_edit— структурные правки кода через ast-grep с превью перед применением.ast_grep— структурные запросы к коду на 50+ грамматиках tree-sitter.grep— регулярные выражения по файлам, glob-маскам и внутренним URL.glob— поиск путей по маске (для поиска по содержимому —grep).
Рантайм
bash— шелл рабочей области с 46 встроенными в процесс coreutils-утилитами, опциональным PTY и фоновыми задачами.eval— постоянные ячейки Python и JavaScript с общим прелюдом и возможностью вызывать инструменты агента прямо из кода.
Работа с кодом
lsp— диагностика, навигация, символы, переименования, code actions, «сырые» LSP-запросы.debug— управление сессией отладки через DAP: брейкпоинты, шаги, стек, переменные.security_scan— планирование и запуск нативных security-ревью, включая облачные сканы Codex Security.
Координация
task— параллельный запуск сабагентов, опционально в изолированных worktree.hub— обмен сообщениями с живыми агентами, ожидание/отмена фоновых задач.todo— управление упорядоченным списком задач сессии с отслеживанием фаз.ask— структурированные уточняющие вопросы в интерактивном режиме.
Десктоп и веб
browser— вкладки Puppeteer поверх headless Chromium, CDP-подключение к приложениям или собственный Chrome через relay.computer— постоянный JS против реального рабочего стола: окна, скриншоты, нативный ввод, дерево accessibility, буфер обмена.web_search— один запрос сразу по нескольким настроенным провайдерам поиска с цитированием источников.github— операции GitHub CLI: репозитории, PR, issues, поиск по коду, отслеживание Actions.generate_image— генерация и редактирование изображений через Gemini, GPT или Grok.inspect_image— анализ локального изображения vision-моделью.tts— синтез речи через Grok Voice (пять голосов, WAV или MP3).
Память и скиллы
checkpoint— фиксация состояния разговора для последующего сжатия и отчёта.rewind— обрезка исследовательского контекста с сохранением краткого отчёта.retain— добавление устойчивых фактов в банк памяти.recall— поиск по банку памяти.reflect— синтез ответа на основе всего банка памяти.memory_edit— обновление, удаление или отзыв сохранённых воспоминаний по id.learn— фиксация переиспользуемого урока с опциональным превращением в managed-скилл.manage_skill— создание, обновление и удаление изолированных managed-скиллов.
Часть инструментов по умолчанию выключена и включается через настройки: github, security_scan, generate_image, tts, checkpoint, rewind и инструменты памяти (зависят от memory.backend). inspect_image включается автоматически, если активная модель не умеет «видеть».
Ключевые фичи, которые выделяют omp на фоне других агентов
Выполнение кода с вызовом инструментов
В отличие от большинства харнессов, которые просто дают агенту песочницу Python, omp запускает постоянные Python- и Bun-воркеры, каждый из которых может через loopback-мост вызывать обратно инструменты агента (read, search, task). Например, агент может загрузить CSV через tool.read внутри Python и тут же построить график на JavaScript, не выходя из ячейки.
LSP на каждую правку
Запрос на переименование идёт через workspace/willRenameFiles — значит, реэкспорты, barrel-файлы и алиасы импортов обновятся ещё до перемещения файла. Агент видит код так же, как ваша IDE.
Реальный отладчик, а не print()
Для C-бинарника агент подключает lldb, доходит до плохого указателя и читает фрейм. Для зависшего Go-сервиса — dlv и обход горутин. Для Python — debugpy с паузой и инспекцией. Большинство других агентов до сих пор расставляют print-статементы вместо этого.
Time-traveling stream rules
Правила «спят», пока модель не начнёт делать что-то не то. Совпадение по regex прерывает генерацию прямо посреди токена, вставляет правило как системное напоминание и перезапускает с того же места — без «налога» на контекст на каждом шаге. Инъекции переживают компакцию контекста.
Полноценные сабагенты
Инструмент task разводит задачу по нескольким воркерам, каждый — со своим набором инструментов, а результат — это провалидированный по схеме объект, а не «простыня» текста для парсинга. Панель всех живых сабагентов открывается по Alt+A (Agent Hub) — там можно почитать транскрипт, отправить сообщение, «оживить» приостановленного воркера или убить зависший, не прерывая родительскую сессию.
Вторая модель-«советник»
Роль advisor — это отдельная модель, которая читает каждый ход основного агента на своём собственном контексте и вставляет заметки: замечание, предупреждение или жёсткий блок. Основной агент видит заметку и либо исправляется, либо объясняет, почему не будет.
Совместная работа (collab)
Команда /collab кладёт вашу живую сессию на relay-сервер и выдаёт ссылку и QR-код. Коллега подключается командой omp join из другого терминала или просто открывает ссылку в браузере. Есть режим только для чтения (/collab view) — можно наблюдать, но не управлять. Все кадры шифруются на клиенте, сам relay не видит ваши ключи.
Хэшлайны (edit)
Модель указывает на «якоря» по хэшу содержимого вместо того, чтобы перепечатывать строки целиком — меньше боёв за пробелы и циклов «строка не найдена». Если файл успел устареть, якоря разойдутся и патч будет отклонён до того, как повредит файл. По данным разработчиков, на Grok 4 Fast это даёт экономию в 61% выходных токенов на тех же задачах.
GitHub как файловая система
Вместо отдельных инструментов gh_issue_view, gh_pr_view и так далее — PR и issues просто читаются как пути: read pr://1428 возвращает данные в том же формате, что и read src/foo.ts.
Память, которую агент курирует сам
Агент запоминает вашу кодовую базу между сессиями: фиксирует факты на лету через retain, сохраняет переиспользуемые уроки через learn, поднимает их обратно через recall и сжимает каждую сессию в «ментальную модель», которая подгружается на первом ходу следующей сессии. Движок памяти выбирается настройкой memory.backend — локальный, Hindsight или Mnemopi. По умолчанию память привязана к проекту.
ACP — управление из редактора
Запустив omp внутри Zed, вы получаете того же агента, что и в терминале, но он читает именно тот буфер, который открыт у вас, пишет через штатный механизм сохранения редактора и запускает шеллы в терминале редактора. Деструктивные операции требуют разрешения, которое можно выдать один раз и забыть.
Наследует конфиги других агентов
omp читает уже лежащие на диске форматы «как есть»: Cursor MDC, Cline .clinerules, Codex AGENTS.md, Copilot applyTo и другие — без скриптов миграции. Конфиг, который команда написала в прошлом квартале, продолжит работать.
Промпт-контролы и слэш-команды
Магические слова в тексте промпта
Три отдельных слова строчными буквами переключают поведение конкретного хода (срабатывают только в обычном тексте — не в блоках кода, XML/HTML и путях):
ultrathink — запросить у модели максимально доступный уровень «раздумий»
orchestrate — прогнать существенный объём независимой работы через параллельных сабагентов с проверкой каждой фазы
workflowz — построить детерминированный мультиагентный воркфлоу через инструмент task
Слэш-команды уровня сессии
/vibe — «режим директора»: вы управляете постоянными воркер-сессиями fast/good с read-only набором инструментов
/fresh — сброс состояния провайдерского стрима (устаревший кэш промпта, зависший стрим) без изменения локальной транскрипции
Прочие полезные команды
/model — сменить активную модель прямо в сессии
/review — code review с приоритетами P0–P3 и вердиктом «мержить/не мержить»
/debug — отладка, отчёты и профилирование самого omp
/reload-plugins — перезагрузка расширений после правки
Модели и провайдеры: 60+ вариантов на одну команду /model
omp маршрутизирует работу по десяти ролям в зависимости от намерения: default — обычные ходы, smol — дешёвый разгон сабагентов, slow — глубокое рассуждение, plan — режим планирования, commit — чейнджлоги, плюс vision, designer, task, advisor, tiny. Переопределить роль при запуске можно флагами --smol, --slow, --plan; переключаться между моделями активной роли — по Ctrl+P; сменить модель посреди сессии — командой /model.
Поддерживаемые группы провайдеров:
- Прямые API и шлюзы: Anthropic, OpenAI, OpenAI Codex, Google Gemini, Google Vertex, Google Antigravity, xAI, SuperGrok, DeepSeek, Mistral, Groq, Cerebras, Fireworks, Together, Baseten, DeepInfra, Hugging Face, NVIDIA, Meta*, Amazon Bedrock, Azure OpenAI, SiliconFlow, GMI Cloud, CoreWeave, Sakana AI, OpenRouter, Synthetic, Vercel AI Gateway, Cloudflare AI Gateway, Wafer Serverless.
- Подписочные кодинг-планы: Cursor, GitHub Copilot, GitLab Duo, Devin, Kimi Code, Moonshot, MiniMax Coding Plan (в т.ч. CN-версия), Alibaba Coding Plan, Qwen Portal, Z.AI/GLM Coding Plan, Zhipu Coding Plan, Xiaomi MiMo, Qianfan, Umans, NanoGPT, Novita, Venice, Kilo, ZenMux, OpenCode Go, OpenCode Zen.
- Локальный запуск: Ollama, Ollama Cloud, LM Studio, llama.cpp, vLLM, LiteLLM — через OpenAI-совместимый
/v1/models.
Свой OpenAI-совместимый провайдер
Добавляется в ~/.omp/agent/models.yml:
providers:
spark:
baseUrl: http://192.168.10.223:8000/v1
api: openai-completions
apiKey: dummy
models:
- id: minimax-m3
name: MiniMax M3
contextWindow: 100000
maxTokens: 32000
Проверить, что провайдер виден: omp models spark. Дальше — omp setup и выбрать модель на шаге настройки модели по умолчанию, либо открыть /model в сессии и назначить роль default.
Чтобы задать модель по умолчанию без интерактивного выбора, пропишите в ~/.omp/agent/config.yml:
modelRoles:
default: spark/minimax-m3
Четыре настройки, которые делают маршрутизацию полезной
- Кастомные провайдеры — можно объявить любой провайдер, говорящий на
openai-completions,openai-responses,openai-codex-responses,azure-openai-responses,anthropic-messages,bedrock-converse-stream,google-generative-ai,google-gemini-cliилиgoogle-vertex. - Fallback-цепочки — под
retry.fallbackChainsдля роли или конкретной модели: при 429 или упоре в квоту следующий провайдер в цепочке доигрывает ход, а восстановление происходит по остыванию. - Модели, привязанные к пути —
enabledModelsиdisabledProvidersможно ограничить префиксомpath:, чтобы закрепить свой набор моделей на одном репозитории, не трогая глобальный конфиг. - Round-robin по ключам — можно сложить несколько API-ключей на одного провайдера, и рантайм будет их ротировать с учётом affinity сессии и бэкоффа по каждому ключу — полезно, если один ключ выжрет квоту к обеду.
Веб-поиск: 23 бэкенда за одним инструментом
web_search встроен, а не прикручен сбоку. Режим auto идёт по цепочке из 23 провайдеров по порядку; можно закрепить конкретный по имени. За каждым результатом стоит извлечение с учётом специфики сайта — GitHub, реестры пакетов, arXiv, Stack Overflow и документация конвертируются в структурированный markdown с сохранением якорей и ссылок.
Часть провайдеров работает вообще без ключа (duckduckgo, startpage, google, ecosia, mojeek — через браузер), часть — по API-ключу (perplexity, exa, tavily, brave, jina, kagi и другие), часть — через уже привязанный OAuth (gemini, anthropic, codex, xai).
Отдельно есть специализированные обработчики:
- Кодхостинги — GitHub, GitLab
- Реестры пакетов — npm, PyPI, crates.io, Hex, Hackage, NuGet, Maven, RubyGems, Packagist, pub.dev, Go packages
- Научные источники — arXiv, Semantic Scholar
- Форумы — Stack Overflow, Reddit, Hacker News
- Документация — MDN, Read the Docs, docs.rs
- Базы уязвимостей — NVD, OSV, CISA KEV (ответы со ссылкой на данные вендора, а не пересказ блогов)
Четыре способа запустить omp
Интерактивный TUI (по умолчанию)
Просто omp. Вызовы инструментов рендерятся карточками, правки показывают превью перед применением, а неоднозначность решается через инструмент ask — структурированный выбор варианта прямо посреди хода.
Одноразовый запрос
omp -p "list .ts files"
Отвечает на один промпт и завершает работу — удобно для скриптов и CI.
SDK для встраивания в Node
Пакет @oh-my-pi/pi-coding-agent:
import {
ModelRegistry,
SessionManager,
createAgentSession,
discoverAuthStorage,
} from "@oh-my-pi/pi-coding-agent";
const auth = await discoverAuthStorage();
const models = new ModelRegistry(auth);
await models.refresh();
const { session } = await createAgentSession({
sessionManager: SessionManager.inMemory(),
authStorage: auth,
modelRegistry: models,
});
await session.prompt("list .ts files");
RPC поверх stdio
omp --mode rpc --no-session
Команды приходят в формате NDJSON, ответы и события уходят обратно тем же способом. Режим --mode rpc-ui добавляет карточки инструментов, селекторы и диалоги как отдельные фреймы extension_ui_request, которые обязан обрабатывать хост.
ACP — протокол для редакторов
omp acp
Реализация Agent Client Protocol поверх JSON-RPC. Когда редактор заявляет поддержку возможностей, ввод-вывод инструментов идёт через него, а запись файлов проходит через session/request_permission.
Настройка оркестратора сабагентов (task)
Инструмент task — это и есть «оркестратор» omp: он разводит работу по параллельным сабагентам, каждый — в своём наборе инструментов и (опционально) в своей изолированной копии репозитория. Все настройки живут в секции task конфига (~/.omp/agent/config.yml — глобально, .omp/config.yml в проекте — локально).
Изоляция рабочего пространства
Ключ task.isolation.mode определяет, как каждый сабагент получает свою копию файлов, чтобы параллельные правки не конфликтовали:
task:
isolation:
mode: auto # none | auto | apfs | btrfs | zfs | reflink | overlayfs | projfs | block-clone | rcopy
none— сабагенты работают прямо в рабочей директории родителя (без изоляции, без права работать вisolated-режиме).auto— omp сам выбирает лучший доступный бэкенд для файловой системы (APFS/Btrfs/ZFS-клоны, reflink, overlayfs на Linux, ProjFS на Windows) и откатывается по списку кандидатов, если бэкенд недоступен.- Остальные значения — явное указание конкретного бэкенда.
Результат работы изолированного сабагента возвращается родителю одним из двух способов: patch-режим (патч захватывается и применяется к базовому дереву) или branch-режим (коммитится в отдельную ветку omp/task/<id> и подмешивается через cherry-pick). Изолированные сессии после завершения не «оживляются» заново — они одноразовые.
Параллелизм и лимиты
task:
maxConcurrency: 4 # сколько сабагентов может работать одновременно
agentIdleTtlMs: 420000 # через сколько мс простоя (по умолчанию 7 минут) агент "паркуется"
maxRecursionDepth: 3 # сколько уровней вложенности сабагент → сабагент разрешено
maxRuntimeMs: 0 # жёсткий тайм-аут на сабагент, 0 = без ограничения
softRequestBudget: 200 # после скольких запросов сабагенту "намекают" закругляться
enableEffort: false # разрешить явно задавать уровень "усилия" (lo/med/hi) на спавн
batch: true # разрешить пакетный спавн — сразу несколько сабагентов одним вызовом task
maxConcurrency резолвится в семафор, общий на сессию: если параллельно летит несколько вызовов task, все вместе они не превысят этот лимит. agentIdleTtlMs ≤ 0 отключает «парковку» — сессии сабагентов будут висеть в памяти до выхода из omp.
Свои агенты вместо дефолтного task
Помимо общего агента task, в комплекте есть готовые типы: scout, designer, reviewer, security-reviewer, librarian, sonic. Каждый вызов task может указывать agent: scout и так далее — под конкретный тип работы.
Свой агент описывается markdown-файлом с YAML frontmatter в .omp/agents/ (в проекте) или ~/.omp/agent/agents/ (глобально):
---
name: db-migrator
model: anthropic/claude-opus-4-5
tools: [read, edit, bash, lsp]
advisor: true
---
Ты отвечаешь только за миграции базы данных. Никогда не трогай файлы вне
каталога `migrations/`. Перед применением миграции всегда делай dry-run.
Приоритет обнаружения агентов — «первый найденный по точному имени» побеждает: сначала .omp/agents проекта, затем ~/.omp/agent/agents пользователя, затем расширения-пакеты omp, затем агенты из маркетплейса Claude, и только потом встроенные (scout, designer, reviewer, security-reviewer, librarian, task, sonic).
Мониторинг и управление сабагентами
Alt+Aоткрывает Agent Hub — панель со списком всех живых, простаивающих и запаркованных сабагентов, статусом и расходом токенов по каждому.- Из Agent Hub можно открыть транскрипт любого сабагента, отправить ему сообщение (steering), «оживить» запаркованного или убить зависшего — без прерывания родительской сессии.
- Инструмент
hub— это программный доступ к тому же самому: отправка сообщений живым агентам, ожидание или отмена фоновых задач. Написать уже существующему (пусть и запаркованному) агенту обычно эффективнее, чем создавать нового — он уже держит нужный контекст. history://<id>в любом инструменте, принимающем пути, открывает компактный транскрипт конкретного сабагента;agent://<id>— его финальный сохранённый вывод.
Магические слова для управления оркестрацией без конфига
Напомним из прошлой статьи — это самый быстрый способ включить оркестрацию прямо в промпте, без правки конфига:
orchestrate — прогнать существенный объём независимой работы через параллельных сабагентов с проверкой каждой фазы
workflowz — построить детерминированный мультиагентный воркфлоу через тот же инструмент task
Настройка советника (advisor)
Advisor — это вторая модель, подключённая к сессии как ридонли-ревьюер: после каждого хода основного агента она читает свежий кусок транскрипта (включая рассуждения модели, а не только видимый пользователю текст) и может вставить заметку. Сама она ничего не редактирует, не запускает команды и не может изменить состояние сессии напрямую — только read, search, find и специальный инструмент advise.
Как включить
Нужны оба условия одновременно:
modelRoles:
advisor: anthropic/claude-sonnet-4-5:medium # модель-советник + при желании уровень "раздумий"
advisor:
enabled: true
Дальше управлять советником можно прямо в сессии слэш-командами:
/advisor — переключить сохранённую настройку advisor.enabled
/advisor on — включить и запустить советника (если модель назначена)
/advisor off — выключить и остановить советника
/advisor status — активная модель, расход контекста, токенов и денег
/advisor dump — скопировать компактный транскрипт советника в буфер
/advisor dump raw — скопировать полный дамп (системный промпт, инструменты, рассуждения, вызовы)
Три уровня заметок
Советник вызывает инструмент advise с текстом и (опционально) уровнем серьёзности:
nit(по умолчанию, если уровень не указан) — необязательная к прочтению прямо сейчас заметка, встраивается в транскрипт при следующей естественной паузе. Для мелочей: упрощение кода, некритичные edge-кейсы.concern— прерывающее сообщение: что-то пошло не туда, пропущено ограничение, модель придумывает несуществующий API.blocker— тоже прерывающее: продолжение точно приведёт к потере работы или сломанному результату.
concern и blocker реально прерывают текущий ход основного агента через канал steering. Чтобы советник не бомбардировал агента прерываниями по кругу, есть настройка advisor.immuneTurns (по умолчанию 3) — после успешно доставленного прерывания следующие concern/blocker в течение N ходов основного агента идут как обычные ненавязчивые заметки.
Синхронизация скорости: advisor.syncBacklog
Советник читает транскрипт асинхронно и может отставать. Настройка задаёт, готов ли основной агент немного подождать, если советник отстал:
advisor:
syncBacklog: "off" # off | 1 | 3 | 5 — порог "отставания", после которого агент ждёт (до 30 секунд)
off — максимальная скорость основного агента, советник просто не поспевает в моменте. 1 — ближе всего к синхронному ревью.
WATCHDOG.md — инструкции только для советника
Отдельный файл, который видит только советник (в отличие от AGENTS.md/RULES.md, которые видит основной агент). Идеальное место для того, что важно ревьюеру, но зашумляло бы основного исполнителя: на что обращать особое внимание, какие API в проекте опасны, где архитектурные границы.
# Watchdog notes
Особо смотри за:
- Изменениями, которые обходят durable-очередь в `src/jobs/`.
- Рендерингом UI, который выводит несанированный вывод инструментов.
- Новыми воркерами, которые не заходят обратно через CLI-хост.
Файл ищется по нескольким путям сразу (и все найденные подключаются вместе, а не только ближайший): ~/.omp/agent/WATCHDOG.md на уровне пользователя, и WATCHDOG.md/.omp/WATCHDOG.md на каждом уровне каталогов от рабочей директории вверх до корня git-репозитория.
Советник для сабагентов и по-агентно
По умолчанию советник работает только в основной сессии. Чтобы включить его и для сабагентов, поднятых через task:
advisor:
enabled: true
subagents: true
Точечно — можно задать advisor: true (или конкретную модель строкой, например advisor: "deepseek/deepseek-v4-flash") прямо во frontmatter конкретного кастомного агента, либо переопределить это через настройку task.agentAdvisor (словарь «имя агента → on/off/модель»), которая правится из панели /agents.
Расширяемость
omp построен как набор примитивов: расширение — это обычный модуль TypeScript с тем же API инструментов, тем же реестром слэш-команд и той же таблицей горячих клавиш, что используют встроенные функции. Можно попросить сам omp написать недостающую часть и подгрузить её командой /reload-plugins, держать локально, оформить как marketplace или опубликовать в npm.
Коротко: что нужно знать
- omp (oh-my-pi) — open source (MIT) CLI-агент для кодинга, форк проекта Pi, с 31 встроенным инструментом «из коробки».
- Поддерживает 60+ провайдеров моделей и подписочных кодинг-планов — от прямых API до локального запуска через Ollama/vLLM.
- Из коробки — LSP, реальный отладчик через DAP, структурные правки кода через ast-grep, память между сессиями и сабагенты с изолированными worktree.
- Есть режим совместной работы (
/collab), интеграция с редакторами через ACP и встроенный веб-поиск с 23 бэкендами. - Оркестратор сабагентов (
task) настраивается через секциюtaskв конфиге: изоляция workspace, лимит параллелизма, TTL простоя, свои типы агентов в.omp/agents/. Советник (advisor) — вторая read-only модель-ревьюер, включается связкойmodelRoles.advisor+advisor.enabled: trueи получает отдельные инструкции черезWATCHDOG.md. - Установка — одной командой:
curl -fsSL https://omp.sh/install | sh(или через Homebrew, Bun, Nix).
Источник: официальный репозиторий github.com/can1357/oh-my-pi, сайт omp.sh.
* Meta Platforms Inc. (Facebook, Instagram) признана экстремистской организацией, её деятельность запрещена на территории Российской Федерации.