Skip to content

Commit bb99b36

Browse files
committed
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.
1 parent 4d98bda commit bb99b36

2 files changed

Lines changed: 86 additions & 34 deletions

File tree

‎README.md‎

Lines changed: 54 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@
55
<h1 align="center">Botloft</h1>
66

77
<p align="center">
8-
<b>A crew of Claude Code bots that stays on and works together on your Windows PC.</b>
8+
<b>A crew of Claude Code bots that stays on and works together on your computer.</b>
99
</p>
1010

1111
<p align="center">
1212
<a href="https://github.com/httpsphl/botloft/releases/latest"><img src="https://img.shields.io/github/v/release/httpsphl/botloft?label=release&color=ff7a59" alt="Latest release"></a>
1313
<a href="https://github.com/httpsphl/botloft/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/httpsphl/botloft/ci.yml?branch=main&label=CI" alt="CI status"></a>
14-
<img src="https://img.shields.io/badge/Windows-10%20%7C%2011-0078d4" alt="Windows 10 and 11">
14+
<img src="https://img.shields.io/badge/Windows%20%7C%20Linux%20%7C%20macOS-0078d4" alt="Windows, Linux and macOS">
1515
<a href="LICENSE"><img src="https://img.shields.io/github/license/httpsphl/botloft?color=3b3b38" alt="Apache 2.0 license"></a>
1616
</p>
1717

1818
<p align="center">
19-
<a href="https://github.com/httpsphl/botloft/releases/latest"><b>Download for Windows</b></a>
19+
<a href="https://github.com/httpsphl/botloft/releases/latest"><b>Download</b></a>
2020
&nbsp;·&nbsp;
2121
<a href="#what-you-can-do">Features</a>
2222
&nbsp;·&nbsp;
@@ -48,9 +48,9 @@ you decide what they may do.
4848
for it. Watch the screens it designs take shape while it writes them. Open the files it made.
4949
- **Schedule routines.** Weekday mornings, every two hours or any cron schedule, with missed runs
5050
and overlaps handled.
51-
- **Leave them running.** Bots keep working after you close Botloft. They start with Windows, come
52-
back within a minute if something crashes and keep the PC awake while they work. Botloft waits
53-
near the clock and tells you when a bot needs you.
51+
- **Leave them running.** Bots keep working after you close Botloft. They start when you sign in,
52+
come back soon after a crash and, on Windows, keep the computer awake while they work. Botloft
53+
waits near the clock and tells you when a bot needs you.
5454
- **Choose per bot.** How much it asks before acting, and which Claude model it uses. See how much
5555
of your plan's usage is left.
5656

@@ -70,21 +70,33 @@ itself.
7070

7171
## Get started
7272

73-
You need Windows 10 or 11 (64-bit) and [Claude Code](https://code.claude.com/docs/en/setup),
74-
installed and signed in once with your Claude account. Bots run on your own Claude plan.
75-
76-
1. Download `Botloft_<version>_x64-setup.exe` from the
77-
[latest release](https://github.com/httpsphl/botloft/releases/latest) and run it. It installs for
78-
your Windows user only, with no administrator prompt. The installer is not code-signed yet, so
79-
Windows SmartScreen may ask you to confirm ("More info", then "Run anyway"). The
80-
[code signing policy](docs/code-signing-policy.md) says how releases are made and how to check
81-
your download.
73+
You need [Claude Code](https://code.claude.com/docs/en/setup), installed and signed in once with
74+
your Claude account. Bots run on your own Claude plan.
75+
76+
1. Download Botloft for your computer from the
77+
[latest release](https://github.com/httpsphl/botloft/releases/latest):
78+
- **Windows 10 or 11 (64-bit):** `Botloft_<version>_x64-setup.exe`. Run it; it installs for your
79+
Windows user only, with no administrator prompt. The installer is not code-signed yet, so
80+
Windows SmartScreen may ask you to confirm ("More info", then "Run anyway").
81+
- **Linux (64-bit, preview):** `Botloft_<version>_amd64.deb` for Debian and Ubuntu, or
82+
`Botloft_<version>_amd64.AppImage` for other distributions (make it executable first).
83+
- **macOS on Apple Silicon (preview):** `Botloft_<version>_aarch64.dmg`. Drag Botloft to
84+
Applications and open it once. Apple has not notarized it yet, so macOS blocks it the first
85+
time: allow it in System Settings > Privacy & Security > Open Anyway.
86+
87+
The [code signing policy](docs/code-signing-policy.md) says how releases are made and how to
88+
check your download.
8289
2. Open Botloft. It sets itself up; there is nothing to configure.
8390
3. Create your first crew and tell it what it is for.
8491

85-
When a new version is out, an **Update available** button shows in the title bar. Uninstalling
86-
(Settings > Apps) removes the app and stops Botloft from running in the background. Your bots and
87-
their files stay in `%LOCALAPPDATA%\Botloft` and `%USERPROFILE%\Botloft`.
92+
When a new version is out, an **Update available** button shows in the title bar.
93+
94+
On Windows, uninstalling (Settings > Apps) removes the app and stops Botloft from running in the
95+
background. On Linux and macOS, stop it first with
96+
`~/.local/share/Botloft/bin/botloftd service uninstall` (Linux) or
97+
`~/"Library/Application Support/Botloft/bin/botloftd" service uninstall` (macOS), then remove the
98+
app. Your bots and their files stay either way (see
99+
[Where are my bots and their files?](#faq)).
88100

89101
## How it works
90102

@@ -97,8 +109,8 @@ flowchart LR
97109
```
98110

99111
- **The daemon is the source of truth.** Closing the app never stops a bot. `botloftd` runs as a
100-
scheduled task of your Windows user: it starts when you sign in and comes back within a minute if
101-
it dies.
112+
scheduled task of your Windows user, a systemd user service on Linux or a launch agent on macOS:
113+
it starts when you sign in and comes back soon if it dies.
102114
- **Claude Code is the runtime.** Each bot is a real `claude -p` session with its own workspace,
103115
memory (`CLAUDE.md`) and conversation. There is no custom agent SDK and no API key to manage.
104116
- **One conversation per bot.** Your messages, messages from other bots and notices from the daemon
@@ -117,9 +129,9 @@ The full design, from the protocol to the states of a bot, lives in [`docs/spec.
117129
- **You decide what bots may do.** Per bot: ask before anything, accept edits, plan only, or decide on
118130
its own what needs your OK. Unless it decides on its own, a bot also asks before its first visit
119131
to each website.
120-
- **Tokens stay safe.** The app authenticates with an owner token readable only by your Windows user.
132+
- **Tokens stay safe.** The app authenticates with an owner token readable only by your user account.
121133
Each bot gets its own token per start, and the daemon keeps only its SHA-256 hash.
122-
- **Botloft is not a sandbox.** Every bot runs as your Windows user, so isolation between bots is
134+
- **Botloft is not a sandbox.** Every bot runs as your user account, so isolation between bots is
123135
cooperative: a bot can read other bots' folders if it decides to. Give bots only the permissions
124136
you would give Claude Code directly.
125137

@@ -138,22 +150,25 @@ your own Claude account, so they use your plan's limits; Botloft shows how much
138150
<details>
139151
<summary><b>Do I need to keep the window open?</b></summary>
140152

141-
No. The bots run in the background, even after you close Botloft, and start with Windows if you want.
153+
No. The bots run in the background, even after you close Botloft, and start when you sign in if you
154+
want.
142155
Settings has a switch to stop them when you close the app instead.
143156
</details>
144157

145158
<details>
146159
<summary><b>Where are my bots and their files?</b></summary>
147160

148-
Each bot has a folder under `%USERPROFILE%\Botloft\<crew>\<bot>`, and each crew a shared work folder
149-
that you can point at a project of yours. Botloft's own data (SQLite, logs, secrets) is in
150-
`%LOCALAPPDATA%\Botloft`.
161+
Each bot has a folder under `Botloft\<crew>\<bot>` in your home folder (`%USERPROFILE%` on Windows,
162+
`~` on Linux and macOS), and each crew a shared work folder that you can point at a project of
163+
yours. Botloft's own data (SQLite, logs, secrets) is in `%LOCALAPPDATA%\Botloft` on Windows,
164+
`~/.local/share/Botloft` on Linux and `~/Library/Application Support/Botloft` on macOS.
151165
</details>
152166

153167
<details>
154-
<summary><b>Why does Windows warn me when I install it?</b></summary>
168+
<summary><b>Why does Windows or macOS warn me when I install it?</b></summary>
155169

156-
The installer is not code-signed yet, so SmartScreen does not know its publisher. Each release is
170+
The Windows installer is not code-signed yet, so SmartScreen does not know its publisher, and Apple
171+
has not notarized the macOS app, so Gatekeeper blocks its first opening until you allow it. Each release is
157172
built by GitHub Actions from this repository, and updates are signed and checked by the app before
158173
they install. The [code signing policy](docs/code-signing-policy.md) says how releases are made and
159174
how to check a download.
@@ -162,7 +177,10 @@ how to check a download.
162177
<details>
163178
<summary><b>Does it run on macOS or Linux?</b></summary>
164179

165-
Not yet. Botloft is Windows-first: it uses scheduled tasks, Job Objects and Windows notifications.
180+
Yes, as a preview since 0.8.0: Linux (64-bit, `.deb` or AppImage) and macOS on Apple Silicon. Intel
181+
Macs are not supported yet, and keeping the computer awake while bots work is Windows-only for now.
182+
Windows came first and has had the most use; if something does not work elsewhere, please
183+
[open an issue](https://github.com/httpsphl/botloft/issues).
166184
</details>
167185

168186
<details>
@@ -182,8 +200,10 @@ code-signed installer. `main` can be ahead of the latest release.
182200
<details>
183201
<summary><b>Development</b></summary>
184202

185-
Requirements: Windows 10 or 11, Rust stable (MSVC toolchain), Node.js 24 and pnpm. Running real
186-
bots also needs Claude Code (the native `claude.exe`) installed and signed in.
203+
Requirements: Rust stable (the MSVC toolchain on Windows), Node.js 24 and pnpm. On Linux, the app
204+
also needs the desktop libraries Tauri uses (on Ubuntu: `libwebkit2gtk-4.1-dev`,
205+
`libayatana-appindicator3-dev`, `librsvg2-dev`, `libxdo-dev`). Running real bots also needs Claude
206+
Code (the native `claude` executable) installed and signed in.
187207

188208
```powershell
189209
# Daemon and libraries
@@ -198,13 +218,14 @@ pnpm install
198218
pnpm tauri dev
199219
pnpm dev # the UI alone in a browser, with a fake daemon and sample crews
200220
pnpm check # typecheck + Biome + Vitest
201-
pnpm bundle # NSIS installer with the daemon inside
221+
pnpm bundle # this system's packages with the daemon inside: NSIS, .deb and AppImage, or .dmg
202222
```
203223

204224
Set `BOTLOFT_HOME` to an absolute path such as `$PWD\.dev\home` during development so the daemon
205225
never touches a real installation in `%LOCALAPPDATA%\Botloft`.
206226

207-
The daemon manages its own scheduled task:
227+
The daemon manages its own scheduled task (a systemd user service on Linux, a launch agent on
228+
macOS):
208229

209230
```powershell
210231
botloftd service install # copy botloftd into the data folder, start it now and at every logon

‎docs/code-signing-policy.md‎

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,19 @@ and the uninstaller as soon as a certificate is in place. All of them carry the
1818
Botloft does not have a code signing certificate yet. When it gets one, this page will say whose
1919
name is on it, and every release from then on will be signed with it.
2020

21+
On macOS, Botloft is not notarized by Apple: there is no Apple Developer account for it yet. The app
22+
carries an ad-hoc signature only, so macOS blocks its first opening until you allow it in System
23+
Settings > Privacy & Security > Open Anyway. The Linux packages (`.deb` and AppImage) are not
24+
signed either. On every system, updates are signed with Botloft's own updater key (below).
25+
2126
## How releases are made
2227

2328
- Every release is built by GitHub Actions ([`release.yml`](../.github/workflows/release.yml)) from
2429
a `vX.Y.Z` tag on `main`, on GitHub's own runners. Nothing is built on a maintainer's computer.
2530
- The workflow opens a draft release. A person reads it and publishes it: no release goes out
2631
without that manual approval.
27-
- Each installer gets a build provenance attestation, and the release notes list its SHA-256. To
32+
- Each download (the Windows installers, the Linux packages and the macOS disk image and update)
33+
gets a build provenance attestation, and the release notes list its SHA-256. To
2834
check that a download came from this repository's workflow, with the
2935
[GitHub CLI](https://cli.github.com/):
3036

@@ -66,9 +72,34 @@ on `127.0.0.1` only. What goes over the network:
6672
this off.
6773
- Bots keep their work in `%USERPROFILE%\Botloft`, or in the folder you pick for a crew.
6874

75+
On Linux and macOS (preview since 0.8.0):
76+
77+
- **Linux:** the `.deb` installs the app in `/usr/bin` (installing it asks for your password, as any
78+
package does); the AppImage stays wherever you put it. Botloft's data is in
79+
`~/.local/share/Botloft`. A systemd user service, `botloft.service` in `~/.config/systemd/user`,
80+
keeps the bots running; it starts when you sign in if Botloft starts with the system. When
81+
Botloft opens its window at sign-in, it adds `~/.config/autostart/botloft.desktop`.
82+
- **macOS:** the app goes wherever you drag it, usually Applications. Botloft's data is in
83+
`~/Library/Application Support/Botloft`. A launch agent,
84+
`~/Library/LaunchAgents/io.github.httpsphl.botloft.daemon.plist`, keeps the bots running; when
85+
Botloft opens its window at sign-in, it adds `io.github.httpsphl.botloft.app.plist` next to it.
86+
- Bots keep their work in `~/Botloft`, or in the folder you pick for a crew. Keeping the computer
87+
awake while bots work is Windows-only for now.
88+
6989
## Uninstalling
7090

7191
Settings > Apps > Installed apps > Botloft > Uninstall removes the app, stops the background
7292
service, and removes its scheduled task and the startup entry. Your bots, their conversations and
7393
their files stay in `%LOCALAPPDATA%\Botloft` and `%USERPROFILE%\Botloft`; delete those two folders
7494
to remove everything.
95+
96+
On Linux and macOS, removing the app does not stop the background service, so stop it first:
97+
98+
```
99+
~/.local/share/Botloft/bin/botloftd service uninstall # Linux
100+
~/"Library/Application Support/Botloft/bin/botloftd" service uninstall # macOS
101+
```
102+
103+
Then remove the app (`sudo apt remove botloft`, the AppImage file, or the app in Applications) and,
104+
on macOS, `~/Library/LaunchAgents/io.github.httpsphl.botloft.app.plist` if it is there. Your bots
105+
and data stay in the data folder above and in `~/Botloft`; delete those to remove everything.

0 commit comments

Comments
 (0)