Why
ClawLoop already emits structured episodes, reward signals, and layer-state transitions. Teams running it in production or research invariably have an observability stack they want those signals landing in. Shipping first-class sinks for the common ones makes ClawLoop feel native in existing workflows instead of yet another dashboard to check.
Each item below is a small, self-contained adapter with a clear contract — ideal entry points for first-time contributors.
Integration stubs
Contract
Each sink should:
- Consume the existing
Episode / EpisodeSummary / iteration-level events — no core changes.
- Be an optional extra:
uv sync --extra wandb etc., so core stays dependency-light.
- Ship with a minimal example under
examples/observability/ and a one-paragraph README section.
- Fail soft — a broken sink never breaks a training run.
Why an umbrella?
Each integration is ~a day of work and independent of the others. Tracking them together shows intent; splitting them off keeps PRs reviewable.
Why
ClawLoop already emits structured episodes, reward signals, and layer-state transitions. Teams running it in production or research invariably have an observability stack they want those signals landing in. Shipping first-class sinks for the common ones makes ClawLoop feel native in existing workflows instead of yet another dashboard to check.
Each item below is a small, self-contained adapter with a clear contract — ideal entry points for first-time contributors.
Integration stubs
clawloop.integrations.wandb.WandbSink(run_id=...)consuming the existing episode stream.Contract
Each sink should:
Episode/EpisodeSummary/ iteration-level events — no core changes.uv sync --extra wandbetc., so core stays dependency-light.examples/observability/and a one-paragraph README section.Why an umbrella?
Each integration is ~a day of work and independent of the others. Tracking them together shows intent; splitting them off keeps PRs reviewable.