Skip to content

Commit 27bcd76

Browse files
committed
Update README.md: restructure content, expand feature details, and clarify examples
- Enhanced branding with design principles, updated CI badges, and new headers. - Refined feature overview with expanded descriptions of isolation and pipeline capabilities. - Streamlined examples: clarified configurations and added runtime backend explanations. - Removed outdated declarative spec section and reorganized Quick Start/demo sections.
1 parent 520bb5f commit 27bcd76

File tree

1 file changed

+44
-119
lines changed

1 file changed

+44
-119
lines changed

README.md

Lines changed: 44 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,54 @@
22
<img src="assets/logo/void-box.png" alt="void-box" width="200">
33
<h1>void-box</h1>
44
<p><strong>Composable agent runtime with hardware isolation</strong></p>
5-
<p><code>VoidBox = Agent(Skills) + Environment</code></p>
65

7-
<a href="https://github.com/the-void-ia/void-box/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/the-void-ia/void-box/ci.yml?branch=main&style=flat-square&label=CI" alt="CI"></a>
8-
<a href="https://github.com/the-void-ia/void-box/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue?style=flat-square" alt="License"></a>
6+
<p>
7+
<em>Design principle:</em> Skills are declared capabilities.<br>
8+
They execute inside isolated micro-VM boundaries — not shared processes.
9+
</p>
10+
11+
<p><code>VoidBox = Agent(Skills) + Isolation</code></p>
12+
13+
<!-- CI badge (official GitHub Actions badge) -->
14+
<a href="https://github.com/the-void-ia/void-box/actions/workflows/ci.yml">
15+
<img src="https://github.com/the-void-ia/void-box/actions/workflows/ci.yml/badge.svg?branch=master" alt="CI">
16+
</a>
17+
18+
<a href="https://github.com/the-void-ia/void-box/blob/main/LICENSE">
19+
<img src="https://img.shields.io/badge/license-Apache--2.0-blue?style=flat-square" alt="License">
20+
</a>
921
<img src="https://img.shields.io/badge/rust-1.83%2B-orange?style=flat-square&logo=rust" alt="Rust 1.83+">
1022
</div>
1123

1224
<br>
1325

1426
<p align="center">
1527
<a href="docs/architecture.md">Architecture</a> ·
16-
<a href="#quick-start">Getting Started</a> ·
28+
<a href="#quick-start">Quick Start</a> ·
1729
<a href="#observability">Observability</a>
1830
</p>
1931

20-
> [!NOTE]
21-
> **v0 preview** — Functional, 222+ tests passing, KVM + Ollama E2E verified. API may change.
32+
<p align="center">
33+
Local-first. Cloud-ready. Runs on any Linux host with <code>/dev/kvm</code>.
34+
</p>
35+
36+
> **Status:** v0 (early release). Production-ready architecture; APIs are still stabilizing.
37+
38+
---
2239

2340
## What You Get
2441

25-
- **Hardware isolation** — KVM micro-VMs, not containers. Fresh VM per agent.
26-
- **Skill-native** — Procedural knowledge (SKILL.md), MCP servers, CLI tools. Compatible with [skills.sh](https://skills.sh) ecosystem.
27-
- **Composable pipelines** — Sequential `.pipe()`, parallel `.fan_out()`, streaming output.
28-
- **Multi-LLM** — Claude, Ollama, or any OpenAI-compatible endpoint. Per-box model selection.
29-
- **Observability built-in** — OTLP traces/metrics, structured logs, guest telemetry via procfs.
30-
- **No root required** — Usermode SLIRP networking via smoltcp, no TAP devices.
42+
- **Hardware isolation** — KVM micro-VMs, not containers. Fresh micro-VM per stage.
43+
- **Policy-enforced execution** — Command allowlists, rlimits, seccomp-BPF, and controlled network egress.
44+
- **Skill-native** — Procedural knowledge (SKILL.md), MCP servers, and CLI tools provisioned into the sandbox.
45+
- **Composable pipelines** — Sequential `.pipe()`, parallel `.fan_out()`, streaming output with stage-level failure domains.
46+
- **Model backend options** — claude-code runtime using Claude (default) or Ollama.
47+
- **Observability built-in** — OTLP traces/metrics, structured logs, and guest telemetry via procfs.
48+
- **No root required** — Usermode SLIRP networking via smoltcp (no TAP devices).
49+
50+
Isolation is the primitive. Pipelines are compositions of bounded execution environments.
51+
52+
---
3153

3254
## Quick Start
3355

@@ -51,11 +73,11 @@ let hn_api = Skill::file("skills/hackernews-api.md")
5173
let reasoning = Skill::agent("claude-code")
5274
.description("Autonomous reasoning and code execution");
5375

54-
// VoidBox = Agent(Skills) + Environment
76+
// VoidBox = Agent(Skills) + Isolation
5577
let researcher = VoidBox::new("hn_researcher")
5678
.skill(hn_api)
5779
.skill(reasoning)
58-
.llm(LlmProvider::ollama("qwen3-coder"))
80+
.llm(LlmProvider::ollama("qwen3-coder")) // claude-code runtime using Ollama backend
5981
.memory_mb(1024)
6082
.network(true)
6183
.prompt("Analyze top HN stories for AI engineering trends")
@@ -69,61 +91,20 @@ let result = researcher.run(None).await?;
6991
println!("{}", result.claude_result.result_text);
7092
```
7193

72-
## Declarative Spec
73-
74-
```yaml
75-
api_version: v1
76-
kind: agent
77-
name: hn_researcher
78-
sandbox:
79-
memory_mb: 1024
80-
network: true
81-
llm:
82-
provider: ollama
83-
model: qwen3-coder
84-
agent:
85-
prompt: "Analyze top HN stories for AI engineering trends"
86-
skills:
87-
- "file:skills/hackernews-api.md"
88-
- "agent:claude-code"
89-
```
90-
91-
```bash
92-
voidbox run --file hackernews_agent.yaml
93-
```
94-
95-
## Pipeline Example
96-
97-
```rust
98-
use void_box::pipeline::Pipeline;
99-
100-
// Compose: sequential + parallel stages with streaming output
101-
let result = Pipeline::named("trading_analysis", data_box)
102-
.pipe(quant_box) // sequential
103-
.fan_out(vec![sentiment_box, risk_box]) // parallel: both get quant output
104-
.pipe(strategy_box) // sequential: gets merged results
105-
.run_streaming(|box_name, chunk| {
106-
eprint!("[{}] {}", box_name, String::from_utf8_lossy(&chunk.data));
107-
})
108-
.await?;
109-
110-
println!("Cost: ${:.4} | Tokens: {}in/{}out",
111-
result.total_cost_usd(),
112-
result.total_input_tokens(),
113-
result.total_output_tokens());
114-
```
115-
94+
---
11695
## Architecture
11796

11897
```
11998
┌─────────────────────────────────────────────┐
12099
│ Host │
121-
│ VoidBox / Pipeline / Daemon │
100+
│ VoidBox Engine / Pipeline Orchestrator │
101+
│ │
122102
│ ┌─────────────────────────────────────┐ │
123103
│ │ VMM (KVM) │ │
124104
│ │ vsock ←→ guest-agent (PID 1) │ │
125-
│ │ SLIRP ←→ eth0 (10.0.2.15) │ │
105+
│ │ SLIRP ←→ eth0 (10.0.2.15) │ │
126106
│ └─────────────────────────────────────┘ │
107+
│ │
127108
│ Seccomp-BPF │ OTLP export │
128109
└──────────────┼───────────────────────────────┘
129110
Hardware │ Isolation
@@ -132,30 +113,13 @@ println!("Cost: ${:.4} | Tokens: {}in/{}out",
132113
┌──────────────▼───────────────────────────────┐
133114
│ Guest VM (Linux) │
134115
│ guest-agent: auth, allowlist, rlimits │
135-
│ claude-code → Ollama / Claude API
136-
│ skills provisioned at ~/.claude/skills/
116+
│ claude-code runtime (Claude API or Ollama backend)
117+
│ skills provisioned into isolated runtime
137118
└───────────────────────────────────────────────┘
138119
```
139120

140121
See [docs/architecture.md](docs/architecture.md) for the full component diagram, wire protocol, and security model.
141122

142-
## Security Model
143-
144-
- **Session secret** — 32-byte random token (getrandom), injected via kernel cmdline, required for all vsock messages
145-
- **Seccomp-BPF** — Restricts VMM thread to minimum syscalls for KVM operation
146-
- **Command allowlist** — Guest-agent only executes approved binaries
147-
- **Resource limits** — setrlimit on guest processes (memory, open files, processes, file size)
148-
- **SLIRP rate limiting** — Max concurrent connections, CIDR deny list
149-
- **No root required** — Usermode networking via smoltcp, no TAP devices
150-
151-
## LLM Providers
152-
153-
| Provider | Config | Notes |
154-
|---|---|---|
155-
| **Claude** (default) | `ANTHROPIC_API_KEY` | Production quality |
156-
| **Ollama** | `LlmProvider::ollama("model")` | Local, any model. Guest reaches host via SLIRP gateway (10.0.2.2) |
157-
| **Custom** | `LlmProvider::custom(url)` | OpenRouter, vLLM, any OpenAI-compatible endpoint |
158-
159123
## Observability
160124

161125
- **OTLP traces** — Per-box spans, tool call events, pipeline-level trace
@@ -165,38 +129,6 @@ See [docs/architecture.md](docs/architecture.md) for the full component diagram,
165129

166130
Enable with `--features opentelemetry` and set `VOIDBOX_OTLP_ENDPOINT`.
167131

168-
## Project Structure
169-
170-
```
171-
void-box/ Main crate (VMM, sandbox, pipeline, skills, observability)
172-
src/
173-
agent_box.rs VoidBox: Agent(Skills) + Environment
174-
pipeline.rs Sequential + parallel composition
175-
skill.rs Skill types (MCP, CLI, file, remote, agent)
176-
llm.rs LLM provider configuration
177-
runtime.rs Spec file → execution
178-
vmm/ KVM micro-VM monitor
179-
sandbox/ Mock + local sandbox abstraction
180-
observe/ OpenTelemetry integration
181-
network/ SLIRP usermode networking (smoltcp)
182-
guest-agent/ PID 1 inside guest VMs (vsock, auth, rlimits)
183-
void-box-protocol/ Wire format types (host ↔ guest)
184-
claudio/ Mock claude-code for testing
185-
```
186-
187-
## Examples
188-
189-
| Example | Description |
190-
|---|---|
191-
| `quick_demo` | Two-stage analyst/strategist pipeline |
192-
| `trading_pipeline` | Four-stage sequential financial pipeline with local skills |
193-
| `parallel_pipeline` | Diamond topology with `fan_out`, per-box models, streaming |
194-
| `ollama_local` | Single box with local Ollama model |
195-
| `remote_skills` | Pulls skills from skills.sh repositories |
196-
| `claude_workflow` | Workflow plan/apply pattern |
197-
| `claude_in_voidbox_example` | Interactive Claude session in sandbox |
198-
| `boot_diag` | VM boot diagnostics |
199-
200132
## Running & Testing
201133

202134
### Mock mode (no KVM required)
@@ -251,14 +183,7 @@ VOID_BOX_INITRAMFS=/tmp/void-box-test-rootfs.cpio.gz \
251183
cargo test --test e2e_skill_pipeline -- --ignored --test-threads=1
252184
```
253185

254-
## Troubleshooting
255-
256-
**`/dev/kvm` permission denied** — Add your user to the `kvm` group and re-login.
257-
258-
**`Not logged in`** — Use `OLLAMA_MODEL=...` for local inference or set `ANTHROPIC_API_KEY`.
259-
260-
**Parallel stages timeout** — Use the same Ollama model for all parallel boxes, or increase `STAGE_TIMEOUT_SECS=600`.
261-
262186
## License
263187

264188
Apache-2.0 · [The Void Platform](https://github.com/the-void-ia)
189+

0 commit comments

Comments
 (0)