DEV Community

Bankole David
Bankole David

Posted on

Fallow Slow and Steady file triage

Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady Submission πŸ¦₯

Fallow Slow and Steady file triage (Hacktoberfest 2026, Week 3)

devchallenge #hf26challenge #ai #opensource #python

Fallow: sort a messy Downloads folder in minutes, with zero cloud upload

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady.

What I Built

Fallow is a local file-triage tool that rewards laziness: you label a small batch of files once, and it predicts archive / keep / delete for every other file in your Downloads folder, ranks the best archive candidates, proposes cleaner filenames, and builds a static HTML site you can publish. It never moves, renames or deletes anything β€” it only suggests.

Field map of 260 files: 202 keep, 16 archive, 42 delete

The old friction was "label ~200 files by hand." Fallow cuts that with --autolabel --review: collect --autolabel pre-marks obvious files (temp/cache β†’ delete, old archives β†’ archive, recent media/docs β†’ keep), and label --review only prompts for the ambiguous remainder. On a real 260-file folder, 158 files (61%) were auto-labeled; only 102 needed a human decision. Setup once, label the exceptions, sort the rest forever.

Demo

A static page built from a real 260-file run β€” open it locally, no server required.

site/index.html

What this run actually did

Code

All CLI, CSV in / CSV out, no server, no database.

https://github.com/BANKOLEDO/fallow

How I Built It

Pipeline:

  1. collect β€” walks a directory, emits one CSV row per file (size, age, extension, folder, depth, name stats).
  2. label --review β€” crash-safe, resumable labelling; --review skips auto-labeled rows.
  3. classify β€” trains on your labels, predicts the rest, prints honest holdout accuracy.
  4. rename β€” proposes clean snake_case filenames via local Gemma through Ollama; never renames anything.
  5. report β€” plain-text triage summary: counts, reclaimable GB, oldest archive candidates.
  6. site β€” static HTML from your real results; --redact swaps real names for file_0001.ext.

Run order

Classifier fallback chain (never hard-fails): Local TabPFN β†’ Prior Labs TabPFN API (TABPFN_API_KEY) β†’ scikit-learn RandomForest with a loud [WARN] FALLBACK CLASSIFIER β€” results are NOT TabPFN.

TabPFN classify: 1.000 on a 35-row holdout

Open-weight models: TabPFN (local, optional, licence-gated) and Gemma 3 270M via Ollama (optional, rename proposals only). Everything else runs offline with no API key.

Why Does Open Innovation Matter?

A file-triage tool shouldn't require uploading your Downloads folder to a cloud API just to get filename suggestions. Fallow's core β€” collect, label, classify, report β€” runs fully offline with no API key. When TabPFN's licence step blocked headless on this machine, Fallow warned and fell back to the Prior Labs API instead of crashing. When Gemma 270M returned boilerplate JSON, Fallow kept the original name instead of inventing one. The failure mode is visible in the code, not hidden behind a vendor SDK.

My Agent Session

No DevRelay agent session recorded; this was built hand-to-keyboard and verified with python -m pytest -q β†’ 22 passed.

Proof, not promises: tests, offline core, honest limits

The Lazy Payoff

Setup takes a few minutes, once; daily effort after setup is near zero. Real run on 260 files (123.65 MB):

Demo outputs: CSV/DOCX/PDF/MP3 artifacts

FALLOW REPORT
=============
Files analysed: 260
Classifier:     TabPFN (Prior Labs API)
Holdout:        35/35 correct (accuracy 1.000)

Predicted action:
  archive    16   6.2%    9.30 MB
  keep      202  77.7%   99.00 MB
  delete     42  16.2%   21.36 MB

Reclaimable space (predicted delete): 0.02 GB (21.36 MB)
Average model confidence: 0.98 (lowest 0.53)
Enter fullscreen mode Exit fullscreen mode

Fallow triaged 260 files and found 0.02 GB that can likely be deleted. Nothing was moved, renamed or deleted.

Prize Categories

Week 3 awards one overall winner plus featured and partner categories. The ones I'm entering:

  • Best Use of TabPFN β€” local TabPFN classifier with Prior Labs API fallback
  • Best Use of Gemma β€” Gemma 3 270M via Ollama for rename proposals
  • Best Use of ElevenLabs β€” ElevenLabs voice recap (fallow_demo.mp3)
  • Best Use of Sentry Agent Tracing β€” Sentry traces on fallow.classify and fallow.prose
  • Best Use of Ultramarine (Paper Instruments) β€” Ultramarine report prose

Honest limits: local TabPFN licence acceptance needs a browser/token and cannot complete headless on this machine (the Prior Labs API path was used instead); Gemma 270M return mostly boilerplate for rename proposals; the 1.000 accuracy was measured on a small synthetic-ish folder, so real-world results will vary.

Full source: https://github.com/BANKOLEDO/fallow

Top comments (0)