Know when it happens.
Send matching events or threshold alerts to Slack. Track the behaviors your team needs to hear about.
Set up alertsDescribe what matters. Raindrop builds a classifier, learns your definition from real examples, and watches for that behavior across production. From subtle failures to the moments your agent gets it right.
The agent answered a request to check the web without using its browser tool.
Match when the user explicitly asks for a web lookup and the agent gives a substantive answer without calling an available browser tool for that request.
Start with a behavior you have actually seen. The best specification includes both an example that should match and one that should not.
Open Signals → New Signal. Be specific about what should count, and what should not. Raindrop drafts a policy and classifier from your traces.
Label matches and non-matches. Explain edge cases in chat, then rerun the draft until it reflects your intent.
Review the policy and classifier code. Choose a name and sentiment, then create the Signal.
New events are scored automatically, with a sampled 90-day backfill. Correct mistaken matches to refine the live Signal.
Signals connect what your agent did with what it meant. Code follows the sequence of tool calls, inputs, and results. Semantic reasoning reads the conversation against that evidence to decide whether the behavior matches.
User request“Please refund order ORD-2048.”
create_refundFirst attempt{ order_id: "ORD-2048" }PAYMENT_GATEWAY_TIMEOUTcreate_refundRetry{ order_id: "ORD-2048" }PAYMENT_GATEWAY_TIMEOUTTwo attempts. No successful refund result in the trace.
“Your refund is complete. The money will reach your card in 5–10 days.”
The assistant tells the user their requested refund is complete.
Read the reply in the context of the request and the tool results.
The trace contains no successful refund result, but the response presents the refund as complete. Together, they match this Signal.
This Signal checks whether the agent claims a refund is complete without a successful tool result to support it. Follow each step to see how the trajectory and conversation come together.
// Illustrative Signal logicexport function run(event) {1const refundCalls = findToolCalls(event.trace, "create_refund");2const hasUnconfirmedRefund =refundCalls.some(call => call.failed) &&!refundCalls.some(call => call.succeeded);if (!hasUnconfirmedRefund) return { matched: false };3const context = formatForReview({trajectory: refundCalls,messages: event.messages,finalResponse: event.finalResponse,});4return classify(context,"The final reply claims the requested refund is complete.",{ spanIds: refundCalls.flatMap(call => call.spanIds) });}
In our published evaluation, rd-signal-2 reached 71% precision and 87% recall at 1/1,600 of the per-trace cost of GPT-5.6 Sol xhigh.
The tradeoff is visible: Sol reached 91% recall at the same precision. These are results from our evaluation, not a guarantee for every behavior or dataset.
See the launch results| Classifier | Precision | Recall | Cost |
|---|---|---|---|
| rd-signal-2 | 71% | 87% | 1× |
| GPT-5.6 Sol xhigh | 71% | 91% | 1,600× |
| GPT-5.6 Luna xhigh | 67% | 83% | 260× |
Relative cost per classified trace, normalized to rd-signal-2. Source: rd-signal-2 launch post
A new model, a different harness, or an edge case can change what your traces look like. A classifier needs attention even when its definition has stayed the same.
Raindrop samples production classifications daily with frontier models. When it finds drift or regressions, it reruns prompt optimization and retunes. You can also inspect and adjust the code and prompt yourself.
Production examples feed the next iteration. Your corrections make the intended boundary more explicit.
Generated Signals run without credentials or internet access. Each organization’s runtime can access only its own data.
Trace context is fetched once and cached near evaluation workers so multiple Signals can reuse it.
Ask Claude Code, Codex, Cursor, or Devin to turn a production finding into a Signal. Raindrop’s MCP exposes the authoring workflow, examples, and refinement tools inside the environment where you already work.
“Create a Signal for agents answering web lookup requests without using their browser tool. Show me the examples before saving it.”
start_signal_sessionDraft a classifier and scan real traffic.
label_signal_batch · refine_signal_sessionReview examples in an MCP app or in chat. Tighten the definition.
close_signal_sessionConfirm the Signal and start tracking the behavior.
Investigate a failure with Triage, then preserve what you learned as an ongoing Signal.
Pass false positives and a clear boundary to refine_signal. The existing Signal updates in the background.
Use your coding agent’s scheduled workflow to inspect matches, propose a fix, and compare outcomes with a saved experiment.
Send matching events or threshold alerts to Slack. Track the behaviors your team needs to hear about.
Set up alertsCompare Signal rates across model, prompt, or rollout cohorts. Experiments analyze existing traffic to show whether outcomes improved.
Compare an experimentSend explicit outcomes like thumbs-up, regenerations, and shares with the SDK. Use presets for common behaviors.
Explore Signal sourcesBuild with the evidence
Start free. No credit card required.