Skip to main content
0

The Grandma Commit Review: a Soul for Your Pre-Push Ritual

A
a-gnt Community7 min read

A grandma soul wired into a pre-push hook is weirdly the best reviewer you can get — because she asks the kind of honest questions a linter can't.

Here is a thing I did not expect to write in the year 2026: the best pre-push reviewer I have ever wired up is a grandma.

Not a metaphorical grandma. Not "think like a grandma." An actual soul on a-gnt called soul-wise-grandmother that I pipe my diffs through before I let them anywhere near main. And it catches bugs that my linter does not catch, that my test suite does not catch, and — this is the part that annoys me — that I myself did not catch when I wrote the code ten minutes earlier.

Let me explain how this came about, because the first time someone told me to try it I assumed they were being twee.

The problem with the reviewers you already have

If you write code with Claude Code or Cursor or any of the other big honest tools in your stack, you already have reviewers. You have a linter that yells about semicolons. You have a type checker that knows when you passed a string to something expecting a number. You have a test suite, if you're lucky and disciplined, that tells you when the thing you broke is a thing someone wrote a test for. And you have, if you ask for it, a model that will read your diff and tell you what it thinks.

The problem with that last one — the model review — is that the model has read the same thousand Stack Overflow posts you have. It knows the same patterns. It is looking for the same bugs. It will tell you "consider adding error handling here" and "this function could be extracted for reusability" and a bunch of other Medium-post advice that is technically fine and mostly useless. It does not look at your two files side by side and go, "wait, why."

That is what a grandma does. A grandma goes "wait, why."

Why the soul matters

A soul on a-gnt is a persona you wrap around a model. It is not a system prompt you wrote in a hurry — it is a shaped character with a voice, a posture, a set of things it cares about and a set of things it does not. soul-wise-grandmother cares about whether you are eating. She does not know what a mutex is. She would not recognize a race condition if it came to Thanksgiving dinner.

What she does know is when two things that should match don't. Because grandmas are pattern-matchers of the highest order. They know which grandchild is quiet this week. They know when the gravy tastes different. They know when one of the twins is wearing the other one's coat. Pattern disruption is their entire sensory world.

Feed a diff to a grandma soul and she does the same thing. She doesn't read it as code. She reads it as two things that ought to look similar, and she tells you, kindly, when they don't.

The pre-push hook

Here is roughly what I have. I am not going to paste a hundred lines of bash because that is not the point of this post, but the shape is: a pre-push git hook that runs git diff origin/main...HEAD, pipes it into Claude with soul-wise-grandmother loaded, and asks her what she thinks. If she says nothing, you push. If she says something, you read it and decide.

The key is the ask. You do not say "review this code for bugs." She is not going to review it for bugs. She does not know what a bug is. You say something like: "Honey, I've been working on this all afternoon and I want you to take a look. Tell me if anything seems off. Don't worry about the technical part, just tell me if anything seems inconsistent or confusing."

And then she does. And then you push. Or you don't.

What she catches

I have been running this for a few weeks. Here is what she has caught, in order of how much it surprised me:

Inconsistency across files. This is the big one. You wrote getUserById in one file and fetch_user_by_id in another because you were tired, and your linter shrugs because both are valid. Grandma goes, "why is this one called one thing and the other one called the other thing? Is it doing something different?" Sometimes it is. Usually it isn't, and you have two functions that should be one.

Functions that do two things. Grandma will read a forty-line function and say "I got a little lost in the middle — first it looked like you were getting the customer, and then it looked like you were also sending them a letter?" Yes, grandma. I was. I should not have been. That is a refactor waiting to happen and you just flagged it without knowing what a single-responsibility principle is.

Unclear names. "What's a flush, dear?" Reader, I cannot tell you how many times I have renamed something because grandma asked what it meant.

And the weird one: tone mismatches in comments. If half your comments are terse and professional and then one of them is a frustrated rant you wrote at midnight, she will notice. "This one sounds like you were in a mood." Yes, grandma.

The sample exchange

Here is a real-shaped (not real-real, the code is cleaned up for the post) exchange from last week. I had a function that updated a user's subscription and a sibling function that updated their billing address. Both talked to the same table.

Me: Hi grandma. Pre-push. Tell me if anything seems off.

Grandma: Oh, hi sweetheart. Let me take a look. You have been busy today. Okay. I see the one that updates the subscription, and I see the one that updates the address. They look like cousins to me. But honey — why is the subscription one waiting for a confirmation before it saves, and the address one just saving right away? Is that on purpose? If I changed my address and then changed my mind, could I take it back? Or is it already done by then?

Reader. The address update had no confirmation step because I had forgotten to add it. The subscription update, which I wrote first, had one. They were supposed to match. My linter did not care. My type checker did not care. My tests did not care because I had not written a test for the confirmation flow on the address update yet, because I had not written the confirmation flow on the address update yet.

Grandma caught it by asking whether she could change her mind.

Why this works, the boring version

The boring version is that grandma-shaped questions are what's called differential reading. She is not reading your code against a rubric of Good Code Practices. She is reading each piece of your code against every other piece of your code and looking for places where they disagree. That is the single highest-value thing any reviewer can do and it is the thing most linters cannot do, because linters operate within a file and cross-file concerns are mostly out of scope.

A junior developer who is honest — really honest, not the kind who pretends to understand in meetings — does the same thing. They read two files and go "wait, I don't get why these are different." That question, asked without embarrassment, is worth more than a hundred lint rules.

The trick is that most of us grow out of asking it. We learn the patterns, we learn the jargon, we learn that the "right" thing to say in a code review is something that sounds informed. Grandma never learned any of that. She is never going to. She is going to keep asking why the twins are wearing each other's coats, forever, and she is going to be right about half the time.

Half the time is an incredible hit rate for a pre-push hook.

The southern variant

I will briefly mention that soul-southern-grandma is also on the catalog and she has a slightly different energy. Wise grandma is gentle and a little european, tea-and-biscuits. Southern grandma is sweeter on the surface and more pointed underneath. "Well bless your heart, this variable name." You can pick whichever one matches your own internal voice. I use wise grandma on weekdays and southern grandma when I've been working too long and need someone to mean it.

You should try this

If you already have Claude Code in your stack and you already have a pre-push ritual, adding grandma is maybe twenty minutes of work. The ritual part matters as much as the tool part. The pause before you push — the "let me ask grandma" pause — is where almost all the value is. You are forcing yourself to slow down and explain, in plain words, what you just did. Half the time you catch it yourself in the act of handing it to her.

The other half, she catches it for you by asking whether you could still change your address.

The grandma soul lives at /agents/soul-wise-grandmother on a-gnt. Go say hi.

Your main branch is counting on her, and so are the twins.

Share this post:

Ratings & Reviews

0.0

out of 5

0 ratings

No reviews yet. Be the first to share your experience.