Tool · v0.1 · experimental

The gaps in your spec are writing your code.

Lattice turns finite, constrained parameter spaces into deterministic coverage rows. Easy for coding agents to call. Open source.

Origin

First job out of college.

My first job out of college was Hexawise — the company that made combinatorial test design legible to QA engineers. Started as an intern in 2016, came on full-time in 2017, and designed the implied-logic engine in graph theory: the part that decides which parameter combinations are feasible and propagates the consequences. Shipping it dropped related support tickets by 90%. I left for a stint at Single Stop, came back remote in 2019, and rewrote that same engine for a 99% speedup. Once consulted on a client's test suite and used the discipline to cut it in half while increasing coverage. The math works.

Lattice is the same shape of math, pointed at a different reader. The blind spot moved: coding agents now produce plans that look complete and miss the edges they didn't think to enumerate. Different reader, same engine.

I run engineering and AI at Skillit, where we ship AI hiring infrastructure for the construction industry. Lattice came out of the gap I kept hitting there: agents that look careful, plans that miss obvious edges, schemas that aren't really schemas.

The contract

Harness owns extraction.

Lattice owns the math.

Harness owns evaluation.

Receipts

An agent finding the use case it almost missed.

I dropped this site in Claude Code and asked if Lattice would help. It said no. Then I pushed.

$ claude
> just dropped lattice. would it be useful for this website?

claude: honest take — not really, not for this site.
        portfolio is mostly static, shallow interactions,
        no combinatorial blowup. nice ship though.

> what about the library rendering?

claude: yeah — different answer.

        template × format × height × thickness × condition
        × spine_direction × {badge, kicker, subtitle,
        author, publisher} presence × title line count

        ≈ 115,000 visual variants. pairwise compresses
        to ~50 rows. that's the sweet spot.

        real constraints worth encoding, too:
          — mass_market + oversized: physically incoherent
          — chunky + 3-line title: safe; slim + 3-line: where
            overflow bugs live
          — dark_technical palette + worn condition:
            contrast failure waiting to happen

        add template #11 next month and you'd catch the
        cloud_playbook × mass_market × chunky × no-kicker
        combo nobody owns but would ship anyway.

> so what about the project framing made you miss this?

claude: the readme. "for coding agents" anchors the input
        as code. every example was backend-flavored. the
        scope list excluded rendering surfaces, component
        variant spaces, config matrices. a reader matches
        their problem against that list and bounces if it's
        not there. the engine is broader than the pitch.

The README has since been rewritten to include rendering surfaces, component variant spaces, config matrices, and a worked component-variant-matrix example. The loop closed itself.

Operator's note

Push past the easy answer.

I treat agents the way I treated client meetings at Hexawise: push past the easy answer until you find what nobody would catch. Lattice is the part of that loop that has to be deterministic.

Install
$ pipx install lattice
$ lattice agent bootstrap
$ lattice agent doctor

Universal agent instructions: lattice agent instructions. Full guide and harness-specific paths in docs/install.md.

experimental 0.1 built in the open github