granttap-local
v1.0.0
Published
GrantTap Local: offline MCP for the GrantTap Term desk. One computer, no server.
Readme
GrantTap Term
Стол для одной машины. Он запускается внутри уже открытого терминала: iTerm, другой терминал или сессия SSH. Своего окна нет. Это не эмулятор терминала и не сервер GrantTap.
На одном компьютере стол показывает чаты Grok, Claude и Codex, очередь задач, меш репозиториев Weavatrix, файлы, текстовый браузер и уроки. Агенты остаются на этой машине и сами никуда не подключаются.
Цвета только киберпанк: красный, чёрный и синий. Левого меню нет. Вкладки стоят под строкой ввода. Строка ввода — красный ❯ и синий текст команды. Выбранная строка красная и помечена >. Активная вкладка — чёрный текст на красном.
Спецификация лежит в папке план.
GrantTap Local
Локальный MCP называется granttap-local. Это не сервер GrantTap и не облачный вход. Он офлайн: одна машина, stdio, JSON-RPC по строкам, без HTTP и без OAuth. Имя в initialize — granttap-local, версия 1.0.0.
Программа стола называется granttap-term. Тот же бинарник поднимает MCP:
granttap-term mcpПакет npm granttap-local ставит ту же программу и запускает её как MCP. Сборка пакета — darwin arm64.
npx granttap-localИнструменты: list_chats, preview_image, git_history, git_read_blob, browse_page, list_mesh, list_skills, read_handoff, read_skill. read_handoff принимает chat. read_skill принимает skill.
Запуск стола
Из каталога репозитория:
cargo runБез терминала программа пишет granttap-term: run this inside a terminal и выходит. granttap-term mcp работает и по трубе: так агент вызывает стол в тестах.
Клавиши: стрелки и мышь двигают курсор, Enter выполняет, Esc закрывает оверлей. F2 включает Vim, F3 раскрывает сплит на весь терминал, F4 правит файл, F10 выходит. Ctrl+V вставляет картинку как [Image #N] с форматом, размером в пикселях, байтами и путём. Предпросмотр всегда есть полублоками ▀. Sixel, Kitty и iTerm рисуются только когда терминал их умеет. Apple Terminal получает полублоки.
Экраны
Снимки сняты с текстового кадра стола, 96×28.
Чаты. Живой чат Grok берётся из active_sessions.json, если процесс ещё жив. Claude и Codex живые только когда процесс с именем claude или codex несёт этот идентификатор. Заголовок Grok читается из summary.json.

Задачи. У задачи один владелец, одна модель и один уровень усилия. Строка задачи открывает сплит в виде этого агента.


Меш — это репозитории, которые Weavatrix связал общими коммитами, а не чат. Башни показывают файлы и символы. Дороги идут по mod, use crate::, use super:: и относительному импорту JS. Внешние зависимости — отдельные синие полосы. Имена из .env.example видны, значения нет. Если связей нет, стол пишет none.

Файлы и редактор. У типа файла свой знак. Vim показывает, где файл, когда он менялся и что это за коммит. Отличие от HEAD помечено. Подсветка зависит от расширения: Rust, Python, JavaScript, TypeScript, Go, shell, C.


Браузер рисует локальный файл или страницу http/https текстом. Это клеточный разбор страницы для тестов, а не полный движок HTML.

Уроки: стол, Claude, терминал и Kubernetes. Отдельного экрана подов нет.

Команды
Над строкой ввода висят подсказки. Под ней — короткое описание. desc открывает описание в нижнем сплите. История команд хранится в ~/.granttap-term/desk.txt.
| Команда | Что делает |
| --- | --- |
| chats tasks mesh files browser lessons | Переключает вкладку |
| task <название> | Ставит задачу текущему агенту |
| move grok move claude move codex | Передаёт выбранный чат. Пишет ~/.granttap-term/handoff/ и открывает сплит. Хранилища сессий агентов не переписывает |
| open context | Открывает чат. context добавляет записанный контекст |
| accept ask safe except-push except-destructive full | Автоакцепт для этого меша и выбранного чата |
| pause | Ставит автоакцепт на паузу |
| permit ask edits bypass plan | Пишет режим в конфиг выбранного агента |
| model <имя> effort <уровень> | Пишет модель и усилие только выбранному агенту |
| image <путь> | Клеточный предпросмотр картинки |
| browse <файл или url> | Страница в сплите |
| history blob <путь> | Чтение git через Weavatrix |
| health roads health extern | Включает дороги и внешние полосы у этого меша |
| skill <имя> | Открывает SKILL.md |
| commit | git commit. Ничего не добавляет в индекс |
| push | git push без лишних флагов |
| fill | Раскрывает сплит или сворачивает его |
ask и safe не выполняют запись сразу. Первый Enter оставляет команду и пишет, что её нужно повторить. Второй Enter выполняет. То же при паузе. except-push, except-destructive и full выполняют permit, model, effort, commit и правку F4 сразу. push сразу проходит только на except-destructive и full. Отдельной разрушающей git-команды нет.
permit пишет Grok [ui] permission_mode, верхний approval_policy Codex и permissions.defaultMode в .claude/settings.local.json проекта. Файл ~/.claude/settings.json стол не переписывает. Модель и усилие Claude пишутся в настройки проекта. У Grok это [models] default и default_reasoning_effort.
Что стол показывает честно
Нет файла — строка no data. Файл есть, а живого вопроса нет — none. Вопросы Grok читаются из короткого хвоста сессии и из ожидания плана. Большие журналы Claude и Codex стол не сканирует, поэтому их вопросы в этой версии не появляются. Квоту стол не выдумывает: видны только уже записанные токены Claude и живой сессии Grok. Рабочий стол Claude и Codex не считается живым чатом CLI.
Связанные репозитории появляются только когда Weavatrix видит общие коммиты. Иначе строка Linked repos none.
