Blackcat – Yet Another Personal Agent A developer released blackcat, an open-source personal agent that runs on a Raspberry Pi or any Linux machine with Node.js 22 or later, keeping a searchable local archive of WhatsApp, Telegram and mail messages, plus reminders, watches, checks and backups. Blackcat works without an AI model for commands, shortcuts and reminders, and optionally uses Anthropic's Claude Code — installed and signed in under the user's own login with no API key required — to accept plain-language requests such as "remind me every Monday to put the bins out." Model providers are pluggable, with Claude Code the only one supported today, and a bundled Telegram bot serves as the phone channel. blackcat is a personal agent that runs on a small always-on computer at home. It keeps a searchable copy of your messages, reminds you, watches for things you care about, and looks after your machines. You use it from a terminal on the machine. Optionally you also reach it from your phone through a channel : a chat that carries your messages to blackcat and its replies back. A Telegram bot is the channel that comes with it; others can be added as plugins. It works at two levels: - Without an AI model , it runs the commands, shortcuts, reminders and checks you set up. - With one , you also talk to it in plain words. It reads your messages for you, and it sets things up when you ask: "remind me every Monday to put the bins out", "make a /door command that sends me a picture from the front door camera", "watch the school group for anything I need to act on". you what do I need to do this week? blackcat Three things. The school trip form is due Thursday. Maya asked on Monday whether you can drive on Saturday and you haven't answered. The car insurance renews on the 14th. you remind me about the form on Wednesday evening blackcat Done. Wednesday at 18:00. | In a terminal | In Telegram | |---|---| It was written for a Raspberry Pi and runs on any Linux machine. It keeps its own services running, so it needs nothing from the system but a way to be started. - What it can do what-it-can-do - Requirements requirements - Install install , on a machine or in a container in-a-container - Set up set-up - Using it using-it - Core features core-features : messages, reminders, watches, briefing, checks, shortcuts, messages from your scripts, memory, backups - Plugins plugins : WhatsApp, Telegram, mail, calendar, SSH, this machine, Home Assistant, UniFi, Allsky, voice - Running it running-it - Security security - Files and settings files-and-settings - For developers for-developers - License license | | | Needs a model | |---|---|---| | Chat | Talk to it in plain words, in a terminal or a chat channel. It remembers what you tell it. | yes | | Commands | Every feature is a bc command. In a chat channel the same commands work with a slash: /backup now . | no | | Shortcuts | Commands you define: /door sends a picture from the front door camera. | no | | Reminders | "Remind me on Friday to call the bank", or /remind add … . | only for plain words | | Messages | WhatsApp, Telegram and mail in one local archive. Read-only. Search by keyword or by meaning. | no | | Watches | "Watch the school group for anything a parent must act on." Each keeps a list. | yes | | Daily briefing | One message each morning: today, tomorrow, the week, what is new. | only for what watches add | | Checks | "Is the camera still taking pictures? If not, restart it and tell me." | only to judge by description | | Machines | Other machines over SSH, this machine's health, Home Assistant, a UniFi network, an all-sky camera. | no | | Approvals | Anything that changes something is shown to you first. | | | Backups | A nightly copy to another machine or disk, optionally encrypted. | no | - Linux. With systemd, blackcat starts at boot by itself. Without it a container , you start it with one command. - Node.js 22 or later Optional, and recommended: - Claude Code https://claude.com/claude-code , installed and signed in, to talk to blackcat in plain words. blackcat runs the model through it, under your own login. No API key is needed. Claude Code is the one model provider supported today. What runs the model is a plugin, so others can be added, by this project or by anyone. - A Telegram account, to use blackcat from your phone through a bot of your own. sudo apt install git zstd gnupg openssh-client ffmpeg unzip imagemagick poppler-utils build-essential python3 git clone https://github.com/vpuna/blackcat.git ~/blackcat && cd ~/blackcat npm install mkdir -p ~/.local/bin && ln -sf "$PWD/bin/bc.js" ~/.local/bin/blackcat echo 'alias bc=blackcat' ~/.bashrc && source ~/.bashrc bc is only an alias, so scripts that call the calculator of the same name still work. If blackcat is not found afterwards, ~/.local/bin is not on your PATH yet: log out and in again most systems add it once the folder exists , or add it yourself. The folder you cloned into is the installation. blackcat keeps its settings and data in data/ inside it, created the first time you run a command. Nothing else needs creating. ~/blackcat is used in the examples here; any folder works. Set the machine's time zone. Reminders and schedules use local time. timedatectl set-timezone Europe/Lisbon There is a Dockerfile that follows the steps above. blackcat's own supervisor is the container's command, so nothing else is needed to keep it running. docker build -t blackcat . docker run -d --name blackcat --restart unless-stopped -e TZ=Europe/Lisbon \ -v blackcat-data:/blackcat/data -v blackcat-home:/home/blackcat blackcat docker exec -it blackcat bc status every command works the same way docker exec -it blackcat claude optional: sign in to Claude Code - /blackcat/data holds everything that is yours: settings, messages, logins, logs. /home/blackcat holds the Claude Code sign-in. Keep both outside the container, as above, so that an update loses nothing. - It runs as an ordinary user 99:100, which is what Unraid gives its shared folders . Use --user for another. - "This machine" bc host is the container, not the computer it runs on. For that computer, add it as an SSH host. - On Unraid, unraid/blackcat.xml is a template for the Docker tab. docker-compose.yml is the same thing for Compose. bc service install run in the background, now and at boot bc status what is running blackcat is now running in the background. That background service is what delivers reminders on time, runs checks and backups, and sends the daily briefing. You can already use it with commands: bc remind add Call the bank --in 2d bc shortcut add uptime --description "How long this machine has been up" --run uptime bc chat where reminders and reports arrive until you add a channel; type /help The two steps below are optional, and are what make it most useful. With a model you can write to blackcat in plain words, and watches can read your messages for you. claude sign in to Claude Code once, then /exit bc restart agent bc chat what can you do Every command in the sections below can then be done by asking instead. Some commands take many options a watch, a check with a fix, a shortcut with several steps ; saying what you want is easier, and anything that would change your machines is still shown to you first. Without a model, a message in plain words gets a one-line reply saying no model is set up, and everything marked "no" in the table above works. You can add a model at any time; watches pick up the messages that were waiting. With the bot you use blackcat from your phone, and reminders, reports and approval prompts reach you there. Create a bot with @BotFather https://t.me/BotFather and copy its token. bc tg bot pair paste the token, then scan the QR code with your phone bc restart agent The bot answers only the accounts you pair, and only in a private chat. In the chat, try /ping and /help . This bot is how you talk to blackcat. It is not the same as linking your own Telegram account bc tg account pair , below , which lets blackcat read your Telegram chats. You can have either without the other. The bot is one channel. Another Slack, Signal can be added as a plugin; see docs/plugins.md https://github.com/vpuna/blackcat/blob/main/docs/plugins.md channels . One channel is in use at a time, and the terminal always works beside it: bc channel . Each of these is optional and set up on its own. All of them only read, except where a row says otherwise. | To connect | Run | You need | |---|---|---| | WhatsApp messages | bc wa pair | your phone, to scan a QR code | | Your Telegram account's messages | bc tg account pair | an api id and api hash from my.telegram.org | | | bc plugin enable mail , then bc mail add | the address and an app password | | Calendars | bc plugin enable calendar , then bc calendar add | the calendar's iCal address | | Other machines, over SSH can act, with your approval | bc plugin enable ssh , then bc ssh add | the address and a user; you install the key it prints | | This machine: health alerts and commands can act, with your approval | bc plugin enable host , then bc host setup | nothing | | Home Assistant can act; see its section | bc plugin enable ha , then bc ha setup | the address and a long-lived access token | | A UniFi network and cameras | bc plugin enable unifi , then bc unifi setup | the console's address and an API key | | An all-sky camera | bc plugin enable allsky , then bc allsky setup | its address | | Voice notes | bc voice setup | nothing; the speech model is downloaded once and runs on the CPU | | Backups to another machine or disk | bc backup setup | an SSH host added above, or a folder | After enabling a plugin, run bc restart agent so the agent learns of it. bc plugin list shows what is switched on. In a chat channel, /setup asks the same questions with buttons. Each has its own section under Plugins plugins . bc