@withbuddi/buddi 0.1.0-pre.15 → 0.1.0-pre.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/README.md +353 -0
  2. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  3. package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
  4. package/node_modules/@buddi/cli/dist/doctor-probes.js +7 -1
  5. package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
  6. package/node_modules/@buddi/cli/dist/mcp/tools.js +8 -4
  7. package/node_modules/@buddi/cli/dist/mcp/tools.js.map +1 -1
  8. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  9. package/node_modules/@buddi/core/dist/backup/archive.d.ts +16 -1
  10. package/node_modules/@buddi/core/dist/backup/archive.d.ts.map +1 -1
  11. package/node_modules/@buddi/core/dist/backup/archive.js +83 -38
  12. package/node_modules/@buddi/core/dist/backup/archive.js.map +1 -1
  13. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  14. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  15. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  16. package/package.json +7 -1
  17. package/packages/cli/dist/.tsbuildinfo +1 -1
  18. package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
  19. package/packages/cli/dist/doctor-probes.js +7 -1
  20. package/packages/cli/dist/doctor-probes.js.map +1 -1
  21. package/packages/cli/dist/mcp/tools.js +8 -4
  22. package/packages/cli/dist/mcp/tools.js.map +1 -1
  23. package/packages/core/dist/.tsbuildinfo +1 -1
  24. package/packages/core/dist/backup/archive.d.ts +16 -1
  25. package/packages/core/dist/backup/archive.d.ts.map +1 -1
  26. package/packages/core/dist/backup/archive.js +83 -38
  27. package/packages/core/dist/backup/archive.js.map +1 -1
  28. package/packages/gateway/dist/.tsbuildinfo +1 -1
  29. package/packages/install/dist/.tsbuildinfo +1 -1
  30. package/packages/runtime/dist/.tsbuildinfo +1 -1
package/README.md ADDED
@@ -0,0 +1,353 @@
1
+ # buddi
2
+
3
+ <img src="packages/web/public/mascot/core.png" alt="The Buddi Blob, buddi's mascot" width="160" align="right">
4
+
5
+ buddi is a personal agent platform you run on your own machine. An agent is a
6
+ markdown file: a front matter that names the tools it may call, and a body that
7
+ is its persona. Agents get real access: your mail, your files, a browser of
8
+ their own, commands on the machine. They reach you on a dashboard in your
9
+ browser and on Telegram. They also work while you are away: scheduled
10
+ missions, watchers that speak only when something is wrong, reminders they set
11
+ themselves. Anything consequential waits for your approval, as a card you
12
+ approve or reject.
13
+
14
+ Everything stays on your machine, in a private Postgres. The one thing that
15
+ leaves is each agent's prompt, sent to the AI provider that agent's file names.
16
+ So one line in one file decides which company sees that agent's conversations.
17
+ Secrets live in a vault the agents can use but never see.
18
+
19
+ The first agent is called buddi. It wears the Buddi Blob.
20
+
21
+ ---
22
+
23
+ ## Install
24
+
25
+ You need Node 22 or newer. Nothing else: no Docker, no pnpm, no build step.
26
+
27
+ ```sh
28
+ npm install -g @withbuddi/buddi
29
+ buddi
30
+ ```
31
+
32
+ The first `buddi` does five things, one line each in the terminal, and asks
33
+ nothing:
34
+
35
+ 1. creates the data directory,
36
+ 2. sets up a private Postgres inside it, on a loopback port, with a password
37
+ only the vault holds,
38
+ 3. writes the few settings the service needs to start,
39
+ 4. installs the background service and starts it: a launchd agent on macOS, a
40
+ systemd user unit on Linux,
41
+ 5. opens the setup wizard in your browser.
42
+
43
+ Every later `buddi` opens the dashboard. The link it prints is a sign-in link
44
+ good for five minutes; run `buddi` or `buddi dashboard` again for a new one.
45
+
46
+ The dashboard listens on `127.0.0.1:4317`. To use another port:
47
+
48
+ ```sh
49
+ BUDDI_WEB_PORT=4417 buddi
50
+ ```
51
+
52
+ **The browser.** The agents' own browser needs a browser binary, and the
53
+ package ships none. If Google Chrome is installed, buddi uses it. If not, the
54
+ wizard offers to fetch Chromium (about 150 MB), or you can run
55
+ `buddi browser install` at any time.
56
+
57
+ **Telegram.** The wizard can pair your phone: you ask @BotFather for a bot,
58
+ paste the token, and scan the QR code it draws. `buddi telegram pair` does the
59
+ same from a terminal.
60
+
61
+ **On Linux.** There is no OS keychain, so secrets go in an encrypted file vault
62
+ in the data directory, opened by a key stored beside it (`vault-key`, mode
63
+ 600). Anyone who can read your data directory can open the vault; a backup is
64
+ different, it is sealed with your passphrase. On a server with no display the
65
+ agents' browser runs headless. The systemd user unit stops when you log out
66
+ unless you run this once:
67
+
68
+ ```sh
69
+ loginctl enable-linger $USER
70
+ ```
71
+
72
+ **Pre-releases.** Until 0.1 is out, releases are published under the `next`
73
+ tag:
74
+
75
+ ```sh
76
+ npm install -g @withbuddi/buddi@next
77
+ ```
78
+
79
+ The full install story, including what is not built yet, is
80
+ [docs/install.md](docs/install.md).
81
+
82
+ ---
83
+
84
+ ## The first ten minutes
85
+
86
+ **The wizard.** buddi asks four things, one at a time, in a chat thread:
87
+
88
+ 1. **Your name**, so the agents know what to call you.
89
+ 2. **Your clock**, taken from the browser; confirm it or pick another. This is
90
+ what every agent means by "today".
91
+ 3. **A brain**: the AI your assistant thinks with. An API key from Anthropic
92
+ or OpenAI; Ollama running on this computer; Ollama Cloud or another
93
+ OpenAI-compatible service, with an address and a key; or Claude, with your
94
+ Claude subscription, where this build enables it. buddi tests it with one
95
+ small call before moving on.
96
+ 4. **Your assistant**: a name (buddi by default), a face (the Buddi Blob, or
97
+ another mascot or an emoji), and a persona you can keep or rewrite.
98
+
99
+ Between the brain and the assistant, buddi checks the browser and fetches one
100
+ if it has to. Then the assistant speaks first, in the same thread, and offers
101
+ to reach you on your phone. Every answer keeps a "change" link, and a reload
102
+ resumes where you were. [docs/onboarding.md](docs/onboarding.md) is the full
103
+ script.
104
+
105
+ **The first chat.** A few things to try:
106
+
107
+ - "What can you do?" It answers from the tools its file grants it.
108
+ - "Remind me to call the bank tomorrow at 10." A reminder it sets itself, and
109
+ you can see it on the Reminders page.
110
+ - "Take a screenshot of example.com." It opens its own browser, asks you
111
+ first, and shows the page on the canvas beside the chat.
112
+ - Drop a PDF or a CSV on the chat and ask about it.
113
+ - "Every Friday at 6, send me a recap of the week." A mission, on a schedule.
114
+
115
+ **A mailbox.** In Settings → Email, add an account with its address and an app
116
+ password. buddi then proposes a Mail agent (@mail) that triages new mail in
117
+ the background. Accept it with **Create @mail**; until you do, mail is fetched
118
+ and threaded but nobody reads it. Sending always stops at an approval card
119
+ that shows the full message. [docs/specs/email.md](docs/specs/email.md) has
120
+ the rest.
121
+
122
+ **More agents.** Agent Father (@father) makes and changes agents. Say what you
123
+ want one to do; it interviews you, proposes the file and the tools it should
124
+ have, and writes it once you approve.
125
+
126
+ ---
127
+
128
+ ## How it works
129
+
130
+ **Agents are files.** One folder per agent, with an `agent.md` in it. The
131
+ front matter says which tools the agent may call; nothing else is callable,
132
+ and no conversation can grant more. The body is the persona, in plain
133
+ markdown. The provider and model are a line in the same file, and the
134
+ dashboard's Agents page edits them for you.
135
+
136
+ ```markdown
137
+ ---
138
+ id: ledger
139
+ handle: ledger
140
+ name: Ledger
141
+ description: Tracks my accounts and answers "can I afford this?".
142
+ provider: anthropic
143
+ model: claude-sonnet-5
144
+ tools: [finance.*, memory.*, reminder.*]
145
+ ---
146
+
147
+ You are my finance advisor. There is exactly one owner: the person you are
148
+ talking to. Today is {{today}}.
149
+ ```
150
+
151
+ **Tools and plugins.** The core has no tools; every capability is a plugin.
152
+ Built in: `system`, `email`, `memory`, `artifacts`, `web`, `browser`, `host`,
153
+ `reminder`, `schedule`, `goal`, `learning` and `canvas`. Installable from npm,
154
+ on the Plugins page or with `buddi plugins install`: `finance`, `developer`
155
+ and `image`. Installing a plugin shows everything it brings first: each tool
156
+ and whether it runs without asking, the database schema it will own, what it
157
+ runs on a timer, and the hosts it talks to. Nothing happens until you approve.
158
+ [docs/plugins.md](docs/plugins.md) is the guide to writing one.
159
+
160
+ **Approvals.** Every tool has a tier. Anything that is not safe to run on its
161
+ own, such as sending mail, running a command or acting in a browser, stops the
162
+ run and shows a card with exactly what will happen. You approve or reject it
163
+ on the dashboard or on Telegram. Unknown tools, bad arguments and missing
164
+ configuration never run. [ARCHITECTURE.md](ARCHITECTURE.md) has the model.
165
+
166
+ **Missions and watchers.** A mission is scheduled work. A watcher checks
167
+ something on an interval and produces findings; core decides whether a finding
168
+ is worth waking you for. An unattended run stays quiet unless it has something
169
+ to say, and when background work keeps failing you hear about it once, in
170
+ plain words. Goals add a target with a date: buddi checks it hourly and wakes
171
+ the agent that holds it when you drift ([docs/specs/goals.md](docs/specs/goals.md)).
172
+
173
+ **Groups.** A group is one persistent conversation with a team of agents. A
174
+ coordinator decides who works on each request, and you get one answer.
175
+ [docs/groups.md](docs/groups.md).
176
+
177
+ **Files.** What you send the agents and what they produce sit in one library,
178
+ the Files page, with the conversation each came from.
179
+ [docs/files.md](docs/files.md).
180
+
181
+ **Memory and learning.** Agents keep notes about you, with where each came
182
+ from, scoped per agent. Learning goes one step further: buddi proposes a
183
+ skill, a mail rule or a change to an agent's file, and nothing is kept until
184
+ you keep it. A weekly digest lists what is waiting.
185
+ [docs/specs/learning.md](docs/specs/learning.md).
186
+
187
+ **Owner secrets.** Your passwords, API tokens and one-time codes go in
188
+ Settings → Keys and secrets. An agent can have one filled into a login form,
189
+ typed, or sent as a header, after an approval card that names where it goes.
190
+ There is no way to read a value back, and values are scrubbed from anything an
191
+ agent sees. [docs/specs/owner-secrets.md](docs/specs/owner-secrets.md).
192
+
193
+ **The canvas.** The dashboard opens on a conversation, with a canvas beside
194
+ it. What a run looked at is drawn there: a table, a chart, a document, a web
195
+ page, an approval with its full envelope. It fills in live, and works the same
196
+ for a mission that ran at 6am. [docs/browser.md](docs/browser.md) covers the
197
+ browser views on it.
198
+
199
+ **Claude Code.** `buddi mcp` runs buddi as an MCP server over stdio. Reads
200
+ answer at once; every write becomes an approval card; `buddi.ask` talks to an
201
+ agent. [docs/mcp.md](docs/mcp.md).
202
+
203
+ ```sh
204
+ claude mcp add -s user buddi -- buddi mcp
205
+ ```
206
+
207
+ ---
208
+
209
+ ## Where your data lives and what leaves the machine
210
+
211
+ Everything buddi owns sits in one data directory:
212
+
213
+ | Platform | Data directory |
214
+ | --- | --- |
215
+ | macOS | `~/Library/Application Support/buddi` |
216
+ | Linux | `$XDG_DATA_HOME/buddi`, else `~/.local/share/buddi` |
217
+
218
+ `BUDDI_DATA_DIR` moves it. Inside are the Postgres cluster, your agents and
219
+ skills, the files library, logs and backups. Nothing is written outside it
220
+ except the service unit and, on macOS, the keychain entries.
221
+
222
+ **Secrets** go in the vault: the macOS keychain, or the encrypted file vault on
223
+ Linux. No command, page or tool prints one back.
224
+
225
+ **Backups** hold the database, your agents and your files, and never a secret.
226
+ They are encrypted with a six-word passphrase that only you keep. Turn on the
227
+ nightly schedule in Settings → Backup, or with
228
+ `buddi backup schedule install`.
229
+
230
+ **What leaves.** Each agent's conversation, including what its tools returned,
231
+ goes to the provider its file names, and nowhere else. A model is never
232
+ switched for you, and delegating to another agent uses that agent's provider.
233
+ Besides that, buddi makes two kinds of outbound call: a version check against
234
+ the npm registry once a day, which you can turn off in Settings, and a plugin
235
+ install when you ask for one. The dashboard loads nothing from the internet.
236
+ There is no telemetry.
237
+
238
+ [docs/operations.md](docs/operations.md) has the details: what an archive
239
+ contains, the passphrase, restoring, and recovery.
240
+
241
+ ---
242
+
243
+ ## Everyday commands
244
+
245
+ Most of this is on the dashboard. From a terminal:
246
+
247
+ | Command | What it does |
248
+ | --- | --- |
249
+ | `buddi` | open the dashboard (the first run sets everything up) |
250
+ | `buddi doctor` | check every moving part and say what is wrong |
251
+ | `buddi service status` | is the background service running? `restart`, `logs`, `stop` too |
252
+ | `buddi dashboard` | a five-minute sign-in link to the dashboard |
253
+ | `buddi upgrade` | back up, install the new version, migrate, restart |
254
+ | `buddi backup create --encrypt` | one archive now, sealed with your passphrase |
255
+ | `buddi browser install` | download Chromium for the agents' browser |
256
+ | `buddi agents` | every agent, its engine, and whether it can run |
257
+ | `buddi chat` | talk to the default agent in the terminal |
258
+ | `buddi ask "…"` | one question, one answer, then exit |
259
+ | `buddi telegram pair` | a QR code that pairs a phone |
260
+ | `buddi reminders` | what the agents have put on the clock |
261
+ | `buddi plugins list` | what is installed |
262
+ | `buddi mcp` | buddi as an MCP server, for Claude Code |
263
+
264
+ `buddi help` prints them all. `buddi status` is `buddi doctor` under another
265
+ name.
266
+
267
+ ---
268
+
269
+ ## Development
270
+
271
+ The developer checkout runs the same code against a Postgres in Docker. You
272
+ need git, Node 22 or newer, pnpm 11 and Docker.
273
+
274
+ ```sh
275
+ git clone https://github.com/withbuddi/buddi && cd buddi
276
+ ./scripts/install.sh # checks the tools, then pnpm install, build, link
277
+ buddi init # the terminal wizard: .env, database, service
278
+ pnpm test
279
+ ```
280
+
281
+ `./scripts/install.sh` runs `pnpm install`, `pnpm -r build` and
282
+ `pnpm run link`, which puts a global `buddi` on your PATH that points at this
283
+ checkout. `buddi init` is interactive and idempotent; `buddi init --yes` asks
284
+ nothing. It starts the Postgres container, applies migrations, installs the
285
+ service and opens the same wizard in the browser.
286
+
287
+ Commands you will meet in a checkout:
288
+
289
+ ```sh
290
+ buddi db up # start the Postgres container after a reboot
291
+ buddi db secure # give it a generated password, kept in the vault
292
+ buddi migrate # apply core and plugin migrations
293
+ buddi serve # the gateway and scheduler in the foreground
294
+ buddi vault set NAME # put a secret in the vault (prompts, hidden)
295
+ buddi plugins dev ../my-plugin
296
+ buddi missions list
297
+ buddi jobs --state failed
298
+ buddi pause # stop claiming work; running jobs finish
299
+ buddi resume # start claiming again
300
+ buddi nudges status
301
+ ```
302
+
303
+ To try the packaged install without touching your machine, `pnpm release:trial`
304
+ builds the tarball, puts it in a Docker image and starts it on a fresh volume.
305
+ `pnpm release:pack` builds only the tarball.
306
+
307
+ **Layout.** Under `packages/`:
308
+
309
+ - `core`: domain, database, event log, queue, the tool registry and the plugin
310
+ contract. It never imports a tool.
311
+ - `runtime`: the agent loop and the provider adapters.
312
+ - `gateway`: the surfaces (dashboard server, Telegram, terminal) and the
313
+ scheduler.
314
+ - `web`: the dashboard, React and Vite, built to static files.
315
+ - `cli`: the `buddi` binary for a checkout.
316
+ - `install`: the packaged launcher, the supervisor and the bundled Postgres.
317
+ - `extension`: the Chrome extension for the "Your browser" mode.
318
+ - `tools/*`: the built-in plugins (artifacts, browser, email, host, memory,
319
+ web).
320
+
321
+ The domain plugins (finance, developer, image) live in a separate repository,
322
+ `buddi-plugins`, and install like any other plugin.
323
+
324
+ **CI and releases.** A push to `main` runs the quick lane: four parallel jobs
325
+ (web, gateway, typecheck, the rest), without a database. The full gate, with
326
+ Postgres, runs on pull requests, nightly, on demand and before every release.
327
+ A tag `v<version>` runs the gate, builds the tarball, publishes it to npm
328
+ (pre-release versions under `next`, others under `latest`) and creates the
329
+ GitHub release.
330
+
331
+ Read next: [ARCHITECTURE.md](ARCHITECTURE.md) for the design,
332
+ [docs/plugins.md](docs/plugins.md) to write a plugin,
333
+ [docs/ROADMAP.md](docs/ROADMAP.md) for what is built and what comes next, and
334
+ [docs/README.md](docs/README.md) for the index of everything else.
335
+
336
+ ---
337
+
338
+ ## Status
339
+
340
+ buddi is a 0.1 pre-release. macOS is the reference platform. Linux works and
341
+ is in trial: the file vault, the bundled Postgres and the systemd user unit
342
+ are built, and fixes land as the trial finds them. Windows is not supported
343
+ yet. Native computer control (operating your own apps) is macOS-only. Signing
344
+ in with a Claude subscription and ChatGPT accounts through Codex are
345
+ experiments, off unless enabled
346
+ ([docs/anthropic-oauth.md](docs/anthropic-oauth.md),
347
+ [docs/codex-accounts.md](docs/codex-accounts.md)). Host commands are approved,
348
+ not sandboxed ([docs/host-execution.md](docs/host-execution.md)). Nothing an
349
+ agent says is financial, legal or medical advice.
350
+
351
+ ## License
352
+
353
+ License: to be decided before the public release.