@swarmclawai/swarmclaw 1.0.4 → 1.0.6
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/README.md +58 -751
- package/package.json +5 -4
- package/src/app/api/agents/route.ts +1 -0
- package/src/app/api/autonomy/incidents/route.ts +19 -0
- package/src/app/api/autonomy/reflections/route.ts +19 -0
- package/src/app/api/settings/route.ts +3 -0
- package/src/app/api/skill-suggestions/[id]/approve/route.ts +15 -0
- package/src/app/api/skill-suggestions/[id]/reject/route.ts +15 -0
- package/src/app/api/skill-suggestions/route.ts +23 -0
- package/src/app/layout.tsx +1 -1
- package/src/app/settings/page.tsx +18 -0
- package/src/cli/index.js +21 -0
- package/src/cli/spec.js +16 -0
- package/src/components/agents/agent-sheet.tsx +23 -0
- package/src/components/auth/setup-wizard/index.tsx +3 -0
- package/src/components/auth/setup-wizard/step-agents.tsx +16 -0
- package/src/components/auth/setup-wizard/types.ts +1 -0
- package/src/components/auth/setup-wizard/utils.ts +1 -0
- package/src/components/chat/chat-header.tsx +25 -0
- package/src/components/skills/skill-list.tsx +185 -1
- package/src/lib/app/view-constants.ts +3 -3
- package/src/lib/autonomy/supervisor-settings.ts +80 -0
- package/src/lib/server/agents/main-agent-loop-advanced.test.ts +35 -0
- package/src/lib/server/agents/main-agent-loop.ts +45 -8
- package/src/lib/server/autonomy/supervisor-reflection.test.ts +279 -0
- package/src/lib/server/autonomy/supervisor-reflection.ts +817 -0
- package/src/lib/server/chat-execution/chat-execution.ts +30 -0
- package/src/lib/server/memory/temporal-decay.ts +6 -0
- package/src/lib/server/runtime/queue.ts +118 -12
- package/src/lib/server/runtime/session-run-manager.ts +51 -1
- package/src/lib/server/session-tools/skill-runtime.ts +14 -8
- package/src/lib/server/session-tools/skills.ts +5 -3
- package/src/lib/server/skills/runtime-skill-resolver.test.ts +37 -2
- package/src/lib/server/skills/runtime-skill-resolver.ts +114 -1
- package/src/lib/server/skills/skill-suggestions.test.ts +240 -0
- package/src/lib/server/skills/skill-suggestions.ts +376 -0
- package/src/lib/server/storage.ts +46 -2
- package/src/lib/validation/schemas.ts +1 -0
- package/src/types/index.ts +87 -0
- package/src/views/settings/section-skills.tsx +65 -0
- package/src/views/settings/section-supervisor-reflection.tsx +148 -0
package/README.md
CHANGED
|
@@ -8,169 +8,52 @@
|
|
|
8
8
|
<img src="https://raw.githubusercontent.com/swarmclawai/swarmclaw/main/public/branding/swarmclaw-org-avatar.png" alt="SwarmClaw lobster logo" width="120" />
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
SwarmClaw is a self-hosted AI orchestration runtime for OpenClaw and multi-agent work. It helps you run autonomous agents with heartbeats, schedules, delegation, memory, runtime skills, and reviewed conversation-to-skill learning across OpenClaw gateways and other providers.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
GitHub: https://github.com/swarmclawai/swarmclaw
|
|
14
|
+
Docs: https://swarmclaw.ai/docs
|
|
15
|
+
Website: https://swarmclaw.ai
|
|
16
|
+
Plugin tutorial: https://swarmclaw.ai/docs/plugin-tutorial
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
## What SwarmClaw Focuses On
|
|
16
19
|
|
|
17
|
-
|
|
20
|
+
- **AI orchestration**: LangGraph-backed orchestration, delegated work, subagents, durable jobs, checkpointing, and background task execution.
|
|
21
|
+
- **Autonomy and memory**: heartbeats, schedules, long-running execution, durable memory, working memory, document recall, and project-aware context.
|
|
22
|
+
- **OpenClaw integration**: named gateway profiles, external runtimes, deploy helpers, config sync, approval handling, and OpenClaw agent file editing.
|
|
23
|
+
- **Runtime skills**: pinned skills, OpenClaw-compatible `SKILL.md` import, on-demand skill execution, and configurable keyword or embedding-based recommendation.
|
|
24
|
+
- **Conversation-to-skill drafts**: draft a reusable skill from a real chat, review it, then approve it into the skill library.
|
|
25
|
+
- **Crypto wallets**: agent-linked Solana and Ethereum wallets for balances, approvals, signing, simulation, and execution.
|
|
26
|
+
- **Operator tooling**: connectors, plugins, browser automation, shell/files/git tooling, and runtime guardrails.
|
|
18
27
|
|
|
19
|
-
|
|
20
|
-
- [Providers](https://swarmclaw.ai/docs/providers) - provider setup and failover options
|
|
21
|
-
- [OpenClaw Setup](https://swarmclaw.ai/docs/openclaw-setup) - local, VPS, and hosted OpenClaw deployment paths
|
|
22
|
-
- [Agents](https://swarmclaw.ai/docs/agents) - agent configuration, tools, and platform capabilities
|
|
23
|
-
- [Tools](https://swarmclaw.ai/docs/tools) - built-in tool reference and guardrails
|
|
24
|
-
- [Orchestration](https://swarmclaw.ai/docs/orchestration) - multi-agent flows, checkpoints, and restore
|
|
25
|
-
- [Chatrooms](https://swarmclaw.ai/docs/chatrooms) - multi-agent rooms and routing
|
|
26
|
-
- [Connectors](https://swarmclaw.ai/docs/connectors) - Discord/Slack/Telegram/WhatsApp and more
|
|
27
|
-
- [Plugins](https://swarmclaw.ai/docs/plugins) - plugin architecture and extension points
|
|
28
|
-
- [CLI Reference](https://swarmclaw.ai/docs/cli) - complete command reference
|
|
29
|
-
- [Deployment](https://swarmclaw.ai/docs/deployment) - VPS, Docker, and production setup
|
|
28
|
+
## OpenClaw
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-

|
|
33
|
-

|
|
30
|
+
SwarmClaw is built for OpenClaw operators who need more than one agent or one gateway.
|
|
34
31
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
The Providers screen now supports named OpenClaw gateway profiles with discovery, health checks, default-gateway selection, and an External Agent Runtimes view for remote workers that register/heartbeat into SwarmClaw.
|
|
42
|
-
|
|
43
|
-
SwarmClaw now also includes **Smart Deploy** for OpenClaw in three places:
|
|
44
|
-
|
|
45
|
-
- **Onboarding** - non-technical users can launch a local OpenClaw runtime or generate a remote bundle before they finish first-run setup
|
|
46
|
-
- **Providers -> OpenClaw Gateways** - operators can deploy or prepare more gateways later without leaving the main app
|
|
47
|
-
- **Gateway editor** - every gateway profile includes the same deploy panel for local restarts, VPS bundles, and hosted repo-backed deployments
|
|
48
|
-
|
|
49
|
-
The deployment flow stays **in-house and official-only**:
|
|
50
|
-
|
|
51
|
-
- local deploys run the bundled official `openclaw` CLI directly from SwarmClaw
|
|
52
|
-
- VPS deploys use the official OpenClaw Docker image with prefilled `.env`, `docker-compose.yml`, `bootstrap.sh`, and `cloud-init.yaml`
|
|
53
|
-
- hosted templates target the official OpenClaw repo for Render, Fly.io, and Railway
|
|
54
|
-
|
|
55
|
-
Supported VPS presets currently include Hetzner, DigitalOcean, Vultr, Linode, Lightsail, Google Cloud, Azure, OCI, and a generic Ubuntu host path. Smart defaults prefill the gateway token, endpoint, storage paths, and copy-paste commands so the resulting gateway can be saved into SwarmClaw with minimal manual editing.
|
|
56
|
-
|
|
57
|
-
For existing hosts, SwarmClaw can also push the same official-image bundle **over SSH** and then keep remote lifecycle controls attached to that saved gateway profile: start, stop, restart, upgrade, backup, restore, and token rotation.
|
|
58
|
-
|
|
59
|
-
The OpenClaw Control Plane in SwarmClaw adds:
|
|
60
|
-
- Reload mode switching (`hot`, `hybrid`, `full`)
|
|
61
|
-
- Config issue detection and guided repair
|
|
62
|
-
- Remote history sync
|
|
63
|
-
- Live execution approval handling
|
|
64
|
-
- Gateway import/export JSON, clone flows, and richer external runtime fleet visibility
|
|
65
|
-
- Agent and route-target preferences for steering work toward OpenClaw gateways by tags or use case (`local-dev`, `single-vps`, `private-tailnet`, `browser-heavy`, `team-control`)
|
|
66
|
-
|
|
67
|
-
The Agent Inspector Panel lets you edit OpenClaw files (`SOUL.md`, `IDENTITY.md`, `USER.md`), tune personality/system behavior, and manage OpenClaw-compatible skills. Skills are now discoverable by default, pinned skills stay always-on for an agent, and executable `SKILL.md` metadata can drive on-demand runtime skill selection. SwarmClaw also supports importing OpenClaw `SKILL.md` files from URL.
|
|
68
|
-
|
|
69
|
-
To connect an agent to an OpenClaw gateway:
|
|
70
|
-
|
|
71
|
-
1. Optional: create a named gateway profile in **Providers** and mark a default
|
|
72
|
-
2. Create or edit an agent
|
|
73
|
-
3. Toggle **OpenClaw Gateway** ON
|
|
74
|
-
4. Select a saved gateway profile or enter a direct gateway URL/token override
|
|
75
|
-
5. Click **Connect** — approve the device in your gateway's dashboard if prompted, then **Retry Connection**
|
|
76
|
-
|
|
77
|
-
Each agent can point to a **different** OpenClaw gateway profile or direct endpoint — one local, several remote. This is how you manage a **swarm of OpenClaws** from a single dashboard.
|
|
78
|
-
|
|
79
|
-
URLs without a protocol are auto-prefixed with `http://`. For remote gateways with TLS, use `https://` explicitly.
|
|
80
|
-
|
|
81
|
-
CLI operators can use the same deploy surface without opening the UI:
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
swarmclaw openclaw deploy-status
|
|
85
|
-
swarmclaw openclaw deploy-local-start --data '{"port":18789}'
|
|
86
|
-
swarmclaw openclaw deploy-local-restart --data '{"port":18789}'
|
|
87
|
-
swarmclaw openclaw deploy-bundle --data '{"template":"docker","provider":"hetzner","target":"openclaw.example.com"}'
|
|
88
|
-
swarmclaw openclaw deploy-ssh --data '{"target":"openclaw.example.com","provider":"hetzner","ssh":{"host":"your-vps-ip"}}'
|
|
89
|
-
swarmclaw openclaw remote-backup --data '{"ssh":{"host":"your-vps-ip"}}'
|
|
90
|
-
swarmclaw openclaw remote-restore --data '{"backupPath":"/opt/openclaw/backups/openclaw-backup-123.tgz","ssh":{"host":"your-vps-ip"}}'
|
|
91
|
-
swarmclaw openclaw deploy-verify --data '{"endpoint":"https://openclaw.example.com/v1"}'
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## SwarmClaw ClawHub Skill
|
|
95
|
-
|
|
96
|
-
Use the `swarmclaw` ClawHub skill when you want an OpenClaw agent to operate your SwarmClaw control plane directly from chat: list agents, dispatch tasks, check chats, run diagnostics, and coordinate multi-agent work.
|
|
97
|
-
|
|
98
|
-
Install it from ClawHub:
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
clawhub install swarmclaw
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
Skill source and runbook: [`swarmclaw/SKILL.md`](swarmclaw/SKILL.md).
|
|
105
|
-
|
|
106
|
-
- Always use the access key authentication (generated on first run)
|
|
107
|
-
- Never expose port 3456 without a reverse proxy + TLS
|
|
108
|
-
- Review agent system prompts before giving them shell or browser tools
|
|
109
|
-
- Repeated failed access key attempts are rate-limited to slow brute-force attacks
|
|
110
|
-
|
|
111
|
-
## Requirements
|
|
112
|
-
|
|
113
|
-
- **Node.js** 22.6+
|
|
114
|
-
- One of: **npm** 10+, **pnpm**, **Yarn**, or **Bun**
|
|
115
|
-
- **Claude Code CLI** (optional, for `claude-cli` provider) — [Install](https://docs.anthropic.com/en/docs/claude-code/overview)
|
|
116
|
-
- **OpenAI Codex CLI** (optional, for `codex-cli` provider) — [Install](https://github.com/openai/codex)
|
|
117
|
-
- **OpenCode CLI** (optional, for `opencode-cli` provider) — [Install](https://github.com/opencode-ai/opencode)
|
|
118
|
-
- **Gemini CLI** (optional, for `delegate` backend `gemini`) — install and authenticate `gemini` on your host
|
|
119
|
-
- **Docker Desktop** (optional, recommended) — enables container sandboxes for shell, browser, and `sandbox_exec`; without Docker, SwarmClaw falls back to host execution
|
|
32
|
+
- Bundle and use the official `openclaw` CLI directly from SwarmClaw.
|
|
33
|
+
- Connect each SwarmClaw agent to a different OpenClaw gateway profile.
|
|
34
|
+
- Discover, verify, and manage multiple gateways from one control plane.
|
|
35
|
+
- Deploy official-image OpenClaw runtimes locally, via VPS bundles, or over SSH.
|
|
36
|
+
- Edit OpenClaw agent files such as `SOUL.md`, `IDENTITY.md`, `USER.md`, `TOOLS.md`, and `AGENTS.md`.
|
|
37
|
+
- Import OpenClaw `SKILL.md` files and use them in SwarmClaw’s runtime skill system.
|
|
120
38
|
|
|
121
39
|
## Quick Start
|
|
122
40
|
|
|
123
|
-
SwarmClaw is published to the npm registry once and can be installed with `npm`, `pnpm`, `yarn`, or `bun`. There is no separate package-manager signup for end users.
|
|
124
|
-
|
|
125
41
|
### Global install
|
|
126
42
|
|
|
127
43
|
```bash
|
|
128
44
|
npm i -g @swarmclawai/swarmclaw
|
|
129
|
-
pnpm add -g @swarmclawai/swarmclaw
|
|
130
|
-
yarn global add @swarmclawai/swarmclaw
|
|
131
|
-
bun add -g @swarmclawai/swarmclaw
|
|
132
45
|
swarmclaw
|
|
133
46
|
```
|
|
134
47
|
|
|
135
|
-
Running `swarmclaw`
|
|
136
|
-
Global install runs `postinstall`, which rebuilds `better-sqlite3` and prepares the sandbox browser image when Docker is available.
|
|
137
|
-
If Docker is not installed yet, SwarmClaw keeps running and falls back to host execution for shell, browser, and `sandbox_exec`.
|
|
138
|
-
No Deno install is required for the local `sandbox_exec` path.
|
|
139
|
-
Runtime state defaults to `~/.swarmclaw` unless you set `SWARMCLAW_HOME`.
|
|
140
|
-
If the standalone server bundle is missing, the first launch builds it under `<swarmclaw-home>/builds/package-<version>` before starting.
|
|
141
|
-
|
|
142
|
-
### Local project install
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
npm i @swarmclawai/swarmclaw
|
|
146
|
-
npx swarmclaw
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
Local installs keep runtime state in `<project>/.swarmclaw` by default. The same project-local install works with `pnpm`, `yarn`, or `bun`; use that package manager's exec command to launch the local binary, or run `./node_modules/.bin/swarmclaw` directly.
|
|
48
|
+
Running `swarmclaw` starts the server on `http://localhost:3456`.
|
|
150
49
|
|
|
151
50
|
### One-off run
|
|
152
51
|
|
|
153
52
|
```bash
|
|
154
53
|
npx @swarmclawai/swarmclaw
|
|
155
|
-
pnpm dlx @swarmclawai/swarmclaw
|
|
156
|
-
yarn dlx @swarmclawai/swarmclaw
|
|
157
|
-
bunx @swarmclawai/swarmclaw
|
|
158
54
|
```
|
|
159
55
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
### Install script
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
curl -fsSL https://raw.githubusercontent.com/swarmclawai/swarmclaw/main/install.sh | bash
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
The installer resolves the latest stable release tag and installs that version by default.
|
|
169
|
-
It also builds the production bundle so `npm run start` is ready immediately after install.
|
|
170
|
-
No Deno install is required; local sandbox execution is Docker-first with automatic host Node fallback.
|
|
171
|
-
To pin a version: `SWARMCLAW_VERSION=v1.0.3 curl ... | bash`
|
|
172
|
-
|
|
173
|
-
Or run locally from the repo (friendly for non-technical users):
|
|
56
|
+
### From the repo
|
|
174
57
|
|
|
175
58
|
```bash
|
|
176
59
|
git clone https://github.com/swarmclawai/swarmclaw.git
|
|
@@ -178,624 +61,48 @@ cd swarmclaw
|
|
|
178
61
|
npm run quickstart
|
|
179
62
|
```
|
|
180
63
|
|
|
181
|
-
`npm run quickstart`
|
|
182
|
-
- Check Node/npm versions
|
|
183
|
-
- Install dependencies
|
|
184
|
-
- Prepare the Docker sandbox/browser runtime when Docker is available
|
|
185
|
-
- Prepare `.env.local` and `data/`
|
|
186
|
-
- Start the app at `http://localhost:3456`
|
|
187
|
-
|
|
188
|
-
For the packaged production server, use:
|
|
189
|
-
|
|
190
|
-
```bash
|
|
191
|
-
npm run quickstart:prod
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
If you prefer another package manager for local development:
|
|
195
|
-
|
|
196
|
-
```bash
|
|
197
|
-
pnpm install && pnpm dev
|
|
198
|
-
yarn install && yarn dev
|
|
199
|
-
bun install && bun run dev
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
`postinstall` rebuilds `better-sqlite3` natively and prepares the sandbox browser image when Docker is available.
|
|
203
|
-
If Docker is missing, SwarmClaw falls back to host execution until Docker is installed.
|
|
204
|
-
If you install with `--ignore-scripts`, run `npm rebuild better-sqlite3` manually and then `node ./scripts/ensure-sandbox-browser-image.mjs`.
|
|
205
|
-
|
|
206
|
-
On first launch, SwarmClaw will:
|
|
207
|
-
1. Generate an **access key** and display it in the terminal
|
|
208
|
-
2. Save it to `.env.local`
|
|
209
|
-
3. Show a first-time setup screen in the browser with the key to copy
|
|
210
|
-
|
|
211
|
-
Open `http://localhost:3456` (or your machine's IP for mobile access). Enter the access key, set your name, and you're in.
|
|
212
|
-
|
|
213
|
-
### Command-Line Setup (No UI Required)
|
|
214
|
-
|
|
215
|
-
You can complete first-time setup from terminal:
|
|
216
|
-
|
|
217
|
-
```bash
|
|
218
|
-
# Start the app (if not already running)
|
|
219
|
-
npm run dev
|
|
220
|
-
|
|
221
|
-
# In another terminal, run interactive setup (walks you through provider selection)
|
|
222
|
-
node ./bin/swarmclaw.js setup init
|
|
223
|
-
|
|
224
|
-
# Or pass flags directly for non-interactive setup
|
|
225
|
-
node ./bin/swarmclaw.js setup init --provider openai --api-key "$OPENAI_API_KEY"
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
Notes:
|
|
229
|
-
- When run with no flags in a TTY, `setup init` enters interactive mode — pick providers, enter keys, name agents, and add multiple providers in one session.
|
|
230
|
-
- Use `--no-interactive` to force flag-only mode.
|
|
231
|
-
- On a fresh instance, `setup init` can auto-discover and claim the first-run access key from `/api/auth`.
|
|
232
|
-
- For existing installs, pass `--key <ACCESS_KEY>` or set `SWARMCLAW_ACCESS_KEY` / `SWARMCLAW_API_KEY`.
|
|
233
|
-
- `setup init` performs provider validation, stores credentials, creates a starter agent, and marks setup complete.
|
|
234
|
-
- Use `--skip-check` to bypass connection validation.
|
|
235
|
-
|
|
236
|
-
### 2-Minute Setup Wizard
|
|
237
|
-
|
|
238
|
-
After login, SwarmClaw opens a guided wizard designed for non-technical users:
|
|
239
|
-
|
|
240
|
-
1. **Choose a provider** — Pick from all 11 supported providers (OpenAI, Anthropic, Google Gemini, DeepSeek, Groq, Together AI, Mistral, xAI, Fireworks, OpenClaw, Ollama)
|
|
241
|
-
2. **Connect provider** — Enter only required fields (API key and/or endpoint), then click **Check Connection** for live validation
|
|
242
|
-
3. **Create your agent** — Each provider gets a unique default name (e.g. Atlas for OpenAI, Claude for Anthropic, Bolt for Groq). Choose **Create & Add Another** to set up multiple providers, or **Create & Finish** to continue
|
|
243
|
-
4. **Summary** — Review all created agents and discover connectors (Discord, Slack, Telegram, WhatsApp)
|
|
244
|
-
|
|
245
|
-
Notes:
|
|
246
|
-
- You can add multiple providers in a single wizard session — configured providers are dimmed and shown as chips.
|
|
247
|
-
- Ollama checks can auto-suggest a model from the connected endpoint.
|
|
248
|
-
- You can skip setup at any step and configure everything later in the sidebar.
|
|
249
|
-
|
|
250
|
-
## Features
|
|
251
|
-
|
|
252
|
-
- **15 providers out of the box** - CLI providers + major hosted APIs + OpenAI-compatible custom endpoints
|
|
253
|
-
- **OpenClaw-native control plane** - named gateway profiles, external runtimes, reload modes, sync, and approval flows
|
|
254
|
-
- **Agent builder + inspector** - personality/system tuning, skill management, and OpenClaw file editing
|
|
255
|
-
- **Rich toolset** - shell, files, browser, git, sandbox execution, memory, MCP, and delegation
|
|
256
|
-
- **Platform automation** - agents can manage tasks, schedules, chats, connectors, secrets, and more
|
|
257
|
-
- **LangGraph orchestration** - routing to sub-agents with checkpoint timeline and restore
|
|
258
|
-
- **Task board + daemon + scheduler** - long-running autonomous workflows with heartbeat safety
|
|
259
|
-
- **Chat UX** - edit/resend, fork, bookmarks, previews, telemetry, notifications, and search palette
|
|
260
|
-
- **Multi-agent chatrooms** - room routing with mentions, reactions, and persistent context compaction
|
|
261
|
-
- **Connector bridge** - Discord, Slack, Telegram, WhatsApp, Teams, Matrix, OpenClaw, and others
|
|
262
|
-
- **Memory + knowledge** - hybrid search, memory graph, shared knowledge store, and auto-journaling
|
|
263
|
-
- **Operational guardrails** - capability policy, cost tracking, provider health, and credential failover
|
|
264
|
-
- **Extensibility** - plugin hooks/tools/UI extensions plus reusable skills with discovery-by-default runtime selection
|
|
265
|
-
|
|
266
|
-
For the full feature matrix and per-capability details, see:
|
|
267
|
-
- https://swarmclaw.ai/docs
|
|
268
|
-
- https://swarmclaw.ai/docs/release-notes
|
|
269
|
-
|
|
270
|
-
## Configuration
|
|
271
|
-
|
|
272
|
-
All config lives in `.env.local` (auto-generated):
|
|
273
|
-
|
|
274
|
-
```
|
|
275
|
-
ACCESS_KEY=<your-access-key> # Auth key for the dashboard
|
|
276
|
-
CREDENTIAL_SECRET=<auto-generated> # AES-256 encryption key for stored credentials
|
|
277
|
-
SWARMCLAW_PLUGIN_FAILURE_THRESHOLD=3 # Consecutive failures before auto-disabling a plugin
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
Data is stored in `data/swarmclaw.db` (SQLite with WAL mode), `data/memory.db` (agent memory with FTS5 + vector embeddings), `data/logs.db` (execution audit trail), and `data/langgraph-checkpoints.db` (orchestrator checkpoints). Back the `data/` directory up if you care about your chats, agents, and credentials. Existing JSON file data is auto-migrated to SQLite on first run.
|
|
281
|
-
Agent wallet private keys are stored encrypted (AES-256 via `CREDENTIAL_SECRET`) in `data/swarmclaw.db` and are never returned by wallet API responses; keep `data/` out of version control.
|
|
282
|
-
|
|
283
|
-
The app listens on two ports: `PORT` (default 3456) for the HTTP/SSE API, and `PORT + 1` (default 3457) for WebSocket push notifications. The WS port can be customized with `--ws-port`.
|
|
284
|
-
|
|
285
|
-
## Architecture
|
|
286
|
-
|
|
287
|
-
```
|
|
288
|
-
src/
|
|
289
|
-
├── app/
|
|
290
|
-
│ ├── api/ # Next.js API routes (REST + SSE streaming)
|
|
291
|
-
│ └── page.tsx # Auth flow → UserPicker → AppLayout
|
|
292
|
-
├── components/
|
|
293
|
-
│ ├── agents/ # Agent builder UI
|
|
294
|
-
│ ├── auth/ # Access key gate + user picker
|
|
295
|
-
│ ├── chat/ # Message rendering, streaming, code blocks
|
|
296
|
-
│ ├── chatrooms/ # Multi-agent chatroom UI
|
|
297
|
-
│ ├── connectors/ # Discord/Slack/Telegram/WhatsApp config
|
|
298
|
-
│ ├── layout/ # App shell, sidebar, mobile header
|
|
299
|
-
│ ├── memory/ # Memory browser and maintenance UI
|
|
300
|
-
│ ├── providers/ # Provider management
|
|
301
|
-
│ ├── schedules/ # Cron scheduler
|
|
302
|
-
│ ├── skills/ # Skills manager
|
|
303
|
-
│ ├── tasks/ # Task board
|
|
304
|
-
│ └── shared/ # Reusable UI (BottomSheet, IconButton, etc.)
|
|
305
|
-
├── lib/
|
|
306
|
-
│ ├── providers/ # LLM provider implementations
|
|
307
|
-
│ └── server/ # Storage, orchestrator, connectors, tools
|
|
308
|
-
├── stores/ # Zustand state (app store, chat store, chatroom store)
|
|
309
|
-
└── types/ # TypeScript interfaces
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
**Stack:** Next.js 16, React 19, Tailwind v4, shadcn/ui, Zustand, LangGraph, TypeScript
|
|
313
|
-
|
|
314
|
-
## Providers
|
|
315
|
-
|
|
316
|
-
### CLI Providers
|
|
317
|
-
|
|
318
|
-
| Provider | Binary | Notes |
|
|
319
|
-
|-|-|-|
|
|
320
|
-
| Claude Code CLI | `claude` | Spawns with `--print --output-format stream-json`. Includes auth preflight and clearer timeout/exit diagnostics. |
|
|
321
|
-
| OpenAI Codex CLI | `codex` | Spawns with `--full-auto --skip-git-repo-check`. Includes login preflight and streamed CLI error events. |
|
|
322
|
-
| OpenCode CLI | `opencode` | Spawns with `run --format json` and tracks session resume IDs. Multi-model support. |
|
|
323
|
-
|
|
324
|
-
### API Providers
|
|
325
|
-
|
|
326
|
-
| Provider | Endpoint | Models |
|
|
327
|
-
|-|-|-|
|
|
328
|
-
| Anthropic | api.anthropic.com | Claude Sonnet 4.6, Opus 4.6, Haiku 4.5 |
|
|
329
|
-
| OpenAI | api.openai.com | GPT-4o, GPT-4.1, o3, o4-mini |
|
|
330
|
-
| Google Gemini | generativelanguage.googleapis.com | Gemini 2.5 Pro, Flash, Flash Lite |
|
|
331
|
-
| DeepSeek | api.deepseek.com | DeepSeek Chat, Reasoner |
|
|
332
|
-
| Groq | api.groq.com | Llama 3.3 70B, DeepSeek R1, Qwen QWQ |
|
|
333
|
-
| Together AI | api.together.xyz | Llama 4 Maverick, DeepSeek R1, Qwen 2.5 |
|
|
334
|
-
| Mistral AI | api.mistral.ai | Mistral Large, Small, Magistral, Devstral |
|
|
335
|
-
| xAI (Grok) | api.x.ai | Grok 3, Grok 3 Fast, Grok 3 Mini |
|
|
336
|
-
| Fireworks AI | api.fireworks.ai | DeepSeek R1, Llama 3.3 70B, Qwen 3 |
|
|
337
|
-
|
|
338
|
-
If a provider is configured, SwarmClaw can populate the model dropdown from that provider’s advertised model list. For OpenAI this means the selector can auto-fill current OpenAI models, while still allowing users to type a newer or custom model manually if it is not in the fetched list yet.
|
|
339
|
-
|
|
340
|
-
### Local & Remote
|
|
341
|
-
|
|
342
|
-
| Provider | Type | Notes |
|
|
343
|
-
|-|-|-|
|
|
344
|
-
| Ollama | Local/Cloud | Connects to `localhost:11434`. No API key needed. 50+ models. |
|
|
345
|
-
| OpenClaw | Per-Agent Gateway | Toggle in agent editor connects to any OpenClaw gateway via the bundled CLI. |
|
|
346
|
-
| Custom | API | Any OpenAI-compatible endpoint. Add via Providers sidebar. |
|
|
347
|
-
|
|
348
|
-
## Chat Connectors
|
|
349
|
-
|
|
350
|
-
Bridge any agent to a chat platform:
|
|
351
|
-
|
|
352
|
-
| Platform | Library | Setup |
|
|
353
|
-
|-|-|-|
|
|
354
|
-
| Discord | discord.js | Bot token + channel IDs |
|
|
355
|
-
| Slack | @slack/bolt | Bot token + app token (Socket Mode) |
|
|
356
|
-
| Telegram | grammy | Bot token from @BotFather |
|
|
357
|
-
| WhatsApp | baileys | QR code pairing (shown in browser) |
|
|
358
|
-
| BlueBubbles | Custom webhook bridge | Server URL + password/webhook secret |
|
|
359
|
-
| Signal | signal-cli | `signal-cli` binary + linked phone |
|
|
360
|
-
| Microsoft Teams | botbuilder | Bot Framework credentials + webhook ingress |
|
|
361
|
-
| Google Chat | googleapis | Service account + webhook ingress |
|
|
362
|
-
| Matrix | matrix-bot-sdk | Homeserver URL + access token |
|
|
363
|
-
| OpenClaw | gateway protocol | OpenClaw connector credentials |
|
|
364
|
-
|
|
365
|
-
Connector chats preserve attachment visibility in chat context:
|
|
366
|
-
- WhatsApp media is decoded and persisted to `/api/uploads/...` when possible
|
|
367
|
-
- Telegram and Slack attachments are downloaded to uploads when possible
|
|
368
|
-
- Discord attachments are captured as media metadata/URLs
|
|
369
|
-
|
|
370
|
-
Agents automatically suppress replies to simple acknowledgments ("ok", "thanks", thumbs-up, etc.) via a `NO_MESSAGE` response — conversations feel natural without a forced reply to every message. This is handled at the connector layer, so agents can return `NO_MESSAGE` as their response content and the platform won't deliver anything to the channel.
|
|
371
|
-
|
|
372
|
-
For proactive outreach, `connector_message_tool` supports text plus optional `imageUrl` / `fileUrl` / `mediaPath` (local file path) payloads. WhatsApp, Discord, Slack, and Telegram support local file sending via `mediaPath` with auto-detected MIME types.
|
|
373
|
-
|
|
374
|
-
Connector ingress now also supports optional pairing/allowlist policy:
|
|
375
|
-
- `dmPolicy: allowlist` blocks unknown senders until approved
|
|
376
|
-
- `/pair` flow lets approved admins generate and approve pairing codes
|
|
377
|
-
- `/think` command can set connector thread thinking level (`low`, `medium`, `high`)
|
|
378
|
-
- Session overrides also support per-thread `/reply`, `/scope`, `/thread`, `/provider`, `/model`, `/idle`, `/maxage`, and `/reset` controls
|
|
379
|
-
|
|
380
|
-
Direct connector sessions are now the only source of routable connector state. Main agent threads no longer inherit outbound connector targets from mirrored history, and tool-only heartbeats stay out of visible main-thread history.
|
|
381
|
-
|
|
382
|
-
## Agent Tools
|
|
383
|
-
|
|
384
|
-
Agents can use the following tools when enabled:
|
|
385
|
-
|
|
386
|
-
| Tool | Description |
|
|
387
|
-
|-|-|
|
|
388
|
-
| Shell | Execute commands in the chat working directory |
|
|
389
|
-
| Process | Control long-running shell commands (`process_tool`) |
|
|
390
|
-
| Files | Read, write, list, and send files |
|
|
391
|
-
| Copy/Move/Delete File | Optional file ops (`copy_file`, `move_file`, `delete_file`) configurable per agent/chat (`delete_file` is off by default) |
|
|
392
|
-
| Edit File | Search-and-replace editing (exact match required) |
|
|
393
|
-
| Web Search | Search the web via DuckDuckGo HTML scraping |
|
|
394
|
-
| Web Fetch | Fetch and extract text content from URLs (uses cheerio) |
|
|
395
|
-
| CLI Delegation | Delegate complex tasks to Claude Code, Codex CLI, OpenCode CLI, or Gemini CLI, either inline or as a background job handle |
|
|
396
|
-
| Spawn Subagent | Delegate a sub-task to another agent with `status` / `list` / `wait` / `cancel` handles and inherited browser state when needed |
|
|
397
|
-
| Browser | Playwright-powered web browsing via MCP with persistent profiles, structured page reads, form helpers, verification actions, and resumable state |
|
|
398
|
-
| Canvas | Present/hide/snapshot live HTML content in a chat canvas panel |
|
|
399
|
-
| HTTP Request | Make direct API calls with method, headers, body, redirect control, and timeout |
|
|
400
|
-
| Git | Run structured git subcommands (`status`, `diff`, `log`, `add`, `commit`, `push`, etc.) with repo safety checks |
|
|
401
|
-
| Memory | Store and retrieve long-term memories with FTS5 + vector search, file references, image attachments, and linked memory graph traversal |
|
|
402
|
-
| Monitor | Inspect system state and create durable watches over files, endpoints, tasks, webhooks, and page/content changes (`monitor_tool`) |
|
|
403
|
-
| Wallet | Manage an agent-linked Solana wallet (`wallet_tool`) to check balance/address, send SOL (limits + approval), and review transaction history |
|
|
404
|
-
| Image Generation | Generate images from prompts (`generate_image`) via OpenAI, Stability, Replicate, fal.ai, Together, Fireworks, BFL, or custom endpoints; saved to uploads |
|
|
405
|
-
| Email | Send outbound email via SMTP (`email`) with `send`/`status` actions |
|
|
406
|
-
| Calendar | Manage Google/Outlook events (`calendar`) with list/create/update/delete/status actions |
|
|
407
|
-
| Sandbox | Run JS/TS in a Docker-preferred Node.js sandbox when custom code is necessary. New and existing agents default to sandbox-enabled configs. If Docker is unavailable, SwarmClaw falls back to host execution; for simple API calls, prefer HTTP Request. |
|
|
408
|
-
| MCP Servers | Connect to external Model Context Protocol servers. Tools from MCP servers are injected as first-class agent tools |
|
|
409
|
-
|
|
410
|
-
### Platform Tools
|
|
411
|
-
|
|
412
|
-
Agents with platform tools enabled can manage the SwarmClaw instance:
|
|
413
|
-
|
|
414
|
-
| Tool | Description |
|
|
415
|
-
|-|-|
|
|
416
|
-
| Manage Agents | List, create, update, delete agents |
|
|
417
|
-
| Manage Tasks | Create and manage task board items with agent assignment |
|
|
418
|
-
| Manage Schedules | Create cron, interval, or one-time scheduled jobs |
|
|
419
|
-
| Reminders | Schedule a durable conversational wake event in the current chat (`schedule_wake`) |
|
|
420
|
-
| Manage Skills | List, create, update reusable skill definitions |
|
|
421
|
-
| Manage Documents | Upload/search/get/delete indexed docs for lightweight RAG workflows |
|
|
422
|
-
| Manage Webhooks | Register external webhook endpoints that trigger agent chats |
|
|
423
|
-
| Manage Connectors | Manage chat platform bridges |
|
|
424
|
-
| Manage Chatrooms | Create/list/update chatrooms, manage members, and post room messages for multi-agent collaboration |
|
|
425
|
-
| Manage Chats | Enable `sessions_tool` for list/history/status/send/spawn/stop across chats, plus `context_status` and `context_summarize` for context window management |
|
|
426
|
-
| Manage Secrets | Store and retrieve encrypted reusable secrets |
|
|
427
|
-
|
|
428
|
-
Enable tools per-chat or per-agent in the UI. CLI providers (Claude Code, Codex, OpenCode) handle tools natively through their own CLI.
|
|
429
|
-
OpenClaw provider capabilities are also managed remotely in OpenClaw itself, so local Tools/Platform toggles are hidden for OpenClaw agents.
|
|
430
|
-
|
|
431
|
-
## Starter Skills (URL Import)
|
|
432
|
-
|
|
433
|
-
Import these directly in **Skills → Import via URL**:
|
|
434
|
-
|
|
435
|
-
- `https://swarmclaw.ai/skills/openclaw-swarmclaw-bridge/SKILL.md`
|
|
436
|
-
- `https://swarmclaw.ai/skills/swarmclaw-bootstrap/SKILL.md`
|
|
437
|
-
|
|
438
|
-
## Cost Tracking
|
|
439
|
-
|
|
440
|
-
Token usage and estimated costs are tracked per message for API-based providers (Anthropic, OpenAI). After each response, a badge in the chat header shows token count and estimated cost.
|
|
441
|
-
|
|
442
|
-
- **API endpoint:** `GET /api/usage` — returns usage summary by agent/provider plus plugin-level token rollups (`byPlugin`)
|
|
443
|
-
- **Data:** Stored in `data/swarmclaw.db` (usage table)
|
|
444
|
-
- Cost estimates use published model pricing (updated manually in `src/lib/server/cost.ts`)
|
|
445
|
-
|
|
446
|
-
## Task Metrics
|
|
447
|
-
|
|
448
|
-
Task analytics are available via API for dashboarding and release-readiness checks:
|
|
449
|
-
|
|
450
|
-
- **API endpoint:** `GET /api/tasks/metrics?range=24h|7d|30d`
|
|
451
|
-
- **Returns:** status totals, WIP count, completion velocity buckets, avg/p50/p90 cycle time, completion/failure by agent, and priority counts
|
|
452
|
-
|
|
453
|
-
## Background Daemon
|
|
454
|
-
|
|
455
|
-
The daemon auto-processes queued tasks from the scheduler on a 30-second interval. It also runs recurring health checks that detect stale heartbeat chats and can send proactive WhatsApp alerts when issues are detected. Toggle the daemon from the sidebar indicator or via API.
|
|
64
|
+
`npm run quickstart` installs dependencies, prepares local config and runtime state, and starts SwarmClaw.
|
|
456
65
|
|
|
457
|
-
|
|
66
|
+
## Skill Drafts From Conversations
|
|
458
67
|
|
|
459
|
-
-
|
|
460
|
-
-
|
|
68
|
+
- From any active chat, use **Draft Skill** in the chat header.
|
|
69
|
+
- Or open **Skills** and use **Draft From Current Chat**.
|
|
70
|
+
- New agents keep **Conversation Skill Drafting** enabled by default, and you can switch it off per agent.
|
|
71
|
+
- SwarmClaw turns useful work into a **draft suggestion**, not a live self-modifying skill.
|
|
72
|
+
- Review the suggested name, rationale, summary, and transcript snippet.
|
|
73
|
+
- Approve it to save it into the normal skill library, or dismiss it.
|
|
74
|
+
- Runtime skill recommendations can use **keyword** or **embedding** ranking from **Settings → Memory & AI → Skills**.
|
|
461
75
|
|
|
462
|
-
##
|
|
76
|
+
## Core Capabilities
|
|
463
77
|
|
|
464
|
-
|
|
78
|
+
- **Providers**: OpenClaw, OpenAI, Anthropic, Ollama, Google, DeepSeek, Groq, Together, Mistral, xAI, Fireworks, plus compatible custom endpoints.
|
|
79
|
+
- **Delegation**: built-in delegation to Claude Code, Codex CLI, OpenCode CLI, Gemini CLI, and native SwarmClaw subagents.
|
|
80
|
+
- **Autonomy**: heartbeat loops, schedules, background jobs, task execution, and agent wakeups.
|
|
81
|
+
- **Memory**: hybrid recall, graph traversal, journaling, durable documents, and project-scoped context.
|
|
82
|
+
- **Wallets**: balances, transfers, signatures, EVM call/quote/swap flows, and approval-gated execution.
|
|
83
|
+
- **Connectors**: Discord, Slack, Telegram, WhatsApp, Teams, Matrix, OpenClaw, and more.
|
|
84
|
+
- **Plugins**: tool plugins, UI extensions, hooks, install/update flows, and runtime policy controls.
|
|
465
85
|
|
|
466
|
-
|
|
467
|
-
- **Ongoing**: loops keep iterating until they hit your safety cap and optional runtime limit
|
|
468
|
-
|
|
469
|
-
You can also tune shell timeout, Claude Code delegation timeout, and CLI provider process timeout from the same settings panel.
|
|
470
|
-
|
|
471
|
-
## Capability Policy
|
|
472
|
-
|
|
473
|
-
Configure this in **Settings → Capability Policy** to centrally govern tool access:
|
|
474
|
-
|
|
475
|
-
- **Mode:** `permissive`, `balanced`, or `strict`
|
|
476
|
-
- **Blocked categories:** e.g. `execution`, `filesystem`, `platform`, `outbound`
|
|
477
|
-
- **Blocked tools:** specific tool families or concrete tool names
|
|
478
|
-
- **Allowed tools:** explicit overrides when running stricter modes
|
|
479
|
-
|
|
480
|
-
Policy is enforced in both chat tool construction and direct forced tool invocations, so auto-routing and explicit tool requests use the same guardrails.
|
|
481
|
-
|
|
482
|
-
## CLI Troubleshooting
|
|
483
|
-
|
|
484
|
-
- **Claude delegate returns no output or fails quickly:** verify Claude auth on the host with:
|
|
485
|
-
- `claude auth status`
|
|
486
|
-
- If not logged in: `claude auth login` (or `claude setup-token`)
|
|
487
|
-
- **Claude delegate times out:** increase **Claude Code Timeout (sec)** in Settings.
|
|
488
|
-
- **Codex fails outside a git repo:** SwarmClaw now uses `--skip-git-repo-check`, but if login is missing run:
|
|
489
|
-
- `codex login`
|
|
490
|
-
- `codex login status`
|
|
491
|
-
- **CLI provider errors are now surfaced in chat:** non-zero exits and streamed error events are emitted as chat errors instead of failing silently.
|
|
492
|
-
|
|
493
|
-
## Voice & Heartbeat
|
|
494
|
-
|
|
495
|
-
Configure these in **Settings**:
|
|
496
|
-
|
|
497
|
-
- **Voice** — set `ElevenLabs API Key`, `ElevenLabs Voice ID`, and `Speech Recognition Language`. Outbound voice-note sends retry with the built-in fallback ElevenLabs voice when a saved default voice is rejected as paid-only.
|
|
498
|
-
- **Heartbeat** — set `Heartbeat Interval (Seconds)` and `Heartbeat Prompt` for ongoing chat pings
|
|
499
|
-
- **Global heartbeat safety** — use `Stop All Heartbeats` to disable heartbeat across all chats and cancel in-flight heartbeat runs.
|
|
500
|
-
|
|
501
|
-
Heartbeat pings are internal checks for ongoing chats. If there's no new status, the assistant returns `HEARTBEAT_OK`; otherwise it returns a concise progress update and next step. In chat UI, heartbeat entries render as compact expandable cards and consecutive heartbeat streaks are collapsed to the latest item.
|
|
502
|
-
The daemon health monitor also auto-disables heartbeat on chats that remain stale for an extended period.
|
|
503
|
-
|
|
504
|
-
## Embeddings & Hybrid Memory Search
|
|
505
|
-
|
|
506
|
-
Enable semantic search for agent memory by configuring an embedding provider in Settings:
|
|
507
|
-
|
|
508
|
-
- **Local (Free)** — runs `all-MiniLM-L6-v2` directly in Node.js via HuggingFace Transformers. No API key, no cost, works offline. Model downloads once (~23MB).
|
|
509
|
-
- **OpenAI** — uses `text-embedding-3-small` (requires API key)
|
|
510
|
-
- **Ollama** — uses local models like `nomic-embed-text`
|
|
511
|
-
|
|
512
|
-
When enabled, new memories get vector embeddings. Search uses both FTS5 keyword matching and cosine similarity, merging results for better recall.
|
|
513
|
-
|
|
514
|
-
## Model Failover
|
|
515
|
-
|
|
516
|
-
Agents and chats can have **fallback credentials**. If the primary API key gets a 401, 429, or 500 error, SwarmClaw automatically retries with the next credential. Configure fallback keys in the agent builder UI.
|
|
517
|
-
|
|
518
|
-
## Plugin System
|
|
519
|
-
|
|
520
|
-
SwarmClaw features a modular plugin system for agent capabilities, UI extensions, provider/connectors, and post-turn automation. It supports the native SwarmClaw hook/tool format and the **OpenClaw** register/activate formats.
|
|
521
|
-
|
|
522
|
-
Plugins can be managed in **Settings → Plugins** and installed via the Marketplace, HTTPS URL, or by dropping `.js` / `.mjs` files into `data/plugins/`.
|
|
523
|
-
|
|
524
|
-
Docs:
|
|
525
|
-
- Full docs: https://swarmclaw.ai/docs
|
|
526
|
-
- Plugin tutorial: https://swarmclaw.ai/docs/plugin-tutorial
|
|
527
|
-
|
|
528
|
-
### Extension Points
|
|
529
|
-
|
|
530
|
-
Unlike standard tool systems, SwarmClaw plugins can modify the application itself:
|
|
531
|
-
|
|
532
|
-
- **Agent Tools**: Define custom tools that agents can autonomously discover and use.
|
|
533
|
-
- **Lifecycle Hooks**: Intercept events like `beforeAgentStart`, `beforeToolExec`, `afterToolExec`, `afterChatTurn`, and `onMessage`.
|
|
534
|
-
- **UI Extensions**:
|
|
535
|
-
- `sidebarItems`: Inject new navigation links into the main sidebar.
|
|
536
|
-
- `headerWidgets`: Add status badges or indicators to the chat header (e.g., Wallet Balance).
|
|
537
|
-
- `chatInputActions`: Add custom action buttons next to the chat input (e.g., "Quick Scan").
|
|
538
|
-
- `plugin-ui` Messages: Render rich, interactive React cards in the chat stream.
|
|
539
|
-
- **Deep Chat Hooks**:
|
|
540
|
-
- `transformInboundMessage`: Modify user messages before they reach the agent runtime.
|
|
541
|
-
- `transformOutboundMessage`: Modify agent responses before they are persisted or displayed.
|
|
542
|
-
- `beforeToolExec`: Can rewrite tool input before the selected tool executes.
|
|
543
|
-
- **Custom Providers**: Add new LLM backends (e.g., a specialized local model or a new API).
|
|
544
|
-
- **Custom Connectors**: Build new chat platform bridges (e.g., a proprietary internal messenger).
|
|
545
|
-
- **Per-plugin Settings**: Declare `ui.settingsFields` and read/write them via `/api/plugins/settings`. Fields marked `type: 'secret'` are encrypted at rest.
|
|
546
|
-
|
|
547
|
-
### Canonical Plugin IDs
|
|
548
|
-
|
|
549
|
-
Built-in capabilities now resolve to a single canonical plugin family ID across agent configs, policy rules, approvals, and the Plugins UI. Legacy aliases still work, but the canonical IDs are what you should document and store going forward.
|
|
550
|
-
|
|
551
|
-
- `manage_sessions` instead of `session_info`
|
|
552
|
-
- `manage_connectors` instead of `connectors`
|
|
553
|
-
- `http_request` instead of `http`
|
|
554
|
-
- `spawn_subagent` instead of `subagent`
|
|
555
|
-
- `manage_chatrooms` instead of `chatroom`
|
|
556
|
-
- `schedule_wake` instead of `schedule`
|
|
557
|
-
|
|
558
|
-
### Autonomous Capability Discovery
|
|
559
|
-
|
|
560
|
-
Agents in SwarmClaw are "aware" of the plugin system. If an agent lacks a tool needed for a task, it can:
|
|
561
|
-
1. **Discover**: Scan the system for all installed plugins.
|
|
562
|
-
2. **Search Marketplace**: Autonomously search **ClawHub** and the **SwarmForge-backed first-party marketplace** for new capabilities.
|
|
563
|
-
3. **Request Access**: Prompt the user in-chat to enable a specific installed plugin.
|
|
564
|
-
4. **Install Request**: Suggest installing a new plugin from a marketplace URL to fill a capability gap (requires user approval).
|
|
565
|
-
|
|
566
|
-
### Example Plugin (SwarmClaw Format)
|
|
567
|
-
|
|
568
|
-
```js
|
|
569
|
-
module.exports = {
|
|
570
|
-
name: 'my-custom-extension',
|
|
571
|
-
ui: {
|
|
572
|
-
sidebarItems: [{ id: 'dashboard', label: 'My View', href: '/custom-view' }],
|
|
573
|
-
headerWidgets: [{ id: 'status', label: '🟢 Active' }]
|
|
574
|
-
},
|
|
575
|
-
tools: [{
|
|
576
|
-
name: 'custom_action',
|
|
577
|
-
description: 'Perform a specialized task',
|
|
578
|
-
parameters: { type: 'object', properties: { input: { type: 'string' } } },
|
|
579
|
-
execute: async (args) => {
|
|
580
|
-
// Logic here
|
|
581
|
-
return { kind: 'plugin-ui', text: 'Rich result card content' };
|
|
582
|
-
}
|
|
583
|
-
}]
|
|
584
|
-
};
|
|
585
|
-
```
|
|
586
|
-
|
|
587
|
-
Hook signatures of note:
|
|
588
|
-
|
|
589
|
-
- `beforeToolExec({ toolName, input })` may return a replacement input object.
|
|
590
|
-
- `afterToolExec({ session, toolName, input, output })` observes completed tool executions.
|
|
591
|
-
- `transformInboundMessage({ session, text })` and `transformOutboundMessage({ session, text })` run sequentially across enabled plugins.
|
|
592
|
-
|
|
593
|
-
### Building Plugins
|
|
594
|
-
|
|
595
|
-
The shortest reliable workflow for a new plugin:
|
|
596
|
-
|
|
597
|
-
1. Create a focused `.js` or `.mjs` file under `data/plugins/`.
|
|
598
|
-
2. Export `name`, `description`, any `hooks`, and optional `tools` / `ui.settingsFields`.
|
|
599
|
-
3. Keep tool outputs structured when the agent needs to chain them into later steps.
|
|
600
|
-
4. Use `settingsFields` for secrets or environment-specific values instead of hardcoding them.
|
|
601
|
-
5. If the plugin needs third-party npm packages, attach a `package.json` manifest so SwarmClaw can manage it in a per-plugin workspace.
|
|
602
|
-
6. Enable the plugin in **Settings → Plugins** and test both the tool path and any hook behavior.
|
|
603
|
-
7. If you host it remotely, install from a stable HTTPS URL so SwarmClaw can record source metadata and update it later.
|
|
604
|
-
|
|
605
|
-
A fuller step-by-step walkthrough lives at https://swarmclaw.ai/docs/plugin-tutorial.
|
|
606
|
-
|
|
607
|
-
### Lifecycle Management
|
|
608
|
-
|
|
609
|
-
- **Versioning**: All plugins support semantic versioning (e.g., `v1.2.3`).
|
|
610
|
-
- **Updates**: External plugins installed from a recorded source URL can be updated individually or in bulk via the Plugins manager. Built-ins update with the app release.
|
|
611
|
-
- **Hot Reload**: Changes inside `data/plugins/` invalidate the plugin registry automatically, and installs/updates trigger an immediate reload.
|
|
612
|
-
- **Plugin Workspaces**: Plugins with a manifest are managed under `data/plugins/.workspaces/<plugin>/`, and dependency installs can be triggered from the plugin detail sheet or `POST /api/plugins/dependencies`.
|
|
613
|
-
- **Stability Guardrails**: Consecutive plugin failures are tracked in `data/plugin-failures.json`; failing external plugins are auto-disabled, a warning notification is emitted in-app, and users can re-enable manually from the Plugins manager.
|
|
614
|
-
- **Source Metadata**: Marketplace/URL installs record the normalized source URL and source hash in `data/plugins.json`.
|
|
615
|
-
- **Settings Safety**: Plugin settings are validated against declared `settingsFields`; unknown keys are ignored and `secret` values are stored encrypted.
|
|
616
|
-
|
|
617
|
-
### Browser, Watch, and Delegation Upgrades
|
|
618
|
-
|
|
619
|
-
- **Persistent Browser Profiles**: The built-in `browser` plugin now keeps a reusable profile per chat/session, and subagents inherit the parent profile by default. Profiles live under `<swarmclaw-home>/browser-profiles` by default (`~/.swarmclaw/browser-profiles` for global installs, `<project>/.swarmclaw/browser-profiles` for local installs) unless you override `BROWSER_PROFILES_DIR`, so cookies, storage, and authenticated state survive longer-running work without polluting the project tree. Browser state is exposed at `GET /api/chats/[id]/browser`.
|
|
620
|
-
- **Higher-Level Browser Actions**: In addition to raw Playwright-style actions, `browser` supports workflow-oriented actions such as `read_page`, `extract_links`, `extract_form_fields`, `extract_table`, `fill_form`, `submit_form`, `scroll_until`, `download_file`, `complete_web_task`, `verify_text`, `verify_element`, `verify_list`, `verify_value`, `profile`, and `reset_profile`.
|
|
621
|
-
- **Structured Browser State**: Browser sessions persist recent observations, tabs, artifacts (screenshots / PDFs / downloads), current URL, and last errors in `browser_sessions`, which makes autonomous browser tasks easier to resume, inspect, and hand off across turns.
|
|
622
|
-
- **Durable Watches**: `schedule_wake` now uses persisted watch jobs instead of an in-memory timer, and `monitor_tool` supports `create_watch`, `list_watches`, `get_watch`, and `cancel_watch` across `time`, `http`, `file`, `task`, `webhook`, and `page` conditions. The same watch system also powers the new `mailbox`, session-mailbox, and approval waits used by human-loop flows. Watches support common checks like status/status sets, regex or text matches, content changes, existence checks, inbound mailbox correlation IDs, and webhook event filters.
|
|
623
|
-
- **Long-Running Delegation Handles**: `delegate` and `spawn_subagent` support handle-based flows instead of only synchronous final text. Use `background=true` or `waitForCompletion=false` to launch long-running work, then inspect or stop it with `action=status|list|wait|cancel`.
|
|
624
|
-
- **Delegation Job Persistence**: Delegate and subagent runs are recorded in `delegation_jobs` with checkpoints, backend/session metadata, resume IDs, child session IDs, and terminal-status recovery after daemon restarts. Late completions no longer overwrite cancelled jobs.
|
|
625
|
-
|
|
626
|
-
### New Primitive Plugins
|
|
627
|
-
|
|
628
|
-
- **Mailbox / Inbox Automation**: The built-in `mailbox` plugin adds IMAP/SMTP inbox access with `status`, `list_messages`, `list_threads`, `search_messages`, `read_message`, `download_attachment`, `reply`, and `wait_for_email`. It supports durable inbound-email waits and reuses plugin settings / connector config where possible. Configure it in **Settings → Plugins** with `imapHost`, `smtpHost`, `user`, `password`, and optional reply defaults.
|
|
629
|
-
- **Human-in-the-Loop Requests**: The built-in `ask_human` plugin provides `request_input`, `request_approval`, `wait_for_reply`, `wait_for_approval`, `list_mailbox`, `ack_mailbox`, and `status`. It is backed by session mailbox envelopes plus approval records so agents can pause and resume on real human responses instead of polling ad hoc state.
|
|
630
|
-
- **Document Parsing / OCR**: The built-in `document` plugin adds `read`, `metadata`, `ocr`, `extract_tables`, `store`, `list`, `search`, `get`, and `delete`. It uses the shared document extraction helpers for PDFs, Office docs, OCR-able images, HTML, CSV/TSV/XLSX, ZIP inspection, and plain text files.
|
|
631
|
-
- **Schema-Driven Extraction**: The built-in `extract` plugin adds `extract_structured` and `summarize`, using the current session model/provider to turn raw text or local files into validated JSON objects. This is the primitive to combine with browser / document / crawl output when an agent needs structured records instead of prose.
|
|
632
|
-
- **Tabular Data Operations**: The built-in `table` plugin adds `read`, `load_csv`, `load_xlsx`, `summarize`, `filter`, `sort`, `group`, `pivot`, `dedupe`, `join`, and `write`. It operates on CSV, TSV, JSON array-of-objects, or XLSX inputs without forcing agents to drop into shell or Python for basic spreadsheet work, and transformed tables can be persisted with `outputPath` / `saveTo`.
|
|
633
|
-
- **Multi-Page Crawling**: The built-in `crawl` plugin adds `crawl_site`, `follow_pagination`, `extract_sitemap`, `dedupe_pages`, and `batch_extract`. It handles BFS-style same-origin site traversal, accepts either a fresh start URL or an explicit page list, and can hand the aggregate page set directly into structured extraction for research-heavy autonomous tasks.
|
|
634
|
-
|
|
635
|
-
## Deploy to a VPS
|
|
636
|
-
|
|
637
|
-
### Direct (pm2 + Caddy)
|
|
638
|
-
|
|
639
|
-
```bash
|
|
640
|
-
# On your VPS
|
|
641
|
-
git clone https://github.com/swarmclawai/swarmclaw.git
|
|
642
|
-
cd swarmclaw
|
|
643
|
-
npm install
|
|
644
|
-
npm run build
|
|
645
|
-
|
|
646
|
-
# Run with pm2
|
|
647
|
-
sudo npm install -g pm2
|
|
648
|
-
pm2 start npm --name swarmclaw -- start
|
|
649
|
-
pm2 save && pm2 startup
|
|
650
|
-
```
|
|
651
|
-
|
|
652
|
-
Point a reverse proxy (Caddy or nginx) at `localhost:3456` for TLS. See the [full deployment guide](https://swarmclaw.ai/docs/deployment).
|
|
653
|
-
|
|
654
|
-
### Docker
|
|
655
|
-
|
|
656
|
-
```bash
|
|
657
|
-
git clone https://github.com/swarmclawai/swarmclaw.git
|
|
658
|
-
cd swarmclaw
|
|
659
|
-
docker compose up -d
|
|
660
|
-
```
|
|
661
|
-
|
|
662
|
-
Data is persisted in `data/` and `.env.local` via volume mounts. Updates: `git pull && docker compose up -d --build`.
|
|
663
|
-
In Docker deployments, local shell, browser, and `sandbox_exec` execution fall back to host execution inside the app container unless you separately provide Docker access to that container.
|
|
664
|
-
|
|
665
|
-
For prebuilt images (recommended for non-technical users after releases):
|
|
666
|
-
|
|
667
|
-
```bash
|
|
668
|
-
docker pull ghcr.io/swarmclawai/swarmclaw:latest
|
|
669
|
-
docker run -d \
|
|
670
|
-
--name swarmclaw \
|
|
671
|
-
-p 3456:3456 \
|
|
672
|
-
-v "$(pwd)/data:/app/data" \
|
|
673
|
-
-v "$(pwd)/.env.local:/app/.env.local" \
|
|
674
|
-
ghcr.io/swarmclawai/swarmclaw:latest
|
|
675
|
-
```
|
|
676
|
-
|
|
677
|
-
### Updating
|
|
678
|
-
|
|
679
|
-
SwarmClaw has a built-in update checker — a banner appears in the sidebar when new commits are available, with a one-click update button. Your data in `data/` and `.env.local` is never touched by updates.
|
|
680
|
-
|
|
681
|
-
For terminal users, run:
|
|
682
|
-
|
|
683
|
-
```bash
|
|
684
|
-
npm run update:easy
|
|
685
|
-
```
|
|
686
|
-
|
|
687
|
-
This command updates to the latest stable release tag when available (fallback: `origin/main`), installs dependencies when needed, and runs a production build check before restart.
|
|
688
|
-
|
|
689
|
-
## Development
|
|
690
|
-
|
|
691
|
-
```bash
|
|
692
|
-
npm run dev # Dev server on 0.0.0.0:3456
|
|
693
|
-
npm run dev:webpack # Fallback to webpack dev server (if Turbopack crashes)
|
|
694
|
-
npm run dev:clean # Clear .next cache then restart dev server
|
|
695
|
-
npm run build # Production build
|
|
696
|
-
npm run build:ci # CI build (skips ESLint; lint baseline runs separately)
|
|
697
|
-
npm run start # Start the standalone production server after build
|
|
698
|
-
npm run start:standalone # Alias for the standalone production server
|
|
699
|
-
npm run lint # ESLint
|
|
700
|
-
npm run lint:baseline # Fail only on net-new lint issues vs .eslint-baseline.json
|
|
701
|
-
npm run lint:baseline:update # Refresh lint baseline intentionally
|
|
702
|
-
```
|
|
703
|
-
|
|
704
|
-
The dev server binds to `0.0.0.0` so you can access it from your phone on the same network.
|
|
705
|
-
|
|
706
|
-
### Turbopack Panic Recovery
|
|
707
|
-
|
|
708
|
-
If you see a Turbopack panic like `Failed to lookup task type` or missing `.sst/.meta` files:
|
|
709
|
-
|
|
710
|
-
```bash
|
|
711
|
-
rm -rf .next
|
|
712
|
-
npm run dev:clean
|
|
713
|
-
```
|
|
714
|
-
|
|
715
|
-
If it still reproduces, use webpack mode:
|
|
716
|
-
|
|
717
|
-
```bash
|
|
718
|
-
npm run dev:webpack
|
|
719
|
-
```
|
|
720
|
-
|
|
721
|
-
### First-Run Helpers
|
|
722
|
-
|
|
723
|
-
```bash
|
|
724
|
-
npm run setup:easy # setup only (prepares sandbox/browser runtime when Docker is available; does not start server)
|
|
725
|
-
npm run quickstart # setup + start dev server
|
|
726
|
-
npm run quickstart:prod # setup + build + start production server
|
|
727
|
-
npm run update:easy # safe update helper for local installs
|
|
728
|
-
```
|
|
729
|
-
|
|
730
|
-
### Release Process (Maintainers)
|
|
731
|
-
|
|
732
|
-
SwarmClaw uses tag-based releases (`vX.Y.Z`) as the stable channel.
|
|
733
|
-
|
|
734
|
-
```bash
|
|
735
|
-
# example release
|
|
736
|
-
npm version patch
|
|
737
|
-
git push origin main --follow-tags
|
|
738
|
-
```
|
|
739
|
-
|
|
740
|
-
On `v*` tags, GitHub Actions will:
|
|
741
|
-
1. Run release gates (`npm run test:cli`, `npm run test:openclaw`, `npm run build:ci`)
|
|
742
|
-
2. Create a GitHub Release
|
|
743
|
-
3. Build and publish Docker images to `ghcr.io/swarmclawai/swarmclaw` (`:vX.Y.Z`, `:latest`, `:sha-*`)
|
|
744
|
-
|
|
745
|
-
#### v0.9.6 Release Readiness Notes
|
|
746
|
-
|
|
747
|
-
Before shipping `v0.9.6`, confirm the following user-facing changes are reflected in docs:
|
|
748
|
-
|
|
749
|
-
1. Wallet docs explain the new global wallet approval override in Settings/Wallets, and note that per-wallet approval toggles remain stored but are ignored when the global switch is off.
|
|
750
|
-
2. Runtime/autonomy docs mention the continuation hardening for long-running tasks: intent-only kickoff replies now get one bounded followthrough, and chat-originated progress runs can schedule a bounded main-loop continuation without waiting for another user ping.
|
|
751
|
-
3. Skills/runtime docs still explain that local skills are discoverable by default, pinned skills stay always-on, and `use_skill` is the runtime path for selection/loading/dispatch.
|
|
752
|
-
4. Site and README install/version strings are updated to `v0.9.6`, including release notes index text and any pinned install snippets.
|
|
753
|
-
5. The release tag, npm package version, and generated GitHub release install snippet all agree on the non-prefixed npm version (`0.9.6`) versus the git tag (`v0.9.6`).
|
|
754
|
-
|
|
755
|
-
## CLI
|
|
756
|
-
|
|
757
|
-
SwarmClaw ships a built-in CLI for setup and day-to-day operations.
|
|
758
|
-
|
|
759
|
-
```bash
|
|
760
|
-
# show command help
|
|
761
|
-
npm run cli -- --help
|
|
762
|
-
|
|
763
|
-
# or run the executable directly
|
|
764
|
-
node ./bin/swarmclaw.js --help
|
|
765
|
-
```
|
|
766
|
-
|
|
767
|
-
Primary groups:
|
|
768
|
-
- `chats` (canonical)
|
|
769
|
-
- `tasks`
|
|
770
|
-
- `schedules`
|
|
771
|
-
- `chatrooms`
|
|
772
|
-
- `connectors`
|
|
773
|
-
- `memory`
|
|
774
|
-
- `setup`
|
|
775
|
-
|
|
776
|
-
Legacy note: some compatibility paths still accept `sessions`, but `chats` is the canonical command group.
|
|
777
|
-
|
|
778
|
-
Quick examples:
|
|
779
|
-
|
|
780
|
-
```bash
|
|
781
|
-
# list agents
|
|
782
|
-
swarmclaw agents list
|
|
783
|
-
|
|
784
|
-
# create and inspect a chat
|
|
785
|
-
swarmclaw chats create --name "Main Ops" --agent-id <agentId>
|
|
786
|
-
swarmclaw chats list
|
|
787
|
-
|
|
788
|
-
# run setup diagnostics
|
|
789
|
-
swarmclaw setup doctor
|
|
790
|
-
```
|
|
86
|
+
## Requirements
|
|
791
87
|
|
|
792
|
-
|
|
793
|
-
-
|
|
88
|
+
- Node.js 22.6+
|
|
89
|
+
- npm 10+ or another supported package manager
|
|
90
|
+
- Docker Desktop is recommended for sandbox/browser execution
|
|
91
|
+
- Optional provider CLIs if you want delegated CLI backends such as Claude Code, Codex, OpenCode, or Gemini
|
|
794
92
|
|
|
795
|
-
##
|
|
93
|
+
## Security Notes
|
|
796
94
|
|
|
797
|
-
-
|
|
95
|
+
- First run creates an access key; keep it private.
|
|
96
|
+
- Do not expose port `3456` directly without a reverse proxy and TLS.
|
|
97
|
+
- Review agent prompts and enabled tools before granting shell, browser, wallet, or outbound capabilities.
|
|
98
|
+
- Wallet and outbound actions can be approval-gated globally.
|
|
798
99
|
|
|
799
|
-
##
|
|
100
|
+
## Learn More
|
|
800
101
|
|
|
801
|
-
|
|
102
|
+
- Getting started: https://swarmclaw.ai/docs/getting-started
|
|
103
|
+
- OpenClaw setup: https://swarmclaw.ai/docs/openclaw-setup
|
|
104
|
+
- Agents: https://swarmclaw.ai/docs/agents
|
|
105
|
+
- Orchestration: https://swarmclaw.ai/docs/orchestration
|
|
106
|
+
- Connectors: https://swarmclaw.ai/docs/connectors
|
|
107
|
+
- Plugins: https://swarmclaw.ai/docs/plugins
|
|
108
|
+
- CLI reference: https://swarmclaw.ai/docs/cli
|