Memory & Learning
August 28, 2026 · View on GitHub
Kiro Crew has persistent memory that survives across sessions. It remembers your preferences, project context, daily activity, and corrections you teach it.
Memory Types
Preferences (preferences.md)
Your personal preferences — coding style, tools you prefer, communication style. Updated automatically by the consolidator after ~30 messages.
Projects (projects.md)
Active project context — what you're working on, key decisions, blockers. Updated alongside preferences.
Daily History (history/{date}.md)
Conversation summaries organized by date. Natural decay:
- Last 14 days: full detail (days 0–13)
- 14–60 days: first entry per day + count
- 61–180 days: date + entry count only
- 181–365 days: retained on disk but not loaded into context
- 365+ days: pruned automatically
Lessons (lessons.jsonl or vector store)
Corrections and rules you teach Kiro Crew. Two ways to create:
- Explicit: say "remember to always use pytest" → saved immediately
- Implicit: correct Kiro Crew during conversation → extracted during consolidation
Lessons have two scopes:
- Global (default): shared across all workspaces
- Repository-scoped: an optional
repo_scopepath fragment restricts a lesson to sessions whose active project is inside that repository tree
Memory Modes
Each session can operate in one of three memory modes:
| Mode | Reads Memory | Writes Memory | Consolidates | Use Case |
|---|---|---|---|---|
| Persistent (default) | ✅ | ✅ | ✅ | Normal work |
| Incognito | ✅ | ❌ | ❌ | Sensitive tasks — reads context but blocks learn_add and consolidation |
| Temporary | ❌ | ❌ | ❌ | Isolated experiments — no memory interaction at all |
Set via the dashboard Welcome view (ghost button), the mode icon in the chat
header, Slack (!incognito / !temporary prefix), or Telegram (/incognito /
/temporary). Telegram spells them as commands because it has a command grammar;
the modes, the guarantees and the durability are the same on both channels, and
both accept a question after the modifier to mark the conversation and answer in
one message.
All modes still write session JSONL files (for history/resume). Incognito blocks learn_add and consolidation. Temporary additionally blocks memory reads — no preferences, history, or lessons are injected into the prompt.
Teaching Kiro Crew
Just tell it naturally:
- "Always use dark mode"
- "Never use
rm -rfwithout confirmation" - "Remember that our team uses pytest-asyncio strict mode"
- "Prefer ruff over flake8 for linting"
Kiro Crew saves these via the learn_add MCP tool. View them with learn_list
or on the dashboard Overview → Lessons tab.
Workspaces
Markdown memory is workspace-scoped: each workspace stores memory/preferences.md, memory/projects.md, and memory/history/{date}.md beneath its workspace directory. Legacy JSONL lessons are also workspace-local; vector memory defaults to memory.db under the Kiro Crew data directory. Lessons are global unless their optional repo_scope restricts them to a project tree.
Vector Memory
The vector-memory subsystem is always enabled:
- Semantic memory: structured key-value store with confidence scoring
- Episodic memory: conversation fragments searchable by meaning
- Embeddings: Qwen3-Embedding-0.6B running in-process (no Ollama or any other server to install — the runtime is bundled; no data leaves your machine)
The embedding model (~610MB) downloads automatically in the background the first time the gateway starts, over HTTPS from the Kiro Crew CDN — failed downloads retry automatically with backoff, and again on the next gateway start; the Memory tab shows download progress. Once downloaded, the model loads in the background too, so nothing ever waits on it. While the model is downloading or loading, memory falls back to keyword search and switches to semantic search as soon as the model is ready — no restart needed. Requires ~610MB disk for the model and ~700MB RAM once the model is loaded.
The bundled model is qwen3-embedding:0.6b (1024 dimensions). KIROCREW_EMBED_MODEL_URL overrides memory.embed_model_url for the download URL; KIROCREW_EMBED_MODEL_PATH or memory.embed_model_path selects a local GGUF instead of the bundled model.
Consolidation
Kiro Crew automatically consolidates conversations into memory:
- Preferences/projects: every 30 messages per session
- Daily history + lessons: after 3 hours idle per session
No manual action needed — it happens in the background.
Reading Memory Programmatically
The markdown layer is readable through the CLI, so consumers depend on an interface rather than the on-disk layout:
kirocrew memory show [preferences|projects|history]— print the markdown layer (all three when no target is given).--format jsonreturns structured entries withpath,updated_at, andcontent;--since YYYY-MM-DDlimits history to days on or after that date.kirocrew memory export --include-markdown— add amarkdowncollection to the JSON export. Without the flag the export shape is unchanged.
Both run non-interactively (no TTY or editor needed), so they work from scheduled jobs.
Editing Memory
- Dashboard: Overview → Memory tab → edit preferences.md or projects.md
- Chat: ask Kiro Crew to update its memory files directly