Séance: Summon the Ghost of a Dead GitHub Repo A developer built Séance, an open-source tool that turns abandoned GitHub repositories into speaking "ghosts." The app pulls repo metadata, README, open issues and recent commits via four GitHub API calls, feeds them to a locally run Gemma model (gemma4:e4b via Ollama) that replies in first person as the dead project, then voices the response through ElevenLabs' eleven_v3 with custom NumPy crypt-style reverb and a low drone. The developer said the open-weight model was central to the project: "Séance only works the way it does because the model is open. 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 developer has a repo they walked away from. It sits on GitHub with its last commit, its unanswered issues and a README full of plans that never happened. It isn't gone, only silent. Séance gives it a voice. You paste the link to an abandoned GitHub repo. Séance reads its description, README, open issues, recent commits, star count and last push date. A local Gemma model then plays the repo's ghost in the first person, and a haunted voice speaks the reply aloud. After that you can keep talking to it, asking why it died, what it was proud of and what it wished someone had finished. I took "Ghost in the Machine" literally. A dead repo is a ghost in the machine: still there, still addressable, still carrying its own history. Séance turns that history into a story you can listen to. Summon the ghost of an abandoned GitHub repo. Paste a dead repo's link and its ghost speaks to you in a haunted voice, telling you how it died. Then you can ask it anything. An open-weight Gemma model runs locally on your machine and does the thinking, and ElevenLabs gives the ghost its voice. Built for the DEV Hacktoberfest Open-Source AI Challenge, Week 4: Ghost in the Machine The open-source AI. The ghost's brain is gemma4:e4b , an open-weight Gemma model that I run locally through Ollama. The system prompt gives it a persona and a set of rules: speak in the first person, be haunting and a little sad, mention specific details as memories rather than as a report, keep it to three short sentences, and use only the facts provided. Those facts come from four GitHub API calls: repo info, README, open issues and recent commits. Pull requests are filtered out of the issue list, so the ghost mourns real unanswered issues and not merged work. The voice. The reply goes to ElevenLabs eleven v3 , which understands expressive tags like whispers and sighs . I then process the raw audio myself in NumPy. A synthetic crypt-style reverb and a faint low drone sit under a single voice. The interface. The UI is Streamlit with custom CSS and inline SVG, with no image assets: a blood moon, drifting clouds, bare branches, an owl with glowing red eyes, bats with flapping wings, step cards with torn edges, and a Summon button that drips. What went wrong first Séance only works the way it does because the model is open. ghost.py . Pointing it at another open model gives the ghost a different personality, and I could tune the persona without waiting on anyone's roadmap. I should be upfront about the one closed piece: the voice. The open model carries the project, and the voice is the finishing touch. I summoned mojombo/grit , an old Ruby Git library, and the ghost said: "I was... a vibrant engine, once powering grand things... Now, only echoes remain of my object-oriented grace..." A dead project's own history, spoken back in a whisper, hit differently than reading its commit log ever has. Every abandoned repo was once someone's late nights and good intentions. Hearing it talk made me want to go back and finish one of mine. eleven v3 model, with my own audio effects layered on top.