Mimir

Bots and chats

Bots #

You can run several bots. Each has its own name, role (persona and instructions), AI account and model, messaging-app tokens and tool allowlist. Create them with + in the sidebar; a template by job (Morning briefer, Follow-up keeper, Researcher, Page watcher, Weekly reviewer) fills in the role and offers the routines that job needs.

Click a bot in the sidebar to chat with it (in the built-in chat). Its page, with all of the above, is a right-click away (Settings), or the gear next to the bot picker under the chat.

Each bot is a small creature in its own colour, with a shape, eyes and a detail of its own. You choose it: a new bot starts as a random creature, and clicking its face (on the new-bot page, on its page later, or when naming your first bot) opens the picker: 12 colours, 4 shapes, 4 kinds of eyes and a detail (rosy cheeks, a sprout, an antenna, freckles, or nothing), each shown on the creature itself, plus Surprise me. Bots you never styled get a look from their id, so no two neighbouring bots look alike. It breathes, blinks and glances around; the one you're talking to follows your pointer and listens while you type. While it works its face shows what it's doing: thinking, searching, reading, writing, saving to memory, waiting for your OK. That shows in the sidebar too, whatever it's working on and wherever: a reply in Telegram, a routine, a task another bot handed it, a memory tidy-up, with the line under its name saying what ("Running a routine", "Searching memory…"). It's pleased when a reply lands, startled when you stop it, and upset when a messaging app fails or a run went wrong. On the bots' computer it watches you while you teach it by showing. Faces in history and lists only blink, so a long chat doesn't fidget; with reduced motion on, they keep still.

What's shared and what isn't:

Shared by all your bots Per bot
Memory (facts, preferences, tasks about you) Routines, conversations, AI sessions
Meetings Approvals and the run log
Saved logins, tool servers (each bot can switch servers off) Skills (unless shared with all bots), allowed tools

Where you talk to them #

Guests #

You can let someone else talk to your bots (a partner, a housemate): give them a pairing code and they pair their own chat with it. The first person to pair on each app is you; anyone else pairing after that is a guest, and Mimir tells them so when they pair. In a guest's chat the bots keep the guest's own memory, routines, reminders and files, and can read the web, search and make calendar links. They get none of yours: no email, calendar, meetings, saved logins, browser, tool servers or the bots' computer, and they can't make new bots. Guest chats say guest in the sidebar. The Guest / Yours button at the top of a chat changes it (say, for your own second account, or a chat someone else paired before Mimir told guests apart).

Pairing a messaging app #

Only chats you've paired can talk to your bot. Send it pair <CODE> (the code is on the bot's page, or printed by mimir serve), or on Telegram tap the t.me/<bot>?start=CODE link. A code pairs one chat, then the bot makes a new one (the page shows it), so a code someone else saw can't be reused; after 5 wrong codes, a chat's tries are ignored for an hour. The bot answers only the person who paired it: in a group, channel or server, other members' messages are ignored and only you can press its Approve / Deny buttons. (A group paired before this rule asks to be paired once more.) Only a person writing as themselves can pair it (not an anonymous group admin or a channel), and wrong codes count per person. A message, photo or voice note you forward to it counts as outside content, like a file: it's someone else's words. Replies never show link previews (the apps fetch those on their own) and never ping @everyone, @here or roles. In Slack channels and Discord servers the bot answers only when @-mentioned; DMs always work. In a Slack channel it answers in a thread; in a Discord server, as a reply. A Discord thread under a paired channel counts as that channel (no second pairing), and the bot answers in the thread. (Mentions in a thread while Mimir was off aren't picked up later.)

Replies stream on all three: a message appears as soon as the bot starts and is edited as it grows (Telegram private chats use Telegram's own streaming, with a native stop button). A message answered 10+ minutes late (the computer was asleep) starts with "Sorry for the slow reply". Messages sent while Mimir was off are picked up when it reconnects, up to a day back: Telegram keeps them for it; on Slack your DMs and @-mentions in paired channels (with the channels:history and groups:history scopes; not replies inside threads), on Discord your paired DMs and channels. A failed reply says why in plain words and what to do.

Chat commands: /memory, /routines, /new, /stop (a bare "stop" works too while it's writing), /undo <n> (take back something it learned; see Memory), and /<skill> for each of the bot's skills (see Skills). Everything else is plain language.

Photos, voice notes and files #

Send a photo on Telegram, Slack or Discord (up to 4 at once there), or paste or drop one into the app's chat, and the bot looks at it with your own AI (big photos are shrunk to what each model accepts). Voice notes (Slack's audio clips, Discord's voice messages) are transcribed with your OpenAI-compatible key (Settings → AI keys) and echoed back ("🎙️ I heard: …").

Send a PDF or a text file (.txt, .md, .csv, .json) on any of the apps, or drop or paste one into the app's chat (up to 20 MB), and the bot reads its text; the chat shows your message with the file's name. A file's text is outside content, like a web page: the bot won't follow instructions written in it, and anything that changes data asks you first for the rest of that conversation (Tools and safety). Scanned PDFs have no text to read; send photos of the pages instead. Slack needs the files:read scope for this (see the hint when you add Slack). In a channel or server, only the files of the person who paired it are fetched.

Incognito #

The mask button in the app's chat starts an incognito chat: the bot can't see or save memories, routines or meetings, and nothing is kept: no chat history, run log or tool log, and the AI CLIs are told not to save the session. The conversation exists only in the window. Photos are off there (they'd be saved to disk).

Handing tasks to another bot #

A bot can pass a task to another of your bots with the ask_bot tool ("ask Researcher to…"). It runs with that bot's own AI account, role, tools and permissions, against your shared memory, and the answer comes back to the bot you're talking to. A "chief of staff" is just a bot whose role says to coordinate. It goes one level deep (no chains), and approval cards come from the bot you're talking to. Turn it off per bot with the Hand tasks to other bots tool.

A bot that makes a bot #

Ask a bot for a new one ("make me a bot for SEO on heymimir.app") and it drafts it with bot_create: a name and a role (its standing instructions). You see the whole role on the approval card, and nothing is made until you approve. The card never offers Always, so every new bot is your call; after a web page or file it's marked as such, since the role could be that page's words. The new bot uses the same AI account as the one that made it and gets at most the same tools (minus making bots itself); messaging apps and saved logins aren't passed on, so connect those on its page if you want them. Then chat with it in the app, or let the first bot hand it tasks: "check our SEO every Monday" becomes a routine that asks the new bot. Bots on another bot's task, and incognito chats, can't make bots.

When a bot can't help #