Skip to content

Repository files navigation

Nova

Скажи, что должно быть сделано. Nova разберётся, какие окна, файлы и инструменты для этого нужны.

Локальный OS-агент для Windows, который не просто отвечает — он действует на вашем компьютере.

Windows Python Tests Local first

Nova orchestrates your Windows workspace

Голос · окна · файлы · терминал · браузер · память · MCP · фоновые планы


Не ещё один чат. Исполнитель.

Обычному ассистенту вы объясняете задачу, получаете инструкцию и всё равно делаете работу сами. Nova получает цель, выбирает подходящие инструменты, выполняет шаги и показывает, что получилось.

«Открой проект, запусти тесты, покажи ошибки и не потеряй процесс, пока я занимаюсь другим».

Nova может открыть приложения, работать с файлами, запустить команду в фоне, следить за процессом, продолжить план после перезапуска и сообщить, когда результат готов.

Обычный AI-чат Nova
Пишет, куда нажать Нажимает через API или UI Automation
Даёт команду для терминала Запускает и контролирует процесс
Забывает задачу после закрытия Сохраняет checkpoints фоновых планов
Видит только prompt Работает с окнами, файлами, браузером и MCP
Говорит «не могу» без доступного действия Ищет подходящий инструмент и объясняет реальный blocker

Одна фраза → законченный workflow

Вы:   «Запусти проект, прогони тесты и скажи, если сервер упадёт»

Nova: понимает цель
      → выбирает terminal + process tools
      → запускает работу в фоне
      → сохраняет состояние
      → следит за тестами и сервером
      → возвращается с результатом

Не нужно помнить названия инструментов или вручную собирать цепочку команд. Вы описываете результат человеческим языком.

Что Nova уже умеет

Управлять Windows

  • Открывать одно или сразу несколько приложений.
  • Сворачивать и закрывать окна, менять громкость.
  • Находить элементы интерфейса через UI Automation и нажимать их.
  • Распознавать текст на экране через OCR.
  • Принимать голосовую команду по Ctrl+Shift+Space.
«Открой блокнот, калькулятор и проводник»
«Найди кнопку “Сохранить” в активном окне и нажми её»
«Распознай текст на экране»

Работать как инженерный агент

  • Автоматически понимать активный Git/workspace по IDE, терминалу и файлам.
  • Выполнять относительные terminal/file/Git-команды именно в этом проекте.
  • Читать, создавать и изменять файлы с backup и diff.
  • Отменять последние изменения Nova командой «верни как было», не затирая более свежие ручные правки.
  • Проверять Git status, diff, log, ветки и делать commit.
  • Запускать команды, тесты и долгоживущие процессы.
  • Читать stdout/stderr, проверять health и останавливать дерево процессов.
  • Управлять Playwright-браузером.
«Запусти тесты здесь» — полный путь к проекту указывать не нужно
«Отмени последнее изменение Nova» — восстановится точный проверенный backup
«Покажи изменения в проекте и предложи название коммита»
«Запусти python -m pytest в фоне и покажи итог»
«Подними HTTP-сервер на 8000 и следи, чтобы он не упал»

Помнить и продолжать

  • Хранить долговременные факты локально в SQLite.
  • Создавать многошаговые и фоновые планы.
  • Сохранять checkpoint после каждого подтверждённого шага.
  • Продолжать незавершённый план после перезапуска без повтора side effects.
  • Создавать напоминания.
«Запомни, что рабочие репозитории лежат в D:\Projects»
«Запусти в фоне план: открой проект, прогони тесты, собери отчёт»
«Напомни через 20 минут проверить сборку»

Быть проактивной, но не самовольной

В настройках есть opt-in режим «Nova рядом». Когда он включён, Nova изредка анализирует только активное окно и может сама спросить:

«Похоже, сборка упала. Разобраться с ошибкой?»

Кнопка под предложением превращает его в обычный пользовательский запрос. Регистрация на сайте, ответ в мессенджере, публикация или другое внешнее действие проходят через стандартный orchestrator, preview и permission policy. Само наблюдение никогда не получает инструменты.

Nova сообщает, когда:

  • в активном окне появилась явная ошибка, блокер или полезный момент для помощи;
  • завершился фоновый план или тесты;
  • упал управляемый сервер;
  • CPU или RAM остаются перегруженными несколько измерений подряд — с указанием процесса-виновника;
  • на диске заканчивается место;
  • одноразовый процесс подозрительно долго остаётся запущенным;
  • в Git появился конфликт или изменения давно не закоммичены;
  • failed-план можно безопасно продолжить с последнего checkpoint;
  • повторяющуюся последовательность действий стоит сохранить как workflow;
  • явно отслеживаемая публичная страница изменилась;
  • резервная копия пропала или устарела;
  • для установленного Python-пакета вышла новая версия.

Уведомления имеют cooldown, quiet hours, уровень важности и объяснимую причину. Nova предлагает действие, но не выполняет новый side effect без запроса пользователя.

«Следи за https://example.com/releases и сообщи, когда страница изменится»
«Покажи сайты, за которыми ты следишь»
«Удали подписку watch_...»
«Следи за D:\Backups и предупреди, если backup старше 24 часов»
«Покажи контроль резервных копий»
«Следи за обновлениями пакета requests»

Для поиска повторов сохраняются только названия инструментов, случайные operation/turn/session ID и время. Аргументы, пути, сообщения и результаты не попадают в эту историю; записи старше configured lookback удаляются.

Почему Nova реже отвечает «я не могу»

Инструменты регистрируются в общем capability registry. Роутер выбирает их по намерению задачи, а не заставляет одну модель угадывать всё сразу.

  • Частые Windows-команды выполняются напрямую, без лишнего LLM-вызова.
  • Для сложной задачи Nova строит план и вызывает инструменты по шагам.
  • MCP-инструменты подключаются к тому же registry.
  • Ошибки инструментов возвращаются как структурированный результат, а не маскируются общим отказом.
  • Опасные операции проходят через permission policy.

Модели и маршрутизация

Для Groq маршрут намеренно ограничен двумя моделями:

Запрос Модель
Текст, рассуждение и tool calling openai/gpt-oss-120b
Запрос с изображением qwen/qwen3.6-27b

OpenRouter может использоваться как резервный провайдер. Nova не отправляет текстовый tool-call в случайную маленькую модель ради формального fallback.

Быстрый старт

1. Клонируйте Nova

git clone https://github.com/KremlevLev/nova.git
cd nova

2. Создайте окружение

py -3.14 -m venv .venv
.\.venv\Scripts\Activate.ps1
python scripts/install_dependencies.py
python -m playwright install chromium

3. Добавьте ключ

Copy-Item .env.example .env

Минимальный .env:

GROQ_API_KEYS=gsk_your_key

Ключ Groq создаётся в console.groq.com. Для резервного маршрута можно также задать:

OPENROUTER_API_KEYS=sk-or-your_key

4. Запустите

python -m main

Нажмите Ctrl+Shift+Space и скажите:

«Открой блокнот и напиши: Nova работает».

Горячие клавиши

Клавиша Действие
Ctrl+Shift+Space Включить или выключить голосовой режим
Esc Прервать речь Nova
Ctrl+Shift+Q Аварийно прервать речь Nova

Desktop UI

Текущий PySide6-интерфейс запускается вместе с Nova и остаётся рабочим fallback на время миграции. Он даёт один центр управления:

  • диалог и история выполнения;
  • фоновые процессы и их логи;
  • память;
  • разрешения для рискованных действий;
  • состояние моделей и провайдеров;
  • proactive-уведомления и причины их появления.

Интерфейс можно отключить:

NOVA_DESKTOP_UI=false

Новый desktop-клиент развивается в apps/desktop: React + TypeScript отвечают за presentation layer, Tauri — за окно, установщик и обновления, а всё AI-ядро остаётся в Python.

Обычная установка на Windows

Пользователю нужен только один файл:

Nova_0.1.5_x64-setup.exe

Запустите installer обычным двойным кликом. Nova установится для текущего пользователя в %LOCALAPPDATA%\Nova, появится в меню «Пуск» и в списке установленных программ. Python, Node.js и Rust на пользовательском компьютере не требуются.

При первом старте без API-ключа приложение не падает: откройте «Настройки», выберите Groq/OpenRouter/Gemini и вставьте ключ. Nova сохранит его в пользовательских данных приложения и сама переподключит Core.

Запуск для разработки

Для локального просмотра кликабельного dev-сценария:

cd apps\desktop
npm install
npm run dev
# открыть http://127.0.0.1:1420/?demo=1

Без ?demo=1 браузерный preview честно показывает отсутствие Tauri Core. JSONL bridge и supervisor уже реализованы, но полноценный desktop-запуск проверяется отдельной командой:

$env:Path = "$env:USERPROFILE\.cargo\bin;$env:Path"
cd C:\Users\Utest\Desktop\nova\apps\desktop
npm run desktop

Эта команда сама запускает Vite, собирает/открывает нативное окно Tauri и поднимает Python Core. Не запускайте npm run dev одновременно: оба процесса попытаются занять порт 1420.

Сборка Windows installer

Один раз установите build dependencies:

python -m pip install -r requirements-build.txt
cd apps\desktop
npm install

Затем:

$env:Path = "$env:USERPROFILE\.cargo\bin;$env:Path"
npm run installer

Команда собирает React, упаковывает headless Python Core через PyInstaller, собирает Tauri release и создаёт:

apps\desktop\src-tauri\target\release\bundle\nsis\Nova_0.1.5_x64-setup.exe

Core использует source fingerprint: повторная сборка пропускает PyInstaller, если Python-ядро не менялось. Для принудительной пересборки:

npm run build:core -- --force

Подробнее: docs/desktop_architecture.md.

MCP: подключите рабочие сервисы

Nova поддерживает stdio, Streamable HTTP и legacy SSE через официальный MCP Python SDK. Конфиг совместим с форматом mcpServers:

NOVA_MCP_CONFIG=C:\Users\you\.config\nova\mcp.json
NOVA_MCP_AUTO_DISCOVERY=false
{
  "mcpServers": {
    "project_files": {
      "command": "python",
      "args": ["C:\\tools\\project_server.py"],
      "env": {
        "PROJECT_TOKEN": "${PROJECT_TOKEN}"
      }
    },
    "internal_api": {
      "transport": "streamable_http",
      "url": "http://127.0.0.1:8000/mcp"
    }
  }
}

После handshake инструменты получают risk/category metadata и участвуют в общем capability routing. Значения ${ENV_NAME} подставляются локально и не добавляются в prompt.

Контроль и безопасность

OS-агент не должен быть «магией», которой приходится слепо доверять.

  • Рискованные операции требуют подтверждения.
  • Python-код выполняется в sandbox.
  • Запись в системные каталоги ограничена.
  • Fallback не повторяет уже выполненный side effect.
  • Фоновые действия и причины proactive-предложений журналируются.
  • «Nova рядом» выключена по умолчанию: при наблюдении кадр остаётся в RAM и в vision-модель уходит только активное окно.
  • После клика «Помочь» визуальный контекст создаётся как одноразовый attachment и удаляется сразу после чтения агентом.
  • Окна password manager, банков, оплаты и private browsing автоматически пропускаются.
  • Содержимое экрана считается недоверенным и проверяется на prompt injection.
  • MCP auto-discovery выключен по умолчанию.
  • Секреты остаются в .env и environment variables.

Порог свободного места и quiet hours настраиваются:

NOVA_PROACTIVE_QUIET_START=22
NOVA_PROACTIVE_QUIET_END=8
NOVA_PROACTIVE_DISK_FREE_PERCENT=10
NOVA_PROACTIVE_DISK_FREE_GB=5
NOVA_PROACTIVE_SYSTEM_CHECK_SECONDS=15
NOVA_PROACTIVE_CPU_PERCENT=90
NOVA_PROACTIVE_MEMORY_PERCENT=88
NOVA_PROACTIVE_SYSTEM_CONSECUTIVE_SAMPLES=4
NOVA_PROACTIVE_VISION_CHECK_SECONDS=180
NOVA_PROACTIVE_VISION_MIN_CONFIDENCE=0.78
NOVA_PROACTIVE_STALE_PROCESS_HOURS=4
NOVA_PROACTIVE_REPOSITORY_CHECK_SECONDS=60
NOVA_PROACTIVE_UNCOMMITTED_MINUTES=30
NOVA_PROACTIVE_RESUME_PLAN_MINUTES=15
NOVA_PROACTIVE_WORKFLOW_LOOKBACK_DAYS=14
NOVA_PROACTIVE_WORKFLOW_MIN_REPETITIONS=3
NOVA_PROACTIVE_WEBSITE_CHECK_SECONDS=300
NOVA_PROACTIVE_BACKUP_CHECK_SECONDS=300
NOVA_PROACTIVE_PACKAGE_CHECK_SECONDS=21600
NOVA_PROACTIVE_DISABLED_KINDS=disk_space_low,tests_completed

Как это устроено

flowchart LR
    U["Голос / Desktop UI"] --> I["Intent routing"]
    I --> D["Direct Windows actions"]
    I --> P["Planner"]
    P --> R["Tool registry"]
    R --> W["Windows / Files / Git"]
    R --> B["Browser"]
    R --> M["MCP servers"]
    R --> X["Processes"]
    X --> C["Checkpoints + proactive events"]
    C --> U
Loading
nova/
├── apps/
│   └── desktop/       React/TypeScript UI и Tauri Windows shell
├── core/              конфигурация и системные правила
├── modules/
│   ├── agent/         планы, background tasks, proactive engine
│   ├── application/   request pipeline и отчёты
│   ├── audio/         STT и TTS
│   ├── brain/         LLM gateway и model routing
│   ├── browser/       Playwright
│   ├── storage/       SQLite, память, checkpoints, artifacts
│   ├── tools/         registry, runner, policies
│   ├── ui/            PySide6 Desktop UI и overlay
│   └── windows/       процессы, файлы, Git, UIA, OCR
├── tests/
├── main.py
└── roadmap.md

Проверка

python -m pytest -q
cd apps\desktop
npm test
npm run build

Текущий regression suite: 724 Python-теста + 4 desktop contract tests.

Для проверки именно оркестратора без Groq, сети и реальных действий:

python -m tests.orchestrator_acceptance

Golden-сценарии прогоняют production selector, tool schemas, registry, policy, runtime validation и события выполнения. Все handlers заменены безопасными recorders: приложения, файлы, терминал и сайты фактически не затрагиваются. Новая capability добавляется одной записью в GOLDEN_SCENARIOS внутри tests/orchestrator_acceptance.py.

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

Nova активно развивается. Уже работают OS-инструменты, durable background plans, MCP layer, desktop UI, память и безопасная проактивность. Дальше — расширение proactive-сценариев и multi-agent orchestration.

Подробный и честный backlog находится в roadmap.md.

Если вам нужен Windows-агент, которому можно не только задать вопрос, но и передать реальную задачу — попробуйте Nova и расскажите, на каком workflow она должна экономить ваше время следующей.

About

A deterministic Windows AI agent that doesn't hallucinate actions. Features native UI Automation (no blind clicks), file rollbacks, and strict HITL security.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages