Basic Memory
Basic Memory Team

Your AI Can Now Filter Your Notes Like a Spreadsheet

Your AI Can Now Filter Your Notes Like a Spreadsheet

If you’ve been using Basic Memory for a while, your notes already have labels on them — your AI has been adding them automatically. Things like status, type, tags. You may not have even noticed.

These labels live in a small block at the top of every note called frontmatter. It looks like this:

---
title: Website Redesign
status: in-progress
priority: high
assigned: sarah
tags: [design, q2]
---

Until now, those labels were treated like any other text in your notes. Frontmatter wasn’t special. Searching for “in-progress” meant searching for that phrase everywhere - in note bodies, in headings, in labels — and hoping the right things came back.

With the newly released v0.19, frontmatter is special. Your AI can now filter by those labels precisely.

Plain English Works

You don’t need to learn any new syntax. Ask your AI the way you normally would:

“What are my active tasks?”

“Show me everything marked high priority.”

“Find all my notes tagged with ‘client-work’.”

Your AI translates those questions into precise label lookups. Behind the scenes it’s reading your frontmatter and returning exact matches.

It’s Your System

Basic Memory doesn’t tell you what labels to use. You make up whatever makes sense to you.

  • A project manager might use status, owner, deadline
  • A novelist might use pov-character, timeline, draft-status
  • A researcher might use read-status, relevance, cited-by

To add a label, ask your AI — “Add ‘status: active’ to this note” — or open the file in any text editor and add the frontmatter yourself. Both work. The file is always yours to edit.

For Developers and AI Agents

The plain-English experience above is powered by new metadata_filters support in search_notes. Here’s what’s actually happening:

Before v0.19, frontmatter fields were indexed as text, so search_notes("status: active") was an unreliable string match — not a field query.

v0.19 introduces first-class metadata filtering that maps directly to SQLite queries on indexed frontmatter fields:

# Exact field match
search_notes(metadata_filters={"status": "active"})

# Multiple fields (ANDed by default)
search_notes(metadata_filters={"status": "active", "priority": "high"})

# Set membership
search_notes(metadata_filters={"priority": {"$in": ["high", "critical"]}})

# Date range
search_notes(metadata_filters={"completed": {"$gte": "2026-02-01"}})

# Numeric range
search_notes(metadata_filters={"sprint": {"$between": [10, 15]}})

# Combined with semantic search
search_notes(query="API refactor", metadata_filters={"status": "active"})

# Tag shorthand
search_notes(tags=["backend", "q1-2026"])

Available operators: $in, $gt, $gte, $lt, $lte, $between. Work on strings, numbers, and dates.

Metadata search reference →

How-to: note-taking with metadata →