Agent skill

Tabular Cleanup

by gaasher in gaasher/Agent-Loop-Skills

A skill your agent uses when the user has a messy tabular data dump (CSV/TSV/parquet/Excel/JSON) and wants it iteratively cleaned to an inferred data contract — a checklist of deterministic…

MITAuto-check passedDocuments & Office

Install Tabular Cleanup

skills CLI
$ npx skills add gaasher/Agent-Loop-Skills --skill tabular-cleanup -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install gaasher/Agent-Loop-Skills tabular-cleanup --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/loops/tabular-cleanup .claude/skills/tabular-cleanup && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
tabular-cleanup
GitHub stars
174
Token cost
~4k tokens
SKILL.md length
1,907 words
Files
4
Skills in repo
21
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when the user has a messy tabular data dump (CSV/TSV/parquet/Excel/JSON) and wants it iteratively cleaned to an inferred data contract — a checklist of deterministic…

  • Works in 3 steps: All green — every check is pass. The… → All-residual — zero open checks remain… → Budget — / reached. Backstop only.
  • Not a quality score
  • SKILL.md covers When to use, Setup, The loop and Stops, plus 2 more sections
  • Calls uv

What it does

Tabular Cleanup is an agent skill from gaasher/Agent-Loop-Skills. Use when the user has a messy tabular data dump (CSV/TSV/parquet/Excel/JSON) and wants it iteratively cleaned to an inferred data contract — a checklist of deterministic pass/fail checks, not a quality score. A single agent profiles the table, synthesizes a per-column contract compiled into binary checks (types, nulls, duplicates, inconsistent categories, format/range violations, outliers), then applies one targeted transform at a time, keeping it only if it reduces its target check's violations with no…

Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files (for example `examples/run.example.yaml`, `schemas/ledger.schema.json` and `schemas/profile.schema.json`). Compatibility notes: Requires Python 3.9+

It sits in Documents & Office, covering CSV and tabular files, DataFrames and Data governance. It works with Microsoft Excel. The repository describes itself as: Loop until it's better — drop-in agentic loops (autoresearch, scientific writing, data analysis, code/SQL/prompt optimization, red-teaming) as open-standard Agent Skills… The licence is MIT.

When your agent uses it

  • Not a quality score
  • Tasks that involve CSV and tabular files
  • Tasks that involve DataFrames

Example prompts

  • “/tabular-cleanup”

Requirements

  • Python 3
  • Compatibility (from SKILL.md): Requires Python 3.9+

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. All green — every check is pass. The clean, successful exit.
  2. All-residual — zero open checks remain (every check is pass or residual); the
  3. Budget — / reached. Backstop only.

What it can do on your machine

Read from SKILL.md and the folder at commit f1169e6. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • uv

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use uv, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires Python 3.9+

    From compatibility in the SKILL.md frontmatter.

Context cost

Tabular Cleanup loads about 4k tokens when it runs. Until then it costs about 231 tokens; SKILL.md has 1,907 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~231
When it runs · the whole SKILL.md, loaded when a task matches
~4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from gaasher/Agent-Loop-Skills at commit f1169e6, republished under its MIT licence (© gaasher). 1,907 words, ~4,046 tokens.

Download SKILL.mdSave it as .claude/skills/tabular-cleanup/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
tabular-cleanup
description
Use when the user has a messy tabular data dump (CSV/TSV/parquet/Excel/JSON) and wants it iteratively cleaned to an inferred data contract — a checklist of deterministic pass/fail checks, not a quality score. A single agent profiles the table, synthesizes a per-column contract compiled into binary checks (types, nulls, duplicates, inconsistent categories, format/range violations, outliers), then applies one targeted transform at a time, keeping it only if it reduces its target check's violations with no regression and no guardrail breach. Stops deterministically when every check passes, every remaining check is an unfixable residual, or a budget is hit; emits a replayable pipeline and an auditable ledger. Not for open-ended analysis of an already-clean dataset, diagnosing one known anomaly, or verifying a claim against sources — those are analytical loops; this rewrites the data to a contract.
compatibility
Requires Python 3.9+
metadata.version
0.2.0

Tabular Cleanup Loop

A single agent that takes a messy data dump (<artifact>) to the cleanest defensible state, no human in the loop once running. The objective is a checklist, not a score: the agent infers a data contract, compiles it into deterministic binary checks (each reports a violation count, never a weighted float), then each iteration profiles the table, picks the worst open check, applies one pandas transform to resolve it, and keeps it only if that check's violations strictly drop with no collateral damage. Every accepted transform appends to a replayable pipeline.py; every attempt logs to the ledger. The work decomposes into structure (parse correctly, one tidy table, sane types) → contract synthesis (turn every observed anomaly into a check) → the fix loop. Contract synthesis is where quality is won or lost: an issue the profiler notices but never compiles into a check (classically, many spellings of one category) silently survives — a green checklist over dirty data. Checks read the stored value, so canonicalization is real work the loop must do, not a check-time trick.

When to use

Use this to autonomously clean a messy table to an inferred, confirmed contract where every defect is a deterministic check the loop must drive to zero or to an honest residual. Default to strict contract inference (a lenient contract that lets dirty data go "all green" fast is the primary failure mode); the only human checkpoint is confirming the contract at setup, after which the loop runs to a stop condition. Not for open-ended discovery over an already-clean dataset, diagnosing one known anomaly, or checking an external claim against sources — those are analytical loops; this one rewrites the data to match a contract.

Setup

Resolve bindings interactively. If loop.run.yaml exists in the working dir, load it, confirm the values in one line, and skip to the loop. Otherwise: on Claude Code (the AskUserQuestion tool is available) infer a likely value for each binding and present it as the recommended option; on other hosts ask each as a quoted plain-text prompt. Then write loop.run.yaml (format: examples/run.example.yaml) and confirm the values before creating any other files. The contract (below) is the one decision the user must actively approve — infer it, then get explicit sign-off; everything after is autonomous.

bindingmeaningdefaulthow to infer
<artifact>messy table to clean; READ-ONLY (v0 is a copy)—scan the working dir for a data file; detect <format> + delimiter/encoding/header/quote from the extension
<contract>inferred per-column contract + cross-column rules + guardrails; the sole authority for "correct"—profile the raw artifact, then synthesize (see below) and confirm
<retention_floor>cumulative unique_rows_kept / unique_rows_in_v0 must stay ≥ this (denominator is v0 deduped)0.95—
<protected_columns>columns that must survive; dropping one needs explicit allowanceall (*)—
<impute_cap>max fraction of a column's cells that may be imputed (synthetic substitute inserted)0.20—
<analysis_cmd>interpreter that runs profiling/transform code in the user's env (has pandas)python3pyproject.toml/.venv/uv in the working dir
<sandbox_root>where tcl/ (versions, transforms, profiles, ledger, pipeline) lives./sandbox—
<gate> / <budget>backstop only: iterations/tokens/time and its capiterations / 30—

Profiling and transform code run in the user's environment via <analysis_cmd>, so they may use pandas. Keep helper code stdlib-first: probe heavy imports with try/except ImportError and degrade, or offer a consented uv pip install "pandas==<ver>" — never assume it is present.

Contract synthesis (the make-or-break step — do not skip)

Profile the raw artifact, then in two parts turn what you observe into the contract:

Part 1 — Structure. Confirm it parsed correctly (delimiter/encoding/header), is a single tidy table (one variable per column, one value per cell, one observation per row — no merged cells, stacked sub-tables, or multi-value cells), and that names/dtypes are sane. A mis-parsed table makes every column check meaningless; structural defects become transforms/checks too.

Part 2 — Per-column contract + rules + guardrails. Per column, determine its semantic type and canonical form, then emit: dtype, nullable?, key?, range (numeric min/max), regex (format), canonical categories + a merge_map of variants → canonical (repair guidance, not a check-time substitution), severity (default high for keys/required columns, else normal), and an optional outlier method. Add cross-column rules the data evidences (e.g. start ≤ end). Then the guardrails above (retention_floor, protected_columns, impute_cap). Three rules keep this trustworthy: commitment — every observed anomaly compiles to a check or is explicitly waived with a reason (several spellings of a value MUST get a categories check, never stay free text); canonical form is the stored value — declaring a canonical set creates the open violations the loop clears by rewriting; strictness bias — when unsure, add the stricter check (over-strictness is cheap to undo; a wrong check is worse than a missing one, so never guess column meaning the data doesn't evidence).

Confirm the inferred contract with the user (Claude Code: present as a compact table via AskUserQuestion; other: print as YAML and ask to confirm/amend). After sign-off, write the contract + the compiled checklist into <sandbox_root>/tcl/schema.yaml; the contract is then fixed for the run. Full contract shape: examples/run.example.yaml.

The checklist

Each contract rule compiles to one binary check that reports a violation count and a state. There is no weighted float and no epsilon — that single fact removes all denominator ambiguity.

check id (pattern)dimensioncounts violations where…
<col>.requiredcompletenessa nullable:false cell is null
<col>.typevaliditya non-null cell isn't parseable as the contract dtype
<col>.rangevaliditya non-null numeric cell is outside [min,max]
<col>.regexvaliditya non-null cell fails the format regex
<col>.categoriesconsistencya non-null stored value isn't a canonical category
<rule_id> (cross-column)consistencya row violates a cross-column rule
<col>.keyuniquenessa declared-key value is duplicated
rows.uniqueuniquenessa row is an exact duplicate
<col>.outlier (opt-in)plausibilitya numeric cell is a statistical outlier (only if a method is declared)

Check states: pass (0 violations) · open (violations remain, still attackable) · residual (violations remain but can't be fixed within guardrails without regressing another check — an accepted, reported dead end). Nulls are a violation only for .required — the .type/.range/.regex checks ignore nulls. Priority among open checks: highest severity first, then most violations. The headline checks_passing% = checks_in_pass / total_checks is for report.md and status lines only — it never drives keep/revert. Honest limit: the checklist measures well-formed & self-consistent, not true accuracy (is "John Smith" the correct name?) — outlier/range checks are the plausibility proxy.

Show full SKILL.md (878 more words)Show less

The loop

Let <best> be the current accepted version (starts at v0, an exact copy of <artifact>). Copy this checklist and tick items off, iterating on <best> until a stop condition fires:

  • Profile <best> — run deterministic profiling code → profiles/profile-vN.json (schema below): per-column stats + every check's violation count + state + retention + headline checks_passing%; write a 4–8 line human summary.
  • Pick the target & propose ONE transform — among open checks, pick by priority (severity high, then most violations). State the check id, its violation count, the repair strategy, and the expected effect. Never propose a transform you can't tie to a specific open check.
  • Write the transform as a pure transform(df) -> df pandas function, deterministic, touching only what the target check requires (it must run standalone in pipeline.py later).
  • Apply → candidate — load <best>, apply, write versions/vN+1.<ext>. On error, fix once; if still broken, log status=crash and discard (don't advance <best>).
  • Re-profile the candidate — re-run the checklist on vN+1 for new violation counts + retention.
  • Keep or revert (pure checklist logic, no epsilon) — accept iff the target check's violations strictly decreased AND no other check's violations increased AND no guardrail tripped. Else revert. If that was the last guardrail-safe strategy for the target, mark it residual.
  • Log + persist — append one ledger.tsv row. If kept: copy the function to transforms/tNN_<slug>.py and append its call to pipeline.py in order.
  • Check stops — if none fired, go to the next iteration on the new <best>.

Least-destructive principle (the loop's bias): prefer repair over removal. Try, and take the first that is guardrail-safe and regression-free: (a) repair (parse/standardize/ canonicalize the value), (b) impute (within <impute_cap>, flagged synthetic — nulling an unrecoverable value in a nullable:true column is repair, not imputation, and is uncapped), (c) remove (drop rows/cols, within retention + protected floors). Removal is a last resort. A check becomes residual only when all three genuinely fail — e.g. a malformed value in a nullable:false column where repair can't recover it, dropping breaches retention, and nulling would regress that column's .required check. An honest residual is correct; never null a required field or invent a value just to clear a check.

Stops

Because checks are deterministic counts, "done" is exact — no epsilon, no plateau heuristic. This is the key difference from the autoresearch loops: it is designed to terminate. Stop on any:

  1. All green — every check is pass. The clean, successful exit.
  2. All-residual — zero open checks remain (every check is pass or residual); the remaining violations are provably unfixable within the guardrails. The natural exit.
  3. Budget — <gate>/<budget> reached. Backstop only.

Before marking the last open check residual (which triggers stop #2), confirm you actually tried all three strategies (repair → impute → remove) — don't declare it unfixable just because the first regressed another check or hit a floor.

On stop: set cleaned.<ext> to <best>, write report.md, and print the final summary (headline checks_passing%, pass/residual counts, which stop fired).

Outputs & formats

The run produces three deliverables:

  1. cleaned.<ext> — the best version (copy of <best>).
  2. pipeline.py — a standalone, replayable script: read raw <artifact> → apply each accepted transform in order → write cleaned. Deterministic and idempotent; re-running it on the raw dump reproduces cleaned.<ext> exactly. The audit-grade artifact.
  3. ledger.tsv + report.md — the full audit trail and a before/after summary.

<sandbox_root>/tcl/ layout: schema.yaml (bindings + contract + compiled checklist), versions/ (v0.<ext> is the READ-ONLY copy of the raw artifact; new vN written per candidate), transforms/ (one file per accepted transform), profiles/, ledger.tsv, pipeline.py, report.md.

ledger.tsv — tab-separated, append-only, one row per attempt, never commas in free text. One row per schemas/ledger.schema.json; status ∈ {keep,revert,residual,crash}:

iter	transform_id	target_check	dimension	viol_before	viol_after	regressions	retention	status	rows_affected	cells_affected	summary
1	t01_drop_dupes	rows.unique	uniqueness	7	0	0	1.000	keep	7	0	remove 7 exact duplicate rows
2	t02_canon_status	status.categories	consistency	142	0	0	1.000	keep	0	142	rewrite variants to canonical set
3	-	contact.regex	validity	3	3	-	0.94	residual	-	-	repair impossible; drop breaches retention; null regresses contact.required

profiles/profile-vN.json — per schemas/profile.schema.json (per-column stats + every check's count & state + retention + headline). Compact instance:

json
{"version":"v2","rows":980,"cols":7,"checks_total":11,"checks_passing":9,
 "checks_passing_pct":0.82,"total_violations":3,"retention":0.98,
 "checks":[{"id":"status.categories","dimension":"consistency","scope":"status",
            "severity":"normal","violations":0,"state":"pass"}],
 "columns":[{"name":"status","dtype":"object","contract_dtype":"category",
             "pct_null":0.0,"n_unique":5}],
 "summary":"status canonicalized; one regex check residual on contact."}

report.md — v0-vs-final headline checks_passing%, the full checklist with start/end violation counts, the confirmed contract, the ordered accepted transforms (the pipeline), the residual set (with why), what was dropped/imputed, and which stop fired.

Constraints

  • The raw <artifact> is never modified — all work is in <sandbox_root>/tcl/; v0 is a copy, and the loop only writes new vN versions, because the raw dump is the replay ground truth.
  • Never add rows, fabricate a key/index, or invent values silently — imputation is allowed but flagged synthetic, logged, and capped at <impute_cap> per column.
  • Respect the guardrails — a candidate breaching the retention floor, dropping a protected column, or exceeding the impute cap is reverted no matter how many checks it cleared, because a checklist is otherwise gameable by deletion.
  • Every check is a deterministic count, not LLM judgement; the confirmed contract is the sole authority for "correct" — do not silently change the contract or compiled checklist mid-run.
  • Keep/revert is pure checklist logic — keep iff the target check improves with no regression and no guardrail breach. No epsilon, no weighted score driving the decision.
  • One transform per iteration, a pure pandas function tied to one open check, so each violation delta is attributable; no blind multi-step rewrites.
  • A check unfixable within the guardrails becomes residual and is reported — never forced shut by fabricating or nulling required data.
  • Keep pipeline.py faithful — exactly the accepted transforms in order; re-running it on the raw dump must yield cleaned.<ext>.
  • Do not pause to ask whether to continue while open checks remain — setup is the only human checkpoint; the loop runs to a stop condition. Do not install packages the env lacks beyond a consented pinned install, and do not commit tcl/ to git.

© gaasher, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files in loops/tabular-cleanup of gaasher/Agent-Loop-Skills.

  • SKILL.md
  • examples/run.example.yaml
  • schemas/ledger.schema.json
  • schemas/profile.schema.json

Open the folder on GitHubat commit f1169e6

Compare with similar skills

Tabular Cleanup next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Tabular Cleanup compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Tabular Cleanup this skillgaasher/Agent-Loop-Skills174—~4kAutomated safety check: PassMIT
Sn Da Image CaptionMichaelYang-lyx/AIDABench1111 repos~2kAutomated safety check: PassNone
Codebookbrycewang-stanford/Auto-Empirical-Research-Skills4.5k—~527Automated safety check: NotesCustom licence
Convert Fileduckdb/duckdb-skills6001 repos~720Automated safety check: NotesMIT
Excel ParserHarryoung/efka104—~2.3kAutomated safety check: PassApache-2.0
CSV and Excel MergerOneWave-AI/claude-skills323—~1.6kAutomated safety check: PassMIT

Similar skills

  • Sn Da Image Caption

    MichaelYang-lyx/AIDABench

    图片理解与数据提取 skill。当图片文件(.png/.jpg/.jpeg/.gif/.webp/.bmp)是主要输入且用户需要理解、提取数据或分析图片内容时使用。提供预配置的 caption 脚本(scripts/caption.py),通过 vision 模型将图片转为文本描述,无需额外配置 API Key。覆盖:(1) 通过 scripts/caption.py…

    111 GitHub starsUsed in 1 repo~2k tokens
    Documents & OfficeAuto-check passed
  • Codebook

    brycewang-stanford/Auto-Empirical-Research-Skills

    Auto-generates a Markdown codebook from a dataset (CSV, DTA, Excel, Parquet) with types and summary statistics.

    4.5k GitHub stars~527 tokensUpdated 2 days ago
    Documents & OfficeAuto-check: notes
  • Convert File

    duckdb/duckdb-skills

    Official

    Convert any data file to another format: CSV, Parquet, JSON, Excel, GeoJSON, and more.

    600 GitHub starsUsed in 1 repo~720 tokens
    Documents & OfficeAuto-check: notes
  • Excel Parser

    Harryoung/efka

    Smart Excel/CSV file parsing with intelligent routing based on file complexity analysis.

    104 GitHub stars~2.3k tokensUpdated 6 mo ago
    Documents & OfficeAuto-check passed
  • CSV and Excel Merger

    OneWave-AI/claude-skills

    Combines CSV, TSV and Excel files into one verified table with pandas, by stacking or joining, mapping columns, normalizing keys and removing duplicates.

    323 GitHub stars~1.6k tokensUpdated 5 days ago
    Documents & OfficeAuto-check passed
  • Generate Codebook

    Aperivue/medsci-skills

    A skill your agent uses when a tabular dataset (CSV, Excel, Parquet, Stata, SAS) needs a data dictionary.

    329 GitHub stars~1.1k tokensUpdated 2 days ago
    Documents & OfficeAuto-check passed

More from gaasher/Agent-Loop-Skills

All 21 skills in this repo
  • Alpha Evolve

    gaasher/Agent-Loop-Skills

    A skill your agent uses when the user wants to evolve an ML model/program through population-based search rather than a single sequential refine loop — a generational evolution where parallel…

    174 GitHub starsUsed in 1 repo~3.4k tokens
    Auto-check passed
  • Karpathy

    gaasher/Agent-Loop-Skills

    A skill your agent uses when the user wants the LLM to do its own ML research: a fully-autonomous loop that hacks the training code, runs it, and keeps changes that lower a single scalar metric (e.g.

    174 GitHub starsUsed in 1 repo~2.6k tokens
    Auto-check passed
  • Tournament Autoresearch

    gaasher/Agent-Loop-Skills

    A skill your agent uses when the user wants an autonomous ML research loop that pressure-tests competing ideas before spending compute — several research subagents each propose one architecture…

    174 GitHub starsUsed in 1 repo~3k tokens
    Auto-check passed
  • Dueling Autoresearch

    gaasher/Agent-Loop-Skills

    A skill your agent uses when the user wants two approaches raced head-to-head on a single shared metric — e.g.

    174 GitHub starsUsed in 1 repo~2.6k tokens
    Auto-check: warnings
  • Anomaly Investigation

    gaasher/Agent-Loop-Skills

    A skill your agent uses when the user has a known, already-observed anomaly in their data — a metric spike or drop, an outlier, an unexpected number — and wants its root cause diagnosed, not guessed.

    174 GitHub stars~2.1k tokensUpdated 3 mo ago
    Auto-check passed
  • Blue Team

    gaasher/Agent-Loop-Skills

    A skill your agent uses when the user has concrete failing cases in code or a guardrail/classifier/filter/prompt/API they own — a red-team failure catalogue OR a CI/CD test-failure report (failing…

    174 GitHub stars~3.6k tokensUpdated 3 mo ago
    Auto-check passed

Works with

Questions about Tabular Cleanup

What does Tabular Cleanup do?

A skill your agent uses when the user has a messy tabular data dump (CSV/TSV/parquet/Excel/JSON) and wants it iteratively cleaned to an inferred data contract — a checklist of deterministic…. Tabular Cleanup is an agent skill from gaasher/Agent-Loop-Skills. Use when the user has a messy tabular data dump (CSV/TSV/parquet/Excel/JSON) and wants it iteratively cleaned to an inferred data contract — a checklist of deterministic pass/fail checks, not a quality score.

When should I use Tabular Cleanup?

Tabular Cleanup fits situations like: not a quality score; tasks that involve CSV and tabular files; tasks that involve DataFrames.

How do I install Tabular Cleanup in Claude Code?

Run `npx skills add gaasher/Agent-Loop-Skills --skill tabular-cleanup -a claude-code`. Or copy the skill folder (loops/tabular-cleanup in gaasher/Agent-Loop-Skills) into .claude/skills/tabular-cleanup in your project. Claude Code loads it when a task matches its description.

How do I install Tabular Cleanup in Codex?

Run `npx skills add gaasher/Agent-Loop-Skills --skill tabular-cleanup -a codex`. Or copy the skill folder (loops/tabular-cleanup in gaasher/Agent-Loop-Skills) into .agents/skills/tabular-cleanup in your project. Codex loads it when a task matches its description.

Can I use Tabular Cleanup in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add gaasher/Agent-Loop-Skills --skill tabular-cleanup -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tabular-cleanup, .gemini/skills/tabular-cleanup, .github/skills/tabular-cleanup and .opencode/skills/tabular-cleanup in your project.

What does Tabular Cleanup need to run?

Going by SKILL.md and its folder, Tabular Cleanup needs the command-line tools its instructions call (uv). Our summary lists: Python 3. Compatibility (from SKILL.md): Requires Python 3.9+.

Does Tabular Cleanup access the network?

SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Tabular Cleanup safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Tabular Cleanup use?

Tabular Cleanup is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Tabular Cleanup use?

About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Tabular Cleanup?

Skills that share tags, products or a category with Tabular Cleanup: Sn Da Image Caption (MichaelYang-lyx/AIDABench, 111 stars), Codebook (brycewang-stanford/Auto-Empirical-Research-Skills, 4.5k stars), Convert File (duckdb/duckdb-skills, 600 stars) and Excel Parser (Harryoung/efka, 104 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Tabular Cleanup?

gaasher (a GitHub user) maintains it in gaasher/Agent-Loop-Skills, which has 174 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on June 30, 2026.

Source: gaasher/Agent-Loop-Skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.