@michael-joseph-miller/ant-bot 0.1.0
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.
- package/CHANGELOG.md +40 -0
- package/LICENSE +21 -0
- package/README.md +267 -0
- package/dist/browser-OHRD7YI3.js +524 -0
- package/dist/browser-OHRD7YI3.js.map +7 -0
- package/dist/bundled-46DUK5PG.js +133 -0
- package/dist/bundled-46DUK5PG.js.map +7 -0
- package/dist/chunk-7BOHBPB2.js +287 -0
- package/dist/chunk-7BOHBPB2.js.map +7 -0
- package/dist/chunk-AHAON6J7.js +24 -0
- package/dist/chunk-AHAON6J7.js.map +7 -0
- package/dist/chunk-DYIJTUMY.js +321 -0
- package/dist/chunk-DYIJTUMY.js.map +7 -0
- package/dist/chunk-KSQOVWP5.js +310 -0
- package/dist/chunk-KSQOVWP5.js.map +7 -0
- package/dist/chunk-Z2YT2PZN.js +64 -0
- package/dist/chunk-Z2YT2PZN.js.map +7 -0
- package/dist/index.js +1562 -0
- package/dist/index.js.map +7 -0
- package/dist/install-IY2M3OUQ.js +36 -0
- package/dist/install-IY2M3OUQ.js.map +7 -0
- package/dist/plugin-POMHVGD4.js +53 -0
- package/dist/plugin-POMHVGD4.js.map +7 -0
- package/dist/scheduler-Q7OHNGP6.js +274 -0
- package/dist/scheduler-Q7OHNGP6.js.map +7 -0
- package/dist/server.js +3016 -0
- package/dist/server.js.map +7 -0
- package/dist/skills-66WRX64H.js +17 -0
- package/dist/skills-66WRX64H.js.map +7 -0
- package/dist/skills-spec.js +172 -0
- package/dist/skills-spec.js.map +7 -0
- package/dist/tools-P5537ASX.js +148 -0
- package/dist/tools-P5537ASX.js.map +7 -0
- package/package.json +51 -0
- package/skills/README.md +69 -0
- package/skills/SPEC.md +274 -0
- package/skills/bug-repro/SKILL.md +53 -0
- package/skills/deep-research/SKILL.md +451 -0
- package/skills/deep-research/references/V6_1_improvements.md +112 -0
- package/skills/deep-research/references/completeness_review_checklist.md +25 -0
- package/skills/deep-research/references/counter_review_team_guide.md +181 -0
- package/skills/deep-research/references/enterprise_analysis_frameworks.md +135 -0
- package/skills/deep-research/references/enterprise_mode.md +99 -0
- package/skills/deep-research/references/enterprise_quality_checklist.md +160 -0
- package/skills/deep-research/references/enterprise_research_methodology.md +164 -0
- package/skills/deep-research/references/formatting_rules.md +31 -0
- package/skills/deep-research/references/quality_gates.md +77 -0
- package/skills/deep-research/references/report_template_v6.md +82 -0
- package/skills/deep-research/references/research_notes_format.md +147 -0
- package/skills/deep-research/references/research_plan_checklist.md +26 -0
- package/skills/deep-research/references/research_report_template.md +49 -0
- package/skills/deep-research/references/source_accessibility_policy.md +179 -0
- package/skills/deep-research/references/source_quality_rubric.md +28 -0
- package/skills/deep-research/references/subagent_prompt.md +116 -0
- package/skills/inbox-digest/SKILL.md +51 -0
- package/skills/skill-author/SKILL.md +92 -0
- package/skills/weekly-report/SKILL.md +49 -0
- package/web/dist/assets/index-BLQ8rPiN.js +130 -0
- package/web/dist/assets/index-IEIkG_jd.css +2 -0
- package/web/dist/index.html +13 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to ant-bot are recorded here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versions follow
|
|
5
|
+
[semantic versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **Database migration runner.** `db/migrations.ts` applies an ordered, transactional migration
|
|
12
|
+
list on every open and records what ran in a `schema_version` table. Databases created before
|
|
13
|
+
the runner existed are adopted at the baseline version rather than mistaken for empty ones, and
|
|
14
|
+
a `VACUUM INTO` snapshot is written to `backups/` before any migration touches existing data.
|
|
15
|
+
- **Packaging.** `pnpm build:package` assembles the single publishable npm package into
|
|
16
|
+
`dist-npm/`: the CLI, daemon and shared schemas bundled with esbuild, the built web UI and the
|
|
17
|
+
bundled skills copied in beside them, and a generated manifest checked for everything npm
|
|
18
|
+
otherwise only complains about at publish time.
|
|
19
|
+
- **`antbot update`**, and a once-a-day cached registry check surfaced in `antbot status` and
|
|
20
|
+
`antbot doctor`. Notification only — ant-bot never updates itself in the background.
|
|
21
|
+
- MIT `LICENSE` and this changelog.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- Shipped-asset lookups (the built web UI, the bundled skills directory, the daemon's package
|
|
26
|
+
root) now walk up to the nearest `package.json` instead of counting `..` segments from
|
|
27
|
+
`import.meta.url`. The old form assumed both the repo layout and the compiler's output depth,
|
|
28
|
+
and failed silently from an installed package.
|
|
29
|
+
- `antbot --version` and `GET /api/health` read the version from `package.json` instead of a
|
|
30
|
+
hardcoded constant, so a release bump cannot leave them disagreeing.
|
|
31
|
+
|
|
32
|
+
### Notes
|
|
33
|
+
|
|
34
|
+
- Published as **`@michael-joseph-miller/ant-bot`**, not `ant-bot`. npm's name-similarity guard
|
|
35
|
+
refuses the unscoped name as too close to `antbot`, a security holding package from 2022 that
|
|
36
|
+
cannot be claimed. Scoped names are exempt from that check. The binary is still `antbot`.
|
|
37
|
+
|
|
38
|
+
## [0.1.0]
|
|
39
|
+
|
|
40
|
+
Initial version: the ant-bot daemon, web UI and CLI.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Michael Miller
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
# ant-bot
|
|
2
|
+
|
|
3
|
+
ant-bot is a locally-running daemon and web UI that hosts a roster of persistent, named Claude
|
|
4
|
+
teammates ("Bots"). Each Bot has a job description, its own conversation thread, durable memory,
|
|
5
|
+
enabled skills, and scheduled routines, and all Bots share one "agent computer": the local
|
|
6
|
+
machine, with a shared workspace directory, a persistent browser profile, and a terminal. It is
|
|
7
|
+
built on the [Claude Agent SDK](https://docs.claude.com/en/api/agent-sdk/overview), which spawns
|
|
8
|
+
the `claude` CLI under the hood — so a Bot's usage draws on your existing Claude Pro/Max
|
|
9
|
+
subscription login rather than a metered `ANTHROPIC_API_KEY`.
|
|
10
|
+
|
|
11
|
+
## What it does
|
|
12
|
+
|
|
13
|
+
- **Bots** — persistent, named agents with a title, a standing job description, their own thread,
|
|
14
|
+
and a memory directory that survives daemon restarts.
|
|
15
|
+
- **A shared computer** — one workspace directory, one persistent browser profile, one terminal;
|
|
16
|
+
every Bot can reach what every other Bot can reach.
|
|
17
|
+
- **Approvals** — every tool call a Bot proposes passes a Permission Gateway: deterministic rules,
|
|
18
|
+
optional Haiku auto-review, or a human approval card in the thread.
|
|
19
|
+
- **Skills** — standard Claude skills (`SKILL.md`), installed with `antbot skill add <source>` from
|
|
20
|
+
a GitHub repo, git URL, local path, or direct link. Loaded into each Bot's session as a local
|
|
21
|
+
plugin, so Bots get the SDK's native `Skill` tool. Skills can also live in this repo's `skills/`
|
|
22
|
+
directory and are installed on every start. A Bot can install and remove skills itself, behind an
|
|
23
|
+
approval that spells out whether the source is one skill or a whole repository.
|
|
24
|
+
- **Routines** — cron-scheduled recurring turns per Bot, with run history and a real-work test run.
|
|
25
|
+
- **Multi-bot handoff** — Bots can hand a task to another Bot (`send_to_bot`) and talk in group
|
|
26
|
+
chats; a hop limit stops runaway ping-pong.
|
|
27
|
+
- **Browser use** — Playwright drives a persistent, shared browser profile per Bot, with a live
|
|
28
|
+
screencast and a "take over" flow for logins, 2FA, and CAPTCHAs.
|
|
29
|
+
|
|
30
|
+
## Documentation
|
|
31
|
+
|
|
32
|
+
| Document | What it covers |
|
|
33
|
+
| --- | --- |
|
|
34
|
+
| **[`docs/USER-GUIDE.md`](docs/USER-GUIDE.md)** | **Complete user manual** — every screen, setting, and workflow, with step-by-step instructions |
|
|
35
|
+
| [`docs/SECURITY.md`](docs/SECURITY.md) | The trust model and what the permission system does and does not guarantee |
|
|
36
|
+
| [`docs/SKILLS.md`](docs/SKILLS.md) | Authoring skill files |
|
|
37
|
+
| [`docs/API-CONTRACT.md`](docs/API-CONTRACT.md) | HTTP and WebSocket API reference |
|
|
38
|
+
|
|
39
|
+
## Requirements
|
|
40
|
+
|
|
41
|
+
- Node.js **>= 24**
|
|
42
|
+
- [pnpm](https://pnpm.io/) (this repo pins `pnpm@11.17.0` via `packageManager`)
|
|
43
|
+
- The `claude` CLI installed and logged in to a Claude Pro/Max subscription
|
|
44
|
+
(`npm i -g @anthropic-ai/claude-code`, then run `claude` once to log in)
|
|
45
|
+
- Optional: Chromium for browser use (`npx playwright install chromium`) — the daemon still runs
|
|
46
|
+
without it, just without browser-use tools
|
|
47
|
+
|
|
48
|
+
Run `./antbot doctor` (see [Quickstart](#quickstart)) to check all of the above at once.
|
|
49
|
+
|
|
50
|
+
## Quickstart
|
|
51
|
+
|
|
52
|
+
Two ways in. Install the package if you want to *use* ant-bot; clone the repo if you want to
|
|
53
|
+
change it.
|
|
54
|
+
|
|
55
|
+
### Install it (npm)
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm i -g @michael-joseph-miller/ant-bot # or: pnpm add -g @michael-joseph-miller/ant-bot
|
|
59
|
+
antbot doctor # check Node, the claude CLI + login, data dir, port, native deps
|
|
60
|
+
antbot open # start the daemon and open the UI
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
One package: the daemon, the CLI, the built web UI and the bundled skills. It needs Node 24+ and
|
|
64
|
+
a logged-in `claude` CLI, and nothing else — no pnpm, no TypeScript toolchain, no build step.
|
|
65
|
+
`antbot update` upgrades it later; `antbot status` and `antbot doctor` mention a new version when
|
|
66
|
+
one exists, but nothing ever updates itself in the background.
|
|
67
|
+
|
|
68
|
+
### Work on it (clone)
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
git clone <this repo> && cd ant-bot
|
|
72
|
+
pnpm install # installs dependencies and builds every package
|
|
73
|
+
./antbot doctor
|
|
74
|
+
./antbot open
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
`./antbot` is a launcher in the repo root — it rebuilds when sources change, so there's nothing
|
|
78
|
+
to reinstall after a `git pull`. `pnpm build:package` assembles the publishable package into
|
|
79
|
+
`dist-npm/` if you want to see what ships.
|
|
80
|
+
|
|
81
|
+
Either way the UI is at **http://127.0.0.1:4780**, served by the daemon itself from the built
|
|
82
|
+
web assets. There's no separate frontend server to run.
|
|
83
|
+
|
|
84
|
+
### The commands you'll actually use
|
|
85
|
+
|
|
86
|
+
| Command | What it does |
|
|
87
|
+
| --- | --- |
|
|
88
|
+
| `antbot open` | Open the web UI, starting the daemon first if it isn't running |
|
|
89
|
+
| `antbot start` | Start the daemon in the background (`--open` to open the UI too) |
|
|
90
|
+
| `antbot stop` | Stop the daemon |
|
|
91
|
+
| `antbot restart` | Stop and start again |
|
|
92
|
+
| `antbot status` | Whether it's running, on what port, with how many bots |
|
|
93
|
+
| `antbot doctor` | Diagnose the environment; every failure prints its fix |
|
|
94
|
+
| `antbot update` | Update to the latest published version (`--check` to look without installing) |
|
|
95
|
+
|
|
96
|
+
Run `antbot --help` for the full list, or `antbot <command> --help` for one command.
|
|
97
|
+
|
|
98
|
+
### Putting `antbot` on your PATH
|
|
99
|
+
|
|
100
|
+
`./antbot` works from the repo root without any install step. To type plain `antbot` from
|
|
101
|
+
anywhere, symlink it into a directory already on your `PATH`:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
ln -s "$PWD/antbot" ~/.local/bin/antbot # or /usr/local/bin, or anywhere on your PATH
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
The launcher resolves symlinks, so it still finds the repo and rebuilds when sources change.
|
|
108
|
+
From the repo root you can also skip the `./` with `pnpm antbot status`.
|
|
109
|
+
|
|
110
|
+
### Data directory
|
|
111
|
+
|
|
112
|
+
Data lives under `~/.ant-bot` by default (database, workspace, skills, attachments, browser
|
|
113
|
+
profile, logs, backups). Set **`ANTBOT_HOME`** to point the daemon and CLI at a different data
|
|
114
|
+
directory, e.g. for a second profile or a test instance:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
ANTBOT_HOME=/path/to/alt-home ./antbot start --port 4791
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## First bot in 5 minutes
|
|
121
|
+
|
|
122
|
+
1. Open http://127.0.0.1:4780 and create a new Bot (sidebar → New). Give it a **name**, a
|
|
123
|
+
**title**, and a real **job description** — not "General Helper." The description is durable:
|
|
124
|
+
it becomes standing rules the Bot follows on every turn (e.g. "Never send external messages
|
|
125
|
+
without approval. Always cite sources.").
|
|
126
|
+
2. Drop a file into the shared workspace so the Bot has something real to read:
|
|
127
|
+
```bash
|
|
128
|
+
echo "Q3 numbers: revenue up 12%, churn down 2pts." > ~/.ant-bot/workspace/notes.txt
|
|
129
|
+
```
|
|
130
|
+
3. Message the Bot in its thread: *"Read `notes.txt` in the workspace and summarize it in two
|
|
131
|
+
sentences."* You'll see the reply stream in as text, with a tool-activity card showing the
|
|
132
|
+
`Read` call.
|
|
133
|
+
4. Ask it to do something that needs approval, e.g. *"Run `git log` in the workspace"* (allowed by
|
|
134
|
+
default) vs. *"Install a package"* or *"curl an external API with POST data"* — those trip a
|
|
135
|
+
built-in `require` rule and produce an **approval card** inline in the thread: tool name,
|
|
136
|
+
human-readable summary, the exact raw input (collapsible), and Allow once / Deny / Always
|
|
137
|
+
allow buttons. Nothing runs until you decide.
|
|
138
|
+
5. Restart the daemon (`antbot stop && antbot start`, or just `kill` and `start` again) — the
|
|
139
|
+
conversation, the Bot's session, and its memory survive.
|
|
140
|
+
|
|
141
|
+
## Architecture
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
┌──────────────────────────────── Web UI (React, localhost:4780) ───────────────────────────────┐
|
|
145
|
+
│ Sidebar (roster, attention states) │ Thread view (messages, tool/approval cards, composer) │
|
|
146
|
+
│ Computer view (screencast + takeover) │ Settings, Rules, Routines, Skills, Usage, Workspace │
|
|
147
|
+
└───────────────▲───────────────────────────────────────────────▲───────────────────────────────┘
|
|
148
|
+
│ REST (CRUD) │ WebSocket (/api/events, deltas,
|
|
149
|
+
│ │ approvals, screencast frames)
|
|
150
|
+
┌───────────────┴───────────────────────────────────────────────┴───────────────────────────────┐
|
|
151
|
+
│ ant-bot daemon (Node, Fastify) │
|
|
152
|
+
│ │
|
|
153
|
+
│ ┌────────────┐ ┌──────────────┐ ┌────────────────┐ ┌───────────┐ ┌────────────────────┐ │
|
|
154
|
+
│ │ API layer │ │ Bot Manager │ │ Permission │ │ Scheduler │ │ Event Bus (in-proc) │ │
|
|
155
|
+
│ │ (Fastify │ │ (FIFO queue, │ │ Gateway │ │ (node-cron│ │ → WS fanout, seq- │ │
|
|
156
|
+
│ │ routes) │ │ one turn │ │ (rules.ts → │ │ per │ │ ordered │ │
|
|
157
|
+
│ │ │ │ per bot at │ │ optional Haiku│ │ routine, │ │ │ │
|
|
158
|
+
│ │ │ │ a time) │ │ review → │ │ run │ │ │ │
|
|
159
|
+
│ │ │ │ │ │ approval card)│ │ history) │ │ │ │
|
|
160
|
+
│ └────────────┘ └──────┬───────┘ └───────▲────────┘ └─────┬─────┘ └─────────────────────┘ │
|
|
161
|
+
│ │ spawns │ canUseTool │ enqueues routine turns │
|
|
162
|
+
│ ┌──────▼─────────────────┴──────────────────────┐ │
|
|
163
|
+
│ │ Agent Session (Claude Agent SDK per turn) │ │
|
|
164
|
+
│ │ system prompt = persona + job description + │ │
|
|
165
|
+
│ │ memory + skills + roster; tools: fs/bash, │ │
|
|
166
|
+
│ │ send_to_bot, remember, request_secret, │ │
|
|
167
|
+
│ │ browser_* (via computer service) │ │
|
|
168
|
+
│ └──────┬──────────────────────────────────────────┘ │
|
|
169
|
+
│ │ │
|
|
170
|
+
│ ┌──────────────────────▼───────────────┐ ┌──────────────────────────────────────────────┐ │
|
|
171
|
+
│ │ Computer service (packages/server/ │ │ Storage: SQLite (better-sqlite3, WAL) — │ │
|
|
172
|
+
│ │ src/computer): Playwright persistent │ │ bots, threads, messages, approvals, rules, │ │
|
|
173
|
+
│ │ profile, per-bot screen lock, │ │ skills, routines, mailbox, usage, settings + │ │
|
|
174
|
+
│ │ screencast, takeover │ │ ~/.ant-bot/workspace + attachments on disk │ │
|
|
175
|
+
│ └────────────────────────────────────────┘ └──────────────────────────────────────────────┘ │
|
|
176
|
+
└─────────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
177
|
+
│ subscription auth: Claude Code CLI login (~/.claude), spawned per turn by the Agent SDK
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Every tool call inside an Agent SDK turn is routed through `canUseTool`, which calls into the
|
|
181
|
+
Permission Gateway before the tool is allowed to run — this is true for the built-in tools
|
|
182
|
+
(`Bash`, `Read`, `Write`, `Edit`, `WebFetch`, ...), the custom `send_to_bot` / `remember` /
|
|
183
|
+
`request_secret` tools, and the `browser_*` tools alike.
|
|
184
|
+
|
|
185
|
+
## CLI commands
|
|
186
|
+
|
|
187
|
+
All commands are implemented in `packages/cli`. Run them as `./antbot <command>` from the repo
|
|
188
|
+
root, or as plain `antbot <command>` once it is [on your `PATH`](#putting-antbot-on-your-path).
|
|
189
|
+
|
|
190
|
+
| Command | Description |
|
|
191
|
+
|---|---|
|
|
192
|
+
| `start [--port N] [--open] [--foreground]` | Start the daemon (detached by default; `--open` opens the UI once healthy; `--foreground` keeps it attached to the current terminal) |
|
|
193
|
+
| `stop` | Stop the running daemon (only if it was started by the CLI and has a pidfile) |
|
|
194
|
+
| `restart [--port N]` | Stop the daemon and start it again |
|
|
195
|
+
| `status` | Show whether the daemon is running, its URL, version, data dir, and bot count |
|
|
196
|
+
| `doctor` | Diagnose the local environment: Node version, `claude` CLI + login, `ANTHROPIC_API_KEY`, data-dir permissions, port availability, `better-sqlite3` native module, Playwright Chromium |
|
|
197
|
+
| `open` | Open the UI in the default browser, starting the daemon first if it isn't running |
|
|
198
|
+
| `skill <add\|list\|remove>` | Manage the skills your bots can use |
|
|
199
|
+
| `backup [--out PATH]` | Write a `.tar.gz` of the database, `config.toml`, skills, and every bot's memory directory (excludes the browser profile and attachments) |
|
|
200
|
+
| `restore <path> [--yes]` | Restore a backup archive over `~/.ant-bot` (prompts for confirmation unless `--yes`) |
|
|
201
|
+
| `-h, --help` / `-v, --version` | Global help / CLI version |
|
|
202
|
+
|
|
203
|
+
Every command takes `--help`, e.g. `antbot start --help`.
|
|
204
|
+
|
|
205
|
+
## Project layout
|
|
206
|
+
|
|
207
|
+
| Path | What it is |
|
|
208
|
+
|---|---|
|
|
209
|
+
| `packages/shared` | Zod schemas + TypeScript types for every entity and API request/response, `LIMITS` constants, the WS event union — imported by both server and web |
|
|
210
|
+
| `packages/server` | The daemon: Fastify API + WS (`src/api`), Bot lifecycle and queue (`src/bots`), Agent SDK wrapper (`src/agent`), Permission Gateway + rules + secrets (`src/permissions`), scheduler/cron (`src/scheduler`), skills store (`src/skills`), browser/computer service (`src/computer`), SQLite layer (`src/db`), config + paths (`src/config`) |
|
|
211
|
+
| `packages/web` | React 19 + Vite UI: sidebar, thread view, approval cards, rules/settings/routines/usage screens, workspace browser, command palette |
|
|
212
|
+
| `packages/cli` | The `antbot` CLI: start/stop/restart/status/doctor/open/skill/backup/restore |
|
|
213
|
+
| `skills/` | The skills that ship with ant-bot — `bug-repro`, `deep-research`, `inbox-digest`, `skill-author`, `weekly-report` — plus `SPEC.md`, the Agent Skills spec they all conform to. Installed into `~/.ant-bot/skills` on every start and refreshed on upgrade unless you have edited or deleted your copy |
|
|
214
|
+
| `computer/` | Placeholder for an optional containerized "computer" image — **not implemented** (see Status below) |
|
|
215
|
+
| `docs/` | This plan, the design-doctrine outline it's translated from, and the frozen API contract |
|
|
216
|
+
|
|
217
|
+
## Testing
|
|
218
|
+
|
|
219
|
+
Each package uses Vitest. Run all of them from the repo root with `pnpm test`, or per package:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
pnpm --filter @antbot/shared test
|
|
223
|
+
pnpm --filter @antbot/server test
|
|
224
|
+
pnpm --filter @antbot/web test
|
|
225
|
+
pnpm --filter @antbot/cli test
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Current totals, as run against this checkout:
|
|
229
|
+
|
|
230
|
+
| Package | Test files | Tests |
|
|
231
|
+
|---|---|---|
|
|
232
|
+
| `@antbot/shared` | 1 | 19 |
|
|
233
|
+
| `@antbot/server` | 19 | 450 |
|
|
234
|
+
| `@antbot/web` | 7 | 49 |
|
|
235
|
+
| `@antbot/cli` | 7 | 114 |
|
|
236
|
+
| **Total** | **34** | **632** |
|
|
237
|
+
|
|
238
|
+
## Status / not built
|
|
239
|
+
|
|
240
|
+
Honestly, as of this checkout:
|
|
241
|
+
|
|
242
|
+
- **Container computer mode** — `computer.mode` is a valid `"host" | "container"` setting in the
|
|
243
|
+
schema and shows up in Settings, but only `host` mode has an implementation; the `computer/`
|
|
244
|
+
directory in the repo is an empty placeholder. There is no container image, and selecting
|
|
245
|
+
`container` does not change daemon behavior.
|
|
246
|
+
- **Teach-by-demonstration** — not implemented. There is no trace recording, no draft-skill-from-
|
|
247
|
+
recording flow, and no "Teach a task" UI affordance anywhere in the codebase.
|
|
248
|
+
- **Event-trigger webhooks** — not implemented. Routines only fire on a cron schedule
|
|
249
|
+
(`node-cron`, timezone-aware) or via a manual test run; there is no `/api/hooks/:routineKey`
|
|
250
|
+
route, no HMAC verification, and no file-watch trigger in the server source.
|
|
251
|
+
- **OS notification wiring** — the `Settings.notificationsEnabled` flag and a per-bot
|
|
252
|
+
`notifications` toggle exist and are persisted, and the scheduler publishes a `notify` event
|
|
253
|
+
over the bus (e.g. the away-guard "still away?" prompt) for the UI to render, but there is no
|
|
254
|
+
OS-level notification integration (no `node-notifier` or platform notification call anywhere in
|
|
255
|
+
the server source) — attention state is currently in-app only.
|
|
256
|
+
- **Mobile / iOS** — no native app; the web UI is responsive but there is no dedicated mobile
|
|
257
|
+
client or push delivery path.
|
|
258
|
+
- **Multi-user / teams** — single local user only; there is no authentication, no accounts, and no
|
|
259
|
+
team administration. See `docs/SECURITY.md` for what that implies.
|
|
260
|
+
|
|
261
|
+
The `Settings.localExecution` field (`ask | always | never`) maps the Grok Bot "cloud computer vs.
|
|
262
|
+
your machine" split onto a path boundary, since ant-bot has only one physical machine: the
|
|
263
|
+
workspace is the Bots' computer, and a tool call reaching outside it is denied (`never`), forced
|
|
264
|
+
to a human approval (`ask`, the default), or left to normal rule evaluation (`always`). The check
|
|
265
|
+
runs ahead of `allow` rules, so a broad rule can't unlock it. Bash reach detection is a
|
|
266
|
+
conservative heuristic, not a sandbox — see `docs/SECURITY.md` for what it does and does not
|
|
267
|
+
catch.
|