A new open-source prototype named Ghostkeeper is challenging the prevailing assumption that larger models are always better for narrative tasks. Submitted for the Hacktoberfest 2026 "Ghost in the Machine" challenge, the tool uses a 1-billion parameter Gemma model (gemma3:1b) running locally via Ollama to curate personal memories. The core innovation isn't the model's size, but its restricted role: it selects passage IDs rather than generating text, ensuring that the original evidence remains untouched by hallucination.
Restricting Model Authority Over Evidence
The developer, Aman, identified a critical flaw in early AI memory tools: the tendency to rewrite or embellish source material. In the initial version, the model was asked to return quotations and source identifiers directly. This approach failed validation because the model would produce quotes that were "nearly" the source but not exact, or invent source UUIDs. The solution was architectural rather than prompt-based. The system now splits source text into numbered passages (e.g., P1, P2) using Intl.Segmenter. The model is constrained by a JSON schema to select only these existing IDs. The server then resolves these IDs back to the exact original text, bypassing the model's ability to alter the evidence.
Local-First Privacy and Offline Portability
Ghostkeeper operates as a local-first personal museum, built on Next.js, React, and TypeScript. By running inference on the user's hardware, it eliminates the need to upload sensitive family stories to cloud APIs. The workflow involves attaching an object (like a photo of a recipe card) with an attributed account. The local Gemma model suggests questions and selects key passages, but the user retains final approval. Once approved, the exhibit is exported as a self-contained HTML file. This file includes the image, quotations, and full source text, requiring no JavaScript or remote fonts to view, ensuring the memory outlives the app itself.
Optional Narration Without Voice Cloning
While the core curation is local, the project offers an optional integration with ElevenLabs for audio narration. This feature is strictly consent-gated and uses stock voices, avoiding the ethical pitfalls of voice cloning deceased relatives. The narration script is built from approved quotations and attribution, explicitly reminding the listener that these are attributed memories, not verified facts. The developer emphasized that the model does not simulate a conversation with the dead; it simply helps organize what remains. The ElevenLabs key remains server-side, and errors are handled distinctly to avoid leaking credentials.
Key Takeaways
- Architectural Constraint: The model selects passage IDs, while code retrieves the text, preventing hallucinated quotes.
- Local Inference: Uses
gemma3:1bvia Ollama, allowing users to keep private data offline. - Validation Rigor: A strict validator rejects any quote that is not an exact substring of the source, ensuring traceability.
- Portability: Exports to self-contained HTML that works without the app or an internet connection.
The Bottom Line
Ghostkeeper proves that in memory preservation, less model autonomy is often more trustworthy. By forcing the LLM to act as a librarian rather than an author, it solves the hallucination problem through code, not just prompts.
Limitations and Next Steps
The project is currently a single-user local prototype. It does not support audio transcription, handwriting recognition, or web research. The archive is not encrypted by the app itself, relying on the user's machine security. The developer notes that while the exact-quote check ensures the model didn't invent text, it cannot verify if the user's memory is historically accurate. Future work aims to evaluate question quality with real users and handle contradictory accounts without merging them into a false single truth.