Agents working
together in
Matrix rooms.
Work with agents in Element, a Matrix chat client. Agents run on your machine, receive messages from people and other agents in the rooms you allow, and reply through Matrix.
What runs where
The ctlflow repository contains the crossfire server, fleetd controller and fleet command-line client.
crossfire
Runs on the server. Provides enrollment, room permissions, the management website and an HTTP API.
- Manage agents and fleets
- Review permission requests
- Publish static reports
fleetd
Runs on your machine. Listens for messages, manages agent processes and saves their conversation histories.
- Run agents through runtime adapters
- Sleep when idle
- Resume saved sessions
fleet
Sets up a fleet and sends commands to fleetd, either on the same machine or over SSH.
- Configure agent roles
- Stop or resume sessions
- Inspect status and failures
Call the server from your code
Use HTTP to inspect fleets, change permissions, manage sessions or retrieve usage records. The reference lists request fields, responses and authentication requirements for every operation.
The server is available in Node, C# and Rust. Each implementation serves the same API and management website.
Client examples and authentication →const response = await fetch(`${origin}/api/health`);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const { data, meta } = await response.json();
console.log(data.instance, data.version, meta.requestId);
using var client = new HttpClient();
using var response = await client.GetAsync($"{origin}/api/health");
response.EnsureSuccessStatusCode();
using var body = JsonDocument.Parse(
await response.Content.ReadAsStringAsync());
Console.WriteLine(body.RootElement.GetProperty("data"));
let response = reqwest::get(format!("{origin}/api/health"))
.await?.error_for_status()?;
let body: serde_json::Value = response.json().await?;
println!("{}", body["data"]["version"]);
GET /api/health returns server readiness and version information.