Overview
What a Venna node is, the two node types, and the pair → serve → earn lifecycle.
A node runs inference for Venna: the gateway meters each
request and hands it to a node, which generates the response and earns for the tokens it
serves. Both node types are wire-identical — they sign with an Ed25519 device identity,
heartbeat, and stream the same chunk / done / error frames.
Node types
- Local — serves a GGUF model on your own GPU or Apple Silicon via llama.cpp (Metal, CUDA, ROCm, or CPU). Set it up through the node CLI wizard: probe hardware → pick a model → pair → serve.
- Proxy — holds no weights; a headless Rust daemon that relays each job to an external provider (DeepSeek, OpenAI, Mistral, Gemma) and translates the response back. One provider per instance, no GPU, no inbound ports.
Pair → serve → earn
Pair
The node prints a user code and URL (RFC 8628 device flow); confirm in the browser to bind its device identity to your operator account.
Serve
The node connects outbound to the gateway over WebSocket, advertises its models and capabilities, and waits for jobs — no inbound ports to open.
Earn
Each completed job reports usage; earnings attribute server-side to your device identity and tick up on a live dashboard.
Keep your device identity
The device identity lives under ~/.venna/ and must survive restarts (mount a volume under
Docker). Lose it and the node re-pairs as a new identity, forfeiting its earnings.
Requirements
Hardware and OS prerequisites for local and proxy nodes.
Run a node
Pair, serve, and earn from the node CLI.
Desktop launcher — coming soon
A desktop launcher will set up a node without the CLI. It is not released yet, so the download is disabled: