openvole 0.1.0 → 0.2.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/README.md ADDED
@@ -0,0 +1,379 @@
1
+ # OpenVole
2
+
3
+ **Micro-agent core. The smallest possible thing that other useful things can be built on top of.**
4
+
5
+ [![npm](https://img.shields.io/npm/v/openvole)](https://www.npmjs.com/package/openvole)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
7
+
8
+ ---
9
+
10
+ ## What is OpenVole?
11
+
12
+ OpenVole is a **microkernel AI agent framework**. It provides the agent loop and the plugin contract — nothing else. Everything useful (reasoning, memory, tools, channels, integrations) is a **Paw** or a **Skill** built by the community.
13
+
14
+ A fresh OpenVole installation has zero tools, zero skills, zero opinions. This is by design.
15
+
16
+ ## Quick Start
17
+
18
+ ```bash
19
+ mkdir my-agent && cd my-agent
20
+ npm init -y
21
+ npm install openvole @openvole/paw-ollama @openvole/paw-memory @openvole/paw-dashboard
22
+ npx vole init
23
+ ```
24
+
25
+ Edit `vole.config.json`:
26
+
27
+ ```json
28
+ {
29
+ "brain": "@openvole/paw-ollama",
30
+ "paws": [
31
+ {
32
+ "name": "@openvole/paw-ollama",
33
+ "allow": {
34
+ "network": ["127.0.0.1"],
35
+ "env": ["OLLAMA_HOST", "OLLAMA_MODEL"]
36
+ }
37
+ },
38
+ {
39
+ "name": "@openvole/paw-memory",
40
+ "allow": { "env": ["VOLE_MEMORY_DIR"] }
41
+ },
42
+ {
43
+ "name": "@openvole/paw-dashboard",
44
+ "allow": { "listen": [3001], "env": ["VOLE_DASHBOARD_PORT"] }
45
+ }
46
+ ],
47
+ "skills": [],
48
+ "loop": { "maxIterations": 10, "logLevel": "info" }
49
+ }
50
+ ```
51
+
52
+ Create `.env`:
53
+
54
+ ```
55
+ OLLAMA_HOST=http://localhost:11434
56
+ OLLAMA_MODEL=qwen3:latest
57
+ ```
58
+
59
+ Run:
60
+
61
+ ```bash
62
+ npx vole start
63
+ ```
64
+
65
+ Or use a preset:
66
+
67
+ ```bash
68
+ # Basic (Brain + Memory + Dashboard)
69
+ curl -fsSL https://raw.githubusercontent.com/openvole/openvole/main/presets/basic.sh | bash
70
+
71
+ # With Telegram
72
+ curl -fsSL https://raw.githubusercontent.com/openvole/openvole/main/presets/telegram.sh | bash
73
+
74
+ # Everything
75
+ curl -fsSL https://raw.githubusercontent.com/openvole/openvole/main/presets/full.sh | bash
76
+ ```
77
+
78
+ ## Architecture
79
+
80
+ ```
81
+ vole start (CLI)
82
+ readline prompt (vole>)
83
+ |
84
+ v
85
+ ┌─────────────────────────────────────────────────────────────┐
86
+ │ VoleEngine │
87
+ │ │
88
+ │ Tool Registry ──── Skill Registry ──── Paw Registry │
89
+ │ | | | │
90
+ │ ┌────────────────────────────────────────────────┐ │
91
+ │ │ Agent Loop (per task) │ │
92
+ │ │ │ │
93
+ │ │ PERCEIVE ─── THINK ─── ACT ─── OBSERVE │ │
94
+ │ │ | | | | │ │
95
+ │ │ Enrich Brain Execute Process │ │
96
+ │ │ context plans tools results │ │
97
+ │ │ │ │
98
+ │ └─────────────────────────────────────────────────┘ │
99
+ │ │
100
+ │ Task Queue ──── Scheduler ──── Message Bus │
101
+ │ │
102
+ └──────┬──────────┬──────────┬──────────┬──────────────────────┘
103
+ | | | |
104
+ [Brain Paw] [Channel] [Tools] [In-Process]
105
+ Ollama Telegram Browser Compact
106
+ Claude Slack Shell Memory
107
+ OpenAI Discord MCP
108
+ Gemini WhatsApp Email/GitHub/Calendar
109
+ ```
110
+
111
+ 19 official Paws: 4 Brain, 4 Channel, 7 Tool, 4 Infrastructure.
112
+
113
+ ## Core Concepts
114
+
115
+ ### The Agent Loop
116
+
117
+ The only thing OpenVole does natively:
118
+
119
+ ```
120
+ Perceive → Think → Act → Observe → loop
121
+ ```
122
+
123
+ | Phase | What happens |
124
+ |-------|-------------|
125
+ | **Perceive** | Paws inject context (memory, time, calendar) |
126
+ | **Think** | Brain Paw calls the LLM, returns a plan |
127
+ | **Act** | Core executes tool calls from the plan |
128
+ | **Observe** | Paws process results (log, update memory, notify) |
129
+
130
+ ### Paws
131
+
132
+ **Paws are tool providers.** They connect OpenVole to the outside world — APIs, databases, browsers, messaging platforms. Each Paw runs in an isolated subprocess with capability-based permissions.
133
+
134
+ ```bash
135
+ npm install @openvole/paw-telegram
136
+ ```
137
+
138
+ ### Skills
139
+
140
+ **Skills are behavioral recipes.** A skill is a folder with a `SKILL.md` file — no code, no build step. Compatible with [ClawHub](https://clawhub.ai) (13,000+ skills).
141
+
142
+ ```bash
143
+ npx vole clawhub install summarize
144
+ ```
145
+
146
+ ```markdown
147
+ ---
148
+ name: summarize
149
+ description: "Summarize text, articles, or documents"
150
+ ---
151
+ When asked to summarize content:
152
+ 1. Identify the key points
153
+ 2. Condense into 3-5 bullet points
154
+ ...
155
+ ```
156
+
157
+ ### Brain Paw
158
+
159
+ The Brain is a Paw — the core is LLM-ignorant. Swap models by swapping Brain Paws:
160
+
161
+ - `@openvole/paw-ollama` — local models via Ollama
162
+ - `@openvole/paw-claude` — Anthropic Claude models
163
+ - `@openvole/paw-openai` — OpenAI models
164
+ - `@openvole/paw-gemini` — Google Gemini models
165
+
166
+ ## Features
167
+
168
+ ### Built-in Core Tools
169
+
170
+ | Tool | Purpose |
171
+ |------|---------|
172
+ | `schedule_task` | Brain creates recurring tasks at runtime |
173
+ | `cancel_schedule` / `list_schedules` | Manage schedules (persistent across restarts) |
174
+ | `skill_read` | Load skill instructions on demand |
175
+ | `skill_read_reference` / `skill_list_files` | Access skill resources |
176
+ | `heartbeat_read` / `heartbeat_write` | Manage recurring jobs |
177
+ | `workspace_write` / `workspace_read` | Read/write files in agent scratch space |
178
+ | `workspace_list` / `workspace_delete` | List/delete workspace files |
179
+ | `vault_store` | Store a secret (write-once, with optional metadata) |
180
+ | `vault_get` / `vault_list` / `vault_delete` | Retrieve, list, or delete vault entries |
181
+ | `web_fetch` | Lightweight URL fetching (GET/POST with headers, body) |
182
+
183
+ ### Heartbeat
184
+
185
+ Periodic wake-up — the Brain checks `HEARTBEAT.md` and decides what to do. No user input needed.
186
+
187
+ ```json
188
+ { "heartbeat": { "enabled": true, "intervalMinutes": 30 } }
189
+ ```
190
+
191
+ ### Persistent Scheduling
192
+
193
+ Brain-created schedules are stored in `.openvole/schedules.json` and survive restarts. The heartbeat is recreated from config on each startup.
194
+
195
+ ### Memory (Source-Isolated)
196
+
197
+ Persistent memory with daily logs scoped by task source:
198
+
199
+ ```
200
+ .openvole/memory/
201
+ ├── MEMORY.md # Shared long-term facts
202
+ ├── user/ # CLI session logs
203
+ ├── paw/ # Telegram/Slack logs
204
+ └── heartbeat/ # Heartbeat logs
205
+ ```
206
+
207
+ ### Sessions
208
+
209
+ Conversation continuity across messages. Auto-expiring transcripts per session ID.
210
+
211
+ ### MCP Support
212
+
213
+ Bridge 1000+ MCP servers into the tool registry via `paw-mcp`. MCP tools appear alongside Paw tools — the Brain doesn't know the difference.
214
+
215
+ ### Rate Limiting
216
+
217
+ Prevent runaway costs with configurable limits on LLM calls, tool executions, and task enqueue rates.
218
+
219
+ ### Tool Profiles
220
+
221
+ Per-source tool filtering — restrict what Telegram users can trigger:
222
+
223
+ ```json
224
+ { "toolProfiles": { "paw": { "deny": ["shell_exec", "fs_write"] } } }
225
+ ```
226
+
227
+ ### Identity Files
228
+
229
+ Customize agent behavior with optional markdown files in `.openvole/`:
230
+
231
+ | File | Purpose |
232
+ |------|---------|
233
+ | `BRAIN.md` | Custom system prompt (overrides default) |
234
+ | `SOUL.md` | Agent personality and tone |
235
+ | `USER.md` | User profile and preferences |
236
+ | `AGENT.md` | Operating rules and constraints |
237
+
238
+ All Brain Paws (Ollama, Claude, OpenAI, Gemini) load these on startup.
239
+
240
+ ### Workspace
241
+
242
+ Agent scratch space at `.openvole/workspace/` — for files, drafts, API docs, downloaded content. Path traversal protected. Tools: `workspace_write`, `workspace_read`, `workspace_list`, `workspace_delete`.
243
+
244
+ ### Vault
245
+
246
+ Encrypted key-value store at `.openvole/vault.json`:
247
+
248
+ - **AES-256-GCM encryption** when `VOLE_VAULT_KEY` is set
249
+ - **Write-once semantics** — prevents hallucination overwrites
250
+ - **Metadata support** — attach service, handle, URL context to entries
251
+ - `vault_list` never exposes values
252
+
253
+ ### Web Fetch
254
+
255
+ Lightweight URL fetching via the `web_fetch` core tool — GET/POST with custom headers and body. No browser Paw needed for simple HTTP requests.
256
+
257
+ ### Context Compaction
258
+
259
+ When context grows too large, `paw-compact` summarizes old messages while preserving recent context. No LLM needed — pure extraction.
260
+
261
+ ### Dashboard
262
+
263
+ Real-time web UI at `localhost:3001` — paws, tools, skills, tasks, schedules, live events.
264
+
265
+ ## Official Paws (19)
266
+
267
+ All paws live in [PawHub](https://github.com/openvole/pawhub) and are installed via npm.
268
+
269
+ ### Brain (4)
270
+
271
+ | Paw | Purpose |
272
+ |-----|---------|
273
+ | `paw-ollama` | Local LLM via Ollama |
274
+ | `paw-claude` | Anthropic Claude models |
275
+ | `paw-openai` | OpenAI models |
276
+ | `paw-gemini` | Google Gemini models |
277
+
278
+ ### Channel (4)
279
+
280
+ | Paw | Purpose |
281
+ |-----|---------|
282
+ | `paw-telegram` | Telegram bot channel |
283
+ | `paw-slack` | Slack bot channel |
284
+ | `paw-discord` | Discord bot channel |
285
+ | `paw-whatsapp` | WhatsApp bot channel |
286
+
287
+ ### Tool (7)
288
+
289
+ | Paw | Purpose |
290
+ |-----|---------|
291
+ | `paw-browser` | Browser automation (Puppeteer) |
292
+ | `paw-shell` | Shell command execution |
293
+ | `paw-filesystem` | File system operations |
294
+ | `paw-mcp` | MCP server bridge |
295
+ | `paw-email` | Email sending |
296
+ | `paw-github` | GitHub integration |
297
+ | `paw-calendar` | Calendar integration |
298
+
299
+ ### Infrastructure (4)
300
+
301
+ | Paw | Purpose |
302
+ |-----|---------|
303
+ | `paw-memory` | Persistent memory with source isolation |
304
+ | `paw-session` | Session/conversation management |
305
+ | `paw-compact` | Context compaction (in-process) |
306
+ | `paw-dashboard` | Real-time web dashboard |
307
+
308
+ Install from npm:
309
+
310
+ ```bash
311
+ npm install @openvole/paw-telegram @openvole/paw-browser
312
+ ```
313
+
314
+ ## CLI
315
+
316
+ ```bash
317
+ npx vole init # Initialize project
318
+ npx vole start # Start agent (interactive)
319
+ npx vole run "summarize my emails" # Single task
320
+
321
+ npx vole paw add @openvole/paw-telegram # Install a Paw
322
+ npx vole paw list # List loaded Paws
323
+
324
+ npx vole skill create email-triage # Create a local skill
325
+ npx vole clawhub install summarize # Install from ClawHub
326
+ npx vole clawhub search email # Search ClawHub
327
+
328
+ npx vole tool list # List all tools
329
+ npx vole tool call list_schedules # Call a tool directly (no Brain)
330
+ ```
331
+
332
+ ## Security
333
+
334
+ | Concern | Approach |
335
+ |---------|----------|
336
+ | Paw isolation | Subprocess sandbox — Paws can't escape |
337
+ | Credentials | Each Paw owns its secrets — core never sees them |
338
+ | Runaway agent | maxIterations + rate limiting + confirmBeforeAct |
339
+ | Channel safety | Tool profiles restrict tools per task source |
340
+ | Permissions | Intersection of manifest requests and config grants |
341
+ | Filesystem sandbox | `sandboxFilesystem` + `allowedPaths` restrict file access |
342
+
343
+ ```json
344
+ { "security": { "sandboxFilesystem": true, "allowedPaths": ["/home/user/projects"] } }
345
+ ```
346
+
347
+ ## Configuration
348
+
349
+ Single `vole.config.json` — plain JSON, no imports:
350
+
351
+ ```json
352
+ {
353
+ "brain": "@openvole/paw-ollama",
354
+ "paws": ["@openvole/paw-ollama", "@openvole/paw-memory"],
355
+ "skills": ["clawhub/summarize"],
356
+ "loop": { "maxIterations": 10, "logLevel": "info" },
357
+ "heartbeat": { "enabled": false, "intervalMinutes": 30 },
358
+ "toolProfiles": { "paw": { "deny": ["shell_exec"] } }
359
+ }
360
+ ```
361
+
362
+ ## OpenClaw Compatibility
363
+
364
+ OpenVole loads [OpenClaw](https://openclaw.ai) skills natively — same `SKILL.md` format, same `metadata.openclaw.requires` fields. Install directly from [ClawHub](https://clawhub.ai):
365
+
366
+ ```bash
367
+ npx vole clawhub install summarize
368
+ ```
369
+
370
+ ## Philosophy
371
+
372
+ > **If it connects to something, it's a Paw.**
373
+ > **If it describes behavior, it's a Skill.**
374
+ > **If the agent calls it, it's a Tool.**
375
+ > **If it's none of these, it probably doesn't belong in OpenVole.**
376
+
377
+ ## License
378
+
379
+ [MIT](LICENSE)