A self-hosted AI Discord bot that feels like a living member of your server, with a private admin dashboard, persistent memory, and a teachable knowledge base.
Landing page → · Download · Docs
Olisar reads the channels you allow, remembers context, builds a sense of who people
are, and chimes in with its own personality — by name, by @mention, by reply, in DMs,
through /ask, or unprompted when it can genuinely help. Everything is configured from
a React admin dashboard (Discord-OAuth, admins only), and it runs on the
free tier of Google Gemini, or on a key with billing on if you'd rather pay for
higher limits.
You run it yourself: one desktop app on your own machine hosts the bot, the API, and the dashboard together. There's no server to rent and no cloud, and all of your data stays local.
- Feels alive — persona you author, a private impression it forms of each member,
and four ways to engage (name trigger, @mention/reply, DM,
/ask) plus optional proactive chiming with cooldowns and quiet hours. - Remembers — rolling channel summaries, semantic recall, durable facts, and a
server-wide message search index ("where was that link posted?") that answers with
a jump-link. Members control their own data with
/privacyand/forget-me. - Learns — teach it web pages, whole sites (crawled), and uploaded docs (PDF/DOCX/TXT/MD); it chunks + embeds them in the background and draws on them in its own voice. A small glossary carries your community's dialect into every reply.
- Sees & draws — looks at posted images, describes them for search, and generates images (optional: Gemini with billing on, or Cloudflare Workers AI).
- Fully customizable — persona, behavior, per-channel modes, role-based access,
knowledge, extensions, and every system and command reply (with
{placeholder}templates), all from the dashboard. - Extensible — toggle packaged features (dice, calculator, concise mode) and a full
Star Citizen pack (live trade/ship/location tools +
/citizenprofiles). - Secure by design — Discord-OAuth login, admins only, with live permission re-checks: lose Manage Server and your console access is revoked on the next request.
- Free to run — each install uses your own Discord bot and your own API keys, and Gemini's free tier is enough; it falls back across a ranked chain of Gemini models when one is rate-limited. Turn on billing for the key for far higher limits; Olisar notices, raises its own caps to match, and shows what it's spending, held to a monthly budget if you set one.
👉 DOCUMENTATION.md — the complete documentation: install the desktop app, create your Discord application, the first-run wizard, optional remote access, every dashboard setting, knowledge & memory, extensions, privacy, and building from source.
In short:
- Install the desktop app (or run it from source — see the setup guide).
- Create a Discord application in the Developer Portal.
- Launch Olisar and complete the first-run wizard: paste the bot token and client secret, add the redirect URL it shows, press Add to Discord, and paste a Gemini key (a free one is enough). It turns on the intents the bot needs and notices when the bot joins your server.
- Sign in to the console with the Discord account that owns the application, or one that has Manage Server.
The same documentation is also available inside the dashboard, under Docs.
By default the console is local-only. To let other admins sign in from anywhere, Olisar
can publish the dashboard over Tailscale Funnel — a free, stable https://…ts.net
address with no domain and no port-forwarding required. The operator needs a free
Tailscale account; the admins who sign in don't need Tailscale at all. See
the documentation.
The desktop app checks for a newer release on launch and every few hours, and on demand from the tray → Check for Updates…. Install & Restart installs it in place; on platforms that can't self-install yet, it opens the installer download instead. Maintainers: see RELEASING.md for how to cut a release.
- Python 3.13 (managed with uv) — discord.py bot + FastAPI, run together on one asyncio loop.
- SQLite with
sqlite-vec+ FTS5 for hybrid semantic + keyword search; all data is local. - Google Gemini (free tier, or billing on) for chat, embeddings, vision, and web-grounded search, plus image generation with billing on; Cloudflare Workers AI for images otherwise.
- React + Vite + TypeScript dashboard, served same-origin by the backend.
- Electron desktop shell (macOS + Windows) bundling the PyInstaller backend, the
dashboard,
sqlite-vec, and a Tailscale Funnel helper.
olisar/ shared core — db models, config, runtime, persona, memory, knowledge, gemini
bot/ the discord.py process (cogs: conversation, members, slash, presence, …)
api/ FastAPI admin backend (auth, routers) — serves the dashboard same-origin
web/ React dashboard (Vite + TypeScript)
desktop/ Electron shell, PyInstaller spec, Tailscale Funnel sidecar
scripts/ init_db.py and other one-offs
arena/ live Discord testbed for iterating on Olisar's prompts (dev only)
arena/ is a testbed for the parts of Olisar that unit tests can't
reach: how it sounds, when it decides to speak, and whether its guardrails hold. It runs a
second Olisar instance against a throwaway Discord server populated by bots that play
members, scores the transcripts, and gates every prompt change on a fixed red-team suite.
It is development tooling — nothing in it ships, and the two hooks it needs in the core
(OLISAR_PEER_BOT_IDS, OLISAR_PROMPT_OVERRIDES) are inert when unset.
Everything Olisar knows lives in a single local database on the operator's machine.
There is no Olisar cloud. Opted-out members are never recorded or indexed; /forget-me
removes a person entirely; /self-destruct wipes everything learned while keeping the
persona and settings. The all-channel search index is an admin's explicit choice and is
disclosed by /privacy. See the in-dashboard Privacy doc for the full picture.
Free and open source.
