This project uses GitHub Flow: main is always stable; all work happens on branches and merges via pull request.
- Commit directly to
mainonly for single-line typo/fact fixes. Everything else goes through a PR. - One branch per contribution (skill, fix, eval, doc).
- Open a pull request for every change; merge only after review.
- Delete the branch after merge (locally and on remote).
After a PR is merged, delete the branch:
git checkout main
git branch -d <branch-name>
git push origin --delete <branch-name>| Prefix | Use |
|---|---|
add/ |
new skill or file |
fix/ |
bug fix or correction |
eval/ |
eval work |
docs/ |
documentation only |
Examples:
add/skill-openalex
fix/openalex-frontmatter
eval/openalex-prompts
docs/contributing-guide
Short and imperative, in English:
add frontmatter fields to openalex skill
fix broken curl example in query-recipes
- Create
skills/<skill-name>/SKILL.mdwith required frontmatter (name,description,compatibility,license,metadata). - Add optional
scripts/,references/,assets/as needed. - Copy evals template:
cp -r evals/_template/ evals/<skill-name>/and fill in the three files. - Open a PR.
Use the skill-creator
skill to draft, test, and iterate on new skills. It covers the full loop: draft → run test
prompts → review outputs → improve → optimize the description field for triggering accuracy.
When writing the skill body, prioritize these three content dimensions — empirically validated as the strongest predictors of downstream skill utility (Huang et al. 2026, arXiv:2605.23899):
| Dimension | What it means |
|---|---|
| Failure Mechanism Encoding | Name specific failure modes with executable remedies, not generic warnings |
| Actionable Specificity | Concrete, executable instructions — not process-level advice like "be careful" |
| High-Risk Action Blacklist | Explicit list of actions the agent must never do in this domain |
Note: skill format (ordered list, bullets, prose) has no measurable effect on utility — only the content matters. Optimizing for clarity or completeness without grounding in these three dimensions does not improve performance and may hurt it.
When editing Python sources under skills/open-data-quality/scripts/ from WSL, do not use uvx from the Windows side — it builds a cached wheel and does not detect WSL source changes.
Use WSL's own uv instead:
wsl -e bash -c "~/.local/bin/uv run --project ./skills/open-data-quality/scripts odq-csv /tmp/data.csv"
wsl -e bash -c "~/.local/bin/uv run --project ./skills/open-data-quality/scripts odq-ckan https://dati.gov.it/opendata DATASET-ID"On Windows terminals that use cp1252, uvx may raise UnicodeEncodeError if the output contains characters outside ASCII.
Set PYTHONUTF8=1 before running:
# PowerShell
$env:PYTHONUTF8=1; uvx --from git+https://github.com/ondata/open-data-quality odq-csv data.csv
# Command Prompt
set PYTHONUTF8=1 && uvx --from git+https://github.com/ondata/open-data-quality odq-csv data.csvSome valid CSVs (e.g., with quoted newlines in headers, as per RFC 4180) fail DuckDB's default read_csv_auto. The validator retries with strict_mode=false before declaring a BLOCKER, and propagates the flag to all subsequent queries via the _lenient / _rcsv() pattern in csv_validator.py.
Required:
name: skill-name
description: One-sentence description used for agent trigger matching.
compatibility: Lists runtime dependencies (tools, env vars, internet).
license: CC BY-SA 4.0 (Creative Commons Attribution-ShareAlike 4.0 International)
metadata:
version: "0.1"
author: "Name Surname <email@example.com>"
tags: [tag1, tag2]