Skip to content
joaomjPublic

About

A self-hosted chatgpt.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

44 Commits

Folders and files

Repository files navigation

Finrod

A personal AI assistant that lives on your home server.

Finrod runs on a home server and you open it as a web app on your phone, installed on the home screen. It is reachable only over your tailnet. Chats and memory stay on the server in files you own, models stay interchangeable, and nothing about the assistant belongs to a vendor.

Status: v0.3.0 is built and in final checks; it is not released yet. The v0.2.0 browser chat is retired; its history was test data and there is no migration.

Roadmap · v0.3.0 requirements · Documentation

What it does

  • Chat with streamed answers and Markdown, in separate conversations that any tailnet device can reopen.
  • Web research through Exa, with the sources listed under each answer. Connect your own Exa account to avoid the free tier's rate limit.
  • Send photos, screenshots, PDFs, and text files, up to 20 MB each.
  • Thumbs up or down on each answer.
  • Delete a conversation, or start a temporary one that is never written to disk.
  • A server restart loses no saved message; an answer cut off by it shows as interrupted.

v0.3.0 has no voice input. See the voice decision in the v0.3.0 requirements.

Setup

You need a Linux home server on your tailnet, Node 22.19 or later, and an OpenRouter API key with zero data retention set in the OpenRouter account. Install Finrod from a GitHub release as a systemd user service, then publish it over HTTPS with Tailscale Serve. The steps are in Operations.

To work on Finrod locally:

npm ci
npm run build
OPENROUTER_API_KEY=... npm start

Then open http://127.0.0.1:8787.

Privacy boundaries

Finrod has no public address; only tailnet devices reach it, and Tailscale encrypts that traffic. Chats and files stay on the server. Model requests go through OpenRouter to zero-data-retention providers only: the provider receives the context of each request but does not keep it. Exa receives research queries and the URLs Finrod reads. Chats and files are not encrypted on the server's disk. Details are in v0.3.0 requirements.

Why Finrod?

Finrod Felagund was a king of the Noldor, founder of the hidden realm of Nargothrond, and one of the Elven leaders who stood against Morgoth in J. R. R. Tolkien's The Silmarillion. But his strength was not only that of a ruler or warrior. He was also a seeker of understanding across the boundaries of his own people.

When Finrod encountered the first Men to enter Beleriand, he stayed among them, learned their language, and shared his knowledge. His conversations with the mortal woman Andreth explored the differences between Elves and Men: mortality, loss, and hope. He did not merely have answers to give; he took another people's experience seriously enough to listen and question.

His loyalty also had a cost. Bound by his promise to Barahir, Finrod aided Barahir's son Beren even when his own people would not follow him. Captured by Sauron, he ultimately broke his bonds and killed the werewolf sent to devour Beren, receiving mortal wounds himself. His story joins wisdom and power to responsibility: a promise mattered more than the safety of his throne.

That is the spirit behind this name. Finrod should be a capable companion in thought: bringing knowledge to a conversation without replacing the person at its center, helping ideas survive beyond a single exchange, and treating trust as a responsibility rather than a claim of authority. The literary namesake sets an aspiration—not a claim that software possesses his wisdom or virtue.

Documentation

Guide What you will find
Roadmap Phase index: v0.3.0, V2 connectors, V3 memory
v0.3.0 requirements Outcomes, scope, decisions, and privacy boundaries
Architecture Components, request flow, storage, and files
Operations Configuration, install, updates, backup, and troubleshooting
V2 connectors Sketch: MCP connectors, OAuth, approval-gated writes
V3 memory Sketch: portable second brain
STT eval Transcription test results, kept for a later voice feature
Retired v0.2.0 docs The browser-only product's requirements, behavior, and evidence
Changelog Versioned changes and release notes

About

A self-hosted chatgpt.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages