Compare commits
4
Commits
cf9781604d
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f034ea840 | ||
|
|
6d302deb76 | ||
|
|
761fd9978b | ||
|
|
0ab5dbe182 |
No files matched your search
@@ -27,7 +27,7 @@ This repository contains personal dotfiles and configurations for a highly produ
|
|||||||
* **Shared Skills:** Located in `agents/.agents/skills/`. This is the single source of truth for AI instructions.
|
* **Shared Skills:** Located in `agents/.agents/skills/`. This is the single source of truth for AI instructions.
|
||||||
* **Gemini CLI:** Configured via `gemini/.gemini/`.
|
* **Gemini CLI:** Configured via `gemini/.gemini/`.
|
||||||
* **Policies:** `readonly-commands.toml` allows critical commands like `git status`, `git diff`, and `git add` to run without confirmation.
|
* **Policies:** `readonly-commands.toml` allows critical commands like `git status`, `git diff`, and `git add` to run without confirmation.
|
||||||
* **Opencode:** MCP-based assistant configuration (`opencode.json`) with support for documentation, search, and web-reading.
|
* **Opencode:** MCP-based assistant configuration (`opencode.json`): Context7 для документации и встроенные `websearch`/`webfetch`. Локальный SearXNG в `docker/searxng` — резервный вариант, MCP-сервер отключён.
|
||||||
* **Skill Bridges:** Claude gets skills via the `~/.claude/skills` symlink; Opencode reads `~/.agents/skills` natively, no bridge needed.
|
* **Skill Bridges:** Claude gets skills via the `~/.claude/skills` symlink; Opencode reads `~/.agents/skills` natively, no bridge needed.
|
||||||
|
|
||||||
## 🚀 Usage & Maintenance
|
## 🚀 Usage & Maintenance
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ description: >-
|
|||||||
- **постановка**: путь к задаче, спеке или критериям приёмки. Без неё линза
|
- **постановка**: путь к задаче, спеке или критериям приёмки. Без неё линза
|
||||||
«по задаче» работает вслепую — так и напиши;
|
«по задаче» работает вслепую — так и напиши;
|
||||||
- **команды проверки** и ожидаемый результат (например, число тестов);
|
- **команды проверки** и ожидаемый результат (например, число тестов);
|
||||||
|
- **границы**, если они есть: куда не ходить (приватные данные, рабочие
|
||||||
|
серверы, боевые скрипты), какие проверки слишком дороги, что в этой среде
|
||||||
|
заведомо не находка;
|
||||||
- **места, где ты сам не уверен** — вопросами, без своих обоснований:
|
- **места, где ты сам не уверен** — вопросами, без своих обоснований:
|
||||||
пересказ твоей логики лишает ревьюера независимости. То же с выводами
|
пересказ твоей логики лишает ревьюера независимости. То же с выводами
|
||||||
другого ревьюера, пока оба не закончили первый заход;
|
другого ревьюера, пока оба не закончили первый заход;
|
||||||
@@ -97,14 +100,20 @@ prompts/lens-….md > prompt.md`. Файлы `prompts/` лежат в катал
|
|||||||
## Разбор находок
|
## Разбор находок
|
||||||
|
|
||||||
Разбирает находки автор: у тебя контекст кода и задачи. Пользователю нужен
|
Разбирает находки автор: у тебя контекст кода и задачи. Пользователю нужен
|
||||||
итог в отчёте, а не участие в каждом споре.
|
итог в отчёте, а не участие в каждом споре. Так же разбирай и отзывы других
|
||||||
|
моделей, которые переслал пользователь.
|
||||||
|
|
||||||
По каждой находке проверь три вещи:
|
По каждой находке проверь три вещи:
|
||||||
|
|
||||||
1. **Верна ли она фактически.** Воспроизведи сценарий, прочти код, запусти
|
1. **Верна ли она фактически.** Воспроизведи сценарий, прочти код, запусти
|
||||||
тест. Ревьюеры ошибаются уверенно: выдумывают API, путают версии,
|
тест. Ревьюеры ошибаются уверенно: выдумывают API, путают версии,
|
||||||
приписывают коду то, чего в нём нет, требуют защиты от невозможных
|
приписывают коду то, чего в нём нет, требуют защиты от невозможных
|
||||||
состояний. Уверенный тон — не доказательство.
|
состояний. Автору легко поверить хорошо изложенной находке, но уверенный
|
||||||
|
тон — не доказательство. Проверяй и то, на чём находка держится:
|
||||||
|
утверждения о прогонах, истории и прошлых решениях сверяй с источником
|
||||||
|
так же, как утверждения о коде. Дешёвая починка от проверки не
|
||||||
|
освобождает: ложная находка, закрытая одной строкой, всё равно добавляет
|
||||||
|
лишнее.
|
||||||
2. **Применима ли к этому проекту** — его контрактам, масштабу, угрозам.
|
2. **Применима ли к этому проекту** — его контрактам, масштабу, угрозам.
|
||||||
3. **Соразмерна ли починка риску.** Предложенный способ — один из вариантов.
|
3. **Соразмерна ли починка риску.** Предложенный способ — один из вариантов.
|
||||||
Подтверждённый дефект закрывай лучшим путём, какой видишь; отказ от
|
Подтверждённый дефект закрывай лучшим путём, какой видишь; отказ от
|
||||||
|
|||||||
@@ -40,7 +40,9 @@
|
|||||||
ревьюер не увидит.
|
ревьюер не увидит.
|
||||||
- **`runtimeMode` не задавай.** Режимы с подтверждением остановят ревьюера
|
- **`runtimeMode` не задавай.** Режимы с подтверждением остановят ревьюера
|
||||||
на первом же действии и будут ждать человека в его разговоре. Ограничения
|
на первом же действии и будут ждать человека в его разговоре. Ограничения
|
||||||
задаёт мандат в поручении.
|
задаёт мандат в поручении. Режим наследуется от твоего разговора, а шире
|
||||||
|
своего задать нельзя: если ты сам работаешь с подтверждением, скажи
|
||||||
|
пользователю до запуска.
|
||||||
- После запуска заверши ход: уведомление о завершении придёт само.
|
- После запуска заверши ход: уведомление о завершении придёт само.
|
||||||
`task_status` нужен, только если результат требуется посреди хода.
|
`task_status` нужен, только если результат требуется посреди хода.
|
||||||
- Итоговое сообщение ревьюера приходит в `summary`; полный отчёт — в файле
|
- Итоговое сообщение ревьюера приходит в `summary`; полный отчёт — в файле
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# SearXNG — резервный поиск
|
||||||
|
|
||||||
|
Локальный SearXNG на `127.0.0.1:26745`. Постоянно не нужен: с 2026-10-17
|
||||||
|
основной поиск идёт через встроенные `websearch`/`webfetch` OpenCode, а
|
||||||
|
MCP-сервер `searxng` отключён в `opencode/.config/opencode/opencode.json`.
|
||||||
|
Стек оставлен как запасной вариант, если встроенный поиск недоступен
|
||||||
|
(например, кончилась подписка OpenCode Go) или нужен фильтр по времени.
|
||||||
|
|
||||||
|
## Запуск и остановка
|
||||||
|
|
||||||
|
```
|
||||||
|
docker compose up -d # поднять
|
||||||
|
docker compose down # погасить, кэш и настройки в томах сохранятся
|
||||||
|
docker logs --since 10m searxng-core
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверка: `curl -s -H 'Accept: application/json' http://127.0.0.1:26745/config | head -c 200`
|
||||||
|
|
||||||
|
## Возврат MCP-сервера
|
||||||
|
|
||||||
|
Добавить в `mcp.servers` файла `opencode/.config/opencode/opencode.json`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"searxng": {
|
||||||
|
"type": "local",
|
||||||
|
"command": ["npx", "-y", "mcp-searxng"],
|
||||||
|
"environment": { "SEARXNG_URL": "http://localhost:26745" }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
После правки — разложить конфиг установщиком (`./install.sh`) или скопировать
|
||||||
|
файл в `~/.config/opencode/opencode.json`, затем перезапустить OpenCode.
|
||||||
|
|
||||||
|
## Ограничения
|
||||||
|
|
||||||
|
- Настройки по умолчанию (`use_default_settings: true`), форматы `html` и `json`.
|
||||||
|
- С домашнего IP часть движков быстро упирается в лимиты: `brave` и `wikipedia`
|
||||||
|
отвечают `too many requests`, `duckduckgo` — CAPTCHA. Остаётся `google cse`,
|
||||||
|
то есть полноценной агрегации из многих движков ждать не стоит.
|
||||||
|
- Контейнер не обновляется сам: `docker compose pull && docker compose up -d`.
|
||||||
@@ -1,70 +1,34 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://opencode.ai/config.json",
|
"$schema": "https://opencode.ai/config.json",
|
||||||
// Плагин opencode-permission-reviewer снят (эксперимент 2026-10-11 признан
|
// Минимальный шаблон для OpenCode 2.x. Файл раскладывается копией
|
||||||
// неудачным — см. docs/research/). Блок сохранён для возврата:
|
// (install.sh → copy_managed_file), поэтому правки в репозитории
|
||||||
// "plugins": [
|
// попадают в ~/.config/opencode только после ./install.sh.
|
||||||
// {
|
"share": "manual",
|
||||||
// "package": "opencode-permission-reviewer@^2.4.0",
|
"permissions": [
|
||||||
// "options": {}
|
// Порядок важен: побеждает последнее совпавшее правило.
|
||||||
// }
|
{ "action": "edit", "resource": "*", "effect": "ask" },
|
||||||
// ],
|
{ "action": "webfetch", "resource": "*", "effect": "ask" },
|
||||||
"default_agent": "build",
|
{ "action": "subagent", "resource": "*", "effect": "ask" },
|
||||||
"permission": {
|
{ "action": "shell", "resource": "*", "effect": "ask" },
|
||||||
// edit покрывает и запись, и патчи (write/patch в V2 устарели)
|
{ "action": "shell", "resource": "*/.ssh/*", "effect": "deny" },
|
||||||
"edit": "ask",
|
{ "action": "shell", "resource": "*id_rsa*", "effect": "deny" },
|
||||||
"webfetch": "ask",
|
{ "action": "shell", "resource": "*id_ed25519*", "effect": "deny" },
|
||||||
"task": "ask",
|
{ "action": "shell", "resource": "*.pem", "effect": "deny" },
|
||||||
"bash": {
|
{ "action": "shell", "resource": "*.env", "effect": "deny" },
|
||||||
"*": "ask",
|
{ "action": "shell", "resource": "*.env.*", "effect": "deny" },
|
||||||
"*/.ssh/*": "deny",
|
{ "action": "shell", "resource": "*.secrets*", "effect": "deny" },
|
||||||
"*id_rsa*": "deny",
|
{ "action": "shell", "resource": "*.netrc*", "effect": "deny" },
|
||||||
"*id_ed25519*": "deny",
|
{ "action": "shell", "resource": "*.env.example", "effect": "allow" }
|
||||||
"*.pem": "deny",
|
],
|
||||||
"*.env": "deny",
|
|
||||||
"*.env.*": "deny",
|
|
||||||
"*.secrets*": "deny",
|
|
||||||
"*.netrc*": "deny",
|
|
||||||
"*.env.example": "allow"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mcp": {
|
"mcp": {
|
||||||
"context7": {
|
"servers": {
|
||||||
"type": "remote",
|
"context7": {
|
||||||
"url": "https://mcp.context7.com/mcp",
|
"type": "remote",
|
||||||
"headers": {
|
"url": "https://mcp.context7.com/mcp",
|
||||||
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
|
"headers": {
|
||||||
},
|
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
|
||||||
"enabled": true
|
}
|
||||||
},
|
}
|
||||||
"searxng": {
|
|
||||||
"type": "local",
|
|
||||||
"command": [
|
|
||||||
"npx",
|
|
||||||
"-y",
|
|
||||||
"mcp-searxng"
|
|
||||||
],
|
|
||||||
"environment": {
|
|
||||||
"SEARXNG_URL": "http://localhost:26745"
|
|
||||||
},
|
|
||||||
"enabled": true
|
|
||||||
},
|
|
||||||
"playwright": {
|
|
||||||
"type": "local",
|
|
||||||
"command": [
|
|
||||||
"npx",
|
|
||||||
"-y",
|
|
||||||
"@playwright/mcp@latest"
|
|
||||||
],
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"duckduckgo": {
|
|
||||||
"type": "local",
|
|
||||||
"command": [
|
|
||||||
"uvx",
|
|
||||||
"duckduckgo-mcp-server"
|
|
||||||
],
|
|
||||||
"enabled": true
|
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
"share": "manual"
|
|
||||||
}
|
}
|
||||||
@@ -1 +0,0 @@
|
|||||||
../../../agents/.agents/skills
|
|
||||||
Reference in new issue
Block a user