Skip to content

Siesher/opencode-homelab

Repository files navigation

OpenCode Homelab banner

🛠️ OpenCode Homelab — Local-First AI Coding Agent Stack

«Лучший AI-ассистент — тот, который никуда не уходит из твоей сети.»

Полностью локальный коддинг-агент, который запускается на потребительском железе и работает без облачных API. Аналог Claude Code и Cursor, но веса, контекст и история — только у тебя на диске.

Latest release License: MIT CI status Platform: Windows Powered by llama.cpp

Установка · Архитектура · Маршрутизация · Производительность · Модели · Документация · Релиз v0.1.0

English version


✦ О проекте

Стек объединяет четыре компонента в единый workflow для локальной разработки с AI-ассистентом:

  • OpenCode CLI — TUI-агент с tool-calling и поддержкой MCP.
  • llama.cpp с CUDA — backend инференса с гибридным размещением MoE-экспертов между GPU и CPU.
  • llama-swap + smart router — автоматический выбор контекста (65K / 128K / 256K) под размер запроса.
  • MCP-инструменты — приватный поиск, чтение URL, GitHub, persistent memory, filesystem.

Целевые сценарии

🛠 Локальная разработка — код, рефакторинг, дебаг с AI без отправки исходников в облако 🔍 Research — приватный поиск через SearXNG, без трекинга и логирования 📚 Анализ длинных документов — до 256K токенов на одну сессию (Qwen3.6 hybrid arch) 🤖 Эксперименты с локальными LLM — гибкая инфра для подключения любых GGUF-моделей

Ключевые особенности

  • Smart context routing — router считает токены и переключает llama-server между пресетами автоматически
  • Speculative decoding через draft-модель Qwen3.5-0.8B (×1.5-2 на коротком контексте)
  • MoE override-tensor — эксперты на CPU, attention на GPU (35B-модель влезает в 8 GB VRAM)
  • DRY sampler против зацикливаний без поломки JSON tool-calls
  • Disk-backed prompt cache — холодный старт ускоряется в 10-30 раз
  • Восемь MCP-серверов из коробки (searxng, fetch, github, memory, filesystem, time, context7, sequential-thinking)
  • Четыре кастомных subagent: researcher, reviewer, tester, debugger

✦ Архитектура

                    ┌──────────────────┐
                    │  OpenCode (TUI)  │  ← пользовательский интерфейс
                    │   npm: opencode  │
                    └────────┬─────────┘
                             │ POST /v1/chat/completions
                             ▼
                ┌────────────────────────┐
                │   Smart Router :8081   │  ← FastAPI, оценка токенов,
                │      router.py         │     выбор пресета (short/mid/long)
                └────────────┬───────────┘
                             │ переписывает body["model"]
                             ▼
                ┌────────────────────────┐
                │   llama-swap :8090     │  ← Go-бинарь, on-demand load/unload
                │   load/unload models   │     с TTL 30 минут
                └────────────┬───────────┘
                             │ spawn
                             ▼
        ┌────────────────────────────────────────────┐
        │   llama-server (один пресет в памяти)      │
        │                                            │
        │   ┌─────────┐  ┌─────────┐  ┌──────────┐  │
        │   │ short   │  │ mid     │  │ long     │  │
        │   │ ctx 65K │  │ ctx 128K│  │ ctx 256K │  │
        │   │ + spec  │  │         │  │          │  │
        │   └─────────┘  └─────────┘  └──────────┘  │
        │                                            │
        │   override-tensor: experts → CPU/RAM       │
        │   attention/embeds/KV → GPU                │
        └────────────────────────────────────────────┘

   Параллельно (запускает OpenCode):
   ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────┐ ┌──────────┐
   │searxng │ │ fetch  │ │ github │ │ memory │ │ time │ │ ctx7+seq │
   └───┬────┘ └────────┘ └────────┘ └────────┘ └──────┘ └──────────┘
       │
       ▼
   ┌──────────────────┐
   │ SearXNG :8888    │  ← приватный мета-поиск,
   │ + Valkey (Docker)│     агрегирует Google/DDG/Bing/Brave
   └──────────────────┘

Подробное описание компонентов: docs/architecture.md. SVG-версия диаграммы: docs/screenshots/architecture.svg.

✦ Умная маршрутизация контекста

Smart router — тонкий слой Python/FastAPI между OpenCode и llama-swap. На каждом запросе оценивает размер промпта (включая tools и messages) и выбирает оптимальный пресет. Один llama-server одновременно в RAM, переключение через TTL=30 минут.

                  Incoming request
                         │
                         ▼
              ┌──────────────────────┐
              │ estimate_tokens()    │  считает символы в messages + tools
              │ chars / 2.2          │  + фиксированный overhead 12K
              │ + OVERHEAD_TOKENS    │  под Jinja-template и system prompt
              └──────────┬───────────┘
                         │
                         ▼
              ┌──────────────────────┐
              │  pick_model(n)       │  three buckets:
              │                      │    n ≤ 35K  → qwen36-short
              │  THRESHOLDS lookup   │    n ≤ 85K  → qwen36-mid
              │                      │    n  > 85K → qwen36-long
              └──────────┬───────────┘
                         │
                         ▼
              ┌──────────────────────┐
              │ rewrite body[model]  │  переписывает поле model
              │ forward to llama-    │  и стримит ответ обратно
              │ swap (8090)          │  клиенту через SSE
              └──────────────────────┘
Bucket ctx Speculative Use-case
qwen36-short 65K ON (×1.5-2 boost) Агентские циклы, tool-loops, CRUD-задачи
qwen36-mid 128K OFF Чтение средних файлов, multi-file refactor
qwen36-long 256K OFF Анализ репозитория целиком, длинные документы

При желании пресет можно зафиксировать вручную в TUI через Ctrl+P — например, qwen36-long для one-shot анализа большого PDF.

✦ Производительность

Замеры на RTX 2080 (8 GB VRAM) + Ryzen 9 9950X + 32 GB DDR5, контекст 32K:

Метрика Значение
Prompt processing 200-465 t/s
Token generation 30-49 t/s
Speculative accept rate 60-83%
Эффективная скорость с speculative ~70-90 t/s
RAM (модель + кэши) ~22 GB
VRAM (активный slot) ~6 GB

Прогноз для RTX 5070 Ti (16 GB) — рост в 2-3 раза за счёт большего VRAM, нативной FP4 на Blackwell и возможности перенести часть экспертов обратно на GPU.

Подбор моделей под другой бюджет VRAM: docs/models.md.

✦ Установка

Требования

Компонент Минимум Рекомендуется
GPU NVIDIA 8 GB VRAM (Turing+) RTX 5070 Ti / 4080 (16 GB)
CPU 8 cores Ryzen 9 9950X / Intel i9
RAM 32 GB DDR4 32+ GB DDR5
Disk 50 GB SSD 100+ GB NVMe
OS Windows 10/11 Windows 11 + WSL2

Должны быть установлены: Node.js LTS, Docker Desktop, aria2, Python 3.10+, CUDA 12.x toolkit.

Запуск

git clone https://github.com/Siesher/opencode-homelab.git C:\OpenCode
cd C:\OpenCode

# Базовая установка (OpenCode CLI, llama.cpp, llama-swap, конфиги)
.\scripts\install.ps1

# Скачивание моделей (~22 GB, 30-60 минут)
.\scripts\install.ps1 -DownloadModels

# Лимиты памяти WSL2 для Docker
Copy-Item .\.wslconfig.example $env:USERPROFILE\.wslconfig
wsl --shutdown

Запуск стека

# Окно 1: SearXNG
docker compose -f .\searxng\docker-compose.yml up -d

# Окно 2: основной стек (llama-swap + router)
.\scripts\start-stack.ps1

# Окно 3: интерфейс
opencode

В TUI: Ctrl+Pllama-server / qwen36-auto. Router сам подберёт контекст.

Полный гайд установки: docs/installation.md.

✦ Пример использования

Простой запрос:

Прочитай файл README.md и сделай краткое содержание в трёх предложениях.

В окне router-а будет видно решение маршрутизатора:

[router] ~3500 tokens estimated → routing to 'qwen36-short'

Запрос с большим объёмом данных:

Проанализируй все .py файлы в папке project/ и предложи рефакторинг.
[router] ~95000 tokens estimated → routing to 'qwen36-mid'

Использование кастомных subagent:

@reviewer проверь diff последнего коммита
@researcher найди последние benchmark-ы для Qwen3.6-35B-A3B
@tester напиши тесты для модуля utils.py
@debugger почему этот тест флякует через раз

✦ Структура проекта

opencode-homelab/
├── README.md, README.en.md, LICENSE, CHANGELOG.md, CITATION.cff
├── .gitignore, .wslconfig.example
│
├── scripts/                            PowerShell-скрипты
│   ├── install.ps1                     Главный установщик
│   ├── install-llama-swap.ps1          Скачивает llama-swap бинарь
│   ├── start-stack.ps1                 Запуск llama-swap + router
│   └── stop-stack.ps1                  Остановка всех процессов
│
├── llama-swap/
│   └── llama-swap.example.yaml         Три пресета модели (short/mid/long)
│
├── opencode/
│   ├── opencode.example.json           Провайдеры и MCP-серверы
│   ├── AGENTS.example.md               Шаблон правил агента
│   └── agents/                         Custom subagents
│       ├── researcher.md
│       ├── reviewer.md
│       ├── tester.md
│       └── debugger.md
│
├── searxng/
│   ├── docker-compose.yml              SearXNG + Valkey
│   └── settings.example.yml            Конфиг с включённым JSON API
│
├── router/
│   ├── router.py                       FastAPI smart router
│   └── requirements.txt
│
├── docs/
│   ├── installation.md                 Подробная установка
│   ├── architecture.md                 Описание компонентов
│   ├── models.md                       Подбор моделей под VRAM
│   ├── troubleshooting.md              Частые проблемы
│   └── screenshots/                    SVG-диаграммы и UI-mockup
│
└── .github/
    ├── ISSUE_TEMPLATE/                 Шаблоны bug-report и feature-request
    ├── PULL_REQUEST_TEMPLATE.md
    └── workflows/validate.yml          CI: валидация конфигов

✦ Технологии

Layer Stack
Agent CLI OpenCode (npm: opencode-ai)
Inference llama.cpp (CUDA 12.4) · llama-server · llama-swap v197
Router Python 3.10+ · FastAPI · uvicorn · httpx
Model Qwen3.6-35B-A3B Q4_K_M (hybrid attention + Gated Delta Net + MoE)
Draft model Qwen3.5-0.8B Q4_K_M (для speculative decoding)
Search SearXNG · Valkey (Redis fork) · Docker Compose
MCP searxng · fetch · github · memory · filesystem · time · context7 · sequential-thinking
Subagents researcher · reviewer · tester · debugger
Deploy Windows 10/11 (PowerShell) + WSL2 для Docker
CI GitHub Actions (validate YAML/JSON, encoding check, ruff)

✦ Дорожная карта

  • v0.1.0 — initial release: OpenCode + llama.cpp + Qwen3.6 + smart router + 8 MCP + 4 subagents
  • v0.2.0 — multimodal preset (Qwen2.5-VL-32B для vision-задач)
  • v0.3.0 — vLLM backend для NVFP4-квантов на Blackwell GPU
  • v0.4.0 — live GIF demo маршрутизации, реальные скриншоты TUI
  • v1.0.0 — стабильный API, dockerized one-command launcher

✦ Полезные ссылки

Проект построен поверх следующих компонентов:

Архитектурная база и оптимизации:

✦ Лицензия

MIT License — свободно используй, форкай, модифицируй. См. LICENSE.

Для академического цитирования: CITATION.cff.


Каждый промпт — твой. Каждый токен — твой. Каждая модель — на твоём диске.

Сухацкий Максим · МГТУ им. Н. Э. Баумана (Калужский филиал) · 2026

About

Local-first AI coding agent stack: OpenCode + llama.cpp + Qwen3.6 with smart context routing

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors