← Все статьи

AiDesktop: Локальная разработка с агентами в мульти-поточном режиме?

AiDesktop: Локальная разработка с агентами в мульти-поточном режиме?

Мне тут идея пришла в ходе новостей начала 2026 года, очень много появилось опен-сорс решений которые позволяют вести локальные разработки и быть просто помощниками в любую минуту - что захотелось создать что-то своё, родное, работающее.

Настольные AI-агенты с графическим интерфейсом

Все представленные ниже проекты превращают возможности командной строки в удобное визуальное приложение. Их главная цель — дать пользователям возможность взаимодействовать с AI-агентами без необходимости работать в терминале.

Что есть на рынке

Смотрите сами, мне кажется если покопаться то можно найти еще больше, вот лишь основные, заслуживающие рассмотрения проекты на мой взгляд:

ПроектЛокальный?ИнтеграцииGUI⭐ Звёзды
OpenWork (different-ai)ОпциональноOpenCode плагины7k
OpenWork (accomplish)ДаВеб-сервисы2.7k
Open Claude CoworkНет500+ сервисов1.8k
Claude CoworkНетClaude Code2.4k
Hello HaloНетMCP, браузер382
LocalDesk (я тут pr вкидывал)ДаWeb, файлы160
GooseДаMCP, CLI✅ + CLI28.6k
LocalWork HeroДа-0
DiveОпциональноMCP1.7k

Общий функционал

Настольное приложение

  • Нативное десктопное приложение (Electron, Tauri)
  • Кроссплатформенность (Windows, macOS, Linux)

Чат-интерфейс

  • Текстовый ввод сообщений
  • Стриминг ответов (по токенам)
  • История диалогов (сессии)
  • Множественные чат-сессии

Инструменты (Tools)

Все проекты поддерживают вызов инструментов (function calling):

  • Файловые операции: чтение, запись, поиск, редактирование файлов
  • Выполнение команд: shell команды, терминал
  • Веб-инструменты: поиск, чтение страниц, рендеринг JS-страниц
  • Код-исполнение: безопасное выполнение JavaScript/WASM
  • Управление задачами: todo-списки, планирование

🤖 AI-интеграции

  • Поддержка множества провайдеров (OpenAI, Anthropic, Ollama, локальные модели)
  • Возможность использовать свои API ключи
  • Поддержка локальных моделей (vLLM, Ollama, llama.cpp)
  • Переключение между моделями в интерфейсе

🔐 Безопасность

  • Пользовательское одобрение перед выполнением опасных операций
  • Песочницы для файловых операций
  • Лимитирование доступа к файловой системе

📊 Визуализация

  • Отображение прогресса выполнения задач
  • Визуализация вызова инструментов (вход/выход)
  • Предпросмотр создаваемых файлов
  • Дашборды и панели управления

Сильные стороны каждого проекта

ПроектУникальные преимущества
OpenWork (different-ai)Гибкая система skills, интеграция с OpenCode ecosystem
OpenWork (accomplish)Приватность, локальная работа, простота настройки
Open Claude Cowork500+ интеграций через Composio, гибкость провайдеров
Claude CoworkМинимализм, фокус на Claude Code, нативное чувство
Hello HaloУдалённый доступ с телефона, встроенный AI Browser
LocalDeskСистема памяти, WASM sandbox, Telegram парсинг
GooseСамый популярный, CLI + Desktop, MCP поддержка, гибкость
LocalWork Hero100% приватность, llama.cpp, MIT лицензия
DiveMCP Host, OAP Cloud интеграция, 24+ языка, dual архитектура

Чего бы хотел я в новом продукте

Почему новый? Потому что все описанное выше не подходит под мою задуманную архитектуру, если не заложить что-то в начале - то потом вы хрен когда к этому подойдете

Требования проекта — Desktop AI Assistant с Task Scheduler


🏗️ АРХИТЕКТУРА

Режим работы

Server+Client (Standalone) — полный стек локально на одной машине. Backend API + GUI вместе. Единственный режим на старте.

Технологический стек

УровеньТехнология
FrontendTypeScript + React
DesktopElectron
Package ManagerBun
Backend APIHono
Real-timeSocket.IO
DatabaseSQLite (better-sqlite3)
Task SchedulerBullMQ
Queue Storagein-memory
ValidationZod
Search Engineflexsearch

Архитектурные компоненты

┌────────────────────────────────────────────────────────────┐
│                    ELECTRON FRONTEND                       │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐    │
│  │  Chat UI │  │ Planner  │  │  Diff UI │  │  Pipeline│    │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘    │
└───────┼─────────────┼─────────────┼─────────────┼──────────┘
        │ Socket.IO   │             │             │
        ▼             ▼             ▼             ▼
┌────────────────────────────────────────────────────────────┐
│                   BACKEND API (Hono)                       │
│  ┌─────────────────────────────────────────────────────┐   │
│  │          HTTP Routes + Socket.IO Handler            │   │
│  └─────────────────────────────────────────────────────┘   │
└────────────────────────────────────────────────────────────┘


┌────────────────────────────────────────────────────────────┐
│                    TASK SCHEDULER (BullMQ)                 │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐    │
│  │   Queue  │  │  Worker  │  │  Events  │  │   Retry  │    │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘    │
└───────┼─────────────┼─────────────┼─────────────┼──────────┘
        │             │             │             │
        ▼             ▼             ▼             ▼
┌────────────────────────────────────────────────────────────┐
│                     TASK EXECUTION LAYER                   │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                    AGENT SYSTEM                      │  │
│  │  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐  │  │
│  │  │ Coding  │  │Research │  │ Planning│  │Summary  │  │  │
│  │  │  Agent  │  │  Agent  │  │  Agent  │  │  Agent  │  │  │
│  │  └─────────┘  └─────────┘  └─────────┘  └─────────┘  │  │
│  └──────────────────────────────────────────────────────┘  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                  SESSION MANAGER                     │  │
│  │  - Сессии изолированы                                │  │
│  │  - Под-сессии создаются динамически                  │  │
│  │  - Контекст сохраняется                              │  │
│  └──────────────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────────────┘
        │            │            │            │
        ▼            ▼            ▼            ▼
┌────────────────────────────────────────────────────────────┐
│                    INTEGRATION LAYER                       │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌────────────┐     │
│  │   LLM   │  │   MCP   │  │  Tools  │  │  Index     │     │
│  │Provider │  │Servers  │  │Executor │  │  Engine    │     │
│  │         │  │         │  │         │  │(flexsearch)│     │
│  └─────────┘  └─────────┘  └─────────┘  └────────────┘     │
└────────────────────────────────────────────────────────────┘

⚡ ФУНКЦИОНАЛ

1. ПЛАНИРОВЩИК ЗАДАЧ (CORE SYSTEM)

ФункцияОписание
Task QueueОчередь задач для выполнения
Task DependenciesГраф зависимостей между задачами (Task B зависит от Task A)
Parallel ExecutionПараллельное выполнение независимых задач
Sequential ExecutionПоследовательное выполнение зависимых задач
Sub-task CreationДинамическое создание подзадач агентами
Task Status TrackingСтатусы: pending, running, completed, failed, stopped
Task EventsSocket.IO события для реального времени (task.created, task.started, task.completed, task.failed)
Stop ButtonОстановка всех текущих и будущих задач сессии. Флаг stopped: boolean в сессии. Планировщик проверяет флаг перед запуском. Выполняющиеся задачи получают событие stop через EventEmitter
Context PreservationКонтекст сессии сохраняется после остановки для продолжения
Task Result StorageРезультаты задач сохраняются в базе для истории
Task PriorityПриоритеты: 1 (высокий), 2 (средний), 3 (низкий). По умолчанию — 3
Task TimeoutПользователь настраивает лимиты
Task RetryПользователь настраивает количество попыток
Task Context PassingПередача контекста между задачами. Подзадачи имеют доступ к результатам родительских
Task CachingКеширование результатов задач. Хеш параметров задачи → результат. Проверять кеш перед выполнением
Task Result AggregationАгрегация результатов от множества задач. Задача-агрегатор ожидает завершения всех зависимых задач, считывает их результаты из базы, объединяет и передаёт финальному агенту

2. ЧАТ-СИСТЕМА

ФункцияОписание
Chat InterfaceТекстовый интерфейс с markdown и стримингом
Workspace SelectionПри создании чата можно выбрать рабочую папку. Список прошлых открываемых папок
Mode SelectionЕсли папка выбрана → Ask + Plan + Build. Если нет → только Ask + Plan
3 Chat Modes
  • Ask — только отвечает на вопросы, использует тулы и поиск
  • Plan — всегда создаёт план работ и задаёт уточняющие вопросы
  • Builder — сразу приступает к кодингу
CommandsНастраиваемые команды (например, /pr — создаёт PR). Хранятся в настройках
StreamingПотоковый вывод ответов по токенам
Parallel QuestionsПараллельное задание уточняющих вопросов пользователю (список выбора) пока идёт работа. Отдельный тип задачи question с options: string[]. Отправлять через Socket.IO как событие session:question
Stop ButtonОстановка всех задач сессии, контекст сохраняется

3. СИСТЕМА СЕССИЙ

ФункцияОписание
Session IsolationКаждая сессия изолирована от других
Sub-sessionsАгенты могут создавать под-сессии для отдельных задач
Session ContextКонтекст сессии сохраняется и используется при продолжении
Session HistoryИстория сессий в базе данных
Project ContextАвтосохранение данных о проекте при работе с папкой (индекс, структура, метаданные)
Session RecoveryВозможность продолжить сессию после остановки или перезапуска
Session State MachineМашина состояний: idlerunningstoppedcompletedarchived
Auto-saveПериодическое сохранение состояния сессии в базу каждые N секунд или после каждой задачи

4. AGENT СИСТЕМА

ФункцияОписание
Multi-Agent CodingГлавный агент создаёт и координирует субагентов
Agent OrchestrationУправление параллельным и последовательным выполнением
Sub-agent CreationАгенты динамически создают других агентов через задачи
Task-based CommunicationВсе коммуникации между агентами через задачи в планировщике
Agent Communication ProtocolСтандартизировать формат сообщений между агентами через задачи: {from, to, type, payload, timestamp}
Agent TypesCoding, Research, Planning, Summary, Review и др.

5. ФАЙЛОВЫЕ ОПЕРАЦИИ

ФункцияОписание
File SandboxПесочница для файловых операций (только выбранная папка)
Read FileЧтение файлов
Write FileЗапись файлов
Edit FileРедактирование файлов (search & replace)
Search FilesПоиск файлов по паттернам
File IndexingИндексирование файлов проекта через flexsearch для быстрого поиска (без grep). LLM может поставить задачу в flexsearch, он что-то найдет — отдаст llm и дальше можно будет другие задачи ставить
Diff StorageХранение diff файлов. При каждом изменении файла создавать запись {sessionId, filePath, before, after, timestamp}
Diff DisplayОтображение изменений файлов после завершения сессии. Использовать библиотеку diff
RollbackОткат изменений файлов через diff
File WatchingНаблюдение за файлами через chokidar. При изменении → создаётся задача хука
HooksХуки при изменениях файлов (синтаксис, коммиты, PR). Настраиваются пользователем

6. ПАЙПЛАЙНЫ РАЗРАБОТКИ

ФункцияОписание
Pipeline BuilderНастраиваемые пайплайны через интерфейс
Pipeline TemplatesГотовые шаблоны (PR creation, Testing, Deployment)
Pipeline ConfigurationНастройка шагов, инструментов, агентов через UI
Custom PipelinesВозможность создавать свои пайплайны

7. ЛОГИРОВАНИЕ ОШИБОК

ФункцияОписание
Error LoggingЛогирование всех ошибок в файлы ~/.yourapp/logs/ с ротацией
Error DescriptionsЧеловекочитаемые описания ошибок
Error ContextКонтекст ошибки (задача, агент, инструмент, параметры)
Error RecoveryВозможность повторного выполнения с исправленными параметрами
Error DisplayОтображение ошибок пользователю с предложениями решения
Log Levelserror, warn, info, debug

8. ВЕБ-ИНСТРУМЕНТЫ

ФункцияОписание
Web SearchПоиск в интернете
Web ScraperСкрапинг веб-страниц
Render PageРендеринг JS-тяжёлых страниц
URL FetchЗагрузка содержимого по URL
Documentation LinksВозможность добавить веб-ссылки на документацию проектов

9. LLM ИНТЕГРАЦИИ

ФункцияОписание
ZAI IntegrationОсновной провайдер (по умолчанию)
OpenRouterДоступ к бесплатным моделям
OpenAI-compatibleЛюбые OpenAI-совместимые эндпоинты
Local ModelsПоддержка Ollama, vLLM, LM Studio
Multi-threaded ResponsesПараллельные ответы от разных моделей → summary
Streaming ResponsesПотоковый вывод от LLM
LLM Context ManagementУправление контекстом LLM. Система сжатия контекста, ранжирование по релевантности, удаление устаревших сообщений

10. MCP ИНТЕГРАЦИИ

ФункцияОписание
MCP ServersПодключение MCP серверов
Tool DiscoveryОбнаружение доступных инструментов
Tool ExecutionВыполнение инструментов через планировщик задач
Email Integration(Future) Интеграция с почтой
Telegram Integration(Future) Интеграция с Telegram Bot API

11. ПРОФИЛИ И НАСТРОЙКИ

ФункцияОписание
User SettingsГлобальные настройки пользователя
Workspace SettingsНастройки для рабочей папки
Agent MemoryДолгосрочная память агентов
Memory StorageХранение в SQLite
Configuration ManagementИерархия конфигов: global > user > workspace. API для чтения/записи

12. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ

ФункцияОписание
Terminal ExecutionВыполнение shell команд
Image GenerationГенерация изображений
Plugins/SkillsСистема плагинов и навыков
Custom SkillsПользовательские навыки (например, проверка синтаксиса для конкретного языка)
Remote Access(Future) Возможность удалённого доступа к серверу

ФУНКЦИИ - зачем и почему

1. Backend API — Hono

Что: Фреймворк для REST API и WebSocket сервера.

Зачем: Быстрый и простой API сервер для связи между Electron frontend и backend логикой.

Как сделать: Использовать Hono — минималистичный, быстрый, TypeScript-friendly фреймворк с маленьким размером.


2. Task Scheduler — BullMQ

Что: Готовое решение для планирования и выполнения задач.

Зачем: Не изобретать велосипед — уже решены очереди, приоритеты, повторы, события.

Как сделать: BullMQ на базе Redis или in-memory очереди для локального режима. Поддерживает приоритеты, зависимости, повторы, события.


3. WebSocket — Socket.IO

Что: Дизайн WebSocket соединения для реального времени.

Зачем: Двусторонняя связь для стриминга ответов, событий задач, уведомлений.

Как сделать: Использовать Socket.IO для автоматического управления подключениями, комнатами, фоллбэком.


4. Task Schema and Validation — Zod

Что: Схема задачи и валидация параметров.

Зачем: Структурированное хранение задач, проверка корректности данных, типизация.

Как сделать: Определить TypeScript интерфейс для задачи. Использовать Zod для валидации.


5. Task Dependency Graph

Что: Граф зависимостей между задачами.

Зачем: Выполнение задач в правильном порядке, определение параллельных задач.

Как сделать: Использовать dependencies: string[] массив с ID родительских задач. Планировщик проверяет завершение всех зависимостей перед запуском задачи.


6. Task Stop/Cancellation Mechanism

Что: Механизм остановки и отмены задач.

Зачем: Кнопка “Стоп” должна корректно останавливать все задачи сессии.

Как сделать: Добавить флаг stopped: boolean в сессию. Планировщик проверяет флаг перед запуском новых задач. Выполняющиеся задачи получают событие stop через EventEmitter.


7. Task Result Aggregation

Что: Агрегация результатов от множества задач.

Зачем: Когда параллельные задачи завершены — нужно собрать их результаты для финальной задачи.

Как сделать: Задача-агрегатор ожидает завершения всех зависимых задач, считывает их результаты из базы, объединяет и передаёт финальному агенту.


8. Parallel Questioning System

Что: Система параллельного задания вопросов пользователю.

Зачем: Пока агент работает, пользователь должен иметь возможность отвечать на уточняющие вопросы параллельно.

Как сделать: Создавать отдельный тип задачи question с options: string[]. Отправлять через Socket.IO как событие session:question. UI отображает список вопросов. Ответы сохраняются и используются агентами.


9. Diff Storage and Display

Что: Хранение и отображение diff файлов.

Зачем: После сессии пользователь должен видеть все изменения и иметь возможность откатить.

Как сделать: При каждом изменении файла создавать запись {sessionId, filePath, before, after, timestamp}. Использовать библиотеку diff для отображения изменений в UI.


10. Session State Machine

Что: Машина состояний для сессии.

Зачем: Отслеживание жизненного цикла сессии.

Как сделать: Использовать паттерн State Machine с состояниями: idle, running, paused, stopped, completed. Переходы управляются событиями.


11. Task Priority System

Что: Приоритеты задач.

Зачем: Критически важные задачи выполняются первыми, менее важные — позже.

Как сделать: Приоритет шкала 1-3, где 1 — высокий, 2 — средний, 3 — низкий. По умолчанию 3. Планировщик сортирует задачи по приоритету.


12. Task Timeout and Retry

Что: Таймауты и повторы для задач.

Зачем: Задачи не висят вечно, при сбоях — повторная попытка.

Как сделать: Пользователь настраивает timeout: number и retryCount: number. Планировщик отменяет задачу по таймауту. При ошибке — создаёт новую задачу с retryCount + 1 (до лимита).


13. Task Context Passing

Что: Передача контекста между задачами.

Зачем: Подзадачи должны иметь доступ к результатам родительских задач.

Как сделать: Добавить context: any в задачу. Планировщик копирует контекст родительской задачи в дочерние. Результаты задач добавляются в контекст.


14. File Watching and Hooks

Что: Наблюдение за файлами и хуки при изменениях.

Зачем: Автоматические действия при изменении файлов.

Как сделать: Использовать chokidar для наблюдения. Хуки конфигурируются пользователем. При изменении → создаётся задача хука.


15. Recent Folders List

Что: Список прошлых открываемых папок.

Зачем: Быстрый доступ к недавним проектам.

Как сделать: Хранить список путей в настройках пользователя. Отображать в UI при создании чата.


16. Project Indexing Strategy — flexsearch

Что: Стратегия индексирования файлов проекта.

Зачем: Быстрый поиск без полного сканирования каждый раз. LLM может ставить задачи для поиска.

Как сделать: Использовать flexsearch для полнотекстового поиска. Индекс обновляется при изменении файлов. LLM создаёт задачу поиска → flexsearch находит → возвращает результат → LLM продолжает.


17. LLM Context Management

Что: Управление контекстом LLM.

Зачем: Контекст ограничен, нужно эффективно его использовать.

Как сделать: Система сжатия контекста, ранжирование по релевантности, удаление устаревших сообщений.


18. Agent Communication Protocol

Что: Протокол коммуникации между агентами.

Зачем: Агенты должны понимать друг друга и координировать действия.

Как сделать: Стандартизировать формат сообщений между агентами через задачи: {from, to, type, payload, timestamp}.


19. Configuration Management

Что: Управление конфигурациями приложения.

Зачем: Разные профили (global, user, workspace), разные настройки для разных папок. Подготовка к будущему remote режиму.

Как сделать: Хранить конфиги в JSON файлах с иерархией: global > user > workspace. API для чтения/записи.


20. Database Schema Design

Что: Схема базы данных SQLite.

Зачем: Чёткая структура для хранения сессий, задач, профилей, логов.

Как сделать: Спроектировать таблицы: sessions, tasks, files, diffs, logs, settings. Использовать миграции.


21. Task Visualization

Что: Визуализация дерева задач.

Зачем: Пользователь видит что происходит, какие задачи выполняются, их зависимости.

Как сделать: Использовать библиотеку dagre или react-flow для отрисовки графа задач в UI.


22. Task Execution History (Debug Mode)

Что: История выполнения задач в debug режиме.

Зачем: Отладка, анализ производительности, повторное использование.

Как сделать: При включённом debug режиме сохранять логи выполнения каждой задачи: {taskId, startTime, endTime, duration, steps, logs}.


26. Auto-save for Work

Что: Автосохранение работы.

Зачем: Не потерять данные при краше.

Как сделать: Периодическое сохранение состояния сессии в базу каждые N секунд или после каждой задачи.


27. Task Caching

Что: Кеширование результатов задач.

Зачем: Избегать повторного выполнения одинаковых задач.

Как сделать: Хеш параметров задачи → результат. Проверять кеш перед выполнением.


28. Performance Monitoring (Debug Mode)

Что: Лёгкий мониторинг производительности в debug режиме.

Зачем: Определение bottleneck-ов, оптимизация.

Как сделать: При включённом debug режиме собирать метрики: время выполнения задач, размер ответов, использование памяти. Простые графики в UI.


29. Error Recovery Logging

Что: Логирование стратегий восстановления после ошибок.

Зачем: Анализ ошибок, определение проблемных мест.

Как сделать: Сохранять попытки восстановления и их результаты в логах для последующего анализа.


30. User Feedback Collection — Issues

Что: Ссылка на GitHub Issues для обратной связи.

Зачем: Понять что нравится/не нравится, улучшать продукт.

Как сделать: Добавить в меню ссылку на репозиторий для создания issues.