qmd CLI

CuratedAudited 2026-10-05 by anc 0.6.0Markdown · JSON
68pass rate

1/8 principles met

Local hybrid search (BM25 + vector + LLM rerank) for personal knowledge bases

$ anc audit qmd --json

notable TypeScript tobi/qmd
MUST 19 / 28SHOULD 14 / 223 failing18 warningsaudited 2026-10-05 · anc 0.6.0

Audience signal: mixed

This tool sends mixed signals: some agent-readable affordances are present, others are not. Treat the warnings below as friction points, not defects.

This is an informational signal, not an authoritative verdict — see methodology. The per-audit evidence below is the ground truth.

Eight principles, scored

Behavioral and source checks. Every non-pass row carries a copy-paste remediation prompt.

  1. P1
    Non-Interactive by Default

    no rich-TUI affordance detected (no `--tui`/`--interactive`/`--ui` flag, no spinner/progress/tui mention in --help). MAY-tier — rich TUI in TTY contexts is a nice-to-have, not required.

    Remediation · P1
    Make qmd satisfy P1 (Non-Interactive by Default) from the agent-native CLI standard. Address:
    - Rich-TUI affordance for TTY contexts (no rich-TUI affordance detected (no `--tui`/`--interactive`/`--ui` flag, no spinner/progress/tui mention in --help). MAY-tier — rich TUI in TTY contexts is a nice-to-have, not required.)
    Requirements: https://anc.dev/p1
    warn
  2. P2
    Structured, Parseable Output

    --output/--format flag detected but could not validate JSON via safe probes (--help/--version override output flags in most CLIs) · CLI emits structured output but exposes no `schema` subcommand or `--schema` flag at top level or nested one level deep. Agents need a runtime-discoverable schema to pin against shape changes.

    Remediation · P2
    Make qmd satisfy P2 (Structured, Parseable Output) from the agent-native CLI standard. Address:
    - Structured output support (--output/--format flag detected but could not validate JSON via safe probes (--help/--version override output flags in most CLIs))
    - Structured-output CLI exposes its schema at runtime (CLI emits structured output but exposes no `schema` subcommand or `--schema` flag at top level or nested one level deep. Agents need a runtime-discoverable schema to pin against shape changes.)
    - --json / --jsonl short aliases for --output (no --json or --jsonl short alias found. Agents and pipelines benefit from short forms alongside the canonical `--output` enum.)
    - `--raw` flag for pipe-safe unformatted output (no `--raw` flag advertised. MAY-tier — useful for pipelines that want to strip formatting before piping to other tools.)
    - Bad invocation exits with structured usage-error code (2) (bad invocation exited with code 1. The 0/1/2/77/78 convention reserves code 2 for usage errors; using a different non-zero code (often 1) blurs the distinction between usage errors and general failure.)
    Requirements: https://anc.dev/p2
    fail
  3. P3
    Progressive Help Discovery

    no `examples` subcommand or `--examples` flag found. MAY-tier — a curated usage block keeps agents from hunting through long help text. · `-h` and `--help` produce byte-identical output. SHOULD-tier — clap renders the short summary on `-h` and the full description on `--help` when `long_about` is set; collapsing them gives agents no concise list-level grep target.

    Remediation · P3
    Make qmd satisfy P3 (Progressive Help Discovery) from the agent-native CLI standard. Address:
    - `examples` subcommand or `--examples` flag for curated usage patterns (no `examples` subcommand or `--examples` flag found. MAY-tier — a curated usage block keeps agents from hunting through long help text.)
    - Short `-h` summary differs from `--help` long form (`-h` and `--help` produce byte-identical output. SHOULD-tier — clap renders the short summary on `-h` and the full description on `--help` when `long_about` is set; collapsing them gives agents no concise list-level grep target.)
    - Each subcommand's `--help` ships at least one invocation example (subcommands missing example invocations in their `--help`: skill. Examples teach agents the call shape faster than option tables; use clap's `after_help` or a dedicated `Examples:` block.)
    - Help text pairs human and `--output json` example invocations (no paired text + `--output json` example found within 5 lines in top-level or any subcommand `--help`. Pairing keeps agents from reverse-engineering the JSON invocation from the text one.)
    - Command-list entries name the command without repeating the binary name (command-list entries repeat the binary name `qmd`: `qmd query <query>`, `qmd query 'lex:..\nvec:...'`, `qmd search <query>`, `qmd vsearch <query>`, `qmd get <file>[:from[:count]] - Show a document (line-numbered; #docid in header)` and 5 more. Drop the prefix so a reader or agent scanning the block gets the command token directly instead of reconstructing it from a repeated binary name.)
    Requirements: https://anc.dev/p3
    fail
  4. P4
    Fail-Fast, Actionable Errors

    stderr was empty on bad invocation. Argument parsers must explain why the input was rejected — silent failure forces the agent to guess.

    Remediation · P4
    Make qmd satisfy P4 (Fail-Fast, Actionable Errors) from the agent-native CLI standard. Address:
    - Error messages include a hint or remediation phrase (stderr was empty on bad invocation. Argument parsers must explain why the input was rejected — silent failure forces the agent to guess.)
    Requirements: https://anc.dev/p4
    fail
  5. P5
    Safe Retries & Mutation Boundaries

    read-pattern subcommand(s) present (query, search, get) but no write-pattern surface detected. If the CLI is read-only by design the MUST is satisfied vacuously; otherwise the write surface needs an agent-recognizable verb (create/add/update/set/delete/…).

    Remediation · P5
    Make qmd satisfy P5 (Safe Retries & Mutation Boundaries) from the agent-native CLI standard. Address:
    - Read and write surfaces are both visible in subcommand list (read-pattern subcommand(s) present (query, search, get) but no write-pattern surface detected. If the CLI is read-only by design the MUST is satisfied vacuously; otherwise the write surface needs an agent-recognizable verb (create/add/update/set/delete/…).)
    Requirements: https://anc.dev/p5
    warn
  6. P6
    Composable, Predictable Command Structure

    pager referenced in --help but no --no-pager escape hatch advertised · 3/9 subcommand(s) follow standard verb names. Non-standard: query, vsearch, multi-get, skills, mcp, bench. MAY-tier — community-standard verbs (get/list/create/update/delete) help agents predict subcommand behavior across CLIs.

    Remediation · P6
    Make qmd satisfy P6 (Composable, Predictable Command Structure) from the agent-native CLI standard. Address:
    - Pager-using CLI ships --no-pager escape hatch (pager referenced in --help but no --no-pager escape hatch advertised)
    - Subcommand verbs follow community-standard names (3/9 subcommand(s) follow standard verb names. Non-standard: query, vsearch, multi-get, skills, mcp, bench. MAY-tier — community-standard verbs (get/list/create/update/delete) help agents predict subcommand behavior across CLIs.)
    - `--color` flag for explicit color control (no `--color` flag advertised. MAY-tier — `auto|always|never` lets agents and pipelines override the TTY-based default.)
    - Subcommand naming follows a consistent verb/noun convention (subcommand naming is inconsistent: 6 non-verb subcommand(s) (query, vsearch, multi-get, skills, mcp, bench) mix verb and non-verb children at the second level, so an agent cannot predict where the action lives. SHOULD-tier: pick a consistent shape (all verb-first, all noun-verb hierarchy, or any combination where each non-verb group's children are uniformly verbs). The verb list is a heuristic; inspect `--help` to confirm.)
    Requirements: https://anc.dev/p6
    warn
  7. P7
    Bounded, High-Signal Responses

    no --quiet/-q flag detected in --help output · no `--verbose` / `-v` flag advertised. SHOULD-tier — agents debugging failures need a way to escalate diagnostic detail.

    Remediation · P7
    Make qmd satisfy P7 (Bounded, High-Signal Responses) from the agent-native CLI standard. Address:
    - Quiet mode available (no --quiet/-q flag detected in --help output)
    - `--verbose` flag for diagnostic escalation (no `--verbose` / `-v` flag advertised. SHOULD-tier — agents debugging failures need a way to escalate diagnostic detail.)
    - Cursor-based pagination flags for list traversal (list-style subcommand present but no cursor/page flag advertised (looked for --after, --before, --cursor, --page, --offset). MAY-tier — cursor pagination lets agents traverse large result sets without re-scanning earlier pages.)
    - Help text advertises TTY-aware verbosity behavior (no TTY-aware language found in `--help`. MAY-tier — automatic verbosity reduction when stdout is piped or redirected lets agents skip the explicit `--quiet` flag. Behavioral probes cannot simulate a real TTY without a pty crate, so this audit relies on documented intent.)
    Requirements: https://anc.dev/p7
    warn
  8. P8pass

All Audits

P1: Non-Interactive by Default

PASSNon-interactive by default
SKIPNon-interactive gate flag advertised in --helptarget satisfies P1 via alternative gate (help-on-bare or stdin-primary)
PASSFlags advertise env-var bindings in --help
PASSSecret-bearing flags expose stdin or *-file companion
PASS`--help` advertises default values for flags
WARNRich-TUI affordance for TTY contextsno rich-TUI affordance detected (no `--tui`/`--interactive`/`--ui` flag, no spinner/progress/tui mention in --help). MAY-tier — rich TUI in TTY contexts is a nice-to-have, not required.

P2: Structured, Parseable Output

WARNStructured output support--output/--format flag detected but could not validate JSON via safe probes (--help/--version override output flags in most CLIs)
FAILStructured-output CLI exposes its schema at runtimeCLI emits structured output but exposes no `schema` subcommand or `--schema` flag at top level or nested one level deep. Agents need a runtime-discoverable schema to pin against shape changes.
WARN--json / --jsonl short aliases for --outputno --json or --jsonl short alias found. Agents and pipelines benefit from short forms alongside the canonical `--output` enum.
WARN`--raw` flag for pipe-safe unformatted outputno `--raw` flag advertised. MAY-tier — useful for pipelines that want to strip formatting before piping to other tools.
PASS`--output` advertises additional formats beyond text/json
WARNBad invocation exits with structured usage-error code (2)bad invocation exited with code 1. The 0/1/2/77/78 convention reserves code 2 for usage errors; using a different non-zero code (often 1) blurs the distinction between usage errors and general failure.
SKIPErrors emit JSON envelope with discriminant + type id + message roles under `--output json`binary does not advertise `--output json` in --help; MUST applies only to CLIs that opt into the JSON contract.
SKIPJSON success and error envelopes share their non-payload key setbinary does not advertise `--output json` in --help; envelope-consistency only applies to CLIs that opt into the JSON contract.

P3: Progressive Help Discovery

PASSHelp flag produces useful output
PASSVersion flag works (`--version` plus short alias)
PASSVersion flag works (`--version` plus short alias)
WARN`examples` subcommand or `--examples` flag for curated usage patternsno `examples` subcommand or `--examples` flag found. MAY-tier — a curated usage block keeps agents from hunting through long help text.
WARNShort `-h` summary differs from `--help` long form`-h` and `--help` produce byte-identical output. SHOULD-tier — clap renders the short summary on `-h` and the full description on `--help` when `long_about` is set; collapsing them gives agents no concise list-level grep target.
FAILEach subcommand's `--help` ships at least one invocation examplesubcommands missing example invocations in their `--help`: skill. Examples teach agents the call shape faster than option tables; use clap's `after_help` or a dedicated `Examples:` block.
WARNHelp text pairs human and `--output json` example invocationsno paired text + `--output json` example found within 5 lines in top-level or any subcommand `--help`. Pairing keeps agents from reverse-engineering the JSON invocation from the text one.
WARNCommand-list entries name the command without repeating the binary namecommand-list entries repeat the binary name `qmd`: `qmd query <query>`, `qmd query 'lex:..\nvec:...'`, `qmd search <query>`, `qmd vsearch <query>`, `qmd get <file>[:from[:count]] - Show a document (line-numbered; #docid in header)` and 5 more. Drop the prefix so a reader or agent scanning the block gets the command token directly instead of reconstructing it from a repeated binary name.

P4: Fail-Fast, Actionable Errors

PASSRejects invalid arguments
FAILError messages include a hint or remediation phrasestderr was empty on bad invocation. Argument parsers must explain why the input was rejected — silent failure forces the agent to guess.
SKIP`--output json` produces JSON-formatted errorsbinary does not advertise `--output json` in --help; SHOULD applies only to CLIs that opt into the JSON contract.

P5: Safe Retries & Mutation Boundaries

SKIPDestructive subcommands require `--force` or `--yes`no destructive subcommands detected; MUST applies conditionally to CLIs with destructive operations.
WARNRead and write surfaces are both visible in subcommand listread-pattern subcommand(s) present (query, search, get) but no write-pattern surface detected. If the CLI is read-only by design the MUST is satisfied vacuously; otherwise the write surface needs an agent-recognizable verb (create/add/update/set/delete/…).

P6: Composable, Predictable Command Structure

PASSHandles SIGPIPE gracefully
WARNPager-using CLI ships --no-pager escape hatchpager referenced in --help but no --no-pager escape hatch advertised
PASSRespects NO_COLOR
WARNSubcommand verbs follow community-standard names3/9 subcommand(s) follow standard verb names. Non-standard: query, vsearch, multi-get, skills, mcp, bench. MAY-tier — community-standard verbs (get/list/create/update/delete) help agents predict subcommand behavior across CLIs.
WARN`--color` flag for explicit color controlno `--color` flag advertised. MAY-tier — `auto|always|never` lets agents and pipelines override the TTY-based default.
SKIPInput-accepting commands read from stdin when no file is givenno input-accepting subcommand detected (process/parse/convert/transform/analyze/validate/format/lint/audit); vacuous skip for the conditional SHOULD.
WARNSubcommand naming follows a consistent verb/noun conventionsubcommand naming is inconsistent: 6 non-verb subcommand(s) (query, vsearch, multi-get, skills, mcp, bench) mix verb and non-verb children at the second level, so an agent cannot predict where the action lives. SHOULD-tier: pick a consistent shape (all verb-first, all noun-verb hierarchy, or any combination where each non-verb group's children are uniformly verbs). The verb list is a heuristic; inspect `--help` to confirm.
PASSOperations are subcommands, not verb-shaped flags

P7: Bounded, High-Signal Responses

WARNQuiet mode availableno --quiet/-q flag detected in --help output
WARN`--verbose` flag for diagnostic escalationno `--verbose` / `-v` flag advertised. SHOULD-tier — agents debugging failures need a way to escalate diagnostic detail.
PASS`--limit` / `--max-results` flag for list operations
WARNCursor-based pagination flags for list traversallist-style subcommand present but no cursor/page flag advertised (looked for --after, --before, --cursor, --page, --offset). MAY-tier — cursor pagination lets agents traverse large result sets without re-scanning earlier pages.
SKIP`--timeout` flag for long-running operationsno long-running subcommand detected (serve/daemon/watch/tail/monitor/follow/run/start/stream); vacuous skip for the conditional SHOULD.
WARNHelp text advertises TTY-aware verbosity behaviorno TTY-aware language found in `--help`. MAY-tier — automatic verbosity reduction when stdout is piped or redirected lets agents skip the explicit `--quiet` flag. Behavioral probes cannot simulate a real TTY without a pty crate, so this audit relies on documented intent.

P8: Discoverable Through Agent Skill Bundles

PASSSkill bundle has install path (`tool skill install [<host>]`)
PASS`skill install --all` for multi-runtime install
PASS`skill update` / `skill upgrade` for bundle refresh

Details

Version scored
2.8.3
Audit date
2026-10-05 18:45:31 UTC
Duration
1.8s
Platform
linux/x86_64
Mode
command
Anc build
0.6.0
Install
bun add -g @tobilu/qmd

Embed the badge

The badge floor is 70%; this scorecard is at 68% (2 points below). Once the score clears the floor, the embed snippet will appear here. The top issues above are the place to start.

Reproduce this scorecard for qmd locally and inspect the failing audits:

anc audit --command qmd --output json

Install anc first if you don't have it. Add --output json to get the same JSON shape committed under scorecards/.