From dasel
Explores unknown structured data files using dasel v3 to discover schema, list keys, find nested values, sample arrays, and identify types across JSON, YAML, TOML, XML, CSV, HCL, INI formats. For configs, API responses, datasets.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dasel:data-explorationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<when_to_use>
<when_to_use>
Activate this skill when:
</when_to_use>
Dasel auto-detects format from file extension. Override with -i <format> when reading from stdin or when extension is ambiguous.
Format identifiers: json, yaml, toml, xml, csv, hcl, ini
Follow this sequence when encountering an unknown structured data file. Each step narrows scope.
Dasel infers format from file extension. For stdin or non-standard extensions, specify explicitly:
cat mystery_file | dasel -i json 'keys($this)'
dasel -f config.yaml 'keys($this)'
Output: array of top-level key names. This is always the first exploration command.
For small files (configs, manifests), dump the full document:
dasel -f config.yaml
For large files, skip to Step 4.
Navigate level by level:
dasel -f config.yaml 'server'
dasel -f config.yaml 'keys(server)'
dasel -f config.yaml 'keys(server.logging)'
Recursive key discovery across all depths:
dasel -f config.yaml '..keys($this)'
Preview first few elements without loading entire array:
dasel -f data.json 'items[0:3]'
Single element inspection:
dasel -f data.json 'items[0]'
Determine the type of any node:
dasel -f data.json 'typeOf(settings)'
dasel -f data.json 'typeOf(items[0].count)'
Return values: "string", "array", "bool", "null", "int", "float"
Once path is known, extract specific values:
dasel -f config.yaml 'database.connection.host'
dasel -f data.json 'users[0].email'
Start at root, enumerate keys at each level before going deeper:
dasel -f file.json 'keys($this)' # Level 0
dasel -f file.json 'keys(metadata)' # Level 1
dasel -f file.json 'keys(metadata.labels)' # Level 2
When the file is too large for manual traversal, use search() with predicates:
# Find all objects containing a specific key
dasel -f data.json 'search(has("email"))'
# Find all objects with both "id" and "name" keys
dasel -f data.json 'search(has("id") && has("name"))'
# Find nodes where a value matches
dasel -f data.json 'search($this == 42)'
dasel -f data.json 'len(items)'
dasel -f data.json 'len(keys($this))'
Extract a field from all array elements, then deduplicate in shell:
dasel -f data.json 'items.map(category)' | dasel -i json '$this...' | sort -u
Find all values for a key name at any depth:
dasel -f data.json '..name'
Get first element of every nested array:
dasel -f data.json '..[0]'
For detailed per-format exploration commands, see Format-Specific Recipes.
npx claudepluginhub jamie-bitflight/claude_skills --plugin daselReference dasel v3 syntax for querying, modifying, converting JSON, YAML, TOML, XML, CSV, HCL, INI with selectors, functions, conditionals, variables, spread operator, type casting.
Transforms, manipulates, analyzes JSON: parse/validate, reshape/flatten/unnest, merge/filter/map, query (JSONPath/JMESPath), convert (CSV/YAML/XML), diff/compare.
Processes JSON with jq and YAML/TOML with yq to filter, transform, and query data from configs like Docker Compose, Kubernetes manifests, GitHub Actions workflows, and package.json.