Five languages. One wire protocol.
The SDK is a thin convenience around a signed POST to /api/ingest.
Pick your language. If we don't have one yet, you can implement Cuitty support
in fifty lines following the wire-protocol page.
Send your first event
Same payload, every languageimport { createCuittyClient } from "@cuitty/sdk";
import { auditPlugin } from "@cuitty/sdk/plugins/audit";
const cuitty = createCuittyClient({
portalUrl: "https://app.cuitty.com",
projectId: process.env.CUITTY_PROJECT_ID!,
apiKey: process.env.CUITTY_API_KEY!,
});
cuitty.use(auditPlugin());
cuitty.start();
await cuitty.emit("audit", {
actor: "alice@example.com",
action: "secret.rotate",
resource: "stripe.live_key",
});
Live = compiled and tested against the real package. Preview = on the roadmap; the wire-protocol contract is final.
Module plugins
Append signed records to the audit chain. Includes before/after diffs.
Forward structured logs from any source. JSON-line ingestion.
Track deploys, releases, and rollbacks with health-check correlations.
Index repo metadata and feature flags as first-class events.
Findings only — never the secret material. Notarization-ready.
Configuration changes with diff payloads and rollback links.
Multi-cloud cost metrics streamed in. Daily aggregation.
CPU, memory, event-loop, GC. Service-level rollups.
Don't have a language? Use the wire protocol.
Cuitty's wire protocol is plain HTTP, plain JSON, and HMAC-SHA256. There's no proprietary framing, no required gRPC, no SDK gatekeeping. The protocol is the contract.
Read the wire protocol →