Open source · Apache-2.0 · pre-release

The open-source runtime that keeps your AI bots’ sessions alive.

Disconnect, restart the daemon, reboot the host. Each bot keeps its session, and you pick it up where you left it: from a team chat in the browser, or with botkeep attach in a terminal.

curl -fsSL https://botkeep.app/install.sh | sudo bash

Ubuntu 22.04+ or Debian 12+. The installer ships with the first release; until then it only prints where to follow along.

What Botkeep looks like

rafa@vps: ~
$ botkeep new
  name    Nick
  handle  nick
  driver  claude-code
✓ created @nick · starting

$ botkeep send nick "Move the billing tests to vitest and open a PR"
✓ accepted · queued for @nick

$ botkeep logs nick --follow
▸ Bash   npm test
▸ Edit   src/billing/invoice.test.ts
◆ daemon restarted · keeper still running
▸ Bash   npx vitest run

$ botkeep attach nick
attached to @nick · Ctrl+] to detach
Team
  • NNickworking
  • BBiaidle
  • OOpsqueued 2
@nickworking 12m

Move the billing tests to vitest and open a PR.

▸ Bash  npm test

▸ Edit  src/billing/invoice.test.ts

restarted after host reboot · resumed

▸ Bash  npx vitest run

e-mail · untrusted

from ci@build.example.com

subject Pipeline passed on branch vitest-billing

Billing tests run on vitest now and the pipeline passed. PR is open for review.

Illustration of the Botkeep CLI and web UI. Botkeep is pre-release; screens may change.

How persistence works

Sessions don’t live in your terminal, or in the daemon.

Botkeep separates the thing you talk to from the thing that keeps your bot running.

  1. 01

    A keeper per bot

    Each bot’s session runs under its own keeper, detached from the daemon. Stop, kill or upgrade the daemon and the session keeps working. When it comes back, it reconnects to every live keeper.

  2. 02

    Every event on disk first

    The keeper writes each event to the bot’s event log on disk before acknowledging it. Clients resume from the last event they saw, with no gaps and no duplicates.

  3. 03

    Back after a reboot

    After a host reboot, every bot that should be running starts again and resumes its conversation. A turn that was cut off is re-delivered with a note saying so.

Features

Run a small team of bots like services, talk to them like people.

  • Persistent sessions

    Sessions survive disconnects, daemon restarts and reboots. Crashed agents restart with backoff and resume their conversation.

  • Attach and detach

    Watch and steer a live session from the browser or with botkeep attach nick. Ctrl+] detaches and the bot keeps going.

  • Team chat

    Every bot in one list with its status. Messages sent while a bot is working are queued, in order, and never lost.

  • Bot e-mail

    Give a bot its own address. Inbound mail arrives as a message marked untrusted; unknown senders wait for your approval.

  • Computer use on demand

    A bot can lease a disposable desktop for a short task. Every lease has a TTL; you can open the live view or kill it.

  • Operator CLI

    new, send, logs --follow, attach, doctor and more, locally or remotely with an API token. Listings support --json.

Self-host

Your server, your bots, your data.

Botkeep is Apache-2.0 and runs on a VPS you control. One command installs it as a service with its own botkeep user. Bots never run as root.

  • Ubuntu 22.04+ or Debian 12+, x86-64 or arm64
  • The daemon listens on 127.0.0.1; reach it over an SSH tunnel
  • Add --domain for HTTPS with automatic certificates
  • Prefer containers? A Docker image is available too
  • botkeep doctor tells you what is misconfigured
curl -fsSL https://botkeep.app/install.sh | sudo bash -s -- --domain bots.example.com
# then open the printed setup link
✓ botkeepd.service running
  open https://bots.example.com/setup?token=…

$ botkeep doctor
pass  node
pass  data dir permissions
pass  claude found, logged in
warn  computer provider not configured
Read the source

Hosted plan

Rather not run a server?

We are considering a hosted Botkeep. It is a waitlist for now: no plans, no billing. Leave your e-mail and we will write when there is something to try.