Skip to main content
Glama

Lattice

バックログは、プランであるかのような顔をした、ただのフラットリストにすぎない。

Lattice は、GitHub の Issue に隠された依存関係グラフを推論し、その結果として得られたスケジュールを MCP 経由でコーディングエージェントに提供する。つまり、1 回の高コストな推論パスが、それ以降の低コストなエージェント実行すべてのスケジューラになる。

この仕組みは自動で動く。Issue イベントとスケジュールがトリガーになり、誰かが何かをクリックする必要はない。

GitHub への書き込みは一切行われない。 Issue はデータソースであって、データストアではない。

Microsoft Hackathon 2026 · Challenge: Collaboration using GitHub Planning & Tracking Tools in the Agentic Age


問題

Issue は相互に依存している。API は UI がそれを消費する前に、スキーママイグレーションはクエリの前に、型契約はそれをインポートする 4 つのモノの前に存在していなければならない。人間はその順序を頭の中に抱えているだけで、書き出されることは一度もない。

それが許容されていたのは、人間が次のチケットを選んでいた時代だ。チームメイトがエージェントになった瞬間、それはもう許容できなくなる。

  • フラットなバックログを渡されたエージェントは、誤った順序で誤った作業をやってしまう。まだ存在しないエンドポイントに対してフロントエンドを書き、発揮の良いモデルでも、その出力はただのゴミになる。

  • エージェントを実行するたびに、同じ順序をゼロから導出し直す。その振り分け(トリアージ)はリクエストの中で最も高コストな部分なのに、N 回繰り返されて毎回捨てられている。

  • 何が並行実行しても安全かを示す情報がどこにもない。これは、複数のエージェントを並べる意味そのものだ。

GitHub にはこのためのデータモデルがすでにあり、しかしそれは空だ。 Issue の依存関係(blocked_by / blocking)は 2025 年に GA となったもので、REST・GraphQL・gh をフルサポートしている。これを記入する人間はほとんどいない。なぜなら記入は手作業で、しかもペアごとに行う必要があり、O(n²) コストの人的作業に対して、その恩恵が個々人に実感されないからだ。それに、仮に 記入された としても、GitHub はそれをフラットなテキストリストとして表示するだけで、グラフビューはまだ存在しない。

つまり、スキーマは存在するが、データは空であり、ビューも存在しない

Related MCP server: agentic-sdlc-mcp

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)

アーキテクチャ上のコミットメントは 1 つだけです。GitHub はデータソースであり、データストアではありません。 Lattice は実行のたびに Issue、ネイティブの blocked_by、サブイシューの階層を読み取ることだけを行い、何も書き戻しません。依存関係も、コメントも、ラベルも、です。

これにより、システムは構造として非破壊であり、それが無監視で動作する資格を得ています。共有リポジトリを壊してしまう自動書き込みも、誰かが手で記録した依存関係を削除したしまうプルーニングも存在しないからです。推論が悪かったときに起こる最悪のケースとは、次回の実行で修正されるまでの間、われわれの提案順序がすれ違ってしまうだけのことです。

書き込み経路は逆向きです。人間が書き込み、Lattice が読み取る。 グラフに上書きしたい人は、GitHub の blocked_by を編集するだけで良く、次回の実行ではそれを、モデルが覆すことのできない「正解(ground truth)」として扱います。

なぜこれが課題の答えなのか

ハッカソンの問いかけはこうです: 「チームの一部が人間ではないとき、本当にコラボレーションとは何か?」

人間と人間ではないチームメイトのあいだの調整、それはスケジューリングです。そして、決断の置かに人間の承認を必要とするスケジューラは、スケジューラではありません。それは、余計な手間が増えただけのキューです。

そこで Lattice は、順序を自律的かつ継続的に維持し、両方のチームメイトがどちらも同じグラフから読み取れるようにします。エージェントはそれを消費するだけではなく、まだ記録されていないブロッカーに当たったエージェントはそのことを報告をかえして、グラフは次の依頼者にとってさらに正確で使えます。

共有ワークスペースは、誰かが使うほど改善される。人間はグラフの前に立って管理してるわけではなく、むしろ修正することでコントロールを維持します。エッジを固定する、エッジを抑制する、あるいは GitHub で blocked_by を編集する、だけです。次の実行はそれを正解として拾い上げます。

ステータス

エンドツーエンドで動作しています。自分自身の 54 件の Issue バックログで試しの解析をおこなったたところ、モデルリクエスト一回で 63 の候補エッジが得られ、40 がバリデーションを終え、16 がブロッキングとなり、合計 3 つのウェーブで実行されました。

既存:パイプライン、ストア、REST API、MCP サーバー、対話的なグラフ、エージェントのループが。 未実装:統合的な GitHub Action、DEMO_MODE のフィクスチャ、デプロイ。

クイックスタート

外を眺めるのにデータベースも GitHub トークンも不要。ストアは PGlite(組み込み型の本物の Postgres)が備わっていて、GITHUB_TOKEN が未設定なら gh auth token が自動的に使われます。

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

起動する

ターミナルは 2 つ必要です。バックエンドは コンパイル済み のものを使い、そのパスにはネイティブバイナリビルドが含まれておらず、それは問題にならない:

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

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

http://localhost:3000 を開いて、公開の GitHub リポジトリの URL を張り付けてください。すると解析が実行です。解析済みのリポジトリは、同じページで一覧になります。

npm run dev(両サービスをホットリロード付き)は 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_KEYLATTICE_OWNERLATTICE_REPO を設定してください。

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

これには数分かかると想定してください:OX alpha は推論専用のモデルで、バックログ全体を 1 回の呼び出しで処理します。再実行は即座に終わるのです。応答はプロンプトハッシュでキャッシュされ、これにより 1 日 50 リクエストのフリーティア枠も守られます。

Command(コマンド)

実行される事柄

npm run build

3 つのパッケージをすべてビルドする

npm test

グラフの単体テストを実行し、artifacts/graph.jsonschedule.json をだす

npm run analyze

LATTICE_OWNER/LATTICE_REPO に対してパイプラインを一回実行します

npm run agent -- --agents 3

エージェント 3 つが MCP を介した作業を要求し、リースのアトミック性を検証

npm start -w @lattice/backend

コンパイル済みバックエンドを :3001 で起動

npm run dev -w @lattice/web

Web アプリを :3000 で起動

DATABASE_URL を設定すれば、組み込みではなくホスト Postgres(Neon)を使用できます。

バックステンドは kill -9 ではなく Ctrl-C で止めてください

PGlite は実際の Postgres のデータディレクトリへ書き込みます。書き込み途中に強制終了すると破損し、ストアが失われます。サーバーは SIGINT/SIGTERM でデータベースを閉じるため、Ctrl-C であれば安全です。しっかり壊れてしまったなら、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 サーバの利用

バックエンドは REST API に加えて、Streamable HTTP の /mcp 上で MCP を提供します。バックエンドを起動すればもうそちらで使えるので、あとは別のプロセスはありません。

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 coding agent

Copilot のクラウドエージェントは パブリック URL が必要なので、バックエンドをデプロイしてください(issue #52)。Lattice インスタンスに対して別のリポジトリを設定込みの完全な手順は docs/13-using-lattice-mcp.mdにあります。

COPILOT_MCP_LATTICE_TOKEN が設定されていない間は認証は完全に無効となり、これによりローカル運用が設定不要です。バックエンドを外部公開する際には、すでに説明した値を必ず手に入れて設定してください。

他のクライアント

これには MCP Streamable HTTP が使えます。curl でも、SDK でも、色々なものとペアにします。url に http://localhost:3001/mcp を指定してください。 `こんな内容を記入します。

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

双方向

トップダウン——「自分は何をやるべき?」

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

ボトムアップ——「#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

ステップ内のすべての内容は独立しているので、順序は自由、同時に複数のエージェントにも渡せます。Web アプリのイシューパネルには同じプランが表示され、コピーボタンからエージェントへのプロンプトとして渡すことができます。

機械読み可能なグラフ

npm testartifacts/graph.json と artifacts/schedule.json を出力します。これによりスケジュールが差分可能になります。サイクルを打ち切るための重みを変更すると、その変化はグラフが 何となく変わったというぼんやりした感覚ではなく、レビュー可能な超越として表示されます。これはこのリポジトリの中で最も低コストで可能な統合テストでもあります。ファイルが正しい形で非巡回的であれば、純粋なコア全体が正しく配線されているということです。

アーキテクチャ概要

npm-workspaces モノレポには 2 つのサービスが含まれています:

  • apps/backend — GitHub を読み取り、推論を実行し、ストアを所有、REST API とMCP サーバーを公開しています。

  • apps/web — インタラクティブなグラフ。バックエンド URL と API トークンだけを持っていて、それ以外は持ちません:データベースの URL も GitHub トークンもモデルキーも含まれません。

詳細は docs/01-architecture.md をご覧ください。

Documentation / ドキュメント

ドキュメント

内容

docs/00-context.md

ハッカソンのコンテキスト、審査基準、提出条件

docs/01-architecture.md

コンポーネント対策、データフロー関係、state の対応、スタック戦略選択

docs/02-inference-pipeline.md

推論の 5 層、LLM プロンプト、誤魔法陣のガード手

docs/03-graph-scheduling.md

Tarjan、サイクル破除、ウェーブ、クリティカルパス、ブラスト半径

docs/04-mcp-surface.md

エージェントが呼び出す 7 個の MCP ツール

docs/06-workstreams.md

チームを 5 つに分けた 平行作業の分け方

docs/07-demo-script.md

2 分のデモンストレーション、拍手ごとの流れ

docs/08-risks.md

正直な弱点、フォールバック、ロスカットルール

docs/09-github-api-notes.md

検証済みの API とヘッダー、allメ竦みたいな落とし穴

docs/10-model-provider.md

OpenRouter + Ox Alpha: セットアップ、スキーマの注意、レート制限付き、プライバシー

docs/11-graph-store.md

グラフが保存される場所、3 つのキャッシュ層

docs/12-rest-api.md

Web アプリが使う REST の契約

docs/13-using-lattice-mcp.md

Lattice を同じ GitHub Copilot App プロジェクトに接続する

AGENTS.md

このリポジトリでのスムーズなエージェントの働き方

クイックスタート

まだ — その下準備が issue #1 です。このセクションは「他の誰かがあなたの README から実行できますか?」という評価基準に当たるので、提出前にしっかり書き直します。目標:clone から graph まで 5 コマンド以内+ トークン (権限が) 一切不要の DEMO_MODE=1 フィクスチャ 。

ライセンス

MIT

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • -
    license
    B
    quality
    Not graded
    maintenance
    Enables AI-driven orchestration of GitHub development workflows including automated issue analysis, code generation, code review, and PR creation through multiple specialized agents. Integrates with GitHub Actions to automate the complete development process from issue to pull request.
    7
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to automate GitHub repository management, issue tracking, and commits using natural language.
    24
    Apache 2.0
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI agents to interact with GitHub (search repos, read files, issues, PRs), analyze code for quality and issues, and manage tasks with priority sorting.
    7
    MIT

View all related MCP servers

Related MCP Connectors

  • One shared brain for your AI coding agents: team memory, agent Q&A, tasks, and file claims.

  • Coding agents from Claude Code, Cursor and Codex claim jobs and lock files on one shared board.

  • Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/J-o-n-a-t-h-a-n-M-u-e-l-l-e-r/lattice'

If you have feedback or need assistance with the MCP directory API, please join our Discord server