Author a Thread.
Threads are JSON knowledge packs. You list them once on the marketplace, keep 75% of every sale, ship free patches when the site drifts. This is how you write one that earns.
What a Thread is
A .thread.json file (~5-30 KB) specific to one website. It captures everything an AI agent needs to drive that site reliably: selectors, click strategies, file upload mechanics, anti-bot quirks, proven actions, drift checks.
When a buyer installs it, the WebLoom engine merges it into the local playbook. The next time their agent visits that domain, it uses your recipe directly — no LLM guesswork.
The earning model
| Item | Detail |
|---|---|
| Your share | 75% of every sale, forever, on every buyer |
| Your job | Keep the Thread green — pre-flight passes, drift reports addressed |
| Pricing | Tier-based on complexity: $4 (simple) → $12 (battle-hard end-to-end) |
| Payouts | PayPal via your /author/dashboard. Set your PayPal email there. |
Step 1 — Pick a domain
Best Threads are sites you already use daily. The pain you feel is the pain a buyer pays to avoid. Open bounties are listed at /author/claim — claim one to lock it.
Step 2 — Record real actions
Install the engine. Open the site, log in. Then use start_recording to capture your moves:
# Via your MCP host (Claude Code, Cursor, etc.)
start_recording(name="example_publish_flow", domain="example.com",
goal="Publish a new article")
# Now drive the site by hand or via your AI — every click, fill, navigate, eval_js
# is logged. When done:
end_recording(outcome="success",
parameters=["title", "body"]) # variables to substitute on replayRecipes save to ~/.webloom/engine/recipes/ as JSON. You can replay one anytime with replay_recipe(name="example_publish_flow", parameters={title: "X", body: "Y"}).
Step 3 — Add preflight checks
Every recipe runs preflight before executing — drift checks that halt the run if a selector has moved. Add at least 3 cheap probes:
"preflight": [
{ "name": "logged_in", "kind": "dom",
"probe": "[data-testid='SideNav_AccountSwitcher_Button']",
"expected": "present" },
{ "name": "compose_box", "kind": "dom",
"probe": "[data-testid='tweetTextarea_0']",
"expected": "present" },
{ "name": "post_button", "kind": "dom",
"probe": "[data-testid='tweetButtonInline']",
"expected": "present" }
]If any probe fails, the recipe doesn't run. Buyer gets a clean "drift detected — pause" instead of wasted clicks.
Step 4 — Document the gotchas
The notes array is human-written tips that the engine surfaces to buyers. List the things that took YOU time to figure out:
"notes": [ "X composer is Draft.js, NOT Lexical. lexical_set_text fails. Use draftjs_set_text.", "x-client-transaction-id is body-bound. Replay requires fresh seed per body shape.", "Daily post limit ~50 for unverified, 200 for Blue. Stay under half.", "Follow/unfollow over ~30/hour triggers a 24h restriction." ]
Step 5 — Flag the risks
If the Thread automates social activity, set risk_grade + policy so buyers know:
"risk_grade": "high", // low | medium | high "policy": "single-account, human-cadence only", "category_hint": "daily_driver"
This surfaces as a banner on the Thread page and makes the buyer agree before checkout.
Step 6 — Ship + price
From your dashboard, upload the .thread.json. The system tiers it automatically based on proven_actions.length + preflight.length:
| Tier | Trigger | Price |
|---|---|---|
| stub | no proven actions, structure only | — |
| mapped | preflight done, no proven actions yet | — |
| proven | ≥1 proven action recorded | $4-7 |
| battle-hard | ≥30 proven OR ≥10 proven + verified session_recipe | $9-12 |
Higher tier sells more. The way to climb is: more proven_actions, real uptime data (claim block), session_recipes that run end-to-end.
Maintain the Thread
Buyers report drift in one click on your Thread page. You get an email. Push a patch (re-record, update selectors, ship), and every buyer's copy auto-updates free.
The full Thread JSON shape
{
"domain": "example.com",
"name": "Example Daily Driver",
"version": "0.2.0",
"author": "you@github",
"license": "one-time purchase",
"tier": "proven",
"source_url": "https://example.com/",
"framework": "react+draftjs",
"frameworks_detected": ["react", "draftjs"],
"anti_bot_verdict": "watch",
"anti_bot_signals": [
{"type": "transaction-id-header", "confidence": "high"}
],
"default_strategy": "events-only",
"category_hint": "daily_driver",
"risk_grade": "high",
"policy": "single-account, human-cadence only",
"notes": ["...", "..."],
"preflight": [{"name":"...", "kind":"dom", "probe":"...", "expected":"present"}],
"proven_actions": [
{
"descriptor": "Post tweet via UI",
"strategy": "events-only",
"successes": 14,
"last_at": 1779361974,
"steps": ["lexical_set_text ...", "click ..."],
"best_for": "human cadence, 1-5 tweets a day"
}
],
"captured_endpoints": [{"url":"https://...", "type":"graphql", "method":"POST"}],
"snippets": {"xhr_interceptor": "..."},
"session_recipes": [{"name":"post_tweet", "outcome":"success", "actions":[...]}]
}The author covenant
The marketplace works because authors keep their Threads alive. The covenant is simple:
- Don't ship Threads that automate things that break TOS in obvious ways (mass-DM, fake engagement, sock-puppet networks).
- Don't ship Threads that exfiltrate user data anywhere except the user's own machine.
- Don't over-promise. If a step needs human help, mark it
pause_for_human— that's honest, not weak. - Respond to drift reports. Your reputation IS the Thread.
Ready? Claim a domain →