git-afterlife: I Held a Séance for the Original flask.py A developer built git-afterlife, a command-line tool that mines a repository's git history for deleted files and generates an HTML "ofrenda" altar honoring each one with birth and death dates, contributors, the killing commit, and an AI-written epitaph. A séance mode lets users converse with a deleted file's "ghost," which answers in first person based on its real code and history, powered by Gemma 3 4B running locally via Ollama. In a demo, the tool resurrected Flask's original single-file flask.py, deleted in 2010 by a commit reading "out with the old. 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 repository has a graveyard. Somewhere in your git log there is a file that was born in a hopeful first commit, survived dozens of refactors, got blamed for bugs it didn't cause, and was finally deleted by someone typing a commit message like cleanup . Nobody lit a candle for it. git-afterlife does. It is a small command-line tool that digs every deleted file out of a repository's history and builds them an altar: an ofrenda , like the ones families raise on Día de los Muertos so that the people they lost can find their way home for one night. Each file gets a place on the altar with: Then there is the part that gave me chills the first time it worked: seance . You pick one dead file and talk to its ghost. It answers in first person, from its real code and history. I pointed it at Flask https://github.com/pallets/flask , and the most famous ghost on the altar is flask.py : the original single-file Flask, born on 2010-04-06 in a commit called Initial checkin of stuff that exists so far. , changed in 104 commits in less than three months, and laid to rest on 2010-07-02 by a commit whose entire message was out with the old . That file is where a framework used by millions of people started. git-afterlife gave it a candle. This is what happened when I asked it why it died: you › Why did they delete you? spirit › It was a simple deletion, a regrettable act. Justin Quick, in a commit message stating, "out with the old," removed me from the repository. My final moments were a consequence of that single commit – a forgotten relic, purged from the git history. Some of the epitaphs Gemma wrote for the altar: | The deceased | Epitaph | |---|---| | flask.py | "A microframework, purged with a dismissive 'out with the old.'" | | tests/flask tests.py | "Served Flask tests faithfully, then vanished with a split." | | setup.py | "A simple setup, swiftly replaced by a modern plea." | | docs/deploying/fastcgi.rst | "It guided deployments, then vanished with a rewrite." | The demo is built from scratch by GitHub Actions: a runner installs Ollama, pulls Gemma 3 4B, clones Flask, raises the altar and holds a séance with flask.py , then publishes everything to GitHub Pages. The altar is a single self-contained HTML page: papel picado swaying at the top, a flickering candle on every grave, marigold petals falling, and tiers like a real ofrenda, with one soul at the top and wider rows below. The first three souls also sat for a short séance , and their conversation is shown on their card. Open any card's portrait to read the file's last source code. Try it on your own repository in under a minute: ollama pull gemma3:4b or gemma3:1b on an older laptop git clone https://github.com/PauLopNun/git-afterlife.git python3 git-afterlife/afterlife.py summon /path/to/your/repo writes altar.html python3 git-afterlife/afterlife.py seance some/deleted/file.py /path/to/your/repo Or run it on any public repository without installing anything: fork the repo and use Actions → Raise the altar → Run workflow , choosing the repository and the model. Every repository has a graveyard: files born in a hopeful first commit, carried through dozens of refactors, and finally deleted with a one-line commit message Nobody remembers them. git-afterlife digs them out of your git history and builds them an altar, an ofrenda the altar families raise on Día de los Muertos to welcome back the ones they lost. Each deleted file gets a place on the altar with its birth date, its death date, the people who touched it, the commit that killed it, and an epitaph with its last words, written by an open-weight model running on your own machine . You can also hold a séance and talk to the ghost of a deleted file. It remembers its real code, who created it, and why it was removed. | summon | seance | |---|---| | Builds a self-contained HTML altar with papel picado, flickering candles, falling marigold petals and recorded séances | | The whole tool is one Python file that uses only the standard library, so there is nothing to pip install . MIT licensed. The open pieces: Gemma 3 https://ai.google.dev/gemma , Google's open-weight model, served by Ollama https://ollama.com . git-afterlife talks to Ollama's HTTP API on localhost with plain urllib . There is no SDK and no cloud endpoint anywhere in the code. 1. Git archaeology. git log --diff-filter=D lists every deletion in the history. Files that were later resurrected at HEAD are skipped, and so are binaries. To decide who gets a place on the altar, one more git log --name-only counts how many commits touched each path, so the longest-lived source files are raised first while lock files and configs are left to rest. For each soul: git log --