zubo 0.1.4 → 0.1.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/.dockerignore ADDED
@@ -0,0 +1,12 @@
1
+ node_modules
2
+ dist
3
+ desktop
4
+ site
5
+ .env
6
+ .env.*
7
+ .zubo
8
+ .git
9
+ .DS_Store
10
+ *.db
11
+ *.db-wal
12
+ *.db-shm
package/Dockerfile ADDED
@@ -0,0 +1,24 @@
1
+ # Zubo — Dockerfile
2
+ # Runs the Zubo AI agent using the official Bun runtime image.
3
+ # Persistent data (config, database, memory, skills) lives in /root/.zubo
4
+ # and should be mounted as a volume.
5
+
6
+ FROM oven/bun:1
7
+
8
+ WORKDIR /app
9
+
10
+ # Install dependencies first (layer cache optimisation)
11
+ COPY package.json bun.lock ./
12
+ RUN bun install --frozen-lockfile
13
+
14
+ # Copy the rest of the project
15
+ COPY . .
16
+
17
+ # Webchat dashboard port
18
+ EXPOSE 8787
19
+
20
+ # Persistent storage mount point — config.json, zubo.db, workspace, logs, etc.
21
+ VOLUME /root/.zubo
22
+
23
+ # Start the agent
24
+ CMD ["bun", "run", "src/index.ts", "start"]
@@ -0,0 +1,20 @@
1
+ # Zubo — Docker Compose
2
+ # Usage:
3
+ # 1. Copy .env.example to .env and fill in your API keys
4
+ # 2. docker compose up -d
5
+ # 3. Open http://localhost:8787 for the webchat dashboard
6
+
7
+ services:
8
+ zubo:
9
+ build: .
10
+ container_name: zubo
11
+ restart: unless-stopped
12
+
13
+ ports:
14
+ - "8787:8787" # Webchat dashboard
15
+
16
+ volumes:
17
+ - ~/.zubo:/root/.zubo # Persistent data (config, DB, memory, skills, logs)
18
+
19
+ env_file:
20
+ - .env # API keys: ANTHROPIC_API_KEY, OPENAI_API_KEY, TELEGRAM_BOT_TOKEN, etc.
@@ -0,0 +1,19 @@
1
+ CREATE TABLE IF NOT EXISTS webhooks (
2
+ id TEXT PRIMARY KEY,
3
+ name TEXT NOT NULL UNIQUE,
4
+ description TEXT,
5
+ secret TEXT,
6
+ active INTEGER NOT NULL DEFAULT 1,
7
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
8
+ );
9
+
10
+ CREATE TABLE IF NOT EXISTS webhook_events (
11
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
12
+ webhook_id TEXT NOT NULL REFERENCES webhooks(id) ON DELETE CASCADE,
13
+ payload TEXT NOT NULL,
14
+ headers TEXT,
15
+ processed INTEGER NOT NULL DEFAULT 0,
16
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
17
+ );
18
+
19
+ CREATE INDEX IF NOT EXISTS idx_webhook_events_webhook ON webhook_events(webhook_id);
@@ -0,0 +1,23 @@
1
+ CREATE TABLE IF NOT EXISTS kg_entities (
2
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
3
+ name TEXT NOT NULL,
4
+ type TEXT NOT NULL,
5
+ properties TEXT,
6
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
7
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
8
+ );
9
+
10
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_kg_entity_name_type ON kg_entities(name, type);
11
+
12
+ CREATE TABLE IF NOT EXISTS kg_relations (
13
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
14
+ source_id INTEGER NOT NULL REFERENCES kg_entities(id) ON DELETE CASCADE,
15
+ target_id INTEGER NOT NULL REFERENCES kg_entities(id) ON DELETE CASCADE,
16
+ relation TEXT NOT NULL,
17
+ properties TEXT,
18
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
19
+ );
20
+
21
+ CREATE INDEX IF NOT EXISTS idx_kg_rel_source ON kg_relations(source_id);
22
+ CREATE INDEX IF NOT EXISTS idx_kg_rel_target ON kg_relations(target_id);
23
+ CREATE INDEX IF NOT EXISTS idx_kg_rel_type ON kg_relations(relation);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "zubo",
3
- "version": "0.1.4",
4
- "description": "Your AI agent that never forgets. Persistent memory, 20+ tools, 6 channels, 11+ LLM providers — runs entirely on your machine.",
3
+ "version": "0.1.6",
4
+ "description": "Your AI agent that never forgets. Persistent memory, 25+ tools, 7 channels, 11+ LLM providers — runs entirely on your machine.",
5
5
  "license": "MIT",
6
6
  "author": "thomaskanze",
7
7
  "homepage": "https://zubo.bot",
@@ -4,18 +4,18 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Getting Started — Zubo Docs</title>
7
- <meta name="description" content="Get started with Zubo, a self-hosted AI agent with persistent semantic memory, multi-channel presence, 35+ tools, sub-agent delegation, and workflow automation.">
7
+ <meta name="description" content="Get started with Zubo, a self-hosted AI agent with persistent semantic memory, multi-channel presence, 25+ tools, sub-agent delegation, MCP support, and workflow automation.">
8
8
  <meta name="theme-color" content="#060608">
9
9
  <link rel="canonical" href="https://zubo.bot/docs/">
10
10
  <meta property="og:title" content="Getting Started — Zubo Docs">
11
- <meta property="og:description" content="Get started with Zubo, a self-hosted AI agent with persistent semantic memory, multi-channel presence, 35+ tools, sub-agent delegation, and workflow automation.">
11
+ <meta property="og:description" content="Get started with Zubo, a self-hosted AI agent with persistent semantic memory, multi-channel presence, 25+ tools, sub-agent delegation, MCP support, and workflow automation.">
12
12
  <meta property="og:type" content="article">
13
13
  <meta property="og:url" content="https://zubo.bot/docs/">
14
14
  <meta property="og:image" content="https://zubo.bot/og-image.png">
15
15
  <meta property="og:site_name" content="Zubo">
16
16
  <meta name="twitter:card" content="summary_large_image">
17
17
  <meta name="twitter:title" content="Getting Started — Zubo Docs">
18
- <meta name="twitter:description" content="Get started with Zubo, a self-hosted AI agent with persistent semantic memory, 35+ tools, and workflow automation.">
18
+ <meta name="twitter:description" content="Get started with Zubo, a self-hosted AI agent with persistent semantic memory, 25+ tools, MCP support, and workflow automation.">
19
19
  <meta name="twitter:image" content="https://zubo.bot/og-image.png">
20
20
  <meta name="twitter:creator" content="@thomaskanze">
21
21
  <link rel="preconnect" href="https://fonts.googleapis.com">
@@ -87,7 +87,7 @@
87
87
  <h1>Getting Started with Zubo</h1>
88
88
 
89
89
  <p>
90
- Zubo is a self-hosted AI agent with persistent semantic memory, multi-channel presence across Telegram, Discord, Slack, WhatsApp, Signal, and Web Chat, over 35 smart built-in tools, sub-agent delegation, and workflow automation. It runs entirely on your machine &mdash; your data never leaves your infrastructure. Whether you need a personal assistant that remembers everything, an automation hub that connects your services, or an AI copilot embedded in every chat platform you use, Zubo handles it from a single process with a single configuration file.
90
+ Zubo is a self-hosted AI agent with persistent semantic memory, multi-channel presence across Telegram, Discord, Slack, WhatsApp, Signal, Email, and Web Chat, 25+ smart built-in tools, MCP compatibility, sub-agent delegation, and workflow automation. It runs entirely on your machine &mdash; your data never leaves your infrastructure. Whether you need a personal assistant that remembers everything, an automation hub that connects your services, or an AI copilot embedded in every chat platform you use, Zubo handles it from a single process with a single configuration file.
91
91
  </p>
92
92
 
93
93
  <!-- ================================================================ -->
@@ -110,6 +110,7 @@
110
110
  <li><strong>Slack</strong> &mdash; app-level integration using Bot Token and App Token, with user allow-listing by Slack member ID.</li>
111
111
  <li><strong>WhatsApp</strong> &mdash; via the WhatsApp Web multi-device API, with phone number allow-listing.</li>
112
112
  <li><strong>Signal</strong> &mdash; via signal-cli, with phone number allow-listing.</li>
113
+ <li><strong>Email</strong> &mdash; bidirectional email channel via IMAP/SMTP. Zubo polls for new messages and replies automatically. Supports sender allow-listing and configurable polling intervals.</li>
113
114
  <li><strong>Web Chat</strong> &mdash; built-in web dashboard with real-time chat, served on a configurable port.</li>
114
115
  <li>All channels share the same memory, personality, tools, and conversation history. A fact learned in Telegram is immediately available in Discord.</li>
115
116
  </ul>
@@ -121,11 +122,15 @@
121
122
  <li><strong>Hybrid search</strong> that combines 60% vector similarity (cosine) with 40% FTS5 BM25 scoring for best-of-both-worlds recall.</li>
122
123
  <li><strong>Automatic chunking with overlap</strong> for long documents, ensuring context is preserved across chunk boundaries.</li>
123
124
  <li><strong>Document ingestion</strong> supporting PDF, DOCX, TXT, CSV, JSON, YAML, and common code file formats. Upload a document and Zubo indexes it into searchable memory automatically.</li>
125
+ <li><strong>Knowledge Graph</strong> &mdash; structured entity-relationship memory. The agent can store and query entities (people, projects, concepts, organizations) with typed relationships (works_at, knows, manages, part_of). Entity context is automatically injected into conversations when relevant names are mentioned.</li>
124
126
  </ul>
125
127
 
126
128
  <h3>Tools</h3>
127
129
  <ul>
128
- <li><strong>35+ built-in tools</strong> including shell command execution, file I/O (read, write, list, search), web search (DuckDuckGo, Brave, Google), HTTP requests, memory read/write/search, secrets management, and cron job scheduling.</li>
130
+ <li><strong>25+ built-in tools</strong> including shell command execution, file I/O (read, write, list, search), web search (DuckDuckGo, Brave, Google), HTTP requests, memory read/write/search, secrets management, cron job scheduling, code interpreter, image generation, knowledge graph, and webhook management.</li>
131
+ <li><strong>Code Interpreter</strong> &mdash; execute Python, JavaScript, or TypeScript code in a sandboxed subprocess with timeout enforcement and output capture. Runs code via Bun (JS/TS) or python3 (Python) with process isolation.</li>
132
+ <li><strong>Image Generation</strong> &mdash; generate images using DALL-E 3, fal.ai (Flux), or Together AI. Images are saved locally and served through the web dashboard. Supports custom sizes and styles.</li>
133
+ <li><strong>Webhooks</strong> &mdash; create webhook endpoints that receive events from external services (GitHub, Stripe, CI/CD). Supports HMAC signature verification (X-Hub-Signature-256). Events trigger agent actions automatically.</li>
129
134
  <li>Tools are permission-gated with three levels: <code>safe</code>, <code>sensitive</code>, and <code>dangerous</code>. Dangerous operations require explicit confirmation tokens.</li>
130
135
  </ul>
131
136
 
@@ -160,6 +165,14 @@
160
165
  <li><strong>Twitter</strong> &mdash; post tweets, read timelines.</li>
161
166
  </ul>
162
167
 
168
+ <h3>MCP (Model Context Protocol)</h3>
169
+ <ul>
170
+ <li><strong>Connect to external MCP servers</strong> and expose their tools alongside Zubo's built-in tools. Any MCP-compatible tool server works out of the box.</li>
171
+ <li><strong>JSON-RPC over stdio</strong> &mdash; each MCP server runs as a subprocess. Zubo handles the full protocol: initialization, tool discovery, and tool execution.</li>
172
+ <li><strong>Automatic tool registration</strong> &mdash; on boot, Zubo connects to each configured MCP server, discovers available tools, and registers them with a server-name prefix to avoid conflicts (e.g., <code>filesystem__read_file</code>).</li>
173
+ <li><strong>Configure in JSON</strong> &mdash; add MCP servers via the <code>mcp.servers</code> config array. Example: <code>{ "name": "filesystem", "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"] }</code></li>
174
+ </ul>
175
+
163
176
  <h3>Scheduling</h3>
164
177
  <ul>
165
178
  <li><strong>Natural language scheduling</strong> &mdash; describe schedules in plain English like &ldquo;every weekday at 9am&rdquo; or &ldquo;twice a day&rdquo;. Zubo parses natural language into cron expressions automatically.</li>
@@ -200,21 +213,69 @@
200
213
  <!-- ================================================================ -->
201
214
  <h2 id="installation">Installation</h2>
202
215
 
216
+ <p>Choose the installation method that fits your platform.</p>
217
+
218
+ <h3 id="install-mac-linux">macOS &amp; Linux</h3>
219
+
203
220
  <p>Zubo requires <strong>Bun v1.0+</strong> as its runtime. If you do not have Bun installed, visit <a href="https://bun.sh" target="_blank" rel="noopener">bun.sh</a> and run the one-line installer.</p>
204
221
 
205
- <h3>Step 1: Install Zubo</h3>
222
+ <p><strong>One-liner (recommended):</strong></p>
223
+
224
+ <pre><code>curl -fsSL https://zubo.bot/install.sh | bash</code></pre>
206
225
 
207
- <p>Install Zubo globally using Bun (recommended) or npm:</p>
226
+ <p>This installs Bun (if needed), installs Zubo globally, and runs the setup wizard automatically.</p>
227
+
228
+ <p><strong>Manual install:</strong></p>
208
229
 
209
230
  <pre><code># Using Bun (recommended)
210
231
  bun add -g zubo
211
232
 
212
233
  # Or using npm
213
- npm i -g zubo</code></pre>
234
+ npm i -g zubo
235
+
236
+ # Then run the setup wizard
237
+ zubo setup</code></pre>
238
+
239
+ <h3 id="install-windows">Windows (via WSL)</h3>
240
+
241
+ <p>Zubo runs on Windows through the Windows Subsystem for Linux (WSL). This gives you full compatibility with zero workarounds.</p>
242
+
243
+ <p><strong>Step 1:</strong> Install WSL (requires Windows 10 version 2004+ or Windows 11):</p>
244
+
245
+ <pre><code>wsl --install</code></pre>
246
+
247
+ <p>Restart your computer when prompted. This installs Ubuntu by default.</p>
248
+
249
+ <p><strong>Step 2:</strong> Open the Ubuntu terminal from the Start Menu and install Zubo:</p>
250
+
251
+ <pre><code>curl -fsSL https://zubo.bot/install.sh | bash</code></pre>
252
+
253
+ <p>That's it. Zubo runs inside WSL with full access to all features. The web dashboard is accessible from your Windows browser at <code>http://localhost:3000</code>.</p>
254
+
255
+ <h3 id="install-docker">Docker</h3>
256
+
257
+ <p>Run Zubo as a container with no local dependencies.</p>
258
+
259
+ <pre><code># Clone the repo
260
+ git clone https://github.com/apwn/zubo.git &amp;&amp; cd zubo
261
+
262
+ # Copy the example env and add your API key
263
+ cp .env.example .env
264
+
265
+ # Start Zubo
266
+ docker compose up -d</code></pre>
267
+
268
+ <p>The container exposes port <code>8787</code> for the web dashboard and mounts <code>~/.zubo</code> for persistent data. Stop with <code>docker compose down</code>.</p>
269
+
270
+ <p>To configure, edit <code>.env</code> or mount your own <code>config.json</code>:</p>
271
+
272
+ <pre><code>volumes:
273
+ - ~/.zubo:/root/.zubo
274
+ - ./my-config.json:/root/.zubo/config.json</code></pre>
214
275
 
215
- <p>This places the <code>zubo</code> binary on your PATH, making it available from any terminal session.</p>
276
+ <h3 id="setup-wizard">The Setup Wizard</h3>
216
277
 
217
- <h3>Step 2: Run the Setup Wizard</h3>
278
+ <p>After installing (on any platform), run the setup wizard:</p>
218
279
 
219
280
  <pre><code>zubo setup</code></pre>
220
281
 
@@ -228,7 +289,7 @@ npm i -g zubo</code></pre>
228
289
  <li>Create a default <code>SYSTEM.md</code> system prompt that you can customize later.</li>
229
290
  </ul>
230
291
 
231
- <h3>Step 3: Start Zubo</h3>
292
+ <h3 id="starting">Starting Zubo</h3>
232
293
 
233
294
  <pre><code># Start in foreground (logs to stdout)
234
295
  zubo start