Extensions
Extensions add tools, widgets, and integrations to Omegon without modifying the core binary. They run as separate processes, communicate via JSON-RPC 2.0 over stdio, and are crash-isolated from Omegon. Process separation is not a security sandbox: native and current OCI extensions execute trusted code.
Install an extension
omegon extension install <git-url-or-local-path>Git URLs are cloned and built automatically when they contain a Rust project. Local bundles are copied into Omegon's guarded extension root; rebuilding the original checkout does not update the installed copy. Registry entries can be discovered withomegon extension list --available and omegon extension search <query>.
Trust extension code
Installation and enablement do not authorize code execution. Add the stable contribution ID to the project or user profile only after reviewing the extension. Omegon binds each runtime admission to the discovered source snapshot and denies spawn if those bytes change before execution. The profile grant remains identity-based across updates, so review newly installed bytes even when the ID is already trusted.
{
"permissions": {
"trustedContributionCode": ["extension:my-extension"]
}
}trustedDirectories controls workspace file access and does not trust extension code. Requesting OCI execution also does not prove confinement; the current extension container path still requires explicit trusted-code admission.
Readiness and lifecycle
Native extensions, MCP servers, and executable manifests first enter one metadata-only inventory. Static discovery captures identity and a source digest without evaluating Pkl, spawning or connecting, resolving secrets, or publishing tools. After trust admission, a candidate remains unavailable while one absolute manifest deadline covers initialization, tool discovery, configuration, and secret delivery. Omegon publishes a new composition generation only after the complete graph passes readiness and parity checks; failure preserves the previously accepted graph.
Transport failures consume a fixed generation-local restart budget with capped backoff. Exhaustion places the extension in terminal quarantine instead of spawning indefinitely. Host-owned Unix native process groups can report strict cleanup; OCI and other unowned boundaries report best-effort cleanup. One generation owner performs rollback and shutdown across extension, MCP, and manifest adapters. Use /status to inspect composition, health, quarantine diagnostics, cleanup assurance, and compatibility-dispatch parity.
Invocation and HostActions
Extension tools and generic ACP extension calls execute through generation-bound leases. Generic ACP calls use one conservative extension-owned transport capability because current manifests do not declare effects per RPC method; Omegon does not infer read-only or mutating safety from method names. Ambiguous transport loss after dispatch becomes unknown completion, not an automatic replay.
Lease-less imperative HostActions are denied. A declarative HostAction requires a live parent invocation, effects contained by that parent's admitted effects, and an exactly-once child identity. Operator approval cannot replace missing project/runtime policy, trusted-origin, or parent authority.
Available Extensions
Vox — Communication Connector
Unified interface for email, Signal, Slack, Discord, and more. Inbound messages arrive as agent prompts; replies route back to the originating channel.
omegon extension install https://github.com/styrene-lab/vox.git| Tool | Description |
|---|---|
vox_reply | Reply to an inbound message |
vox_send | Send a new outbound message |
vox_channels | List channels and connection status |
Connectors: Discord, Slack, Signal, Email (IMAP/SMTP), LXMF (experimental).
GitHub →
Scry — Local Image Generation
Text-to-image, image-to-image, and upscaling using local diffusion models (FLUX, SDXL, SD1.5). All inference runs on-device via ComfyUI — no external API calls.
omegon extension install https://github.com/styrene-lab/scry.git| Tool | Description |
|---|---|
generate | Text-to-image generation |
refine | Image-to-image transformation |
upscale | Super-resolution (2x/4x) |
list_models | Discover locally available models |
search_models | Search HuggingFace Hub / CivitAI |
download_model | Download a model |
Widgets: Gallery, Preview, Models.
GitHub →
Managing extensions
# List installed extensions
omegon extension list
# List available registry extensions
omegon extension list --available
# Search registry extensions
omegon extension search communication
# Update all extensions
omegon extension update
# Publish compatible changed generations while the session is idle
/extension refresh
# Remove an extension
omegon extension remove voxRefresh stages changed installed bytes as hidden candidates and publishes them only at a quiescent session boundary. Existing calls continue on the active generation until commit; stale generation-bound handles fail before RPC afterward. Extensions with widget or voice side channels still require /runtime restart.
Building your own
Extensions are Rust binaries built against the omegon-extensionSDK crate. Scaffold a new one with:
omegon extension init my-extensionSee the standalone Extension SDK repositoryfor the protocol API and thehost runtime guidefor trust, lifecycle, cleanup, and diagnostics.