Skip to content

Parser incorrectly captures Obsidian callout syntax as observation categories #738

@kr-apps

Description

@kr-apps

Bug Description

Basic Memory incorrectly parses Obsidian callout syntax as observation categories, polluting the knowledge graph with meaningless entries like !info, !warning, !quote, !tip, etc.

Steps To Reproduce

  1. Set up a Basic Memory project pointing to an Obsidian vault
  2. Create any note containing an Obsidian callout block:
   > [!info] Some title
   > Content inside the callout

   > [!warning] Another callout
   > More content
  1. Run bm reindex or let the MCP server sync on startup
  2. Query observations for that note — callout identifiers appear as categories

Expected Behavior

Callout blocks (> [!type]) should be ignored by the observation parser. They are Obsidian-specific syntax and are visually and structurally distinct from Basic Memory observations (- [category] content).

Actual Behavior

Every callout in an indexed note generates a spurious observation entry. A note with > [!info], > [!warning], and > [!quote] produces three observations with categories !info, !warning, and !quote respectively, none of which correspond to actual knowledge authored by the user.

Environment

  • OS: macOS 15.x
  • Python version: (via uvx)
  • Basic Memory version: 0.20.3
  • Installation method: uv / uvx
  • Claude Desktop version: latest

Additional Context

Obsidian's callout syntax is documented at https://help.obsidian.md/callouts. The conflict arises because both syntaxes use bracket notation on list/blockquote lines:

Syntax Pattern
Basic Memory observation - [category] content
Obsidian callout > [!type] title

This affects any user indexing an Obsidian vault that uses callouts, which is an extremely common Obsidian pattern.

Possible Solution

The observation parser should exclude lines where:

  • The bracket content starts with ! ([!type])
  • The line is prefixed with > (blockquote context)

Both conditions together unambiguously identify an Obsidian callout and distinguish it from a valid Basic Memory observation.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions