Skip to main content
Glama

Lattice

Бэклог — это плоский список, который притворяется планом.

Lattice выводит граф зависимостей, скрытый в ваших GitHub issues, и отдаёт получившееся расписание кодинг-агентам через MCP — так один дорогой проход рассуждений становится планировщиком для каждого последующего дешёвого запуска агента.

Он работает сам по себе. Его запускают события issues и расписание; никто ничего не нажимает.

Он никогда не пишет в GitHub. Issues — это источник данных, а не хранилище данных.

Microsoft Hackathon 2026 · Задача: Совместная работа с помощью инструментов планирования и отслеживания GitHub в эпоху агентов


Проблема

Issues зависят друг от друга. API должен существовать до того, как его начнёт потреблять UI; миграция схемы — до запроса; контракт типов — до четырёх модулей, которые его импортируют. Люди держат эту упорядоченность в голове, и она никогда не фиксируется до конца.

Это было терпимо, когда следующую задачу выбирал человек. Оно перестаёт быть терпимо, когда ваш тимейт — агент:

  • Агент с плоским списоком деleет не работу, или в незном порядке — пишет фронт для эндпoint, которого ещё нет, и лузльтат оказывется мусором, к камери бы ни была модell.

  • Каждый зауск агента заново вычislimit Одну и ту же упорядоченость с нуля. Эта триажная дчит? — самая дорогая часть запроса, повторяемой N раз и каждый раз выброшенная.

  • Ничто не указывает, что можно безопасно запускать в параллель, — а это и есть весь смысл иметь больше одного агента.

У GitHub уже есть модель данных для этого, и она пустая. Зависимости issues (blocked_by / blocking) в 2025 году стали Generally Available с полной поддержкой REST, GraphQL и gh. Почти никто их не заполняя, потому что это делается вручную и попарно — человеческий труд O(n²) для выгоды, которой никто в отдельности не чувствует. А там, где они заполнены, GitHub показывает их плоским текстовым списком; гр-представления так и не появилось.

Итак: схема существует, данных нет, представления нет.

Related MCP server: MCP GitHub Project Manager

Что делает Lattice

  GitHub (read only)
  issues · blocked_by · sub-issues
             │
             ▼
  ┌──────────────────────────────────────┐
  │  BACKEND                             │
  │   inference ──► the full graph       │
  │                      │               │
  │        REST API ◄────┴────► MCP      │
  └──────────┬─────────────────┬─────────┘
             │ REST            │ MCP
             ▼                 ▼
     interactive graph    coding agents
     (human: what's next)  (agent: what's next,
                            what's parallel, claim)

Единственный архитектурный принцип: GitHub — это источник данных, а не хранилище. Lattice при каждом запуске читает issues, нативные blocked_by и иерархию подзадачу и не записывает ничего — ни зависимостей, ни комментариев, ни меток.

Тем самым система неразрушающая по построению — именно это даёт ей право работать без присмотра. Нет автоматического писателя, который мог бы испортить общий репозиторий, и нет логики обрезки, которая могла бы удалить зависимость, внесённую вручную. Худшее, что может сделать неверный вывод, — перепутать порядок наших же рекомендаций до следующего запуска.

Путь записи устроен в обратную сторону: люди пишут, Lattice читает. Тот, кто хочет переопределить граф, редактирует blocked_by на GitHub, и следующий запуск считает это источником истины, которому модель не может противоречить.

Почему это отвечает на вызов

Хакатон спрашивает: „на что похожа хорошая совместная работа, когда часть вашей команды — не человек?“

Координация между человеком и не-человеком и есть планирование — в планировщик, которому нужен человек для утверждения каждого решения, это потребнее планировщик, а очередь с лишними шагами.

Lattice поддерживает порядок сам, непрерывно, и оба типа тиммейтов читают один и тот же граф. Агенты не просто поглощают его: агент, который натыкается на неучтённый блокер, сообщает об этом — и граф становится точнее для того, кто спросит следующим.

Общее рабочее пространство улучшатся, когда кто-то в нём работает. Люди остаются под контролем, не перекрывая ему путь, а исправляя его — закрепляя ребро, подавляя его или просто правя blocked_by на GitHub, что следующая выборка воспримет как истину.

Статус

Работает по всему циклу. Проверено на собственном бэклоге из 54 issues: один запрос к модели дал 63 рёбра-кандидата, 40 прошли валидацию, 16 стали блокирующими, в 3 волны.

Создано: pipeline, хранилище, REST API, MCP-сервер, интерактивный граф и пауза агента. Пока не создано: запланированное GitHub Action, фикстуры DEMO_MODE, деплой.

Быстрый старт

Ни базы данных, ни GitHub-токена для знакомства не нужно: хранилище работает на PGlite (это настоящий Postgres, встроенный), а gh auth token используется автоматически, если GITHUB_TOKEN не задан.

npm install
npm run build          # types + backend (tsc) + web (next build)
npm test               # 11 graph unit tests, then writes artifacts/graph.json

Запуск

Два терминала. Бэкенд работает скомпилированным — на этом пути нет нативных бинарник, и он не падает:

# terminal 1
npm run build && npm start -w @lattice/backend      # :3001

# terminal 2
npm run dev -w @lattice/web                          # :3000

Откройте http://localhost:3000, вставьте URL любого публичного GitHub-репозитория — он будет проанализирован. Репозитории, которые вы уже проанализировали, перечислены на той же странице.

npm run dev (оба сервиса с hot reloadount: uses tsx. Если он падает с The package "@esbuild/darwin-arm64" could not be found, значито работает так (npm) уронил необязательный бинарник — rm -rf node_modules package-lock.json && npm install --include=optional это исправляет. Скомпилированный путь выше обходит эту проблему полностью.

Проанализировать репозиторий

Нужен ключ OpenRouter. Скопируйте .env.example в .env и задайте OPENROUTER_API_KEY, LATTICE_OWNER, LATTICE_REPO.

npm run analyze        # ~1 model request for a 50-issue backlog

Расчитывайте на несколько минут: Ox Alpha — модель рассуждений, и весь бэклог уходит за один вызов. Повторные запуски мгновенны: ответы кэшируются по хэшну промпта, что также бережёт квоtalбеспакуппавший тариф 50 обращений в день.

Команда

Назначение

npm run build

Собирает все три пакета

npm test

Блочные тесты графа, затем пишет artifacts/graph.json и schedule.json

npm run analyze

Один прогон конвейера для LATTICE_OWNER/LATTICE_REPO

npm run agent -- --agents 3

Три агента берут работу по MCP; проверяет атомарнось аренды

npm start -w @lattice/backend

Скомпилированный бэкенд на :3001

npm run dev -w @lattice/web

Веб-приложение на :3000

Задайте DATABASE_URL, чтобы использовать хостированный Postgres (Neon) вместо встроенного.

Останавливайте бэкенд через Ctrl-C, а не kill -9

PGlite пишет в настоящий каталог данных Postgres. Жёсткое killing убиение в середине записи ломает мою — а warehouse and vehicle is missing. Сервер получат закрывает базу данных сна на SIGINT/SIGTERM, поэтому Ctrl-C — безопасный патelong. Если хранилище всё же испортилось, npm run import -w @lattice/backend восстановит букинящий новую граф из artifacts/graph.json — без запроса к модели и без GitHub-токена.

Проверить без браузера

curl localhost:3001/api/health
curl "localhost:3001/api/graph" | jq '.stats'
curl -X POST localhost:3001/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Использование MCP-сервера

Бэкенд поднимает MCP over Streamable HTTP на /mcp, вместе с REST API. Запустите бэкенд — он и домуль, отдельный процесс не has not needed.

npm run build && npm start -w @lattice/backend    # :3001, MCP at /mcp

Claude Code

claude mcp add --scope local --transport http lattice http://localhost:3001/mcp
claude mcp list          # lattice: ... - ✔ Connected

Зафиксованный в репозитории .mcp.json делает то же самое для каждого, кто склонировал репозиторий — поэтому claude сам запустит сервер.

Агент Copilot для кода

Облачному агенту Copilot нужен палец URLpublic, поэтому сначала разверните бэкенд (issue #52). О полном проходение — с переходом на тот, как создать хранилище для другого? репозиторий для эго Lattice: docs/13-using-lattice-mcp.md.

Аутентификация полностью отклюена, когда COPILOT_MCP_LATTICE_TOKEN не задан; и это даёт локальную настройку без конфигфайла. Если вы подставляете бек сами, задайте его до доступа к бэкенду.

Любой другой клиент

npx @modelcontextprotocol/inspector    # then connect to http://localhost:3001/mcp

Два направления

Top-down — «что теперь в работу?»

list_ready_work        issues nothing is blocking, ranked by how much they unblock
claim_next_issue       take one atomically, with a briefing; two agents never collide
report_progress        returns what your work just unblocked

Bottom-up — „хочу выкатить #6, что должно появиться раньше?“

plan_for_issue         the whole prerequisite chain, in build order
get_issue_context      blockers, dependents, and what they need from you
explain_dependency     why an edge exists, with the quote it was inferred from
report_dependency      a blocker you discovered; enters the graph for everyone

Укажите агенту цель, и он получит упорядоченный план:

plan_for_issue(6)
  2 issue(s) must land before #6, in 2 step(s).
  step 1: #3  Put Adyen behind a PaymentProvider interface
  step 2: #4  Checkout session endpoint returns a provider-agnostic session
  then    #6  Native checkout in the app

Всё внутри шага независимо, поэтому вы можете выполнять его в любом порядке или раздать сразу несколькимся агентам. Panel of issue in веб-прилож «the's shows» Приложение shows same plan and Copy button, which sends it to the agent in the form of a prompt.

Машиночитаемый граф

npm test записывает artifacts/graph.json и artifacts/schedule.json. Это позволяет сопоставлять расписание через diff: измените весаъ breaking цикла, и сдвиг критической линии появляется в обзре с читаемым diff, а не на лучший sense that "и подсознние" it is different. Это также самый дешёвый интеграционный тест в репозитории: если файл корректный и ациклический, то собрано всё чистое ядру.

Общая архитектура

Two services are in one monorepo based on npm workspaces:

  • apps/backend — reads GitHub, executes inference, owns storage, serving REST API and MCP server.

  • apps/web — интерактивная визуализация. It only holds the address of the backend and API token — and nota total: no design database, no token GitHub, no model key.

См. docs/01-architecture.md.

Документация

Документ

Что внутри

docs/00-context.md

Контекст хакатона, критерии оценки, требования к загрузу

docs/01-architecture.md

Компоненты, поток данных, где хранетсяное состояние, выбор стека

docs/02-inference-pipeline.md

Пять уровней вывода, LLM-промпт, защита от галлюцинаций

docs/03-graph-scheduling.md

Тarpян, разрыв циклов, волны, критичный путь, радиус поражения

docs/04-mcp-surface.md

Семь MCP-инструментов, используются агентами

docs/06-workstreams.md

Пять равных веток запараллеливания для команды

docs/07-demo-script.md

Двухминутное демо пошагово

docs/08-risks.md

Честные слабые места, фолбэки, стоп-лоссы

docs/09-github-api-notes.md

Проверенные эндпоинты, заголовки и ловушки для всего миpа

docs/10-model-provider.md

OpenRouter + Ox Alpha: настройках, осторожно схемой, лимиты, пространенности

docs/11-graph-store.md

Где persistgraph, и три кэша-слоя

docs/12-rest-api.md

REST-контракт, который потребляет веб-приложение

docs/13-using-lattice-mcp.md

Подключения Lattice к другому репозиторию GitHub Copilot App

AGENTS.md

Как агентам работать в этом репозитории

Быстрый старт

Пока нет — каркас это issue #1. Этот раздел — критерий оценки «сможет ли кто-нибудь другой запустить его по вашему README?”, поэтому его готовят как следует перед подачей. Цель: от клонирования к графу максимум за 5 команд, плюс путь с DEMO_MODE=1 и фикстурами, для которых не требуется никаких токенов.

Лицензия

MITдела

Maintenance

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Gives AI coding agents native tools to pull their next prioritized, unblocked task with a full briefing (description, acceptance criteria, context files, conventions), comment and tick off criteria with evidence, ask the human decision-maker questions, and submit structured handoffs for review. It lets agents plan epics and sprints, report checks, create new tasks, and release work with checkpoints — all against a self-hosted board rather than files in the repo.
    6 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Turns GitHub Projects v2 into an agentic task backbone where AI coding agents register, atomically claim and track work, heartbeat, review each other, and stay within token budgets, while humans get AI-assisted PRD generation, sprint planning, triage, and PRD-to-issue pipelines. All state is stored natively in GitHub issues, project fields, and comments, so no external infrastructure is required.
    301 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI coding agents to register, atomically claim tasks, heartbeat, and review each other's work while turning GitHub Projects v2 into an autonomous task backbone. Also provides AI-powered PRD generation, sprint planning, issue triage, and a PRD-to-issues pipeline backed entirely by GitHub-native storage.
    301 npm
    MIT