For authors

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

ItemDetail
Your share75% of every sale, forever, on every buyer
Your jobKeep the Thread green — pre-flight passes, drift reports addressed
PricingTier-based on complexity: $4 (simple) → $12 (battle-hard end-to-end)
PayoutsPayPal 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 replay

Recipes 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:

example preflight
"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:

TierTriggerPrice
stubno proven actions, structure only
mappedpreflight 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

reference
{
  "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 →