Terminal-first professional memory for builders.
Engineers build, debug, and decide daily—but most of that experience disappears. Logy captures it in under 2 minutes, enriches it with AI, and preserves it in a searchable knowledge graph.
| Layer | Choice | Why |
|---|---|---|
| Runtime | Python 3.12+ | Ecosystem, type hints, speed |
| CLI | Typer + Rich | Industry standard, great DX |
| TUI | Rich | Terminal UI built with Rich Live |
| API | FastAPI | Async, auto-docs, Pydantic-native |
| DB | SQLite (sqlite-utils) | Zero-infra, local-first, battle-tested |
| ORM | SQLModel | Pydantic + SQLAlchemy, no friction |
| Migrations | Alembic | Needed once schema evolves |
| AI | LiteLLM | Provider-agnostic, swap models freely |
| Knowledge | Cognee | Graph builder + semantic search |
| Graph | NetworkX | Graph model for knowledge representation |
| Web | React 18 + Vite + Tailwind CSS | Standard modern stack |
| Graph Viz | React Flow | Interactive knowledge graph |
| Package mgmt | uv | Fast Python package manager |
| Linting | ruff | Fast, unified linter + formatter |
| Testing | pytest | Standard |
| Pre-commit | pre-commit | Automated quality gates |
AI Constraint: AI enriches entries (grammar, entities, tech extraction). AI never writes them.
typer CLI ──► Rich TUI ──► FastAPI ──► SQLite (source of truth)
│
LiteLLM enrichment
│
cognee engine
│
knowledge graph (NetworkX)
│
react flow web dashboard
logy/
├── apps/
│ ├── cli/ # Typer CLI entrypoint + commands
│ │ ├── __init__.py
│ │ ├── main.py
│ │ ├── commands/
│ │ │ ├── log.py
│ │ │ ├── search.py
│ │ │ ├── projects.py
│ │ │ ├── review.py
│ │ │ └── serve.py
│ │ └── tui/ # Rich TUI
│ │ ├── __init__.py
│ │ ├── app.py
│ │ ├── flow.py
│ │ ├── keys.py
│ │ ├── state.py
│ │ └── views/
│ ├── server/ # FastAPI backend
│ │ ├── api/
│ │ ├── services/
│ │ ├── models/
│ │ ├── schemas/
│ │ ├── database/
│ │ └── workers/
│ └── web/ # React + Vite dashboard
│ ├── src/
│ ├── pages/
│ ├── graph/
│ └── components/
├── packages/
│ ├── ai/ # LiteLLM enrichment pipeline
│ │ ├── __init__.py
│ │ ├── extraction.py
│ │ ├── grammar.py
│ │ └── prompts/
│ ├── cognee/ # Cognee integration
│ │ ├── __init__.py
│ │ ├── ingest.py
│ │ ├── graph.py
│ │ ├── search.py
│ │ ├── relationships.py
│ │ └── memory.py
│ ├── shared/ # Shared config, constants, utils
│ │ ├── __init__.py
│ │ ├── config.py
│ │ ├── constants.py
│ │ └── utils.py
│ └── database/ # SQLModel models + migrations
│ ├── __init__.py
│ ├── models.py
│ ├── migrations/
│ └── repository.py
├── data/ # Runtime data (gitignored)
│ ├── sqlite.db
│ └── graph/
├── tests/
│ ├── test_cli/
│ ├── test_api/
│ ├── test_ai/
│ └── test_cognee/
├── pyproject.toml
├── README.md
├── CONTEXT.md # ← this file
└── AGENTS.md
pyproject.tomlwith uv, ruff config- Typer CLI with
log,search,projects,servecommands - SQLModel schema + SQLite setup
logcommand writes entries to DB
- LiteLLM integration (provider-agnostic)
- Grammar correction pipeline
- Entity + technology extraction
- Difficulty estimation
- Background enrichment worker
- Cognee ingestion pipeline
- NetworkX graph construction
- Semantic search via Cognee
- Relationship extraction
- React + Vite + Tailwind scaffolding
- FastAPI serves API
- Timeline view
- Interactive knowledge graph (React Flow)
- Weekly review generation
- Rich TUI with screens for log, search, projects, review
- Rich formatting for terminal display
- Streak tracking
- Daily logging with
logcommand - Project management (create, list, timeline)
- Semantic search via Cognee
- AI enrichment (grammar, entities, tech, difficulty)
- Interactive knowledge graph (web)
- Timeline view (CLI + web)
- Weekly review auto-generation
- Streak tracking
Auth, cloud sync, teams, mobile, AI chat, markdown editor, attachments, GitHub integration, VS Code extension, resume generator, interview mode.
- Terminal-first: logging happens where work happens
- Human-first: user writes every entry; reflection IS the product
- AI-assisted: AI enriches, never writes
- Local-first: everything works offline; net only for AI
- Fast: entry in under 2 minutes
- Permanent memory: every entry feeds the lifelong graph