Coding agent memory in Git
Store coding agent memories as Markdown files inside your repository. Use lightweight MCP tools to search and manage memories.
Get started- .memories
- generate-types-from-the-spec
- split-request-response-schemas
- apps
- webpackage
- .memories
- errors
- hydration-mismatch
- apipackage
- .memories
- read-and-write-models
1---2id: 8ef26da2-2158-49a3-9c6f-52914ca3c6513created: 2026-09-174title: Generate types from the spec5description: Orval replaced hand-written API types; HTTP client generation remains deferred. Read when changing OpenAPI schemas, investigating generated type mismatches, or choosing an API client generator.6scope:7 - apps/web8 - apps/api9doNotDelete: true10---11 12The frontend contained hand-written types that had not been updated in a while, and some new features relied on them instead of the types generated from the API's OpenAPI schema. TypeScript types are now generated with Orval, and the generated models replace the hand-written API interfaces, which are deprecated.13 14Generating the HTTP getters and actions with the same tool is deferred, and will be tested first in new features under development to find edge cases before wider adoption. A single generated definition reduces duplication and inconsistency, and Orval supports `anyOf` and `oneOf`, which the previous generator did not.15 16Two alternatives were rejected. `@openapitools/openapi-generator` offers fewer customization options and has trouble with `anyOf` and `oneOf`, and `@openapi-codegen` does not generate SWR hooks. Because every change to the specification is reflected in the generated SDK, the API's OpenAPI specification must be kept up to date.Useful memories
- industry intel
- glossary
- gotchas
- known edge cases
- past incidents
- business model
- failed approaches
- customer context
- recurring errors
- blockers
- architectural decisions
- unresolved questions
- rejected alternatives
- product context
- team members & ownership
- compatibility constraints
- rejected designs
Works with your stack
- Claude Code
- Codex
- Cursor
- Gemini CLI
- OpenCode
- Antigravity
- GitHub Copilot
- Claude Code
- Codex
- Cursor
- Gemini CLI
- OpenCode
- Antigravity
- GitHub Copilot
TypeScript
Python
Go
Rust
JavaScript
Java
Ruby
PHP
Swift
TypeScript
Python
Go
Rust
JavaScript
Java
Ruby
PHP
Swift
What’s in Tiramisu?
Fast BM25 Search
Uses lightweight BM25 keyword search instead of expensive vector embeddings and rerankers.
Expiration & Pruning
Memories can expire after a configurable period. Expired memories are recommended for deletion.
Scoped retrieval
Memories are scoped to specific paths, so context always remains relevant to the search.
Custom instructions
Write your own instructions on when memories should be saved and how they should be written.
Project, personal, team, and company
Create one repo per tenant to separate memories. Tenants are customizable, e.g., client or team.
Frontmatter JSON schema
Define a JSON Schema for memory frontmatter and add custom fields.
Edit and delete protection
Prevent the agent from deleting or editing certain memories.
Directory tags
Any directory between .memories and a memory folder becomes an indexed search tag.
Attachments
Attachments are excluded from the search index and can be read after the associated memory is retrieved.
Automated memory placement
Automatically detects packages and stores memories into the relevant project.
Lightweight MCP server
Only 6 MCP tools: insert, update, delete, upvote, prune, and search.
Why store curated memories in Git?
Branch synchronization
If code is reverted or branched, its memories revert or branch with it automatically.
Reviewable
Memories are Markdown files inside your repo, reviewed in PRs alongside code.
Portable by Default
If you stop using Tiramisu, you can keep your data.
Use fewer tokens for memory
Tiramisu stores short, curated memories instead of full conversation transcripts and retrieves only what’s relevant to the current task.