ofrenda — lighting a candle for the files your repository deleted A developer built ofrenda, an open-source command-line tool that scans a git repository's history for deleted files and generates a eulogy for each one using a locally run model. The tool reconstructs each file's lifespan from git metadata — the commit that created it, its contributors, and its content at the moment of deletion — then feeds that record to gemma3:4b via Ollama to produce a grounded epitaph and short story, writing the results to a single self-contained HTML page. It ships with flags for limiting output, swapping in smaller models, JSON export, and custom output paths. This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine https://dev.to/challenges/hacktoberfest-week4-2026-10-26 Every git repository is a graveyard, and nobody holds the ceremony. Somewhere in your history there's a pricing.html that shipped before the product existed, an app v2.py from the rewrite that never finished, a stylesheet in hotpink you were proud of for six hours. git log will tell you when they died. It will never tell you what they meant — so they rot, unmourned, while you scroll past their filenames looking for something else. ofrenda is the ceremony. It's a Día de los Muertos altar for your code: bash $ ofrenda examples/graveyard-repo ofrenda :: 4 departed :: model gemma3:4b 1/4 app v2.py “Served 'eventually'. Rest now.” 2/4 index.html “A valiant start, now dust.” 3/4 pricing.html “A valiant, if misguided, attempt.” 4 remembered, 0 unspoken ofrenda lit → …/ofrenda.html The tool walks your history for every deleted file and digs up its whole life: the commit that created it, the people who touched it, how many commits it survived — and, on the eve of its death, the literal content it was still carrying. Then it hands that record to a model running on your own machine and asks it to say a few words. What comes back is one I interpreted "Ghost in the Machine" this way: the ghosts aren't monsters, they're the dead we didn't memorialize , and the machine finally gets to speak for them. Halloween gives you the graveyard; Día de los Muertos tells you what to do there — remember deliberately, warmly, and with candles. Who this is for: anyone who has ever rewritten a project "from scratch" and later wondered what the old version actually did; maintainers doing cleanups who want a moment of gratitude before the rm ; teams onboarding someone who needs to understand not just what exists, but what was tried and abandoned. No deployment needed — it's your own machine, and the page it prints is a single file you can open with the Wi-Fi off. git clone https://github.com/itzneel05/ofrenda && cd ofrenda ollama pull gemma3:4b pip install -e . python examples/make demo repo.py grows a small graveyard to mourn ofrenda examples/graveyard-repo writes ofrenda.html Real captured output — four dead files, four eulogies, straight from gemma3:4b : ofrenda :: 4 departed :: model gemma3:4b 1/4 app v2.py “Served 'eventually'. Rest now.” 2/4 index.html “A valiant start, now dust.” 3/4 style.css “A vibrant blush, now gone.” 4/4 pricing.html “A valiant, if misguided, attempt.” 4 remembered, 0 unspoken ofrenda lit → C:\...\ofrenda.html And what the model wrote for pricing.html , verbatim from --json : { "path": "pricing.html", "epitaph": "A valiant, if misguided, attempt.", "story": "Launched with a bold promise of zero cost, pricing.html bravely represented the nascent product — a testament to early enthusiasm and, frankly, a bit of optimism. Its short existence ended abruptly when the Demo Author deemed its message 'sad'.", "cause of death": "deleted", "beloved": "Zero cost", "Early optimism", "A brief, memorable moment" } Every claim in that story is grounded in evidence the tool actually fed it: the file's content