Source index · Technical reference · Home

UNRELEASED DEVELOPMENT SNAPSHOT · READ-ONLY EXCERPT

docs/architecture.md

This is the cited technical source at local revision 275a354, inspected on 22 September 2026. It differs from the public release. This reference publishes only the cited sections, not an installable release or the development branch.

Line numbers refer to the complete recorded file. Uncited lines are omitted. Full-file SHA-256: fc01bbe2145ea8f9de285f3ae70124da9ef8fe064de11f48191a30bcc92644b7.

1# Architecture
3How Lintel is put together, and why. If you want the workflow rather than the structure, read
4[the cycle](the-cycle.md) first.
6---
8## One sentence
10Lintel is a **spine** — a company-neutral execution engine of skills, agents and hooks — plus one
11active **pack** that supplies identity. The spine decides *how* work runs; the pack decides *what
12counts as correct* for your team.
14Everything else in this document is a consequence of that split.
16---
… omitted uncited lines …
203Each runs at three granularities — full, loop, or a single capability — so the module is useful both
204as a half-day architecture pass and as a two-minute question.
206`full-engineering-pass` composes all five in dependency order: architecture first, then data and
207security in parallel, then hosting, then testing.
209---
211## Cross-cutting constructs
213**Hand-off envelopes.** Work crossing a boundary — spawning a subagent, transitioning a phase,
214passing to a cold executor — can be wrapped in a standardised envelope and scored by the active
215pack's evaluators before it is allowed through. The schema, helpers and evaluator policy ship, but
216there is no universal automatic interceptor: a workflow must invoke Brief Forge explicitly, as the
217swarm profile does before dispatch. Pack configuration selects behavior for an invocation; it does
218not install a host hook.
220**Meta-infra discipline.** Changes to the harness's own structure ripple into every downstream
221cycle, so they run under four extra gates — a structure-impact entry, a compatibility audit, the
222shape-test suite, and a future-operator recap. See [the cycle](the-cycle.md#the-gates-in-one-list).
224---
226## Where state lives
228Four roots. Two are machine-global, two live in your repo:
230| Root | Scope | Holds |
231|---|---|---|
232| `~/.lintel/` | machine-global | operator identity — `profile.yaml` (active pack, mode, role), installed packs, cross-repo job registry, operator audit log |
233| `~/.claude/` | machine-global | your CLI's own home — `settings.json`, and hooks you armed by hand on a bare install |
234| `<repo>/.claude/` | per-repo, **committed** | `memory/` (lessons, working state, personas), `decisions/`, `plans/` including optional swarm topology and evidence |
235| `<repo>/.claude/runtime/` | per-repo, **gitignored** | cycle state, job data, session saves, repo event log |
237The committed/gitignored split is the load-bearing part. Knowledge that should be reviewed in a pull
238request is committed. Churn that would only create merge conflicts is not.
240A repo carrying `.claude/lintel-layout.yaml` is on this layout. One without it predates the move and
241still uses the legacy locations.
243---
245## Multi-CLI without duplication