lazy documentationv0.94Contents

lazy search

This page is generated from lazy search --help.

Usage: lazy search <query> [options]

Search across tasks, prompts, turns, commits, notes, raised items, conversations,
and shared memory records.

Options:
  -f, --fuzzy        Use fuzzy matching (typo-tolerant)
  -g, --group        Group results by task
  --json             Output as structured JSON with line numbers

Filter by type:
  --tasks            Search task goals only
  --prompts          Search task prompts only
  --turns            Search conversation turns only
  --commits          Search commit messages only
  --notes            Search task notes only
  --followups        Older spelling of --raised
  --raised           Search agent-raised questions/decisions only
  --conversations    Search captured builder conversations only
  --memories         Search shared memory records only
  --scratch          Search captured builder scratch files only

Query language:
  Supports Lucene-style syntax with boolean operators and field filters.
  When operators, field syntax, or a #tag are detected, structured search is
  used automatically. Plain text queries use regex (case-insensitive) matching.
  The dashboard's search page shows this same grammar inline.

  Boolean operators:
    A AND B                   Both must match (also the implicit operator between two adjacent terms)
    A OR B                    Either matches
    NOT A                     Negation
    (A OR B) AND C            Parentheses group; AND binds tighter than OR

  Field filters:
    task:<text>               Task code CONTAINS this text (case-insensitive)
    status:<value>            Task status, exact (working, blocked, backlog, complete, abandoned, ...)
    goal:<text>               Task goal contains this text (case-insensitive)
    tag:<value>               Task carries this tag, exact after normalization
    #<value>                  Shorthand for tag:<value>, also matching the literal text "#value"

  Scoped text search:
    in:tasks <text>           Across tasks and all content attached to them
    in:active <text>          Within working, interrupted, or blocked tasks
    in:backlog <text>         Within backlog tasks
    in:finished <text>        Within accepted, closed, or rejected tasks
    in:turns <text>           Within turn content
    in:commits <text>         Within commit messages
    in:comments <text>        Within comments
    in:raised <text>          Within raised items (blocking and non-blocking alike)
    in:followups <text>       Alias for in:raised (the pre-unification spelling)
    in:conversations <text>   Within captured builder conversations
    in:memories <text>        Within shared memory records
    in:scratch <text>         Within captured builder scratch files

  Existence checks:
    has:commits               Task has commits
    has:turns                 Task has turns
    has:comments              Task has comments
    has:raised                Task has raised items
    has:followups             Alias for has:raised

  Date filters:
    created:>YYYY-MM-DD       Created after (also created:< for before)
    updated:>YYYY-MM-DD       Last updated after (also updated:< for before)

Good to know:
  - Boolean operators are case-sensitive: AND, not and. AND binds tighter
    than OR, and two adjacent terms with no operator are an implicit AND.
  - task:, goal: and every in: scope are case-insensitive SUBSTRING matches —
    task:spike finds spike-vm-isolation and publish-runner-spike alike.
    status: and tag: are exact.
  - A query with no operator, no field: term and no #tag is a
    case-insensitive REGEX over all content.
  - An id works as a bare query: paste a task id, raised item, comment,
    journal entry, turn, commit SHA, artifact, review comment, system message
    or conversation id — a prefix of at least 6 characters or the whole thing
    — and every entity it names is listed first. An ambiguous prefix lists
    every match. Not available with --fuzzy.
  - Fuzzy matching (--fuzzy, or fuzzy=true over MCP) BYPASSES the query
    language: it looks for the literal text you typed, so tag:launch --fuzzy
    searches for "tag:launch".
  - Tags are normalized identically on write and on query — lowercased, runs
    of non-alphanumerics collapsed to hyphens, a leading # stripped. Quote a
    multi-word tag: tag:"My Feature Work", or only its first word counts.
  - In a shell, wrap the whole query in single quotes: # starts a comment,
    and an unquoted multi-word value is split into separate terms.

Examples:
  lazy search 'auth'                                      # Regex search over everything
  lazy search 'task:spike'                                # Every task whose code contains "spike"
  lazy search 'status:blocked AND in:turns "reconciler"'  # Blocked tasks whose turns mention a reconciler
  lazy search 'goal:memory AND status:backlog'            # Combine a goal substring with a status
  lazy search 'has:commits AND NOT in:commits "wip"'      # Existence check plus a negation
  lazy search 'created:>2026-02-15 AND status:working'    # Date range plus a status
  lazy search 'tag:"My Feature Work"'                     # A multi-word tag — quote it
  lazy search '#onboarding'                               # Tag, using the spelling lazy prints
  lazy search 'in:memories "credentials"'                 # Search shared memory records
  lazy search 'catchup' --fuzzy                           # Typo-tolerant
  lazy search 'design decision' --conversations           # Filter to conversations only
  lazy search 'auth' --json                               # JSON output with line numbers

Documentation: https://docs.getlazy.dev/search