From bb99b36994fdb209a7bfa04dbaf17ffde2547650 Mon Sep 17 00:00:00 2001 From: Phelipe Lorran <112786693+httpsphl@users.noreply.github.com> Date: Thu, 1 Oct 2026 21:41:29 -0300 Subject: [PATCH] docs: Botloft on Linux and macOS in the README and the code signing policy Downloads and first opening for each system (macOS is not notarized, so Open Anyway), where data lives, what Botloft changes on each system, and how to stop the background service before removing the app on Linux and macOS, where no uninstaller does it. --- README.md | 87 +++++++++++++++++++++++-------------- docs/code-signing-policy.md | 33 +++++++++++++- 2 files changed, 86 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index b152f9c3..ac1a7680 100644 --- a/README.md +++ b/README.md @@ -5,18 +5,18 @@
- A crew of Claude Code bots that stays on and works together on your Windows PC. + A crew of Claude Code bots that stays on and works together on your computer.
- Download for Windows
+ Download
·
Features
·
@@ -48,9 +48,9 @@ you decide what they may do.
for it. Watch the screens it designs take shape while it writes them. Open the files it made.
- **Schedule routines.** Weekday mornings, every two hours or any cron schedule, with missed runs
and overlaps handled.
-- **Leave them running.** Bots keep working after you close Botloft. They start with Windows, come
- back within a minute if something crashes and keep the PC awake while they work. Botloft waits
- near the clock and tells you when a bot needs you.
+- **Leave them running.** Bots keep working after you close Botloft. They start when you sign in,
+ come back soon after a crash and, on Windows, keep the computer awake while they work. Botloft
+ waits near the clock and tells you when a bot needs you.
- **Choose per bot.** How much it asks before acting, and which Claude model it uses. See how much
of your plan's usage is left.
@@ -70,21 +70,33 @@ itself.
## Get started
-You need Windows 10 or 11 (64-bit) and [Claude Code](https://code.claude.com/docs/en/setup),
-installed and signed in once with your Claude account. Bots run on your own Claude plan.
-
-1. Download `Botloft_Do I need to keep the window open?
-No. The bots run in the background, even after you close Botloft, and start with Windows if you want.
+No. The bots run in the background, even after you close Botloft, and start when you sign in if you
+want.
Settings has a switch to stop them when you close the app instead.
Where are my bots and their files?
-Each bot has a folder under `%USERPROFILE%\Botloft\Why does Windows warn me when I install it?
+Why does Windows or macOS warn me when I install it?
-The installer is not code-signed yet, so SmartScreen does not know its publisher. Each release is
+The Windows installer is not code-signed yet, so SmartScreen does not know its publisher, and Apple
+has not notarized the macOS app, so Gatekeeper blocks its first opening until you allow it. Each release is
built by GitHub Actions from this repository, and updates are signed and checked by the app before
they install. The [code signing policy](docs/code-signing-policy.md) says how releases are made and
how to check a download.
@@ -162,7 +177,10 @@ how to check a download.
Does it run on macOS or Linux?
-Not yet. Botloft is Windows-first: it uses scheduled tasks, Job Objects and Windows notifications.
+Yes, as a preview since 0.8.0: Linux (64-bit, `.deb` or AppImage) and macOS on Apple Silicon. Intel
+Macs are not supported yet, and keeping the computer awake while bots work is Windows-only for now.
+Windows came first and has had the most use; if something does not work elsewhere, please
+[open an issue](https://github.com/httpsphl/botloft/issues).
Development
-Requirements: Windows 10 or 11, Rust stable (MSVC toolchain), Node.js 24 and pnpm. Running real
-bots also needs Claude Code (the native `claude.exe`) installed and signed in.
+Requirements: Rust stable (the MSVC toolchain on Windows), Node.js 24 and pnpm. On Linux, the app
+also needs the desktop libraries Tauri uses (on Ubuntu: `libwebkit2gtk-4.1-dev`,
+`libayatana-appindicator3-dev`, `librsvg2-dev`, `libxdo-dev`). Running real bots also needs Claude
+Code (the native `claude` executable) installed and signed in.
```powershell
# Daemon and libraries
@@ -198,13 +218,14 @@ pnpm install
pnpm tauri dev
pnpm dev # the UI alone in a browser, with a fake daemon and sample crews
pnpm check # typecheck + Biome + Vitest
-pnpm bundle # NSIS installer with the daemon inside
+pnpm bundle # this system's packages with the daemon inside: NSIS, .deb and AppImage, or .dmg
```
Set `BOTLOFT_HOME` to an absolute path such as `$PWD\.dev\home` during development so the daemon
never touches a real installation in `%LOCALAPPDATA%\Botloft`.
-The daemon manages its own scheduled task:
+The daemon manages its own scheduled task (a systemd user service on Linux, a launch agent on
+macOS):
```powershell
botloftd service install # copy botloftd into the data folder, start it now and at every logon
diff --git a/docs/code-signing-policy.md b/docs/code-signing-policy.md
index 770cb922..69dbd05a 100644
--- a/docs/code-signing-policy.md
+++ b/docs/code-signing-policy.md
@@ -18,13 +18,19 @@ and the uninstaller as soon as a certificate is in place. All of them carry the
Botloft does not have a code signing certificate yet. When it gets one, this page will say whose
name is on it, and every release from then on will be signed with it.
+On macOS, Botloft is not notarized by Apple: there is no Apple Developer account for it yet. The app
+carries an ad-hoc signature only, so macOS blocks its first opening until you allow it in System
+Settings > Privacy & Security > Open Anyway. The Linux packages (`.deb` and AppImage) are not
+signed either. On every system, updates are signed with Botloft's own updater key (below).
+
## How releases are made
- Every release is built by GitHub Actions ([`release.yml`](../.github/workflows/release.yml)) from
a `vX.Y.Z` tag on `main`, on GitHub's own runners. Nothing is built on a maintainer's computer.
- The workflow opens a draft release. A person reads it and publishes it: no release goes out
without that manual approval.
-- Each installer gets a build provenance attestation, and the release notes list its SHA-256. To
+- Each download (the Windows installers, the Linux packages and the macOS disk image and update)
+ gets a build provenance attestation, and the release notes list its SHA-256. To
check that a download came from this repository's workflow, with the
[GitHub CLI](https://cli.github.com/):
@@ -66,9 +72,34 @@ on `127.0.0.1` only. What goes over the network:
this off.
- Bots keep their work in `%USERPROFILE%\Botloft`, or in the folder you pick for a crew.
+On Linux and macOS (preview since 0.8.0):
+
+- **Linux:** the `.deb` installs the app in `/usr/bin` (installing it asks for your password, as any
+ package does); the AppImage stays wherever you put it. Botloft's data is in
+ `~/.local/share/Botloft`. A systemd user service, `botloft.service` in `~/.config/systemd/user`,
+ keeps the bots running; it starts when you sign in if Botloft starts with the system. When
+ Botloft opens its window at sign-in, it adds `~/.config/autostart/botloft.desktop`.
+- **macOS:** the app goes wherever you drag it, usually Applications. Botloft's data is in
+ `~/Library/Application Support/Botloft`. A launch agent,
+ `~/Library/LaunchAgents/io.github.httpsphl.botloft.daemon.plist`, keeps the bots running; when
+ Botloft opens its window at sign-in, it adds `io.github.httpsphl.botloft.app.plist` next to it.
+- Bots keep their work in `~/Botloft`, or in the folder you pick for a crew. Keeping the computer
+ awake while bots work is Windows-only for now.
+
## Uninstalling
Settings > Apps > Installed apps > Botloft > Uninstall removes the app, stops the background
service, and removes its scheduled task and the startup entry. Your bots, their conversations and
their files stay in `%LOCALAPPDATA%\Botloft` and `%USERPROFILE%\Botloft`; delete those two folders
to remove everything.
+
+On Linux and macOS, removing the app does not stop the background service, so stop it first:
+
+```
+~/.local/share/Botloft/bin/botloftd service uninstall # Linux
+~/"Library/Application Support/Botloft/bin/botloftd" service uninstall # macOS
+```
+
+Then remove the app (`sudo apt remove botloft`, the AppImage file, or the app in Applications) and,
+on macOS, `~/Library/LaunchAgents/io.github.httpsphl.botloft.app.plist` if it is there. Your bots
+and data stay in the data folder above and in `~/Botloft`; delete those to remove everything.