Skip to content

C3PO Overview

C3PO is the operator tool for Espilon. It is a Qt6 desktop application (PySide6 + qasync) that combines a Management Protocol server with an operator UI: it receives agent connections, sends commands, compiles and injects modules, provisions new devices, and aggregates collected intelligence. There is no separate TUI or web dashboard; everything happens in one app.

What changed

Older documentation described a Textual TUI, a Flask dashboard, and a copland.py provisioning script. Those are gone. Provisioning is now the built-in Provision view, and the reverse tunnel is a module capability (mod_network), not a server feature. (Camera streaming is planned for a future version.)

Feature overview

Feature Description
Encrypted C2 ChaCha20-Poly1305 AEAD with per-device keys derived via HKDF-SHA256, protobuf framing over TCP :2626
Fleet management Live grid of connected agents with status, chip, IP, and loaded modules
Module injection Compile a C module, sign it with the device key, and inject it over the wire
Data aggregation WiFi / BLE / Network intelligence tables populated automatically from module output
Keystore Manage per-device keys (keys.json) without editing files by hand
Provisioning Build, key, and flash a new device, then register it

Architecture

flowchart TB
    subgraph C3PO["C3PO (Qt6 + asyncio)"]
        UI["Six views + global console"]
        SRV["C2Server (asyncio TCP :2626)"]
        KS["Keystore (keys.json)"]
        MC["Module compiler / signer / injector"]
        PV["Provisioner (build + NVS + flash)"]
        UI <--> SRV
        SRV --> KS
        UI --> MC
        UI --> PV
    end
    SRV -->|"ChaCha20-Poly1305 + protobuf"| FLEET["ESP32 fleet"]
    MC -->|"signed ELF (mod_chunk + mod_load)"| FLEET
    PV -->|"esptool flash"| FLEET

The C2 layer (c3po/c2/) is fully decoupled from the UI: it communicates only through Qt signals (C2Events) and never imports the app/ package.

The six views

View Purpose
Fleet Card grid of all connected agents
Device Operate a single agent: loaded modules, log, command bar
Modules Browse the catalog and inject modules
Data Aggregated WiFi / BLE / Network tables with CSV export
Keystore Manage device keys
Provision Flash and register a new device

See Operator interface for the full tour.

Where to go next