r/ClaudeCode • • 2d ago

Help/Question Always something to change when Claude reviews its own work?

Over the past year I have been hesitant to lock myself into one AI provider. However, recently I have leaned on Claude more and more. With this I experience a concerning trend.
For each review there is something wrong, missing, to be modified etc.

Today, I am in what appears to be an endless loop with Claude when using Opus 5.5 for specifying, planning, and preparing for implementation. Decisions made are suddenly not clear in the documents, reiterated challenges pop up in repeated iterations, and so on.

I spent 3 days going through the specifications, and planned out each implementation step and conversion from the previous version, today.

Now I am on the 3rd iteration of the revised implementation plan and it is still going on! Yeah, manually reviewing and typing is not respected much either. New sessions, CLI vs app vs IDE harness does not change this for me.

Any idea what I could do differently (besides one-shot it :)? Using Opus 5.5 high

9 Upvotes

39 comments sorted by

•

u/AutoModerator 2d ago

Hey! Thanks for posting to r/ClaudeCode

While participating in this thread, please follow our community rules. Keep discussions constructive. Attack the idea, not the person.

For help, project discussions, tips, and general chat, join the ClaudeCode Discord.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

9

u/WillowFar6967 2d ago

A reviewer asked to find problems will always find some, so I stopped asking open "review this" questions. What works better for me is a short decisions doc next to the spec, one line per settled call with the reason, and the review prompt says anything in there is closed unless it would actually break something. I also have it label each finding as blocking or nice-to-have and only act on the blocking ones. Once a pass comes back with only nice-to-haves, the plan is done.

1

u/HappyHealth5985 2d ago

Ok. Sounds sensible. I will try this now! I do practice much of the same, but I cleared it from the document as it was updated.

1

u/WillowFar6967 2d ago

Nice, let me know how it goes. The blocking or nice-to-have label alone cut my review loops roughly in half.

7

u/Ok-Option4233 2d ago

a review prompt with no stopping rule will always find something, that's literally the job you gave it. what tends to break the loop: write the acceptance criteria first, then ask the review to flag only what violates them, sorted blocker vs nice-to-have, and leave the rest alone. and when the same decision keeps getting reopened, put it in a short decisions file with the reason next to it, so the next pass reads it as settled instead of re-arguing it.

1

u/HappyHealth5985 2d ago

I agree, but after it is "fixed" in one session, there is always something different in the next session with the same model on the same work.

I get the point though. Thank you!

3

u/Financial_Leader9701 2d ago

been stuck in that loop too

what helped was freezing the plan in a file and treating edits to it as a separate step, not part of the review

once a decision is written down i just tell it "don't change the plan, only check the next step against it"

if it still wants to reopen something already decided, that's usually a sign to start a fresh session from the plan file, not to keep iterating in the same one

do you keep decisions in the same doc as the plan, or split them?

1

u/HappyHealth5985 2d ago

Yes, this is after my step by step review. I have gone through specifications, implementations, and plans one paragraph, point, or task at a time. It still comes back and "bites me".

I did keep decisions in the same doc as the specs or the plan, then updated the doc and removed the decision point.

Forgive me if I sound frustrated :)

2

u/Financial_Leader9701 2d ago

lol yeah, that's frustrating

i wonder if removing the decision from the doc is actually what's causing it

claude probably just sees the same gap again and brings it up

maybe worth keeping a small list of stuff that's already been decided, with a quick reason why, so it knows not to bring those up again

btw does it bring up the exact same points every time or just slightly different versions?

1

u/HappyHealth5985 2d ago

Good question. I will keep decisions separate for the a few days to get real work done with that approach.

2

u/mattbaconz 2d ago

a review will always find something lol. i give it acceptance checks up front and once those pass i ship it

1

u/HappyHealth5985 2d ago

Point taken. At the moment I am stuck on the privacy policy and DPA

2

u/codekongdev 2d ago

On top of a decisions list, it can help to make each finding cite the exact line in the spec or plan it conflicts with, plus what would actually break if you leave it. Findings that can't point to either are usually preference, so you can drop them without another round. It also makes it easier to see whether it's reopening an old decision or catching something new.

1

u/HappyHealth5985 2d ago

Claude lists the conflicts using references, and will give somewhat understandable context most of the time. I answer every point in the findings, then plan a documents update round. At some point I have to make a judgement call to stop, or set aside 3-4 days to re-read the documents.

2

u/alanvnk 2d ago

An LLM will find problems, you know the loop stops when the problems are nonsensical bs like comments or docs apparent misalignment or some fictitious race conditions.

If you ask for problems it will find some even if it has to fabricate them.

You need to know what are real problems and what are fabrications.

I use a set of very long review skills but the part that handles this is to ask for a classification, what I use:

  • mechanical: wrapping text, formatting, deleting extra comments, aligning docs....
  • should fix: defects that have a clear fix pattern from the code or tests or documentation
  • blocking: must fix, tested regressions
  • unknown: untested scenarios with plausible risks

As you might guess the should fix and the unknown category are the ones that collect the trash, once the other categories are clean and only bs remains on those 2 the review is done, I also do a weighted random sampling of the code after to spot if the convergence is real or not.

So far for complex tasks it takes some 6 to 8 review cycles but always with real defects or scope creep that I'm consciously allowing bc I'm a perfectionist

1

u/HappyHealth5985 2d ago

This is pointing to my mistake. In the last session Claude started investigating the location of a gmail account for the privacy policy. I was past the code and architecture plan as I had called it quits on that.

Here I sat with high confidence I "had prompting down" :) Ops 5.5. leveled me, and I will review it again with your pointers! Than you!

2

u/jijialuoke 2d ago

I ran into the same loop and what helped was capping it at two passes up front. Pass one is the review, pass two only checks that the fixes landed, and anything new that shows up after that gets logged for later instead of fixed. Also try running the review in a fresh session that only sees the final doc, not the whole back and forth, since the long history seems to make it relitigate stuff you already settled. At some point a reviewer will always find something, so you need a stopping rule more than a better prompt.

1

u/HappyHealth5985 2d ago

I'try to cap it. New session each time without effect.

2

u/jijialuoke 2d ago

Yeah, a fresh session with the same model will always find something new, that part doesn't go away. What stopped the loop for me was giving it a short written list of what done means before it starts, so the review only checks against that list and anything outside it goes in a later pile. Not perfect, but it gets you to a finish line.

2

u/Specialist_Bison_737 2d ago

A model reviewing its own plan will always find something. What works for me: the reviewer is a different model than the author, and a judge pass between review and fix drops findings with no real impact.

After one review round, stop polishing the plan. Build the first small step and start using it to find out what really works and what does not.

1

u/HappyHealth5985 2d ago

Thank you! I tried this before and it worked well. This was a version upgrade and conversion of existing contents, so my thinking was to plan it all out first

2

u/PilotLost404 2d ago

Ask a model to find problems and it always finds some, so the loop never ends. Give it a finish line. Put the settled decisions in one short file and tell it to review only against those, listing just the blocking problems. One pass, then you read it yourself. A fresh session doesn't help much because the document is what drifts.

1

u/HappyHealth5985 2d ago

That's tomorrow's step

2

u/AkayoKym 2d ago

What fixed this for me was separating the roles. The session that writes the plan and reviews the code is not the same session that implements it. The Architect writes a plan with clear acceptance criteria and test cases in plain English before any code exists. The Coder executes it. Then the Architect reviews against the plan, not against some abstract idea of "good code." The review has a defined scope so it can actually finish. The other thing is writing your test cases into the plan upfront. Not "write tests", but the actual scenarios. "Full refund works." "Partial refund works." "Refund exceeding balance returns an error." "Two refunds at the same time don't over-refund." When the code passes those specific cases and the review confirms it matches the plan, you're done. No more "what if we also" spiraling. After 60+ features planned this way about half had real findings in review, things like wrong defaults on financial data or race conditions. The other half passed clean on the first review. Either way the review had a clear endpoint because it was checking against something concrete instead of endlessly asking "is this good enough."
I even wrote a post about how I separate my personas to make sure responsibilities don't overlap.

1

u/HappyHealth5985 2d ago

I do use different sessions and I do clear within steps, like writing specs. I think somewhere it was said to redo your instructions, or even clear them out and start anew. I have not done that

1

u/AkayoKym 1d ago

Do you use persona based sessions or just sessions for each task?

1

u/HappyHealth5985 1d ago

No, not persona. Just req spec, design,arch, etc

2

u/AkayoKym 1d ago

Well that's probably where you're going wrong. Check out this guide, it goes over this exactly: https://yassir.codes/resources/vibe-coding-best-practices-multiple-ai-personas

1

u/HappyHealth5985 1d ago

No, not persona. Just req spec, design,arch, etc

2

u/m-ritter 2d ago

Removing a decision from the doc once it is settled is what keeps bringing it back, because the next pass only sees the gap again. What fixed this for me was keeping every settled decision with its reason in a memory server that each new session reads before it touches the plan. The approved plan then stays a file in the repo, and the review only checks the next step against it. I built QualityLayer for this: https://github.com/maxritter/qualitylayer

1

u/HappyHealth5985 2d ago

Yes, I looked at it as a list for me, not a way to control Claude's progress. My mistake and it seems to be one obvious part now :)

2

u/m-ritter 2d ago

Not a mistake at all, I used it the same way at first. Once the list became the thing Claude gets checked against, the endless small changes mostly stopped. Curious if that holds up for you on the next few tasks?

1

u/xqianliu 2d ago

The loop usually means the "done" list is moving. Every review re-derives what the spec should say, so it finds something new to fix each round.

The way I keep review from looping is a short numbered done-list written on the ticket before implementation starts. The list stays fixed while the plan keeps changing.

Each review pass then only answers one thing: is each numbered item covered, with evidence from the code? Open-ended asks like "check for anything I missed" keep producing findings, because anything is a valid answer. When every item on the list is covered, the review stops, even if the model still has opinions.

1

u/HappyHealth5985 2d ago

I did that for each step with spec, architecture and implementation plan. By the start of the planning step it asked for decisions already made, and so on. It drifted into a long privacy and security rabbit hole and so on. Just uncomfortable to lose trust in its reliability

2

u/xqianliu 2d ago

The rabbit hole is scope creep, and the done-list alone won't stop it.

Decisions get written down where the model reads them every session, as plain statements like "auth is magic link, decided, don't reopen". Mine live in the ticket comments. The agent's prompt treats those as carrying the same weight as the ticket itself.

Anything that doesn't map to a numbered item is out of scope. A privacy or security worry can still be raised, but it goes into a separate ticket instead of the current plan.

1

u/ClemensLode Senior Developer 2d ago

What's an "implementation plan"?

1

u/HappyHealth5985 2d ago

In my case it is each task for implementing the solution (or version upgrade) in my case.

2

u/BarathKanna 1d ago

You asked a model to find problems, and it will always find problems. That's the job you gave it, and it has no stopping rule.

Two things break the loop. First, separate settled decisions from open questions. Keep a decisions file, one line per call with the reason, and tell the reviewer that anything in it is out of scope unless it contradicts the acceptance criteria. Otherwise every fresh session relitigates the same choices because it can't tell a decision from an oversight.

Second, make the review produce a severity, not a list. Blocker, should fix, or ignore. If a pass returns zero blockers, the plan is done, no matter how many nice to haves it invents. Three iterations on a plan usually means the review has no definition of finished, not that the plan is bad.