AI slop is a self-inflicted tragedy

Today I don't have the most information dense post for you, but I'd like to share something that makes me irrationally angry regardless: AI slop.

A lot of people have acknowledged that AI writing tends to lean sycophantic and is like something you'd see on LinkedIn, unless you do some work to make it behave differently, and often times it's that way for no good reason - especially when you use various coding tools and want to primarily focus on understanding the problem at hand and the decisions that are being made, instead of trying to decipher some

"Oh bestie, you're absolutely right! Here's the real truth..."

word salad. For example, look at the following Claude Code output by the Opus 4.8 model. I can't remember whether it was on Extra or Max reasoning, but that's largely irrelevant, as is the particular project that I was working on (just some restructuring and refactoring).

Have a quick glance at the following images:

01-corporate-tone-1

Here's a later message:

02-corporate-tone-2

And yet another one:

03-corporate-tone-3

I don't know about you, but reading that upsets me.

Here's a non-exhaustive list of patterns and expressions that are responsible for that:

In addition, most places where the sentences try to be short and punchy, almost this "one-two" cadence, this sort of self-anthromorphization and sometimes writing prose that ends up reading like a wall of text when a list might be sufficient.

Maybe "upsets" is also a bit too light of a word for the feeling, too - it's more along the lines of me wishing I could run the model locally, so I could grab whatever hardware it runs on and throw it in the trash in the most violent way possible, regardless of material losses. I don't know if it's an overreaction, because the writing itself might be okay in isolation, one of those punchy bits of LinkedIn-speak here, some needlessly dramatic writing there. In moderation, it would probably be fine, but imagine having to look at that shit for X hours a day.

In a word, if Claude were a coworker, they'd be obnoxiously annoying and unpleasant to deal with, regardless of their capabilities. The thing is, I want to use it as a tool and not personify it that much. I don't want to glaze one another with compliments, I want to do work and have information presented to me in a way that is easy to read and understand. It not being that way is pissing me off, to the point where my own responses end up being emotionally charged:

04-corporate-tone-5-me

I wouldn't say that I have anger issues per se, it's just hard to remain as objective and factual in my tone I'd like when I'm faced with... well, that:

05-corporate-tone-4

And even more slop for you to experience:

06-corporate-tone-6

To the list above, I'd now like to add the following:

Again, used in moderation, it would be fine, but if I recall correctly, all of the above was within a single session. You know it's bad when you read "pure function" and wonder whether it's writing slop, or is actually talking about a function with no side effects.

All of this is even more upsetting than it'd otherwise be, because the technical capabilities are there. It can reason about code and software architecture and have meaningfully decent output. It can work on well defined issues autonomously and making it review its own code (with sub-agents that have fresh context so they can be adversarial, rather than having that false "confidence" in any solution given the prior assumptions encoded in the tokens in the main conversation context) does make it better.

There's even the dynamic workflows feature that allows longer tasks to be defined and handled pretty well:

07-when-it-works-it-works

On a technical level, within the domains that I work in, it's so good that not using it would be plain stupid for productivity, especially given how parallelizable implementation of features can be across 2-4 projects at the same time. Even more so, given how it can work on tasks while I'm at the store, or while I sleep, or handle the refactoring where I know what good results look like, but don't want to go through the slog of getting there myself. All while the current generation of models have decent enough instruction following to mostly not run rm -rf --no-preserve-root / on my PC while I'm away.

The call is coming from inside the house

The tone remains a problem. First up, because if the defaults suck, you'll see a lot of those - press releases, blog posts, soon enough even books and possibly various press articles. It's the same way how a lot of people say that AI also generates bad code - while a lot of them are using shit tier free models with minimal compute alotted to them, where expecting good results is very unlikely in any capacity.

It's somehow worse in Anthropic's case because the models are genuinely good for getting things done and them producing slop isn't enough of a dealbreaker to not use them altogether for many, and fighting back against that writing takes active effort and you can only keep it up for so long - I've mostly given up on READMEs at this point.

Now, the obvious question is - why not just tell the models not to write that way? You certainly can try:

08-corporate-tone-8

But rest assured that things will go wrong in a number of ways. Even if you could enumerate every single frustrating pattern that the LLMs output, you'll still always need to try to override the defaults with your preferences, across all of your devices where you use those models, and somehow manage to get your colleagues (or the industry at large) to do the same. It will waste tokens that you shouldn't have to waste - it should be the responsibility of Anthropic and OpenAI and others to fix their damn models.

Secondly, there's such a thing as overreach. Anyone who's tried to get LLMs to generate proper prose has seen that the system prompt can have a great impact on the quality of the output - sometimes seemingly innocous constraints and preferences can make the quality of the output nosedive. Because these models work by predicting the next token, if you manage to get them to not output a whole sub-set of speech patterns they've been trained on, you might eliminate their ability to bring up things that they otherwise would.

I guess you could liken it to linguistic relativity, except this time there is no other form of "cognition" - tokens are all that you get and while the prompt isn't exactly the same as logit bias or sampler parameters, I'd posit that the impact is similar.

Furthermore, any adjustment to the tone can also go too far. Here's an example of the memory that Claude Code created as a style guide, which blindly took some of the suggestions from that particular session and tried to turn them into absolute, global guidelines, the creation of which I would have missed and that might have subtly messed with all the following output:

09-possible-overcorrection

Thirdly, when you try to alter the output of the LLM, you're largely just fighting against how it's been trained. I recently listened to a podcast where one of the hosts was describing trying to get a model to describe actions in 1st person, such as "I will now read the files..." but they were largely unsuccessful because the model just kept going back to that output form, no matter what the prompt said. I can bet you that a lot of this was due to the majority of training data regarding agentic tasks and tool use being framed that way.

In my opinion, all of these issues are self-inflicted, even considering any of the above wouldn't be necessary, if the writing was better: more to the point when the domain demands it, more informative and friendly when the person adopts that sort of a tone. There is literally NOTHING about doing agentic coding that necessitates the current tone in any way or form and I personally blame bad model training for the mess that we are in.

At the same time, I don't think it's easy to get out of this mess without sacrificing some of the model output quality, without re-training.

Prove me wrong, please

If you think that it doesn't matter, then I have a lovely way in which you can prove me wrong.

You know how we have SWE-bench and all of its variants? What I'd want you to do is:

If I'm correct, problem #1 is that any custom instructions would waste the thinking budget on that instruction following instead of just rolling with whatever the model has been trained on (especially if you have to think about how much things cost) and secondly because the format that you want to use (in this case, the output languages) are worse represented and predicting the next tokens would become more tricky.

In other words, the performance of the models on the given tasks will degrade somewhat due to the prompt. If that doesn't do it, try asking it to only use roman numerals in all of the non-code output, you get the idea, present it with underrepresented scenarios that stray further and further off from the "happy path" (which is also where non-slop writing would lie).

I'd also posit that any single Claude Code instance, as any other that has a long term memory feature, will degrade with continued use, especially if you don't pay a lot of attention to how those memories are created and don't curate them. I decided to set out and clean up mine at least a little bit, but given that there was already a bunch of stuff in it for over a dozen projects, I threw the token machine at the problem anyways:

10-memory-review

While you'd think that using the slop machine to fix slop wouldn't be a great idea, in a review configuration it actually works pretty decent. Some more prompting later, I ended up with some global rules that could be rewritten to not be too strongly worded, while still having some impact on how the model works overall:

11-even-the-machine-gets-it

Here's a snippet of the final output, which looks at least a bit better than the overly strong memories that had been saved before:

12-slightly-more-sane-rules

In addition to all of that, there were a lot of stale ones that'd just waste tokens and might be actively misleading (e.g. code and architecture gets changed, nobody even knows about the memories), or ones that could at the very least be shortened somewhat:

13-pruning-the-memories

The problem is that I think this should be done periodically, to avoid that aforementioned gradual rot. The current Claude Code UI really doesn't seem to be geared towards this much at all, so turning the whole feature off and replacing it with a more visible CLAUDE.md and plans directory for any given project might be a better idea. But still, the original problem of bad writing remains for the most part.

Is there a solution?

As far as I'm concerned, even with the ever-present shortcomings, the SOTA models are still really productive and are gradually getting better and more useable, regardless of any plateaus slowly encroaching upon us. Either way, I still use them daily, to good results:

13-the-productivity-is-hard-to-miss

I guess for the time being I just have to remain optimistic and hope for the be...

14-you-dumb-motherfu

The honest caveat - say it out loud.

Actually, no. You know what, fuck this. Fuck this. Fuck this. I don't need your patronizing tone, you dumb motherfu-

15-this-makes-me-irrationally-angry

Here we also see it confidently coming up with wrong stuff, which somehow upsets me even more. Yes, at least there's a disclaimer about it being a guess of sorts, but with that tone things that are frustrating get a multiplier to them. I don't want to deal with this.

If the models cannot be fixed by me, the only thing I can come up with is to swap the models.

Despite their more limited capabilities, I've actually had pretty decent experiences with both DeepSeek V4 Pro and z.AI GLM 5.2, both with their max reasoning can do let's say upwards of 75% of what Opus can do - with DeepSeek being around Sonnet and GLM approaching Opus, quite possibly even closer when given more compute budget (and utilizing things like those review loops for any produced code). Their tone also isn't wholly immune to slop, but whatever supposed distillation they did, at least they didn't borrow the "personality":

16-what-good-tone-sounds-like

On some level, it's probably a case of me not being exposed to their flavor of annoying writing as much yet, so either way I can tolerate it more and it won't be as frustrating to experience, even when doing lots of agentic development (until a later point in time).

I'll probably keep an Anthropic Pro subscription going for when I need it, but shop around for other models (there's also going to be a GLM Coding Plan post up some time after this post) in the mean time and in the near future. There will surely be a point where even near-SOTA is good enough for everything I want to do on a technical level, and at that point it'll finally let me focus on the overall experience of using the models and how pleasant interacting with them is on a human level, not just their technical capabilities.

Otherwise, I'll end up having crashouts when I ask a model to write me a report on some CVEs and it's full of pop-sci drivel:

17-fable-safeguards

You can also see Fable's filters kicking in, because I used it for the initial research and it did okay there, but for whatever reason trying to reformat/translate the findings tripped it up, go figure.

Despite everything, I'm more productive than I have ever been in my life, but it also somehow feels both comedic and stupid that I need a break not to burn out - not because of some incomprehensible technical difficulty, but rather because I'm overwhelmed with slop that I don't need. The state of the modern models is largely a self-inflicted tragedy on the part of these large AI providers. Nobody asked for that. I feel like this is probably what OSS maintainers feel like when they're drowning in horrible AI generated pull requests.

I just hope that people will work more on diversifying the kinds of output we get, so that some day there aren't as many overused expressions.


Other posts

Older: AI psychosis and Anti-AI psychosis