netresearch/data-tools-skill · Archived

data-tools

Use when querying, transforming, filtering, converting, or editing ANY JSON, JSONL, YAML, TOML, XML, or CSV. MUST replace grep/sed/awk on structured formats.

First seen Mar 11, 2026

Installation

$ npx skills add netresearch/data-tools-skill --skill data-tools

Stronger alternatives

This repository is archived — consider an actively maintained alternative.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 1
License LICENSE-CC-BY-SA-4.0
Default branch main
Open issues 2
Status Archived

Skill metadata

Parsed from SKILL.md frontmatter.

Version1.9.0
License(MIT AND CC-BY-SA-4.0). See LICENSE-MIT and LICENSE-CC-BY-SA-4.0
CompatibilityRequires jq, yq. Optional: dasel, qsv, mlr.
Allowed toolsBash(jq:*) Bash(yq:*) Bash(dasel:*) Bash(mlr:*) Read Write
More metadata
author
Netresearch DTT GmbH
version
1.9.0
repository
https://github.com/netresearch/data-tools-skill

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 3,728 B
  • docs SUMMARY.md 175 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 73 installs

SKILL.md

Data Tools Skill

Critical Rule

NEVER use grep, sed, awk, or inline interpreters (python3 -c, node -e) on JSON, JSONL, YAML, TOML, XML, or CSV. Refuse and use the correct tool — text tools break on structure; inline scripts are verbose and fragile.


Key Patterns

For the general legacy-tool → modern-tool comparison (grep→rg, find→fd, cat→bat, ...), see cli-tools-skill's table.

Convert: dasel -w FORMAT or yq -o FORMAT.

jq -- JSON (no in-place)

jq -r '.version' package.json
jq '.users[] | select(.role == "admin") | .name' users.json
jq '.version = "2.0.0"' pkg.json > pkg.json.tmp && mv pkg.json.tmp pkg.json
jq -s '.[0] * .[1]' base.json override.json

Or gh --jq when the source is the GitHub CLI (see below) — no separate jq process needed.

yq -- YAML (in-place -i)

yq '.services.web.image' docker-compose.yml
yq -i '.services.app.image = "node:20"' docker-compose.yml
yq -o json config.yml

dasel -- TOML (only native tool) / XML (or xmlstarlet for XPath) / Universal auto-detect

dasel -f Cargo.toml '.package.version'
dasel put -f config.toml -t string -v "2.0" '.project.version'
dasel -f input.json -w yaml

qsv -- CSV / TSV

qsv headers data.csv && qsv stats data.csv --everything | qsv table
qsv search -s status "active" users.csv | qsv select name,email
qsv join user_id orders.csv id users.csv

mlr -- JSONL / multi-format / DSL (in-place -I)

mlr --c2j cat data.csv
mlr --jsonl filter '$level == "error"' logs.jsonl
mlr -I --csv put '$total = $qty * $price' orders.csv

GitHub CLI -- always --jq

gh api repos/owner/repo/releases/latest --jq '.tag_name'
gh pr list --json number,title --jq '.[] | [.number, .title] | @tsv'

Anti-Patterns

# BAD → GOOD: jq -r '.version' package.json
grep '"version"' package.json | sed 's/.*"\(.*\)".*/\1/'
# BAD → GOOD: yq -i '.services.app.image = "node:20"' compose.yml
sed -i 's/image: node:.*/image: node:20/' docker-compose.yml
# BAD → GOOD: qsv select 2 data.csv
awk -F',' '{print $2}' data.csv
# BAD → GOOD: jq -r '.version' plugin.json
python3 -c 'import json;print(json.load(open("plugin.json"))["version"])'

References

Cookbook Content
[jq Cookbook](references/jq-cookbook.md) Filtering, transforms, GitHub CLI
[yq Cookbook](references/yq-cookbook.md) Actions, Compose, K8s
[dasel Cookbook](references/dasel-cookbook.md) TOML/XML, conversion
[CSV Processing](references/csv-processing.md) qsv workflows, joins
[mlr Cookbook](references/mlr-cookbook.md) JSONL, DSL, stats, joins
[Enforcement Hook](references/enforcement-hook.md) PreToolUse gate shipped with this plugin: denies field extraction, warns once otherwise

Docs: jq, yq, dasel, qsv, mlr.