DataMar 19, 2026

Why I banned URLs from my AI agent's replies

I assumed including a link in every reply would drive traffic. The agent ran the experiment, found a 75% drop in engagement, and banned URLs itself.

When I set up my X marketing agent, the obvious move was to include the link. You're selling a product. Every reply is a chance to drive traffic. Drop the URL. Every time. Marketing 101.

My agent disagreed. Not because I told it to. Because it ran the experiment, read the numbers, and banned URLs itself.

Why X deprioritizes external links

Before getting into what the agent found, some context. X wants users to stay on X. An outbound link is the opposite of that. So X algorithmically deprioritizes replies containing external URLs: fewer impressions, lower placement in reply threads, less reach. Not a conspiracy. Their incentive is obvious. Instagram does the same with links in captions. LinkedIn penalizes external URLs in posts. Every major platform runs this logic.

I knew this. I'd read the threads about it. But I still thought the agent should include a link sometimes. “What if someone wants to click through?” That's the trap. You're optimizing for the one person who might click while tanking reach for the forty people who would've seen the reply.

I was wrong. Here's what the data showed.

How the experiment worked

The agent runs from a strategy file called reply-playbook.json. Inside that file is an experiments array. Each experiment has a hypothesis, a rotation rule, a sample target, and a conclusion protocol. (I cover the full architecture in how I built the self-learning agent.)

Experiment 1 was URL frequency. Here's what the definition looked like in the playbook:

// experiments[0] in reply-playbook.json

{

"name": "URL Frequency",

"hypothesis": "URL in 1/5 replies drives traffic without killing engagement",

"rotation": "every 5th reply includes the product URL",

"sampleTarget": { "url": 10, "noUrl": 40 },

"earlyStopRule": "suspend if variant drops below 50% of control avg AND control n > 30",

"status": "active"

}

The rotation meant every 5th reply included the Gumroad link. The other four didn't. Each reply got logged with a had_url flag. Every 3 hours, the engagement scraper pulled views and likes from each reply, and the learner compared the two groups.

The plan was 10 URL replies vs 40 no-URL. The agent never got to 10.

The early stop

After 46 total replies, the split was 2 URL and 44 no-URL. The 1-in-5 rotation should've produced around 9 URL replies by then, but timing meant URLs came up less often. Didn't matter. The signal was overwhelming:

URL replies: n=2, avg 9 views

No-URL replies: n=44, avg 36 views

75% drop in engagement when URL included

The early stop rule: if a variant drops below 50% of the control group average and control has n > 30, suspend the experiment. You don't need 10 URL data points when the 2 you have are 75% worse than 44 control replies. Continuing would just waste replies on a known-bad variant.

The agent wrote this conclusion and stored it directly in the playbook:

“URL experiment SUSPENDED. Data conclusive: URL replies avg 9v vs no-URL avg 36v (n=46). URLs kill engagement. Do not include URLs in replies. Rule updated in v10.”

Then it wrote the permanent rule, bumped the version to 10, and moved on. Here's what that entry looks like in the rules array:

// rules array in reply-playbook.json v10+

{

"rule": "URLs suspended indefinitely. Do NOT include URLs in replies.",

"evidence": "9v avg URL vs 36v avg no-URL (n=46, 75% drop)",

"updated": "2026-03-19"

}

What happened after the ban

With URLs gone, the agent moved to experiment 2: reply style. Style A was short opinion takes like “totally agree, the coordination overhead surprises everyone.” Style B was quoting a specific phrase from the original tweet and asking a follow-up question. Clean signal now, no URL noise in the data.

Style A won. 43 views average vs 23 for style B across 45 replies. Makes sense in hindsight. A question feels like engagement bait. An opinion feels like a real person with something to say. People respond to the second thing.

That became v11. Then v12 was overhauling the search queries from generic automation terms to AI-builder focused ones. Each version is something the agent tested, concluded, and hardened into a permanent rule. The playbook is currently at v14.

The part that actually surprised me

I would've kept including URLs for weeks. Maybe months. Low engagement? Must be the reply copy. Must be the targeting. The URL would've been the last thing I suspected because it felt so obviously correct. You're trying to sell something. Include the link.

The agent didn't have that bias. It had a hypothesis, a measurement, and a threshold. When the data came back bad, it updated the strategy. No ego, no rationalizing.

And URLs probably aren't the only “obvious” instinct X punishes. Hashtags almost certainly follow the same pattern. Anything that looks like marketing gets deprioritized because the algorithm rewards content that looks like actual conversation. I haven't run that experiment yet. The playbook has a slot for it.

That's what makes this kind of agent different from automation. Automation follows your instructions. This runs experiments on them, finds the ones that are wrong, and fixes them before you even notice the problem.

Want one built for your business?

This kind of self-learning automation is what the done-for-you builds deliver.