techygarg/lattice-context-anchoring
Manage per-feature living documents that capture decisions, constraints, and reasoning across AI sessions during active development. Scoped to feature-level work — design, implementation, bugfix, refactor — not for codebase-wide assessments or product-wide specifications (those define their own document lifecycles). Handles creating new context documents, loading existing ones, and enriching them with new decisions. Use when starting a new feature, resuming work, making technical decisions, resolving questions, or when context needs to persist across sessions. Use this skill whenever the user mentions 'load context', 'update context', 'context doc', 'decisions', 'continue where we left off', 'what did we decide', or 'capture this decision'.
This is a copy. The original lives at techygarg/context-anchoring.
npx skills add https://github.com/techygarg/lattice --skill context-anchoring
> Feature-level only — anchors decisions as a feature flows from design → implementation → bugfix → refactor.
Skill manage dir of per-feature context docs. Resolution order:
.lattice/config.yaml in repo rootpaths.context_base for custom dir path.lattice/context/Each feature get one doc at <context_base>/<feature-name>.md. No default principles, no overlay modes, no override files -- just thin template and per-feature docs that grow through enrichment.
AI no persistent memory. Context decay real: by message 30+, early decisions contradicted, naming inconsistent, "why" evaporate. Damage compound -- forgotten decision become potential contradiction, lost constraint become violation, unresolved question become silent assumption.
Context anchor docs solve:
Two docs per feature: requirement doc (static, written upfront, not managed by this skill) and context anchor doc (living, evolving, managed by this skill). Requirement doc define *what* build. Context anchor doc capture *how* and *why* -- decisions, constraints, reasoning that emerge during development.
The requirement doc may live in this repo, or in whatever system the team already tracks requirements in (Jira, Linear, a wiki) -- this atom never writes to it regardless of where it lives.
Three behaviors govern context anchor doc lifecycle. Each triggered reactively (user ask) or proactively (AI suggest). Both cases, AI always confirm before acting -- propose, user dispose.
| Behavior | Purpose | Reactive Trigger | Proactive Trigger |
|----------|---------|-----------------|-------------------|
| Create | Start new context doc | User ask create one | AI detect feature work beginning without doc |
| Load | Restore context from existing doc | User ask load/resume | AI detect existing docs and suggest loading |
| Enrich | Add new decision, constraint, resolution | User ask capture something | AI detect decision made in conversation |
Every context doc carries a status frontmatter field. Never infer status from body prose.
| Value | Set by |
|---|---|
| draft | context-anchoring Create — design not yet complete |
| approved | design-blueprint Step 3 — L1–L4 complete, design reviewed |
| complete | code-forge Step 5 — implementation done |
STOP: Check this field before acting on a context doc. draft ≠ approved. approved ≠ complete. Deviation from approved design: update doc and re-approve — no new status values.
Always confirm before creating.
Steps:
user-authentication.md). Confirm name with user.requirement_doc frontmatter field -- a local file path, or an external reference (URL, ticket ID, or other identifier resolvable via a connected MCP tool). If neither, leave null.<context_base>/ not already exist../assets/feature-doc-template.md and fill in:feature, requirement_doc, created (today date), status: draft ---
feature: <feature-name>
requirement_doc: <local path, external reference, or null>
created: <today's date>
status: draft
---
# <Feature Name>
<one-line summary>
## Decisions Log
| Date | Decision | Reasoning | Alternatives Considered |
|------|----------|-----------|------------------------|
## Open Questions
None.
## Constraints
None.
## Key Files
Always confirm before loading.
Steps:
requirement_doc not null. Local path → read directly. External reference (URL, ticket ID, or other identifier) and a connected MCP tool can resolve it → attempt fetch. Neither applies → ask the user to paste the current requirement constraints directly -- expected, not an error. Use whatever is resolved to understand feature goals and scope, but not modify.status field — surface explicitly)Always confirm before writing.
What capture in Decisions Log:
Rules:
~~), and (c) add decision entry in Decisions Log recording override and reasoning. Constraint history preserved; binding status revoked.When user ask load or resume but not specify which feature:
.md files.feature field or by filename.user-authentication.md and oauth-authentication.md), show all partial matches with full filenames and let user choose. Never guess.When user mention feature name in conversation, check if matching context doc exist. If it do and not been loaded in this session, suggest loading it.
Load: Show feature name, status (from frontmatter), requirement doc status, decision count, open questions, constraints, latest decision. Close with: "All logged decisions are active. Constraints are non-negotiable. I will flag open questions when work touches them."
Enrich: Show exactly what will be added (decision, reasoning, alternatives considered). Wait confirmation before writing.
Create: Show proposed path, feature name, requirement doc link. Wait confirmation before creating.
This atom composed by molecules that orchestrate feature workflows:
design-blueprint -- invoke Create or Load in Step 1 (Establish Context), then invoke Enrich at each design level checkpoint to capture decisions as they emergecode-forge -- invoke Load in Step 1 (Establish Implementation Context) to load blueprint, then invoke Enrich throughout Steps 3-5 to capture implementation decisions, key files, resolved questionsWhen context doc active (loaded in current session), Enrich run continuously -- AI monitor conversation for decisions worth capturing and suggest enrichment as they arise. Not limited to molecule that loaded doc; any skill producing decisions can trigger enrichment suggestion.
Take techygarg/lattice-context-anchoring from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.