Any endpoint that accepts user-authored public content — posts, status updates, comments, replies, reviews — is a target for LLM-powered content generation. The right integration runs at the content-submit handler, weights the
ai-agent attribution heavily, and uses the durable visitor fingerprint to cap posting velocity across account rotations.The threat
Public content surfaces have two automation shapes stacked on top of each other:- Scripted posting — headless browsers or direct API calls submitting content on a schedule. Classic
automationattribution: Playwright, Puppeteer, Selenium. - LLM-written content — the script is still automated, but now the content itself is generated by a language model in the same pipeline. The browser looks real because a real (headless) Chromium is driving it; the text looks real because it came from a capable LLM. This is the
ai-agentcategory.
- Spam — outbound links, crypto shilling, promotion of other accounts or products.
- Astroturfing — coordinated posting to manufacture consensus or suppress criticism.
- Engagement farming — AI-generated posts designed to get reactions, build account reputation, and later pivot to spam or resale.
The flow
Start Tripwire on the composer surface
Wherever the user actually drafts content — the compose modal, the reply box, the review form.
Call getSession() at the submit click
This captures keystroke timing, paste patterns, and the full fingerprint in the sealed handoff.
Verify and inspect attribution category
Check
decision.verdict and attribution.bot.facets.category.value — you’ll treat automation and ai-agent differently from human, and you may want to allow crawler/verified-bot traffic through read endpoints (see API abuse).Apply a visitor-fingerprint velocity cap
Even a “human” verdict shouldn’t let one fingerprint publish 200 posts per hour. Rate-limit by
visitor_fingerprint.id, not just account ID.Client integration
Server verification
Decisioning policy by attribution category
The top-level verdict tells you whether to block; the attribution category tells you why and helps you build useful signal for trust and safety teams.| Attribution category | Recommended action |
|---|---|
automation | Block. No legitimate use of Puppeteer/Playwright posting through a real user account. |
ai-agent | Block on posting; allow on read APIs. LLM agents reading your content is a product question; LLM agents posting under user accounts is abuse. |
crawler | Block on posting. Crawlers don’t compose. |
unknown + bot verdict | Block. Log for investigation — new automation patterns show up here first. |
human | Allow, subject to the velocity cap below. |
tripwire_category alongside the content row. A post that was created with human but sat at manipulation.verdict === "high" is a useful thing to surface to moderators without blocking the user outright.
Velocity caps that survive account rotation
Attackers rotate accounts — making a hundred accounts and posting from each one is cheaper than making one account and posting a hundred times. A per-account rate limit catches the second pattern and misses the first. Per-fingerprint caps catch both: the durablevisitor_fingerprint.id persists across account creation on the same device, so a fingerprint that signed up three times in six hours is already suspicious by the time it tries to post.
Node.js
visitor_fingerprint is null on sessions where Tripwire couldn’t establish a durable ID (hardened privacy browsers, very short sessions). Fall back to IP-based limiting when the visitor ID is absent.Shadow mode
Not every surface can silently reject content. A comments section on a news site where users expect their comment to appear might reasonably want to ship the post even on a bot verdict — but route it to a moderation queue, not to the public feed. Or score against a shadow threshold for 30 days before flipping to enforcement. Two patterns worth keeping separate:- Shadow scoring — verify the token, persist the verdict alongside the post, publish the post anyway. Used to baseline verdict distribution before you turn enforcement on. See Going to production.
- Shadow ban — accept the post, publish it to the author only, suppress it from other feeds. Useful against low-grade spam where you want to waste the spammer’s time rather than tip them off that detection fired.
What’s next
API abuse & scraping
The read-side counterpart: allow crawlers, block LLM scrapers.
Signup protection
Stop the account factory before the posts start.
Verdicts & scoring
How
verdict, risk_score, and attribution fit together.Going to production
Report-only and shadow-mode rollout plans.