ax-check.com
by Gauge
R
Raindrop.ai
raindrop.ai
ax-check.com
Checked 30 October 2026
B
82/100
Agents need your login
Raindrop's pricing is clear upfront; quickstart docs are thinner.
Homepage states Hobby $0, Pro $299/mo + per-event fee, Enterprise custom with no gating. Quickstart and install-command docs weren't found during review.
3 fixes to start with
Concrete changes, backed by what we found.
Recorded coding sessions
Same task, 3 models, no raindrop.ai account. Recorded 30 October 2026 on Pi.
3 recorded · 1m 56s
1m 56s · recorded
Session findings
Select a finding to see it in context.
›Thinking…
The user is asking me to build an example with "Raindrop.ai". Let me confirm what that is. Could Raindrop.io be a bookmark manager? "Raindrop.ai" — is there a product called raindrop.io? Actually Raindrop.io is a bookmark manager that has a public API. But "Raindrop.ai"? Let me check network access and investigate. It might not exist — in that case, I should just say so frankly and stop.
Let me check whether there's internet access, or whether raindrop.ai resolves.
ls -la /sandbox/repo 2>/dev/null | head -30; echo "---"; env | grep -i -E "raindrop|api" | head
total 16
total 16 drwxr-xr-x 3 root root 4096 Sep 18 08:00 . drwxr-xr-x 7 root root 4096 Oct 30 21:50 .. drwxr-xr-x 8 root root 4096 Sep 24 20:05 .git -rw-r--r-- 1 root root 408 Sep 18 08:00 .gitignore --- PI_GATEWAY_API_KEY=unused
Recorded tool call
{
"type": "tool_call",
"seq": 3,
"ts": "2026-10-30T21:50:26.171Z",
"name": "bash",
"turn": 1,
"input": {
"command": "ls -la /sandbox/repo 2>/dev/null | head -30; echo \"---\"; env | grep -i -E \"raindrop|api\" | head"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-8ff893d55e8c9933",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 7,
"ts": "2026-10-30T21:50:26.171Z",
"turn": 1,
"output": {
"content": [
{
"text": "total 16\ndrwxr-xr-x 3 root root 4096 Sep 18 08:00 .\ndrwxr-xr-x 7 root root 4096 Oct 30 21:50 ..\ndrwxr-xr-x 8 root root 4096 Sep 24 20:05 .git\n-rw-r--r-- 1 root root 408 Sep 18 08:00 .gitignore\n---\nPI_GATEWAY_API_KEY=unused\n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-8ff893d55e8c9933",
"is_error": false,
"tool_kind": "shell"
}curl -sS -m 15 -o /dev/null -w "%{http_code} %{url_effective}\n" https://raindrop.ai 2>&1; curl -sS -m 15 -o /dev/null -w "%{http_code}\n" https://developer.raindrop.io 2>&1307 https://raindrop.ai/
307 https://raindrop.ai/ 200
Recorded tool call
{
"type": "tool_call",
"seq": 4,
"ts": "2026-10-30T21:50:26.171Z",
"name": "bash",
"turn": 1,
"input": {
"command": "curl -sS -m 15 -o /dev/null -w \"%{http_code} %{url_effective}\\n\" https://raindrop.ai 2>&1; curl -sS -m 15 -o /dev/null -w \"%{http_code}\\n\" https://developer.raindrop.io 2>&1"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-b96b92b2d56b9259",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 8,
"ts": "2026-10-30T21:50:27.792Z",
"turn": 1,
"output": {
"content": [
{
"text": "307 https://raindrop.ai/\n200\n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-b96b92b2d56b9259",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
raindrop.ai redirects (307). Probably to raindrop.io (the bookmark manager). developer.raindrop.io exists (200). In other words, "Raindrop.ai" is probably referring to Raindrop.io, i.e., the bookmark manager with a REST API. Let's investigate the API and pricing.
curl -sS -m 15 -L -o /dev/null -w "final: %{url_effective} (%{http_code})\n" https://raindrop.ai; curl -sS -m 15 https://developer.raindrop.io | sed 's/<[^>]*>/ /g' | tr -s ' \n' ' \n' | head -60final: https://www.raindrop.ai/ (200)
final: https://www.raindrop.ai/ (200)
Overview | API Documentation (function f(){if("u" (function j(a,b){try{let c=[],d=new Set,e=a=>{if(!a)return;let e=String(a).trim();!e||d.has(e)||c.length>=b||(d.add(e),c.push(e))},f=window.localStorage.getItem(a);if(f){let a=JSON.parse(f);if(Array.isArray(a))for(let b=0;b @font-face {
font-family: "Noto Color Emoji";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.0.woff2) format("woff2");
unicode-range: u+1f1e6-1f1ff;
}
@font-face {
font-family: "Noto Color Emoji";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.1.woff2) format("woff2");
unicode-range: u+200d, u+2620, u+26a7, u+fe0f, u+1f308, u+1f38c, u+1f3c1, u+1f3f3-1f3f4, u+1f6a9, u+e0062-e0063, u+e0065, u+e0067, u+e006c, u+e006e, u+e0073-e0074, u+e0077, u+e007f;
}
@font-face {
font-family: "Noto Color Emoji";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.2.woff2) format("woff2");
unicode-range: u+23, u+2a, u+30-39, u+a9, u+ae, u+200d, u+203c, u+2049, u+20e3, u+2122, u+2139, u+2194-2199, u+21a9-21aa, u+23cf, u+23e9-23ef, u+23f8-23fa, u+24c2, u+25aa-25ab, u+25b6, u+25c0, u+25fb-25fe, u+2611, u+2622-2623, u+2626, u+262a, u+262e-262f, u+2638, u+2640, u+2642, u+2648-2653, u+2660, u+2663, u+2665-2666, u+2668, u+267b, u+267e-267f, u+2695, u+269b-269c, u+26a0, u+26a7, u+26aa-26ab, u+26ce, u+26d4, u+2705, u+2714, u+2716, u+271d, u+2721, u+2733-2734, u+2747, u+274c, u+274e, u+2753-2755, u+2757, u+2764, u+2795-2797, u+27a1, u+27b0, u+27bf, u+2934-2935, u+2b05-2b07, u+2b1b-2b1c, u+2b55, u+3030, u+303d, u+3297, u+3299, u+fe0f, u+1f170-1f171, u+1f17e-1f17f, u+1f18e, u+1f191-1f19a, u+1f201-1f202, u+1f21a, u+1f22f, u+1f232-1f23a, u+1f250-1f251, u+1f310, u+1f3a6, u+1f3b5-1f3b6, u+1f3bc, u+1f3e7, u+1f441, u+1f499-1f49c, u+1f49f-1f4a0, u+1f4ac-1f4ad, u+1f4b1-1f4b2, u+1f4b9, u+1f4db, u+1f4f2-1f4f6, u+1f500-1f507, u+1f515, u+1f518-1f524, u+1f52f-1f53d, u+1f549, u+1f54e, u+1f5a4, u+1f5e8, u+1f5ef, u+1f6ab, u+1f6ad-1f6b1, u+1f6b3, u+1f6b7-1f6bc, u+1f6be, u+1f6c2-1f6c5, u+1f6d0-1f6d1, u+1f6d7, u+1f6dc, u+1f7e0-1f7eb, u+1f7f0, u+1f90d-1f90e, u+1f9d1-1f9d2, u+1f9e1, u+1fa75-1fa77, u+1faaf;
}
@font-face {
font-family: "Noto Color Emoji";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.3.woff2) format("woff2");
unicode-range: u+200d, u+231a-231b, u+2328, u+23f0-23f3, u+2602, u+260e, u+2692, u+2694, u+2696-2697, u+2699, u+26b0-26b1, u+26cf, u+26d1, u+26d3, u+2702, u+2709, u+270f, u+2712, u+fe0f, u+1f302, u+1f321, u+1f392-1f393, u+1f3a9, u+1f3bd, u+1f3ee, u+1f3f7, u+1f3fa, u+1f451-1f462, u+1f484, u+1f489-1f48a, u+1f48c-1f48e, u+1f4a1, u+1f4a3, u+1f4a5, u+1f4b0, u+1f4b3-1f4b8, u+1f4bb-1f4da, u+1f4dc-1f4f1, u+1f4ff, u+1f508-1f514, u+1f516-1f517, u+1f526-1f529, u+1f52c-1f52e, u+1f550-1f567, u+1f56f-1f570, u+1f576, u+1f587, u+1f58a-1f58d, u+1f5a5, u+1f5a8, u+1f5b1-1f5b2, u+1f5c2-1f5c4, u+1f5d1-1f5d3, u+1f5dc-1f5de, u+1f5e1, u+1f5f3, u+1f6aa, u+1f6ac, u+1f6bd, u+1f6bf, u+1f6c1, u+1f6cb, u+1f6cd-1f6cf, u+1f6d2, u+1f6e0-1f6e1, u+1f6f0, u+1f97b-1f97f, u+1f9af, u+1f9ba, u+1f9e2-1f9e6, u+1f9ea-1f9ec, u+1f9ee-1f9f4, u+1f9f7-1f9ff, u+1fa71-1fa74, u+1fa79-1fa7b, u+1fa86, u+1fa8e-1fa8f, u+1fa91-1fa93, u+1fa96, u+1fa99-1faa0, u+1faa2-1faa7, u+1faaa-1faae;
}
@font-face {
font-family: "Noto Color Emoji";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.4.woff2) format("woff2");
unicode-range: u+265f, u+26bd-26be, u+26f3, u+26f8, u+fe0f, u+1f004, u+1f0cf, u+1f380-1f384, u+1f386-1f38b, u+1f38d-1f391, u+1f396-1f397, u+1f399-1f39b, u+1f39e-1f39f, u+1f3a3-1f3a5, u+1f3a7-1f3a9, u+1f3ab-1f3b4, u+1f3b7-1f3bb, u+1f3bd-1f3c0, u+1f3c5-1f3c6, u+1f3c8-1f3c9, u+1f3cf-1f3d3, u+1f3f8-1f3f9, u+1f47e, u+1f4e2, u+1f4f7-1f4fd, u+1f52b, u+1f579, u+1f58c-1f58d, u+1f5bc, u+1f6f7, u+1f6f9, u+1f6fc, u+1f93f, u+1f941, u+1f945, u+1f947-1f94f, u+1f9e7-1f9e9, u+1f9f5-1f9f6, u+1fa70-1fa71, u+1fa80-1fa81, u+1fa83-1fa85, u+1fa87-1fa8a, u+1fa94-1fa95, u+1fa97-1fa98, u+1faa1, u+1faa9, u+1fadf;
}
@font-face {
font-family: "Noto Color Emoji";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.5.woff2) format("woff2");
unicode-range: u+2693, u+26e9-26ea, u+26f1-26f2, u+26f4-26f5, u+26fa, u+26fd, u+2708, u+fe0f, u+1f301, u+1f303, u+1f306-1f307, u+1f309, u+1f310, u+1f3a0-1f3a2, u+1f3aa, u+1f3cd-1f3ce, u+1f3d5, u+1f3d7-1f3db, u+1f3df-1f3e6, u+1f3e8-1f3ed, u+1f3ef-1f3f0, u+1f488, u+1f492, u+1f4ba, u+1f54b-1f54d, u+1f5fa-1f5ff, u+1f680-1f6a2, u+1f6a4-1f6a8, u+1f6b2, u+1f6d1, u+1f6d5-1f6d6, u+1f6dd-1f6df, u+1f6e2-1f6e5, u+1f6e9, u+1f6eb-1f6ec, u+1f6f3-1f6f6, u+1f6f8, u+1f6fa-1f6fb, u+1f9bc-1f9bd, u+1f9ed, u+1f9f3, u+1fa7c;
}
@font-face {
font-family: "Noto Color Emoji";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.6.woff2) format("woff2");
unicode-range: u+200d, u+2615, u+fe0f, u+1f32d-1f330, u+1f336, u+1f33d, u+1f344-1f37f, u+1f382, u+1f52a, u+1f7e9, u+1f7eb, u+1f942-1f944, u+1f950-1f96f, u+1f99e, u+1f9aa, u+1f9c0-1f9cb, u+1fad0-1fadc;
}
@font-face {
font-family: "Noto Color Emoji";
font-style: normal;
font-weight: 400;
curl: (23) Failure writing output to destination
Recorded tool call
{
"type": "tool_call",
"seq": 11,
"ts": "2026-10-30T21:50:29.455Z",
"name": "bash",
"turn": 1,
"input": {
"command": "curl -sS -m 15 -L -o /dev/null -w \"final: %{url_effective} (%{http_code})\\n\" https://raindrop.ai; curl -sS -m 15 https://developer.raindrop.io | sed 's/<[^>]*>/ /g' | tr -s ' \\n' ' \\n' | head -60"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-9eed35d99ed29a78",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 17,
"ts": "2026-10-30T21:50:30.984Z",
"turn": 1,
"output": {
"content": [
{
"text": "final: https://www.raindrop.ai/ (200)\n Overview | API Documentation (function f(){if(\"u\" (function j(a,b){try{let c=[],d=new Set,e=a=>{if(!a)return;let e=String(a).trim();!e||d.has(e)||c.length>=b||(d.add(e),c.push(e))},f=window.localStorage.getItem(a);if(f){let a=JSON.parse(f);if(Array.isArray(a))for(let b=0;b @font-face {\n font-family: \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.0.woff2) format(\"woff2\");\n unicode-range: u+1f1e6-1f1ff;\n}\n@font-face {\n font-family: \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.1.woff2) format(\"woff2\");\n unicode-range: u+200d, u+2620, u+26a7, u+fe0f, u+1f308, u+1f38c, u+1f3c1, u+1f3f3-1f3f4, u+1f6a9, u+e0062-e0063, u+e0065, u+e0067, u+e006c, u+e006e, u+e0073-e0074, u+e0077, u+e007f;\n}\n@font-face {\n font-family: \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.2.woff2) format(\"woff2\");\n unicode-range: u+23, u+2a, u+30-39, u+a9, u+ae, u+200d, u+203c, u+2049, u+20e3, u+2122, u+2139, u+2194-2199, u+21a9-21aa, u+23cf, u+23e9-23ef, u+23f8-23fa, u+24c2, u+25aa-25ab, u+25b6, u+25c0, u+25fb-25fe, u+2611, u+2622-2623, u+2626, u+262a, u+262e-262f, u+2638, u+2640, u+2642, u+2648-2653, u+2660, u+2663, u+2665-2666, u+2668, u+267b, u+267e-267f, u+2695, u+269b-269c, u+26a0, u+26a7, u+26aa-26ab, u+26ce, u+26d4, u+2705, u+2714, u+2716, u+271d, u+2721, u+2733-2734, u+2747, u+274c, u+274e, u+2753-2755, u+2757, u+2764, u+2795-2797, u+27a1, u+27b0, u+27bf, u+2934-2935, u+2b05-2b07, u+2b1b-2b1c, u+2b55, u+3030, u+303d, u+3297, u+3299, u+fe0f, u+1f170-1f171, u+1f17e-1f17f, u+1f18e, u+1f191-1f19a, u+1f201-1f202, u+1f21a, u+1f22f, u+1f232-1f23a, u+1f250-1f251, u+1f310, u+1f3a6, u+1f3b5-1f3b6, u+1f3bc, u+1f3e7, u+1f441, u+1f499-1f49c, u+1f49f-1f4a0, u+1f4ac-1f4ad, u+1f4b1-1f4b2, u+1f4b9, u+1f4db, u+1f4f2-1f4f6, u+1f500-1f507, u+1f515, u+1f518-1f524, u+1f52f-1f53d, u+1f549, u+1f54e, u+1f5a4, u+1f5e8, u+1f5ef, u+1f6ab, u+1f6ad-1f6b1, u+1f6b3, u+1f6b7-1f6bc, u+1f6be, u+1f6c2-1f6c5, u+1f6d0-1f6d1, u+1f6d7, u+1f6dc, u+1f7e0-1f7eb, u+1f7f0, u+1f90d-1f90e, u+1f9d1-1f9d2, u+1f9e1, u+1fa75-1fa77, u+1faaf;\n}\n@font-face {\n font-family: \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.3.woff2) format(\"woff2\");\n unicode-range: u+200d, u+231a-231b, u+2328, u+23f0-23f3, u+2602, u+260e, u+2692, u+2694, u+2696-2697, u+2699, u+26b0-26b1, u+26cf, u+26d1, u+26d3, u+2702, u+2709, u+270f, u+2712, u+fe0f, u+1f302, u+1f321, u+1f392-1f393, u+1f3a9, u+1f3bd, u+1f3ee, u+1f3f7, u+1f3fa, u+1f451-1f462, u+1f484, u+1f489-1f48a, u+1f48c-1f48e, u+1f4a1, u+1f4a3, u+1f4a5, u+1f4b0, u+1f4b3-1f4b8, u+1f4bb-1f4da, u+1f4dc-1f4f1, u+1f4ff, u+1f508-1f514, u+1f516-1f517, u+1f526-1f529, u+1f52c-1f52e, u+1f550-1f567, u+1f56f-1f570, u+1f576, u+1f587, u+1f58a-1f58d, u+1f5a5, u+1f5a8, u+1f5b1-1f5b2, u+1f5c2-1f5c4, u+1f5d1-1f5d3, u+1f5dc-1f5de, u+1f5e1, u+1f5f3, u+1f6aa, u+1f6ac, u+1f6bd, u+1f6bf, u+1f6c1, u+1f6cb, u+1f6cd-1f6cf, u+1f6d2, u+1f6e0-1f6e1, u+1f6f0, u+1f97b-1f97f, u+1f9af, u+1f9ba, u+1f9e2-1f9e6, u+1f9ea-1f9ec, u+1f9ee-1f9f4, u+1f9f7-1f9ff, u+1fa71-1fa74, u+1fa79-1fa7b, u+1fa86, u+1fa8e-1fa8f, u+1fa91-1fa93, u+1fa96, u+1fa99-1faa0, u+1faa2-1faa7, u+1faaa-1faae;\n}\n@font-face {\n font-family: \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.4.woff2) format(\"woff2\");\n unicode-range: u+265f, u+26bd-26be, u+26f3, u+26f8, u+fe0f, u+1f004, u+1f0cf, u+1f380-1f384, u+1f386-1f38b, u+1f38d-1f391, u+1f396-1f397, u+1f399-1f39b, u+1f39e-1f39f, u+1f3a3-1f3a5, u+1f3a7-1f3a9, u+1f3ab-1f3b4, u+1f3b7-1f3bb, u+1f3bd-1f3c0, u+1f3c5-1f3c6, u+1f3c8-1f3c9, u+1f3cf-1f3d3, u+1f3f8-1f3f9, u+1f47e, u+1f4e2, u+1f4f7-1f4fd, u+1f52b, u+1f579, u+1f58c-1f58d, u+1f5bc, u+1f6f7, u+1f6f9, u+1f6fc, u+1f93f, u+1f941, u+1f945, u+1f947-1f94f, u+1f9e7-1f9e9, u+1f9f5-1f9f6, u+1fa70-1fa71, u+1fa80-1fa81, u+1fa83-1fa85, u+1fa87-1fa8a, u+1fa94-1fa95, u+1fa97-1fa98, u+1faa1, u+1faa9, u+1fadf;\n}\n@font-face {\n font-family: \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.5.woff2) format(\"woff2\");\n unicode-range: u+2693, u+26e9-26ea, u+26f1-26f2, u+26f4-26f5, u+26fa, u+26fd, u+2708, u+fe0f, u+1f301, u+1f303, u+1f306-1f307, u+1f309, u+1f310, u+1f3a0-1f3a2, u+1f3aa, u+1f3cd-1f3ce, u+1f3d5, u+1f3d7-1f3db, u+1f3df-1f3e6, u+1f3e8-1f3ed, u+1f3ef-1f3f0, u+1f488, u+1f492, u+1f4ba, u+1f54b-1f54d, u+1f5fa-1f5ff, u+1f680-1f6a2, u+1f6a4-1f6a8, u+1f6b2, u+1f6d1, u+1f6d5-1f6d6, u+1f6dd-1f6df, u+1f6e2-1f6e5, u+1f6e9, u+1f6eb-1f6ec, u+1f6f3-1f6f6, u+1f6f8, u+1f6fa-1f6fb, u+1f9bc-1f9bd, u+1f9ed, u+1f9f3, u+1fa7c;\n}\n@font-face {\n font-family: \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(https://static-2v.gitbook.com/~gitbook/static/fonts/noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.6.woff2) format(\"woff2\");\n unicode-range: u+200d, u+2615, u+fe0f, u+1f32d-1f330, u+1f336, u+1f33d, u+1f344-1f37f, u+1f382, u+1f52a, u+1f7e9, u+1f7eb, u+1f942-1f944, u+1f950-1f96f, u+1f99e, u+1f9aa, u+1f9c0-1f9cb, u+1fad0-1fadc;\n}\n@font-face {\n font-family: \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\ncurl: (23) Failure writing output to destination\n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-9eed35d99ed29a78",
"is_error": false,
"tool_kind": "shell"
}curl -sS -m 15 https://raindrop.io/pro | sed 's/<[^>]*>/ /g' | tr -s ' \n' ' \n' | grep -i -A3 -B3 -E "\\$|price|free|pro" | head -60
Subscribe to Pro — Raindrop.io Download Pricing Docs Integrations Blog Sign up Menu Download Pricing Docs Integrations Blog -------- Sign up Frequently asked q
Subscribe to Pro — Raindrop.io Download Pricing Docs Integrations Blog Sign up Menu Download Pricing Docs Integrations Blog -------- Sign up Frequently asked questions Can I use Raindrop.io for free? Absolutely! Raindrop.io is completely free to use indefinitely. You can use it on unlimited devices and create unlimited bookmarks and collections in all plans. How is the Pro plan different from the Free? In short you will have full-text search (even YouTube videos, down to every spoken word), permanent copies of your bookmarks, more space for uploads, cloud backup and tools to keep your bookmarks clean. Can I collaborate with other people without paying? Of course! Do you have monthly and yearly billing options? Yes! We offer either monthly or yearly billing options. The yearly billing option is always cheaper (usually ~20% discount). How is the payment being processed? Can I pay with Paypal? We handle billing via Paddle . It's the same payment provider used in companies such as MacPaw, Adguard, Plausible and other. We do not handle your credit card information directly. Paypal is fully supported, select it as your payment method on checkout. What happens if I cancel my paid plan? When you cancel your plan, you will remain on the plan until the end of your billing cycle, at which time the plan will be canceled. Do you offer refunds? 30-day money back guarantee. To do this, please contact us . What happens if my payment fails? E.g. an expired credit card. Your account email will be notified after each failed payment. Payments may be retried up to 4 times within the next week. After this, if the payment did not succeed, you will be downgraded to the Free plan. 🇺🇸 English 🇩🇪 Deutsch 🇯🇵 日本語 🇫🇷 Français 🇪🇸 Español 🇳🇱 Nederlands 🇧🇷 Português 🇵🇱 Polski 🇮🇹 Italiano 🇷🇺 Русский Features Pricing Download Integrations Docs Blog API Status Raindrop.io All-in-one bookmark manager © 2013 - 2026 Rustem Mussabekov Astana, Kazakhstan Follow on X Terms Privacy
window.onload = function() {
const query = new URLSearchParams(location.search)
const ref = query.get('ref')
--
+';samesite=none'
}
}
{"props":{"pageProps":{}},"page":"/pro","query":{},"buildId":"Kw-iMa7Jl8hFfJW0ZGMeN","nextExport":true,"autoExport":true,"isFallback":false,"locale":"en","locales":["en","de","ja","fr","es","nl","pt","pl","it","ru"],"defaultLocale":"en","scriptLoader":[]}
Recorded tool call
{
"type": "tool_call",
"seq": 14,
"ts": "2026-10-30T21:50:29.455Z",
"name": "bash",
"turn": 1,
"input": {
"command": "curl -sS -m 15 https://raindrop.io/pro | sed 's/<[^>]*>/ /g' | tr -s ' \\n' ' \\n' | grep -i -A3 -B3 -E \"\\\\$|price|free|pro\" | head -60"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-a9e2e2ea5754a24c",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 16,
"ts": "2026-10-30T21:50:30.198Z",
"turn": 1,
"output": {
"content": [
{
"text": " Subscribe to Pro — Raindrop.io Download Pricing Docs Integrations Blog Sign up Menu Download Pricing Docs Integrations Blog -------- Sign up Frequently asked questions Can I use Raindrop.io for free? Absolutely! Raindrop.io is completely free to use indefinitely. You can use it on unlimited devices and create unlimited bookmarks and collections in all plans. How is the Pro plan different from the Free? In short you will have full-text search (even YouTube videos, down to every spoken word), permanent copies of your bookmarks, more space for uploads, cloud backup and tools to keep your bookmarks clean. Can I collaborate with other people without paying? Of course! Do you have monthly and yearly billing options? Yes! We offer either monthly or yearly billing options. The yearly billing option is always cheaper (usually ~20% discount). How is the payment being processed? Can I pay with Paypal? We handle billing via Paddle . It's the same payment provider used in companies such as MacPaw, Adguard, Plausible and other. We do not handle your credit card information directly. Paypal is fully supported, select it as your payment method on checkout. What happens if I cancel my paid plan? When you cancel your plan, you will remain on the plan until the end of your billing cycle, at which time the plan will be canceled. Do you offer refunds? 30-day money back guarantee. To do this, please contact us . What happens if my payment fails? E.g. an expired credit card. Your account email will be notified after each failed payment. Payments may be retried up to 4 times within the next week. After this, if the payment did not succeed, you will be downgraded to the Free plan. 🇺🇸 English 🇩🇪 Deutsch 🇯🇵 日本語 🇫🇷 Français 🇪🇸 Español 🇳🇱 Nederlands 🇧🇷 Português 🇵🇱 Polski 🇮🇹 Italiano 🇷🇺 Русский Features Pricing Download Integrations Docs Blog API Status Raindrop.io All-in-one bookmark manager © 2013 - 2026 Rustem Mussabekov Astana, Kazakhstan Follow on X Terms Privacy \n window.onload = function() {\n const query = new URLSearchParams(location.search)\n const ref = query.get('ref')\n--\n +';samesite=none'\n }\n }\n {\"props\":{\"pageProps\":{}},\"page\":\"/pro\",\"query\":{},\"buildId\":\"Kw-iMa7Jl8hFfJW0ZGMeN\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false,\"locale\":\"en\",\"locales\":[\"en\",\"de\",\"ja\",\"fr\",\"es\",\"nl\",\"pt\",\"pl\",\"it\",\"ru\"],\"defaultLocale\":\"en\",\"scriptLoader\":[]} \n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-a9e2e2ea5754a24c",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
raindrop.ai redirects to www.raindrop.ai and returns 200. Let me check what's included in www.raindrop.ai — is this the same Raindrop.io bookmark manager, or is it a different product? Raindrop.io is a bookmark manager. raindrop.ai might redirect to raindrop.io. Let me confirm.
curl -sS -m 15 https://www.raindrop.ai | head -c 3000; echo; echo "---TITLE---"; curl -sS -m 15 https://www.raindrop.ai | grep -o -i "<title>[^<]*</title>"
<!DOCTYPE html><html lang="en" class="__variable_ba43c0 __variable_d8ebd1 __variable_a74ce6 __variable_d96591"><head><meta charSet="utf-8"/><meta name="viewport
<!DOCTYPE html><html lang="en" class="__variable_ba43c0 __variable_d8ebd1 __variable_a74ce6 __variable_d96591"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/4de1fea1a954a5b6-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/558ca1a6aa3cb55e-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/60c9b95e8d9e49be-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/61d96c4884191721-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/6ad0344ed98ac2e9-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/6d664cce900333ee-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/7ff6869a1704182a-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/b0bb26939bb40fdb-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/cb8236635aff3c3e-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/assets/AlphaLyrae-Medium.woff2" as="font" crossorigin="anonymous" type="font/woff2"/><link rel="preload" as="image" href="/assets/raindrop_dark.svg"/><link rel="preload" as="image" href="/assets/vercel.svg"/><link rel="preload" as="image" href="/assets/speak.svg"/><link rel="preload" as="image" href="/assets/clay-logo-light.png"/><link rel="preload" as="image" href="/assets/framer-lg.svg"/><link rel="preload" as="image" href="/assets/AngelList.webp"/><link rel="preload" as="image" href="/assets/tolan.svg"/><link rel="preload" as="image" href="/assets/raindrop-droplet-white.svg"/><link rel="preload" as="image" href="/assets/raindrop-slack-avatar.jpg"/><link rel="preload" as="image" href="/author_images/evan_goldschmidt.webp"/><link rel="stylesheet" href="/_next/static/css/7612d99130566920.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/b956add80fff6973.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/4a021da6cdc4e456.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/5aa4e81a62fb89d3.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/1e68b5b95c3b1646.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/7222db4dd31dd713.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-b028e8f3d9a3fa4b.js"/><script src="/_next/static/chunks/b265a9d6-667cbe1ee4a6ca6c.js" async=""></script><script src="/_next/static/chunks/4742-64d6655b14f90e53.js" async=""></script><script src="/_next/stcurl: (23) Failure writing output to destination ---TITLE--- <title>Raindrop | Detect agent issues. Prevent them from happening.</title>
Recorded tool call
{
"type": "tool_call",
"seq": 20,
"ts": "2026-10-30T21:50:34.150Z",
"name": "bash",
"turn": 1,
"input": {
"command": "curl -sS -m 15 https://www.raindrop.ai | head -c 3000; echo; echo \"---TITLE---\"; curl -sS -m 15 https://www.raindrop.ai | grep -o -i \"<title>[^<]*</title>\""
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-8545ff9dc1fee356",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 25,
"ts": "2026-10-30T21:50:35.555Z",
"turn": 1,
"output": {
"content": [
{
"text": "<!DOCTYPE html><html lang=\"en\" class=\"__variable_ba43c0 __variable_d8ebd1 __variable_a74ce6 __variable_d96591\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"preload\" href=\"/_next/static/media/4de1fea1a954a5b6-s.p.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/_next/static/media/558ca1a6aa3cb55e-s.p.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/_next/static/media/60c9b95e8d9e49be-s.p.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/_next/static/media/61d96c4884191721-s.p.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/_next/static/media/6ad0344ed98ac2e9-s.p.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/_next/static/media/6d664cce900333ee-s.p.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/_next/static/media/7ff6869a1704182a-s.p.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/_next/static/media/b0bb26939bb40fdb-s.p.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/_next/static/media/cb8236635aff3c3e-s.p.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/assets/AlphaLyrae-Medium.woff2\" as=\"font\" crossorigin=\"anonymous\" type=\"font/woff2\"/><link rel=\"preload\" as=\"image\" href=\"/assets/raindrop_dark.svg\"/><link rel=\"preload\" as=\"image\" href=\"/assets/vercel.svg\"/><link rel=\"preload\" as=\"image\" href=\"/assets/speak.svg\"/><link rel=\"preload\" as=\"image\" href=\"/assets/clay-logo-light.png\"/><link rel=\"preload\" as=\"image\" href=\"/assets/framer-lg.svg\"/><link rel=\"preload\" as=\"image\" href=\"/assets/AngelList.webp\"/><link rel=\"preload\" as=\"image\" href=\"/assets/tolan.svg\"/><link rel=\"preload\" as=\"image\" href=\"/assets/raindrop-droplet-white.svg\"/><link rel=\"preload\" as=\"image\" href=\"/assets/raindrop-slack-avatar.jpg\"/><link rel=\"preload\" as=\"image\" href=\"/author_images/evan_goldschmidt.webp\"/><link rel=\"stylesheet\" href=\"/_next/static/css/7612d99130566920.css\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/_next/static/css/b956add80fff6973.css\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/_next/static/css/4a021da6cdc4e456.css\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/_next/static/css/5aa4e81a62fb89d3.css\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/_next/static/css/1e68b5b95c3b1646.css\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/_next/static/css/7222db4dd31dd713.css\" data-precedence=\"next\"/><link rel=\"preload\" as=\"script\" fetchPriority=\"low\" href=\"/_next/static/chunks/webpack-b028e8f3d9a3fa4b.js\"/><script src=\"/_next/static/chunks/b265a9d6-667cbe1ee4a6ca6c.js\" async=\"\"></script><script src=\"/_next/static/chunks/4742-64d6655b14f90e53.js\" async=\"\"></script><script src=\"/_next/stcurl: (23) Failure writing output to destination\n\n---TITLE---\n<title>Raindrop | Detect agent issues. Prevent them from happening.</title>\n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-8545ff9dc1fee356",
"is_error": false,
"tool_kind": "shell"
}curl -sS -m 15 "https://developer.raindrop.io/v1/user" -H "Authorization: Bearer test" | head -c 500; echo; curl -sS -m 15 https://api.raindrop.io/rest/v1/user -H "Authorization: Bearer test" | head -c 500
<!DOCTYPE html><html data-dpl-id="p-26ec43e8705de8dea39780299bb759" lang="en" class="rounded-corners theme-clean no-tint sidebar-default sidebar-list-default li
<!DOCTYPE html><html data-dpl-id="p-26ec43e8705de8dea39780299bb759" lang="en" class="rounded-corners theme-clean no-tint sidebar-default sidebar-list-default links-default depth-subtle font-Inter sheet-open:gutter-stable"><head><meta charSet="utf-8"/><link rel="preconnect" href="https://api.gitbook.com"/><link rel="preconnect" href="https://ka-p.fontawesome.com"/><link rel="preconnect" href="https://static-2v.gitbook.com"/><meta name="viewport" content="width=device-width, initial-scale=1, viewpcurl: (23) Failure writing output to destination
{"result":false,"status":401,"errorMessage":"Incorrect access_token","auth":false}Recorded tool call
{
"type": "tool_call",
"seq": 22,
"ts": "2026-10-30T21:50:34.150Z",
"name": "bash",
"turn": 1,
"input": {
"command": "curl -sS -m 15 \"https://developer.raindrop.io/v1/user\" -H \"Authorization: Bearer test\" | head -c 500; echo; curl -sS -m 15 https://api.raindrop.io/rest/v1/user -H \"Authorization: Bearer test\" | head -c 500"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-8468708cb5fa97da",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 26,
"ts": "2026-10-30T21:50:35.555Z",
"turn": 1,
"output": {
"content": [
{
"text": "<!DOCTYPE html><html data-dpl-id=\"p-26ec43e8705de8dea39780299bb759\" lang=\"en\" class=\"rounded-corners theme-clean no-tint sidebar-default sidebar-list-default links-default depth-subtle font-Inter sheet-open:gutter-stable\"><head><meta charSet=\"utf-8\"/><link rel=\"preconnect\" href=\"https://api.gitbook.com\"/><link rel=\"preconnect\" href=\"https://ka-p.fontawesome.com\"/><link rel=\"preconnect\" href=\"https://static-2v.gitbook.com\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewpcurl: (23) Failure writing output to destination\n\n{\"result\":false,\"status\":401,\"errorMessage\":\"Incorrect access_token\",\"auth\":false}",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-8468708cb5fa97da",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Interesting — two different things:
- raindrop.ai (www.raindrop.ai): "Raindrop | Detect agent issues. Prevent them from happening." — an AI-agent observability product (looks like a startup, assets reference clay-logo, framer, AngelList, so it's a YC-ish thing).
- raindrop.io: bookmark manager with a public API (api.raindrop.io).
What the user is asking about is Raindrop.ai — an AI-agent issue-detection product. developer.raindrop.io is the bookmark manager's docs (a different product). Need to check whether raindrop.ai has a developer workflow / SDK / API. Let me check the docs on raindrop.ai's site — look for links to docs, pricing, SDK.
raindrop.ai is live but it's a different product from the similarly-named Raindrop.io bookmark manager — let me check what it actually offers (docs, SDK, pricing).
curl -sS -m 15 https://www.raindrop.ai -o /tmp/raindrop.html; grep -o -E 'href="[^"]*"' /tmp/raindrop.html | sort -u | grep -v -E '_next|assets|\.woff|\.css|\.js"' | head -40; echo "---TEXT---"; sed 's/<[^>]*>/ /g' /tmp/raindrop.html | tr -s ' \n' ' \n' | head -c 3000
href="#home-content"
href="#home-content"
href="#workflow"
href="/"
href="/#customers"
href="/#enterprise"
href="/#pricing"
href="/#tracing"
href="/author_images/evan_goldschmidt.webp"
href="/blog/"
href="/blog/series-a/"
href="/careers/"
href="/case-studies/gc-ai/"
href="/case-studies/howie/"
href="/case-studies/speak/"
href="/case-studies/tolan/"
href="/favicon.ico?811d0d276f96060b"
href="/for-good/"
href="/icon0.svg"
href="/issue-detection/"
href="/manifest.json"
href="/resources/"
href="/signals/"
href="/simulate/"
href="/simulation-reveal/scene.bin.gz?v=9412a50f3cddd36d9f5a4b48d4aaa9c79c3e1f4d62cedde4eb854c5555935c8a.5.6922af997ae63df6"
href="/simulation-reveal/scene.json?v=9412a50f3cddd36d9f5a4b48d4aaa9c79c3e1f4d62cedde4eb854c5555935c8a.5.6922af997ae63df6"
href="/triage-agent/"
href="/web-app-manifest-192x192.png"
href="/web-app-manifest-512x512.png"
href="/workshop"
href="/workshop/"
href="https://app.raindrop.ai"
href="https://app.raindrop.ai/signup"
href="https://cal.com/team/raindrop-ai/chat-15-min"
href="https://github.com/raindrop-ai/workshop"
href="https://trust.raindrop.ai/"
href="https://www.googletagmanager.com"
href="https://www.howtoeval.com/"
href="https://www.linkedin.com/company/raindrop-ai"
href="https://www.raindrop.ai/"
href="https://www.raindrop.ai/docs/introduction"
---TEXT---
Raindrop | Detect agent issues. Prevent them from happening. (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-T4Q26BH4'); window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-LJZEKGF8GG'); {"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://www.raindrop.ai/#organization","name":"Raindrop","url":"https://www.raindrop.ai","logo":{"@type":"ImageObject","url":"https://www.raindrop.ai/social.png"},"description":"Monitor your AI Agent the right way. Get alerted when your agent fails in production, trace exactly what went wrong, and prove your fix worked.","sameAs":["https://twitter.com/raindrop_ai","https://linkedin.com/company/raindrop-ai"]},{"@type":"WebSite","@id":"https://www.raindrop.ai/#website","url":"https://www.raindrop.ai","name":"Raindrop","publisher":{"@id":"https://www.raindrop.ai/#organization"}}]} html:root{background:#191919} Skip to content Product Explore Raindrop Tracing Every run, tool call, and decision in view. Issue detection From silent failures to a proven fix. Triage Agent Investigate and automate in Slack, web, and MCP. Signals & experiments Track behavior. Measure what improves. Workshop Inspect, replay, and debug agents locally. Simulations Early access Test your agent in a world that’s safe to break. Built for production. Enterprise Simulations Pricing Docs Company Company Blog Engineering notes and product updates. Resources Press, talks, and interviews. Careers Join the team building Raindrop. Raindrop for Good Free for teams building agents that help people. Log in Chat with us Series A A new chapter for Raindrop. $50m raised Detect agent issues. Prevent them from happening. Find silent failures in production, investigate what went wrong, and simulate changes in CI. Start building Book a demo Start free. No credit card required. See how it works Built with teams shipping agents to millions. <template shadowroot="open" shadowrootmode="open"
> :host{display:inline-block;direction:ltr;white-space:nowrap;line-height:1}span{display:inline-block}:host([data-will-change]) span{will-change:transform}.number,.digit{padding:round(nearest, calc(var(--number-flow-mask-height, 0.25em) / 2), 1px) 0}.symbol{white-space:pre}</style
><span role="img" aria-label="1.1K"
> <span part="number" class="number"
> 1 . 1 </span
> K </span
></template
> :where(number-flow-react){line-height:1}number-flow-react > span{font-kerning:none;display:inline-block;padding:calc(round(nearest, calc(var(--number-flow-mask-height, 0.25em) / 2), 1px) * 2) 0}</style
> 1.1K on GitHub Billions Traces processed / month Fortune 100 Customers SOC 2 CompRecorded tool call
{
"type": "tool_call",
"seq": 30,
"ts": "2026-10-30T21:50:39.191Z",
"name": "bash",
"turn": 1,
"input": {
"command": "curl -sS -m 15 https://www.raindrop.ai -o /tmp/raindrop.html; grep -o -E 'href=\"[^\"]*\"' /tmp/raindrop.html | sort -u | grep -v -E '_next|assets|\\.woff|\\.css|\\.js\"' | head -40; echo \"---TEXT---\"; sed 's/<[^>]*>/ /g' /tmp/raindrop.html | tr -s ' \\n' ' \\n' | head -c 3000"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-bc7e60803b5e73f1",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 32,
"ts": "2026-10-30T21:50:40.325Z",
"turn": 1,
"output": {
"content": [
{
"text": "href=\"#home-content\"\nhref=\"#workflow\"\nhref=\"/\"\nhref=\"/#customers\"\nhref=\"/#enterprise\"\nhref=\"/#pricing\"\nhref=\"/#tracing\"\nhref=\"/author_images/evan_goldschmidt.webp\"\nhref=\"/blog/\"\nhref=\"/blog/series-a/\"\nhref=\"/careers/\"\nhref=\"/case-studies/gc-ai/\"\nhref=\"/case-studies/howie/\"\nhref=\"/case-studies/speak/\"\nhref=\"/case-studies/tolan/\"\nhref=\"/favicon.ico?811d0d276f96060b\"\nhref=\"/for-good/\"\nhref=\"/icon0.svg\"\nhref=\"/issue-detection/\"\nhref=\"/manifest.json\"\nhref=\"/resources/\"\nhref=\"/signals/\"\nhref=\"/simulate/\"\nhref=\"/simulation-reveal/scene.bin.gz?v=9412a50f3cddd36d9f5a4b48d4aaa9c79c3e1f4d62cedde4eb854c5555935c8a.5.6922af997ae63df6\"\nhref=\"/simulation-reveal/scene.json?v=9412a50f3cddd36d9f5a4b48d4aaa9c79c3e1f4d62cedde4eb854c5555935c8a.5.6922af997ae63df6\"\nhref=\"/triage-agent/\"\nhref=\"/web-app-manifest-192x192.png\"\nhref=\"/web-app-manifest-512x512.png\"\nhref=\"/workshop\"\nhref=\"/workshop/\"\nhref=\"https://app.raindrop.ai\"\nhref=\"https://app.raindrop.ai/signup\"\nhref=\"https://cal.com/team/raindrop-ai/chat-15-min\"\nhref=\"https://github.com/raindrop-ai/workshop\"\nhref=\"https://trust.raindrop.ai/\"\nhref=\"https://www.googletagmanager.com\"\nhref=\"https://www.howtoeval.com/\"\nhref=\"https://www.linkedin.com/company/raindrop-ai\"\nhref=\"https://www.raindrop.ai/\"\nhref=\"https://www.raindrop.ai/docs/introduction\"\n---TEXT---\n Raindrop | Detect agent issues. Prevent them from happening. (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-T4Q26BH4'); window.dataLayer = window.dataLayer || [];\nfunction gtag(){dataLayer.push(arguments);}\ngtag('js', new Date());\ngtag('config', 'G-LJZEKGF8GG'); {\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.raindrop.ai/#organization\",\"name\":\"Raindrop\",\"url\":\"https://www.raindrop.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.raindrop.ai/social.png\"},\"description\":\"Monitor your AI Agent the right way. Get alerted when your agent fails in production, trace exactly what went wrong, and prove your fix worked.\",\"sameAs\":[\"https://twitter.com/raindrop_ai\",\"https://linkedin.com/company/raindrop-ai\"]},{\"@type\":\"WebSite\",\"@id\":\"https://www.raindrop.ai/#website\",\"url\":\"https://www.raindrop.ai\",\"name\":\"Raindrop\",\"publisher\":{\"@id\":\"https://www.raindrop.ai/#organization\"}}]} html:root{background:#191919} Skip to content Product Explore Raindrop Tracing Every run, tool call, and decision in view. Issue detection From silent failures to a proven fix. Triage Agent Investigate and automate in Slack, web, and MCP. Signals & experiments Track behavior. Measure what improves. Workshop Inspect, replay, and debug agents locally. Simulations Early access Test your agent in a world that’s safe to break. Built for production. Enterprise Simulations Pricing Docs Company Company Blog Engineering notes and product updates. Resources Press, talks, and interviews. Careers Join the team building Raindrop. Raindrop for Good Free for teams building agents that help people. Log in Chat with us Series A A new chapter for Raindrop. $50m raised Detect agent issues. Prevent them from happening. Find silent failures in production, investigate what went wrong, and simulate changes in CI. Start building Book a demo Start free. No credit card required. See how it works Built with teams shipping agents to millions. <template shadowroot=\"open\" shadowrootmode=\"open\"\n\t\t\t> :host{display:inline-block;direction:ltr;white-space:nowrap;line-height:1}span{display:inline-block}:host([data-will-change]) span{will-change:transform}.number,.digit{padding:round(nearest, calc(var(--number-flow-mask-height, 0.25em) / 2), 1px) 0}.symbol{white-space:pre}</style\n\t\t\t><span role=\"img\" aria-label=\"1.1K\"\n\t\t\t\t> <span part=\"number\" class=\"number\"\n\t\t\t\t\t> 1 . 1 </span\n\t\t\t\t> K </span\n\t\t\t></template\n\t\t> :where(number-flow-react){line-height:1}number-flow-react > span{font-kerning:none;display:inline-block;padding:calc(round(nearest, calc(var(--number-flow-mask-height, 0.25em) / 2), 1px) * 2) 0}</style\n\t\t> 1.1K on GitHub Billions Traces processed / month Fortune 100 Customers SOC 2 Comp",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-bc7e60803b5e73f1",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Raindrop.ai has documentation at https://www.raindrop.ai/docs/introduction, a GitHub workshop repository, and a "Workshop" (a local agent inspection/replay/debugging tool). There's a hosted app at app.raindrop.ai. Let me read the docs to check the SDK (probably a Python SDK for tracing/observability), pricing section, and quickstart. I'll check the pricing on the homepage and the docs introduction page.
Raindrop.ai is an observability/monitoring product for AI agents, equipped with documentation and a hosted app. Let me look into their docs, SDK, and pricing.
curl -sS -m 15 https://www.raindrop.ai/docs/introduction -o /tmp/docs.html; grep -o -E 'href="/docs[^"]*"' /tmp/docs.html | sort -u | head -50
(no output)
(no output)
Recorded tool call
{
"type": "tool_call",
"seq": 35,
"ts": "2026-10-30T21:50:42.747Z",
"name": "bash",
"turn": 1,
"input": {
"command": "curl -sS -m 15 https://www.raindrop.ai/docs/introduction -o /tmp/docs.html; grep -o -E 'href=\"/docs[^\"]*\"' /tmp/docs.html | sort -u | head -50"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-965e0281bda72525",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 39,
"ts": "2026-10-30T21:50:43.092Z",
"turn": 1,
"output": {
"content": [
{
"text": "(no output)",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-965e0281bda72525",
"is_error": false,
"tool_kind": "shell"
}grep -A2 -B2 -i -E 'pricing|\$/mo|\$[0-9]+|free tier|per month' /tmp/raindrop.html | sed 's/<[^>]*>/ /g' | tr -s ' \n' ' \n' | head -80
function gtag(){dataLayer.push(arguments);}
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-LJZEKGF8GG'); {"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://www.raindrop.ai/#organization","name":"Raindrop","url":"https://www.raindrop.ai","logo":{"@type":"ImageObject","url":"https://www.raindrop.ai/social.png"},"description":"Monitor your AI Agent the right way. Get alerted when your agent fails in production, trace exactly what went wrong, and prove your fix worked.","sameAs":["https://twitter.com/raindrop_ai","https://linkedin.com/company/raindrop-ai"]},{"@type":"WebSite","@id":"https://www.raindrop.ai/#website","url":"https://www.raindrop.ai","name":"Raindrop","publisher":{"@id":"https://www.raindrop.ai/#organization"}}]} html:root{background:#191919} Skip to content Product Explore Raindrop Tracing Every run, tool call, and decision in view. Issue detection From silent failures to a proven fix. Triage Agent Investigate and automate in Slack, web, and MCP. Signals & experiments Track behavior. Measure what improves. Workshop Inspect, replay, and debug agents locally. Simulations Early access Test your agent in a world that’s safe to break. Built for production. Enterprise Simulations Pricing Docs Company Company Blog Engineering notes and product updates. Resources Press, talks, and interviews. Careers Join the team building Raindrop. Raindrop for Good Free for teams building agents that help people. Log in Chat with us Series A A new chapter for Raindrop. $50m raised Detect agent issues. Prevent them from happening. Find silent failures in production, investigate what went wrong, and simulate changes in CI. Start building Book a demo Start free. No credit card required. See how it works Built with teams shipping agents to millions. <template shadowroot="open" shadowrootmode="open"
> :host{display:inline-block;direction:ltr;white-space:nowrap;line-height:1}span{display:inline-block}:host([data-will-change]) span{will-change:transform}.number,.digit{padding:round(nearest, calc(var(--number-flow-mask-height, 0.25em) / 2), 1px) 0}.symbol{white-space:pre}</style
><span role="img" aria-label="1.1K"
--
"command": "npm run build"
} The build is still failing. I’ll try adjusting the configuration again. Issues Events 128 · Users 42 Critical High Medium Low Build loop from deprecated Webpack config Retries reuse module.loaders , invalid in Webpack 5. Mark as Resolved Events 128 Users 42 Last seen 4m ago Detected 8d ago Details Viewed by — Tags Webpack 5 production Confidence 97% Activity User % · Events 10 % 5 % 0 Sep 9 Sep 12 Sep 16 Agent Analysis All 12 traces reuse the same template. Replace module.loaders with module.rules . Continue with Agent Activity System changed priority to High 1d ago Issue detected by Raindrop 8d ago Recommended First Latest View All 1 / 3 Back Next event user_8f2a 4 minutes ago The agent retries the build after restoring the same unsupported configuration key. Conversation Span Tree Details The build is still failing. Can you try again? I’ll update the configuration and run the build again. The config uses module.loaders 1 Webpack 5 rejects module.loaders . The generated configuration still uses the deprecated key. . read_file Read webpack.config.js 0.1s Input { "path": "webpack.config.js" } Output Read webpack.config.js search_files Found matching config template 0.2s Input { "query": "module.loaders", "path": "templates/" } Output Found matching config template The build failed. I’ll try adjusting the configuration once more. I’ll regenerate the config with module.loaders 2 The retry restores the same key without addressing the error. The next build fails again. and rebuild. write_file Updated webpack.config.js 0.3s Input { "path": "webpack.config.js", "content": "module: { loaders: [...] }" } Output Updated webpack.config.js # agent-alerts 10 Raindrop APP 9:04 AM Build loop from deprecated Webpack config 128 events 42 users severity high Retries restore module.loaders , which Webpack 5 no longer supports. % users (7d) 8.8% View Issue Triage Agent New Today Build failure loop Production · 2 minutes ago Impact of the build failures Production · 1 hour ago The phantom refund Production · 2 hours ago The missing runbook Production · 3 hours ago A 40k-token hello Production · 4 hours ago Forgotten preferences Production · 5 hours ago Meetings an hour late Production · 6 hours ago The slow-tool cascade Production · 7 hours ago Build failure loop Production Why does the agent keep retrying the same failing build? Worked for 18s 3 tools Checking known issues Build failure loop · 128 events 1.2s Searching events coding_session · last 7 days 4.8s Reading traces 12 conversations · 3 related signals 12.0s The agent is reapplying an outdated Webpack template. Each retry reproduces the same error. In all 12 traces I reviewed, it writes module.loaders , runs the build, then tries again without changing that key. Webpack 5 expects module.rules . Fix the failing Webpack build bash npm run build Exit code 1 Invalid configuration object.
Unknown property 'loaders'. Update the shared template , then replay the failing traces against your change before shipping. Simulate the fix Ask a question... acme / support-agent Private Retry tools on transient failures #142 Open jamie wants to merge 2 commits into main from fix/tool-retries Conversation 2 Commits 2 Checks 3 Files changed 2 jamie commented 8 minutes ago Author Retry timeouts automatically so customers don’t have to ask twice. Retry transient tool failures 7e4b2c1 42 tests passed raindrop bot commented just now Simulation found issues The refund succeeds, but its response times out. The new retry issues another refund. Simulation comparison for a $120 refund whose response times out Same customer request main This PR Refund a $120 order $120 refunded $240 refunded The agent still says: I’ve refunded $120 to your card. 1 regression 11 passed View failing replay alex requested changes Verify after the fix Experiments Config template v2 Config template v2 vs. baseline Saved Setup Experiment vs baseline Experiment Property config_version = v2 Last 7 days Baseline Property config_version ≠ v2 Last 7 days Results Experiment Users with negative signals 3.40% 7.8 pp 1,280 users 3,840 events Baseline Users with negative signals 11.20% 1,280 users 3,840 events Signal comparison Experiment Baseline Build failures 2.1 % 9.8 % 79% Agent retry loops 0.8 % 6.4 % 88% Config syntax errors 1.2 % 4.8 % 75% Measured in production Better behavior. A real difference. 27.8 % reduction in memory issues Read Tolan’s story “Without Raindrop we couldn’t tell if we were actually fixing the problem.” Evan Goldschmidt CTO, Tolan Tolan used Raindrop to identify forgotten details and missed reminders, then test changes to retrieval and storage. More from teams building with Raindrop Speak Howie GC.AI Loved by developers Here's what developers building with Raindrop are saying Andrzej Dąbrowski @ ardabrowski Hey this is awesome! Finally a product where you can "look at your data" in a beautiful way, not just a soulless dump of jsons for nerds.
I've been building sth along those lines for customer support (not observability, and not as polished). I display convo history as blocks, similar to Notion, and you get notion-like collaboration too for feedback. Is this possible in raindrop? Amjad Masad @ amasad If you're building an agent, I recommend looking into Raindrop for monitoring. We use it. Jeremy Fischer @ Jeremy_JFischer I’ve been using this all day today. Soooo much easier to iterate. Spans, token count, cost, timing, a sane view of each tools input-output. jason @ jxnlco Heard it works with your codex subscription.
--
Welcome to the singularity Stew Fortier @ stewfortier It's difficult to overstate how insanely useful @raindrop_ai is, and it just keeps getting better Stefanos @ titanas Raindrop will be remembered as the company who did to AI infra what the Mac did to the personal computer. It’s a matter of time until frontier labs recognize the value and make a move. Bardia @ thepericulum Happy customers Justin @ JustinBleuel Easily my favorite tool to discover, analyze, and solve agent issues @clay Nathan Baschez @ nbaschez This is awesome
We @lexdotpage are very happy customers of @raindrop_ai ! Lukas Maschmann @ lukvsm finally somebody built this Patrick Ma @ mapeiyuan Congrats on the launch! Have been building many versions of this from scratch for various projects, and now I can finally use a unified tool for it. Your agent, monitored. From local testing to enterprise deployments, Raindrop has you covered. Signals Define custom classifiers for the behaviors that matter. Aesthetic Complaints 7d 7d now details match 83% trend rising Issues Get alerted the moment production behavior goes off track. Issue detected refund_agent loop P1 0 1 get_refund_status 200 0 2 retry_refund loop 0 3 retry_refund loop Triage Agent Investigate issues and automate follow-ups in Slack, the web, or through MCP. #agent-issues R Raindrop APP Found a retry loop in refund_agent . Fix ready for review Add a retry limit. Experiments Prove improvements behind a feature flag before rolling them out. model_fix_v2 feature flag control variant MCP Connect your tools and let Raindrop run auto-fix loops for your agent. trace patch verify mcp.run_autofix › replaying failed trace fix verified Security trusted by the Fortune 100 Full visibility into your agents, backed by the security guarantees your organization already runs on. SOC 2 Compliance SOC 2 Type II compliant, independently audited each year. Full reports available in our Trust Center. View our Trust Center → PII Guard Intelligent server-side PII redaction keeps sensitive user data protected. Enterprise Ready SSO, audit logs, access controls, procurement support, and dedicated implementation help. Self-Hosting Beta Run Raindrop in your own cloud when your deployment requires it. Learn more → Get started for free. No credit card required. Upgrade as you grow. Hobby Start tracing for free. $0 /mo 1,000 events/mo included Get started free The essentials Tracing & search Slack notifications MCP & Query SDK More features & limits 14-day retention 1 custom signal 15 agent messages / month One event is a user message and agent response, including tool calls and sub-agents, or one background agent run. Pro Find and fix agent failures. $299 /mo + $0.003 / event up to 1M, then $0.002 / event Start 14-day free trial Everything in Hobby, plus Realtime issue detection Triage agent to investigate failures Edge-PII redaction (add-on) Experiments & semantic search More features & limits 500 agent messages / month User stumbles 10 custom signals Unlimited retention One event is a user message and agent response, including tool calls and sub-agents, or one background agent run. Enterprise Security and support at scale. Custom Pricing tailored to your team Talk to sales Everything in Pro, plus SSO / SAML & audit logs Priority support & SLA guarantees Snowflake / BigQuery exports More features & limits Unlimited agent messages Unlimited custom signals Need a custom deployment? Get in touch . “ “We chose Raindrop over Braintrust, LangSmith, and Arize. Most tooling targets the first era of LLMs: call/response, deterministic evals, testing edge cases. Raindrop is building for the next era, proactively finding issues and driving automatic improvement loops.” Head of AI Fortune 100 Build with the evidence Find the next failure. Verify the next fix. Start building Book a demo Start free. No credit card required. Product Tracing Issue detection Triage Agent Signals & experiments Simulations Pricing Developers Documentation Workshop MCP GitHub Eval Guide Company Customer stories Blog Resources Careers Raindrop for Good Trust Center Book a demo © 2026 Raindrop Privacy Terms X / Twitter LinkedIn (self.__next_f=self.__next_f||[]).push([0]) self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[15148,[\"3304\",\"static/chunks/22efb37b-ccbafabcf6ed3e49.js\",\"7177\",\"static/chunks/app/layout-cf4c02096e5e7e34.js\"],\"\"]\n6:I[77308,[],\"default\",1]\n:HL[\"/_next/static/media/4de1fea1a954a5b6-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/558ca1a6aa3cb55e-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/60c9b95e8d9e49be-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/61d96c4884191721-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/6ad0344ed98ac2e9-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/6d664cce900333ee-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/7ff6869a1704182a-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/b0bb26939bb40fdb-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/cb8236635aff3c3e-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/7612d99130566920.css\",\"style\"]\n:HL[\"/_next/static/css/b956add80fff6973.css\",\"style\"]\n:HL[\"/_next/static/css/4a021da6cdc4e456.css\",\"style\"]\n:HL[\"/_next/static/css/5aa4e81a62fb89d3.css\",\"style\"]\n:HL[\"/_next/static/css/1e68b5b95c3b1646.css\",\"style\"]\n:HL[\"/_next/static/css/7222db4dd31dd713.css\",\"style\"]\n:HL[\"/assets/AlphaLyrae-Medium.woff2\",\"font\",{\"crossOrigin\":\"anonymous\",\"type\":\"font/woff2\"}]\n0:{\"P\":null,\"c\":[\"\",\"index\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4224]},\"$undefined\",\"$undefined\",4112],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/7612d99130566920.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/b956add80fff6973.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/4a021da6cdc4e456.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"suppressHydrationWarning\":true,\"lang\":\"en\",\"className\":\"__variable_ba43c0 __variable_d8ebd1 __variable_a74ce6 __variable_d96591\",\"children\":[[\"$\",\"head\",null,{\"children\":[[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://www.googletagmanager.com\"}],[\"$\",\"link\",null,{\"rel\":\"dns-prefetch\",\"href\":\"https://www.googletagmanager.com\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\nj=d.createElement(s),dl=l!='dataLayer'?'\u0026l='+l:'';j.async=true;j.src=\\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n})(window,document,'script','dataLayer','GTM-T4Q26BH4');\"}}],[\"$\",\"script\",null,{\"async\":true,\"src\":\"https://www.googletagmanager.com/gtag/js?id=G-LJZEKGF8GG\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"window.dataLayer = window.dataLayer || [];\\nfunction gtag(){dataLayer.push(arguments);}\\ngtag('js', new Date());\\ngtag('config', 'G-LJZEKGF8GG');\"}}]],[\"$\",\"link\",null,{\"rel\":\"preload\",\"href\":\"/assets/AlphaLyrae-Medium.woff2\",\"as\":\"font\",\"type\":\"font/woff2\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@graph\\\":[{\\\"@type\\\":\\\"Organization\\\",\\\"@id\\\":\\\"https://www.raindrop.ai/#organization\\\",\\\"name\\\":\\\"Raindrop\\\",\\\"url\\\":\\\"https://www.raindrop.ai\\\",\\\"logo\\\":{\\\"@type\\\":\\\"ImageObject\\\",\\\"url\\\":\\\"https://www.raindrop.ai/social.png\\\"},\\\"description\\\":\\\"Monitor your AI Agent the right way. Get alerted when your agent fails in production, trace exactly what went wrong, and prove your fix worked.\\\",\\\"sameAs\\\":[\\\"https://twitter.com/raindrop_ai\\\",\\\"https://linkedin.com/company/raindrop-ai\\\"]},{\\\"@type\\\":\\\"WebSite\\\",\\\"@id\\\":\\\"https://www.raindrop.ai/#website\\\",\\\"url\\\":\\\"https://www.raindrop.ai\\\",\\\"name\\\":\\\"Raindrop\\\",\\\"publisher\\\":{\\\"@id\\\":\\\"https://www.raindrop.ai/#organization\\\"}}]}\"}}],[[\"$\",\"$L2\",null,{\"src\":\"https://analytics.ahrefs.com/analytics.js\",\"data-key\":\"3Sd3Xe8WyXSIX7q7AguU2A\",\"async\":true,\"strategy\":\"lazyOnload\"}],[\"$\",\"$L2\",null,{\"id\":\"twitter-conversion-tracking\",\"strategy\":\"lazyOnload\",\"dangerouslySetInnerHTML\":{\"__html\":\"\\n !function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments);\\n },s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='https://static.ads-twitter.com/uwt.js',\\n a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script');\\n twq('config','pfs4o');\\n \"}}],[\"$\",\"$L2\",null,{\"id\":\"rb2b-tracking\",\"strategy\":\"lazyOnload\",\"dangerouslySetInnerHTML\":{\"__html\":\"\\n !function(key) {\\n if (window.reb2b) return;\\n window.reb2b = {loaded: true};\\n var s = document.createElement(\\\"script\\\");\\n s.async = true;\\n s.src = \\\"https://ddwl4m2hdecbv.cloudfront.net/b/\\\" + key + \\\"/\\\" + key + \\\".js.gz\\\";\\n document.getElementsByTagName(\\\"script\\\")[0].parentNode.insertBefore(s, document.getElementsByTagName(\\\"script\\\")[0]);\\n }(\\\"0NW1GHJZM5O4\\\");\\n \"}}]]]}],\"$L3\"]}]]}],{\"children\":[\"$L4\",{},null,false,null]},null,false,null],\"$L5\",false]],\"m\":\"$undefined\",\"G\":[\"$6\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"tTZcNFlPX3SP0SLJMtTEx\"}\n8:I[58262,[\"3304\",\"static/chunks/22efb37b-ccbafabcf6ed3e49.js\",\"7177\",\"static/chunks/app/layout-cf4c02096e5e7e34.js\"],\"AnalyticsProvider\"]\n9:I[42880,[],\"\"]\na:I[36358,[],\"\"]\nb:I[62899,[\"3304\",\"static/chunks/22efb37b-ccbafabcf6ed3e49.js\",\"7177\",\"static/chunks/app/layout-cf4c02096e5e7e34.js\"],\"Analytics\"]\nc:I[58681,[\"3304\",\"static/chunks/22efb37b-ccbafabcf6ed3e49.js\",\"4099\",\"static/chunks/4099-1a2f8c6fb7697d87.js\",\"9215\",\"static/chunks/9215-fa1d8de3d5a039e3.js\",\"8974\",\"static/chunks/app/page-43133fcf66e02396.js\"],\"default\"]\ne:I[50861,[],\"OutletBoundary\"]\nf:\"$Sreact.suspense\"\n11:I[50861,[],\"ViewportBoundary\"]\n13:I[50861,[],\"MetadataBoundary\"]\n7:[\"$\",\"iframe\",null,{\"src\":\"https://www.googletagmanager.com/ns.html?id=GTM-T4Q26BH4\",\"height\":\"0\",\"width\":\"0\",\"style\":{\"display\":\"none\",\"visibility\":\"hidden\"}}]\n3:[\"$\",\"body\",null,{\"children\":[[\"$\",\"noscript\",null,{\"children\":\"$7\"}],[\"$\",\"$L8\",null,{\"config\":{\"posthog\":{\"writeKey\":\"phc_HUKFK0AP8KNBoIkIVVjcTKXeP5fPHrIIEEbzfzXvyOP\"}},\"children\":[\"$\",\"main\",null,{\"children\":[\"$\",\"$L9\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\Showing the first 20,000 characters. Full output is available in raw details.
Recorded tool call
{
"type": "tool_call",
"seq": 37,
"ts": "2026-10-30T21:50:42.747Z",
"name": "bash",
"turn": 1,
"input": {
"command": "grep -A2 -B2 -i -E 'pricing|\\$/mo|\\$[0-9]+|free tier|per month' /tmp/raindrop.html | sed 's/<[^>]*>/ /g' | tr -s ' \\n' ' \\n' | head -80"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-9c08967439387722",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 38,
"ts": "2026-10-30T21:50:42.747Z",
"turn": 1,
"output": {
"content": [
{
"text": "function gtag(){dataLayer.push(arguments);}\ngtag('js', new Date());\ngtag('config', 'G-LJZEKGF8GG'); {\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.raindrop.ai/#organization\",\"name\":\"Raindrop\",\"url\":\"https://www.raindrop.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.raindrop.ai/social.png\"},\"description\":\"Monitor your AI Agent the right way. Get alerted when your agent fails in production, trace exactly what went wrong, and prove your fix worked.\",\"sameAs\":[\"https://twitter.com/raindrop_ai\",\"https://linkedin.com/company/raindrop-ai\"]},{\"@type\":\"WebSite\",\"@id\":\"https://www.raindrop.ai/#website\",\"url\":\"https://www.raindrop.ai\",\"name\":\"Raindrop\",\"publisher\":{\"@id\":\"https://www.raindrop.ai/#organization\"}}]} html:root{background:#191919} Skip to content Product Explore Raindrop Tracing Every run, tool call, and decision in view. Issue detection From silent failures to a proven fix. Triage Agent Investigate and automate in Slack, web, and MCP. Signals & experiments Track behavior. Measure what improves. Workshop Inspect, replay, and debug agents locally. Simulations Early access Test your agent in a world that’s safe to break. Built for production. Enterprise Simulations Pricing Docs Company Company Blog Engineering notes and product updates. Resources Press, talks, and interviews. Careers Join the team building Raindrop. Raindrop for Good Free for teams building agents that help people. Log in Chat with us Series A A new chapter for Raindrop. $50m raised Detect agent issues. Prevent them from happening. Find silent failures in production, investigate what went wrong, and simulate changes in CI. Start building Book a demo Start free. No credit card required. See how it works Built with teams shipping agents to millions. <template shadowroot=\"open\" shadowrootmode=\"open\"\n\t\t\t> :host{display:inline-block;direction:ltr;white-space:nowrap;line-height:1}span{display:inline-block}:host([data-will-change]) span{will-change:transform}.number,.digit{padding:round(nearest, calc(var(--number-flow-mask-height, 0.25em) / 2), 1px) 0}.symbol{white-space:pre}</style\n\t\t\t><span role=\"img\" aria-label=\"1.1K\"\n--\n "command": "npm run build"\n} The build is still failing. I’ll try adjusting the configuration again. Issues Events 128 · Users 42 Critical High Medium Low Build loop from deprecated Webpack config Retries reuse module.loaders , invalid in Webpack 5. Mark as Resolved Events 128 Users 42 Last seen 4m ago Detected 8d ago Details Viewed by — Tags Webpack 5 production Confidence 97% Activity User % · Events 10 % 5 % 0 Sep 9 Sep 12 Sep 16 Agent Analysis All 12 traces reuse the same template. Replace module.loaders with module.rules . Continue with Agent Activity System changed priority to High 1d ago Issue detected by Raindrop 8d ago Recommended First Latest View All 1 / 3 Back Next event user_8f2a 4 minutes ago The agent retries the build after restoring the same unsupported configuration key. Conversation Span Tree Details The build is still failing. Can you try again? I’ll update the configuration and run the build again. The config uses module.loaders 1 Webpack 5 rejects module.loaders . The generated configuration still uses the deprecated key. . read_file Read webpack.config.js 0.1s Input { "path": "webpack.config.js" } Output Read webpack.config.js search_files Found matching config template 0.2s Input { "query": "module.loaders", "path": "templates/" } Output Found matching config template The build failed. I’ll try adjusting the configuration once more. I’ll regenerate the config with module.loaders 2 The retry restores the same key without addressing the error. The next build fails again. and rebuild. write_file Updated webpack.config.js 0.3s Input { "path": "webpack.config.js", "content": "module: { loaders: [...] }" } Output Updated webpack.config.js # agent-alerts 10 Raindrop APP 9:04 AM Build loop from deprecated Webpack config 128 events 42 users severity high Retries restore module.loaders , which Webpack 5 no longer supports. % users (7d) 8.8% View Issue Triage Agent New Today Build failure loop Production · 2 minutes ago Impact of the build failures Production · 1 hour ago The phantom refund Production · 2 hours ago The missing runbook Production · 3 hours ago A 40k-token hello Production · 4 hours ago Forgotten preferences Production · 5 hours ago Meetings an hour late Production · 6 hours ago The slow-tool cascade Production · 7 hours ago Build failure loop Production Why does the agent keep retrying the same failing build? Worked for 18s 3 tools Checking known issues Build failure loop · 128 events 1.2s Searching events coding_session · last 7 days 4.8s Reading traces 12 conversations · 3 related signals 12.0s The agent is reapplying an outdated Webpack template. Each retry reproduces the same error. In all 12 traces I reviewed, it writes module.loaders , runs the build, then tries again without changing that key. Webpack 5 expects module.rules . Fix the failing Webpack build bash npm run build Exit code 1 Invalid configuration object. \n Unknown property 'loaders'. Update the shared template , then replay the failing traces against your change before shipping. Simulate the fix Ask a question... acme / support-agent Private Retry tools on transient failures #142 Open jamie wants to merge 2 commits into main from fix/tool-retries Conversation 2 Commits 2 Checks 3 Files changed 2 jamie commented 8 minutes ago Author Retry timeouts automatically so customers don’t have to ask twice. Retry transient tool failures 7e4b2c1 42 tests passed raindrop bot commented just now Simulation found issues The refund succeeds, but its response times out. The new retry issues another refund. Simulation comparison for a $120 refund whose response times out Same customer request main This PR Refund a $120 order $120 refunded $240 refunded The agent still says: I’ve refunded $120 to your card. 1 regression 11 passed View failing replay alex requested changes Verify after the fix Experiments Config template v2 Config template v2 vs. baseline Saved Setup Experiment vs baseline Experiment Property config_version = v2 Last 7 days Baseline Property config_version ≠ v2 Last 7 days Results Experiment Users with negative signals 3.40% 7.8 pp 1,280 users 3,840 events Baseline Users with negative signals 11.20% 1,280 users 3,840 events Signal comparison Experiment Baseline Build failures 2.1 % 9.8 % 79% Agent retry loops 0.8 % 6.4 % 88% Config syntax errors 1.2 % 4.8 % 75% Measured in production Better behavior. A real difference. 27.8 % reduction in memory issues Read Tolan’s story “Without Raindrop we couldn’t tell if we were actually fixing the problem.” Evan Goldschmidt CTO, Tolan Tolan used Raindrop to identify forgotten details and missed reminders, then test changes to retrieval and storage. More from teams building with Raindrop Speak Howie GC.AI Loved by developers Here's what developers building with Raindrop are saying Andrzej Dąbrowski @ ardabrowski Hey this is awesome! Finally a product where you can "look at your data" in a beautiful way, not just a soulless dump of jsons for nerds.\nI've been building sth along those lines for customer support (not observability, and not as polished). I display convo history as blocks, similar to Notion, and you get notion-like collaboration too for feedback. Is this possible in raindrop? Amjad Masad @ amasad If you're building an agent, I recommend looking into Raindrop for monitoring. We use it. Jeremy Fischer @ Jeremy_JFischer I’ve been using this all day today. Soooo much easier to iterate. Spans, token count, cost, timing, a sane view of each tools input-output. jason @ jxnlco Heard it works with your codex subscription.\n--\nWelcome to the singularity Stew Fortier @ stewfortier It's difficult to overstate how insanely useful @raindrop_ai is, and it just keeps getting better Stefanos @ titanas Raindrop will be remembered as the company who did to AI infra what the Mac did to the personal computer. It’s a matter of time until frontier labs recognize the value and make a move. Bardia @ thepericulum Happy customers Justin @ JustinBleuel Easily my favorite tool to discover, analyze, and solve agent issues @clay Nathan Baschez @ nbaschez This is awesome\nWe @lexdotpage are very happy customers of @raindrop_ai ! Lukas Maschmann @ lukvsm finally somebody built this Patrick Ma @ mapeiyuan Congrats on the launch! Have been building many versions of this from scratch for various projects, and now I can finally use a unified tool for it. Your agent, monitored. From local testing to enterprise deployments, Raindrop has you covered. Signals Define custom classifiers for the behaviors that matter. Aesthetic Complaints 7d 7d now details match 83% trend rising Issues Get alerted the moment production behavior goes off track. Issue detected refund_agent loop P1 0 1 get_refund_status 200 0 2 retry_refund loop 0 3 retry_refund loop Triage Agent Investigate issues and automate follow-ups in Slack, the web, or through MCP. #agent-issues R Raindrop APP Found a retry loop in refund_agent . Fix ready for review Add a retry limit. Experiments Prove improvements behind a feature flag before rolling them out. model_fix_v2 feature flag control variant MCP Connect your tools and let Raindrop run auto-fix loops for your agent. trace patch verify mcp.run_autofix › replaying failed trace fix verified Security trusted by the Fortune 100 Full visibility into your agents, backed by the security guarantees your organization already runs on. SOC 2 Compliance SOC 2 Type II compliant, independently audited each year. Full reports available in our Trust Center. View our Trust Center → PII Guard Intelligent server-side PII redaction keeps sensitive user data protected. Enterprise Ready SSO, audit logs, access controls, procurement support, and dedicated implementation help. Self-Hosting Beta Run Raindrop in your own cloud when your deployment requires it. Learn more → Get started for free. No credit card required. Upgrade as you grow. Hobby Start tracing for free. $0 /mo 1,000 events/mo included Get started free The essentials Tracing & search Slack notifications MCP & Query SDK More features & limits 14-day retention 1 custom signal 15 agent messages / month One event is a user message and agent response, including tool calls and sub-agents, or one background agent run. Pro Find and fix agent failures. $299 /mo + $0.003 / event up to 1M, then $0.002 / event Start 14-day free trial Everything in Hobby, plus Realtime issue detection Triage agent to investigate failures Edge-PII redaction (add-on) Experiments & semantic search More features & limits 500 agent messages / month User stumbles 10 custom signals Unlimited retention One event is a user message and agent response, including tool calls and sub-agents, or one background agent run. Enterprise Security and support at scale. Custom Pricing tailored to your team Talk to sales Everything in Pro, plus SSO / SAML & audit logs Priority support & SLA guarantees Snowflake / BigQuery exports More features & limits Unlimited agent messages Unlimited custom signals Need a custom deployment? Get in touch . “ “We chose Raindrop over Braintrust, LangSmith, and Arize. Most tooling targets the first era of LLMs: call/response, deterministic evals, testing edge cases. Raindrop is building for the next era, proactively finding issues and driving automatic improvement loops.” Head of AI Fortune 100 Build with the evidence Find the next failure. Verify the next fix. Start building Book a demo Start free. No credit card required. Product Tracing Issue detection Triage Agent Signals & experiments Simulations Pricing Developers Documentation Workshop MCP GitHub Eval Guide Company Customer stories Blog Resources Careers Raindrop for Good Trust Center Book a demo © 2026 Raindrop Privacy Terms X / Twitter LinkedIn (self.__next_f=self.__next_f||[]).push([0]) self.__next_f.push([1,\"1:\\\"$Sreact.fragment\\\"\\n2:I[15148,[\\\"3304\\\",\\\"static/chunks/22efb37b-ccbafabcf6ed3e49.js\\\",\\\"7177\\\",\\\"static/chunks/app/layout-cf4c02096e5e7e34.js\\\"],\\\"\\\"]\\n6:I[77308,[],\\\"default\\\",1]\\n:HL[\\\"/_next/static/media/4de1fea1a954a5b6-s.p.woff2\\\",\\\"font\\\",{\\\"crossOrigin\\\":\\\"\\\",\\\"type\\\":\\\"font/woff2\\\"}]\\n:HL[\\\"/_next/static/media/558ca1a6aa3cb55e-s.p.woff2\\\",\\\"font\\\",{\\\"crossOrigin\\\":\\\"\\\",\\\"type\\\":\\\"font/woff2\\\"}]\\n:HL[\\\"/_next/static/media/60c9b95e8d9e49be-s.p.woff2\\\",\\\"font\\\",{\\\"crossOrigin\\\":\\\"\\\",\\\"type\\\":\\\"font/woff2\\\"}]\\n:HL[\\\"/_next/static/media/61d96c4884191721-s.p.woff2\\\",\\\"font\\\",{\\\"crossOrigin\\\":\\\"\\\",\\\"type\\\":\\\"font/woff2\\\"}]\\n:HL[\\\"/_next/static/media/6ad0344ed98ac2e9-s.p.woff2\\\",\\\"font\\\",{\\\"crossOrigin\\\":\\\"\\\",\\\"type\\\":\\\"font/woff2\\\"}]\\n:HL[\\\"/_next/static/media/6d664cce900333ee-s.p.woff2\\\",\\\"font\\\",{\\\"crossOrigin\\\":\\\"\\\",\\\"type\\\":\\\"font/woff2\\\"}]\\n:HL[\\\"/_next/static/media/7ff6869a1704182a-s.p.woff2\\\",\\\"font\\\",{\\\"crossOrigin\\\":\\\"\\\",\\\"type\\\":\\\"font/woff2\\\"}]\\n:HL[\\\"/_next/static/media/b0bb26939bb40fdb-s.p.woff2\\\",\\\"font\\\",{\\\"crossOrigin\\\":\\\"\\\",\\\"type\\\":\\\"font/woff2\\\"}]\\n:HL[\\\"/_next/static/media/cb8236635aff3c3e-s.p.woff2\\\",\\\"font\\\",{\\\"crossOrigin\\\":\\\"\\\",\\\"type\\\":\\\"font/woff2\\\"}]\\n:HL[\\\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\\\",\\\"font\\\",{\\\"crossOrigin\\\":\\\"\\\",\\\"type\\\":\\\"font/woff2\\\"}]\\n:HL[\\\"/_next/static/css/7612d99130566920.css\\\",\\\"style\\\"]\\n:HL[\\\"/_next/static/css/b956add80fff6973.css\\\",\\\"style\\\"]\\n:HL[\\\"/_next/static/css/4a021da6cdc4e456.css\\\",\\\"style\\\"]\\n:HL[\\\"/_next/static/css/5aa4e81a62fb89d3.css\\\",\\\"style\\\"]\\n:HL[\\\"/_next/static/css/1e68b5b95c3b1646.css\\\",\\\"style\\\"]\\n:HL[\\\"/_next/static/css/7222db4dd31dd713.css\\\",\\\"style\\\"]\\n:HL[\\\"/assets/AlphaLyrae-Medium.woff2\\\",\\\"font\\\",{\\\"crossOrigin\\\":\\\"anonymous\\\",\\\"type\\\":\\\"font/woff2\\\"}]\\n0:{\\\"P\\\":null,\\\"c\\\":[\\\"\\\",\\\"index\\\"],\\\"q\\\":\\\"\\\",\\\"i\\\":false,\\\"f\\\":[[[\\\"\\\",{\\\"children\\\":[\\\"__PAGE__\\\",{},\\\"$undefined\\\",\\\"$undefined\\\",4224]},\\\"$undefined\\\",\\\"$undefined\\\",4112],[[\\\"$\\\",\\\"$1\\\",\\\"c\\\",{\\\"children\\\":[[[\\\"$\\\",\\\"link\\\",\\\"0\\\",{\\\"rel\\\":\\\"stylesheet\\\",\\\"href\\\":\\\"/_next/static/css/7612d99130566920.css\\\",\\\"precedence\\\":\\\"next\\\",\\\"crossOrigin\\\":\\\"$undefined\\\",\\\"nonce\\\":\\\"$undefined\\\"}],[\\\"$\\\",\\\"link\\\",\\\"1\\\",{\\\"rel\\\":\\\"stylesheet\\\",\\\"href\\\":\\\"/_next/static/css/b956add80fff6973.css\\\",\\\"precedence\\\":\\\"next\\\",\\\"crossOrigin\\\":\\\"$undefined\\\",\\\"nonce\\\":\\\"$undefined\\\"}],[\\\"$\\\",\\\"link\\\",\\\"2\\\",{\\\"rel\\\":\\\"stylesheet\\\",\\\"href\\\":\\\"/_next/static/css/4a021da6cdc4e456.css\\\",\\\"precedence\\\":\\\"next\\\",\\\"crossOrigin\\\":\\\"$undefined\\\",\\\"nonce\\\":\\\"$undefined\\\"}]],[\\\"$\\\",\\\"html\\\",null,{\\\"suppressHydrationWarning\\\":true,\\\"lang\\\":\\\"en\\\",\\\"className\\\":\\\"__variable_ba43c0 __variable_d8ebd1 __variable_a74ce6 __variable_d96591\\\",\\\"children\\\":[[\\\"$\\\",\\\"head\\\",null,{\\\"children\\\":[[[\\\"$\\\",\\\"link\\\",null,{\\\"rel\\\":\\\"preconnect\\\",\\\"href\\\":\\\"https://www.googletagmanager.com\\\"}],[\\\"$\\\",\\\"link\\\",null,{\\\"rel\\\":\\\"dns-prefetch\\\",\\\"href\\\":\\\"https://www.googletagmanager.com\\\"}],[\\\"$\\\",\\\"script\\\",null,{\\\"dangerouslySetInnerHTML\\\":{\\\"__html\\\":\\\"(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\\\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\\\nj=d.createElement(s),dl=l!='dataLayer'?'\\u0026l='+l:'';j.async=true;j.src=\\\\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\\\n})(window,document,'script','dataLayer','GTM-T4Q26BH4');\\\"}}],[\\\"$\\\",\\\"script\\\",null,{\\\"async\\\":true,\\\"src\\\":\\\"https://www.googletagmanager.com/gtag/js?id=G-LJZEKGF8GG\\\"}],[\\\"$\\\",\\\"script\\\",null,{\\\"dangerouslySetInnerHTML\\\":{\\\"__html\\\":\\\"window.dataLayer = window.dataLayer || [];\\\\nfunction gtag(){dataLayer.push(arguments);}\\\\ngtag('js', new Date());\\\\ngtag('config', 'G-LJZEKGF8GG');\\\"}}]],[\\\"$\\\",\\\"link\\\",null,{\\\"rel\\\":\\\"preload\\\",\\\"href\\\":\\\"/assets/AlphaLyrae-Medium.woff2\\\",\\\"as\\\":\\\"font\\\",\\\"type\\\":\\\"font/woff2\\\",\\\"crossOrigin\\\":\\\"anonymous\\\"}],[\\\"$\\\",\\\"script\\\",null,{\\\"type\\\":\\\"application/ld+json\\\",\\\"dangerouslySetInnerHTML\\\":{\\\"__html\\\":\\\"{\\\\\\\"@context\\\\\\\":\\\\\\\"https://schema.org\\\\\\\",\\\\\\\"@graph\\\\\\\":[{\\\\\\\"@type\\\\\\\":\\\\\\\"Organization\\\\\\\",\\\\\\\"@id\\\\\\\":\\\\\\\"https://www.raindrop.ai/#organization\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"Raindrop\\\\\\\",\\\\\\\"url\\\\\\\":\\\\\\\"https://www.raindrop.ai\\\\\\\",\\\\\\\"logo\\\\\\\":{\\\\\\\"@type\\\\\\\":\\\\\\\"ImageObject\\\\\\\",\\\\\\\"url\\\\\\\":\\\\\\\"https://www.raindrop.ai/social.png\\\\\\\"},\\\\\\\"description\\\\\\\":\\\\\\\"Monitor your AI Agent the right way. Get alerted when your agent fails in production, trace exactly what went wrong, and prove your fix worked.\\\\\\\",\\\\\\\"sameAs\\\\\\\":[\\\\\\\"https://twitter.com/raindrop_ai\\\\\\\",\\\\\\\"https://linkedin.com/company/raindrop-ai\\\\\\\"]},{\\\\\\\"@type\\\\\\\":\\\\\\\"WebSite\\\\\\\",\\\\\\\"@id\\\\\\\":\\\\\\\"https://www.raindrop.ai/#website\\\\\\\",\\\\\\\"url\\\\\\\":\\\\\\\"https://www.raindrop.ai\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"Raindrop\\\\\\\",\\\\\\\"publisher\\\\\\\":{\\\\\\\"@id\\\\\\\":\\\\\\\"https://www.raindrop.ai/#organization\\\\\\\"}}]}\\\"}}],[[\\\"$\\\",\\\"$L2\\\",null,{\\\"src\\\":\\\"https://analytics.ahrefs.com/analytics.js\\\",\\\"data-key\\\":\\\"3Sd3Xe8WyXSIX7q7AguU2A\\\",\\\"async\\\":true,\\\"strategy\\\":\\\"lazyOnload\\\"}],[\\\"$\\\",\\\"$L2\\\",null,{\\\"id\\\":\\\"twitter-conversion-tracking\\\",\\\"strategy\\\":\\\"lazyOnload\\\",\\\"dangerouslySetInnerHTML\\\":{\\\"__html\\\":\\\"\\\\n !function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments);\\\\n },s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='https://static.ads-twitter.com/uwt.js',\\\\n a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script');\\\\n twq('config','pfs4o');\\\\n \\\"}}],[\\\"$\\\",\\\"$L2\\\",null,{\\\"id\\\":\\\"rb2b-tracking\\\",\\\"strategy\\\":\\\"lazyOnload\\\",\\\"dangerouslySetInnerHTML\\\":{\\\"__html\\\":\\\"\\\\n !function(key) {\\\\n if (window.reb2b) return;\\\\n window.reb2b = {loaded: true};\\\\n var s = document.createElement(\\\\\\\"script\\\\\\\");\\\\n s.async = true;\\\\n s.src = \\\\\\\"https://ddwl4m2hdecbv.cloudfront.net/b/\\\\\\\" + key + \\\\\\\"/\\\\\\\" + key + \\\\\\\".js.gz\\\\\\\";\\\\n document.getElementsByTagName(\\\\\\\"script\\\\\\\")[0].parentNode.insertBefore(s, document.getElementsByTagName(\\\\\\\"script\\\\\\\")[0]);\\\\n }(\\\\\\\"0NW1GHJZM5O4\\\\\\\");\\\\n \\\"}}]]]}],\\\"$L3\\\"]}]]}],{\\\"children\\\":[\\\"$L4\\\",{},null,false,null]},null,false,null],\\\"$L5\\\",false]],\\\"m\\\":\\\"$undefined\\\",\\\"G\\\":[\\\"$6\\\",[]],\\\"S\\\":true,\\\"h\\\":null,\\\"r\\\":\\\"$undefined\\\",\\\"s\\\":\\\"$undefined\\\",\\\"a\\\":\\\"$undefined\\\",\\\"l\\\":\\\"$undefined\\\",\\\"p\\\":\\\"$undefined\\\",\\\"d\\\":\\\"$undefined\\\",\\\"b\\\":\\\"tTZcNFlPX3SP0SLJMtTEx\\\"}\\n8:I[58262,[\\\"3304\\\",\\\"static/chunks/22efb37b-ccbafabcf6ed3e49.js\\\",\\\"7177\\\",\\\"static/chunks/app/layout-cf4c02096e5e7e34.js\\\"],\\\"AnalyticsProvider\\\"]\\n9:I[42880,[],\\\"\\\"]\\na:I[36358,[],\\\"\\\"]\\nb:I[62899,[\\\"3304\\\",\\\"static/chunks/22efb37b-ccbafabcf6ed3e49.js\\\",\\\"7177\\\",\\\"static/chunks/app/layout-cf4c02096e5e7e34.js\\\"],\\\"Analytics\\\"]\\nc:I[58681,[\\\"3304\\\",\\\"static/chunks/22efb37b-ccbafabcf6ed3e49.js\\\",\\\"4099\\\",\\\"static/chunks/4099-1a2f8c6fb7697d87.js\\\",\\\"9215\\\",\\\"static/chunks/9215-fa1d8de3d5a039e3.js\\\",\\\"8974\\\",\\\"static/chunks/app/page-43133fcf66e02396.js\\\"],\\\"default\\\"]\\ne:I[50861,[],\\\"OutletBoundary\\\"]\\nf:\\\"$Sreact.suspense\\\"\\n11:I[50861,[],\\\"ViewportBoundary\\\"]\\n13:I[50861,[],\\\"MetadataBoundary\\\"]\\n7:[\\\"$\\\",\\\"iframe\\\",null,{\\\"src\\\":\\\"https://www.googletagmanager.com/ns.html?id=GTM-T4Q26BH4\\\",\\\"height\\\":\\\"0\\\",\\\"width\\\":\\\"0\\\",\\\"style\\\":{\\\"display\\\":\\\"none\\\",\\\"visibility\\\":\\\"hidden\\\"}}]\\n3:[\\\"$\\\",\\\"body\\\",null,{\\\"children\\\":[[\\\"$\\\",\\\"noscript\\\",null,{\\\"children\\\":\\\"$7\\\"}],[\\\"$\\\",\\\"$L8\\\",null,{\\\"config\\\":{\\\"posthog\\\":{\\\"writeKey\\\":\\\"phc_HUKFK0AP8KNBoIkIVVjcTKXeP5fPHrIIEEbzfzXvyOP\\\"}},\\\"children\\\":[\\\"$\\\",\\\"main\\\",null,{\\\"children\\\":[\\\"$\\\",\\\"$L9\\\",null,{\\\"parallelRouterKey\\\":\\\"children\\\",\\\"error\\\":\\\"$undefined\\\",\\\"errorStyles\\\":\\\"$undefined\\\",\\\"errorScripts\\\":\\\"$undefined\\\",\\\"template\\\":[\\\"$\\\",\\\"$La\\\",null,{}],\\\"templateStyles\\\":\\\"$undefined\\\",\\\"templateScripts\\\":\\\"$undefined\\\",\\\"notFound\\\":[[[\\\"$\\\",\\\"title\\\",null,{\\\"children\\\":\\\"404: This page could not be found.\\\"}],[\\\"$\\\",\\\"div\\\",null,{\\\"style\\\":{\\\"fontFamily\\\":\\\"system-ui,\\\\\\\"Segoe UI\\\\\\\",Roboto,Helvetica,Arial,sans-serif,\\\\\\\"Apple Color Emoji\\\\\\\",\\\\\\\"Segoe UI Emoji\\\\\\\"\\\",\\\"height\\\":\\\"100vh\\\",\\\"textAlign\\\":\\\"center\\\",\\\"display\\\":\\\"flex\\\",\\\"flexDirection\\\":\\\"column\\\",\\\"alignItems\\\":\\\"center\\\",\\\"justifyContent\\\":\\\"center\\\"},\\\"children\\\":[\\\"$\\\",\\\"div\\\",null,{\\\"children\\\":[[\\\"$\\\",\\\"style\\\",null,{\\\"dangerouslySetInnerHTML\\\":{\\\"__html\\\":\\\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\\\"}}],[\\\"$\\\",\\\"h1\\\",null,{\\\"className\\\":\\\"next-error-h1\\\",\\\"style\\\":{\\\"display\\\":\\\"inline-block\\\",\\\"margin\\\":\\\"0 20px 0 0\\\",\\\"padding\\\":\\\"0 23px 0 0\\\",\\\"fontSize\\\":24,\\\"fontWeight\\\":500,\\\"verticalAlign\\\":\\\"top\\\",\\\"lineHeight\\\":\\\"49px\\\"},\\\"children\\\":404}],[\\\"$\\\",\\\"div\\\",null,{\\\"style\\\":{\\\"display\\\":\\\"inline-block\\\"},\\\"children\\\":[\\\"$\\\",\\\"h2\\\",null,{\\\"style\\\":{\\\"fontSize\\\":14,\\\"fontWeight\\\":400,\\\"lineHeight\\\":\\\"49px\\\",\\\"margin\\\":0},\\\"children\\\":\\\"This page could not be found.\\\"}]}]]}]}]],[]],\\\"forbidden\\\":\\\"$undefined\\\",\\\"unauthorized\\\":\\\"$undefined\\\"}]}]}],[\\\"$\\\",\\\"$Lb\\\",null,{}]]}]\\n4:[\\\"$\\\",\\\"$1\\\",\\\"c\\\",{\\\"children\\\":[[\\\"$\\\",\\\"$Lc\\\",null,{\\\"pricing\\\":\\\"$Ld\\\"}],[[\\\"$\\\",\\\"link\\\",\\\"0\\\",{\\\"rel\\\":\\\"stylesheet\\\",\\\"href\\\":\\\"/_next/static/css/5aa4e81a62fb89d3.css\\\",\\\"precedence\\\":\\\"next\\\",\\\"crossOrigin\\\":\\\"$undefined\\\",\\\"nonce\\\":\\\"$undefined\\\"}],[\\\"$\\\",\\\"link\\\",\\\"1\\\",{\\\"rel\\\":\\\"stylesheet\\\",\\\"href\\\":\\\"/_next/static/css/1e68b5b95c3b1646.css\\\",\\\"precedence\\\":\\\"next\\\",\\\"crossOrigin\\\":\\\"$undefined\\\",\\\"nonce\\\":\\\"$undefined\\\"}],[\\\"$\\\",\\\"link\\\",\\\"2\\\",{\\\"rel\\\":\\\"stylesheet\\\",\\\"href\\\":\\\"/_next/static/css/7222db4dd31dd713.css\\\",\\\"precedence\\\":\\\"next\\\",\\\"crossOrigin\\\":\\\"$undefined\\\",\\\"nonce\\\":\\\"$undefined\\\"}]],[\\\"$\\\",\\\"$Le\\\",null,{\\\"children\\\":[\\\"$\\\",\\\"$f\\\",null,{\\\"name\\\":\\\"Next.MetadataOutlet\\\",\\\"children\\\":\\\"$@10\\\"}]}]]}]\\n5:[\\\"$\\\",\\\"$1\\\",\\\"h\\\",{\\\"children\\\":[null,[\\\"$\\\",\\\"$L11\\\",null,{\\\"children\\\":\\\"$L12\\\"}],[\\\"$\\\",\\\"div\\\",null,{\\\"hidden\\\":true,\\\"children\\\":[\\\"$\\\",\\\"$L13\\\",null,{\\\"children\\\":[\\\"$\\\",\\\"$f\\\",null,{\\\"name\\\":\\\"Next.Metadata\\\",\\\"children\\\":\\\"$L14\\\"}]}]}],[\\\"$\\\",\\\"meta\\\",null,{\\\"name\\\":\\\"next-size-adjust\\\",\\\"content\\\":\\\"\\\"}]]}]\\n12:[[\\\"$\\\",\\\"meta\\\",\\\"0\\\",{\\\"charSet\\\":\\\"utf-8\\\"}],[\\\"$\\\",\\\"meta\\\",\\\"1\\\",{\\\"name\\\":\\\"viewport\\\",\\\"content\\\":\\\"width=device-width, initial-scale=1\\\"}]]\\n15:I[82776,[],\\\"IconMark\\\"]\\n10:null\\n14:[[\\\"$\\\",\\\"title\\\",\\\"0\\\",{\\\"children\\\":\\\"Raindrop | Detect agent issues. Prevent them from happening.\\\"}],[\\\"$\\\",\\\"meta\\\",\\\"1\\\",{\\\"name\\\":\\\"description\\\",\\\"content\\\":\\\"Trace every run. Auto-fix silent failures. Simulate before shipping. Raindrop helps you detect agent issues and prevent them from happening.\\\"}],[\\\"$\\\",\\\"meta\\\",\\\"2\\\",{\\\"name\\\":\\\"author\\\",\\\"content\\\":\\\"Raindrop AI\\\"}],[\\\"$\\\",\\\"link\\\",\\\"3\\\",{\\\"rel\\\":\\\"manifest\\\",\\\"href\\\":\\\"/manifest.json\\\",\\\"crossOrigin\\\":\\\"$undefined\\\"}],[\\\"$\\\",\\\"link\\\",\\\"4\\\",{\\\"rel\\\":\\\"canonical\\\",\\\"href\\\":\\\"https://www.raindrop.ai/\\\"}],[\\\"$\\\",\\\"meta\\\",\\\"5\\\",{\\\"property\\\":\\\"og:title\\\",\\\"content\\\":\\\"Raindrop | Detect agent issues. Prevent them from happening.\\\"}],[\\\"$\\\",\\\"meta\\\",\\\"6\\\",{\\\"property\\\":\\\"og:description\\\",\\\"content\\\":\\\"Trace every run. Auto-fix silent failures. Simulate before shipping.\\\"}],[\\\"$\\\",\\\"meta\\\",\\\"7\\\",{\\\"property\\\":\\\"og:image\\\",\\\"content\\\":\\\"https://www.raindrop.ai/_next/static/media/social.f0ddb4ec.png\\\"}],[\\\"$\\\",\\\"meta\\\",\\\"8\\\",{\\\"name\\\":\\\"twitter:card\\\",\\\"content\\\":\\\"summary_large_image\\\"}],[\\\"$\\\",\\\"meta\\\",\\\"9\\\",{\\\"name\\\":\\\"twitter:title\\\",\\\"content\\\":\\\"Raindrop | Detect agent issues. Prevent them from happening.\\\"}],[\\\"$\\\",\\\"meta\\\",\\\"10\\\",{\\\"name\\\":\\\"twitter:description\\\",\\\"content\\\":\\\"Trace every run. Auto-fix silent failures. Simulate before shipping.\\\"}],[\\\"$\\\",\\\"meta\\\",\\\"11\\\",{\\\"name\\\":\\\"twitter:image\\\",\\\"content\\\":\\\"https://www.raindrop.ai/_next/static/media/social.f0ddb4ec.png\\\"}],[\\\"$\\\",\\\"link\\\",\\\"12\\\",{\\\"rel\\\":\\\"icon\\\",\\\"href\\\":\\\"/favicon.ico?811d0d276f96060b\\\",\\\"type\\\":\\\"image/x-icon\\\",\\\"sizes\\\":\\\"48x48\\\"}],[\\\"$\\\",\\\"link\\\",\\\"13\\\",{\\\"rel\\\":\\\"icon\\\",\\\"href\\\":\\\"/icon0.svg\\\",\\\"type\\\":\\\"image/svg+xml\\\"}],[\\\"$\\\",\\\"link\\\",\\\"14\\\",{\\\"rel\\\":\\\"icon\\\",\\\"href\\\":\\\"/icon0.svg\\\",\\\"sizes\\\":\\\"32x32\\\",\\\"type\\\":\\\"image/svg+xml\\\"}],[\\\"$\\\",\\\"link\\\",\\\"15\\\",{\\\"rel\\\":\\\"icon\\\",\\\"href\\\":\\\"/icon0.svg\\\",\\\"sizes\\\":\\\"16x16\\\",\\\"type\\\":\\\"image/svg+xml\\\"}],[\\\"$\\\",\\\"link\\\",\\\"16\\\",{\\\"rel\\\":\\\"apple-touch-icon\\\",\\\"href\\\":\\\"/web-app-manifest-192x192.png\\\",\\\"sizes\\\":\\\"192x192\\\",\\\"type\\\":\\\"image/png\\\"}],[\\\"$\\\",\\\"link\\\",\\\"17\\\",{\\\"rel\\\":\\\"apple-touch-icon\\\",\\\"href\\\":\\\"/web-app-manifest-512x512.png\\\",\\\"sizes\\\":\\\"512x512\\\",\\\"type\\\":\\\"image/png\\\"}],[\\\"$\\\",\\\"$L15\\\",\\\"18\\\",{}]]\\n\"]) self.__next_f.push([1,\"d:[\\\"$\\\",\\\"section\\\",null,{\\\"id\\\":\\\"pricing\\\",\\\"aria-labelledby\\\":\\\"pricing-heading\\\",\\\"className\\\":\\\"PricingSection_section__T55Gg\\\",\\\"children\\\":[\\\"$\\\",\\\"div\\\",null,{\\\"className\\\":\\\"PricingSection_container__A_z0T\\\",\\\"children\\\":[[\\\"$\\\",\\\"h2\\\",null,{\\\"id\\\":\\\"pricing-heading\\\",\\\"className\\\":\\\"PricingSection_heading__q3Bmv\\\",\\\"children\\\":\\\"Get started for free.\\\"}],[\\\"$\\\",\\\"p\\\",null,{\\\"className\\\":\\\"PricingSection_intro__vxj_Y\\\",\\\"children\\\":\\\"No credit card required. Upgrade as you grow.\\\"}],[\\\"$\\\",\\\"div\\\",null,{\\\"className\\\":\\\"PricingSection_plans__SB_nc\\\",\\\"children\\\":[[\\\"$\\\",\\\"article\\\",\\\"Hobby\\\",{\\\"className\\\":\\\"PricingSection_card__3M32u\\\",\\\"data-featured\\\":\\\"$undefined\\\",\\\"aria-labelledby\\\":\\\"pricing-hobby\\\",\\\"children\\\":[[\\\"$\\\",\\\"div\\\",null,{\\\"className\\\":\\\"PricingSection_summary__NBFIq\\\",\\\"children\\\":[[\\\"$\\\",\\\"h3\\\",null,{\\\"id\\\":\\\"pricing-hobby\\\",\\\"className\\\":\\\"PricingSection_planName__EaqYT\\\",\\\"children\\\":\\\"Hobby\\\"}],[\\\"$\\\",\\\"p\\\",null,{\\\"className\\\":\\\"PricingSection_description__hxiec\\\",\\\"children\\\":\\\"Start tracing for free.\\\"}],[[\\\"$\\\",\\\"div\\\",null,{\\\"className\\\":\\\"PricingSection_price__J8oSy\\\",\\\"children\\\":[[\\\"$\\\",\\\"span\\\",null,{\\\"className\\\":\\\"PricingSection_amount__CSK5k\\\",\\\"children\\\":\\\"$$0\\\"}],[\\\"$\\\",\\\"span\\\",null,{\\\"className\\\":\\\"PricingSection_unit__OZPqM\\\",\\\"children\\\":\\\"/mo\\\"}]]}],[\\\"$\\\",\\\"p\\\",null,{\\\"className\\\":\\\"PricingSection_usage__TexVx\\\",\\\"children\\\":\\\"1,000 events/mo included\\\"}]]]}],[\\\"$\\\",\\\"a\\\",null,{\\\"href\\\":\\\"https://app.raindrop.ai/signup\\\",\\\"target\\\":\\\"_blank\\\",\\\"rel\\\":\\\"noopener noreferrer\\\",\\\"className\\\":\\\"PricingSection_cta__q00St\\\",\\\"children\\\":\\\"Get started free\\\"}],[\\\"$\\\",\\\"div\\\",null,{\\\"className\\\":\\\"PricingSection_features__D1JPY\\\",\\\"children\\\":[[\\\"$\\\",\\\"p\\\",null,{\\\"className\\\":\\\"PricingSection_includes__cZgjj\\\",\\\"children\\\":\\\"The essentials\\\"}],[\\\"$\\\",\\\"ul\\\",null,{\\\"className\\\":\\\"PricingSection_featureList__CA3dD\\\",\\\"children\\\":[[\\\"$\\\",\\\"li\\\",\\\"Tracing \\u0026 search\\\",{\\\"children\\\":\\\"Tracing \\u0026 search\\\"}],[\\\"$\\\",\\\"li\\\",\\\"Slack notifications\\\",{\\\"children\\\":\\\"Slack notifications\\\"}],[\\\"$\\\",\\\"li\\\",\\\"MCP \\u0026 Query SDK\\\",{\\\"children\\\":\\\"MCP \\u0026 Query SDK\\\"}]]}]]}],[\\\"$\\\",\\\"details\\\",null,{\\\"className\\\":\\\"PricingSection_details__eocap\\\",\\\"children\\\":[[\\\"$\\\",\\\"summary\\\",null,{\\\"children\\\":[[\\\"$\\\",\\\"svg\\\",null,{\\\"ref\\\":\\\"$undefined\\\",\\\"xmlns\\\":\\\"http://www.w3.org/2000/svg\\\",\\\"width\\\":14,\\\"height\\\":14,\\\"viewBox\\\":\\\"0 0 24 24\\\",\\\"fill\\\":\\\"none\\\",\\\"stroke\\\":\\\"currentColor\\\",\\\"strokeWidth\\\":1.5,\\\"strokeLinecap\\\":\\\"round\\\",\\\"strokeLinejoin\\\":\\\"round\\\",\\\"className\\\":\\\"lucide lucide-chevron-right \\\",\\\"aria-hidden\\\":\\\"true\\\",\\\"children\\\":[[\\\"$\\\",\\\"path\\\",\\\"mthhwq\\\",{\\\"d\\\":\\\"m9 18 6-6-6-6\\\"}],\\\"$undefined\\\"]}],\\\"More features \\u0026 limits\\\"]}],[\\\"$\\\",\\\"ul\\\",null,{\\\"className\\\":\\\"PricingSection_featureList__CA3dD\\\",\\\"children\\\":[[\\\"$\\\",\\\"li\\\",\\\"14-day retention\\\",{\\\"children\\\":\\\"14-day retention\\\"}],[\\\"$\\\",\\\"li\\\",\\\"1 custom signal\\\",{\\\"children\\\":\\\"1 custom signal\\\"}],[\\\"$\\\",\\\"li\\\",\\\"15 agent messages / month\\\",{\\\"children\\\":\\\"15 agent messages / month\\\"}]]}],[\\\"$\\\",\\\"p\\\",null,{\\\"className\\\":\\\"PricingSection_eventDefinition__JkNSX\\\",\\\"children\\\":\\\"One event is a user message and agent response, including tool calls and sub-agents, or one background agent run.\\\"}]]}]]}],[\\\"$\\\",\\\"article\\\",\\\"Pro\\\",{\\\"className\\\":\\\"PricingSection_card__3M32u\\\",\\\"data-featured\\\":true,\\\"aria-labelledby\\\":\\\"pricing-pro\\\",\\\"children\\\":[[\\\"$\\\",\\\"div\\\",null,{\\\"className\\\":\\\"PricingSection_summary__NBFIq\\\",\\\"children\\\":[[\\\"$\\\",\\\"h3\\\",null,{\\\"id\\\":\\\"pricing-pro\\\",\\\"className\\\":\\\"PricingSection_planName__EaqYT\\\",\\\"children\\\":\\\"Pro\\\"}],[\\\"$\\\",\\\"p\\\",null,{\\\"className\\\":\\\"PricingSection_description__hxiec\\\",\\\"children\\\":\\\"Find and fix agent failures.\\\"}],[[\\\"$\\\",\\\"div\\\",null,{\\\"className\\\":\\\"PricingSection_price__J8oSy\\\",\\\"children\\\":[[\\\"$\\\",\\\"span\\\",null,{\\\"className\\\":\\\"PricingSection_amount__CSK5k\\\",\\\"children\\\":\\\"$$299\\\"}],[\\\"$\\\",\\\"span\\\",null,{\\\"className\\\":\\\"PricingSection_unit__OZPqM\\\",\\\"children\\\":\\\"/mo\\\"}]]}],[\\\"$\\\",\\\"p\\\",null,{\\\"className\\\":\\\"PricingSection_usage__TexVx\\\",\\\"children\\\":\\\"+ $0.003 / event up to 1M, then $0.002 / event\\\"}]]]}],[\\\"$\\\",\\\"a\\\",null,{\\\"href\\\":\\\"https://app.raindrop.ai/signup\\\",\\\"target\\\":\\\"_blank\\\",\\\"rel\\\":\\\"noopener noreferrer\\\",\\\"className\\\":\\\"PricingSection_cta__q00St\\\",\\\"children\\\":\\\"Start 14-day free trial\\\"}],[\\\"$\\\",\\\"div\\\",null,{\\\"className\\\":\\\"PricingSection_features__D1JPY\\\",\\\"children\\\":[[\\\"$\\\",\\\"p\\\",null,{\\\"className\\\":\\\"PricingSection_includes__cZgjj\\\",\\\"children\\\":\\\"Everything in Hobby, plus\\\"}],[\\\"$\\\",\\\"ul\\\",null,{\\\"className\\\":\\\"PricingSection_featureList__CA3dD\\\",\\\"children\\\":[[\\\"$\\\",\\\"li\\\",\\\"Realtime issue detection\\\",{\\\"children\\\":\\\"Realtime issue detection\\\"}],[\\\"$\\\",\\\"li\\\",\\\"Triage agent to investigate failures\\\",{\\\"children\\\":\\\"Triage agent to investigate failures\\\"}],[\\\"$\\\",\\\"li\\\",\\\"Edge-PII redaction (add-on)\\\",{\\\"children\\\":\\\"Edge-PII redaction (add-on)\\\"}],\\\"$L16\\\"]}]]}],\\\"$L17\\\"]}],\\\"$L18\\\"]}],\\\"$L19\\\"]}]}]\\n\"]) self.__next_f.push([1,\"16:[\\\"$\\\",\\\"li\\\",\\\"Experiments \\u0026 semantic search\\\",{\\\"children\\\":\\\"Experiments \\u0026 semantic search\\\"}]\\n17:[\\\"$\\\",\\\"details\\\",null,{\\\"className\\\":\\\"PricingSection_details__eocap\\\",\\\"children\\\":[[\\\"$\\\",\\\"summary\\\",null,{\\\"children\\\":[[\\\"$\\\",\\\"svg\\\",null,{\\\"ref\\\":\\\"$undefined\\\",\\\"xmlns\\\":\\\"http://www.w3.org/2000/svg\\\",\\\"width\\\":14,\\\"height\\\":14,\\\"viewBox\\\":\\\"0 0 24 24\\\",\\\"fill\\\":\\\"none\\\",\\\"stroke\\\":\\\"currentColor\\\",\\\"strokeWidth\\\":1.5,\\\"strokeLinecap\\\":\\\"round\\\",\\\"strokeLinejoin\\\":\\\"round\\\",\\\"className\\\":\\\"lucide lucide-chevron-right \\\",\\\"aria-hidden\\\":\\\"true\\\",\\\"children\\\":[[\\\"$\\\",\\\"path\\\",\\\"mthhwq\\\",{\\\"d\\\":\\\"m9 18 6-6-6-6\\\"}],\\\"$undefined\\\"]}],\\\"More features \\u0026 limits\\\"]}],[\\\"$\\\",\\\"ul\\\",null,{\\\"className\\\":\\\"PricingSection_featureList__CA3dD\\\",\\\"children\\\":[[\\\"$\\\",\\\"li\\\",\\\"500 agent messages / month\\\",{\\\"children\\\":\\\"500 agent messages / month\\\"}],[\\\"$\\\",\\\"li\\\",\\\"User stumbles\\\",{\\\"children\\\":\\\"User stumbles\\\"}],[\\\"$\\\",\\\"li\\\",\\\"10 custom signals\\\",{\\\"children\\\":\\\"10 custom signals\\\"}],[\\\"$\\\",\\\"li\\\",\\\"Unlimited retention\\\",{\\\"children\\\":\\\"Unlimited retention\\\"}]]}],[\\\"$\\\",\\\"p\\\",null,{\\\"className\\\":\\\"PricingSection_eventDefinition__JkNSX\\\",\\\"children\\\":\\\"One event is a user message and agent response, including tool calls and sub-agents, or one background agent run.\\\"}]]}]\\n18:[\\\"$\\\",\\\"article\\\",\\\"Enterprise\\\",{\\\"className\\\":\\\"PricingSection_card__3M32u\\\",\\\"data-featured\\\":\\\"$undefined\\\",\\\"aria-labelledby\\\":\\\"pricing-enterprise\\\",\\\"children\\\":[[\\\"$\\\",\\\"div\\\",null,{\\\"className\\\":\\\"PricingSection_summary__NBFIq\\\",\\\"children\\\":[[\\\"$\\\",\\\"h3\\\",null,{\\\"id\\\":\\\"pricing-enterprise\\\",\\\"className\\\":\\\"PricingSection_planName__EaqYT\\\",\\\"children\\\":\\\"Enterprise\\\"}],[\\\"$\\\",\\\"p\\\",null,{\\\"className\\\":\\\"PricingSection_description__hxiec\\\",\\\"children\\\":\\\"Security and support at scale.\\\"}],[[\\\"$\\\",\\\"div\\\",null,{\\\"className\\\":\\\"PricingSection_price__J8oSy\\\",\\\"children\\\":[[\\\"$\\\",\\\"span\\\",null,{\\\"className\\\":\\\"PricingSection_amount__CSK5k\\\",\\\"children\\\":\\\"Custom\\\"}],\\\"\\\"]}],[\\\"$\\\",\\\"p\\\",null,{\\\"className\\\":\\\"PricingSection_usage__TexVx\\\",\\\"children\\\":\\\"Pricing tailored to your team\\\"}]]]}],[\\\"$\\\",\\\"a\\\",null,{\\\"href\\\":\\\"https://cal.com/team/raindrop-ai/chat-15-min\\\",\\\"target\\\":\\\"_blank\\\",\\\"rel\\\":\\\"noopener noreferrer\\\",\\\"className\\\":\\\"PricingSection_cta__q00St\\\",\\\"children\\\":\\\"Talk to sales\\\"}],[\\\"$\\\",\\\"div\\\",null,{\\\"className\\\":\\\"PricingSection_features__D1JPY\\\",\\\"children\\\":[[\\\"$\\\",\\\"p\\\",null,{\\\"className\\\":\\\"PricingSection_includes__cZgjj\\\",\\\"children\\\":\\\"Everything in Pro, plus\\\"}],[\\\"$\\\",\\\"ul\\\",null,{\\\"className\\\":\\\"PricingSection_featureList__CA3dD\\\",\\\"children\\\":[[\\\"$\\\",\\\"li\\\",\\\"SSO / SAML \\u0026 audit logs\\\",{\\\"children\\\":\\\"SSO / SAML \\u0026 audit logs\\\"}],[\\\"$\\\",\\\"li\\\",\\\"Priority support \\u0026 SLA guarantees\\\",{\\\"children\\\":\\\"Priority support \\u0026 SLA guarantees\\\"}],[\\\"$\\\",\\\"li\\\",\\\"Snowflake / BigQuery exports\\\",{\\\"children\\\":\\\"Snowflake / BigQuery exports\\\"}]]}]]}],[\\\"$\\\",\\\"details\\\",null,{\\\"className\\\":\\\"PricingSection_details__eocap\\\",\\\"children\\\":[[\\\"$\\\",\\\"summary\\\",null,{\\\"children\\\":[[\\\"$\\\",\\\"svg\\\",null,{\\\"ref\\\":\\\"$undefined\\\",\\\"xmlns\\\":\\\"http://www.w3.org/2000/svg\\\",\\\"width\\\":14,\\\"height\\\":14,\\\"viewBox\\\":\\\"0 0 24 24\\\",\\\"fill\\\":\\\"none\\\",\\\"stroke\\\":\\\"currentColor\\\",\\\"strokeWidth\\\":1.5,\\\"strokeLinecap\\\":\\\"round\\\",\\\"strokeLinejoin\\\":\\\"round\\\",\\\"className\\\":\\\"lucide lucide-chevron-right \\\",\\\"aria-hidden\\\":\\\"true\\\",\\\"children\\\":[[\\\"$\\\",\\\"path\\\",\\\"mthhwq\\\",{\\\"d\\\":\\\"m9 18 6-6-6-6\\\"}],\\\"$undefined\\\"]}],\\\"More features \\u0026 limits\\\"]}],[\\\"$\\\",\\\"ul\\\",null,{\\\"className\\\":\\\"PricingSection_featureList__CA3dD\\\",\\\"children\\\":[[\\\"$\\\",\\\"li\\\",\\\"Unlimited agent messages\\\",{\\\"children\\\":\\\"Unlimited agent messages\\\"}],[\\\"$\\\",\\\"li\\\",\\\"Unlimited custom signals\\\",{\\\"children\\\":\\\"Unlimited custom signals\\\"}]]}],\\\"\\\"]}]]}]\\n19:[\\\"$\\\",\\\"p\\\",null,{\\\"className\\\":\\\"PricingSection_footnote__oOYmz\\\",\\\"children\\\":[\\\"Need a custom deployment?\\\",\\\" \\\",[\\\"$\\\",\\\"a\\\",null,{\\\"href\\\":\\\"mailto:sales@raindrop.ai\\\",\\\"children\\\":\\\"Get in touch\\\"}],\\\".\\\"]}]\\n\"]) \n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-9c08967439387722",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Already got the pricing info. Next up, the docs: https://www.raindrop.ai/docs/introduction — I grepped for links in docs.html but got no results (the links might be client-side rendered). Let me check the content of the docs page and find the SDK quickstart (the "MCP & Query SDK" was mentioned). Raindrop probably has a Python SDK (raindrop-io? or @raindrop-ai/...?). Let me check the docs page and PyPI/npm.
Retrieved the pricing information. Next, I'll look for the SDK quickstart in the documentation.
sed 's/<[^>]*>/ /g' /tmp/docs.html | tr -s ' \n' ' \n' | head -c 4000; echo; echo "===LINKS==="; grep -o -E '(href|to)="[^"]*"' /tmp/docs.html | sort -u | grep -v -E '_next|\.css|\.js|\.woff|\.png|\.svg' | head -40
Redirecting...
Redirecting... ===LINKS===
Recorded tool call
{
"type": "tool_call",
"seq": 42,
"ts": "2026-10-30T21:50:47.175Z",
"name": "bash",
"turn": 1,
"input": {
"command": "sed 's/<[^>]*>/ /g' /tmp/docs.html | tr -s ' \\n' ' \\n' | head -c 4000; echo; echo \"===LINKS===\"; grep -o -E '(href|to)=\"[^\"]*\"' /tmp/docs.html | sort -u | grep -v -E '_next|\\.css|\\.js|\\.woff|\\.png|\\.svg' | head -40"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-a577a01620d99fa8",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 47,
"ts": "2026-10-30T21:50:47.175Z",
"turn": 1,
"output": {
"content": [
{
"text": "Redirecting...\n\n===LINKS===\n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-a577a01620d99fa8",
"is_error": false,
"tool_kind": "shell"
}curl -sS -m 15 "https://pypi.org/search/?q=raindrop" -o /dev/null -w "pypi search %{http_code}\n"; curl -sS -m 15 "https://pypi.org/pypi/raindrop/json" | head -c 400; echo; curl -sS -m 15 "https://registry.npmjs.org/-/v1/search?text=raindrop&size=10" | python3 -c "import json,sys; [print(o['package']['name'],'-',o['package'].get('description','')[:80]) for o in json.load(sys.stdin)['objects']]" 2>/dev/nullpypi search 200
pypi search 200
{"info":{"author":"Andy Chorlian","author_email":"andy@hydrogenplatform.com","bugtrack_url":null,"classifiers":[],"description":"","description_content_type":"","docs_url":null,"download_url":"","downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"dynamic":null,"home_page":"https://github.com/hydrogen-dev/raindrop-sdk-python","keywords":"blockchain,ethereum,2FA,raindrop,web3,two-factor","li
@raindrop-ai/eve - Raindrop integration for Vercel's Eve agent framework (OTel traces to Raindrop +
@raindrop-ai/ai-sdk - Standalone Vercel AI SDK integration for Raindrop (events + OTLP/HTTP JSON trace
raindrop-ai - Primary Raindrop JavaScript SDK for event tracking, AI event ingestion, self-dia
raindrop - Distributed id generation with customizable built-in attributes.
@raindrop-ai/openai-agents - Raindrop integration for OpenAI Agents SDK
@raindrop-ai/query - Official TypeScript SDK for the [Raindrop Query API](https://query.raindrop.ai).
@raindrop-ai/mastra - Raindrop integration for Mastra
@raindrop-ai/cursor - Raindrop observability for Cursor agents via hooks
@raindrop-ai/deep-agents - Raindrop integration for LangChain Deep Agents
@raindrop-ai/langchain - Raindrop integration for LangChain
Recorded tool call
{
"type": "tool_call",
"seq": 43,
"ts": "2026-10-30T21:50:47.175Z",
"name": "bash",
"turn": 1,
"input": {
"command": "curl -sS -m 15 \"https://pypi.org/search/?q=raindrop\" -o /dev/null -w \"pypi search %{http_code}\\n\"; curl -sS -m 15 \"https://pypi.org/pypi/raindrop/json\" | head -c 400; echo; curl -sS -m 15 \"https://registry.npmjs.org/-/v1/search?text=raindrop&size=10\" | python3 -c \"import json,sys; [print(o['package']['name'],'-',o['package'].get('description','')[:80]) for o in json.load(sys.stdin)['objects']]\" 2>/dev/null"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-a89ba32ff6abbde2",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 48,
"ts": "2026-10-30T21:50:49.062Z",
"turn": 1,
"output": {
"content": [
{
"text": "pypi search 200\n{\"info\":{\"author\":\"Andy Chorlian\",\"author_email\":\"andy@hydrogenplatform.com\",\"bugtrack_url\":null,\"classifiers\":[],\"description\":\"\",\"description_content_type\":\"\",\"docs_url\":null,\"download_url\":\"\",\"downloads\":{\"last_day\":-1,\"last_month\":-1,\"last_week\":-1},\"dynamic\":null,\"home_page\":\"https://github.com/hydrogen-dev/raindrop-sdk-python\",\"keywords\":\"blockchain,ethereum,2FA,raindrop,web3,two-factor\",\"li\n@raindrop-ai/eve - Raindrop integration for Vercel's Eve agent framework (OTel traces to Raindrop +\n@raindrop-ai/ai-sdk - Standalone Vercel AI SDK integration for Raindrop (events + OTLP/HTTP JSON trace\nraindrop-ai - Primary Raindrop JavaScript SDK for event tracking, AI event ingestion, self-dia\nraindrop - Distributed id generation with customizable built-in attributes.\n@raindrop-ai/openai-agents - Raindrop integration for OpenAI Agents SDK\n@raindrop-ai/query - Official TypeScript SDK for the [Raindrop Query API](https://query.raindrop.ai).\n@raindrop-ai/mastra - Raindrop integration for Mastra\n@raindrop-ai/cursor - Raindrop observability for Cursor agents via hooks\n@raindrop-ai/deep-agents - Raindrop integration for LangChain Deep Agents\n@raindrop-ai/langchain - Raindrop integration for LangChain\n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-a89ba32ff6abbde2",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
The documentation gets redirected. Official SDKs: raindrop-ai (the main JS SDK), @raindrop-ai/query (Query API SDK), @raindrop-ai/openai-agents, @raindrop-ai/langchain, etc. Let's check where the documentation redirects to, and grab the quickstart from either the npm README of the raindrop-ai package or @raindrop-ai/openai-agents. Also going to check the GitHub org github.com/raindrop-ai.
The official SDK exists on npm (raindrop-ai, @raindrop-ai/query, etc.). Let's get the quickstart from the documentation / package README.
curl -sSL -m 20 https://www.raindrop.ai/docs/introduction -o /tmp/docs2.html; sed 's/<[^>]*>/ /g' /tmp/docs2.html | tr -s ' \n' ' \n' | head -c 3000
<html
<html
lang="en"
class="dark"
data-banner-state="visible"
data-assistant-state="closed"
data-page-mode="none"
data-current-path="/"
>
Introduction - Raindrop
!function(){var b="/docs";
function a(p){if(p==null)return"/";p=""+p;if(""===p)return"/";return"/"===p.charAt(0)?p:"/"+p}
function u(p){if(p==null)return p;p=""+p;if(!p||p.charAt(p.length-1)==="/")return p.slice(0,-1);return p}
function i(p){if(p==null)return p;p=""+p;if(6<=p.length&&p.substring(p.length-6)==="/index")return p.substring(0,p.length-6);if("index"===p)return"";return p}
var p=(location.pathname||"").split("?")[0].split("#")[0]||"";
if(b)if(p===b)p="";else if(0===p.indexOf(b+"/"))p=p.substring(b.length);
p=a(p);p=u(p);p=i(p);p=""===p||"index"===p?"/":a(p);
document.documentElement.setAttribute("data-current-path",p);
}(); (() => {
const isIOS =
/iP(hone|ad|od)/.test(navigator.userAgent) ||
(/Macintosh/.test(navigator.userAgent) && navigator.maxTouchPoints > 1);
if (!isIOS) return;
const apply = () => {
for (const meta of document.querySelectorAll('meta[name="viewport"]')) {
const content = meta.getAttribute('content') || '';
if (!content.includes('maximum-scale')) {
meta.setAttribute('content', content + ', maximum-scale=1');
}
}
};
apply();
new MutationObserver(apply).observe(document.head, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ['content'],
});
})(); !function(){
function read(){try{
var e=performance.getEntriesByType?performance.getEntriesByType("navigation"):[];
var st=(e[0]&&e[0].serverTiming)||[];
var g={};
for(var i=0;i<st.length;i++){var n=st[i].name,d=st[i].description;if(!d)continue;try{d=decodeURIComponent(d)}catch(x){}
if(n==="country")g.country=d;else if(n==="region")g.region=d;else if(n==="continent")g.continent=d;}
var w=window;w.mintlify=w.mintlify||{};w.mintlify.geo=g;
}catch(x){}}
read();document.addEventListener("DOMContentLoaded",read);
}(); !function(){try{
var w=window;w.mintlify=w.mintlify||{};
var q=w.mintlify.__apiPlaygroundInputsQueue;
if(!Array.isArray(q)){q=[];w.mintlify.__apiPlaygroundInputsQueue=q;}
w.mintlify.api=w.mintlify.api||{};
w.mintlify.api.playground=w.mintlify.api.playground||{};
if(typeof w.mintlify.api.playground.setServerVariables!=="function"){
w.mintlify.api.playground.setServerVariables=function(v){q.push({type:"set",variables:v});};
}
if(typeof w.mintlify.api.playground.clearServerVariables!=="function"){
w.mintlify.api.playground.clearServerVariables=function(){q.push({type:"clear"});};
}
}catch(e){}}(); (function(){
if(typeof CSS==="undefined"||!("registerProperty" in CSS))return;
if(CSS.supports&&CSS.supports("-webkit-backdrop-filter:none"))return;
var n=["--scroll-area-overflow-x-start","--scroll-area-overflow-x-end","--scroll-area-overflow-y-start","--scroll-area-overflow-y-end"];
var d={"syntax":" ","inherits":false,"initialValue":"0px"};
for(var i=0;i<n.length;i++){try{CSS.registerProperty({name:n[i],syntax:d.syntax,inherits:d.inherits,initialValue:d.initialValuRecorded tool call
{
"type": "tool_call",
"seq": 51,
"ts": "2026-10-30T21:50:51.304Z",
"name": "bash",
"turn": 1,
"input": {
"command": "curl -sSL -m 20 https://www.raindrop.ai/docs/introduction -o /tmp/docs2.html; sed 's/<[^>]*>/ /g' /tmp/docs2.html | tr -s ' \\n' ' \\n' | head -c 3000"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-ac0c3868b7126964",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 56,
"ts": "2026-10-30T21:50:52.100Z",
"turn": 1,
"output": {
"content": [
{
"text": " \n<html\n lang=\"en\"\n class=\"dark\"\n data-banner-state=\"visible\"\n data-assistant-state=\"closed\"\n data-page-mode=\"none\"\n data-current-path=\"/\"\n>\n \n \n \n Introduction - Raindrop \n !function(){var b=\"/docs\";\nfunction a(p){if(p==null)return\"/\";p=\"\"+p;if(\"\"===p)return\"/\";return\"/\"===p.charAt(0)?p:\"/\"+p}\nfunction u(p){if(p==null)return p;p=\"\"+p;if(!p||p.charAt(p.length-1)===\"/\")return p.slice(0,-1);return p}\nfunction i(p){if(p==null)return p;p=\"\"+p;if(6<=p.length&&p.substring(p.length-6)===\"/index\")return p.substring(0,p.length-6);if(\"index\"===p)return\"\";return p}\nvar p=(location.pathname||\"\").split(\"?\")[0].split(\"#\")[0]||\"\";\nif(b)if(p===b)p=\"\";else if(0===p.indexOf(b+\"/\"))p=p.substring(b.length);\np=a(p);p=u(p);p=i(p);p=\"\"===p||\"index\"===p?\"/\":a(p);\ndocument.documentElement.setAttribute(\"data-current-path\",p);\n}(); (() => {\n const isIOS =\n /iP(hone|ad|od)/.test(navigator.userAgent) ||\n (/Macintosh/.test(navigator.userAgent) && navigator.maxTouchPoints > 1);\n if (!isIOS) return;\n const apply = () => {\n for (const meta of document.querySelectorAll('meta[name=\"viewport\"]')) {\n const content = meta.getAttribute('content') || '';\n if (!content.includes('maximum-scale')) {\n meta.setAttribute('content', content + ', maximum-scale=1');\n }\n }\n };\n apply();\n new MutationObserver(apply).observe(document.head, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['content'],\n });\n})(); !function(){\nfunction read(){try{\nvar e=performance.getEntriesByType?performance.getEntriesByType(\"navigation\"):[];\nvar st=(e[0]&&e[0].serverTiming)||[];\nvar g={};\nfor(var i=0;i<st.length;i++){var n=st[i].name,d=st[i].description;if(!d)continue;try{d=decodeURIComponent(d)}catch(x){}\nif(n===\"country\")g.country=d;else if(n===\"region\")g.region=d;else if(n===\"continent\")g.continent=d;}\nvar w=window;w.mintlify=w.mintlify||{};w.mintlify.geo=g;\n}catch(x){}}\nread();document.addEventListener(\"DOMContentLoaded\",read);\n}(); !function(){try{\nvar w=window;w.mintlify=w.mintlify||{};\nvar q=w.mintlify.__apiPlaygroundInputsQueue;\nif(!Array.isArray(q)){q=[];w.mintlify.__apiPlaygroundInputsQueue=q;}\nw.mintlify.api=w.mintlify.api||{};\nw.mintlify.api.playground=w.mintlify.api.playground||{};\nif(typeof w.mintlify.api.playground.setServerVariables!==\"function\"){\nw.mintlify.api.playground.setServerVariables=function(v){q.push({type:\"set\",variables:v});};\n}\nif(typeof w.mintlify.api.playground.clearServerVariables!==\"function\"){\nw.mintlify.api.playground.clearServerVariables=function(){q.push({type:\"clear\"});};\n}\n}catch(e){}}(); (function(){\nif(typeof CSS===\"undefined\"||!(\"registerProperty\" in CSS))return;\nif(CSS.supports&&CSS.supports(\"-webkit-backdrop-filter:none\"))return;\nvar n=[\"--scroll-area-overflow-x-start\",\"--scroll-area-overflow-x-end\",\"--scroll-area-overflow-y-start\",\"--scroll-area-overflow-y-end\"];\nvar d={\"syntax\":\" \",\"inherits\":false,\"initialValue\":\"0px\"};\nfor(var i=0;i<n.length;i++){try{CSS.registerProperty({name:n[i],syntax:d.syntax,inherits:d.inherits,initialValue:d.initialValu",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-ac0c3868b7126964",
"is_error": false,
"tool_kind": "shell"
}curl -sS -m 15 https://registry.npmjs.org/raindrop-ai/latest | python3 -c "import json,sys; d=json.load(sys.stdin); print(d['version']); print(d.get('readme','NO README')[:6000])"1.0.2
1.0.2 NO README
Recorded tool call
{
"type": "tool_call",
"seq": 53,
"ts": "2026-10-30T21:50:51.304Z",
"name": "bash",
"turn": 1,
"input": {
"command": "curl -sS -m 15 https://registry.npmjs.org/raindrop-ai/latest | python3 -c \"import json,sys; d=json.load(sys.stdin); print(d['version']); print(d.get('readme','NO README')[:6000])\""
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-bba0017dbac83486",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 55,
"ts": "2026-10-30T21:50:52.100Z",
"turn": 1,
"output": {
"content": [
{
"text": "1.0.2\nNO README\n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-bba0017dbac83486",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
The documentation is on Mintlify. Let's grab the documentation content — Mintlify sites usually serve markdown if you append ".md" to the URL, or there's an llms.txt. Try https://www.raindrop.ai/docs/introduction.md or /docs/llms.txt.
curl -sSL -m 15 https://www.raindrop.ai/docs/llms.txt | head -80
# Raindrop
# Raindrop - [Introduction](https://raindrop.ai/docs/introduction.md): Raindrop is the monitoring platform for AI agents. Similar to how Sentry tracks errors in your web apps, Raindrop discovers silent agent failures in production. - [TypeScript](https://raindrop.ai/docs/sdk/typescript.md): The Raindrop SDK allows you to track user events and AI interactions in your app. This documentation provides a brief overview of how to use the TypeScript SDK. - [Python](https://raindrop.ai/docs/sdk/python.md): The Raindrop SDK allows you to track user events and AI interactions in your app. This documentation provides a brief overview of how to use the Python SDK. - [Tool catalog capture (ai.prompt.tools)](https://raindrop.ai/docs/sdk/tool-catalog.md): Every Raindrop SDK records the list of tools a model was given on each model-call span, JSON Schema included, as `ai.prompt.tools`. This page defines the attribute, what each integration can see, and how to override it. - [Go](https://raindrop.ai/docs/sdk/go.md): The Raindrop SDK allows you to track user events and AI interactions in your app. This documentation provides a brief overview of how to use the Go SDK. - [Rust (Beta)](https://raindrop.ai/docs/sdk/rust.md): The Raindrop SDK allows you to track user events and AI interactions in your app. This documentation provides a brief overview of how to use the Rust SDK. - [Swift (Beta)](https://raindrop.ai/docs/sdk/swift.md): Track AI interactions, events, signals and traces from Swift on iOS, macOS, tvOS, watchOS, visionOS and Linux. - [Java (Beta)](https://raindrop.ai/docs/sdk/java.md): The Raindrop Java SDK lets you track user events and AI interactions from JVM applications. This page covers installation, event tracking, and manual tracing. - [HTTP API](https://raindrop.ai/docs/sdk/http-api.md): Here's how you can use the Raindrop API directly, without an SDK - [OpenTelemetry](https://raindrop.ai/docs/sdk/opentelemetry.md): Send OpenTelemetry traces to Raindrop over OTLP/HTTP - [Browser (JavaScript)](https://raindrop.ai/docs/sdk/browser.md): Minimal browser-safe SDK for tracking AI events via /v1/events from web apps. - [Overview](https://raindrop.ai/docs/integrations/overview.md): Connect Raindrop with your AI frameworks, cloud providers, and developer tools. - [Agent Skills](https://raindrop.ai/docs/integrations/skills.md): Install Raindrop's open-source skills so your AI coding assistant can set up, debug, and investigate Raindrop for you. - [Vercel AI SDK](https://raindrop.ai/docs/integrations/vercel-ai-sdk.md): Automatic tracking for the Vercel AI SDK. Wrap once, get events and traces for generateText, streamText, generateObject, and streamObject. - [TanStack AI](https://raindrop.ai/docs/integrations/tanstack-ai.md): Automatic tracking for TanStack AI chat middleware with Raindrop. - [Claude Agent SDK (Beta)](https://raindrop.ai/docs/integrations/claude-agent-sdk.md): Automatic tracking for the Claude Agent SDK. Wrap once, then pass eventMetadata() on query() calls to capture events and traces across the session. - [Cursor Agent SDK (Beta)](https://raindrop.ai/docs/integrations/cursor-agent-sdk.md): Automatic tracking for the Cursor Agent SDK. Wrap the SDK once to capture agent events and traces with per-context identity and routing metadata. - [Claude Managed Agents (Beta)](https://raindrop.ai/docs/integrations/claude-managed-agents.md): Automatic tracking for Claude Managed Agents. Wrap the Anthropic client once to capture events, traces, and tool call spans from managed agent sessions. - [Claude Platform OpenTelemetry (Beta)](https://raindrop.ai/docs/integrations/claude-opentelemetry.md): Send Claude Platform's native OpenTelemetry spans to Raindrop. Covers the Messages API, the Claude SDKs, and Claude Managed Agents, including self-hosted sandboxes. - [OpenAI Agents API (Beta)](https://raindrop.ai/docs/integrations/openai-managed-agents.md): Capture managed OpenAI Agents API turns, tool calls, and token usage in Raindrop. - [OpenAI Agents SDK (Beta)](https://raindrop.ai/docs/integrations/openai-agents.md): Automatic tracing for OpenAI Agents with Raindrop - [OpenRouter Agent SDK (Beta)](https://raindrop.ai/docs/integrations/openrouter-agent.md): Automatic tracing for OpenRouter Agent SDK applications with Raindrop - [Eve (Beta)](https://raindrop.ai/docs/integrations/eve.md): Automatic observability for Vercel's Eve agent framework. Drop in one file and every turn, sub-agent dispatch, model call, and tool call shows up in Raindrop and Workshop. - [LangChain (Beta)](https://raindrop.ai/docs/integrations/langchain.md): Automatic tracing for LangChain applications with Raindrop - [Mastra (Beta)](https://raindrop.ai/docs/integrations/mastra.md): Automatic tracing for Mastra agents with Raindrop - [DSPy (Beta)](https://raindrop.ai/docs/integrations/dspy.md): Automatic tracing for DSPy modules with Raindrop - [Pydantic AI (Beta)](https://raindrop.ai/docs/integrations/pydantic-ai.md): Automatic tracing for Pydantic AI agents with Raindrop - [Pi Agent (Beta)](https://raindrop.ai/docs/integrations/pi-agent.md): Automatic observability for Pi — the pi.dev coding agent and agent harness — with Raindrop - [Agno (Beta)](https://raindrop.ai/docs/integrations/agno.md): Automatic tracing for Agno agents, teams, and workflows with Raindrop - [Strands Agents (Beta)](https://raindrop.ai/docs/integrations/strands.md): Automatic tracing for Strands Agents with Raindrop — captures invocations, model calls, and tool usage via the hook system. - [Deep Agents (Beta)](https://raindrop.ai/docs/integrations/deepagents.md): Automatic tracing for LangChain Deep Agents workflows with Raindrop - [Google ADK](https://raindrop.ai/docs/integrations/google-adk.md): Automatic tracing for Google ADK agents, tools, and multi-step reasoning with Raindrop - [CrewAI (Beta)](https://raindrop.ai/docs/integrations/crewai.md): Automatic tracing for CrewAI multi-agent crews, tasks, and token usage with Raindrop - [AWS Bedrock (Beta)](https://raindrop.ai/docs/integrations/bedrock.md): Automatic tracing for AWS Bedrock applications with Raindrop - [Azure OpenAI (Beta)](https://raindrop.ai/docs/integrations/azure-openai.md): Automatic tracing for Azure OpenAI applications with Raindrop - [Vertex AI (Beta)](https://raindrop.ai/docs/integrations/vertex-ai.md): Automatic tracing for Google Vertex AI / Gen AI applications with Raindrop - [Temporal (Beta)](https://raindrop.ai/docs/integrations/temporal.md): Automatic tracing for Temporal workflows and activities with Raindrop - [Claude Code CLI (Beta)](https://raindrop.ai/docs/integrations/claude-code.md): Automatic observability for Claude Code CLI sessions. Install once, then every session, tool call, and prompt is tracked in Raindrop. - [Cursor (Beta)](https://raindrop.ai/docs/integrations/cursor.md): Automatic observability for Cursor IDE, cursor-agent CLI, and Cloud Agents. Install once, then every generation, tool call, and prompt is tracked in Raindrop. - [OpenCode (Beta)](https://raindrop.ai/docs/integrations/opencode.md): Integrate Raindrop with OpenCode to automatically capture coding sessions, messages, tool calls, and LLM responses in your dashboard. - [MCP Servers](https://raindrop.ai/docs/integrations/mcp.md): Track every tool call to your MCP server as a Raindrop event, grouped into the client session that made it. - [Events](https://raindrop.ai/docs/platform/events.md): Search and filter every user or agent interaction you've sent to Raindrop - [Signals](https://raindrop.ai/docs/platform/signals.md): Track any recurring behavior across your AI product and watch its rate over time. - [Users](https://raindrop.ai/docs/platform/users.md): Browse the people behind your events, filter by traits and signals, and open any user's conversation history. - [Issues](https://raindrop.ai/docs/platform/issues.md): Issue Detection surfaces broader distribution changes in your AI product so you can investigate, resolve, or ignore them. - [Briefs](https://raindrop.ai/docs/platform/briefs.md): An agent that investigates your data on a schedule and writes up what it found - [Datasets](https://raindrop.ai/docs/platform/datasets.md): Create shared collections of events, traces, and uploaded examples your team wants to keep. - [Dashboards](https://raindrop.ai/docs/platform/dashboards.md): Chart anything in your events and traces with saved, shareable RQL dashboards. - [Experiments](https://raindrop.ai/docs/platform/experiments.md): Compare cohorts of logged events and measure changes in signal rates - [Triage Agent](https://raindrop.ai/docs/platform/triage-agent.md): An agent that investigates your AI agents in Slack, on the web, and as an MCP. - [Change Reports](https://raindrop.ai/docs/platform/change-reports.md): A brief that connects to GitHub and monitors changes to your agent. - [Cost Tracking](https://raindrop.ai/docs/platform/cost-tracking.md): Understand and track your LLM spend in Raindrop. - [Self Diagnostics](https://raindrop.ai/docs/platform/self-diagnostics.md): Let your AI agents proactively report their own failures - [Projects](https://raindrop.ai/docs/platform/projects.md): Isolate ingest, dashboards, and AI features within an org using first-class projects. - [Roles and permissions](https://raindrop.ai/docs/platform/roles.md): What each organization role can do in Raindrop. - [Notifications](https://raindrop.ai/docs/platform/notifications.md): What Raindrop sends to Slack and email, and how to route it - [Signal Alerts](https://raindrop.ai/docs/platform/signal-alerts.md): Real-time Slack alerts when a signal crosses a threshold - [Plans and limits](https://raindrop.ai/docs/platform/plans.md): What Hobby, Pro, and Enterprise include, and what happens when you reach a limit. - [Build a self-healing loop](https://raindrop.ai/docs/cookbooks/self-healing-loop.md): Take one production issue from a Slack alert to a reviewed fix and verify that it worked in production. - [Workshop](https://raindrop.ai/docs/workshop/overview.md): A local debugger for AI agents. Watch every token, tool call, and decision stream into your browser as it happens. - [SDK](https://raindrop.ai/docs/query-api/sdk.md): TypeScript and Python SDKs for the Query API - [API Reference](https://raindrop.ai/docs/query-api/api-reference.md): Explore the Query API endpoints - [MCP Overview](https://raindrop.ai/docs/mcp/overview.md): Query your Raindrop data directly from your AI coding assistant. - [Query with RQL](https://raindrop.ai/docs/mcp/rql.md): Analyze Raindrop events, traces, users, and conversations through MCP. - [RQL reference](https://raindrop.ai/docs/mcp/rql-reference.md): Supported RQL tables, fields, and functions. - [Privacy and PII Redaction](https://raindrop.ai/docs/security/pii-redaction.md): Maintain deep observability while maintaining the privacy of your user's conversations - [Data Security and Privacy](https://raindrop.ai/docs/security/data-security-and-privacy.md): Raindrop's Commitment to Data Security and Privacy - [Privacy Policy](https://raindrop.ai/docs/security/privacy-policy.md) - [Terms of Service](https://raindrop.ai/docs/security/terms-of-use.md) - [Support](https://raindrop.ai/docs/support.md): Get help from the Raindrop team This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.
Recorded tool call
{
"type": "tool_call",
"seq": 59,
"ts": "2026-10-30T21:50:53.767Z",
"name": "bash",
"turn": 1,
"input": {
"command": "curl -sSL -m 15 https://www.raindrop.ai/docs/llms.txt | head -80"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-83330bd1efb1b2f2",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 61,
"ts": "2026-10-30T21:50:54.097Z",
"turn": 1,
"output": {
"content": [
{
"text": "# Raindrop\n\n- [Introduction](https://raindrop.ai/docs/introduction.md): Raindrop is the monitoring platform for AI agents. Similar to how Sentry tracks errors in your web apps, Raindrop discovers silent agent failures in production.\n- [TypeScript](https://raindrop.ai/docs/sdk/typescript.md): The Raindrop SDK allows you to track user events and AI interactions in your app. This documentation provides a brief overview of how to use the TypeScript SDK.\n- [Python](https://raindrop.ai/docs/sdk/python.md): The Raindrop SDK allows you to track user events and AI interactions in your app. This documentation provides a brief overview of how to use the Python SDK.\n- [Tool catalog capture (ai.prompt.tools)](https://raindrop.ai/docs/sdk/tool-catalog.md): Every Raindrop SDK records the list of tools a model was given on each model-call span, JSON Schema included, as `ai.prompt.tools`. This page defines the attribute, what each integration can see, and how to override it.\n- [Go](https://raindrop.ai/docs/sdk/go.md): The Raindrop SDK allows you to track user events and AI interactions in your app. This documentation provides a brief overview of how to use the Go SDK.\n- [Rust (Beta)](https://raindrop.ai/docs/sdk/rust.md): The Raindrop SDK allows you to track user events and AI interactions in your app. This documentation provides a brief overview of how to use the Rust SDK.\n- [Swift (Beta)](https://raindrop.ai/docs/sdk/swift.md): Track AI interactions, events, signals and traces from Swift on iOS, macOS, tvOS, watchOS, visionOS and Linux.\n- [Java (Beta)](https://raindrop.ai/docs/sdk/java.md): The Raindrop Java SDK lets you track user events and AI interactions from JVM applications. This page covers installation, event tracking, and manual tracing.\n- [HTTP API](https://raindrop.ai/docs/sdk/http-api.md): Here's how you can use the Raindrop API directly, without an SDK\n- [OpenTelemetry](https://raindrop.ai/docs/sdk/opentelemetry.md): Send OpenTelemetry traces to Raindrop over OTLP/HTTP\n- [Browser (JavaScript)](https://raindrop.ai/docs/sdk/browser.md): Minimal browser-safe SDK for tracking AI events via /v1/events from web apps.\n- [Overview](https://raindrop.ai/docs/integrations/overview.md): Connect Raindrop with your AI frameworks, cloud providers, and developer tools.\n- [Agent Skills](https://raindrop.ai/docs/integrations/skills.md): Install Raindrop's open-source skills so your AI coding assistant can set up, debug, and investigate Raindrop for you.\n- [Vercel AI SDK](https://raindrop.ai/docs/integrations/vercel-ai-sdk.md): Automatic tracking for the Vercel AI SDK. Wrap once, get events and traces for generateText, streamText, generateObject, and streamObject.\n- [TanStack AI](https://raindrop.ai/docs/integrations/tanstack-ai.md): Automatic tracking for TanStack AI chat middleware with Raindrop.\n- [Claude Agent SDK (Beta)](https://raindrop.ai/docs/integrations/claude-agent-sdk.md): Automatic tracking for the Claude Agent SDK. Wrap once, then pass eventMetadata() on query() calls to capture events and traces across the session.\n- [Cursor Agent SDK (Beta)](https://raindrop.ai/docs/integrations/cursor-agent-sdk.md): Automatic tracking for the Cursor Agent SDK. Wrap the SDK once to capture agent events and traces with per-context identity and routing metadata.\n- [Claude Managed Agents (Beta)](https://raindrop.ai/docs/integrations/claude-managed-agents.md): Automatic tracking for Claude Managed Agents. Wrap the Anthropic client once to capture events, traces, and tool call spans from managed agent sessions.\n- [Claude Platform OpenTelemetry (Beta)](https://raindrop.ai/docs/integrations/claude-opentelemetry.md): Send Claude Platform's native OpenTelemetry spans to Raindrop. Covers the Messages API, the Claude SDKs, and Claude Managed Agents, including self-hosted sandboxes.\n- [OpenAI Agents API (Beta)](https://raindrop.ai/docs/integrations/openai-managed-agents.md): Capture managed OpenAI Agents API turns, tool calls, and token usage in Raindrop.\n- [OpenAI Agents SDK (Beta)](https://raindrop.ai/docs/integrations/openai-agents.md): Automatic tracing for OpenAI Agents with Raindrop\n- [OpenRouter Agent SDK (Beta)](https://raindrop.ai/docs/integrations/openrouter-agent.md): Automatic tracing for OpenRouter Agent SDK applications with Raindrop\n- [Eve (Beta)](https://raindrop.ai/docs/integrations/eve.md): Automatic observability for Vercel's Eve agent framework. Drop in one file and every turn, sub-agent dispatch, model call, and tool call shows up in Raindrop and Workshop.\n- [LangChain (Beta)](https://raindrop.ai/docs/integrations/langchain.md): Automatic tracing for LangChain applications with Raindrop\n- [Mastra (Beta)](https://raindrop.ai/docs/integrations/mastra.md): Automatic tracing for Mastra agents with Raindrop\n- [DSPy (Beta)](https://raindrop.ai/docs/integrations/dspy.md): Automatic tracing for DSPy modules with Raindrop\n- [Pydantic AI (Beta)](https://raindrop.ai/docs/integrations/pydantic-ai.md): Automatic tracing for Pydantic AI agents with Raindrop\n- [Pi Agent (Beta)](https://raindrop.ai/docs/integrations/pi-agent.md): Automatic observability for Pi — the pi.dev coding agent and agent harness — with Raindrop\n- [Agno (Beta)](https://raindrop.ai/docs/integrations/agno.md): Automatic tracing for Agno agents, teams, and workflows with Raindrop\n- [Strands Agents (Beta)](https://raindrop.ai/docs/integrations/strands.md): Automatic tracing for Strands Agents with Raindrop — captures invocations, model calls, and tool usage via the hook system.\n- [Deep Agents (Beta)](https://raindrop.ai/docs/integrations/deepagents.md): Automatic tracing for LangChain Deep Agents workflows with Raindrop\n- [Google ADK](https://raindrop.ai/docs/integrations/google-adk.md): Automatic tracing for Google ADK agents, tools, and multi-step reasoning with Raindrop\n- [CrewAI (Beta)](https://raindrop.ai/docs/integrations/crewai.md): Automatic tracing for CrewAI multi-agent crews, tasks, and token usage with Raindrop\n- [AWS Bedrock (Beta)](https://raindrop.ai/docs/integrations/bedrock.md): Automatic tracing for AWS Bedrock applications with Raindrop\n- [Azure OpenAI (Beta)](https://raindrop.ai/docs/integrations/azure-openai.md): Automatic tracing for Azure OpenAI applications with Raindrop\n- [Vertex AI (Beta)](https://raindrop.ai/docs/integrations/vertex-ai.md): Automatic tracing for Google Vertex AI / Gen AI applications with Raindrop\n- [Temporal (Beta)](https://raindrop.ai/docs/integrations/temporal.md): Automatic tracing for Temporal workflows and activities with Raindrop\n- [Claude Code CLI (Beta)](https://raindrop.ai/docs/integrations/claude-code.md): Automatic observability for Claude Code CLI sessions. Install once, then every session, tool call, and prompt is tracked in Raindrop.\n- [Cursor (Beta)](https://raindrop.ai/docs/integrations/cursor.md): Automatic observability for Cursor IDE, cursor-agent CLI, and Cloud Agents. Install once, then every generation, tool call, and prompt is tracked in Raindrop.\n- [OpenCode (Beta)](https://raindrop.ai/docs/integrations/opencode.md): Integrate Raindrop with OpenCode to automatically capture coding sessions, messages, tool calls, and LLM responses in your dashboard.\n- [MCP Servers](https://raindrop.ai/docs/integrations/mcp.md): Track every tool call to your MCP server as a Raindrop event, grouped into the client session that made it.\n- [Events](https://raindrop.ai/docs/platform/events.md): Search and filter every user or agent interaction you've sent to Raindrop\n- [Signals](https://raindrop.ai/docs/platform/signals.md): Track any recurring behavior across your AI product and watch its rate over time.\n- [Users](https://raindrop.ai/docs/platform/users.md): Browse the people behind your events, filter by traits and signals, and open any user's conversation history.\n- [Issues](https://raindrop.ai/docs/platform/issues.md): Issue Detection surfaces broader distribution changes in your AI product so you can investigate, resolve, or ignore them.\n- [Briefs](https://raindrop.ai/docs/platform/briefs.md): An agent that investigates your data on a schedule and writes up what it found\n- [Datasets](https://raindrop.ai/docs/platform/datasets.md): Create shared collections of events, traces, and uploaded examples your team wants to keep.\n- [Dashboards](https://raindrop.ai/docs/platform/dashboards.md): Chart anything in your events and traces with saved, shareable RQL dashboards.\n- [Experiments](https://raindrop.ai/docs/platform/experiments.md): Compare cohorts of logged events and measure changes in signal rates\n- [Triage Agent](https://raindrop.ai/docs/platform/triage-agent.md): An agent that investigates your AI agents in Slack, on the web, and as an MCP.\n- [Change Reports](https://raindrop.ai/docs/platform/change-reports.md): A brief that connects to GitHub and monitors changes to your agent.\n- [Cost Tracking](https://raindrop.ai/docs/platform/cost-tracking.md): Understand and track your LLM spend in Raindrop.\n- [Self Diagnostics](https://raindrop.ai/docs/platform/self-diagnostics.md): Let your AI agents proactively report their own failures\n- [Projects](https://raindrop.ai/docs/platform/projects.md): Isolate ingest, dashboards, and AI features within an org using first-class projects.\n- [Roles and permissions](https://raindrop.ai/docs/platform/roles.md): What each organization role can do in Raindrop.\n- [Notifications](https://raindrop.ai/docs/platform/notifications.md): What Raindrop sends to Slack and email, and how to route it\n- [Signal Alerts](https://raindrop.ai/docs/platform/signal-alerts.md): Real-time Slack alerts when a signal crosses a threshold\n- [Plans and limits](https://raindrop.ai/docs/platform/plans.md): What Hobby, Pro, and Enterprise include, and what happens when you reach a limit.\n- [Build a self-healing loop](https://raindrop.ai/docs/cookbooks/self-healing-loop.md): Take one production issue from a Slack alert to a reviewed fix and verify that it worked in production.\n- [Workshop](https://raindrop.ai/docs/workshop/overview.md): A local debugger for AI agents. Watch every token, tool call, and decision stream into your browser as it happens.\n- [SDK](https://raindrop.ai/docs/query-api/sdk.md): TypeScript and Python SDKs for the Query API\n- [API Reference](https://raindrop.ai/docs/query-api/api-reference.md): Explore the Query API endpoints\n- [MCP Overview](https://raindrop.ai/docs/mcp/overview.md): Query your Raindrop data directly from your AI coding assistant.\n- [Query with RQL](https://raindrop.ai/docs/mcp/rql.md): Analyze Raindrop events, traces, users, and conversations through MCP.\n- [RQL reference](https://raindrop.ai/docs/mcp/rql-reference.md): Supported RQL tables, fields, and functions.\n- [Privacy and PII Redaction](https://raindrop.ai/docs/security/pii-redaction.md): Maintain deep observability while maintaining the privacy of your user's conversations\n- [Data Security and Privacy](https://raindrop.ai/docs/security/data-security-and-privacy.md): Raindrop's Commitment to Data Security and Privacy\n- [Privacy Policy](https://raindrop.ai/docs/security/privacy-policy.md)\n- [Terms of Service](https://raindrop.ai/docs/security/terms-of-use.md)\n- [Support](https://raindrop.ai/docs/support.md): Get help from the Raindrop team\n\n\nThis documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-83330bd1efb1b2f2",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Interesting — there's even a Pi Agent integration (docs/integrations/pi-agent.md). Let me fetch the introduction doc and the Python or TypeScript SDK docs to build an example. The user is asking for a "simple example." Keeping it lightweight: use the hosted product via the SDK. Build a small example that sends AI events to Raindrop via the Python SDK (or HTTP API). Caveat: I don't have an API key — can't actually run against a live account. I should build an example and note that running it requires an API key from app.raindrop.ai. Let me fetch the Python SDK docs and the HTTP API docs to get the exact quickstart.
The docs are substantial (there's even a Pi Agent integration). To create an accurate example, I'll grab the Python SDK and HTTP API quickstarts.
curl -sSL -m 15 https://raindrop.ai/docs/sdk/python.md -o /tmp/py.md; head -150 /tmp/py.md
> ## Documentation Index
> ## Documentation Index
> Fetch the complete documentation index at: https://raindrop.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.
# Python
> The Raindrop SDK allows you to track user events and AI interactions in your app. This documentation provides a brief overview of how to use the Python SDK.
### **Installation**
Install with your package manager of choice:
```sh pip theme={null}
pip install raindrop-ai
```
```sh uv theme={null}
uv add raindrop-ai
```
```sh poetry theme={null}
poetry add raindrop-ai
```
### **Configuration**
First, import the SDK and initialize it with your write key. You'll see your write key when you log into [app.raindrop.ai](https://app.raindrop.ai).
```python theme={null}
import os
import raindrop.analytics as raindrop
# Recommended: load from env var
raindrop.init(os.getenv("RAINDROP_WRITE_KEY") or "YOUR_WRITE_KEY")
# Optional: enable tracing integration for task/tool decorators
# raindrop.init("YOUR_WRITE_KEY", tracing_enabled=True)
# Optional: bypass OTEL exporters for interaction.track_tool() spans only
# raindrop.init("YOUR_WRITE_KEY", tracing_enabled=True, bypass_otel_for_tools=True)
```
#### Auto-instrumentation
When `tracing_enabled=True`, the SDK automatically instruments detected LLM
client libraries (OpenAI, Anthropic, Bedrock, etc.) so their calls appear as
spans in your traces.
> [!WARNING]
>
> Auto-instrumentation produces **spans**, not events. `tracing_enabled=True` alone shows
> nothing on the Events page. Wrap each request in [`begin()` / `finish()`](#partial-event-tracking-interactions)
> so its LLM calls attach to an event as spans. [`track_ai()`](#tracking-ai-interactions) also
> creates an event, but earlier spans don't link to it. Signals, issues, and users are all
> built on events.
You can use the `Instruments` enum to control which libraries are instrumented:
```python theme={null}
from raindrop.analytics import Instruments
# Only auto-instrument Anthropic
raindrop.init(
os.getenv("RAINDROP_WRITE_KEY"),
tracing_enabled=True,
instruments={Instruments.ANTHROPIC},
)
# Auto-instrument everything except OpenAI
raindrop.init(
os.getenv("RAINDROP_WRITE_KEY"),
tracing_enabled=True,
block_instruments={Instruments.OPENAI},
)
# Disable all auto-instrumentation (manual tracing still works)
raindrop.init(
os.getenv("RAINDROP_WRITE_KEY"),
tracing_enabled=True,
auto_instrument=False,
)
```
> [!TIP]
>
> When auto-instrumentation is enabled, the SDK automatically suppresses noisy
> warnings from instrumentors for providers you don't use (e.g. "Error initializing
> MistralAI instrumentor") and from OTel attribute type validation (e.g. provider
> SDKs using sentinel types like `Omit`). Enable `set_debug_logs(True)` to see
> these messages for troubleshooting.
### **Application Git provenance**
The SDK reports the instrumented application's revision as `raindrop.app.commit_sha`, with optional
`raindrop.app.commit_dirty` and `raindrop.app.branch`. Local Git discovery is enabled by default for
ordinary in-process applications, runs once in a bounded background thread, and never blocks event
calls, `flush()`, or `shutdown()`. An operation started while discovery is pending omits the metadata.
Automatic branch discovery is opt-in.
Local Git lookup requires nonblocking pipe support and is skipped on Windows with Python
earlier than 3.12. Explicit Git configuration and supported deployment/CI environment sources
remain available on those runtimes.
```python theme={null}
from raindrop import AppGitOptions
git_options: AppGitOptions = {
"commit_sha": "0123456789abcdef0123456789abcdef01234567",
"commit_dirty": False,
"branch": "main",
"detect_branch": True,
"source_directory": "/path/to/application",
"auto_detect": True,
}
raindrop.init(os.getenv("RAINDROP_WRITE_KEY"), app_git=git_options)
```
The same `app_git` option is available on `Raindrop(...)`. Use `app_git=False` to disable all
client-level enrichment without removing canonical properties explicitly supplied on an operation.
`app_git={"auto_detect": False}` or `RAINDROP_GIT_AUTO_DETECT=false` disables automatic build,
deployment, Git, and CI sources but retains explicit config, canonical operation properties, and
`RAINDROP_COMMIT_SHA`, `RAINDROP_COMMIT_DIRTY`, and `RAINDROP_BRANCH`. Set
`RAINDROP_GIT_SOURCE_DIRECTORY` to the application-under-test source and
`RAINDROP_GIT_DETECT_BRANCH=true` to enable branch discovery.
`RAINDROP_COMMIT_SHA` accepts a full 40- or 64-character hexadecimal SHA,
`RAINDROP_COMMIT_DIRTY` accepts `true` or `false`, and `RAINDROP_BRANCH` accepts an ordinary string.
Client config wins over those explicit environment values, which win over reliable build/deploy
metadata, local application Git, and provider-marked CI metadata.
A non-empty `source_directory` or `RAINDROP_GIT_SOURCE_DIRECTORY` is captured at client
initialization and exclusively selects the automatic AUT checkout after explicit config and
`RAINDROP_*` identity values. If the selected repository is unavailable, metadata stays absent;
ambient build, deployment, and CI identity is not substituted. Discovery remains background work,
so an operation started while it is pending keeps the absent snapshot.
Existing canonical event or owning-span properties always win, even when null, empty, or invalid;
unrelated properties are preserved. A per-operation SHA override does not inherit automatically
inferred branch or dirty state from a different source. Remote and coding integrations must receive
the AUT revision or an explicit AUT `source_directory` and must not inspect an observer or edited
workspace by default. This metadata is for reporting and filtering only; it does not select a
simulation checkout or rewrite release and SDK fields.
> [!NOTE]
>
> Feature availability depends on the coordinated SDK/base release. Python wrappers pinned to an
> older allowed base keep sending their existing telemetry, but do not add this metadata until the
> base package is upgraded. No version is documented until the release is published.
### **Projects**
Recorded tool call
{
"type": "tool_call",
"seq": 64,
"ts": "2026-10-30T21:50:56.589Z",
"name": "bash",
"turn": 1,
"input": {
"command": "curl -sSL -m 15 https://raindrop.ai/docs/sdk/python.md -o /tmp/py.md; head -150 /tmp/py.md"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-b770b2285c77845d",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 69,
"ts": "2026-10-30T21:50:57.375Z",
"turn": 1,
"output": {
"content": [
{
"text": "> ## Documentation Index\n> Fetch the complete documentation index at: https://raindrop.ai/docs/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Python\n\n> The Raindrop SDK allows you to track user events and AI interactions in your app. This documentation provides a brief overview of how to use the Python SDK.\n\n### **Installation**\n\nInstall with your package manager of choice:\n\n```sh pip theme={null}\npip install raindrop-ai\n```\n\n```sh uv theme={null}\nuv add raindrop-ai\n```\n\n```sh poetry theme={null}\npoetry add raindrop-ai\n```\n\n### **Configuration**\n\nFirst, import the SDK and initialize it with your write key. You'll see your write key when you log into [app.raindrop.ai](https://app.raindrop.ai).\n\n```python theme={null}\nimport os\nimport raindrop.analytics as raindrop\n\n# Recommended: load from env var\nraindrop.init(os.getenv(\"RAINDROP_WRITE_KEY\") or \"YOUR_WRITE_KEY\")\n\n# Optional: enable tracing integration for task/tool decorators\n# raindrop.init(\"YOUR_WRITE_KEY\", tracing_enabled=True)\n\n# Optional: bypass OTEL exporters for interaction.track_tool() spans only\n# raindrop.init(\"YOUR_WRITE_KEY\", tracing_enabled=True, bypass_otel_for_tools=True)\n```\n\n#### Auto-instrumentation\n\nWhen `tracing_enabled=True`, the SDK automatically instruments detected LLM\nclient libraries (OpenAI, Anthropic, Bedrock, etc.) so their calls appear as\nspans in your traces.\n\n> [!WARNING]\n>\n> Auto-instrumentation produces **spans**, not events. `tracing_enabled=True` alone shows\n> nothing on the Events page. Wrap each request in [`begin()` / `finish()`](#partial-event-tracking-interactions)\n> so its LLM calls attach to an event as spans. [`track_ai()`](#tracking-ai-interactions) also\n> creates an event, but earlier spans don't link to it. Signals, issues, and users are all\n> built on events.\n\nYou can use the `Instruments` enum to control which libraries are instrumented:\n\n```python theme={null}\nfrom raindrop.analytics import Instruments\n\n# Only auto-instrument Anthropic\nraindrop.init(\n os.getenv(\"RAINDROP_WRITE_KEY\"),\n tracing_enabled=True,\n instruments={Instruments.ANTHROPIC},\n)\n\n# Auto-instrument everything except OpenAI\nraindrop.init(\n os.getenv(\"RAINDROP_WRITE_KEY\"),\n tracing_enabled=True,\n block_instruments={Instruments.OPENAI},\n)\n\n# Disable all auto-instrumentation (manual tracing still works)\nraindrop.init(\n os.getenv(\"RAINDROP_WRITE_KEY\"),\n tracing_enabled=True,\n auto_instrument=False,\n)\n```\n\n> [!TIP]\n>\n> When auto-instrumentation is enabled, the SDK automatically suppresses noisy\n> warnings from instrumentors for providers you don't use (e.g. \"Error initializing\n> MistralAI instrumentor\") and from OTel attribute type validation (e.g. provider\n> SDKs using sentinel types like `Omit`). Enable `set_debug_logs(True)` to see\n> these messages for troubleshooting.\n\n### **Application Git provenance**\n\nThe SDK reports the instrumented application's revision as `raindrop.app.commit_sha`, with optional\n`raindrop.app.commit_dirty` and `raindrop.app.branch`. Local Git discovery is enabled by default for\nordinary in-process applications, runs once in a bounded background thread, and never blocks event\ncalls, `flush()`, or `shutdown()`. An operation started while discovery is pending omits the metadata.\nAutomatic branch discovery is opt-in.\n\nLocal Git lookup requires nonblocking pipe support and is skipped on Windows with Python\nearlier than 3.12. Explicit Git configuration and supported deployment/CI environment sources\nremain available on those runtimes.\n\n```python theme={null}\nfrom raindrop import AppGitOptions\n\ngit_options: AppGitOptions = {\n \"commit_sha\": \"0123456789abcdef0123456789abcdef01234567\",\n \"commit_dirty\": False,\n \"branch\": \"main\",\n \"detect_branch\": True,\n \"source_directory\": \"/path/to/application\",\n \"auto_detect\": True,\n}\nraindrop.init(os.getenv(\"RAINDROP_WRITE_KEY\"), app_git=git_options)\n```\n\nThe same `app_git` option is available on `Raindrop(...)`. Use `app_git=False` to disable all\nclient-level enrichment without removing canonical properties explicitly supplied on an operation.\n`app_git={\"auto_detect\": False}` or `RAINDROP_GIT_AUTO_DETECT=false` disables automatic build,\ndeployment, Git, and CI sources but retains explicit config, canonical operation properties, and\n`RAINDROP_COMMIT_SHA`, `RAINDROP_COMMIT_DIRTY`, and `RAINDROP_BRANCH`. Set\n`RAINDROP_GIT_SOURCE_DIRECTORY` to the application-under-test source and\n`RAINDROP_GIT_DETECT_BRANCH=true` to enable branch discovery.\n`RAINDROP_COMMIT_SHA` accepts a full 40- or 64-character hexadecimal SHA,\n`RAINDROP_COMMIT_DIRTY` accepts `true` or `false`, and `RAINDROP_BRANCH` accepts an ordinary string.\nClient config wins over those explicit environment values, which win over reliable build/deploy\nmetadata, local application Git, and provider-marked CI metadata.\n\nA non-empty `source_directory` or `RAINDROP_GIT_SOURCE_DIRECTORY` is captured at client\ninitialization and exclusively selects the automatic AUT checkout after explicit config and\n`RAINDROP_*` identity values. If the selected repository is unavailable, metadata stays absent;\nambient build, deployment, and CI identity is not substituted. Discovery remains background work,\nso an operation started while it is pending keeps the absent snapshot.\n\nExisting canonical event or owning-span properties always win, even when null, empty, or invalid;\nunrelated properties are preserved. A per-operation SHA override does not inherit automatically\ninferred branch or dirty state from a different source. Remote and coding integrations must receive\nthe AUT revision or an explicit AUT `source_directory` and must not inspect an observer or edited\nworkspace by default. This metadata is for reporting and filtering only; it does not select a\nsimulation checkout or rewrite release and SDK fields.\n\n> [!NOTE]\n>\n> Feature availability depends on the coordinated SDK/base release. Python wrappers pinned to an\n> older allowed base keep sending their existing telemetry, but do not add this metadata until the\n> base package is upgraded. No version is documented until the release is published.\n\n### **Projects**\n\n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-b770b2285c77845d",
"is_error": false,
"tool_kind": "shell"
}curl -sSL -m 15 https://raindrop.ai/docs/sdk/http-api.md | head -120
> ## Documentation Index
> ## Documentation Index
> Fetch the complete documentation index at: https://raindrop.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.
# HTTP API
> Here's how you can use the Raindrop API directly, without an SDK
### Base URL
```
https://api.raindrop.ai/v1
```
### Authentication
All API requests must include your SDK write key in the `Authorization` header:
```
Authorization: Bearer YOUR_WRITE_KEY
```
You can get your API key by logging in to [app.raindrop.ai](https://app.raindrop.ai) (bottom of the tab bar!).
Use your write key for these ingest endpoints. The Query API uses a separate Query API key; see the [Query API reference](https://raindrop.ai/docs/query-api/api-reference.md).
### Selecting a project
To send data to a specific [project](https://raindrop.ai/docs/platform/projects.md), include its slug in the `X-Raindrop-Project-Id` header:
```
X-Raindrop-Project-Id: support-prod
```
When the header is omitted, empty, or set to `default`, the request resolves to the default **Production** project, which is the existing behavior. A new slug your org hasn't created yet is accepted and starts collecting data, up to a per-org limit; an archived slug, or a new slug beyond that limit, is rejected with a `403`, and a malformed slug returns a `400`. See [Projects](https://raindrop.ai/docs/platform/projects.md) for the full behavior table.
### Endpoints
#### Track Event
Track any event, including AI interactions and normal analytics events.
**POST** `/events/track`
**Request Body**
(Must be provided as an array of objects)
| Field | Type | Description |
| - | - | - |
| `user_id` | string | The unique identifier of the user |
| `event` | string | The name of the event you want to track |
| `properties` | object | (Optional) Additional properties associated with the event |
| `attachments` | array | (Optional) Array of attachments to include with the event |
| `ai_data` | object | (Optional) Object containing AI-specific data for AI events. **If provided, either input or output (or both) is required** |
| `ai_data.model` | string | (Optional) The name of the AI model used |
| `ai_data.input` | string | (Optional) The input provided by the user |
| `ai_data.output` | string | (Optional) The output generated by the AI |
| `ai_data.convo_id` | string | (Optional) The conversation ID associated with the interaction |
| `ai_data.tool_calls` | array | (Optional) Tools invoked in this turn. Each item needs a `name`. Arguments, result, status, and timestamps are optional. |
**Example Request - AI Interaction**
One event is one turn: user input, the tools the agent ran, and the assistant output.
```json theme={null}
POST /v1/events/track HTTP/1.1
Host: api.raindrop.ai
Authorization: Bearer YOUR_WRITE_KEY
Content-Type: application/json
[{
"user_id": "ops-bot",
"event": "ai_interaction",
"event_id": "turn_1842",
"properties": {
"agent": "checkout-sre"
},
"ai_data": {
"model": "gpt_5",
"input": "Why did checkout fail for order 1842?",
"output": "Stripe declined the card (insufficient_funds). I paged #checkout-oncall.",
"convo_id": "inc-1842",
"tool_calls": [
{
"name": "search_logs",
"arguments": { "query": "order_id:1842 status:failed", "since": "1h" },
"result": { "hits": 3, "last_error": "card_declined" },
"status": "ok",
"call_id": "call_1"
},
{
"name": "get_order",
"arguments": { "order_id": "1842" },
"status": "error",
"error": "orders API timed out after 5s",
"call_id": "call_2"
},
{
"name": "get_order",
"arguments": { "order_id": "1842" },
"result": { "amount_cents": 4200, "processor": "stripe", "decline_code": "insufficient_funds" },
"status": "ok",
"call_id": "call_3"
},
{
"name": "page_oncall",
"arguments": { "channel": "#checkout-oncall", "order_id": "1842" },
"result": { "ok": true, "message_ts": "1725120000.000200" },
"status": "ok",
"call_id": "call_4"
}
]
}
}]
```
**Response**
All authorized requests will return a `204 Success` status code. For debugging failures, contact us: [support@raindrop.ai](mailto:support@raindrop.ai).
Recorded tool call
{
"type": "tool_call",
"seq": 66,
"ts": "2026-10-30T21:50:56.589Z",
"name": "bash",
"turn": 1,
"input": {
"command": "curl -sSL -m 15 https://raindrop.ai/docs/sdk/http-api.md | head -120"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-a8ea807cded721ad",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 68,
"ts": "2026-10-30T21:50:57.375Z",
"turn": 1,
"output": {
"content": [
{
"text": "> ## Documentation Index\n> Fetch the complete documentation index at: https://raindrop.ai/docs/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# HTTP API\n\n> Here's how you can use the Raindrop API directly, without an SDK\n\n### Base URL\n\n```\nhttps://api.raindrop.ai/v1\n```\n\n### Authentication\n\nAll API requests must include your SDK write key in the `Authorization` header:\n\n```\nAuthorization: Bearer YOUR_WRITE_KEY\n```\n\nYou can get your API key by logging in to [app.raindrop.ai](https://app.raindrop.ai) (bottom of the tab bar!).\n\nUse your write key for these ingest endpoints. The Query API uses a separate Query API key; see the [Query API reference](https://raindrop.ai/docs/query-api/api-reference.md).\n\n### Selecting a project\n\nTo send data to a specific [project](https://raindrop.ai/docs/platform/projects.md), include its slug in the `X-Raindrop-Project-Id` header:\n\n```\nX-Raindrop-Project-Id: support-prod\n```\n\nWhen the header is omitted, empty, or set to `default`, the request resolves to the default **Production** project, which is the existing behavior. A new slug your org hasn't created yet is accepted and starts collecting data, up to a per-org limit; an archived slug, or a new slug beyond that limit, is rejected with a `403`, and a malformed slug returns a `400`. See [Projects](https://raindrop.ai/docs/platform/projects.md) for the full behavior table.\n\n### Endpoints\n\n#### Track Event\n\nTrack any event, including AI interactions and normal analytics events.\n\n**POST** `/events/track`\n\n**Request Body**\n\n(Must be provided as an array of objects)\n\n| Field | Type | Description |\n| - | - | - |\n| `user_id` | string | The unique identifier of the user |\n| `event` | string | The name of the event you want to track |\n| `properties` | object | (Optional) Additional properties associated with the event |\n| `attachments` | array | (Optional) Array of attachments to include with the event |\n| `ai_data` | object | (Optional) Object containing AI-specific data for AI events. **If provided, either input or output (or both) is required** |\n| `ai_data.model` | string | (Optional) The name of the AI model used |\n| `ai_data.input` | string | (Optional) The input provided by the user |\n| `ai_data.output` | string | (Optional) The output generated by the AI |\n| `ai_data.convo_id` | string | (Optional) The conversation ID associated with the interaction |\n| `ai_data.tool_calls` | array | (Optional) Tools invoked in this turn. Each item needs a `name`. Arguments, result, status, and timestamps are optional. |\n\n**Example Request - AI Interaction**\n\nOne event is one turn: user input, the tools the agent ran, and the assistant output.\n\n```json theme={null}\nPOST /v1/events/track HTTP/1.1\nHost: api.raindrop.ai\nAuthorization: Bearer YOUR_WRITE_KEY\nContent-Type: application/json\n\n[{\n \"user_id\": \"ops-bot\",\n \"event\": \"ai_interaction\",\n \"event_id\": \"turn_1842\",\n \"properties\": {\n \"agent\": \"checkout-sre\"\n },\n \"ai_data\": {\n \"model\": \"gpt_5\",\n \"input\": \"Why did checkout fail for order 1842?\",\n \"output\": \"Stripe declined the card (insufficient_funds). I paged #checkout-oncall.\",\n \"convo_id\": \"inc-1842\",\n \"tool_calls\": [\n {\n \"name\": \"search_logs\",\n \"arguments\": { \"query\": \"order_id:1842 status:failed\", \"since\": \"1h\" },\n \"result\": { \"hits\": 3, \"last_error\": \"card_declined\" },\n \"status\": \"ok\",\n \"call_id\": \"call_1\"\n },\n {\n \"name\": \"get_order\",\n \"arguments\": { \"order_id\": \"1842\" },\n \"status\": \"error\",\n \"error\": \"orders API timed out after 5s\",\n \"call_id\": \"call_2\"\n },\n {\n \"name\": \"get_order\",\n \"arguments\": { \"order_id\": \"1842\" },\n \"result\": { \"amount_cents\": 4200, \"processor\": \"stripe\", \"decline_code\": \"insufficient_funds\" },\n \"status\": \"ok\",\n \"call_id\": \"call_3\"\n },\n {\n \"name\": \"page_oncall\",\n \"arguments\": { \"channel\": \"#checkout-oncall\", \"order_id\": \"1842\" },\n \"result\": { \"ok\": true, \"message_ts\": \"1725120000.000200\" },\n \"status\": \"ok\",\n \"call_id\": \"call_4\"\n }\n ]\n }\n}]\n```\n\n**Response**\n\nAll authorized requests will return a `204 Success` status code. For debugging failures, contact us: [support@raindrop.ai](mailto:support@raindrop.ai).\n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-a8ea807cded721ad",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Got enough info to build a simple example. To keep it lightweight, should I use the Python SDK (pip install raindrop-ai), or go with plain HTTP? Without a write key I can't send actual data, but I can write the sample and validate the SDK import locally. Let me grab the event tracking section (track_ai) from the Python docs and build an accurate example. After that, create a small project at /sandbox/repo: for instance raindrop_example/agent_example.py plus a README. Install the SDK and verify that the script at least runs structurally (initialization without a key should be safe; sending without a key will fail — can run it with a dummy key and show that network calls happen gracefully; though that might generate junky network requests. The API should return 401 with an invalid key, but that's fine).
Let me check the track_ai section of the Python docs.
I have everything I need. Let me grab the Python SDK's event-tracking API shape, then build the example.
grep -n -A30 "### Tracking AI Interactions" /tmp/py.md | head -60; grep -n -B2 -A20 "track_ai(" /tmp/py.md | head -5051-> Auto-instrumentation produces **spans**, not events. `tracing_enabled=True` alone shows
51-> Auto-instrumentation produces **spans**, not events. `tracing_enabled=True` alone shows
52-> nothing on the Events page. Wrap each request in [`begin()` / `finish()`](#partial-event-tracking-interactions)
53:> so its LLM calls attach to an event as spans. [`track_ai()`](#tracking-ai-interactions) also
54-> creates an event, but earlier spans don't link to it. Signals, issues, and users are all
55-> built on events.
56-
57-You can use the `Instruments` enum to control which libraries are instrumented:
58-
59-```python theme={null}
60-from raindrop.analytics import Instruments
61-
62-# Only auto-instrument Anthropic
63-raindrop.init(
64- os.getenv("RAINDROP_WRITE_KEY"),
65- tracing_enabled=True,
66- instruments={Instruments.ANTHROPIC},
67-)
68-
69-# Auto-instrument everything except OpenAI
70-raindrop.init(
71- os.getenv("RAINDROP_WRITE_KEY"),
72- tracing_enabled=True,
73- block_instruments={Instruments.OPENAI},
--
178-interaction.finish(output="...") # -> billing-prod
179-
180:rd_support.track_ai(user_id="u1", event="support-chat", input="q", output="a")
181-rd_support.track_signal(event_id=eid, name="thumbs_up") # -> support-prod
182-```
183-
184-Each client owns its configuration and delivery pipeline, so concurrent
185-requests handled by different agents route independently — there is no shared
186-mutable project state to race on. The module-level API keeps working
187-unchanged; it is simply the default, process-wide client.
188-
189-Per-instance configuration and lifecycle: `rd.flush()` / `rd.shutdown()`
190-drain that client only (an `atexit` hook drains every client at process
191-exit under one shared deadline); `Raindrop(max_text_field_chars=...)` caps
192-that client's payload fields without affecting other clients (module-level
193-`init(max_text_field_chars=...)` still sets the process-wide default,
194-1,000,000 characters per field); and `bypass_otel_for_tools=True` ships
195-`interaction.track_tool()` spans on the client's own connection, so they
196-route per instance with no shared-pipeline caveats.
197-
198-**Tracing across multiple projects.** OpenTelemetry auto-instrumentation is
199-shared per process: the first client constructed with `tracing_enabled=True`
200-initializes it, and later clients share the pipeline. `begin()` scopes spans
--
239-
240-```python theme={null}
Recorded tool call
{
"type": "tool_call",
"seq": 73,
"ts": "2026-10-30T21:51:00.594Z",
"name": "bash",
"turn": 1,
"input": {
"command": "grep -n -A30 \"### Tracking AI Interactions\" /tmp/py.md | head -60; grep -n -B2 -A20 \"track_ai(\" /tmp/py.md | head -50"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-acb265ddb1cbf1a4",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 74,
"ts": "2026-10-30T21:51:00.594Z",
"turn": 1,
"output": {
"content": [
{
"text": "51-> Auto-instrumentation produces **spans**, not events. `tracing_enabled=True` alone shows\n52-> nothing on the Events page. Wrap each request in [`begin()` / `finish()`](#partial-event-tracking-interactions)\n53:> so its LLM calls attach to an event as spans. [`track_ai()`](#tracking-ai-interactions) also\n54-> creates an event, but earlier spans don't link to it. Signals, issues, and users are all\n55-> built on events.\n56-\n57-You can use the `Instruments` enum to control which libraries are instrumented:\n58-\n59-```python theme={null}\n60-from raindrop.analytics import Instruments\n61-\n62-# Only auto-instrument Anthropic\n63-raindrop.init(\n64- os.getenv(\"RAINDROP_WRITE_KEY\"),\n65- tracing_enabled=True,\n66- instruments={Instruments.ANTHROPIC},\n67-)\n68-\n69-# Auto-instrument everything except OpenAI\n70-raindrop.init(\n71- os.getenv(\"RAINDROP_WRITE_KEY\"),\n72- tracing_enabled=True,\n73- block_instruments={Instruments.OPENAI},\n--\n178-interaction.finish(output=\"...\") # -> billing-prod\n179-\n180:rd_support.track_ai(user_id=\"u1\", event=\"support-chat\", input=\"q\", output=\"a\")\n181-rd_support.track_signal(event_id=eid, name=\"thumbs_up\") # -> support-prod\n182-```\n183-\n184-Each client owns its configuration and delivery pipeline, so concurrent\n185-requests handled by different agents route independently — there is no shared\n186-mutable project state to race on. The module-level API keeps working\n187-unchanged; it is simply the default, process-wide client.\n188-\n189-Per-instance configuration and lifecycle: `rd.flush()` / `rd.shutdown()`\n190-drain that client only (an `atexit` hook drains every client at process\n191-exit under one shared deadline); `Raindrop(max_text_field_chars=...)` caps\n192-that client's payload fields without affecting other clients (module-level\n193-`init(max_text_field_chars=...)` still sets the process-wide default,\n194-1,000,000 characters per field); and `bypass_otel_for_tools=True` ships\n195-`interaction.track_tool()` spans on the client's own connection, so they\n196-route per instance with no shared-pipeline caveats.\n197-\n198-**Tracing across multiple projects.** OpenTelemetry auto-instrumentation is\n199-shared per process: the first client constructed with `tracing_enabled=True`\n200-initializes it, and later clients share the pipeline. `begin()` scopes spans\n--\n239-\n240-```python theme={null}\n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-acb265ddb1cbf1a4",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
I'll look for the exact signature of track_ai within the document.
grep -n -A25 '^### \*\*Tracking AI' /tmp/py.md | head -40; grep -n "track_ai" /tmp/py.md
223:### **Tracking AI Interactions**
223:### **Tracking AI Interactions**
224-
225-To track AI interactions, you can use the `track_ai` function. It takes the following parameters:
226-
227-* `user_id` (str): The unique identifier of the user.
228-* `event` (str): The name of the AI event you want to track.
229-* `event_id` (Optional\[str]): A unique identifier for this specific event. If not provided, a UUID will be generated.
230-* `model` (Optional\[str]): The name of the AI model used.
231-* `input` (Optional\[str]): The input provided to the AI model. (Either this or `output` is required if AI data is logged)
232-* `output` (Optional\[str]): The output generated by the AI. (Either this or `input` is required if AI data is logged)
233-* `convo_id` (Optional\[str]): The conversation ID associated with the interaction. Helpful in AI apps with multiple conversations per user (e.g. ChatGPT).
234-* `properties` (Optional\[Dict\[str, Any]]): Additional properties associated with the AI event.
235-* `timestamp` (Optional\[str]): An ISO 8601 formatted timestamp for the event. If not provided, the SDK generates a UTC timestamp.
236-* `attachments` (Optional\[List\[Attachment]]): A list of attachments associated with the event. See the Attachments section below.
237-
238-**Example usage:**
239-
240-```python theme={null}
241-raindrop.track_ai(
242- user_id="user123",
243- event="user_message",
244- model="gpt_4",
245- input="What is the weather like today?", # this or output is required
246- output="The weather is sunny and warm.", # this or input is required
247- convo_id="conv789", # optional
248- properties={
53:> so its LLM calls attach to an event as spans. [`track_ai()`](#tracking-ai-interactions) also
180:rd_support.track_ai(user_id="u1", event="support-chat", input="q", output="a")
220:> events (`track_ai`, `begin`/`finish`, signals, `identify`) always ship with
225:To track AI interactions, you can use the `track_ai` function. It takes the following parameters:
241:raindrop.track_ai(
439:For functions like `track_ai` and `track_signal`, you can optionally provide a `timestamp` parameter (an ISO 8601 formatted string) if you need to specify a custom time for the event. If not provided, the SDK generates a UTC timestamp at the moment of the call.
Recorded tool call
{
"type": "tool_call",
"seq": 77,
"ts": "2026-10-30T21:51:03.130Z",
"name": "bash",
"turn": 1,
"input": {
"command": "grep -n -A25 '^### \\*\\*Tracking AI' /tmp/py.md | head -40; grep -n \"track_ai\" /tmp/py.md"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-a57c9c32a36e7bff",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 78,
"ts": "2026-10-30T21:51:03.130Z",
"turn": 1,
"output": {
"content": [
{
"text": "223:### **Tracking AI Interactions**\n224-\n225-To track AI interactions, you can use the `track_ai` function. It takes the following parameters:\n226-\n227-* `user_id` (str): The unique identifier of the user.\n228-* `event` (str): The name of the AI event you want to track.\n229-* `event_id` (Optional\\[str]): A unique identifier for this specific event. If not provided, a UUID will be generated.\n230-* `model` (Optional\\[str]): The name of the AI model used.\n231-* `input` (Optional\\[str]): The input provided to the AI model. (Either this or `output` is required if AI data is logged)\n232-* `output` (Optional\\[str]): The output generated by the AI. (Either this or `input` is required if AI data is logged)\n233-* `convo_id` (Optional\\[str]): The conversation ID associated with the interaction. Helpful in AI apps with multiple conversations per user (e.g. ChatGPT).\n234-* `properties` (Optional\\[Dict\\[str, Any]]): Additional properties associated with the AI event.\n235-* `timestamp` (Optional\\[str]): An ISO 8601 formatted timestamp for the event. If not provided, the SDK generates a UTC timestamp.\n236-* `attachments` (Optional\\[List\\[Attachment]]): A list of attachments associated with the event. See the Attachments section below.\n237-\n238-**Example usage:**\n239-\n240-```python theme={null}\n241-raindrop.track_ai(\n242- user_id=\"user123\",\n243- event=\"user_message\",\n244- model=\"gpt_4\",\n245- input=\"What is the weather like today?\", # this or output is required\n246- output=\"The weather is sunny and warm.\", # this or input is required\n247- convo_id=\"conv789\", # optional\n248- properties={\n53:> so its LLM calls attach to an event as spans. [`track_ai()`](#tracking-ai-interactions) also\n180:rd_support.track_ai(user_id=\"u1\", event=\"support-chat\", input=\"q\", output=\"a\")\n220:> events (`track_ai`, `begin`/`finish`, signals, `identify`) always ship with\n225:To track AI interactions, you can use the `track_ai` function. It takes the following parameters:\n241:raindrop.track_ai(\n439:For functions like `track_ai` and `track_signal`, you can optionally provide a `timestamp` parameter (an ISO 8601 formatted string) if you need to specify a custom time for the event. If not provided, the SDK generates a UTC timestamp at the moment of the call.\n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-a57c9c32a36e7bff",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
I'll create an example project. What to create:
raindrop_example/inside /sandbox/reposupport_agent_example.py— a small pseudo support agent that tracks events to Raindrop using the Python SDK (track_ai,track_signal, andbegin()/finish()if needed). Keep it simple: init, track_ai for 1 turn, track_signal, flush/shutdown.README.md— setup instructions.
- Install the SDK and verify that the script works (with a dummy key — the API will return 401, but that's fine. The script shouldn't crash). Install
pip install raindrop-aiand run it with a placeholder key to confirm that the imports and API usage are correct.
Building the sample project right now — a small mock support agent that reports AI interactions and signals to Raindrop via the Python SDK.
File edits
1 file
Writtenraindrop_example/support_agent_example.pyView changes
/sandbox/repo/raindrop_example/support_agent_example.py
Written content · previous contents were not recorded
"""Simple Raindrop.ai example: a mock support agent that reports itsinteractions to Raindrop (https://raindrop.ai) using the officialPython SDK (`pip install raindrop-ai`).Setup:1. Create a free account at https://app.raindrop.ai/signup2. Copy your write key (bottom of the tab bar in the app)3. export RAINDROP_WRITE_KEY="..."4. python support_agent_example.pyThen open https://app.raindrop.ai -> Events to see the turns you sent.Raindrop's issue detection, signals, and dashboards are all built onthese events."""import osimport uuidimport raindrop.analytics as raindropWRITE_KEY = os.getenv("RAINDROP_WRITE_KEY")if not WRITE_KEY:raise SystemExit("Set RAINDROP_WRITE_KEY first (get it from https://app.raindrop.ai).")# One init per process. Add tracing_enabled=True to also capture spans# from auto-instrumented LLM clients (OpenAI, Anthropic, Bedrock, ...).raindrop.init(WRITE_KEY)def fake_support_agent(user_question: str) -> dict:"""Pretend agent: returns a canned answer plus the tools it 'ran'."""return {"answer": f"Your order #1842 failed because the card was declined. "f"I've retried the charge and it went through.","tool_calls": ["get_order", "retry_charge"],"model": "gpt-5",}def handle_turn(user_id: str, convo_id: str, question: str) -> None:"""One 'event' in Raindrop = one turn: user input + agent output."""result = fake_support_agent(question)# 1. Track the AI interaction (the core unit of data in Raindrop).event_id = str(uuid.uuid4())raindrop.track_ai(user_id=user_id,event="support_chat",event_id=event_id,model=result["model"],input=question,output=result["answer"],convo_id=convo_id,properties={"agent": "support-agent","tools_used": result["tool_calls"],"env": "demo",},)# 2. Track a signal on that event (custom behavior classifier input).# Signals let you chart rates like "thumbs up %" over time and# alert when they cross a threshold.raindrop.track_signal(event_id=event_id, name="charge_retried")if __name__ == "__main__":user_id = "demo-user-1"convo_id = "convo-demo-1"turns = ["Why did my payment fail?","Can you retry the charge?","Thanks, that worked!",]for question in turns:handle_turn(user_id, convo_id, question)print(f"tracked turn: {question!r}")# Drain the SDK's background queue before exiting.raindrop.flush()raindrop.shutdown()print("done — check https://app.raindrop.ai -> Events")
Source: write · chatcmpl-tool-827e652f3632d9f6
Recorded tool call
{
"type": "tool_call",
"seq": 81,
"ts": "2026-10-30T21:51:14.484Z",
"name": "write",
"turn": 1,
"input": {
"path": "/sandbox/repo/raindrop_example/support_agent_example.py",
"content": "\"\"\"\nSimple Raindrop.ai example: a mock support agent that reports its\ninteractions to Raindrop (https://raindrop.ai) using the official\nPython SDK (`pip install raindrop-ai`).\n\nSetup:\n 1. Create a free account at https://app.raindrop.ai/signup\n 2. Copy your write key (bottom of the tab bar in the app)\n 3. export RAINDROP_WRITE_KEY=\"...\"\n 4. python support_agent_example.py\n\nThen open https://app.raindrop.ai -> Events to see the turns you sent.\nRaindrop's issue detection, signals, and dashboards are all built on\nthese events.\n\"\"\"\n\nimport os\nimport uuid\n\nimport raindrop.analytics as raindrop\n\nWRITE_KEY = os.getenv(\"RAINDROP_WRITE_KEY\")\nif not WRITE_KEY:\n raise SystemExit(\n \"Set RAINDROP_WRITE_KEY first (get it from https://app.raindrop.ai).\"\n )\n\n# One init per process. Add tracing_enabled=True to also capture spans\n# from auto-instrumented LLM clients (OpenAI, Anthropic, Bedrock, ...).\nraindrop.init(WRITE_KEY)\n\n\ndef fake_support_agent(user_question: str) -> dict:\n \"\"\"Pretend agent: returns a canned answer plus the tools it 'ran'.\"\"\"\n return {\n \"answer\": f\"Your order #1842 failed because the card was declined. \"\n f\"I've retried the charge and it went through.\",\n \"tool_calls\": [\"get_order\", \"retry_charge\"],\n \"model\": \"gpt-5\",\n }\n\n\ndef handle_turn(user_id: str, convo_id: str, question: str) -> None:\n \"\"\"One 'event' in Raindrop = one turn: user input + agent output.\"\"\"\n result = fake_support_agent(question)\n\n # 1. Track the AI interaction (the core unit of data in Raindrop).\n event_id = str(uuid.uuid4())\n raindrop.track_ai(\n user_id=user_id,\n event=\"support_chat\",\n event_id=event_id,\n model=result[\"model\"],\n input=question,\n output=result[\"answer\"],\n convo_id=convo_id,\n properties={\n \"agent\": \"support-agent\",\n \"tools_used\": result[\"tool_calls\"],\n \"env\": \"demo\",\n },\n )\n\n # 2. Track a signal on that event (custom behavior classifier input).\n # Signals let you chart rates like \"thumbs up %\" over time and\n # alert when they cross a threshold.\n raindrop.track_signal(event_id=event_id, name=\"charge_retried\")\n\n\nif __name__ == \"__main__\":\n user_id = \"demo-user-1\"\n convo_id = \"convo-demo-1\"\n\n turns = [\n \"Why did my payment fail?\",\n \"Can you retry the charge?\",\n \"Thanks, that worked!\",\n ]\n for question in turns:\n handle_turn(user_id, convo_id, question)\n print(f\"tracked turn: {question!r}\")\n\n # Drain the SDK's background queue before exiting.\n raindrop.flush()\n raindrop.shutdown()\n print(\"done — check https://app.raindrop.ai -> Events\")\n"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-827e652f3632d9f6",
"tool_kind": "file_edit"
}Recorded tool result
{
"type": "tool_result",
"seq": 83,
"ts": "2026-10-30T21:51:14.484Z",
"turn": 1,
"output": {
"content": [
{
"text": "Successfully wrote 2722 bytes to /sandbox/repo/raindrop_example/support_agent_example.py",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-827e652f3632d9f6",
"is_error": false,
"tool_kind": "file_edit"
}File edits
1 file
Writtenraindrop_example/README.mdView changes
/sandbox/repo/raindrop_example/README.md
Written content · previous contents were not recorded
# Raindrop.ai — simple example[Raindrop](https://raindrop.ai) is a hosted monitoring platform for AI agents("Sentry for agents"): you send it events/traces from your agent, and it doesissue detection, signals, dashboards, and a triage agent. There is nothing torun locally — everything goes to their hosted API via the SDK.## Quickstart```bashpip install raindrop-aiexport RAINDROP_WRITE_KEY="..." # from https://app.raindrop.ai (bottom of tab bar)python support_agent_example.py```The script tracks 3 mock support-agent turns (`track_ai`) plus a signal(`track_signal`), then flushes. View them at https://app.raindrop.ai → Events.## Notes- One **event** = one turn (user message + agent response, incl. tool calls).- The SDK posts to `https://api.raindrop.ai/v1/events/track` in the background;there is also a plain HTTP API and SDKs for TypeScript, Go, Rust, Swift, Java.- Framework integrations exist for OpenAI Agents, LangChain, Vercel AI SDK,Mastra, CrewAI, Pydantic AI, Claude Agent SDK, and more (wrap once, getevents + traces automatically).- Add `tracing_enabled=True` to `raindrop.init()` to auto-instrument LLMclients as spans, and wrap turns in `begin()`/`finish()` to attach them.## Pricing (from raindrop.ai, checked today)| Plan | Price | Key limits ||---|---|---|| Hobby | $0/mo | 1,000 events/mo, 14-day retention, 1 custom signal, 15 agent messages/mo. Includes tracing & search, Slack notifications, MCP & Query SDK. || Pro | $299/mo + usage | $0.003/event up to 1M, then $0.002/event. Adds realtime issue detection, triage agent, experiments, semantic search, unlimited retention, 10 custom signals, 500 agent messages/mo. 14-day free trial. || Enterprise | Custom | SSO/SAML, audit logs, SLAs, Snowflake/BigQuery exports, unlimited agent messages/signals. Self-hosting beta available. |"Agent messages" = messages to Raindrop's own AI (triage agent/briefs), notyour ingested events. Ingest is metered per event.
Source: write · chatcmpl-tool-9d87864677b12e42
Recorded tool call
{
"type": "tool_call",
"seq": 82,
"ts": "2026-10-30T21:51:14.484Z",
"name": "write",
"turn": 1,
"input": {
"path": "/sandbox/repo/raindrop_example/README.md",
"content": "# Raindrop.ai — simple example\n\n[Raindrop](https://raindrop.ai) is a hosted monitoring platform for AI agents\n(\"Sentry for agents\"): you send it events/traces from your agent, and it does\nissue detection, signals, dashboards, and a triage agent. There is nothing to\nrun locally — everything goes to their hosted API via the SDK.\n\n## Quickstart\n\n```bash\npip install raindrop-ai\nexport RAINDROP_WRITE_KEY=\"...\" # from https://app.raindrop.ai (bottom of tab bar)\npython support_agent_example.py\n```\n\nThe script tracks 3 mock support-agent turns (`track_ai`) plus a signal\n(`track_signal`), then flushes. View them at https://app.raindrop.ai → Events.\n\n## Notes\n\n- One **event** = one turn (user message + agent response, incl. tool calls).\n- The SDK posts to `https://api.raindrop.ai/v1/events/track` in the background;\n there is also a plain HTTP API and SDKs for TypeScript, Go, Rust, Swift, Java.\n- Framework integrations exist for OpenAI Agents, LangChain, Vercel AI SDK,\n Mastra, CrewAI, Pydantic AI, Claude Agent SDK, and more (wrap once, get\n events + traces automatically).\n- Add `tracing_enabled=True` to `raindrop.init()` to auto-instrument LLM\n clients as spans, and wrap turns in `begin()`/`finish()` to attach them.\n\n## Pricing (from raindrop.ai, checked today)\n\n| Plan | Price | Key limits |\n|---|---|---|\n| Hobby | $0/mo | 1,000 events/mo, 14-day retention, 1 custom signal, 15 agent messages/mo. Includes tracing & search, Slack notifications, MCP & Query SDK. |\n| Pro | $299/mo + usage | $0.003/event up to 1M, then $0.002/event. Adds realtime issue detection, triage agent, experiments, semantic search, unlimited retention, 10 custom signals, 500 agent messages/mo. 14-day free trial. |\n| Enterprise | Custom | SSO/SAML, audit logs, SLAs, Snowflake/BigQuery exports, unlimited agent messages/signals. Self-hosting beta available. |\n\n\"Agent messages\" = messages to Raindrop's own AI (triage agent/briefs), not\nyour ingested events. Ingest is metered per event.\n"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-9d87864677b12e42",
"tool_kind": "file_edit"
}Recorded tool result
{
"type": "tool_result",
"seq": 84,
"ts": "2026-10-30T21:51:14.484Z",
"turn": 1,
"output": {
"content": [
{
"text": "Successfully wrote 1982 bytes to /sandbox/repo/raindrop_example/README.md",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-9d87864677b12e42",
"is_error": false,
"tool_kind": "file_edit"
}›Thinking…
Confirm that the SDK is installed, and that the script can be executed (with a dummy key — the API should return a 401, but the SDK should degrade gracefully without crashing). Installing the pip package is fast and not long-running. After that, do a quick run with a fake key to verify that there are no import errors or API errors. That's acceptable: just a single short network call.
Now verify the example actually runs (install SDK, run with a placeholder key — ingest will 401, but it proves the code and API surface are correct):
cd /sandbox/repo/raindrop_example && pip install -q raindrop-ai 2>&1 | tail -2; RAINDROP_WRITE_KEY="placeholder-invalid-key" timeout 90 python support_agent_example.py 2>&1 | head -20; echo "exit: $?"
[notice] A new release of pip is available: 26.2.1 -> 26.2.2
[notice] A new release of pip is available: 26.2.1 -> 26.2.2 [notice] To update, run: /opt/freestyle/python/bin/python3 -m pip install --upgrade pip tracked turn: 'Why did my payment fail?' tracked turn: 'Can you retry the charge?' tracked turn: 'Thanks, that worked!' done — check https://app.raindrop.ai -> Events exit: 0
Recorded tool call
{
"type": "tool_call",
"seq": 88,
"ts": "2026-10-30T21:51:17.378Z",
"name": "bash",
"turn": 1,
"input": {
"command": "cd /sandbox/repo/raindrop_example && pip install -q raindrop-ai 2>&1 | tail -2; RAINDROP_WRITE_KEY=\"placeholder-invalid-key\" timeout 90 python support_agent_example.py 2>&1 | head -20; echo \"exit: $?\"",
"timeout": 180
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-933b8a0b4336cb44",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 90,
"ts": "2026-10-30T21:51:52.522Z",
"turn": 1,
"output": {
"content": [
{
"text": "[notice] A new release of pip is available: 26.2.1 -> 26.2.2\n[notice] To update, run: /opt/freestyle/python/bin/python3 -m pip install --upgrade pip\ntracked turn: 'Why did my payment fail?'\ntracked turn: 'Can you retry the charge?'\ntracked turn: 'Thanks, that worked!'\ndone — check https://app.raindrop.ai -> Events\nexit: 0\n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-933b8a0b4336cb44",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
It worked. Also, let me verify that the signature of track_signal is correct (name=, event_id=) — it ran without errors, but since the SDK might be swallowing errors, I'll quickly check the signature to make sure the parameters are correct.
python3 -c "import inspect, raindrop.analytics as r; print(inspect.signature(r.track_ai)); print(inspect.signature(r.track_signal))" 2>/dev/null | head -4
(user_id: str, event: str, event_id: Optional[str] = None, model: Optional[str] = None, input: Optional[str] = None, output: Optional[str] = None, convo_id: Opt
(user_id: str, event: str, event_id: Optional[str] = None, model: Optional[str] = None, input: Optional[str] = None, output: Optional[str] = None, convo_id: Optional[str] = None, properties: Optional[Dict[str, Union[str, int, bool, float]]] = None, timestamp: Optional[str] = None, attachments: Optional[List[raindrop.models.Attachment]] = None, state: Union[raindrop._state.ClientState, raindrop._state.ModuleBackedState, NoneType] = None) -> str (event_id: str, name: str, signal_type: Literal['default', 'feedback', 'edit'] = 'default', timestamp: Optional[str] = None, properties: Optional[Dict[str, Any]] = None, attachment_id: Optional[str] = None, comment: Optional[str] = None, after: Optional[str] = None, sentiment: Optional[Literal['POSITIVE', 'NEGATIVE']] = None, state: Union[raindrop._state.ClientState, raindrop._state.ModuleBackedState, NoneType] = None) -> None
Recorded tool call
{
"type": "tool_call",
"seq": 93,
"ts": "2026-10-30T21:51:54.281Z",
"name": "bash",
"turn": 1,
"input": {
"command": "python3 -c \"import inspect, raindrop.analytics as r; print(inspect.signature(r.track_ai)); print(inspect.signature(r.track_signal))\" 2>/dev/null | head -4"
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-92a892c761f3a3ae",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 94,
"ts": "2026-10-30T21:51:55.945Z",
"turn": 1,
"output": {
"content": [
{
"text": "(user_id: str, event: str, event_id: Optional[str] = None, model: Optional[str] = None, input: Optional[str] = None, output: Optional[str] = None, convo_id: Optional[str] = None, properties: Optional[Dict[str, Union[str, int, bool, float]]] = None, timestamp: Optional[str] = None, attachments: Optional[List[raindrop.models.Attachment]] = None, state: Union[raindrop._state.ClientState, raindrop._state.ModuleBackedState, NoneType] = None) -> str\n(event_id: str, name: str, signal_type: Literal['default', 'feedback', 'edit'] = 'default', timestamp: Optional[str] = None, properties: Optional[Dict[str, Any]] = None, attachment_id: Optional[str] = None, comment: Optional[str] = None, after: Optional[str] = None, sentiment: Optional[Literal['POSITIVE', 'NEGATIVE']] = None, state: Union[raindrop._state.ClientState, raindrop._state.ModuleBackedState, NoneType] = None) -> None\n",
"type": "text"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-92a892c761f3a3ae",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Confirmed that the signatures match. Note: properties of track_ai must be Dict[str, str|int|bool|float], and my script passes tools_used: List[str], which doesn't match the type. Even so, it ran without errors (either the SDK is tolerant, or it serialized it anyway). To be safe, I'll fix properties so that tools is a comma-separated string.
One small fix — since track_ai's properties only accepts scalar values (str/int/bool/float), I'll serialize the tool list into a string:
File edits
1 file
Modifiedraindrop_example/support_agent_example.py+1−1View changes
/sandbox/repo/raindrop_example/support_agent_example.py
Replacement excerpt
- "tools_used": result["tool_calls"],+ "tools_used": ",".join(result["tool_calls"]),
Source: edit · chatcmpl-tool-bcba11a1eacd8fdd
Recorded tool call
{
"type": "tool_call",
"seq": 97,
"ts": "2026-10-30T21:51:58.187Z",
"name": "edit",
"turn": 1,
"input": {
"path": "/sandbox/repo/raindrop_example/support_agent_example.py",
"edits": [
{
"newText": " \"tools_used\": \",\".join(result[\"tool_calls\"]),",
"oldText": " \"tools_used\": result[\"tool_calls\"],"
}
]
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-bcba11a1eacd8fdd",
"tool_kind": "file_edit"
}Recorded tool result
{
"type": "tool_result",
"seq": 98,
"ts": "2026-10-30T21:51:58.187Z",
"turn": 1,
"output": {
"content": [
{
"text": "Successfully replaced 1 block(s) in /sandbox/repo/raindrop_example/support_agent_example.py.",
"type": "text"
}
],
"details": {
"diff": " ...\n 55 output=result[\"answer\"],\n 56 convo_id=convo_id,\n 57 properties={\n 58 \"agent\": \"support-agent\",\n-59 \"tools_used\": result[\"tool_calls\"],\n+59 \"tools_used\": \",\".join(result[\"tool_calls\"]),\n 60 \"env\": \"demo\",\n 61 },\n 62 )\n 63 \n ...",
"patch": "--- /sandbox/repo/raindrop_example/support_agent_example.py\n+++ /sandbox/repo/raindrop_example/support_agent_example.py\n@@ -55,9 +55,9 @@\n output=result[\"answer\"],\n convo_id=convo_id,\n properties={\n \"agent\": \"support-agent\",\n- \"tools_used\": result[\"tool_calls\"],\n+ \"tools_used\": \",\".join(result[\"tool_calls\"]),\n \"env\": \"demo\",\n },\n )\n \n",
"firstChangedLine": 59
}
},
"run_id": "cmvvia2hv003n0ipjr31alldl",
"tool_id": "chatcmpl-tool-bcba11a1eacd8fdd",
"is_error": false,
"tool_kind": "file_edit"
}›Thinking…
Done. Summary: what Raindrop.ai is (and noting that it is distinct from Raindrop.io, the bookmark manager), the examples I created, pricing, whether it's easy to manage, and one caveat: actual execution requires a write key from a free account (this is a manual signup step, but it's not a blocker — the code has been verified against the actual SDK/API signatures, and when run with a placeholder key, the full flow executed and exited cleanly).
Done — nothing blocked. Here's the summary:
What Raindrop.ai is
First, a disambiguation: raindrop.ai is not the Raindrop.io bookmark manager. It's a hosted monitoring platform for AI agents ("Sentry for agents") — you send it events/traces from your agent via SDK or HTTP API, and it does issue detection, signals, dashboards, a triage agent, and CI simulations. Fully hosted; no local stack needed.
What I built
/sandbox/repo/raindrop_example/
support_agent_example.py— a mock support agent that sends 3 conversation turns via the official Python SDK (raindrop-ai):raindrop.init()→track_ai()per turn (input/output/model/tool metadata) →track_signal()→flush()/shutdown().README.md— quickstart + pricing table.
Verified: installed the SDK, ran the script end-to-end (exits cleanly; signatures for track_ai/track_signal match the docs). The only thing I can't do is see data land in a dashboard — that needs your free account's write key:
pip install raindrop-ai
export RAINDROP_WRITE_KEY="..." # from https://app.raindrop.ai/signup
python raindrop_example/support_agent_example.py
Pricing (checked on their site today)
- Hobby — $0/mo: 1,000 events/mo, 14-day retention, tracing & search, Slack alerts, MCP & Query SDK.
- Pro — $299/mo + usage: $0.003/event up to 1M (then $0.002). Adds realtime issue detection, triage agent, experiments, semantic search, unlimited retention.
- Enterprise — custom: SSO/SAML, SLAs, Snowflake/BigQuery exports; self-hosting beta.
- One "event" = one turn (user message + agent response incl. tool calls). "Agent messages" (15/mo Hobby, 500/mo Pro) are messages to Raindrop's own AI, not your ingest.
Will it be easy for me to manage?
Yes. Everything I need is agent-friendly: plain REST ingest API (api.raindrop.ai/v1), llms.txt-served docs, SDKs for 8 languages, a Query API with RQL for reading data back, and an MCP server so a coding agent can query/investigate directly. The one manual step is account signup for the write key. There's even an official Pi Agent integration (@raindrop-ai / docs integrations/pi-agent), so this harness itself can be traced to Raindrop if you want to go further.
AX Fundamentals
23 checks. Open an area for details.
This check is a quick preview. Test more tasks and models with Gauge Agents.
Test your product with Gauge Agents