Research Chat
Панель «Спросить агента» в локальном ResearcherOS: вопрос уходит в очередь, ответ строится сначала из research.json, отчёты читаются только если не хватает деталей. Доставка ответа — через Inbox Cursor, hooks IDE или фоновый API.
media/chat-hero.png (или .jpg / .webp / .mp4 / .webm).
Как работает
Вопрос не отправляется в «весь репозиторий». Политика ответа:
- Сопоставить вопрос с записями в
research.json(вопрос / рассказ для человека / краткий технический ответ, уверенность, важность, карточка-источник). - Собрать связный ответ из подходящих записей.
- Открыть отчёт эксперимента только если нужны цифры или метод, которых нет в записи.
- Если в базе пусто — сказать об этом и предложить закрыть эксперимент (колонка «готово» → сценарий вывода) или уточнить вопрос.
Если вопрос хорошо совпадает с базой, API может ответить сразу (автоответ), без агента.
Три режима доставки (Настройки → «Агент в чате»):
| Режим | Поведение |
|---|---|
Inbox-чат (cursor_inbox, рекомендуется) |
Watcher пишет wake-строку в лог; чат Cursor слушает AGENT_CHAT_WAKE (~1–3 с) |
Hooks (cursor_ide) |
Очередь подхватывается при старте/остановке чата агента в IDE |
Фоновый API (api) |
Воркер + ключ Cursor API |
Очередь: .run/agent-chat-queue.json. Скилл агента: koi-agent-chat (claim → context → ответ → complete).
Рядом по тому же Inbox-паттерну живут чаты литературы и статьи — отдельные страницы каталога; эта страница только про панель вопросов по проекту.
Как человек работает в интерфейсе
- Откройте проект. Кнопка открытия панели чата (на главной рабочей области).
- При первом запуске Inbox: в панели — шаги «Скопировать сообщение» → вставить в чат ResearchOS Chat Inbox в Cursor → «Inbox готов». Статус watcher видно в подсказке.
- Введите вопрос в поле (плейсхолдер вроде «помогает ли …»). Отправьте форму.
- В ленте: ваш вопрос, статусы «в очереди» / «прочитано» / «Агент пишет…», затем ответ. Область видимости может учитывать текущий метод или узел (scope).
- В Настройках переключите режим агента в чате, если нужен hooks или API вместо Inbox.
Без настроенного Inbox (в режиме inbox) панель покажет инструкцию bootstrap; без ключа API — соответствующее уведомление в режиме api.
Какие сценарии для агента подключаются
| Сценарий (skill) | Роль |
|---|---|
koi-agent-chat |
Основной: claim / context / ответ по политике «сначала research.json». |
koi-done-research |
Наполняет базу, из которой чат отвечает; без done-выводов чат часто пустой. |
koi-knowledge-curator |
Курируемые заметки — дополнительный контекст, не замена research.json как первого источника. |
| Hooks скилла | agents/skills/koi-agent-chat/hooks/ — session/stop для режима IDE. |
Команды локально:
python -m koi.agent_chat.cli pending
python -m koi.agent_chat.cli claim <queue_id>
python -m koi.agent_chat.cli context <queue_id>
python -m koi.agent_chat.inbox_cli bootstrap
python -m koi.agent_chat.inbox_cli watch
Подробности Inbox: docs/agent-chat-inbox.md.
Как устроено технически
Поток данных
UI → HTTP постановка вопроса в очередь → (опционально автоответ по совпадению с research.json) → watcher/hook/worker будит агента → агент claim + context (в JSON: вопрос, project, scope, весь research_database, политика) → ответ пишется обратно в очередь/API → панель показывает сообщение.
Пакет: koi/agent_chat/ (cli, inbox_cli, очередь под .run/). Клиент: #agent-chat-panel в web/index.html, логика в web/app.js (режимы agent_chat_mode, bootstrap, watcher status).
Контекст scope
Если пользователь смотрел метод или узел, в context попадают scope_method / scope_node — ответ можно сузить, не теряя доступ ко всей базе проекта.
Ограничения
- Чат не заменяет онбординг и не пишет дерево сам по себе.
- Качество ответа упирается в заполненность
research.jsonи отчётов. - Inbox на macOS без inotify поллит очередь (~2 с); нужен запущенный
koi-serve/ watcher.
Связанные страницы
Текст: content/chat.md. Медиа: media/chat-hero.*.