Detects the current coding harness and installs its native LoopOps marketplace plugin, or the shared loop skill plus hosted MCP when no plugin exists. Verifies both before continuing.
Start with your coding agent.
One paste. Your agent first installs the LoopOps plugin for its harness — or the shared skill plus MCP — then provisions scoped keys, wires telemetry, proves the first span, and runs the first diagnosis. External writes still stop at your approval.
Fetch https://loopops.dev/agent-setup/prompt.md
Works in Claude Code, Codex, Cursor, Copilot, Windsurf, and OpenCode. Plugin/skill installation is required; the only human steps are approval, one-time email sign-in, and a client restart when needed.
One idempotent call mints three scoped keys — producer, agent, feedback — stored in your env, never committed. Re-running never duplicates the project.
Vercel AI SDK in one line, any Node process via @getloopops/otel, Cloudflare Workers through native trace export plus approved log export, anything else via raw OTLP. No new SDK if you already emit OpenTelemetry.
Sends one smoke-test span and reads it back, so the pipe is proven before any real traffic depends on it.
Runs the first diagnosis: clustered failures with cited evidence — the improvement loop's input.
Prints your console link, project id, and recovery code — everything you need to keep what it built.
No coding agent? Wire it by hand — keys, your stack, first signal in under a minute
Idempotent by name: re-running with one of the returned keys resumes the same project. Save the producer_key, agent_key, and recovery_code — keys are shown once.
curl -sS -X POST https://loopops.dev/v1/provision \
-H 'content-type: application/json' \
-d '{"project_name":"my-app"}'Vercel AI SDK
Requires ai@7+ · one registration at startup, every generate/tool call flows
npm i @getloopops/sdk
import { registerTelemetry } from "ai";
import { loopOps } from "@getloopops/sdk/ai";
registerTelemetry(loopOps({ agent: "my-app" })); // reads LOOPOPS_URL + LOOPOPS_INGEST_KEYAI SDK 6 keeps the per-call flag via @getloopops/sdk/otel (Node-only). On Workers/Edge there is no process.env — pass loopOps({ agent, url, ingestKey }) explicitly. Full page: AI SDK docs.
Node / OpenTelemetry
Any Node process · exporter + automatic pickup of @opentelemetry/auto-instrumentations-node — outbound db/http spans become map relationships
npm i @getloopops/otel
// otel.js — run with: node --import ./otel.js app.js
import { initLoopOps } from "@getloopops/otel";
initLoopOps(); // reads LOOPOPS_URL + LOOPOPS_INGEST_KEYAlready running OpenTelemetry? Skip the package — point your OTLP/HTTP exporter at https://loopops.dev/v1/traces with header authorization: Bearer <producer_key> (JSON or protobuf). Full page: Node docs.
Cloudflare Workers
Native automatic tracing + approved logs → separate Workers Observability OTLP destinations · open beta · dashboard-created
// wrangler.jsonc — destination auth stays in Cloudflare, not this file
{
"observability": {
"traces": {
"enabled": true,
"destinations": ["<existing-destination>", "loopops-<project_id>-traces"]
},
"logs": {
"enabled": true,
"destinations": ["<existing-log-destination>", "loopops-<project_id>-logs"]
}
}
}Have the human create the Traces destination at ingest.loopops.dev/v1/traces and, after approving application-log capture, the separate Logs destination at ingest.loopops.dev/v1/logs; both keep the producer key in Cloudflare's authorization header. Append and de-duplicate only the approved names; preserve existing sampling and persistence policy. Never point a Worker at an OTLP receiver hosted by that same Worker, which would recurse. LoopOps uses a separate receiver with no export destinations. Full page: OTLP docs.
Any language · OTLP
Python, Go, Rust, LangChain/LangGraph, collectors — standard OTLP/HTTP, JSON or protobuf
curl -sS -X POST https://loopops.dev/v1/traces \
-H 'authorization: Bearer <producer_key>' \
-H 'content-type: application/json' \
-d '{"resourceSpans":[{"resource":{"attributes":[{"key":"service.name","value":{"stringValue":"my-app"}}]},"scopeSpans":[{"spans":[{"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"b7ad6b7169203331","name":"first_signal","status":{"code":1}}]}]}]}'Every official OpenTelemetry SDK exports here: set the exporter endpoint to https://loopops.dev/v1/traces and the authorization header. No first-class LangChain/LangGraph integration — their OpenTelemetry instrumentation over this same path is the honest route. All three pillars: /v1/traces, /v1/logs, /v1/metrics (OTLP/HTTP only — no gRPC). Full page: OTLP docs.
Trigger one call through the wiring you just added — or don't wait: send one smoke-test span from your terminal right now (works on every stack, ids are examples):
curl -sS -X POST https://loopops.dev/v1/traces \
-H 'authorization: Bearer <producer_key>' \
-H 'content-type: application/json' \
-d '{"resourceSpans":[{"resource":{"attributes":[{"key":"service.name","value":{"stringValue":"my-app"}}]},"scopeSpans":[{"spans":[{"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"b7ad6b7169203331","name":"first_signal","status":{"code":1}}]}]}]}'status: "receiving" means your signal was accepted — proof is immediate, no deploy needed. Reads (console, diagnosis) roll ~60–90s behind ingest.
curl -sS https://loopops.dev/v1/ingest/health \ -H 'authorization: Bearer <producer_key>'
Says no_events? Nothing keyed to the project has reached ingest — send the smoke span above. Rejected requests carry their exact reason here. Then run your first diagnosis: POST /v1/runs/diagnose with the agent_key, or open your console link.
The long-form spelling of every step — sessions, feedback, evals, the loop itself: the quickstart and the docs.
Your agent hands you a project_id and recovery code. Sign in with your email (one-time PIN) and claim it — the project joins your account and becomes permanent (ingest is free and unlimited).
The plugin or skill and mcp.loopops.dev were installed before onboarding began. Start the next session with a bounded quick check, or ask the same agent to run a governed improvement cycle and verify the next telemetry window.