local-kanban
v2.0.0-beta.15
Published
A local kanban board for working in tandem with Claude Code: the kb CLI plus a web board, with an optional GitHub mirror (issues + Projects v2)
Downloads
2,977
Maintainers
Readme
Вы планируете и принимаете работу, Claude берёт её из очереди, делает и отчитывается. Всё лежит в одном файле SQLite на вашем компьютере и управляется через kb — CLI, который тратит мало токенов Claude. GitHub — необязательное зеркало: пока вы его не включите, ничего с компьютера не уходит.
[!NOTE] 2.0 в бете, и именно её ставит
npm install -g local-kanban. Она каждый день работает на настоящих проектах. Доска обновляется на месте и сохраняет данные; остаться на последней 1.x —npm install -g [email protected]. Что-то сломалось? Заведите issue.
Быстрый старт
npm install -g local-kanban
local-kanban # мастер настройки: хватит Enter-Enter-Enter
local-kanban start # доска на http://localhost:3100Нужен Node.js 22 или новее на macOS или Linux. Подробности — в разделе Установка.
Возможности
- Лимиты в сайдбаре: пятичасовой и недельный лимиты подписки и расход токенов по каждой задаче.
- Зеркало на GitHub: задача — issue, проект — GitHub Project, в одну сторону и в фоне. Выключено, пока не настроите.
- Бэкапы: копия каждый день, копия перед каждой миграцией, и любую можно открыть второй доской рядом с живой.
- Ручные задачи: метка
noclaudeне пускает вашу работу в метрики Claude, и Claude такую задачу не возьмёт. - Связи, подзадачи, чек-листы, картинки в комментариях, поиск, горячие клавиши — и всё это Claude читает через
kb. - Русский и английский — по языку системы.
- HTTP API и поток событий для своих ботов и статистики: docs/API.md.
Как этим пользоваться
- Пишешь задачу в Бэклог проекта — достаточно заголовка, описание можно добавить позже.
- Перекладываешь в «Сделать», когда задача готова к работе. Эта колонка и есть очередь.
- Жмёшь ▶ на колонке «Сделать» («Запустить эти задачи в Claude»). Claude сразу начинает работу
прямо внутри доски: ничего не открывается, карточка показывает его экран на вкладке «Терминал», и на
его вопросы отвечаешь там же. Если на машине нет
tmux, доска открывает Claude в папке проекта — новую сессию в приложении Claude или Терминал сclaude; решает Настройки → Claude Code → Запуск задач. У отдельной карточки свой ▶ в шапке. Кнопка копирования рядом даёт тот же текст, чтобы вставить его куда удобно. Запущенные задачи сразу уходят в «Подготовку» — кроме приложения Claude: туда доска только кладёт промпт, отправляешь его ты, и в «Подготовку» задачи переводит сам Claude. - Дальше Claude ведёт задачу сам. Читает её, делает работу, по ходу пишет комментарии, коммитит и пушит, деплоит, если у проекта задан деплой-скилл, привязывает коммит к issue на GitHub, если включён синк, — и останавливается на «Проверяю». В «Готово» он не переводит ничего и никогда.
- Принимаешь ты. Смотришь, что получилось, и двигаешь карточку в «Готово» — или возвращаешь с замечанием. Это замечание Claude прочитает первым, когда возьмёт задачу снова. Пока Claude, которого запустила доска, ещё на месте и ждёт тебя, кнопка >_ рядом со стрелкой отправки комментария передаёт комментарий и ему — он продолжит в той же сессии. Принятая или отменённая задача закрывает этого Claude.
Приём, который сильно ускоряет. Дай «Проверяю» накопиться — десять, двадцать, тридцать карточек. Потом заведи на доске одну задачу: пройди всё в «Проверяю», попробуй сломать, что выдержало — переведи в «Готово». Claude разберёт всю колонку за один заход. Только запускай её в новом чате: сессия, которая только что писала этот код, — худший его проверяющий, потому что помнит, что хотела сделать, а не то, что получилось. Раздел «Claude проверить» в сайдбаре делает всё это одной кнопкой на проект: показывает, что лежит в «Проверяю», заводит такую задачу со списком внутри и запускает на неё свежий Claude — отчёт остаётся в карточке проверки.
Зачем
- Очередь для Claude, а не просто доска. Статусы повторяют реальный цикл:
бэклог → сделать → подготовка → делаю → деплою → проверяю → готово. Claude берёт следующую задачу черезkb take, работает и останавливается на «Проверяю» — принимает всегда человек. - Локально прежде всего. Всё живёт в одном SQLite-файле на твоей машине. GitHub-синк опционален и выключен, пока не настроишь.
- Честные метрики. Время считается только пока Claude реально работает; дашборд показывает streak, цикл задачи и что ждёт тебя.
Модель безопасности — прочитай сначала
Сервер слушает только 127.0.0.1, авторизации нет. Доска строго локальная: граница доверия — твоя машина. Никогда не выставляй порт наружу (никаких reverse proxy, 0.0.0.0, проброса портов). Сторонние интеграции запускаются на той же машине и ходят на 127.0.0.1 (см. docs/API.md).
Исключение одно — твой выключатель: «Настройки → Wi-Fi» открывает отдельный вход в локальной сети (порт + 10, KB_SHARE_PORT) для тех, кому ты покажешь QR-код. Пускает только ключ: он в ссылке QR-кода, а в браузере без ссылки его можно ввести руками. С ним гость может на доске всё то же, что и ты, — в том числе говорить с Claude на твоём компьютере. Соединение идёт простым HTTP: ключ не пускает посторонних, но не шифрует трафик, поэтому в сети с чужими людьми вход выключай. По умолчанию он закрыт; выключатель закрывает вход, а новый ключ выкидывает всех гостей.
Доска не хранит доступов. У проекта можно указать ssh-хост, куда он выкатывается, но ни ключ, ни
пароль здесь не вводятся: доска просто запускает ssh <хост>, а кто ты, на каком порту и с каким
ключом — решает твой собственный ~/.ssh/config, тот же файл, которым пользуется терминал. Пароль
не подойдёт вовсе: доска подключается без запросов, значит нужен ключ. Проверка одной строкой:
работает ssh <хост> в терминале — заработает и здесь.
Требования
- Node.js ≥ 22 (macOS или Linux) — у большинства стоит 24 LTS или новее
- Опционально, только для GitHub-синка:
ghCLI с правомproject:gh auth login && gh auth refresh -s project - Опционально, чтобы Claude запускался прямо внутри доски: Claude Code
(
claude) иtmux(brew install tmuxна macOS)
Установка
npm install -g local-kanban
local-kanban # мастер настройки
local-kanban start # доска на http://localhost:3100Мастер спросит порт, папку данных, нужен ли GitHub-синк и ставить ли в ~/.claude/skills два скилла для Claude Code — скилл самой доски и деплой-скилл. У каждого вопроса есть ответ по умолчанию, поэтому Enter-Enter-Enter достаточно. Он же создаст ecosystem.config.cjs для автозапуска через pm2.
У local-kanban start есть --port <N> и --data <путь>. Данные по умолчанию лежат в ~/.local-kanban, вне каталога пакета, поэтому обновление пакета никогда не трогает доску.
Из исходников:
git clone <адрес-репозитория> local-kanban && cd local-kanban
npm install
npx local-kanban # мастер настройки (необязательно)
npm start # доска на http://localhost:3100Команда kb глобально: npm link (или npm install -g .).
Первый запуск покажет пустой дашборд с предложением создать демо-проект — один клик создаёт, один удаляет.
Переезжаете с vibe-kanban? Его «Export data» даёт zip; local-kanban import vibe-kanban-export-<дата>.zip (или «Настройки → Бэкапы → Перенести») кладёт на доску его проекты, задачи, родителей (связью «подзадача») и картинки. Статусы встают в колонки доски — «In progress» в «Сделать», свой статус в «Бэклог», с пометкой в описании; перенесённая однажды задача в следующий раз пропускается. --dry-run только считает.
Настройку может довести сам Claude
На последнем шаге мастера первого запуска показывается готовый промпт (на языке доски). Вставь его
в Claude Code — он проверит, что работает kb, спросит, нужно ли зеркало в GitHub, заведёт первые
проекты с их путями и деплоем и покажет результат. Тот же промпт лежит в Настройки → О доске,
чтобы к нему можно было вернуться.
Скиллы Claude Code
В skills/ лежат два скилла:
skills/kanban— учит Claude рабочему циклу задач (kb take→ работа →kb review);skills/deploy— универсальный деплой от данных реестра проектов (kb info).
Установка — симлинк или копия:
ln -s "$(pwd)/skills/kanban" ~/.claude/skills/kanban
ln -s "$(pwd)/skills/deploy" ~/.claude/skills/deployДругие ИИ-клиенты через MCP (опционально)
Claude Code ведёт доску через kb. Для Claude Desktop, Cursor и других MCP-клиентов в пакете есть kb-mcp — MCP-сервер по stdio, тонкий слой над тем же API, только на 127.0.0.1. Инструменты: list_projects, list_tasks, get_task, create_task, update_task («Готово» и «Отменено» остаются твоим словом на доске), add_comment, start_task (Claude Code внутри доски на этой задаче). В настройках клиента:
{ "mcpServers": { "kanban": { "command": "kb-mcp", "env": { "KB_URL": "http://127.0.0.1:3100" } } } }Подключить доску к Claude Code (опционально)
Одна команда настраивает оба пункта ниже — лимиты в сайдбаре и ответы Claude из карточки:
local-kanban hooks install # из клона: node bin/local-kanban hooks installОна показывает, что допишет в settings.json каталога Claude, и спрашивает
разрешения; твои хуки и строка состояния остаются, прежний файл сохраняется в резервных копиях доски (где они,
команда спрашивает у запущенной доски; доска не запущена — назови её каталог данных: --data <каталог>), а
local-kanban hooks uninstall снимает ровно то, что добавила. Тот же шаг предлагает мастер установки.
Каталог Claude — ~/.claude, или $CLAUDE_CONFIG_DIR, если Claude Code перенесён туда. KB_CLAUDE_DIR важнее
обоих — и для доски, и для local-kanban hooks: доска читает там сессии, переписки и скиллы Claude, а записи
ложатся в его settings.json. Задай её, если доска работает в другом окружении, чем твой терминал (например под
pm2), а каталог Claude Code — не ~/.claude: иначе записи лягут в файл, который твой Claude Code не читает.
На доске то же делает кнопка в Настройки → Claude Code — после того как покажет, что именно запишет, — и там же
видно, что ещё доске нужно от Claude Code на этом компьютере: программа claude, tmux, приложение Claude, скилл
доски и правда ли работают строка состояния и хук. У каждого недостающего — как это исправить.
claude доска ищет на своём PATH, там, куда его кладут установщики, и — на Mac — внутри приложения Claude, у которого
своя копия Claude Code; если нет нигде, раздел даёт команду установки одной строкой.
Если досок на компьютере две, подключена может быть только одна: раздел называет доску, которая держит подключение,
а Подключить спрашивает, прежде чем его перехватить.
Выключатели Показывать на доске там же прячут расход Claude (блок на дашборде и строку в меню ⋯ карточки) и подвал
с лимитами, если они тебе не нужны — например, когда работаешь в приложении Claude и подвал всегда пишет
«нет данных».
Что именно она добавляет, если хочешь руками:
Лимиты в сайдбаре
Внизу сайдбара видно, сколько израсходовано из лимитов подписки Claude на 5 часов и на неделю. Claude Code
отдаёт эти цифры только команде строки состояния, поэтому
kb statusline берёт её JSON, отправляет лимиты доске и передаёт JSON дальше без изменений. Поставь её перед
своей строкой состояния в ~/.claude/settings.json:
"statusLine": { "type": "command", "command": "kb statusline | node ~/.claude/my-statusline.js" }Если твоя строка состояния — не одна команда (cd … && …, input=$(cat); …), пусть её запишет
local-kanban hooks install: она берёт твою команду в скобки, чтобы JSON прочла вся она, и передаёт JSON дальше,
даже когда kb не запускается.
Своей строки состояния нет — kb statusline --line печатает короткую: 5h 24% · 7d 41% · ctx 8%.
Подвал показывает то, что прислала последняя сессия: перешёл в другой аккаунт Claude — видишь его цифры.
Лимиты приходят подписчикам Pro и Max после первого ответа Claude в сессии. У приложения Claude строки
состояния нет, поэтому доска, с которой работают только из приложения, показывает «нет данных».
Ответы Claude из карточки
Когда Claude Code собирается что-то у тебя спросить — разрешение, вопрос, одобрение плана, — доска может
показать это в карточке задачи и принять ответ там. Окно Claude всё это время остаётся рабочим: чей ответ
первый, тот и действует. Добавь хук PermissionRequest в ~/.claude/settings.json:
"hooks": { "PermissionRequest": [ { "matcher": "*", "hooks": [ { "type": "command", "command": "command -v kb >/dev/null && exec kb hook permission || true", "timeout": 1800 } ] } ] }Хук сразу уступает, если доска не запущена или сессия не работает ни над одной задачей доски.
Проверка вокруг kb держит Claude Code в тишине, когда доски уже нет (хук, который не запускается, — это
сообщение об ошибке на каждом запросе разрешения), а exec ставит kb на место оболочки, так что ответ в окне
самого Claude останавливает и kb. Каждый ответ с
доски записывается в историю задачи; в GitHub он не уходит.
Ответы доска принимает со своей страницы: страница чужого сайта ответить не может. Программа на твоём
компьютере — может: всё, что достаёт до порта доски, увидит ждущие запросы и ответит на них, в том числе сам
Claude, если правила разрешений дают ему запускать curl без спроса. Пока доска подключена, не разрешай Claude
сетевые команды к доске без спроса.
GitHub-синк (опционально)
Укажи owner и репозиторий для issues в Настройки → Синхронизация (или env KB_GH_OWNER / KB_GH_REPO). Без них доска работает в local-only режиме: без очереди и предупреждений. С ними каждая задача становится issue, а каждый проект получает GitHub Project kb: <slug> с теми же колонками. Синк односторонний (доска → GitHub), фоновый.
Issues всей доски лежат в ОДНОМ репозитории, а не по одному на проект, и создать его надо самому до того, как заполнять поля. Сделай его приватным: заголовки, описания и комментарии уезжают туда целиком, и это единственная функция, которая вообще что-то отправляет с твоей машины. gh должен быть авторизован со scope project (gh auth login && gh auth refresh -s project) - без него issue создастся, а карточка в Projects не появится, и понять причину будет непросто.
Обновление
Доска сама замечает новую версию и предлагает кнопку в Настройках → О доске: она ставит обновление тем способом, каким доска установлена, и под менеджером процессов перезапускается и перечитывает страницу сама. Если запускали руками — скажет, что обновление на месте, и подождёт, пока её запустят заново. Скиллы Claude Code, которые скопировала установка, едут вместе с ней: копия, совпадающая с версией доски, обновится, уже отличающаяся останется как есть, а Настройки → Claude Code скажут, если скилл доски — не её версия; Настройки → Скиллы возьмут версию доски одной кнопкой, прежний файл останется в бэкапах.
Руками. Установка из npm:
npm install -g local-kanban@latest
local-kanban skills # обновить скиллы Claude Code — они копия, а не ссылка; заменённый файл остаётся в <данные>/backups/skills
pm2 restart kanban # или останови `local-kanban start` и запусти заново: работающая доска ещё на старом кодеКлон репозитория:
npm run update # git pull + npm install + pm2 restart (если применимо)Обновления не трогают данные: data/ в .gitignore, миграции схемы прогоняются на старте автоматически — со снапшотом до миграции в data/backups/pre-migrate/.
Откат: останови сервер, восстанови свежий файл из data/backups/ (суточные) или data/backups/pre-migrate/ поверх data/kanban.db, затем git checkout <предыдущий тег> и запусти снова.
Релизы живут в main (с тегами); ежедневная разработка — в dev. Бета выходит так же, как релиз, поэтому latest и кнопка обновления приносят и её. Вернуться назад: npm install -g [email protected].
Как убрать доску
Сначала отключи её от Claude Code: Настройки → Claude Code → Отключить или local-kanban hooks uninstall. Если доска остановлена, команда попросит её папку данных — туда она кладёт копию settings.json:
local-kanban hooks uninstall --data <папка данных>.
Потом npm uninstall -g local-kanban (или удали клон) и, если больше не нужны, папку данных (по умолчанию
~/.local-kanban) и скиллы в ~/.claude/skills/kanban и ~/.claude/skills/deploy.
Удалил, не отключив? Claude Code работает и молчит — хук проверяет, что доска на месте, — но две записи остаются
в ~/.claude/settings.json, а строка состояния, которую печатала сама доска, становится пустой. Убери их руками:
хук PermissionRequest, в команде которого есть kb hook permission, и из statusLine часть доски перед твоей
командой — строку { … kb statusline 2>/dev/null || cat; } | { и закрывающую } — или весь statusLine, если
его команда — просто … kb statusline --line.
Переменные окружения
| Переменная | Дефолт | Смысл |
|---|---|---|
| PORT | 3100 | HTTP-порт (привязан к 127.0.0.1) |
| KB_DATA_DIR | ./data | папка данных (SQLite, вложения, бэкапы) |
| KB_LOCAL_ROOT | ~/claude-projects | корень локальных проектов-папок |
| KB_URL | http://127.0.0.1:3100 | адрес доски для CLI kb |
| KB_GH_OWNER / KB_GH_REPO | — | цель GitHub-синка; пусто = синк выключен (можно задать и в Настройках) |
| KB_PANEL_URL | — | свой HTTP-источник статусов сервисов; пусто = локальный pm2 jlist |
| KB_PANEL_INFO | — | опциональный info.json внешней панели для синка категорий |
| KB_SSE_MAX | 20 | потолок одновременных SSE-соединений |
| KB_SHARE_PORT | PORT + 10 | порт входа по Wi-Fi («Настройки → Wi-Fi»), закрыт, пока не включишь |
| KB_SKILLS_EXTRA | — | дополнительные корни скиллов через : |
| KB_GH_BIN | — | путь к gh, если он лежит не в обычном месте (Homebrew, /usr/bin, ~/.local/bin) |
| KB_CLAUDE_DIR | $CLAUDE_CONFIG_DIR, иначе ~/.claude | каталог Claude Code: доска читает там сессии, переписки и скиллы, а local-kanban hooks и «Настройки → Claude Code» пишут его settings.json; важнее CLAUDE_CONFIG_DIR |
Старые имена PANEL_URL и PANEL_INFO (без префикса) продолжают работать как запасные.
Метрики и метка noclaude
Задачи, сделанные руками (без Claude), помечаются меткой noclaude — они считаются на дашборде отдельно и не подмешиваются в метрики Claude (время работы, цикл, доведено %), которые иначе исказились бы нулевым временем. Метка необязательна, можно ставить позже. Ручным задачам разрешён прямой переход в «Проверяю»/«Готово».
Расширение
Полный HTTP API и SSE-поток событий — официальная точка расширения: боты, статистика и интеграции пишутся отдельными программами, без плагинов внутри страницы. См. docs/API.md.
Разработка
node --test # БД изолируется через KB_DATA_DIRДев-окружение, флоу веток и правило миграций — в CONTRIBUTING.md. Архитектура — в ARCHITECTURE.md, что менялось между версиями — в CHANGELOG.md.
Язык интерфейса
Исходный язык интерфейса — английский, русский приходит переводом. Доска следует языку системы и переключается в Настройки → Основные; строка без перевода остаётся английской, а не утекает в чужую локаль.
Использование в работе
Доска под лицензией MIT и бесплатна для всех: ничего не отключено и нечего активировать. Если она зарабатывает тебе деньги — в компании или на платных заказах — $12 в год за человека помогают её поддерживать. Это просьба, а не правило: docs/COMMERCIAL.md.
Планы
Не обещания — направление, в котором проект движется:
- Больше языков интерфейса. Английский и русский уже есть. Словарь лежит в одном файле, так что перевод — это пул-реквест, а не проект.
- Работа с Codex так же, как сейчас с Claude Code. CLI
kbи модель статусов не привязаны к Claude — привязаны только скиллы. - Плагины по-честному — манифест с заявленными правами и изолированный фрейм, а не галочка «доверяю». Плагин, который может читать твои задачи и ходить в сеть, обязан сказать об этом до запуска, а не после.
- Доска на команду — для начала в пределах одной локальной сети и без превращения локального инструмента в сервис, которому нужны аккаунты, сервер и кто-то, кто его поддерживает.
- Подключение CLI прямо в доску, чтобы агентом можно было управлять из карточки, а не из соседнего окна терминала.
И самое дальнее: устроиться на работу мечты в Anthropic и сделать это для всех пользователей.
Лицензия
MIT.
