Module opencode

Module opencode 

Source
Expand description

OpenCode Server integration for agent orchestration.

Provides HTTP client and SSE event streaming for OpenCode Server mode, enabling structured communication with agents instead of CLI subprocess spawning.

§Architecture

Instead of spawning one CLI process per agent, this module communicates with a single OpenCode server that manages multiple sessions:

SCUD Swarm ──HTTP──► OpenCode Server
                ◄─SSE── real-time events (tool calls, output, completion)

§Benefits

  • Lower overhead (single server vs N processes)
  • Structured events (tool calls, text deltas, completion)
  • Graceful cancellation via HTTP API
  • Real-time visibility into agent activity

§Example

use scud::opencode::{OpenCodeManager, global_manager};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let manager = global_manager();
    manager.ensure_running().await?;

    let session = manager.client().create_session("Task 1").await?;
    manager.client().send_message(&session.id, "Do something", None).await?;

    Ok(())
}

OpenCode Server integration

Provides HTTP client and SSE event streaming for OpenCode Server mode. This module enables SCUD to communicate with OpenCode’s headless server for agent orchestration with structured events and graceful cancellation.

§Architecture

SCUD Swarm ──HTTP──► OpenCode Server (localhost:4096)
                ◄─SSE── real-time events

§Usage

use scud::opencode::{OpenCodeClient, OpenCodeManager};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    // Get global manager (auto-starts server if needed)
    let manager = scud::opencode::global_manager();
    manager.ensure_running().await?;

    // Create session and send prompt
    let client = manager.client();
    let session = client.create_session("Task 1").await?;
    client.send_message(&session.id, "Implement feature X", None).await?;

    Ok(())
}

Re-exports§

pub use client::OpenCodeClient;
pub use events::EventStream;
pub use events::OpenCodeEvent;
pub use manager::global_manager;
pub use manager::init_global_manager;
pub use manager::OpenCodeManager;
pub use manager::ServerConfig;
pub use manager::DEFAULT_PORT;
pub use orchestrator::execute_wave_server;
pub use orchestrator::AgentHandle;
pub use orchestrator::AgentOrchestrator;
pub use types::*;

Modules§

client
HTTP client for OpenCode Server
events
SSE event streaming for OpenCode Server
manager
OpenCode Server lifecycle management
orchestrator
Agent orchestration via OpenCode Server
types
OpenCode Server API types