v0.2.0 - Alpha

Внимание — это всё, что есть у модели.
Сфокусировать его — задача niuma_code.

В 2017 году «Attention is All You Need» определило эпоху: весь интеллект моделей построен на внимании. Восемь лет спустя мы обнаружили, что дело не в отсутствии механизма внимания у моделей — а в незнании, куда его направить. Чем длиннее контекст, тем больше шум размывает по-настоящему важную информацию. niuma_code делает одно: сжимает контекст и добавляет фокусировку — чтобы каждый токен попадал туда, куда должен.

🔒
🛡️
📦
v0.2.0 Alpha
💬

Настоящая запись экрана режима IDE-оркестрации — попробуйте niuma_code за 1 минуту

10 инструментов для максимальной отдачи каждого токена

Каждая функция разработана для того, чтобы ваши токены попадали в самую важную точку.

⚙️

Автономный harness с циклом tool_use

LLM выполняет команды, анализирует результаты, принимает решения — всё в автономном цикле. Без постоянного контроля человека.

  • Автономное выполнение инструментов с циклом принятия решений
  • Анализ промежуточных результатов в реальном времени
  • Умная обрезка и компрессия для управления контекстом
🔁

Loop engineering с верификацией

Цикл планировать-выполнить-проверить с 3 попытками автокоррекции. Каждый шаг верифицируем.

  • Разбиение на верифицируемые шаги
  • 3 попытки автокоррекции перед отчётом
  • Непрерывная проверка состояния проекта
🖥️

TUI полного экрана с prompt_toolkit

Насыщенный интерфейс терминала, максимизирующий область контента. Прокрутка клавиатурой, автодополнение, горячие клавиши.

  • Максимальная область контента с адаптивным дизайном
  • Прокрутка клавиатурой и настраиваемые горячие клавиши
  • Полная поддержка символов Unicode (китайский, японский и т.д.)
💻

IDE режим Оркестрации

Редактор кода на полном экране. Пишите скрипты оркестрации на нативном Python и интегрируйте вызовы LLM в программные рабочие процессы.

  • Инжектируемые функции: llm_call / llm_confirm / llm_judge для управляемой оркестрации
  • F5 предпросмотр (статический анализ AST), F6 выполнение (без присмотра, авто-назначение разрешений)
  • Безопасный песочница + чёрный список опасных импортов (os/subprocess/socket и т.д.) — единственная сеть безопасности в без присмотра режиме
🔌

Мультипровайдерная маршрутизация

Настройте несколько API эндпоинтов в settings.json — запросы автоматически маршрутизируются к нужному провайдеру по имени модели.

  • Каждый провайдер объявляет base_url / api_key / список поддерживаемых моделей
  • Смените модель с помощью #tag или /model — автоматическое подключение к нужному эндпоинту
  • Каскад настройки из 3 уровней (пользователь/проект/локальный), последнее определение имеет приоритет
🗂️

Параллельное управление контекстом

Расширьте разговор на N параллельных контекстов, каждый независимо управляет историей, подсчётом токенов и состоянием сжатия.

  • LRU вытеснение, лимит по умолчанию 5 (настраивается через max_contexts) — вытеснение = архивировано, восстановимо
  • /context визуальный оверлей для переключения; асинхронная генерация сводки при выходе
  • /messages множественный выбор по единицам — удаление / переупорядочивание / интеграция сводки LLM
🕸️

Граф знаний кода

Анализ структуры кода на tree-sitter, построение цепочек вызовов, зависимостей и графов — точная локализация до того, как LLM прочитает строку.

  • 4 инструмента запроса только для чтения: символ, файл, ссылка, цепочка вызовов
  • Возвращает файл:строку и сигнатуру — заменяет поиск в океане grep
  • Перестроение по требованию с 3 факторами решения — избегает полного разбора при запуске
🤖

Параллельное исследование субагентами

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

  • Несколько субагентов выполняют инструменты параллельно, неблокирующие
  • Исследование в изолированном контексте, только сводки — не загрязняет основной разговор
  • Принадлежит парадигме harness по умолчанию, вызывается по требованию (не самостоятельный режим)
🧠

Перцептивная память

Постоянная память с memory-palace — события во время выполнения записываются как воспоминания в реальном времени, накапливая опыт между сессиями.

  • 10 типов перцептивных событий (зрение/тело/язык/нос/результат и т.д.), запись в реальном времени
  • Тройки фактов + сводка разговора, 4-уровневое извлечение + байесовское затухание
  • Автоматическая встройка в системный промпт в следующей сессии, стабильная позиция извлечения
🎯

Отслеживание награды за результат

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

  • OutcomeTracker рассчитывает балл 0.0–1.0 на протяжении всего жизненного цикла задачи
  • Балл награды является сигналом стоимости повторного использования для памяти
  • Интегрировано с 10 типами перцептивных событий и событиями read/write/tool-call

Как эффективно использовать оба режима

Если шаги не ясны, опишите и итерируйте (harness). Если есть чек-лист, используйте /loop.

🧭

Ключевые моменты harness

harness не имеет цикла перепланирования — чем яснее ввод, тем точнее автономное исследование.

Использовать когда: Есть общая идея, но не можете сформулировать шаги, и хотите продвигаться итеративно. Например: 'Найдите и исправьте ошибку на странице входа'
  • Запишите ограничения заранее: цель + нетронутые файлы/функции + критерии приёмки — не меняйте требования во время выполнения
  • Идеально когда границы нечёткие, но цель ясна; чем яснее шаг, тем быстрее сходимость
  • Используйте контрольные точки: ESC для остановки в любой момент, длинный вывод сжимается автоматически, ошибки API повторяются автоматически
  • 'Готово' и 'действительно готово' — разные вещи — запускайте тесты/компиляцию самостоятельно после важных изменений
🎯

Ключевые моменты loop

Автокоррекция полностью зависит от 'верификации' — только верифицируемые цели делают осмысленными 3 попытки коррекции.

Использовать когда: Можете разбить задачу на шаги с методом верификации для каждого. Например: '/loop Добавьте пагинацию в API пользователей и запустите py_compile после изменений'
  • Цели ДОЛЖНЫ быть разбиваемыми на шаги с командами верификации — 'улучшите это' не верифицируется
  • Запишите метод верификации прямо в цели (py_compile / тесты) для максимальной точности планирования
  • 3 неудачи автокоррекции обычно означают недостаток информации верификации — вместо того чтобы усердствовать, разбивайте дальше
  • 3 неудачи не останавливают — записываются и цикл продолжается; проверяйте маркеры [!!] в сводке

3 шага для начала

Скачать, настроить и запустить — готово за секунды

01 Скачать
⬇ Скачать niuma.exe
Windows · Без установки · Мгновенный запуск
02 Настроить
# ~/.niuma/settings.json
{
  "factories": [{
    "api_key": "your-key"
  }]
}
03 Запустить
$ niuma.exe
niuma_code v0.2.0 launched

Список параметров settings.json

Путь к файлу конфигурации: ~/.niuma/settings.json

factoriesНастройка мультипровайдерного API. Каждый провайдер объявляет base_url / api_key / список поддерживаемых моделей; запросы автоматически маршрутизируются по имени модели
Пример настройки
{
  "factories": [
    {
      "base_url": "https://api.anthropic.com",  // Anthropic official endpoint
      "api_key": "sk-ant-xxx",                   // Required; all three fields must be present
      "options": ["claude-sonnet-4-6", "claude-opus-4-8"]  // Supported models for this provider
    },
    {
      "base_url": "https://your-proxy.example.com",  // Anthropic-compatible proxy endpoint
      "api_key": "sk-proxy-xxx",
      "options": ["claude-sonnet-4-6"]  // Supported models for this endpoint
    }
  ]
}
Параметр Тип По умолчанию Описание
base_url string --- URL API эндпоинта (обязательно)
api_key string --- API ключ (обязательно)
options string[] [] Имена поддерживаемых моделей для этого провайдера
llmМодель, уровень усилий, бюджет мышления и управление контекстом
Пример настройки
{
  "llm": {
    "default_model": "claude-sonnet-4-6",   // Default value for /model switch
    "default_effort": "high",               // Determines which thinking_budget is used
    "max_contexts": 5,                      // Max parallel contexts; LRU eviction beyond limit
    "resume_latest_context": true,          // Resume last active context on startup
    "options": [                            // Model -> effort mapping
      {"claude-sonnet-4-6": ["low", "medium", "high"]},
      {"claude-opus-4-8": ["low", "medium", "high", "max"]}
    ],
    "thinking_budget_low": "0",             // 0 = disable extended thinking
    "thinking_budget_medium": "0",
    "thinking_budget_high": "10000",        // Thinking budget for high effort
    "thinking_budget_max": "20000"           // Thinking budget for max effort (deepest reasoning)
  }
}
Параметр Тип По умолчанию Описание
default_model string "claude-sonnet-4-6" Модель по умолчанию (фиксирована на сессию, смена через /model)
default_effort string "high" Уровень усилий по умолчанию — управляет глубиной бюджета мышления
max_contexts integer 5 Максимум активных параллельных контекстов; превышение вытесняется LRU
resume_latest_context boolean true Восстановить последний активный контекст при запуске; false = новое начало
options object[] [] Соответствие модель→усилие, используется для валидации переключения /model
thinking_budget_low string/int "0" Бюджет токенов мышления для низкого усилия (0 = отключено)
thinking_budget_medium string/int "0" Бюджет токенов мышления для среднего усилия
thinking_budget_high string/int "10000" Бюджет токенов мышления для высокого усилия
thinking_budget_max string/int "20000" Бюджет токенов мышления для максимального усилия (самое глубокое рассуждение)
envПеременные окружения, записываемые в os.environ. Управляют персоной, отладкой, сетью и разрешениями
Пример настройки
{
  "env": {
    "PERSONA_NAME": "niuma",              // AI persona name, injected into system prompt
    "MODEL_BACKGROUND": "claude-haiku-4-5", // Background task model (memory extraction, compression, etc.)
    "LANG": "zh",                        // UI language (zh/en); also controls LLM response language
    "TEMPERATURE_ZERO": "true",            // Note: all values are strings
    "API_TIMEOUT": "30",                   // Streaming stall timeout (seconds)
    "API_ROUND_MAX": "120",                // Per-turn wall-clock hard limit (seconds)
    "API_STALL_MAX_RETRIES": "10",        // Max auto-retries on stream stall
    "PERMISSION_MODE": "auto",             // auto=whitelist+confirm / manual=whitelist only / skip=allow all
    "ALLOWED_TOOLS": ""                    // Whitelisted tools (comma-separated); empty = built-in defaults
  }
}
Параметр Тип По умолчанию Описание
PERSONA_NAME string "niuma" Имя персоны, встраиваемое в системный промпт
MODEL_BACKGROUND string "claude-haiku-4-5" Модель для фоновых задач (извлечение памяти, компрессия и т.д.)
LANG string "en" Язык интерфейса (zh/en); также управляет языком ответа LLM
TEMPERATURE_ZERO string(bool) "true" Фиксировать temperature=0 для детерминированного вывода; false = по умолчанию для модели
API_TIMEOUT string/int "30" Таймаут стриминга (секунды) — переподключение если нет событий после этого
API_ROUND_MAX string/int "120" Лимит времени на ход (секунды) — принудительное завершение старых стримов
API_STALL_MAX_RETRIES string/int "10" Максимальное количество автоматических повторов при зависании стрима
PERMISSION_MODE string "auto" Режим разрешений: auto (белый список+подтверждение) / manual (только белый список) / skip (разрешить всё)
ALLOWED_TOOLS string "" Белый список инструментов через запятую; пусто = встроенные по умолчанию
compactСжатие контекста: автоматически сжимает длинные разговоры для сохранения важной информации
Пример настройки
{
  "compact": {
    // -- Inline compression (blocks main loop until done) --
    "inline_trigger": 0.8,      // Triggers at 80% of MAX_TOKENS
    "inline_keep_ratio": 0.4,   // Keep latest 40% of messages after compression

    // -- Post-reply async compression (non-blocking, runs in background) --
    "idle_trigger": 0.5,        // Triggers at 50% of MAX_TOKENS
    "idle_keep_ratio": 0.4,     // Keep latest 40% of messages after compression

    // -- LLM summary output limit --
    "max_summary_tokens": 4096  // Max tokens for generated summary
  }
}
Параметр Тип По умолчанию Описание
inline_trigger float 0.8 Порог активации inline сжатия — блокирует основной цикл при достижении
inline_keep_ratio float 0.4 Доля последних сообщений для сохранения после inline сжатия
idle_trigger float 0.5 Порог активации idle сжатия — выполняется асинхронно после ответа
idle_keep_ratio float 0.4 Доля последних сообщений для сохранения после idle сжатия
max_summary_tokens integer 4096 Максимальные токены вывода для сгенерированной LLM сводки
memory_palaceНастройка LLM Memory Palace; независима от блока llm, разбирается отдельно
Пример настройки
// Basic mode: rule-based extraction only (no LLM, zero cost)
{
  "memory_palace": {
    "enable_v9": false,        // Disable V9; falls back to legacy V8 mode
    "llm_enabled": false        // Disable LLM enhancement
  }
}

// Full mode: LLM-enhanced extraction (all three fields required; otherwise falls back to rule-based)
{
  "memory_palace": {
    "enable_v9": true,
    "llm_enabled": true,       // Once enabled, the following three fields are required
    "base_url": "https://api.anthropic.com",
    "api_key": "sk-ant-xxx",
    "model": "claude-haiku-4-5"    // Recommend a lightweight model to save tokens
  }
}
Параметр Тип По умолчанию Описание
enable_v9 boolean true Включить перцептивную память V9; false = наследственный режим V8
llm_enabled boolean false Включить извлечение памяти с улучшением LLM; false = только на основе правил
base_url string "" URL эндпоинт LLM для памяти (все 3 поля обязательны, иначе откат к правилам)
api_key string "" API ключ LLM памяти
model string "" Модель для LLM памяти (рекомендуется лёгкая модель, например haiku)
memory_qualityПороги качества памяти; управляют фильтрацией записи и точностью извлечения
Пример настройки
{
  "memory_quality": {
    "min_store_importance": 0.4,  // Write gate: discard facts with importance below this threshold
    "min_recall_score": 0.35,     // Recall gate: skip memories scoring below this threshold
    "dedup_threshold": 0.3        // Dedup threshold: Jaccard similarity above this = duplicate
  }
}
Параметр Тип По умолчанию Описание
min_store_importance float 0.4 Гейт записи: отбрасывает факты с важностью ниже этого порога
min_recall_score float 0.35 Гейт извлечения: пропускает воспоминания с баллом ниже этого порога
dedup_threshold float 0.3 Порог дедупликации: схожесть Жаккара выше = дубликат, сохранять более новый

Список доступных команд

Выполняйте быстрые действия со слэш-командами

Команда Описание
/ide Запускает редактор кода на полном экране
/context Управление мульти-контекстом (новый/смена/переименование/удаление)
/help Показывает справочную информацию
/copy Копирует последний ответ в буфер обмена
/resume Возобновляет незавершённые задачи
/clear Очищает контекст разговора
/restart Перезапускает niuma
/model Просмотр/смена модели
/quit Завершает программу

Быстрые команды #tag

Используйте #tag для быстрой вставки предопределённых инструкций — определите один раз, используйте многократно

💡

Что такое #tag

Пользовательские теги — это ярлыки, которые раскрываются в заранее заданный текст при вводе #tagname.

  • Ввод #ru автоматически раскрывается в «Отвечай на русском»
  • Поддерживаются произвольные пользовательские теги, регистронезависимые
  • Теги могут стоять в любом месте ввода и автоматически удаляются после разбора
  • Развёрнутый текст добавляется к вводу и становится понятным для LLM
Пример: #ru Проверь сложность алгоритма сортировки пузырьком → [Отвечай на русском] Проверь сложность алгоритма сортировки пузырьком
⚙️

2 типа тегов

Системные теги управляют режимом работы, пользовательские теги встраивают предустановленные инструкции. Они дополняют друг друга.

  • #plan_mode — только анализ, без выполнения (наивысший приоритет)
  • #skip_mode — пропуск всех разрешений, прямое выполнение инструментов
  • #custom — любой пользовательский ярлык
  • При одновременном вводе plan_mode и skip_mode приоритет остаётся за plan_mode
📋

Команда /tag для управления

Используйте команду /tag для добавления, изменения, удаления и просмотра пользовательских тегов.

  • /tag — открывает панель управления тегами (TUI) или список тегов (CLI)
  • /tag add <name> <text> — добавляет новый тег
  • /tag mod <name> <text> — изменяет существующий тег
  • /tag rm <name> — удаляет тег
  • /tag ls — выводит список всех тегов
🎯

Распространённые примеры использования

Инкапсулируйте часто используемые инструкции в теги для повышения эффективности диалога.

  • #ru — принудительный ответ на русском языке
  • #fix — стандартные инструкции по исправлению ошибок
  • #review — стандартные требования к ревью кода
  • #explain — подробное объяснение логики кода
Комбинированное использование: #plan_mode #ru Проанализируй узкое место производительности этой функции
💾

Хранилище и настройка

Теги сохраняются в JSON-файле в том же каталоге, что и settings.json.

  • Путь: ~/.niuma/custom_tags.json
  • Простой формат ключ-значение, ключи автоматически приводятся к нижнему регистру
  • Атомарная запись, совместимость с Windows
Пример файла:
{
  "ru": "Отвечай на русском",
  "fix": "Исправь ошибку"
}
🔄

Конвейер анализа

Ввод проходит трёхстороннюю маршрутизацию, обеспечивая понимание LLM, воспоминание из памяти и перцептивное сохранение нужной информации.

  • raw_input — исходный ввод, для сохранения трассировки
  • llm_input — ввод после развёртывания тегов, для понимания LLM
  • filter_input — ввод без тегов, для воспоминания из памяти
  • Память не загрязняется тегами, воспоминания остаются точными