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 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
1
Start Foil on the composer surface
Wherever the user actually drafts content - the compose modal, the reply box, the review form.
2
Call getSession() at the submit click
This captures keystroke timing, paste patterns, and the full fingerprint in the sealed handoff.
3
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).4
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.5
Consider shadow mode
For surfaces where silent rejection is unacceptable, score content but don’t block - feed the verdict into trust-and-safety tooling instead.
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.
Persist the
foil_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: thevisitor_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 Foil couldn’t establish a stable 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.