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.
|
||||
* **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.
|
||||
* **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.
|
||||
|
||||
## 🚀 Usage & Maintenance
|
||||
|
||||
@@ -31,6 +31,9 @@ description: >-
|
||||
- **постановка**: путь к задаче, спеке или критериям приёмки. Без неё линза
|
||||
«по задаче» работает вслепую — так и напиши;
|
||||
- **команды проверки** и ожидаемый результат (например, число тестов);
|
||||
- **границы**, если они есть: куда не ходить (приватные данные, рабочие
|
||||
серверы, боевые скрипты), какие проверки слишком дороги, что в этой среде
|
||||
заведомо не находка;
|
||||
- **места, где ты сам не уверен** — вопросами, без своих обоснований:
|
||||
пересказ твоей логики лишает ревьюера независимости. То же с выводами
|
||||
другого ревьюера, пока оба не закончили первый заход;
|
||||
@@ -97,14 +100,20 @@ prompts/lens-….md > prompt.md`. Файлы `prompts/` лежат в катал
|
||||
## Разбор находок
|
||||
|
||||
Разбирает находки автор: у тебя контекст кода и задачи. Пользователю нужен
|
||||
итог в отчёте, а не участие в каждом споре.
|
||||
итог в отчёте, а не участие в каждом споре. Так же разбирай и отзывы других
|
||||
моделей, которые переслал пользователь.
|
||||
|
||||
По каждой находке проверь три вещи:
|
||||
|
||||
1. **Верна ли она фактически.** Воспроизведи сценарий, прочти код, запусти
|
||||
тест. Ревьюеры ошибаются уверенно: выдумывают API, путают версии,
|
||||
приписывают коду то, чего в нём нет, требуют защиты от невозможных
|
||||
состояний. Уверенный тон — не доказательство.
|
||||
состояний. Автору легко поверить хорошо изложенной находке, но уверенный
|
||||
тон — не доказательство. Проверяй и то, на чём находка держится:
|
||||
утверждения о прогонах, истории и прошлых решениях сверяй с источником
|
||||
так же, как утверждения о коде. Дешёвая починка от проверки не
|
||||
освобождает: ложная находка, закрытая одной строкой, всё равно добавляет
|
||||
лишнее.
|
||||
2. **Применима ли к этому проекту** — его контрактам, масштабу, угрозам.
|
||||
3. **Соразмерна ли починка риску.** Предложенный способ — один из вариантов.
|
||||
Подтверждённый дефект закрывай лучшим путём, какой видишь; отказ от
|
||||
|
||||
@@ -40,7 +40,9 @@
|
||||
ревьюер не увидит.
|
||||
- **`runtimeMode` не задавай.** Режимы с подтверждением остановят ревьюера
|
||||
на первом же действии и будут ждать человека в его разговоре. Ограничения
|
||||
задаёт мандат в поручении.
|
||||
задаёт мандат в поручении. Режим наследуется от твоего разговора, а шире
|
||||
своего задать нельзя: если ты сам работаешь с подтверждением, скажи
|
||||
пользователю до запуска.
|
||||
- После запуска заверши ход: уведомление о завершении придёт само.
|
||||
`task_status` нужен, только если результат требуется посреди хода.
|
||||
- Итоговое сообщение ревьюера приходит в `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",
|
||||
// Плагин opencode-permission-reviewer снят (эксперимент 2026-10-11 признан
|
||||
// неудачным — см. docs/research/). Блок сохранён для возврата:
|
||||
// "plugins": [
|
||||
// {
|
||||
// "package": "opencode-permission-reviewer@^2.4.0",
|
||||
// "options": {}
|
||||
// }
|
||||
// ],
|
||||
"default_agent": "build",
|
||||
"permission": {
|
||||
// edit покрывает и запись, и патчи (write/patch в V2 устарели)
|
||||
"edit": "ask",
|
||||
"webfetch": "ask",
|
||||
"task": "ask",
|
||||
"bash": {
|
||||
"*": "ask",
|
||||
"*/.ssh/*": "deny",
|
||||
"*id_rsa*": "deny",
|
||||
"*id_ed25519*": "deny",
|
||||
"*.pem": "deny",
|
||||
"*.env": "deny",
|
||||
"*.env.*": "deny",
|
||||
"*.secrets*": "deny",
|
||||
"*.netrc*": "deny",
|
||||
"*.env.example": "allow"
|
||||
}
|
||||
},
|
||||
// Минимальный шаблон для OpenCode 2.x. Файл раскладывается копией
|
||||
// (install.sh → copy_managed_file), поэтому правки в репозитории
|
||||
// попадают в ~/.config/opencode только после ./install.sh.
|
||||
"share": "manual",
|
||||
"permissions": [
|
||||
// Порядок важен: побеждает последнее совпавшее правило.
|
||||
{ "action": "edit", "resource": "*", "effect": "ask" },
|
||||
{ "action": "webfetch", "resource": "*", "effect": "ask" },
|
||||
{ "action": "subagent", "resource": "*", "effect": "ask" },
|
||||
{ "action": "shell", "resource": "*", "effect": "ask" },
|
||||
{ "action": "shell", "resource": "*/.ssh/*", "effect": "deny" },
|
||||
{ "action": "shell", "resource": "*id_rsa*", "effect": "deny" },
|
||||
{ "action": "shell", "resource": "*id_ed25519*", "effect": "deny" },
|
||||
{ "action": "shell", "resource": "*.pem", "effect": "deny" },
|
||||
{ "action": "shell", "resource": "*.env", "effect": "deny" },
|
||||
{ "action": "shell", "resource": "*.env.*", "effect": "deny" },
|
||||
{ "action": "shell", "resource": "*.secrets*", "effect": "deny" },
|
||||
{ "action": "shell", "resource": "*.netrc*", "effect": "deny" },
|
||||
{ "action": "shell", "resource": "*.env.example", "effect": "allow" }
|
||||
],
|
||||
"mcp": {
|
||||
"context7": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.context7.com/mcp",
|
||||
"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
|
||||
"servers": {
|
||||
"context7": {
|
||||
"type": "remote",
|
||||
"url": "https://mcp.context7.com/mcp",
|
||||
"headers": {
|
||||
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"share": "manual"
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
../../../agents/.agents/skills
|
||||
Reference in new issue
Block a user