Repository avatar
AI Tools
v1.0.2
active

lex

io.github.Guffawaffle/lex

Episodic memory and architectural policy for AI agents. Frames, Atlas, and Policy.

Documentation

Lex

Episodic Memory & Architectural Policy for AI Agents

MIT License npm version CI Status Node.js TypeScript

Stop losing context. Start building agents that remember.

Quick Start Β· Documentation Β· Examples Β· API Reference Β· Contributing


πŸ“– What is Lex?

Lex is a TypeScript framework that gives AI agents episodic memory and architectural awareness. It solves the fundamental problem of context loss in long-running development workflows.

The Problem

You're working with an AI coding assistant on a complex feature. You stop for the day. When you return:

  • The assistant has no memory of what you were doing
  • It can't recall why you made certain architectural decisions
  • It doesn't know which modules are safe to modify
  • You spend 30 minutes re-explaining context every session

The Solution

Lex provides three capabilities:

  1. πŸ“Έ Episodic Memory (Frames) β€” Capture work snapshots with context, blockers, and next actions
  2. πŸ—ΊοΈ Spatial Memory (Atlas) β€” Navigate module dependencies without overwhelming token budgets
  3. πŸ›‘οΈ Architectural Policy β€” Enforce boundaries, permissions, and deprecation patterns in CI

Result: Your AI assistant recalls exactly where you left off, understands your architecture, and respects your constraints.


🎯 Core Capabilities

🧠 Frames: Work Session Memory

Capture meaningful moments in your development workflow:

lex remember \
  --reference-point "Implementing user authentication" \
  --summary "Added JWT validation to API middleware" \
  --next "Wire up password reset flow" \
  --modules "services/auth,api/middleware" \
  --blockers "Need PermissionService access - forbidden edge in policy" \
  --jira "AUTH-123"

Later, instantly recall:

lex recall "authentication"
# Returns: Your exact context, blockers, next action, and relevant module neighborhood

Learn more about Frames β†’

πŸ—ΊοΈ Atlas Frames: Architectural Context

When you recall a Frame, Lex doesn't dump your entire codebase into context. Instead, it provides an Atlas Frame: the modules you touched plus their immediate neighborhood (dependencies, dependents, permissions).

This "fold radius" approach gives AI assistants exactly the architectural context they needβ€”nothing more, nothing less.

Token efficiency: 10-module project β†’ ~500 tokens (not 50,000)

Learn more about Atlas β†’

πŸ›‘οΈ Policy Enforcement

Define architectural boundaries as code:

{
  "modules": {
    "ui/components": {
      "owns": ["src/ui/components/**"],
      "mayCall": ["services/auth", "ui/shared"],
      "forbidden": [
        {
          "target": "database/queries",
          "reason": "UI must not access database directly. Use API layer."
        }
      ]
    }
  }
}

Enforce in CI:

lex check merged-facts.json
# βœ– Violation: ui/components β†’ database/queries (forbidden edge)
#   Reason: UI must not access database directly. Use API layer.

Learn more about Policy β†’

πŸ“ Instructions Generation

Maintain a single source of truth for AI assistant guidance:

# Your canonical instructions live in one place
.smartergpt/instructions/lex.md

# Project them to host-specific files
lex instructions generate
# Creates: .github/copilot-instructions.md, .cursorrules

Benefits:

  • Single source β†’ Multiple hosts (Copilot, Cursor, etc.)
  • Safe updates via marker system (human content preserved)
  • Deterministic output (same input = same output)

Learn more about Instructions β†’


πŸš€ Quick Start

Installation

# Install globally (recommended)
npm install -g @smartergpt/lex

# Or locally in your project
npm install @smartergpt/lex

Requires Node.js 20+ (tested through Node.js 22, see .nvmrc)

Lex 2.0.0 is AX-native with structured output (--json), recoverable errors (AXError), and Frame Schema v3 for orchestrator integration. All commands provide both human-readable and machine-parseable output.

Initialize

# Zero-to-value initialization (new in v2.1.0!)
npx @smartergpt/lex init --yes
# Auto-detects project type (Node.js, Python, Rust, Go, etc.)
# Creates:
#   .smartergpt/ - Workspace with prompts, policy, and instructions
#   .github/copilot-instructions.md - IDE instructions with LEX markers
#   .cursorrules - Cursor IDE instructions (if Cursor detected)
#   lex.yaml - Configuration with sensible defaults
#   .smartergpt/lex/memory.db - SQLite database (initialized on first use)
# Shows MCP server configuration guidance
# Idempotent: safe to run multiple times

# Interactive mode (prompts for first Frame)
lex init --interactive

# Generate seed policy from directory structure
lex init --policy
# Scans src/ for TypeScript/JavaScript modules
# Generates .smartergpt/lex/lexmap.policy.json with discovered modules
# Example: src/memory/store/ β†’ memory/store module with src/memory/store/** match pattern

# Force reinitialize (overwrite existing files)
lex init --force

What happens during init:

  1. πŸ” Project Detection β€” Identifies Node.js, Python, Rust, Go, Java, .NET, Ruby projects and frameworks
  2. πŸ“ IDE Setup β€” Creates .github/copilot-instructions.md and .cursorrules (if Cursor detected) with LEX markers for safe updates
  3. βš™οΈ Configuration β€” Generates lex.yaml with defaults based on your project
  4. πŸ’Ύ Database β€” Initializes SQLite database at .smartergpt/lex/memory.db
  5. πŸ“‘ MCP Guidance β€” Shows configuration for VS Code MCP server integration

Capture Your First Frame

lex remember \
  --reference-point "Refactoring payment processing" \
  --summary "Extracted validation logic to PaymentValidator" \
  --next "Add unit tests for edge cases" \
  --modules "services/payment"

Recall Later

lex recall "payment"
# Shows your context, blockers, and architectural neighborhood

Database Maintenance

Keep your memory database optimized and backed up:

# Create a timestamped backup (memory-20251123.sqlite)
lex db backup --rotate 7
# Keeps last 7 backups, stored in .smartergpt/lex/backups/

# Optimize database (rebuild and compact)
lex db vacuum

# Set backup retention via environment variable
export LEX_BACKUP_RETENTION=14  # Keep 14 most recent backups

NDJSON Logging: Lex automatically logs operations to .smartergpt/lex/logs/lex.log.ndjson with structured fields:

  • timestamp, level, message, module, operation, duration_ms, metadata, error
  • Log files rotate automatically at 100MB
  • Logs are silent in test mode unless LEX_LOG_NDJSON=1

That's it! You now have persistent memory for your AI workflows.

Full Quick Start Guide β†’

MCP Server Integration

Use Lex with any MCP-compatible AI assistant (VS Code, Claude Desktop, etc.):

# Install the MCP wrapper
npm install -g @smartergpt/lex-mcp

# Or run directly
npx @smartergpt/lex-mcp

VS Code Configuration (.vscode/mcp.json):

{
  "servers": {
    "lex": {
      "command": "npx",
      "args": ["@smartergpt/lex-mcp"],
      "env": {
        "LEX_WORKSPACE_ROOT": "${workspaceFolder}"
      }
    }
  }
}

Claude Desktop Configuration:

{
  "mcpServers": {
    "lex": {
      "command": "npx",
      "args": ["@smartergpt/lex-mcp"]
    }
  }
}

The MCP server exposes 11 tools for episodic memory, policy validation, and architectural analysis:

  • frame_create, frame_search, frame_get, frame_list, frame_validate
  • policy_check, timeline_show, atlas_analyze
  • system_introspect, help, hints_get

MCP Server Documentation β†’


πŸ’‘ Use Cases

πŸ‘¨β€πŸ’» For Developers

  • Preserve context across work sessions with AI coding assistants
  • Document architectural decisions with searchable, timestamped snapshots
  • Enforce boundaries via CI to prevent policy violations

πŸ€– For AI Agents

  • Recall previous work using natural language search
  • Navigate large codebases with token-efficient Atlas Frames
  • Respect constraints by checking policy before suggesting changes

πŸ‘₯ For Teams

  • Onboard new members by showing architectural history
  • Track technical debt with kill patterns and forbidden edges
  • Maintain consistency across multi-module projects

πŸ“Έ See It In Action

Want to see how Lex is used in practice? Check out our dogfooding examples β€” real Frames from building Lex with Lex.

See how we:

  • Use lex recall to resume work after breaks
  • Capture context with lex remember at key checkpoints
  • Handle blockers and escalations in real development
  • Track complexity and turn costs for governance

View Dogfood Examples β†’


πŸ—οΈ Architecture

Lex is built on three pillars:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Lex Framework                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                         β”‚
β”‚  πŸ“Έ Memory Layer (lex/memory)                          β”‚
β”‚  β”œβ”€ Frame storage (SQLite)                             β”‚
β”‚  β”œβ”€ Search & recall                                     β”‚
β”‚  └─ MCP server integration                             β”‚
β”‚                                                         β”‚
β”‚  πŸ—ΊοΈ Atlas Layer (lex/shared/atlas)                     β”‚
β”‚  β”œβ”€ Module dependency graphs                           β”‚
β”‚  β”œβ”€ Fold radius computation                            β”‚
β”‚  └─ Token-aware context generation                     β”‚
β”‚                                                         β”‚
β”‚  πŸ›‘οΈ Policy Layer (lex/policy)                          β”‚
β”‚  β”œβ”€ Boundary definitions                               β”‚
β”‚  β”œβ”€ Multi-language scanners                            β”‚
β”‚  └─ CI enforcement                                      β”‚
β”‚                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Architecture Details β†’


πŸ“š Documentation

Getting Started

Guides

Security

Advanced

Development


πŸ”§ API Reference

Lex provides multiple entry points for different use cases:

Core API

import { saveFrame, searchFrames, getDb, closeDb } from '@smartergpt/lex';

const db = getDb(); // Uses .smartergpt/lex/memory.db

await saveFrame(db, {
  referencePoint: 'authentication flow',
  summaryCaption: 'Added password validation',
  statusSnapshot: { nextAction: 'Wire up permission check' },
  moduleScope: ['services/auth', 'services/password'],
  branch: 'feature/auth',
  jira: 'AUTH-123'
});

const results = await searchFrames(db, { referencePoint: 'authentication' });
closeDb(db);

Subpath Exports

ImportPurposeDocumentation
@smartergpt/lexCore API + store operationsAPI Usage
@smartergpt/lex/cliProgrammatic CLI accessCLI Output
@smartergpt/lex/cli-outputCLI JSON utilitiesCLI Output
@smartergpt/lex/storeDirect database operationsStore Contracts
@smartergpt/lex/typesAll shared typesAPI Usage
@smartergpt/lex/errorsAXError schema and utilities (v2.0+)AX Contract
@smartergpt/lex/policyPolicy loading & validationAPI Usage
@smartergpt/lex/atlasAtlas Frame generationArchitecture
@smartergpt/lex/atlas/code-unitCode unit schemasAtlas
@smartergpt/lex/atlas/schemasAtlas schemasAtlas
@smartergpt/lex/aliasesModule alias resolutionAliases
@smartergpt/lex/module-idsModule ID validationAPI Usage
@smartergpt/lex/memoryFrame payload validationAPI Usage
@smartergpt/lex/loggerNDJSON loggingAPI Usage
@smartergpt/lex/lexsonaBehavioral memory socket (v2.0+)Control Stack
@smartergpt/lex/promptsTemplate systemCanon Architecture

Full API Documentation β†’


🎯 Project Status

Current Version: 2.1.1 (Changelog)

πŸš€ 2.0.0 β€” AX-Native Release

Lex 2.0.0 is the first stable release with AX (Agent eXperience) as a first-class design principle. This release introduces structured output, recoverable errors, and Frame Schema v3 for AI agent integration.

Ready for:

  • βœ… Personal projects and local dev tools
  • βœ… Private MCP servers
  • βœ… CI/CD policy enforcement
  • βœ… Multi-user deployments with OAuth2/JWT
  • βœ… Encrypted databases with SQLCipher
  • βœ… LexRunner and other orchestrator integrations

2.0.0 Highlights:

  • AX Guarantees (v0.1) β€” Structured output, recoverable errors, reliable memory/recall (AX Contract)
  • Frame Schema v3 β€” Runner fields (runId, planHash, toolCalls) for orchestration (Schema Docs)
  • AXError Schema β€” Structured errors with code, message, context, and nextActions[] for programmatic recovery
  • CLI JSON Output β€” lex remember --json and lex timeline --json with machine-parseable event streams
  • Instructions Management β€” lex instructions CLI for syncing AI instructions across IDEs (Copilot, Cursor, etc.)
  • LexSona Socket β€” Behavioral memory API (recordCorrection/getRules) exported via @smartergpt/lex/lexsona
  • Performance β€” Cached policy module ID lookups for O(1) resolution

LexSona Integration: Lex 2.0.0 provides a public behavioral memory socket (@smartergpt/lex/lexsona) for persona-based workflows. LexSona is a separate private package (v0.2.0+) that consumes this socket to enable offline-capable persona modes. The socket API is stable and documented; LexSona implementation details remain private. Lex itself is persona-agnostic β€” the socket is a stable integration point for any behavioral engine.

See CHANGELOG v2.0.0 for full release notes.

Quality Metrics

MetricValue
Test Files78
Test Suites23
Source Files108
Exports14 subpaths
Schema Version2

🌟 Why Lex?

Cognitive Architecture for AI Agents

The Challenge: AI coding assistants lose context between sessions. They can't remember what you were working on, why you made certain decisions, or which parts of your codebase are off-limits.

Our Approach: External memory and structured reasoning β€” the same techniques human experts use to maintain context across complex, long-running projects.

The Components:

  • Episodic memory β€” Lex Frames capture what you were doing, blockers, and next actions
  • Spatial memory β€” Atlas Frames provide token-efficient architectural context
  • Policy enforcement β€” Boundaries and permissions enforced in CI
  • Orchestration β€” LexRunner coordinates multi-PR workflows

Why This Matters:

  • Continuity β€” Pick up exactly where you left off, every time
  • Architecture β€” AI assistants understand your codebase structure
  • Guardrails β€” Prevent violations before they happen
  • Accessibility β€” Works with any LLM that supports MCP

🀝 Contributing

We welcome contributions! Here's how to get started:

  1. Read the guides:

  2. Pick an issue:

  3. Submit a PR:

    • Follow commit conventions (imperative mood)
    • Include tests and documentation
    • GPG-sign your commits

Contributing Guide β†’


πŸ“¦ Related Projects

  • LexRunner β€” Orchestration for parallel PR workflows

  • LexSona (v0.2.0+) β€” Behavioral persona engine, separate private package Consumes Lex behavioral memory socket (@smartergpt/lex/lexsona) to enable offline-capable persona modes with constraint enforcement. High-level concept: persona-driven workflows without embedding persona logic in Lex core. See Control Stack documentation for conceptual framework (public portions).


πŸ“„ License

MIT License β€” Free for personal and commercial use.

See LICENSE for full text.


πŸ”— Links


Built with ❀️ by the Lex community

⭐ Star on GitHub Β· πŸ“¦ Install from npm Β· πŸ’¬ Join Discussions

πŸ’» Advanced Topics

TypeScript Build System

Lex uses TypeScript project references for deterministic, incremental builds:

npm run build      # Compile with project references
npm run clean      # Clean build artifacts
npm run typecheck  # Type-check without emitting

Why NodeNext module resolution?

  • Source uses .ts files with .js import extensions
  • TypeScript resolves imports during compilation
  • Emitted .js files work correctly in Node.js ESM
  • No confusion between source and build artifacts

Build System Details β†’

Local CI with Docker

Run CI checks locally without touching GitHub:

npm run local-ci          # Run full CI suite locally
npm run local-ci:nonet    # Run without network access

This uses ci.Dockerfile for local parity with CI checks.

Multi-Language Policy Scanning

While TypeScript scanning is built-in, Python and PHP scanners are available as examples:

# Scan Python codebase
python examples/scanners/python/scan.py src/ > python-facts.json

# Scan PHP codebase
php examples/scanners/php/scan.php src/ > php-facts.json

# Merge with TypeScript facts
lex merge ts-facts.json python-facts.json > merged-facts.json

# Check policy
lex check merged-facts.json

⚠️ Security Note: External scanners execute arbitrary code. Review before use.

Scanner Documentation β†’

Customizing Prompts & Schemas

Lex uses a precedence chain for configuration:

  1. Environment: LEX_CANON_DIR=/custom/canon (highest)
  2. Local overlay: .smartergpt/prompts/
  3. Package defaults: prompts/ (lowest)
# Customize locally
cp prompts/remember.md .smartergpt/prompts/
vim .smartergpt/prompts/remember.md

# Or use custom directory
LEX_CANON_DIR=/my/custom/canon lex remember ...

Environment Variables

VariablePurposeDefault
LEX_LOG_LEVELLog verbosity (silent, trace, debug, info, warn, error, fatal)info (tests: silent)
LEX_LOG_PRETTYPretty-print logs (1 = enabled)Auto-detect TTY
LEX_POLICY_PATHCustom policy file location.smartergpt/lex/lexmap.policy.json
LEX_DB_PATHDatabase location.smartergpt/lex/memory.db
LEX_DB_KEYDatabase encryption passphrase (required in production)None (unencrypted)
LEX_GIT_MODEGit integration (off, live)off
LEX_DEFAULT_BRANCHOverride default branch detectionAuto-detect from git
LEX_CANON_DIROverride canonical resources rootPackage defaults
LEX_PROMPTS_DIROverride prompts directoryPackage defaults
LEX_SCHEMAS_DIROverride schemas directoryPackage defaults
LEX_CLI_OUTPUT_MODECLI output format (plain or jsonl)plain
LEX_BACKUP_RETENTIONNumber of database backups to retain7
SMARTERGPT_PROFILEProfile configuration path.smartergpt/profile.yml

πŸ” Database Encryption

Protect your Frame data with SQLCipher encryption:

# Enable encryption for new databases
export LEX_DB_KEY="your-strong-passphrase-here"
lex remember --reference-point "work" --summary "Encrypted!"

# Migrate existing database
lex db encrypt --verify

# Production mode requires encryption
export NODE_ENV="production"
export LEX_DB_KEY="production-passphrase"

Key Features:

  • βœ… AES-256 encryption at rest
  • βœ… PBKDF2 key derivation (64K iterations)
  • βœ… Mandatory in production (NODE_ENV=production)
  • βœ… Migration tool with integrity verification

Security Guide β†’

Environment Configuration β†’


πŸ§ͺ Development

Prerequisites

  • Node.js: v20+ LTS (tested up to v22, see .nvmrc)
  • npm: v10+
  • Git: For branch detection

Local Setup

# Clone repository
git clone https://github.com/Guffawaffle/lex.git
cd lex

# Install dependencies
npm ci

# Build
npm run build

# Run tests
npm test

# Local CI (full suite)
npm run local-ci

Project Structure

lex/
β”œβ”€β”€ src/                     # TypeScript source (no .js files)
β”‚   β”œβ”€β”€ memory/             # Frame storage & MCP server
β”‚   β”œβ”€β”€ policy/             # Policy enforcement & scanners
β”‚   β”œβ”€β”€ shared/             # Shared utilities & types
β”‚   └── index.ts            # Main entry point
β”œβ”€β”€ dist/                    # Build output (gitignored)
β”œβ”€β”€ canon/                   # Canonical prompts & schemas
β”œβ”€β”€ docs/                    # Documentation
β”œβ”€β”€ examples/                # Usage examples & optional scanners
β”œβ”€β”€ test/                    # Test suite
└── .smartergpt/            # Local workspace (gitignored)

Running Tests

npm test                     # Run all tests (excludes git tests)
npm run test:coverage       # With coverage report
npm run test:watch          # Watch mode
npm run test:git            # Git integration tests (requires non-interactive signing)

Note: Git tests are quarantined due to mandatory GPG signing in this environment. See test/README.md for details.

Code Quality

npm run lint                # ESLint checks
npm run format              # Prettier formatting
npm run typecheck           # TypeScript validation

Contributing Guide β†’