what we're building

shipping todayearly accessdashed means dashed

What's live, what's in flight, what's still dashed.

Models come and go; your team's reasoning compounds — so we're building the layer that keeps it usable. Here is all of it, graded honestly: what's serving in production today, what's in flight right now, and what's still dashed on the horizon. The card tells you which — solid means shipping, dashed means dashed.

serving nowapi.lema.sh/fusethe cited “why” · React · Kubernetes · Rust · Vue · Go · EIPs · elizaOSlema-mcp · npm + MCP registryno sign-in needed

where your work lives

The why is scattered across the tools your team already uses. lema ingests it where it lives GitHub today — so the record builds itself instead of asking anyone to copy-paste. Other sources come one at a time, and this page will say so only when they ship.

GitHub● ingesting

agent infrastructure

verify · description check livesessions · hooks built, wiring next

Two surfaces. One decision graph.

Gate what agents ship in CI. Keep what they learned between sessions. Both query the same record of what was decided — and what was ruled out.

↳ lema verify

Did the diff do what the PR says?

A GitHub Action on every pull request. Compares the description to the actual diff — stated-and-found, stated-but-not-found, in-the-diff-not-described. Neutral check run; inline annotations on the lines that matter.

GitHub ActionChecks APIfail-open P0
github.com/acme/api/pull/847
illustrative
lv
lema verify
bot · commented now

Description check: 1 of 2 stated changes found · 1 not described

  • adds input validation to signup — internal/api/signup.go
  • Stated but not found: “adds retry logic to the API client”
  • Also in diff, not described: retry logic in client.go. Intentional?
@@ -42,6 +42,12 @@ func callClient()
+ return retry.Do(ctx, fn)
lema verify: undescribed change (notice)

lema verify v1 · 4 / 50 free checks this month · checked PR description + issue #142

add to your repo

Save as .github/workflows/description-check.yml— authenticates via GitHub OIDC, no lema signup.

name: description check

on:
  pull_request:

permissions:
  contents: read
  pull-requests: write
  id-token: write
  checks: write

jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: ${{ github.event.pull_request.head.sha }}
      - uses: lemahq/lema-verify@v1
        with:
          api-url: https://api.lema.sh
          github-token: ${{ github.token }}
↳ session continuity

Sessions that survive compaction.

Hooks capture execution state before the context window compresses, inject a checkpoint when a session resumes, and push decisions back to the graph — so agents don’t re-litigate settled why or lose the live thread.

PreCompact distillSessionStart injectSignal-A capture
claude code · lema/.claude/hooks
illustrative
  1. during session
    Spool prompts + file touches

    UserPromptSubmit · PostToolUse → local JSONL sidecar

  2. pre-compact
    Distill checkpoint

    Rules-first: goal, active files, next action, decision refs

  3. session start · resume · compact
    Inject continuity block

    ~600 tok execution state — not a transcript replay

lema run-ledger checkpoint
last prompt: wire push.go as Stop hook…
files: import_decisions.go · settings.json
refs: d_8275f0 · ADR-0135
frontier: 00-SPINE §Track A A1
Agent workshooks · MCP · long session
Decision graphwhy · ruled out · cited
Ship + resumeverify in CI · checkpoint on compact
npx lema-mcp

also on the graph

The cited why layer and infra drift surfaces that ship alongside the agent infrastructure above.

↳ the mixer — why + how, in one answer
lema.sh/fuse — check_approach
illustrative
your agent asks

“Add a global event bus for cross-feature state?”

⊘ considered — and ruled out
the why · cited

Rejected in the 2024 architecture review — a global bus made data flow untraceable and coupled features meant to ship independently.1

the how · pointer

Do it instead with scoped per-feature stores → docs/state-management

⎘ RFC-118 · lemahq/lema#412 — or an honest “no recorded ruling” when the record is silent
↳ strata — your infra, watched for drift
lema.sh/strata — drift
illustrative
lemahq/lema · 330 resources7 with decisions
vpcgoogle compute networkin sync
apicloud run · modified in consoledrift
emaillive in cloud, not in codeghost
legacy-bucketnot in terraformshadow
every node deep-links to the decision that put it there — or says none did.

the full build, graded

Every surface above and every plan below, sorted by how far it has actually shipped — solid, in motion, or dashed.

Live
in production · 6

use it now

The cited "why"

live
ask · cited · honest abstain

Ask why React, Kubernetes, Rust, Vue, Go, Ethereum's EIPs, or elizaOS chose what they chose — and what they ruled out. You get the answer with citations, or an honest “no recorded ruling.” No model guesswork, no account.

try a query →

Fusion — the mixer

live
the why + a pointer to the how

The mixer puts both halves of an answer in one place: the why — the cited rationale and what was ruled out — and the how, or a pointer to the project's own docs for doing it. Ask it in the web chat or over MCP — tuned to never bluff, silent unless it's sure.

see it fire →

lema verify

live
did the diff do what the PR says?

A GitHub Action on every pull request, comparing the description to the actual diff: stated-and-found, stated-but-not-found, and in-the-diff-not-described. A neutral check with inline annotations, fail-open by design — it never blocks a merge because of us.

add it to a repo →

lema-mcp — the local door

live
one command · no account · MIT

Runs next to your agent: decisions arrive as ≤240-char pointers — never documents dumped into context — and a PreToolUse hook catches a settled call before the edit lands. On npm and the MCP registry.

on github →

Hosted MCP, your repo

live
your graph, every session

Sign in, connect a repo, mint a key — and your own decision graphserves every agent session over hosted MCP: the same cited answers, the same honest abstentions, on your team's reasoning instead of open source. Free to start; Pro lifts the caps.

set it up →

Strata — the infra map

live
declared infra · deep-linked

Connect a repo and read your declared Terraform as a map — every resource deep-links to the SHA-pinned line that defined it and the decision that put it there, and says so plainly when none was ever recorded.

in the app →
In flight
building now · 3

merging as it hardens

Agent Briefing

on stage
push, not pull — brief before you build

Sign in and lema opens on a briefing, not an empty box: what this project already decided, what it ruled out, and where it still needs your judgment — handed to your agent before it touches the code. A thin record degrades to an honest “not enough on record yet,” never a bluff.

early access →

Drift

in review
reality vs declared

Strata reconciles what's actually running in your cloud against what Terraform declares, and flags the four ways they part: in-sync, managed-but-modified, ghost, and unmanaged shadow infra. The map stops being a snapshot and starts watching.

watch it build →

Sharper recall

in build
more answers, same no-bluff

Fusion ships precision-first — it would rather stay silent than guess — so today it answers less often than it could. We're widening recall at the retrieval layer, finding rulings that exist but get missed, without ever touching the no-bluff guarantee.

follow the work →
On the horizon
upcoming · 2

dashed means dashed

Context pack

next up
the loop closes

The most load-bearing decisions for what you're touching, handed to the session at start — the CLAUDE.md that writes itself, kept current by the graph instead of drifting in a prompt file. A local session-start reader exists in lema-mcp as an opt-in; the always-current, working-set-scoped hosted pack is what still closes the loop.

gate: a local pack ships free; the working-set-scoped hosted pack rides MCP keys.
tell me when

One question, one tool

designed
four verbs become one

Today the why and the how live across a handful of MCP verbs. They collapse into a single call that returns both — the simplest possible “is this a good idea, and how?” for any agent that asks.

gate: the unified tool has to match the separate verbs on the eval before they retire.
tell me when
the thread through all of it

One problem sits under every surface here: teaching lema exactly when a question matches a recorded ruling — the precision gate behind Fusion, drift, and every verdict we draft. We measure it in the open, and until it's perfect the product does the honest thing: it abstains instead of bluffing.That silence isn't a gap we're papering over — it's the whole point. Dashed means dashed; silence means we don't know yet.

don't lose the why

Don't lose the why. Ask the repo.

Run a real “why” query on React, Kubernetes, Rust, Vue, or Go right now — no account, no import. Or run it local in ten minutes. Both doors lead to the same graph.

Try it now — no login
● try it · no account · React, Kubernetes, Rust, Vue, Go◐ connect your repo — early-access, opening as hardening completes