TeamWork — локальный Integration Hub для персональной работы с Jira и последующего подключения Slack, OneNote и других сервисов. Продукт построен вокруг лёгкого Go microkernel: ядро отвечает только за запуск, безопасность и взаимодействие модулей, а вся прикладная функциональность поставляется отдельными portable executable subprocess.
Текущая версия: 2.0.0-alpha.1.
- нативный запуск на macOS и Ubuntu без Python, Node.js, Docker и виртуальных окружений;
- отдельный локальный subprocess для каждого модуля;
- Unix Domain Socket JSON-RPC 2.0 с правами
0600и одноразовым IPC-токеном процесса; - обнаружение portable-модулей по manifest и автоматический restart после сбоя;
- capability router и durable event bus;
- SQLite/WAL для состояния ядра, событий и логов;
- уровни логирования
DEBUG,INFO,WARN,ERROR, фильтрация в UI и retention 48 часов; - системное хранилище секретов: macOS Keychain или Linux Secret Service;
- localhost web UI на
http://127.0.0.1:8090; - подключение нескольких Jira Cloud аккаунтов через browser-based OAuth;
- выбор нескольких Jira-проектов и полная постраничная синхронизация задач;
- общий список задач и отдельные вкладки проектов;
- группировка по спринтам: незавершённые по убыванию номера, затем backlog, затем завершённые;
- фильтры по статусу, исполнителю, автору, ключевым словам и локальным меткам;
- локальные комментарии и метки, сохраняемые между Jira-синхронизациями;
- создание, выбор, снятие и глобальное удаление локальных меток;
- включаемая группировка задач по локальным меткам;
- ссылки на Jira и CSV-экспорт текущего отфильтрованного списка;
- установка как пользовательского LaunchAgent или
systemd --userservice.
Slack, OneNote, workflow-связи и единый полнотекстовый/RAG-поиск входят в целевую архитектуру, но ещё не реализованы в текущем alpha-срезе.
Browser / local API clients
│ HTTP on 127.0.0.1
▼
┌─────────────────────────────────────────────┐
│ TeamWork Go Core │
│ HTTP shell · supervisor · capability router │
│ durable events · SQLite · secret broker │
└──────────────────────┬──────────────────────┘
│ Unix socket / NDJSON
┌────────────┼──────────────┐
▼ ▼ ▼
Project View Jira Activity / Echo
subprocess subprocess subprocesses
Основные правила:
- Модуль является автономным исполняемым файлом и запускается ядром как отдельный subprocess.
- Модули не импортируют код и не вызывают процессы друг друга напрямую.
- Вызовы проходят через именованные capabilities ядра.
- События доставляются как минимум один раз, поэтому обработчики должны быть идемпотентными.
- Секреты не хранятся в SQLite, manifest, исходном коде или state-файлах модулей.
- Новый модуль подключается размещением каталога с
module.jsonи бинарником нужной платформы.
Контракты: протокол модулей и JSON Schema manifest.
core/ Go microkernel и localhost HTTP shell
modules/
activity-go/ журнал демонстрационных событий
echo-go/ минимальный пример capability-модуля
jira-go/ Jira Cloud OAuth, проекты и синхронизация
project-view-go/ локальная модель задач и web UI
sdk/go/ Go runtime SDK для portable-модулей
specs/ protocol v1 и schema manifest
scripts/build.sh сборка текущей платформы
scripts/release.sh кроссплатформенные release-пакеты
start.sh локальный запуск
Для разработки нужен Go 1.26 или новее. Для запуска готового release-пакета Go и другие runtime-окружения не нужны.
Поддерживаемые цели:
- macOS arm64 и amd64;
- Linux arm64 и amd64.
На Linux для системного хранилища секретов нужен secret-tool и доступный Secret Service, например GNOME Keyring.
./scripts/build.sh
./start.shОткройте http://127.0.0.1:8090.
Если порт занят, остановите уже запущенный экземпляр или задайте другой адрес:
TEAMWORK_ADDRESS=127.0.0.1:8091 ./start.sh./core/bin/teamwork serve # запустить приложение
./core/bin/teamwork version # показать версию ядра
./core/bin/teamwork modules # показать обнаруженные модули
./core/bin/teamwork paths # показать системные пути
./core/bin/teamwork service-install # создать definition системного сервисаservice-install создаёт файл сервиса, но не активирует его автоматически.
macOS:
launchctl load ~/Library/LaunchAgents/com.teamwork.hub.plistUbuntu:
systemctl --user daemon-reload
systemctl --user enable --now teamwork.service- Запустите TeamWork и откройте раздел «Интеграции».
- Нажмите «Войти в Jira».
- Завершите авторизацию на официальной странице Atlassian.
- Выберите один или несколько доступных проектов.
- Запустите синхронизацию.
TeamWork использует официальный Atlassian Rovo MCP endpoint и OAuth 2.1 discovery, Dynamic Client Registration и PKCE. Пользователю не нужны Client ID, Client Secret, API token, пароль или cookies браузера. Callback принимается только локально:
http://127.0.0.1:8976/oauth/jira/callback
Организация Atlassian может потребовать разрешить Rovo MCP и localhost redirect в Admin Hub.
После синхронизации Jira connector передаёт Project View данные задач, автора, исполнителя, статус, ссылку и состояние спринта. Jira labels и Jira comments намеренно не импортируются: метки и комментарии TeamWork являются локальными пользовательскими данными.
Вкладка «Все задачи» объединяет выбранные Jira-проекты. Каждый проект также имеет собственную вкладку. Доступны live-фильтры с мультивыбором по статусу, исполнителю, автору и локальным меткам, а также поиск по ключевым словам.
Задачи сортируются по убыванию числовой части Jira-ключа: DO-100, DO-20, DO-9.
Подвкладка «По спринтам» группирует задачи в порядке:
- незавершённые спринты (
active,future) по убыванию номера; - backlog;
- завершённые спринты (
closed,completed) по убыванию номера.
- метки создаются и хранятся только в TeamWork;
- существующие метки предлагаются во время ввода;
- новый текст создаёт новую метку;
- крестик в карточке снимает метку с одной задачи;
- крестик в каталоге фильтра удаляет метку со всех задач после подтверждения;
- клик по метке включает соответствующий фильтр;
- группировку по меткам можно включать и отключать.
Локальные метки и комментарии сохраняются при последующих Jira-синхронизациях.
Кнопка «Экспорт CSV» выгружает текущий список с учётом выбранного проекта, поиска и фильтров. Файл содержит проект, ключ и название задачи, статус, исполнителя, автора, спринт, локальные метки и комментарии, а также ссылку Jira.
CSV формируется локально в браузере, кодируется в UTF-8 с BOM и экранирует потенциальные spreadsheet formulas.
Кнопка «Импорт Jira» предназначена для ручного импорта локального JSON snapshot. Обычная Jira-синхронизация выполняется кнопкой «Обновить» или из раздела интеграции.
Пути можно посмотреть командой:
./core/bin/teamwork pathsПо умолчанию на macOS данные находятся в:
~/Library/Application Support/TeamWork/
~/Library/Logs/TeamWork/
На Ubuntu используются XDG-каталоги:
~/.config/teamwork/
~/.local/share/teamwork/
~/.local/state/teamwork/
Для изолированного тестового запуска можно задать TEAMWORK_HOME. Каталог модулей переопределяется через TEAMWORK_MODULES_DIR, адрес HTTP — через TEAMWORK_ADDRESS.
curl -sS http://127.0.0.1:8090/api/health
curl -sS -X POST \
-H 'content-type: application/json' \
-d '{"payload":{"message":"hello"}}' \
http://127.0.0.1:8090/api/capabilities/example.echoHTTP API доступен только на loopback по умолчанию. Не публикуйте его во внешнюю сеть без отдельной аутентификации и reverse proxy.
modules/example/
module.json
bin/
darwin-arm64/example
darwin-amd64/example
linux-arm64/example
linux-amd64/example
Manifest объявляет идентификатор, версию протокола, исполняемые файлы, предоставляемые capabilities и event subscriptions. Ядро передаёт процессу:
TEAMWORK_CORE_SOCKET;TEAMWORK_MODULE_ID;TEAMWORK_MODULE_TOKEN;TEAMWORK_MODULE_DATA.
Модуль может быть написан на любом языке, если он выпускается как автономный executable и реализует protocol v1. Go SDK в sdk/go является референсной реализацией, а не обязательной зависимостью.
(cd core && go test ./... && go vet ./...)
(cd sdk/go && go test ./... && go vet ./...)
(cd modules/echo-go && go test ./... && go vet ./...)
(cd modules/activity-go && go test ./... && go vet ./...)
(cd modules/project-view-go && go test ./... && go vet ./...)
(cd modules/jira-go && go test ./... && go vet ./...)./scripts/build.sh # текущая платформа
./scripts/release.sh # macOS/Linux arm64/amd64 в dist/Артефакты core/bin/, modules/*/bin/ и dist/ не коммитятся.
О правилах хранения секретов, модели доверия localhost и сообщении об уязвимостях см. SECURITY.md.
См. CHANGELOG.md.
MIT © 2026 artBass-rip