Web UI for the Engram memory ecosystem.
Ecosystem: Memory API • Code Search • Local Embeddings • Dashboard
Visualize, search, and manage your AI agent's memory. Built with Next.js, Tailwind, and shadcn/ui.
| Feature | Description |
|---|---|
| 📊 Overview | Key metrics, health status, API usage charts |
| 🧠 Memories | Browse, search, filter, and edit stored memories |
| 📈 Analytics | Memory trends, type distribution, layer breakdown |
| 🔗 Ensemble | Multi-model embedding management, coverage stats |
| 🕸️ Graph | D3 force-directed visualization of memory relationships |
| 👥 Users | View users and their memory statistics |
| 🔑 API Keys | Create and manage API keys |
| ⚙️ Settings | Configure LLM providers, vector storage, webhooks |
| 📚 Docs | Built-in documentation and quickstart guides |
┌─────────────────────────────────────────────────────────────┐
│ Engram Dashboard 🔔 ⚙️ beaux ▼ │
├──────────────┬──────────────────────────────────────────────┤
│ │ │
│ 📊 Overview │ ┌────────────────────────────────────────┐ │
│ 🧠 Memories │ │ Total Memories: 1,247 │ │
│ 📈 Analytics│ │ Active Users: 3 │ │
│ 🔗 Ensemble │ │ API Calls (24h): 4,521 │ │
│ 🕸️ Graph │ │ Health: ✅ All systems operational │ │
│ 👥 Users │ └────────────────────────────────────────┘ │
│ 🔑 API Keys │ │
│ ⚙️ Settings │ ┌────────────────────────────────────────┐ │
│ │ │ Memory Type Distribution │ │
│ ─────────── │ │ ████████████ FACT (45%) │ │
│ 📚 Docs │ │ ████████ PREFERENCE (32%) │ │
│ │ │ ████ EVENT (15%) │ │
│ │ │ ██ TASK (6%) │ │
│ │ │ █ CONSTRAINT (2%) │ │
│ │ └────────────────────────────────────────┘ │
└──────────────┴──────────────────────────────────────────────┘
# Clone
git clone https://github.com/heybeaux/engram-dashboard
cd engram-dashboard
# Install
pnpm install
# Configure
cp .env.example .env.local
# Edit NEXT_PUBLIC_ENGRAM_API_URL if needed
# Run
pnpm devOpen http://localhost:3000.
Requirements:
- Node.js 18+
- Engram API running on localhost:3001
To access the dashboard from other devices on your network:
# Start with host binding
pnpm dev --hostname 0.0.0.0
# Or for production
pnpm build
pnpm start --hostname 0.0.0.0Then access from any device: http://<your-ip>:3000
Finding your IP:
# macOS/Linux
ifconfig | grep "inet " | grep -v 127.0.0.1
# Windows
ipconfig | findstr "IPv4"| Variable | Default | Description |
|---|---|---|
NEXT_PUBLIC_ENGRAM_API_URL |
http://localhost:3001 |
Engram API URL |
NEXT_PUBLIC_CODE_API_URL |
http://localhost:3002 |
engram-code API URL (optional) |
For LAN access, set the API URL to your machine's IP:
NEXT_PUBLIC_ENGRAM_API_URL=http://192.168.1.100:3001┌─────────────────────────────────────────────────────────────┐
│ engram-dashboard │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Next.js 14 (App Router) │ │
│ │ │ │
│ │ /dashboard - Overview metrics │ │
│ │ /memories - Memory browser │ │
│ │ /memories/:id - Memory detail + embeddings tab │ │
│ │ /analytics - Trends and charts │ │
│ │ /ensemble - Multi-model management │ │
│ │ /graph - D3 memory visualization │ │
│ │ /users - User management │ │
│ │ /api-keys - Key management │ │
│ │ /settings - Configuration │ │
│ │ /docs - Documentation │ │
│ └───────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────────────▼──────────────────────────────┐ │
│ │ API Clients │ │
│ │ │ │
│ │ engram-client.ts → Engram Memory API (3001) │ │
│ │ ensemble-client.ts → Ensemble/Re-embedding API │ │
│ │ code-client.ts → engram-code API (3002) │ │
│ └───────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────────────▼──────────────────────────────┐ │
│ │ UI Components (shadcn/ui) │ │
│ │ │ │
│ │ Button, Card, Dialog, Table, Badge, Chart... │ │
│ │ + custom: MemoryCard, GraphView, EnsemblePanel... │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Search, filter, and explore stored memories:
┌─────────────────────────────────────────────────────────────┐
│ Memories + Create │
├─────────────────────────────────────────────────────────────┤
│ 🔍 Search... Type: [All ▼] Layer: [All ▼] User: beaux│
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 🏥 CONSTRAINT Score: 0.95 │ │
│ │ I'm allergic to peanuts 2 hours ago │ │
│ │ Safety-critical • Never evicted │ │
│ └─────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ ⭐ PREFERENCE Score: 0.82 │ │
│ │ I prefer dark mode Yesterday │ │
│ │ Layer: IDENTITY │ │
│ └─────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 📝 FACT Score: 0.78 │ │
│ │ I live in Vancouver 3 days ago │ │
│ │ Layer: IDENTITY │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Click a memory to view details:
| Tab | Content |
|---|---|
| Overview | Full content, 5W1H extraction, confidence scores |
| Embeddings | Per-model embedding status (✅ embedded, ⏳ pending, ❌ failed) |
| Relationships | Linked memories, contradictions |
| History | Creation, updates, access log |
Multi-model embedding management:
┌─────────────────────────────────────────────────────────────┐
│ Ensemble Overview │
├─────────────────────────────────────────────────────────────┤
│ Model Registry │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Model │ Status │ Dims │ Weight │ Coverage │ │
│ ├──────────────────────────────────────────────────────┤ │
│ │ bge-base │ Active │ 768 │ 1.0 │ ██████ 100% │ │
│ │ nomic │ Active │ 768 │ 0.8 │ █████░ 85% │ │
│ │ minilm │ Shadow │ 384 │ 0.5 │ ███░░░ 50% │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ Re-embedding Jobs [Run Now] │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Job #42 │ Complete │ 1,247/1,247 │ 3m 24s │ │
│ │ Job #41 │ Complete │ 856/856 │ 2m 12s │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Interactive D3 force-directed graph showing memory relationships:
┌──────────────┐
│ Allergic to │
│ peanuts │ 🏥 Safety-critical
└──────┬───────┘
│ related
┌────────────┼────────────┐
│ │ │
┌─────▼─────┐ ┌────▼────┐ ┌─────▼─────┐
│ Health │ │ Diet │ │ Emergency │
│ records │ │ prefs │ │ contacts │
└───────────┘ └─────────┘ └───────────┘
Legend:
● CONSTRAINT (red ring) ○ FACT
◐ PREFERENCE ◑ EVENT
⬤ Large = high score ○ Small = low score
Interactions:
- Drag nodes to reposition
- Click node to view memory details
- Scroll to zoom
- Hover for tooltip
engram-dashboard/
├── src/
│ ├── app/
│ │ ├── (dashboard)/
│ │ │ ├── dashboard/ # Overview
│ │ │ ├── memories/ # Memory browser
│ │ │ │ └── [id]/ # Memory detail
│ │ │ ├── analytics/ # Charts & trends
│ │ │ ├── ensemble/ # Multi-model view
│ │ │ ├── graph/ # D3 visualization
│ │ │ ├── users/ # User management
│ │ │ ├── api-keys/ # Key management
│ │ │ └── settings/ # Configuration
│ │ └── docs/ # Documentation pages
│ ├── components/
│ │ ├── layout/ # Sidebar, Header
│ │ ├── ensemble/ # Multi-model components
│ │ └── ui/ # shadcn/ui components
│ └── lib/
│ ├── engram-client.ts # Memory API client
│ ├── ensemble-client.ts # Ensemble API client
│ ├── types.ts # Type definitions
│ └── utils.ts # Utilities
├── public/
├── next.config.mjs
├── tailwind.config.ts
└── package.json
# Run development server
pnpm dev
# Build for production
pnpm build
# Start production server
pnpm start
# Lint
pnpm lint
# Type check
pnpm tsc --noEmit| Endpoint | Method | Description |
|---|---|---|
/v1/health |
GET | Health check and metrics |
/v1/memories |
GET | List memories |
/v1/memories/:id |
GET | Get memory detail |
/v1/memories/query |
POST | Semantic search |
/v1/memories/graph |
GET | Graph data |
/v1/context |
POST | Load context |
| Endpoint | Method | Description | Status |
|---|---|---|---|
/ensemble/status |
GET | Ensemble config | ✅ |
/ensemble/models |
GET | Model registry | 🔧 Proposed |
/ensemble/coverage |
GET | Coverage stats | 🔧 Proposed |
/v1/reembedding/status |
GET | Job status | ✅ |
/v1/reembedding/run |
POST | Trigger job | ✅ |
Endpoints marked "Proposed" gracefully degrade with placeholder data.
| Component | Technology |
|---|---|
| Framework | Next.js 14 (App Router) |
| Styling | Tailwind CSS |
| Components | shadcn/ui |
| Charts | Recharts |
| Graph | D3.js |
| Icons | Lucide React |
- Fork the repository
- Create a feature branch
- Make your changes
- Run
pnpm lintandpnpm build - Submit a pull request
MIT
See what your AI remembers.