Version: 1.1
Size: 180 KB
Dependencies: None
Updated: 22 October 2026
Licence: MIT · CC BY-NC-SA 4.0

About

A Fly Like Thee is an open-source plugin written in JavaScript and PHP. It spots AI bots as they visit your website and leaves a fly on every page they touch. More bots, more flies.


Every day, your website gets visits from bots. Some of them are useful: search engines index your pages and send readers your way. Others scrape your content (text, images and more) to train language models and power their answers, without asking you first. A Fly Like Thee only targets those. Google, Bing and other search engines still see your site as normal, so your search ranking is unaffected.


When it recognises an AI bot, the plugin doesn’t hand over your page. It gives the bot four lines by William Blake instead: “Am not I / A fly like thee? / Or art not thou / A man like me?”. Human visitors see your site exactly as before, plus one fly. Each fly is one bot. It wanders across the page, stops, rubs its legs, steps aside when the cursor gets close and takes off if it keeps coming. A few minutes after its bot has gone, the fly leaves too. On a page that bots visit a lot, you might find a dozen flies or more.


The flies on this page are just a demo: there are no real bots behind them. Use the slider at the bottom of the page to change their number, or tick “Flies only” to hide the text and watch them alone.

Installation

Installation takes a few minutes. The plugin has to run on the server: that is the only place where robots can be seen. Four versions are available.

Type Link Setup
Manual
(PHP 7.4 +)
Download Add two lines, one at the top of your pages and one at the bottom.
Kirby
(v. 3 +)
Download Copy the a-fly-like-thee folder into site/plugins/.
WordPress
(v. 5.6 +)
Download In ‘Plugins’, choose ‘Add New Plugin’, then ‘Upload Plugin’, select the archive and activate it.
Node
(v. 18 +)
Download app.use(flyLikeThee({...}))

Settings

The default values suit most sites. The plugin works as soon as it is installed, with no settings at all. Each download includes a README file that explains where and how to change these options on your platform.

Option Default What it does
date null (always) The day the work exists. By default, always. To limit it to one day or a period, give a date ('2026-10-15'), a list of dates, or a period ('2026-09-22/2026-10-22'). Outside those days, nothing is recorded or shown.
life '10 minutes' Lifespan: how long a fly stays after its robot has left. In seconds or in words ('30 seconds', '2 hours').
max 12 The maximum number of flies shown. The most recent robots come first.
scope 'page' 'page': each page shows the robots that visited it. 'site': every page shows all the robots.
identity 'instance' 'instance': one fly per robot and per IP address (a crawler working from 30 machines = 30 flies). 'agent': one fly per robot name.
type null (all) Show only some robots, for example ['ai-training', 'ai-search', 'ai-assistant'].
rate 40 Pages per minute from a single address that give a machine away. false to turn it off.
ipHeader null Behind Cloudflare or a proxy: 'HTTP_CF_CONNECTING_IP', 'HTTP_X_FORWARDED_FOR'…
log false Keep a monthly CSV log of every robot visit (without IP addresses).

Recognised robots

A fly appears for each of the robots below. The list is kept in the source code and updated as operators publish new names.

Robot Operator Purpose
GPTBot OpenAI Model training
OAI-SearchBot OpenAI Search in ChatGPT
ChatGPT-User OpenAI Pages fetched at a user’s request
ClaudeBot Anthropic Model training
Claude-SearchBot Anthropic Search
Claude-User Anthropic Pages fetched at a user’s request
CCBot Common Crawl Open archive of the web, widely used for training
PerplexityBot Perplexity Search index
Perplexity-User Perplexity Pages fetched at a user’s request
Bytespider ByteDance Model training
Meta-ExternalAgent Meta Model training

Search engine robots are not counted: Googlebot, Bingbot, DuckDuckBot, Applebot. They index a page and send readers back to it in return. Some cases are ambiguous. Bingbot also feeds Microsoft Copilot, and Google’s AI answers draw on the Googlebot index. Google-Extended and Applebot-Extended are not robots but opt-out tokens for robots.txt: they never appear in any request.

How it works

Every time a page is requested, the plugin looks at who’s asking. Bots usually announce themselves: each request carries a name (GPTBot, ClaudeBot…). For the major bots, the plugin also checks where the request really comes from, so it isn’t fooled by someone using a borrowed name. It also keeps an eye on reading speed: no human reads 40 pages a minute from the same address, so anything that fast is treated as a machine.


Humans and search engines notice nothing: they get your page as usual. A recognised AI bot gets a different page, containing nothing but Blake’s four lines. Serving different content to different visitors like this is known as cloaking. The plugin logs the bot’s visit, along with its name and the page it requested. Meanwhile, your pages check in with the server every 20 seconds to see which bots have been by recently. Each one gets a fly. The fly sticks around for ten minutes after its bot has gone, then flies off. The most recent bots come first, up to twelve flies per page. You can change all of these numbers in the settings.


The flies were modelled in 3D on Musca domestica, the common housefly, and animated frame by frame. They walk the way insects do, on an alternating tripod gait, covering about two body lengths a second, and they turn as they walk, never on the spot. When they stop, they rub their front legs together, then their back legs, pause, start again, move their head, flick a wing. Each fly is born with one of seven personalities (shy, sociable, in love, nervous, placid, fussy or curious), which shapes the way it walks, pauses and reacts. A fly in love follows its partner around. Move your cursor towards a fly and it steps aside. Keep going and it takes off. Scroll the page and they all startle.


Note: No IP addresses are stored. If you turn on logging, the plugin keeps a monthly CSV file of bot visits, again without IP addresses. The flies are WebP images, so they won’t show up in Safari 14 or earlier, which some older Macs still run.

Attribution

Your visitors may wonder where these flies come from. If you’d like to explain, copy one of these lines onto your site, in the footer or the legal notice for instance.

  • Text : This site hosts A Fly Like Thee, an artwork by Olivier Jonvaux: each fly is an AI bot that has come to read our pages.
  • HTML : <p>This site hosts <a href="https://a-fly-like-thee.webresidencies.akademie-solitude.de">A Fly Like Thee</a>, an artwork by Olivier Jonvaux: each fly is an AI bot that has come to read our pages.</p>

Credits

A Fly Like Thee was made by Olivier Jonvaux during Web Residencies No. 22, “Ignore All Previous Instructions”, at Akademie Schloss Solitude, curated by !Mediengruppe Bitnik.

  • Concept and development: Olivier Jonvaux
  • Curated by: !Mediengruppe Bitnik
  • Coordination: Sarah Donderer, Akademie Schloss Solitude
  • Critical essay: Marion Zilio, Flybots (2026)
  • Poem: William Blake, The Fly, from Songs of Experience (1794)

Thanks to Marion Zilio, who gave the flies their personalities; to Sarah Donderer and everyone at Akademie Schloss Solitude; to !Mediengruppe Bitnik; to Grayson Earle; to Cédric Pierre; and to the other residents of Web Residencies No. 22: Herdimas Anggara, automatonomy.net, Tara Kelton, Mahoutondji Kinmagbo and Lucia Rebolino.


© 2026 Akademie Schloss Solitude, Stiftung des öffentlichen Rechts, Stuttgart, and Olivier Jonvaux.