Skills

Jq

Use when the user needs to query, filter, reshape, extract, create, or construct JSON...

Install

npx skills add charmbracelet/crush --skill jq -g -a claude-code -y
Repository
charmbracelet/crush28.9k
Category
Testing
Updated
3d ago
License
See repository
Context cost
Lightabout 680 tokens
Runs scripts
No, instructions only

What it does

Use when the user needs to query, filter, reshape, extract, create, or construct JSON data, including API responses, config files, log output, or any structured data, or when helping the user write or debug JSON transformations.

jq, Built-in JSON Processor

Crush ships a built-in jq command (via github.com/itchyny/gojq) available in the bash tool. No external binary is required.

Supported Flags

FlagDescription
-r, --raw-outputOutput strings without quotes
-j, --join-outputLike -r but no trailing newline
-c, --compact-outputOne-line JSON output
-s, --slurpRead all inputs into an array
-n, --null-inputUse null as input (ignore stdin)
-e, --exit-statusExit 1 if last output is false or null
-R, --raw-inputRead each line as a string, not JSON
--arg name valueBind $name to a string value
--argjson name valueBind $name to a parsed JSON value

File arguments after the filter are also supported: jq '.foo' file.json.

Differences from Standard jq

The built-in uses gojq, which is a pure-Go jq implementation. Key differences:

  • No object key ordering, keys are sorted by default; keys_unsorted and -S are unavailable.
  • Arbitrary-precision integers, large integers keep full precision (addition, subtraction, multiplication, modulo, division when divisible).
  • String indexing, "abcde"[2] returns "c".
  • Not supported, --ascii-output, --seq, --stream, --stream-errors, -f/--from-file, --slurpfile, --rawfile, --args, --jsonargs, input_line_number, $__loc__, some regex features (backreferences, look-around).
  • YAML, gojq supports --yaml-input/--yaml-output but the built-in does not currently expose these flags.

Common Patterns

Extract a field:

echo '{"name":"crush"}' | jq '.name'

Filter an array:

echo '[1,2,3,4,5]' | jq '[.[] | select(. > 3)]'

Reshape objects:

echo '{"first":"Ada","last":"Lovelace"}' | jq '{full: (.first + " " + .last)}'

Use variables:

echo '{}' | jq --arg host localhost --argjson port 8080 '{host: $host, port: $port}'
Read the whole SKILL.md on GitHub

More in Testing