Persistent memory for your coding agents, stored as Markdown files you own.
Almanac saves useful knowledge from your coding sessions and makes it available when you need it again. Decisions, bug fixes, project conventions, and unfinished work can carry over to the next session—even when you switch agents or machines.
For example, your agent can look up:
- “Why did we choose this database?”
- “Have we fixed this error before?”
- “What should I know before changing this file?”
- “Where did we leave off yesterday?”
Your knowledge lives in a vault: a folder of readable Markdown notes, linked together and tracked in Git. You can edit it yourself, browse it in Obsidian, or search it from an agent or the terminal.
Get started · Choose an integration · Features · Documentation
A populated example vault: each dot is a note, and each line is a link between notes. Explore the demo in Obsidian or browse its Markdown files. This illustration uses fictional notes and is not an Obsidian screenshot.
- Capture useful work. At the end of a supported session, Almanac records a short activity entry. Substantial sessions with new insights can produce focused notes about what you learned. You can also save something explicitly.
- Bring it back when relevant. Search your past work, or use an integration that supplies project context at session start, before a prompt, and when reading a file.
- Keep the knowledge useful. Link related notes, track which conclusions have changed, and optionally consolidate recurring patterns or archive stale material.
With Claude Code hooks and the Pi extension, much of this happens automatically. Other MCP clients use explicit tool calls and agent instructions. The capabilities are shared; how they are triggered depends on your integration.
The standard installer supports Linux and macOS. You need Python 3.10+, Git, and Bash. For the hook-based setup, install and authenticate Claude Code first; background note extraction uses Claude by default.
From your usual projects directory:
git clone https://github.com/AndriGitDev/almanac.git
cd almanac
./install.shThe installer creates a vault at ~/almanac, installs Claude Code hooks and skills, and links the almanac command into ~/.local/bin when possible. You can choose a different vault location:
ALMANAC_VAULT_PATH=~/my-notes ./install.shStart a new Claude Code session in one of your projects. As knowledge accumulates, relevant context appears in [vault] messages. You can also ask the agent to remember a decision with /almanac, or ask it to look up a past fix.
Check your setup with:
almanac healthIf almanac is not on your PATH, use ./bin/almanac from the checkout instead.
Search setup: basic search can fall back to plain text matching. The automatic Tenet recall and file-context hooks require QMD; the installer offers QMD setup when available. See search backends for the options and installation for the full setup guide.
MCP—the Model Context Protocol—lets an agent call Almanac's search, capture, and maintenance tools.
| Use Almanac with… | Setup | What you get |
|---|---|---|
| Claude Code | ./install.sh |
Session capture, context hooks, skills, and a search agent. |
| Codex, Cursor, Windsurf, and other MCP clients | ./install.sh --mcp |
Search and capture tools. Claude Code and Codex are registered when their CLIs are available; other clients need configuration. |
| OpenCode | Follow the OpenCode guide after installing Almanac. | MCP search and capture, transcript support, and an optional plugin for session activity entries. |
| Pi | From the checkout, run pi -e ./extensions/almanac.ts. |
Context injection, automatic capture, and a dashboard for reviewing and processing queued captures. See Pi setup for package installation. |
| A remote vault | ./install.sh --remote https://your-vault.example.com |
Connect local hooks to a shared remote vault over HTTP. See remote deployment for hosting and client configuration. |
Flags can be combined. For example, ./install.sh --experimental --mcp adds MCP support and the experimental consolidation extras.
Almanac separates short session activity entries from lasting knowledge. Small sessions leave a lightweight record; sessions that meet the capture thresholds and contain new insights can create individual notes, each focused on one idea.
Notes can include the project, branch, session, tags, confidence, and the conditions under which a conclusion applies. Explicit capture is available through skills and MCP tools. Smart storage checks for similar notes before writing and can suggest updating or superseding an existing note.
Search by topic, exact identifier, file path, or quoted phrase. Narrow results by project, note type, tags, confidence, dates, branch, or session. Metadata queries can also count notes, group them by date, or list recent activity without reading every note.
From the terminal:
almanac search "why did we change the deployment process"Inside an MCP client, the agent can use almanac_search, almanac_query, or almanac_get to search, filter, or read a known note.
Tenet is Almanac's automatic retrieval system. With the relevant hooks enabled and QMD available, it provides a project briefing at session start, recalls notes related to a prompt, and supplies file-specific knowledge before a read.
Relevance thresholds, project filtering, duplicate suppression, and context limits control what gets injected. Optional deeper retrieval can follow links between notes or use a bounded background agent to investigate harder questions. Deep recall and agentic retrieval are experimental and disabled by default.
How retrieval works · Retrieval settings
Notes link to one another with [[wikilinks]]. Ask what links to a decision, explore related notes, or follow the chain from an older conclusion to its replacement using almanac_related.
Project indexes group notes and session history by project. Optional regenerated project hubs and a compact vault map provide navigable summaries as the vault grows. Open the vault in Obsidian for graph browsing and note views, or use any Markdown editor.
Project hubs and vault map · Graph tools
A note can record how confident you are, when it became valid, and what later replaced it. Almanac can follow those validity chains and exclude explicitly invalidated notes from normal retrieval. An optional background contradiction check can flag conflicting conclusions for review or apply qualifying updates.
Confidence and usefulness are tracked separately. Pinned notes stay protected from retrieval decay, recently resurfaced notes get temporary protection, and older unused notes can become less prominent.
Confidence, durability, and validity
Use /almanac-defrag to review outdated or superseded knowledge. Optional automatic sweeps can archive eligible old, unused notes with low confidence. A separate session-log lifecycle can promote reused activity records or archive expired ones.
Automatic archiving and session-log lifecycle sweeps are off by default. Archiving moves material into archive/ and is reversible.
Archiving settings · Session-log lifecycle
Inception groups similar notes and uses an LLM to write broader pattern notes. It can connect repeated fixes or recurring design choices that were captured in separate sessions.
This is an optional, experimental feature. Install the extras with ./install.sh --experimental, configure its dependencies, and enable inception_enabled when ready. You can preview consolidation with /inception --dry-run. It requires QMD and additional Python packages.
Skills give agents ready-made workflows for saving knowledge and recovering working context. Available commands depend on the host and installed skill set; in Pi, /almanac opens the dashboard.
| Skill | Use it to… |
|---|---|
/almanac |
Save useful knowledge from the current session. |
/concierge |
Search past work before answering a history-dependent question. |
/start-fresh |
Capture what matters and checkpoint pending work before clearing context. |
/continue-work |
Recover context from local project state and the vault. |
/almanac-defrag |
Review and archive stale knowledge. |
/preserve |
Keep a file or bundle intact, with a manifest and an index note. |
/inception |
Find and synthesize cross-session patterns; requires the experimental setup. |
Preserved bundles are useful for screenshots, research packets, or handoff material that needs to stay together. They are copied by default; moving the originals requires an explicit request.
Skills and workflows · Pi dashboard and queue review
Host a vault yourself and connect agents over HTTP, or export a portable archive to move a vault between machines. Remote mode keeps a local vault as well; it is additive to the local setup.
Portable archives include notes, project records, vault identity, and sync/deletion state. Search indexes are rebuilt rather than treated as the source of truth. Imports report conflicts by default so you can choose how to resolve them.
Remote hosting and sync · Portable archives
Automated runners can fetch a compact context packet before work and submit a sanitized lesson afterward. Lesson candidates are queued for review by default; batch failure synthesis can group recurring problems and suggest follow-up actions.
Almanac stores the lessons. The runner keeps its execution logs, queues, and evidence in its own systems.
Automation integration contract
almanac health checks vault and installation health. almanac doctor is an alias. For retrieval diagnostics, almanac retrieval-report shows what was searched, what surfaced, and suggestions for tuning; it can also export an HTML report.
almanac health
almanac retrieval-report --html --output /tmp/almanac-retrieval.htmlRetrieval logging must be enabled to collect the corresponding diagnostic history. Live integration probes are opt-in through almanac health --deep.
Health checks · Logging configuration
This illustrative decision note belongs to a fictional project. The fields at the top describe the note; the body explains the decision in ordinary language.
---
title: Run database migrations as a separate deployment step
type: decision
tags: [deployment, database]
source: session
certainty: 4
validity-context: production deployments of the example-api project
project: example-api
date: 2026-10-20T14:30
---
For this project, run migrations once before starting the new application
instances. We chose a separate deployment step so each instance does not
try to run the same migration during startup.
See [[deployment-checklist]] for the agreed sequence.The vault's main folders are:
~/almanac/
├── notes/ Decisions, discoveries, fixes, and patterns
├── fleeting/ Short session activity records
├── projects/ Project indexes and context
└── archive/ Archived notes and preserved bundles
Notes remain readable without Almanac. Git provides a change history, and search indexes can be rebuilt from the Markdown files.
Almanac can select an available search backend automatically, or you can choose one in configuration.
| Backend | What it provides | Setup |
|---|---|---|
| Grep | Basic text matching. | No extra search dependencies. |
| Embedded | Full-text and semantic search in a local SQLite index. | Optional Python dependencies and an embedding model; included in the Docker setup. |
| QMD | Keyword and semantic search with reranking through an external CLI. | Optional QMD installation; required for Tenet's automatic recall hooks and Inception. |
Basic text search does not need an LLM. Note extraction, pattern synthesis, and optional AI-assisted retrieval use the configured model backend and may incur provider costs. Claude is the default for extraction; other CLI and API backends are configurable. The embedded search backend can use local embeddings without an API key.
Search backend setup · Model configuration · All settings
The features above are exposed through 20 MCP tools. Most users can start with their integration guide; the full generated reference is available below.
Expand the complete MCP tool reference
The MCP server currently registers 20 tools. This table is generated from almanac.mcp_inventory.MCP_TOOL_INVENTORY; refresh/check it with almanac tools --markdown or almanac tools --check.
| Tool | Category | What it does | When to use it |
|---|---|---|---|
almanac_search |
Read | Search vault notes with BM25, optional semantic search, hybrid ranking, temporal decay, PageRank/access-log boosts, concrete: auto|true|false for exact identifiers and quoted phrases, and optional typed post-filters (type, tags, certainty, dates, branch, session_id, project) that mirror almanac_query's filter semantics. |
Use before answering questions about past decisions, prior fixes, project history, session context, recurring patterns, or exact identifiers, including when ranked retrieval also needs metadata constraints. Do not use it to read a known note path. |
almanac_query |
Read | Run typed metadata filters, counts, date buckets, and recent-session listings over note frontmatter without reading full note bodies. | Use for count/list/filter questions by project, type, tag, certainty, source, date, branch, or session_id; use almanac_search instead for topical recall or semantic retrieval. |
almanac_contradictions |
Read | Inspect a topic for deterministic validity chains (note -> invalidated_by -> ... with dates) built from valid_from/invalidated_by frontmatter; the pre-MEM-163 lexical polarity-guessing report is available behind contradictions_lexical_fallback config. |
Use when comparing competing notes about the same topic, checking whether a note has been explicitly invalidated, or walking a note's full validity history alongside certainty/date context. |
almanac_related |
Read | Walk the wikilink graph around a note: outbound/inbound links, a depth-limited neighborhood, and its supersession chain. Pure topology, no relevance scoring. | Use for "what links to X", neighborhood expansion, or finding the current/superseded version of a note; use almanac_search instead for topical/semantic retrieval. |
almanac_briefing |
Lifecycle | Build a compact session-start briefing payload for host adapters. | Host-adapter primitive for automatic injection; not a general user-answering tool. |
almanac_recall |
Lifecycle | Build prompt-time recall context for host adapters. | Host-adapter primitive for automatic injection before an agent turn; not a general user-answering tool. |
almanac_tool_context |
Lifecycle | Build read-tool context for a concrete file path. | Host-adapter primitive for automatic read-tool injection; not for explicit recall/search requests. |
almanac_session_context |
Lifecycle | Build a one-call budgeted session context packet that can include status, recent context, recall, and tool-context preview metadata. | Host-adapter primitive that replaces separate briefing/recall/status calls when a host wants one compact payload. |
almanac_get |
Read | Read full note content by name or path. | Use after almanac_search when a returned path needs full content, or directly when the user already supplied an exact note path/name. |
almanac_status |
Operational | Report vault health/status, note counts, project counts, and safe config summary. | Use for operational checks and setup debugging; not for recall, project history, or note content. |
almanac_list |
Sync | List notes with optional content hashes for lightweight inventory/sync. | Use for sync/inventory clients; not for topical recall or reading notes. |
almanac_store |
Write | Write a single knowledge note with managed frontmatter and project indexing. | Low-level write primitive for sync/automation or agents without skill support; interactive Claude/Codex sessions should prefer /almanac or local hooks. |
almanac_replace_note |
Sync | Replace an existing note at a known path for explicit conflict resolution. | Use only after a sync client has identified the exact remote path to resolve; it is not a general note creation primitive. |
almanac_store_smart |
Write | Search for close matches before writing, and return duplicate/update/supersede suggestions. | Use when you want a write decision with candidate paths/reasons before creating a note; it avoids obvious duplicates by default. |
almanac_daily_snapshot |
Write | Write a deterministic notes/daily-<date>-<repo-slug>.md snapshot with an append-only supersede chain. |
Low-level structured daily-snapshot primitive for path-controlled integrations; do not use for ordinary notes, interactive memory capture, or session triage. |
almanac_capture |
Write | End-of-session triage from a transcript path or structured summary; writes fleeting session state and optionally an atomic note. | Low-level SessionEnd equivalent for agents without hook support; not a replacement for interactive /almanac workflows. |
almanac_capture_run_lesson |
Write | Queue or explicitly write one typed automated-run lesson candidate with provenance refs. | Use for learning after automated runs; queues by default and rejects raw logs, transcripts, run ledgers, proofs, and patch blobs. |
almanac_synthesize_failures |
Write | Dry-run batch synthesis from sanitized external run summaries, with optional approved lesson-note writes. | Use for batch failure learning from automated runs; rejects raw logs/run stores and never executes advisory issue/gate/docs actions. |
almanac_preserve |
Write | Archive a file or directory bundle under archive/<slug>/ with a manifest, a lightweight index note, and optional project-linking. |
Use for evidence packets, screenshots, handoff bundles, or other artifacts that should stay intact; copy by default, move only when explicitly requested. Do not use it for ordinary knowledge capture or atomic notes. |
almanac_reindex |
Maintenance | Rebuild the search index from all markdown files after out-of-band changes. | Use after bulk adds, git pull, Obsidian sync, or stale-index evidence; not as the default response to a broad/empty search miss. |
| I want to… | Read this |
|---|---|
| Install, update, troubleshoot, or uninstall Almanac | Installation |
| Change capture, retrieval, model, or maintenance settings | Configuration |
| Connect an MCP client | MCP guide |
| Use OpenCode or Pi | OpenCode integration · Pi extension |
| Host or connect to a remote vault | Remote deployment |
| Understand the internals or note format | How it works · Architecture · Note schema |
| Contribute or prepare a release | Contributing · Releasing |
Browse the full documentation index for more.
almanac updateTo remove the installed integrations:
cd /path/to/almanac
./uninstall.shThe uninstaller leaves your vault and notes in place. See installation for reinstall options and details.
Almanac is an independent fork of Memento Vault, originally created by Victor Valenzuela. It retains the upstream Git history and MIT copyright notice. Almanac uses its own CLI, Python package, MCP tools, configuration, and environment variables; Memento compatibility has been retired.
Released under the MIT license.