Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Personal Knowledge Management

Carry can serve as a structured personal knowledge base – a place to organize notes, expertise, contacts, and project information in a format that’s both human-readable and machine-queryable.

Why Not Just Use Markdown?

Markdown files work well for short, declarative content (rules, patterns, quick notes). But they fall short when:

  • You want to query across your knowledge: “Which contacts work in data engineering?”
  • You need structure that’s consistent: Every person should have name, role, and context.
  • You want your AI tools to reason over your data, not just read it.
  • Your knowledge base grows beyond what fits in a single context window.

Carry’s fact-based model lets you store structured data that’s both inspectable in a text editor and queryable via the CLI.

Example: Personal CRM

Define the Schema

contacts:
  Person:
    description: A person in my network
    with:
      name:
        description: Full name
        as: Text
      role:
        description: Their role or title
        as: Text
    maybe:
      company:
        description: Where they work
        as: Text
      context:
        description: How I know them
        as: Text
      last_contact:
        description: When we last spoke
        as: Text
      notes:
        description: Freeform notes
        as: Text

Add Data

carry assert schema.yaml
carry assert person name="Alex Good" role="Core maintainer, Automerge" \
  context="Collaborated on WASM implementation" \
  last_contact="2026-02"

carry assert person name="Peter Van Hardenburg" role="Researcher, Ink & Switch" \
  context="Shared trail-runner project" \
  notes="Interested in local-first tools for thought"

Query

# Find everyone I know at a company
carry query person company="Ink & Switch"

# List all contacts with their roles
carry query person name role

# Find people I haven't talked to recently
carry query person name last_contact

Example: Research Notes

Track research topics, findings, and open questions:

research:
  Topic:
    description: A research topic I'm exploring
    with:
      title:
        description: Topic name
        as: Text
      status:
        description: Current status
        as: [":active", ":paused", ":completed"]
    maybe:
      summary:
        description: Current understanding
        as: Text
      open_questions:
        description: Unresolved questions
        as: Text
        cardinality: many

  Finding:
    description: A specific finding or insight
    with:
      topic:
        description: Related topic
      claim:
        description: The finding
        as: Text
      confidence:
        description: How confident I am
        as: [":high", ":medium", ":low", ":speculative"]
    maybe:
      source:
        description: Where this came from
        as: Text

Usage:

carry assert schema.yaml

carry assert topic @crdt-sync \
  title="CRDT Synchronization" \
  status=active \
  summary="Exploring efficient sync for local-first databases"

carry assert finding \
  topic=crdt-sync \
  claim="Prolly trees enable efficient diff-based sync" \
  confidence=high \
  source="Dialog DB implementation"

Example: Reading List

carry assert com.me.reading \
  title="Designing Data-Intensive Applications" \
  author="Martin Kleppmann" \
  status=finished \
  rating=5 \
  takeaway="Replication and partitioning fundamentals"

carry assert com.me.reading \
  title="A Philosophy of Software Design" \
  author="John Ousterhout" \
  status=in-progress

# What have I finished reading?
carry query com.me.reading title author status=finished

Advantages Over PKM Tools

Obsidian/Notion/RoamCarry
Data formatProprietary or semi-structured markdownStructured YAML claims
Query languageLimited (Dataview, formulas)Full EAV queries + rules
AI accessPlugin-dependentDirect via CLI
SchemaInformal, drifts over timeExplicit, validated
OfflineVariesAlways (local-first)

Carry doesn’t replace your PKM tool for long-form writing and linking. It complements it by providing a structured, queryable layer for the data that benefits from consistency and machine access.