1 Capabilities Reference
jfabian edited this page 2026-08-13 11:15:47 -03:00

Capabilities Reference

Current capability inventory for VOX v0.5.4. Each capability lives in its own directory under src/vox/capabilities/<ns>/<name>/ with capability.py, capability.yml, and any supporting modules (models.py, client.py, …).

Capabilities are mounted per agent as VOXBoundCapability proxies. The agent stores them in self.agent.capabilities[cap_id] (e.g. self.agent.capabilities["ai.llm"]), not as cap_* attributes.

Inventory

ID Module Provides
ai.llm vox/capabilities/ai/llm/ Unified local/cloud LLM inference: text generation, chat completion, vision inference; semantic cache, prompt sanitization, RAG context injection, complexity-based routing (LLMCapability)
comm.email vox/capabilities/comm/email/ Async SMTP email dispatch; exposes send_email command; SMTP_USER/SMTP_PASS are SENSITIVE_PARAMS
comm.gateway vox/capabilities/comm/gateway/ Multi-channel messaging: inbound webhook ingestion + outbound delivery via adapters (Telegram, WhatsApp, generic webhook). See Comm Gateway
comm.voicetotext vox/capabilities/comm/voicetotext/ Local offline speech-to-text (faster-whisper) with language detection
net.browser vox/capabilities/net/browser/ Headless browser automation (page capture, analysis)

Note: comm.telegram (pre-v0.5.2) and sys.processes no longer exist as capabilities. Telegram messaging is provided by the comm.gateway Telegram adapter.

Configuration sentinels

In bound capability params:

  • None — required; the agent is flagged DEGRADED if missing.
  • "" (empty string) — unconfigured / feature inactive; the channel or feature is not mounted.

Optional credentials MUST default to "", never None. A None default on a system capability mounted on every agent (e.g. comm.gateway) degrades every agent that does not use the feature. WhatsApp credentials in particular default to "" so Telegram-only agents stay healthy.

How a capability is mounted

  1. Roles declare required capability IDs via REQUIRES (discovered by static AST analysis of the role files).
  2. The orchestrator registry provides the capability singleton.
  3. CapabilityBinder mounts it: cap.mount(agent, config) → bound proxy stored in agent.capabilities[cap_id].
  4. Vault secrets are injected for SENSITIVE_PARAMS.
  5. Required params are validated; missing ones degrade the agent.
  6. EXPOSED_COMMANDS are registered on the agent as invocable commands.