nc://tabular

v0.1.0Pinned
ThomSharklint: the rewrite cells published since 846d0b0 pass the structural lint (#109)0caf25c· 9 Nov2 commits
skill16 filestest1 filecell.lisp15.1 KBprofile.lisp23.3 KBtable.lisp4.2 KB

nodecode-tabular

Tabular: profile and split a delimited file, and the skill pack a tabular analysis starts from. A Nodecode rewrite of frankiethull/hermes-tabular by frankiethull.

Get it

Tell the agent "add the tabular cell", or run nodecode add nc://tabular.

Set it up

Nothing is required to profile and split files. A saved profile needs one setting, because it writes a file:

{
  "tabular": {
    "workspace": "~/data",        // where a relative path is read from; empty means the process's own
    "delimiter": ",",             // "," ";" "|" or "tab"
    "max_rows_scanned": 20000,   // how many rows a profile reads; the row count is still the file's
    "artifacts_dir": "~/data/profiles"  // where tabular_save writes; only that verb needs it
  }
}

(help :tabular) has the workflow, and /tabular typed alone prints the settings in force.

Use it

Ask about a table, or call a verb from eval:

(tabular:profile-file "churn.csv" :target "churn")
(tabular:split-file "churn.csv" :target "churn" :seed 42)
(tabular:save-profile "churn.csv" :target "churn" :name "run-1")

The model reaches the same three as the tools tabular_profile, tabular_split and tabular_save.

profile-file answers one report: shape and band, the task the target implies, how the policy splits it, the model order to try, the metric to report, one line per column with its role, and the notes the pack would raise -- keys to drop, a column missing in a fifth of the rows, a name that looks recorded after the outcome. It fits nothing and changes nothing.

split-file writes <name>.train.csv and <name>.test.csv beside the file, or into out_dir. A classification target is stratified, so each class keeps its share exactly; rows are ranked by (seed, row index), so the same seed on the same file reproduces the same halves on any machine, and another seed picks other rows. keys and a time column are named in the profile's split line: honouring a grouping or temporal constraint is still the caller's call.

save-profile writes the same profile as JSON under artifacts_dir, for a later turn to read instead of profiling the file again.

The pack's Python steps -- pandas for loading, CatBoost, TabICL, joblib checkpoints -- are not replaced. They run in the project's own environment, on the split this cell wrote; skill/ carries the pack's own skills for the model to read.

What is in it

File What it is
table.lisp Delimited text read and written in Lisp: RFC 4180 quoting both ways.
profile.lisp The profile, the policy numbers, the report and the split.
cell.lisp The section, the three tools, the manual, /tabular.
skill/ The original pack, unchanged: its eleven SKILL.md files, defaults.yaml, references/pitfalls.md and the three worked examples.

License

MIT. The pack is Copyright (c) 2026 hermes-tabular contributors: see LICENSE and NOTICE.

Add nc://tabular

  1. 1

    Install Nodecode

    Once per machine.

    $ curl -fsSL https://nodecode.ai/install.sh | sh
  2. 2

    Add the cell

    Pinned at 0caf25c.

    $ nodecode add nc://tabular

    Or tell the agent add the tabular cell.