Execute multiple cqs queries in parallel via Bash.
cqs batch reads commands from stdin, outputs compact JSONL. Persistent Store + lazy Embedder โ amortizes startup cost across N commands. Supports pipeline syntax for chaining commands.
# Single command
echo 'callers search_filtered' | cqs batch
# Multiple commands
printf 'callers gather\nexplain gather\nstats\n' | cqs batch
# Pipeline โ chain commands via |
echo 'callees dispatch | callers | test-map' | cqs batch
# From file
cqs batch < commands.txt
Chain commands with | โ upstream names feed downstream commands via fan-out:
# Search โ get callers of each result
echo 'search "error handling" --limit 5 | callers' | cqs batch
# 3-stage: callees โ callers of each โ test coverage
echo 'callees main | callers | test-map' | cqs batch
# Dead code โ explain each
echo 'dead --min-confidence high | explain' | cqs batch
Pipeable downstream commands: blame, callers, callees, deps, explain, similar, impact, test-map, related, scout.
Pipeline output is a JSON envelope (wrapped like every batch line, see Output below):
{"data": {"pipeline": "...", "stages": N, "results": [{"_input": "name", "data": ...}], "errors": [...], "total_inputs": N, "truncated": false}}
Limits: Max 50 names per stage (prevents fan-out explosion; override with CQS_PIPELINE_FAN_OUT, clamped 10-1000). Quoted pipes (search "foo | bar") are not treated as separators.
| Command | Example |
|---|---|
search <query> |
search "error handling" --limit 3 |
callers <name> |
callers search_filtered |
callees <name> |
callees gather |
deps <name> |
deps Store or deps --reverse search_filtered |
explain <name> |
explain search_filtered |
similar <name> |
similar gather --limit 3 |
gather <query> |
gather "retry logic" --expand 2 |
impact <name> |
impact search_filtered --depth 2 |
test-map <name> |
test-map search_filtered |
trace <src> <tgt> |
trace main search_filtered |
dead |
dead --min-confidence high |
related <name> |
related gather --limit 3 |
context <path> |
context src/lib.rs --compact |
stats |
stats |
scout <query> |
scout "error handling" --limit 10 |
where <desc> |
where "new CLI command" |
read <path> |
read src/lib.rs --focus enumerate_files |
stale |
stale |
health |
health |
notes |
notes --warnings or notes --patterns |
blame <name> |
blame search_filtered |
onboard <concept> |
onboard "indexing pipeline" |
task <description> |
task "add a --rerank flag" |
review / ci |
review --base main / ci --gate high |
impact-diff |
impact-diff --base main |
diff / drift |
drift gemma --min-drift 0.1 |
plan <description> |
plan "fix panic in gather" |
suggest |
suggest |
gc |
gc (MUTATING โ removes stale chunks) |
# comments and empty lines are skippedquit or exit stops processingsearch "multi word query"| chains commands (pipeline syntax)Compact JSONL โ one JSON object per line, flushed after each command. Every line is an envelope: success is {"data": <command output>}, errors are {"error":{"code":"...","message":"..."}}. Pipelines produce a single envelope per pipeline.