spool-memory 0.2.3

Local-first developer memory system — persistent, structured knowledge for AI coding tools
Documentation
# Spool Configuration Example
# Copy this file to ~/.spool/config.toml and adjust paths for your setup.

# ─── Vault ────────────────────────────────────────────────────────────────────
[vault]
# Absolute path to your Obsidian vault root directory.
root = "/path/to/your/obsidian/vault"

[vault.limits]
# Maximum number of markdown files to scan in the vault.
max_files = 5000
# Maximum size (bytes) of a single file to process. Files larger than this are skipped.
max_file_bytes = 524288       # 512 KB
# Maximum total bytes to read across all scanned files.
max_total_bytes = 16777216    # 16 MB
# Maximum directory depth to traverse when scanning.
max_depth = 12

# ─── Output ───────────────────────────────────────────────────────────────────
[output]
# Default output format for retrieval commands: "prompt", "markdown", or "json".
default_format = "prompt"
# Maximum characters in rendered output.
max_chars = 12000
# Maximum number of notes to include in retrieval results.
max_notes = 8
# Maximum number of lifecycle memories to include in get/wakeup context.
max_lifecycle = 5

# ─── Developer ────────────────────────────────────────────────────────────────
[developer]
# Vault-relative paths to scan for developer-wide notes (not project-specific).
# These are always included regardless of which project is matched.
note_roots = ["00-Identity", "20-Areas", "30-Workflows"]

# ─── Projects ─────────────────────────────────────────────────────────────────
# Define one or more projects. Spool routes requests by matching --cwd against
# repo_paths. Each project can have its own note_roots, tags, and modules.

[[projects]]
# Unique identifier for this project.
id = "my-project"
# Human-readable project name.
name = "My Project"
# Absolute paths to repositories that belong to this project.
# When --cwd matches one of these, this project is selected.
repo_paths = ["/path/to/my-project"]
# Vault-relative paths to scan for this project's notes.
note_roots = ["10-Projects", "20-Areas", "40-Permanent"]
# Default tags used for scoring boost when matched.
default_tags = ["rust", "cli"]

# Modules define sub-areas within a project for finer-grained matching.
[[projects.modules]]
# Module identifier.
id = "routing"
# Source path prefixes that belong to this module.
path_prefixes = ["src/engine", "src/config"]
# Keywords that boost notes matching this module.
keywords = ["route", "routing", "match"]

[[projects.modules]]
id = "vault"
path_prefixes = ["src/vault"]
keywords = ["markdown", "frontmatter", "wikilink", "heading"]

# ─── Scenes ───────────────────────────────────────────────────────────────────
# Scenes represent common work contexts (planning, debugging, etc.).
# When task keywords match a scene, its preferred notes get a scoring boost.

[[scenes]]
id = "planning"
keywords = ["planning", "design", "architecture", "phase"]

[[scenes]]
id = "debugging"
keywords = ["debug", "error", "fix", "troubleshoot"]