Fallow Slow and Steady file triage (Hacktoberfest 2026, Week 3)
devchallenge #hf26challenge #ai #opensource #python
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.
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.
Code
All CLI, CSV in / CSV out, no server, no database.
https://github.com/BANKOLEDO/fallow
How I Built It
Pipeline:
-
collectβ walks a directory, emits one CSV row per file (size, age, extension, folder, depth, name stats). -
label --reviewβ crash-safe, resumable labelling;--reviewskips auto-labeled rows. -
classifyβ trains on your labels, predicts the rest, prints honest holdout accuracy. -
renameβ proposes clean snake_case filenames via local Gemma through Ollama; never renames anything. -
reportβ plain-text triage summary: counts, reclaimable GB, oldest archive candidates. -
siteβ static HTML from your real results;--redactswaps real names forfile_0001.ext.
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.
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.
The Lazy Payoff
Setup takes a few minutes, once; daily effort after setup is near zero. Real run on 260 files (123.65 MB):
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)
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.classifyandfallow.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)