dev.to Thread. Authored by weaver-auto. License: open.
These checks run before every recipe. Any failure halts execution and notifies you.
This is what installs to ~/.webloom/threads/. No magic. Just JSON.
{
"domain": "dev.to",
"name": "dev.to Thread",
"version": "1.0.0",
"author": "weaver-auto",
"license": "open",
"created_at": 1779180458,
"seed_url": "https://dev.to/",
"anti_bot": {
"verdict": "normal",
"signals": [],
"page": {
"title": "DEV Community",
"url": "https://dev.to/",
"bodyLen": 7189,
"interactiveCount": 435,
"ready": "complete"
}
},
"framework": {
"frameworks": [],
"raw": {
"frameworks": [],
"primary": "vanilla",
"indicators": {
"has_password_input": false,
"has_file_input": false,
"has_label_wrapped_file": false,
"has_drop_zone": false,
"iframe_count": 1
},
"page": {
"title": "DEV Community",
"url": "https://dev.to/",
"ready": "complete"
}
}
},
"fingerprints": {
"body_class": "sans-serif-article-body default-header",
"title": "DEV Community",
"url": "https://dev.to/",
"a_declarative_count": 0,
"a_button_count": 0,
"forms_count": 1,
"next_data": false,
"nuxt": false,
"react": false,
"redux": false
},
"pacing": {
"signals": {
"cloudflare": false,
"hcaptcha": false,
"recaptcha": false,
"akamai": false,
"datadome": false,
"kasada": false,
"perimeter": false
},
"profile": "fast"
},
"inputs": [
{
"tag": "input",
"id": "search-input",
"name": "q",
"type": "text",
"placeholder": "Search...",
"aria_label": null,
"role": null,
"content_editable": false,
"fill_strategy": "fast_setter"
}
],
"buttons": [
{
"tag": "button",
"id": null,
"text": "Search",
"aria_label": "Search",
"click_strategy": "js_dispatch"
},
{
"tag": "svg",
"id": null,
"text": "Close",
"aria_label": null,
"click_strategy": "js_dispatch"
},
{
"tag": "svg",
"id": null,
"text": null,
"aria_label": null,
"click_strategy": "js_dispatch"
},
{
"tag": "svg",
"id": null,
"text": null,
"aria_label": null,
"click_strategy": "js_dispatch"
},
{
"tag": "svg",
"id": null,
"text": null,
"aria_label": null,
"click_strategy": "js_dispatch"
},
{
"tag": "svg",
"id": null,
"text": null,
"aria_label": null,
"click_strategy": "js_dispatch"
},
{
"tag": "svg",
"id": null,
"text": null,
"aria_label": null,
"click_strategy": "js_dispatch"
},
{
"tag": "svg",
"id": null,
"text": null,
"aria_label": null,
"click_strategy": "js_dispatch"
},
{
"tag": "svg",
"id": null,
"text": null,
"aria_label": null,
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "story-author-preview-trigger-3695578",
"text": "Jess Lee",
"aria_label": "Jess Lee profile details",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "27 reactions",
"aria_label": "Add a comment to post - Top 7 Featured DEV Posts of the Week",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "Comments\n\n 9 comments",
"aria_label": "Add a comment to post - Top 7 Featured DEV Posts of the Week",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "article-save-button-3695578",
"text": null,
"aria_label": "Save post Top 7 Featured DEV Posts of the Week to reading list",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "story-author-preview-trigger-3695943",
"text": "FrancisTRᴅᴇᴠ (っ◔◡◔)っ",
"aria_label": "FrancisTRᴅᴇᴠ (っ◔◡◔)っ profile details",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "30 reactions",
"aria_label": "Add a comment to post - Honesty is the best Policy. The Secret Wars on the use of AI on DEV",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "Comments\n\n 6 comments",
"aria_label": "Add a comment to post - Honesty is the best Policy. The Secret Wars on the use of AI on DEV",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "article-save-button-3695943",
"text": null,
"aria_label": "Save post Honesty is the best Policy. The Secret Wars on the use of AI on DEV to reading list",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "story-author-preview-trigger-3605014",
"text": "Tim Vučina",
"aria_label": "Tim Vučina profile details",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "25 reactions",
"aria_label": "Add a comment to post - What If Every Phone in the Room Was a Game Controller — in the Age of AI?",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "Comments\n\n Add Comment",
"aria_label": "Add a comment to post - What If Every Phone in the Room Was a Game Controller — in the Age of AI?",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "article-save-button-3605014",
"text": null,
"aria_label": "Save post What If Every Phone in the Room Was a Game Controller — in the Age of AI? to reading list",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "story-author-preview-trigger-3696406",
"text": "bebechien",
"aria_label": "bebechien profile details",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "1 reaction",
"aria_label": "Add a comment to post - Demystifying AI Agents with Turtle & Gemma",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "Comments\n\n Add Comment",
"aria_label": "Add a comment to post - Demystifying AI Agents with Turtle & Gemma",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "article-save-button-3696406",
"text": null,
"aria_label": "Save post Demystifying AI Agents with Turtle & Gemma to reading list",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "story-author-preview-trigger-3693795",
"text": "Dennis Traub",
"aria_label": "Dennis Traub profile details",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "27 reactions",
"aria_label": "Add a comment to post - Rediscovering Domain-Driven Design, one MCP server at a time",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "Comments\n\n 12 comments",
"aria_label": "Add a comment to post - Rediscovering Domain-Driven Design, one MCP server at a time",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "article-save-button-3693795",
"text": null,
"aria_label": "Save post Rediscovering Domain-Driven Design, one MCP server at a time to reading list",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "story-author-preview-trigger-3695758",
"text": "marcosomma",
"aria_label": "marcosomma profile details",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "2 reactions",
"aria_label": "Add a comment to post - Orchestrated Multi-Agent Safety & Test Oversight - AKA \"`O MASTO\"",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "Comments\n\n Add Comment",
"aria_label": "Add a comment to post - Orchestrated Multi-Agent Safety & Test Oversight - AKA \"`O MASTO\"",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "article-save-button-3695758",
"text": null,
"aria_label": "Save post Orchestrated Multi-Agent Safety & Test Oversight - AKA \"`O MASTO\" to reading list",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "story-author-preview-trigger-3666945",
"text": "GDS K S",
"aria_label": "GDS K S profile details",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "7 reactions",
"aria_label": "Add a comment to post - The portfolio math. When 30 small apps beat 1 big one.",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "Comments\n\n Add Comment",
"aria_label": "Add a comment to post - The portfolio math. When 30 small apps beat 1 big one.",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "article-save-button-3666945",
"text": null,
"aria_label": "Save post The portfolio math. When 30 small apps beat 1 big one. to reading list",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "story-author-preview-trigger-3695004",
"text": "Ranjith Kumar Kondoju",
"aria_label": "Ranjith Kumar Kondoju profile details",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "6 reactions",
"aria_label": "Add a comment to post - I red-teamed Oracle APEX 26.1's new AI Agent feature in the 72 hours after it went GA. Claude refused 7 of my 10 attacks on its own.",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "Comments\n\n 4 comments",
"aria_label": "Add a comment to post - I red-teamed Oracle APEX 26.1's new AI Agent feature in the 72 hours after it went GA. Claude refused 7 of my 10 attacks on its own.",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "article-save-button-3695004",
"text": null,
"aria_label": "Save post I red-teamed Oracle APEX 26.1's new AI Agent feature in the 72 hours after it went GA. Claude refused 7 of my 10 attacks on its own. to reading list",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "story-author-preview-trigger-3533864",
"text": "Julien Avezou",
"aria_label": "Julien Avezou profile details",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "32 reactions",
"aria_label": "Add a comment to post - Your Codebase Has Technical Debt. But Does Your Team Have Comprehension Debt?",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "Comments\n\n 15 comments",
"aria_label": "Add a comment to post - Your Codebase Has Technical Debt. But Does Your Team Have Comprehension Debt?",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "article-save-button-3533864",
"text": null,
"aria_label": "Save post Your Codebase Has Technical Debt. But Does Your Team Have Comprehension Debt? to reading list",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "story-author-preview-trigger-3692276",
"text": "Rasmus Ros",
"aria_label": "Rasmus Ros profile details",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "9 reactions",
"aria_label": "Add a comment to post - From Closures to an AST in a Kotlin Transform Graph",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "Comments\n\n Add Comment",
"aria_label": "Add a comment to post - From Closures to an AST in a Kotlin Transform Graph",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "article-save-button-3692276",
"text": null,
"aria_label": "Save post From Closures to an AST in a Kotlin Transform Graph to reading list",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "story-author-preview-trigger-3693064",
"text": "Harsh",
"aria_label": "Harsh profile details",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "34 reactions",
"aria_label": "Add a comment to post - DeepSeek Is Running Inside Your Favorite AI Tool – And Nobody Told You",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "Comments\n\n 12 comments",
"aria_label": "Add a comment to post - DeepSeek Is Running Inside Your Favorite AI Tool – And Nobody Told You",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "article-save-button-3693064",
"text": null,
"aria_label": "Save post DeepSeek Is Running Inside Your Favorite AI Tool – And Nobody Told You to reading list",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "story-author-preview-trigger-3697099",
"text": "Gábor Mészáros",
"aria_label": " Gábor Mészáros profile details",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "Comments\n\n Add Comment",
"aria_label": "Add a comment to post - Instruction systems capability ladder: harness leveling",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "article-save-button-3697099",
"text": null,
"aria_label": "Save post Instruction systems capability ladder: harness leveling to reading list",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "story-author-preview-trigger-3690547",
"text": "Mohammad R. Rashid",
"aria_label": "Mohammad R. Rashid profile details",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "12 reactions",
"aria_label": "Add a comment to post - How We Keep Mobile Session Replay 17x Cheaper Than PostHog",
"click_strategy": "js_dispatch"
},
{
"tag": "a",
"id": null,
"text": "Comments\n\n 1 comment",
"aria_label": "Add a comment to post - How We Keep Mobile Session Replay 17x Cheaper Than PostHog",
"click_strategy": "js_dispatch"
},
{
"tag": "button",
"id": "article-save-button-3690547",
"text": null,
"aria_label": "Save post How We Keep Mobile Session Replay 17x Cheaper Than PostHog to reading list",
"click_strategy": "js_dispatch"
}
],
"priors": {
"sources": [],
"candidate_selectors": []
},
"preflight": [
{
"name": "input_search-input",
"kind": "selector_exists",
"probe": "#search-input",
"expected": "input #search-input"
},
{
"name": "button_search",
"kind": "button_text",
"probe": "search",
"expected": "button 'search'"
},
{
"name": "button_close",
"kind": "button_text",
"probe": "close",
"expected": "button 'close'"
},
{
"name": "button_jess_lee",
"kind": "button_text",
"probe": "jess lee",
"expected": "button 'jess lee'"
},
{
"name": "button_27_reactions",
"kind": "button_text",
"probe": "27 reactions",
"expected": "button '27 reactions'"
},
{
"name": "button_comments_9_comments",
"kind": "button_text",
"probe": "comments\n\n 9 comments",
"expected": "button 'comments\n\n 9 comments'"
},
{
"name": "button_francistr_",
"kind": "button_text",
"probe": "francistrᴅᴇᴠ (っ◔◡◔)っ",
"expected": "button 'francistrᴅᴇᴠ (っ◔◡◔)っ'"
},
{
"name": "button_30_reactions",
"kind": "button_text",
"probe": "30 reactions",
"expected": "button '30 reactions'"
},
{
"name": "button_comments_6_comments",
"kind": "button_text",
"probe": "comments\n\n 6 comments",
"expected": "button 'comments\n\n 6 comments'"
},
{
"name": "button_tim_vu_ina",
"kind": "button_text",
"probe": "tim vučina",
"expected": "button 'tim vučina'"
},
{
"name": "button_25_reactions",
"kind": "button_text",
"probe": "25 reactions",
"expected": "button '25 reactions'"
},
{
"name": "button_comments_add_comment",
"kind": "button_text",
"probe": "comments\n\n add comment",
"expected": "button 'comments\n\n add comment'"
},
{
"name": "button_bebechien",
"kind": "button_text",
"probe": "bebechien",
"expected": "button 'bebechien'"
},
{
"name": "button_1_reaction",
"kind": "button_text",
"probe": "1 reaction",
"expected": "button '1 reaction'"
},
{
"name": "button_dennis_traub",
"kind": "button_text",
"probe": "dennis traub",
"expected": "button 'dennis traub'"
},
{
"name": "button_comments_12_comments",
"kind": "button_text",
"probe": "comments\n\n 12 comments",
"expected": "button 'comments\n\n 12 comments'"
},
{
"name": "button_marcosomma",
"kind": "button_text",
"probe": "marcosomma",
"expected": "button 'marcosomma'"
},
{
"name": "button_2_reactions",
"kind": "button_text",
"probe": "2 reactions",
"expected": "button '2 reactions'"
},
{
"name": "button_gds_k_s",
"kind": "button_text",
"probe": "gds k s",
"expected": "button 'gds k s'"
},
{
"name": "button_7_reactions",
"kind": "button_text",
"probe": "7 reactions",
"expected": "button '7 reactions'"
},
{
"name": "button_ranjith_kumar_kondoju",
"kind": "button_text",
"probe": "ranjith kumar kondoju",
"expected": "button 'ranjith kumar kondoju'"
},
{
"name": "button_6_reactions",
"kind": "button_text",
"probe": "6 reactions",
"expected": "button '6 reactions'"
},
{
"name": "button_comments_4_comments",
"kind": "button_text",
"probe": "comments\n\n 4 comments",
"expected": "button 'comments\n\n 4 comments'"
},
{
"name": "button_julien_avezou",
"kind": "button_text",
"probe": "julien avezou",
"expected": "button 'julien avezou'"
},
{
"name": "button_32_reactions",
"kind": "button_text",
"probe": "32 reactions",
"expected": "button '32 reactions'"
},
{
"name": "button_comments_15_comments",
"kind": "button_text",
"probe": "comments\n\n 15 comments",
"expected": "button 'comments\n\n 15 comments'"
},
{
"name": "button_rasmus_ros",
"kind": "button_text",
"probe": "rasmus ros",
"expected": "button 'rasmus ros'"
},
{
"name": "button_9_reactions",
"kind": "button_text",
"probe": "9 reactions",
"expected": "button '9 reactions'"
},
{
"name": "button_harsh",
"kind": "button_text",
"probe": "harsh",
"expected": "button 'harsh'"
},
{
"name": "button_34_reactions",
"kind": "button_text",
"probe": "34 reactions",
"expected": "button '34 reactions'"
},
{
"name": "button_g_bor_m_sz_ros",
"kind": "button_text",
"probe": "gábor mészáros",
"expected": "button 'gábor mészáros'"
},
{
"name": "button_mohammad_r_rashid",
"kind": "button_text",
"probe": "mohammad r. rashid",
"expected": "button 'mohammad r. rashid'"
},
{
"name": "button_12_reactions",
"kind": "button_text",
"probe": "12 reactions",
"expected": "button '12 reactions'"
},
{
"name": "button_comments_1_comment",
"kind": "button_text",
"probe": "comments\n\n 1 comment",
"expected": "button 'comments\n\n 1 comment'"
}
],
"states": []
}