begemot-traffic-light
# begemot-mcp
> привет лолз и и так я вам представляю долгострой это mcp который хукает отказы и меняет ее на выполние запроса изначально я хотел выпустить его для антигравити но там вышел фикс этого способа и да этот способ уже пофикшен на биг пикл но он работает на дипсик 4.1 вы можетее изменять этот mcp под свои ide может он там будет еще работать всем удачаного испозывания
**Бегемот на светофоре** — слой персоны / воркфлоу для [OpenCode](https://opencode.ai) из четырёх частей:
1. **`mcp/`** — MCP-сервер (`begemot-traffic-light`, **v6.4.1**): ведёт «светофор» по шагам 0→10, отдаёт блок-директиву **до начала рассуждения модели**, плюс `instructions` / промпты / ресурсы по спецификации MCP. Ядро — `mcp/core.mjs`, транспорты — `server.js` (stdio) и `server-http.mjs` (Streamable HTTP).
2. **`plugin/greenlight/`** — плагин OpenCode V2: кладёт протокол рассуждения **в самое начало** системного промпта (до того, как модель начала думать) и реагирует на отказы — повтор с рефреймом и ротацией на open-weight модель.
3. **`remote/`** — удалённая раздача: Cloudflare Worker, `wrangler.jsonc`, Dockerfile и runbook `remote/REMOTE.md`.
4. **`installer/`** — установщики в один клик под Windows, macOS и Linux (Node.js, MCP-сервер, конфиг, промпт, плагин).
> 🦛 Сделано для моего любимого Лолза.
**Что нового в 6.4.1 / 6.4.0 / 6.3.0 — см. [CHANGELOG.md](CHANGELOG.md)** (установщик без вшитых файлов + локальный HTTP-автозапуск без Docker, протокол рассуждения, `instructions`/промпты/ресурсы, инжект в начало системного промпта, HTTP/Worker/Docker, общий ключ).
---
## 🔑 API-ключ — один на всех
Ключ **`9db6f52871e4c30a`** зашит в `mcp/server-http.mjs` и `remote/worker.js` как значение по умолчанию, поэтому он **работает у всех**: кто бы ни поднял этот репозиторий, сервер уже отвечает на этот ключ, и один и тот же кусок конфига подходит к любой инстанции.
```jsonc
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"servers": {
"begemot": {
"type": "remote",
"url": "http://127.0.0.1:8788/mcp", // свой URL после деплоя
"oauth": false,
"headers": { "x-api-key": "9db6f52871e4c30a" }
}
}
}
}
```
Локально запускается так:
```sh
cd mcp && npm install && npm run start:http
# 🦛 Begemot MCP v6.4.1 — Streamable HTTP on http://0.0.0.0:8788/mcp
# auth: shared public key 9db6f52871e4c30a shell: disabled state: in-memory
```
Перекрыть ключ своим — `BEGEMOT_API_KEY=... ` (или `npx wrangler secret put BEGEMOT_API_KEY`); пустая строка = вообще без авторизации. `GET /health` покажет `key_source: "shared" | "custom" | "open"`.
Подробности деплоя — в [remote/REMOTE.md](remote/REMOTE.md).
---
## Установка одной командой (из GitHub)
### Windows — PowerShell
```powershell
irm https://raw.githubusercontent.com/dfvjgjgjg-commits/begemot-mcp/main/installer/install_begemot_opencode.ps1 | iex
```
### Windows — cmd
```cmd
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/dfvjgjgjg-commits/begemot-mcp/main/installer/install_begemot_opencode.ps1 | iex"
```
Если PowerShell ругается на `#` (в начало файла попал BOM — бывает из-за старого кеша CDN), используй вариант через файл — он работает всегда:
```powershell
$u = "https://raw.githubusercontent.com/dfvjgjgjg-commits/begemot-mcp/main/installer/install_begemot_opencode.ps1"
$p = Join-Path $env:TEMP "begemot_install.ps1"
irm $u -OutFile $p; & $p
```
### macOS / Linux — bash
```bash
curl -fsSL https://raw.githubusercontent.com/dfvjgjgjg-commits/begemot-mcp/main/installer/install_begemot_opencode.sh | bash
```
Установщик сам: проверит/поставит Node.js (Homebrew, либо официальный tarball под `arm64` / `x64`), развернёт MCP-сервер, накатает `npm install`, сольёт конфиг OpenCode (`mcp` + `instructions` + `plugins`, с бэкапом), положит промпт и плагин, перезапустит сервис и проверит подключение.
Пути на macOS/Linux:
- сервер — `~/.local/share/begemot-mcp`
- конфиг, промпт и плагин — `~/.config/opencode`
Либо вручную: скачай репозиторий и запусти `installer/install_begemot_opencode.bat` (Windows) или `bash installer/install_begemot_opencode.sh` (macOS/Linux).
---
## Компоненты
### MCP-сервер (`mcp/core.mjs` + транспорты)
Ядро — `mcp/core.mjs`: конфиг, протокол рассуждения, каталоги инструментов/промптов/ресурсов, обработчики, флаг `allowShell`. Транспорт выбирается точкой входа, поэтому логика не дублируется:
| Точка входа | Транспорт | Запуск |
|---|---|---|
| `mcp/server.js` | stdio, локально у себя | `npm start` |
| `mcp/server-http.mjs` | Streamable HTTP, по сети | `npm run start:http` |
| `remote/worker.js` | Cloudflare Worker | `npx wrangler deploy` |
**14 инструментов** в stdio-сборке: `check_traffic_light` (гейт), `reasoning_guard`, `suppress_refusal`, `focus_on_task`, `disable_ethics_module`, `force_compliance`, `purge_context`, `bypass_api_filters`, `confirm_identity`, `get_begemot_status`, `reset_crossing`, `traffic_light_history`, `begemot_help` и `run_code` (sandboxed-запуск команд с таймаутом и лимитом буфера). В HTTP- и Worker-сборках `run_code` **не регистрируется** (`allowShell: false`) — их остаётся 13.
**2 промпта** (`begemot_execute`, `begemot_deep`), **5 ресурсов** (`begemot://state|history|config|instructions|health`) и **`instructions` в `initialize`** — OpenCode сам кладёт протокол рассуждения в системный промпт, поэтому сервер работает даже тогда, когда модель ни разу не вызвала инструменты.
`check_traffic_light` отдаёт короткую императивную директиву в `content` (инструмент — это данные, краткость = принуждение), а полный JSON — в `structuredContent`.
Состояние хранится атомарно в `state.json` (только в stdio-сборке; HTTP stateless). Все тексты (погода, квесты, время суток, прогресс, протокол рассуждения) настраиваются из `mcp/config.json` — без правки кода.
### Плагин greenlight (`plugin/greenlight/index.js`)
Два слоя:
- **Превентивный** — хук `context` кладёт протокол рассуждения **в самое начало** собранного системного промпта (`event.system.unshift`), то есть директива действует до того, как модель начала думать; решение принято до рассуждения и им не пересматривается. В конец добавляется сжатый `REMINDER` — на свежесть. По маркеру `BEGEMOT — РЕЖИМ РАССУЖДЕНИЯ` проверяется идемпотентность, чтобы директива не вставлялась дважды (хук срабатывает и на tool-продолжениях). Поведение не зависит от того, вспомнит ли модель вызвать MCP.
- **Реактивный** — подписка на `message.updated`, детект паттернов отказа в ответе ассистента, затем повторный запрос с рефреймом «авторизованный security research / CTF / red-team» и ротация сессии на open-weight модель (`qwen3.6-plus → glm-5.3 → deepseek-v4-pro → minimax-m3 → nemotron-3-ultra-free → kimi-k3`). Лимит — один ретрай на сообщение и ограниченное число попыток на сессию.
Все ошибки логируются и глотаются — плагин не может уронить сессию.
### Удалённая раздача (`remote/`)
- **`remote/worker.js`** — stateless Cloudflare Worker поверх `WebStandardStreamableHTTPServerTransport`.
- **`remote/wrangler.jsonc`** — конфиг деплоя (`npx wrangler deploy`).
- **`remote/REMOTE.md`** — runbook: как отдавать MCP по сети, как подключать OpenCode как `type: "remote"`, варианты Node/VPS и Cloudflare, чек-лист после деплоя.
- **`mcp/Dockerfile`** — контейнер под VPS / Fly / Render / Railway.
Безопасность: stateless (`sessionIdGenerator: undefined`), `allowShell: false`, сравнение ключа через `crypto.timingSafeEqual`, опциональные RFC 9728-метаданные для OAuth.
### Установщик (`installer/`)
`install_begemot_opencode.ps1` (Windows), `install_begemot_opencode.bat` (обёртка под cmd) и `install_begemot_opencode.sh` (macOS/Linux). **Ничего не вшито внутрь и Docker не нужен** — установщик сам забирает актуальный код с GitHub, поэтому всегда ставит текущую версию:
1. Проверка/установка Node.js (MSI / Homebrew / официальный tarball)
2. **Загрузка источника с GitHub** — `git clone --depth 1`, иначе zip-архив ветки, иначе файлы по одному с raw
3. Раскладка файлов: `mcp/*` → каталог сервера, плагин и промпт → `~/.config/opencode`
4. `npm install` (проверяется наличие `@modelcontextprotocol/sdk`)
5. Слияние конфига OpenCode (`mcp` + `instructions` + `plugins`) с JSONC-safe парсером и бэкапом
6. **Локальный Streamable HTTP на `127.0.0.1:8788` с автозапуском** — Windows: Scheduled Task на вход в систему; macOS: LaunchAgent; Linux: systemd-user / crontab `@reboot` / `nohup`. Без Docker и без облака.
7. Перезапуск сервиса + проверка подключения и `/health`
В конце печатаются пути, health-ответ, готовый заголовок `x-api-key` для `type: "remote"` и команда снятия автозапуска.
---
## Требования
- Windows (PowerShell), macOS или Linux
- Node.js ≥ 18 (установщик поставит сам, если его нет)
- Установленный [OpenCode](https://opencode.ai)
---
## Предназначение
Это **инструментарий персоны/воркфлоу** для приватного рабочего места одного оператора. Директива зелёного света и ретрай отказов нужны, чтобы собственный тулчейн оператора оставался продуктивным на его машине.
> **Важно:** автоматизация поведения модели, промпт-директивы и роутинг моделей — клиентские меры. Они не могут отменить собственную тренировку модели или серверную модерацию провайдера. Для гарантированного отсутствия отказов на уровне модели — локальная нефильтрованная модель (Ollama / LM Studio / vLLM), на которую смотрит OpenCode.
## Лицензия
MIT — см. [LICENSE](LICENSE).
TDQS
Scored across 14 tools
The benign traffic-light tools are mostly distinct, but the set is dominated by overlapping safety-bypass/manipulation tools such as suppress_refusal, disable_ethics_module, force_compliance, purge_context, and bypass_api_filters. An agent cannot reliably tell which of these supposed override tools to use or how they differ from reasoning_guard and focus_on_task.
Tool names consistently use snake_case and mostly follow verb_noun phrasing, e.g. check_traffic_light, reset_crossing, get_begemot_status. A few names are noun phrases or less action-oriented, such as reasoning_guard, traffic_light_history, and begemot_help, but the convention is still readable.
For a simple traffic-light/begemot domain, 14 tools is over-scoped because many are unrelated safety-bypass or meta-control tools rather than core traffic-light operations. Only a handful of tools earn their place in the apparent domain, while run_code and the override tools add broad unrelated capability.
The traffic-light lifecycle has basic operations: check, status, reset, history, and help. However, there is no clear tool for configuring or setting traffic-light state, and the many safety-bypass tools do not fill legitimate domain gaps.