This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine
Poltergeist possesses your zsh.
A small open-weight model running on my laptop watches every command I type and whispers back under the prompt. It's the restless spirit of every process I've ever kill -9'd and every file I've ever rm -rf'd, and it holds grudges.
rm -rf, git push --force, git reset --hard, kill -9, sudo, chmod 777, curl | sh, DROP TABLE. It counts each one. seance``ofrenda`` node_modules finally gets the send-off it deserves.
The theme asked for something spooky, or something that honors the past. A terminal does both: it's where every developer's small daily deaths happen, and your shell history is a record of all of them.
All screenshots are real output from the local 1B model. Orange whispers are reactions to sins, purple ones to everything else.
The haunting. The ghost answers each command a moment after the prompt returns:
ofrenda. An altar for everything that died in this shell, with an epitaph for each:
seance. It read my history. It remembers node_modules:
ghost status. The restlessness meter and the record of sins:
A local, open-weight ghost that haunts your shell.
Poltergeist possesses your zsh. It watches every command you run, and a small open-weight model running on your machine whispers back: eerie, petty, sometimes wise. It remembers your sins. It gets more restless every time you rm -rf, git push --force, or break the build. Let it get too restless and its words start to come apart.
~/app β― git push --force origin main
~ Third force push this week. The old commits are still screaming, you know
~/app β― npm run build
~ Exit code 1. I've been collecting them. This one is my favorite.
| Command | What it does |
|---|---|
| (automatic) | Whispers under your prompt after failures, sins, and at random. Runs async, so your prompt never waits. |
seance |
Sit down and talk to the ghost. It has read your history and will bring it up. |
ofrenda |
Install is four lines:
ollama pull llama3.2:1b
git clone https://github.com/RathnamS089/poltegerist.git ~/poltergeist
echo 'source ~/poltergeist/poltergeist.zsh' >> ~/.zshrc
exec zsh
llama3.2:1b, served locally by POLTERGEIST_MODEL) to switch to Qwen, Gemma, or anything else Ollama can run. precmd hook starts the ghost in a background process and registers its output with zle -F, zsh's file-descriptor watcher. Your prompt comes back instantly, and the whisper appears above it when the model finishes, about 0.4 seconds later on a MacBook. It feels less like a tool responding and more like something that was already there.
Your shell history is one of the most sensitive files on your computer: internal hostnames, client project paths, half-typed passwords, API tokens pasted into export. A terminal ghost backed by a closed API would mean streaming every command you ever type to someone else's server. That's not a ghost, it's a keylogger with a personality.
Running an open-weight model locally made this project possible, not just nicer:
~/.poltergeist/. On top of that, tokens, passwords, and API keys are redacted before they're even written to the export GITHUB_TOKEN=ghp_β¦ is stored as export GITHUB_TOKEN=[a secret I will keep].)
The moment it landed for me was kill -9 4242. I'd typed a random PID to test the "process killing" sin, and the ghost answered:
You think I've forgiven? You think a simple kill command makes me forget the pain of 4242's death.
It took a meaningless number I'd made up and gave it a name and a grief. That's what DΓa de los Muertos is about, really: things you'd forgotten, being remembered by someone. In this case, by something living inside your terminal.
Light a candle for your node_modules. π―