Agent traces in. Training data out.

Point anything that runs an agent at Magma, and watch it become training data.

Sign up, grant training consent, and connect wherever your traces live. Trajectories arrive normalized into one canonical schema, scrubbed of secrets before they ever touch disk, and graded honestly for training value. Export SFT, DPO, or raw datasets. Pause, revoke, or delete anything at any time.

Connect your traceslocal demo, with tenant-side export when needed

The core loop

  1. 01sign up and grant training consent
  2. 02pick where your traces live
  3. 03connect with env vars, a key, a read-only role, a container SAS, or the CLI
  4. 04trajectories appear normalized, scrubbed, graded
  5. 05export SFT, DPO, or raw JSONL
  6. 06pause, revoke, or delete anything at any time

Seven connectors, honestly graded

Every connector states what signal it captures and what it misses. The grade on every trajectory says the same. We never inflate: the same Claude Code session grades B over telemetry and A from the local transcript, and the product shows you why.

OTLP push

captures GenAI spans, Claude Code telemetry events, token usage, tool outcomes

misses Tool result content and system prompts on most emitters

Langfuse

captures Full generations with messages, scores as reward signal, tool spans

misses Signal quality depends on how instrumented your app is

Postgres

captures Whatever your schema stores, mapped column by column, read-only

misses Anything your app never wrote down, often tool schemas and outcomes

S3 bucket

captures Exported JSONL from LangSmith bulk export or your own pipelines

misses Parquet files in v1, and signal your exporter dropped

CLI upload

captures Complete Claude Code transcripts: every turn, tool call, result, thinking

misses Nothing material. This is the richest source we ingest

Gateway / SDKs

captures Langfuse-compatible ingestion: full messages, system prompts, scores from LiteLLM and SDK emitters

misses Signal the emitter never sends, and the grade says so

Azure Blob

captures Raw tenant-side LangGraph and Cosmos exports, parsed and scrubbed server-side

misses Unrecorded signal, binary rows awaiting parsing, and file contents beyond artifact references

LangSmith

Served through the S3 connector: their bulk export writes JSONL to your bucket, we ingest it from there. Documented in the S3 wizard.

The posture

Scrubbed before disk

Secrets and PII are redacted inside the single write path. Nothing unscrubbed is ever persisted, including staging tables. The CLI scrubs locally before upload.

Consent is a hard gate

No source can be created and no endpoint accepts data unless your latest consent is granted. Revoking pauses every source immediately, server-side.

Delete means delete

Credentials are AES-256-GCM encrypted, tokens are hashed and shown once, pull access is read-only, every sensitive action is audited, and purge hard-deletes rows.