Внимание — это всё, что есть у модели.
Сфокусировать его — задача niuma_code.
В 2017 году «Attention is All You Need» определило эпоху: весь интеллект моделей построен на внимании. Восемь лет спустя мы обнаружили, что дело не в отсутствии механизма внимания у моделей — а в незнании, куда его направить. Чем длиннее контекст, тем больше шум размывает по-настоящему важную информацию. niuma_code делает одно: сжимает контекст и добавляет фокусировку — чтобы каждый токен попадал туда, куда должен.
Настоящая запись экрана режима 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 попытки коррекции.
- Цели ДОЛЖНЫ быть разбиваемыми на шаги с командами верификации — 'улучшите это' не верифицируется
- Запишите метод верификации прямо в цели (py_compile / тесты) для максимальной точности планирования
- 3 неудачи автокоррекции обычно означают недостаток информации верификации — вместо того чтобы усердствовать, разбивайте дальше
- 3 неудачи не останавливают — записываются и цикл продолжается; проверяйте маркеры [!!] в сводке
3 шага для начала
Скачать, настроить и запустить — готово за секунды
Список параметров 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 | Завершает программу |