Getting started
Install
| Command | |
|---|---|
| Desktop app, macOS | brew install --cask irooftop/tap/irooftop |
| Desktop app, Windows | Installer (.exe) or .msi |
| Desktop app, Linux | AppImage, .deb or .rpm |
| Server, macOS and Linux | brew install irooftop/tap/rooftop (then brew services start rooftop) |
| Server, anywhere with Rust ≥ 1.88 | cargo install rooftop |
| Server, container | docker pull ghcr.io/irooftop/rooftop (Docker) |
The desktop app needs no terminal: see Desktop app.
Run
export OPENAI_BASE_URL=https://openrouter.ai/api/v1 # the default; any OpenAI-compatible API works
export OPENAI_API_KEY=…
export OPENAI_MODEL=openai/gpt-6-luna # must support tool calling
rooftop # http://127.0.0.1:8080The variables can also live in a .env file next to where you start rooftop, or be set later in Settings. Test in Settings sends a tiny request and tells you in plain words what is wrong, for example "openrouter.ai rejected the API key (401)".
Want nothing to leave your computer? Use a local model and Offline mode.
Your first chat
┌──────────────┐ ┌────────────────────┐ ┌──────────────────────┐
│ 1. Export │ ──▶ │ 2. Drop it onto │ ──▶ │ 3. New chat: pick │
│ the chat │ │ the page │ │ who the AI plays │
└──────────────┘ └────────────────────┘ └──────────────────────┘- Export a chat from Telegram Desktop or WhatsApp.
- Drop the folder,
.zipor WhatsApp.txtonto the page (or start withrooftop --import <folder>). - Press New chat and choose the persona: the other person, or yourself ("chat with myself in their style").
Try it without your own chats
The repository has two fictional exports in examples/: Jonas and Priya cook a lasagna on Telegram, Sofia and Daniel spend a weekend on WhatsApp.
git clone https://github.com/irooftop/rooftop && cd rooftop
rooftop --import ./examples/telegramNo export? Start from notes
New chat → From notes needs only their name (yours is optional) and a few lines about them: who they are, what you share, how they write ("calls me tesoro, short Italian messages, lots of ❤️"). The AI writes as them from those notes alone. There is no style profile or media library without a history, so the more the notes say about how they write, the closer it gets. You can edit the notes in the chat at any time (✎), and share the chat by link like any other. Deleting the chat deletes everything it had.
What's in the window
| Button | What it does |
|---|---|
| Share | Links for friends to talk to the persona |
| Media library | Every sticker, GIF, photo and voice message with what the AI knows about it |
| Notes | Things about the person the export doesn't say. The persona reads them, visitors never do |
{ } | The exact JSON sent to the model, and the tokens used |
| Rewrite | Drops the persona's last answer and writes it again |
| Let them write first | The persona starts the conversation |