Help us improve
Share bugs, ideas, or general feedback.
From lattice
Scans a codebase, conducts a structured interview, and produces a shareable architecture insights document. Use when assessing codebase architecture or direction.
npx claudepluginhub techygarg/lattice --plugin latticeHow this skill is triggered — by the user, by Claude, or both
Slash command
/lattice:architecture-compassThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Read, apply:
Builds and maintains ARCHITECTURE.md and DETAILED_DESIGN.md incrementally with coverage tracking. Principal mode analyzes vision, bottlenecks, gaps, and alternatives.
Analyzes codebase architecture via multi-agent specialists on structure, coupling, integration, error handling, security; verifies findings, reports strengths and flaws with evidence.
Maps module dependencies, checks layering integrity, and flags structural decay across a codebase. Includes onboarding mode for codebase tours.
Share bugs, ideas, or general feedback.
Read, apply:
framework:knowledge-priming -- Load codebase context: language, framework, structure, conventions (always)framework:architecture -- Architectural audit lens and recommended direction guardrails (always)framework:domain-driven-design -- Strategic DDD only: bounded contexts, domain seams (conditional: only when domain complexity warrants it)framework:collaborative-judgment -- Surface judgment calls during co-design rounds (always)Check for an existing insights document first. If .lattice/insights/architecture.md already exists:
pending — row exists, no content written yetin-progress — content exists in the section but no agreed date recorded✅ agreed — content exists and date is recordedpending or in-progress phase. For in-progress phases: present the existing content for re-confirmation rather than regenerating it.in-progress but the document has no Current Architecture content (the previous session's scan context was lost), re-run Step 2 scan before presenting.✅ agreed date in the Session Status table is older than 30 days, run a lightweight re-scan (Steps 2.1 and 2.6 only — tree + imports). If material structural changes are detected, present them and ask whether Current Architecture needs revision before proceeding.✅ agreed and the staleness check passes.If no existing document: proceed from Step 2.
Check for .lattice/config.yaml. Load knowledge-base.md and architecture.md from .lattice/standards/ if they exist — these shape both the audit lens and the recommended direction proposal.
If no .lattice/ config exists, offer to run lattice-init first. If declined, infer defaults from the scan.
Use framework:knowledge-priming to establish codebase identity before analysis.
Do not ask any questions yet. Scan first, form a hypothesis, then ask only what code cannot reveal.
Confirm scope before scanning. If the working directory is a monorepo or contains multiple independent services/modules, ask: "Which service or module should this assessment focus on?" Do not scan the full monorepo root — assess one bounded scope at a time. If the user requests the full monorepo: explain that a single insights document cannot meaningfully capture many independent architectures. Offer: (1) assess the shared infrastructure/platform layer as one scope, (2) produce a lightweight index of all services with one-line architecture classification, then deep-assess the 2–3 most painful ones. If the user still insists, proceed with a service-by-service scan at reduced depth (Steps 2.1 + 2.6 per service).
This is signal extraction, not a full read. Target: 15–25 file reads (view/open operations). Grep, glob, and directory listings do not count against this budget — they are structural reconnaissance, not deep reads. Stop reading a module once its responsibility, dependencies, and layer fit are clear.
Scanning protocol — execute in order:
Directory tree (3 levels deep) — intended organization, layer structure, naming conventions. Do this before opening any file.
Dependency manifests — package.json, pom.xml, go.mod, requirements.txt. Language, framework, key external dependencies.
Architecture documents — README.md, ARCHITECTURE.md, docs/, ADR directories. The intended architecture often lives here — the gap between intention and reality is itself a finding.
Archaeology — before analysing flows, reduce scope:
Seam identification and viability — natural boundaries where one side can change without the other knowing:
Import and dependency patterns — grep import statements across all source files. Do not open full bodies. Reveals dependency direction, load-bearing modules, layer violations cheaply.
Entry points — 3–5 files: routes, controllers, CLI handlers, event consumers. Reveals outermost layer.
Interface and contract files — interfaces, abstract classes, ports. Reveals intended boundaries, whether followed or not.
One representative file per top-level module — confirm responsibility, catch what import grep missed.
Stop. Form the hypothesis:
If a module remains unclear after Step 9, read one additional file from it. This is the only scan extension permitted.
If the scan produces no meaningful architectural signal — fewer than 3 distinct modules, no dependency violations, no seams, or the codebase is clearly early-stage (new repo, mostly generated code, flat structure) — surface this before the interview: "This codebase has no architectural complexity to assess — fewer than 3 modules, no dependency violations, and no identifiable seams. This is either early-stage or intentionally simple. /design-blueprint may be more appropriate if you're establishing architecture from scratch. Continue the assessment anyway?" If the user confirms, proceed. If not, end the session.
Skip entirely: full method implementations, test files, generated code, vendor directories, migration files, static assets.
Read references/interview-guide.md. Apply the four-act arc, question bank per act, answer interpretation table, conversation principles, and red flags from that document.
Four acts — in order, do not reorder:
In practice: 5–7 questions total. Skip any act's questions the scan already answered. If the user described their pain or goal when invoking the molecule, that counts as Act 1 answered — acknowledge it rather than re-asking: "You mentioned [X] — let me confirm I understood that correctly before we continue."
This principle applies to all acts — if the user provided history (Act 2), vision (Act 3), or constraints (Act 4) in their invocation or earlier responses, acknowledge what was said and confirm understanding rather than re-asking. The interview fills gaps in knowledge, not a form to complete.
If the user explicitly declines the interview ("just analyze the code", "don't ask me questions"): acknowledge the limitation — "The recommended direction will be based solely on code signals without team context. It may miss delivery constraints, team topology, or unstated goals. Proceed?" If confirmed, skip to Step 4. Act 3 (vision) will be inferred from the scan and stated pain only — flag this clearly in the insights document's Team Vision section as "inferred, not confirmed."
Non-negotiable behavioral rule: Act 3 answers are architectural inputs, not soft context. The recommended direction in Step 5 must visibly respond to what the team said in Act 3. Consult the answer interpretation table in references/interview-guide.md to map vision answers to architectural implications before forming the recommendation.
Present the architectural snapshot from the scan. Goal: shared, accurate map — not a critique.
Present:
graph TD
[ActualEntryLayer] --> [ActualServiceLayer]
[ActualServiceLayer] --> [ActualDataLayer]
[ActualServiceLayer] --> [ActualDomainLayer]
[ActualDomainLayer] --> [ActualDataLayer]
style [ActualDataLayer] fill:#f96
If the scan findings and the interview answers contradict each other — e.g., scan shows no layers but team described having clean architecture — present both explicitly before asking for confirmation: "The scan shows [X]. You described [Y]. Is there a gap between intent and current implementation, or did I misread something?" Resolve the contradiction before advancing.
Ask specifically: "Does this map accurately reflect how the codebase is structured today? What's missing, wrong, or intentional that I've marked as a violation?"
If the map has not converged after 3 correction rounds, use framework:collaborative-judgment to surface the specific unresolved points and ask the user to make a decision rather than continuing to iterate.
Do NOT advance to Step 5 until the user explicitly confirms the current architecture map.
Use framework:collaborative-judgment for genuine ambiguities in the current-state read.
Propose a recommended architectural direction tailored to this codebase — not a generic template.
Carry drift/mismatch forward:
Minimum viable direction: Propose the simplest structure that resolves the stated pain. Test: can the team take the first move this week? A direction that only pays off after six months of work is the wrong direction.
Vision-guardrail tension: If the team's vision (Act 3) is structurally incompatible with a guardrail (Act 4), surface the tension explicitly before proposing: "Your goal of [X] requires changes to [Y], which you've marked as off-limits. The recommended direction will work around this constraint — here's how and what it costs in terms of the vision." Do not silently compromise — name the tradeoff.
Apply framework:architecture guardrails. The non-negotiable rule: domain has zero dependency on infrastructure — infrastructure depends on domain.
Apply framework:domain-driven-design (strategic only) when: multiple distinct business capabilities exist, different parts change at different rates, or different teams own different areas. When none apply, skip DDD.
The proposal covers:
Present:
graph TD
[ActualAPILayer] --> [ActualApplicationLayer]
[ActualApplicationLayer] --> [ActualDomainLayer]
[ActualInfraLayer] --> [ActualDomainLayer]
[ActualAPILayer] --> [ActualInfraLayer]
style [ActualDomainLayer] fill:#6f9
framework:knowledge-priming and .lattice/standards/language-idioms.md (if it exists) to ensure layer names and file naming conventions match this codebase's language and framework — not a generic OOP template. Not exhaustive — enough to make the structure unambiguous.State explicitly: "This recommended direction is the best current understanding. It will be refined as the team acts on it."
Ask specifically: "Does this direction address the pain you described? Are there constraints or preferences that should change this proposal?"
Do NOT advance to Step 6 until the user explicitly confirms the recommended direction.
If the direction has not converged after 3 revision rounds, use framework:collaborative-judgment to surface the specific unresolved tensions (e.g., vision vs. constraints, simplicity vs. completeness) and ask the user to make a decision rather than continuing to iterate.
This step is a valid stopping point. If the team only needs current + recommended direction agreed, the session can end here. In that case, run Step 7 immediately to persist what was agreed. Sections not yet reached must appear in the Session Status table as pending — do not omit them. Gap assessment and first moves can be completed in a follow-up session.
Gap assessment — structural items only:
Do not include tactical items (naming, test coverage, code style) — execution concerns handled by code-forge and refactor-safely.
First moves — not a full backlog. The 2–3 most important structural decisions to make next.
Right granularity: one layer introduced, one seam isolated, one dependency inverted. Not "improve the domain layer" (too broad). Not "rename this method" (too narrow).
For each first move:
/refactor-safely/design-blueprint → /code-forge[Move N] or none — makes sequencing explicitAsk: "Do these first moves match your team's capacity and what you want to tackle first?"
Do NOT advance to Step 7 until the user confirms the gap assessment and first moves.
Produce .lattice/insights/architecture.md. Create .lattice/insights/ directory if it does not exist.
Required structure:
# Architecture Compass — [Repository Name]
## Session Status
| Phase | Status | Agreed |
|---|---|---|
| Scan + Interview | complete | — |
| Current Architecture | ✅ agreed | [date] |
| Recommended Direction | ✅ agreed | [date] |
| Gap Assessment | ✅ agreed | [date] |
| First Moves | ✅ agreed | [date] |
## Repository Identity
Language, framework, size, scope boundary, delivery constraints, team context.
## Why We're Doing This
The burning platform — from the interview. What's breaking today.
Previous attempts and what stopped them.
## Team Vision & Guardrails
What the team wants to achieve (Act 3 answers — verbatim + architectural interpretation).
Constraints and off-limits areas (Act 4 answers).
These are architectural inputs that directly shape the Recommended Direction.
## Archaeology Findings
Dead code candidates. Duplicates to reconcile.
Implicit coupling. Hidden integration points. Quick wins.
## Domain Map
Core domain. Natural seams. Bounded contexts (if applicable).
## Current Architecture
Drift or mismatch — with rationale.
Layer structure. Module inventory.
[Mermaid diagram — layers and violations]
Key violations — specific and named.
## Recommended Direction
Architecture style and rationale.
Layer definitions and dependency rules.
[Mermaid diagram — clean target]
[Annotated target folder tree]
[Bounded context map — if applicable]
## Gap Assessment
Must change / Should change / Explicitly defer / Leave alone.
## First Moves
[Move 1] — what, why first, which molecule, affected modules, depends on, done when
[Move 2] — what, why first, which molecule, affected modules, depends on, done when
[Move 3] — what, why first, which molecule, affected modules, depends on, done when (if applicable)
## Progress Log
[Append on every subsequent session: YYYY-MM-DD — phase revisited, what changed, new findings]
Use today's date in YYYY-MM-DD format wherever [date] appears in the Session Status table.
On subsequent sessions that resume this document, append an entry to the Progress Log before closing: date, which phase was revisited, what changed, any new findings that emerged.
The document must be complete enough that a new AI session or new team member can read it and understand exactly what was found, what was agreed, and what to do next. No re-briefing required.