I Am Not a Reverse Centaur - miguelgrinberg.com (https://blog.miguelgrinberg.com/post/i-am-not-a-reverse-centaur) (https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css) (https://fonts.googleapis.com) (https://fonts.gstatic.com) (https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap) (https://fonts.googleapis.com/css2?family=Roboto:wght@700&display=swap) (/static/tomorrow.min.css) (/static/tomorrow-night.min.css) (/static/social.css) (/static/style_20260305.css) (/static/favicon.ico) (/feed) (miguelgrinberg.com RSS feed) (/index) miguelgrinberg.com (/index) Home (/post/my-courses-and-books) My Courses and Books (/post/hire-me) Consulting (/post/about-me) About Me Light Mode Dark Mode System Default (http://github.com/miguelgrinberg) (GitHub) (GitHub) (http://www.linkedin.com/in/miguelgrinberg) (LinkedIn) (LinkedIn) (https://bsky.app/profile/miguelgrinberg.com) (Bluesky) (Bluesky) (https://mstdn.social/@miguelgrinberg) (Mastodon) (Mastodon) (https://twitter.com/miguelgrinberg) (Twitter) (Twitter) (https://youtube.com/miguelgrinberg) (YouTube) (YouTube) (https://www.buymeacoffee.com/miguelgrinberg) (Buy Me a Coffee) (Buy Me a Coffee) (https://patreon.com/miguelgrinberg) (Patreon) (Patreon) (/feed) (RSS Feed) (RSS Feed) (/post/i-am-not-a-reverse-centaur) I Am Not a Reverse Centaur Posted by (Miguel Grinberg) on June 12, 2026 under (Personal) (AI) About a year ago I wrote on this blog about how (/post/why-generative-ai-coding-tools-and-agents-do-not-work-for-me) coding with LLMs would not work for me , even if there were no ethical or environmental concerns preventing me to use them. I'm not going to repeat the arguments I made that time because my views on the subject haven' t changed. What has changed, however, is that the number of contributions I receive on my open source projects has gone up, and nearly all are now made with LLMs. The other day I had a very depressing thought regarding this. All these people who submit drive-by pull requests to my projects are pushing me to spend more and more of my time reviewing and merging code that was extruded by machines. Cory Doctorow refers to people that perform this function as reverse centaurs . He calls these "frail and vulnerable people being puppeteered by uncaring, relentless machines." Ouch! Am I a reverse centaur now? Is my new purpose as a seasoned software engineer and open source developer to spend my days reviewing LLM code, in spite of having decided that I do not need nor want this technology myself? As you can guess from the title, I'm never going to become a reverse centaur. Let me tell you how I resist the forces that want me to be one. No more unsolicited pull requests Back in pre-LLM days, receiving an unexpected pull request (PR) from a fellow coder was a source of excitement and pride. It meant that some random person decided it was worthwhile to invest their time and effort to improve a project of mine and share the result, not just with me but with all of its users. Today, an unsolicited PR is a red flag. Too many people lazily prompt an LLM code generation tool and ask it to alter the behavior of one of my open source projects to meet their specific needs, without any care or consideration for what is being changed or how it might affect other users. Sometimes these changes make sense and improve the project, but often enough they do not. The submitters rarely care though, they just slap a long LLM generated description and send the PR over, leaving me with the task of figuring out if the change makes any sense at all or is pure slop. I have decided that I have more important things to do with my life than to spend my days reviewing code produced by LLMs. If you want to contribute to one of my projects, I expect you to be the direct contributor, and to have a genuine interest in improving my project. The contribution guidelines I include in all my open source projects have these instructions for contributors. If you are interested in contributing a change to this project, please first introduce the change you wish to make to the maintainer in an issue. Pull requests that are submitted without a previous discussion in an issue may be closed at the maintainer's discretion. Once the maintainer accepts your proposed change and allows you to work on it, feel free to submit a pull request. With this process I get to know the contributor and their proposal before there is a big time investment on either side, so it is a win-win for everyone. In spite of this I still get unsolicited PRs, so clearly some users (or more likely their LLMs) do not read contribution guidelines. My initial task when a new unexpected PR arrives is to determine if there is a person behind it or not, and luckily this is easy to figure out in just a few seconds. If I don't see proof of human involvement, then I'm not interested, so the PR gets immediately closed with no questions asked. You may argue that with this attitude I'm likely to miss useful improvements or bug fixes to my projects, and I guess that is possible. I really have no way to know without spending time reviewing these unsolicited PRs to separate the good from the bad. When I was sure that every contribution had the effort of a person behind it this review work was justified and I even enjoyed it. In today's slop-filled world this is reverse centaur work and it is not for me, so I only pay attention to PRs that come from engaged contributors. My advice if you can only code with the help of an LLM and need fixes or improvements in a project of mine is that you don't waste your tokens on a PR, since I will ignore it. Instead, describe the problem in an issue, and let me handle the work. I do not want an LLM-generated novel with chapters, bullet points and emojis, just a simple description of the problem in your own voice. Since you will be saving some of those expensive tokens, you could also consider a donation, which will likely motivate me to prioritize your problem! Does open source matter anymore? This is a question that I constantly ask myself, and I do not have a clear answer yet. I still do a lot of coding, both for work and for fun, but in the last few years I have been less interested in sharing the things that I make. I still have enough interest to keep my current open source projects updated, but I have a bunch of recent projects that I can't bring myself to make public. My perception is that there is less interest in open source, and in coding in general. The main reason I love coding is that it is a challenge, and I think this is actually the same reason why a lot of people prefer to give money to an AI lab and get a machine to spit out code for them, even with the risk of the code being subpar. Will this trend continue to the point that nobody codes anymore and it is only machines doing it? I hope not, but we'll have to wait and see. I will continue to oppose a future in which we all have to be reverse centaurs, with the machines (and their billionaire owners) calling the shots. Buy me a coffee? Thank you for visiting my blog! If you enjoyed this article, please consider supporting my work and keeping me caffeinated with a small one-time donation through (https://www.buymeacoffee.com/miguelgrinberg) Buy me a coffee . Thanks! (https://www.buymeacoffee.com/miguelgrinberg) (Buy Me A Coffee) Share this post (https://news.ycombinator.com/submitlink?u=https%3A//blog.miguelgrinberg.com/post/i-am-not-a-reverse-centaur&t=I%20Am%20Not%20a%20Reverse%20Centaur) Hacker News (https://reddit.com/submit/?url=https%3A//blog.miguelgrinberg.com/post/i-am-not-a-reverse-centaur&resubmit=true&title=I Am Not a Reverse Centaur) Reddit (https://twitter.com/intent/tweet/?text=I%20Am%20Not%20a%20Reverse%20Centaur&url=https%3A//blog.miguelgrinberg.com/post/i-am-not-a-reverse-centaur) Twitter (https://www.linkedin.com/shareArticle?mini=true&url=https%3A//blog.miguelgrinberg.com/post/i-am-not-a-reverse-centaur&title=I%20Am%20Not%20a%20Reverse%20Centaur&summary=I%20Am%20Not%20a%20Reverse%20Centaur&source=https%3A//blog.miguelgrinberg.com/post/i-am-not-a-reverse-centaur) LinkedIn (https://facebook.com/sharer/sharer.php?u=https%3A//blog.miguelgrinberg.com/post/i-am-not-a-reverse-centaur) Facebook (mailto:?subject=I%20Am%20Not%20a%20Reverse%20Centaur&body=https%3A//blog.miguelgrinberg.com/post/i-am-not-a-reverse-centaur) E-Mail (/post/i-am-not-a-reverse-centaur#comments) 20 comments #1 Magesajr said 5 days ago CAN IA reach the point when it can come up with creative minds(new ideas i mean)? But my qn is that can A flask web app become as a mobile app? I read a little about PWA(progressive web app) could you please explain a little about it and on how they can handle off line database transaction using Dexie #2 Dan said 5 days ago Hello, I like your approach as it still allows people to use LLMs to ease and speed up the coding phase for those that want to, but it reintroduces some humanity and social interaction in the process. As you said, win-win. What about putting some instructions in the contributing guidelines that would be read by LLMs, and would prevent them from working on the repo without an issue where you specifically approve it? #3 Miguel Grinberg said 4 days ago @Dan: You probably need to reread this blog post. LLMs are banned completely on my open source repositories. I only accept work from real people. #4 Miguel Grinberg said 4 days ago @Magesajr: I'm not the right person to ask about what LLMs can or cannot do. #5 Me said 4 days ago Old man yells at cloud, story at 11 #6 girllich said 4 days ago yeah, that's unfortunate. personally I just hard fork and rename all projects I modify with llms, to ease your burden #7 Alexrsk said 4 days ago I think, that "daily routine software engineering" will be automated fully in closest years; the new, free LLMs are here, which surpassed year-ago flagship LLMs. Also, optimized for LLMs hardware is here. This is so sad, I'd like to get rid of LLMs, but you genie is out of the bottle. What remains, is a coding as artwork. It's like Ferrari assembled by hand work in quantity of about 10, and Ford's conveyor belt. The first is for creators, the latter is for workers. So i predict a drastic gap between highpaid, narrow niche for code artisans, and easily replaceable worker of code conveyor. I wholeheartedly support you as seasoned dev, but can't afford to refuse reality. #8 Alexrsk said 4 days ago Some additional thoughts.I think that authors of educational books should demand prohibition of training LLMs on theirs content or using as RAG source #9 James A said 4 days ago About potentially missing out on useful contributions as a result of this filtering by requiring an existing issue report: I wouldn't worry too much about that. A good request/feature is likely to attract multiple supporters -- even if that takes some time (weeks/months, potentially), or requires some coalescing/herding of related issues and considerations. From the contributor side, as someone who enjoys the satisfaction of writing and improving code: I'm fairly likely to want to provide a pull request around the same time as filing an issue, at least if I believe that the required modification is small. Whether those hypothetical pull requests take into account all of the effects on the software and its consumers is likely to depend on how well I understand the particular project's environment. #10 Miguel Grinberg said 4 days ago @Me: the old man needs you and people like you to stop sending crap PRs to his projects. Then he would not need to yell at clouds anymore. #11 Miguel Grinberg said 4 days ago @girllich: It's great that you are willing to do that, but a lot of people want their LLM-made changes to be merged upstream because they want to continue taking advantage of updates and bug fixes, and apparently it is too much work to rebase once in a while. #12 Miguel Grinberg said 4 days ago @James: If you submit an unsolicited PR to a project of mine, even if it is immediately preceded by an issue, I'm going to start with the assumption that it is slop and spend just a few seconds on it to give it the chance of changing my mind. If you worked on the PR yourself, I will collaborate with you to merge the PR. This could mean that I will suggest additional changes that you (or I) will need to make before the PR can be merged. I've gone through this process lots of times, collaboration is one of the most gratifying aspects of open source. #13 EmmanuelNiyonshuti said 4 days ago This is a bold take, and I respect it. I mean, I don't know, but this is kinda sad too. While finishing reading this, I couldn't help but wonder why you'd let "this" diminish your desire to keep sharing your work. I understand and empathize with the frustration of these low-effort, LLM-generated contributions and the burden that puts on maintainers. At the same time, I will forever appreciate open source and the willingness of people to share what they know. Personally, I enjoy coding because I like understanding how things work. I want, or at least try, to know what I'm doing and why I'm doing it. I have this fear of ending up with more and more code I haven't looked at, or APIs I have no idea what they do. That's why I try to be careful with these tools. Armin calls them "clankers", and speaking of Armin, from one of his writings, he argues like: "meaningful criticism comes from engagement. You don't have to become an enthusiast, but there is value in getting close enough to a technology to understand where it genuinely helps and where it breaks down." And that makes me wonder. if the flood of low-effort contributions is the problem and not the act of creating itself, why should that discourage you from continuing to share new things? Maybe this is already the reality for other people like you. Maybe the direction these things are going is way more obvious to people at your level, which makes my view a bit biased, I don't know. But I lowkey hope these clankers don't end up leading people away from sharing their work and from keeping the open source community as it used to be. Thanks! #14 Thomas said 3 days ago You have made tremendous contributions to the world of open source, and educated scores of programmers on your tools and those of others. We all owe you a huge debt of gratitude. How you spend your time is entirely your choice, you are under no obligation to spend it on any PRs or comments, regardless of who or what authored them. I find your position entirely reasonable, and hope that you continue to receive productive input and feedback from your users and fellow enthusiasts. And let's not forget that the only reason LLMs know anything about your open source software is that their creators incorporated your writing into the training data, without asking for permission or consent. Thank you for your incredible work! #15 Gabriel said 2 days ago Hi Miguel. Regards from Argentina!I have 10 years of experience working as a developer. I've made architectural decisions in banks and different companies using Flask, always trying to follow your approaches. So, as you can imagine, I really like how you write your blog, books and the software.I used AI, and my first try was like all the hyped people, thinking that we have an automatic coding machine and we can go faster. But after using it for 4/5 months, I saw the negative part: I started to forget how to code. I started to forget how to think. I think in a few years, we will realize that using AI to replace cognitive tasks is like poison. It took 20 years of different investigations to find out the damage that social media made and is making in our brains. I'm sure in less time we will find the same for AI. Thanks for your books, your blog, and your words. I really appreciate it. #16 cjoen said a day ago I just read your 'coding with LLMs would not work for me' and this article and I appreciate your perspective and I'd expect at a certain point of expertise LLM's do waste more time than help. As someone who's trying to get to an AI superior level of expertise, I'm still finding AI somewhat useful, but I want to make sure I'm actually learning as well instead of atrophying to a point that all I can do is prompt. What has helped you learn and genuinely grow the most? It is hard navigating the pressure to use the tool for 'efficiency gains' while knowing that can easily lead to stunted growth as an engineer. #17 Miguel Grinberg said a day ago @cjoen: I don't know of any way the "cheat" to gain expertise in something. Really the only way is to constantly do the thing you want to become experienced in. Experience is acquired in small doses as you do this. #18 Dan said a day ago Oops, my bad. Your blog post does give out the impression that you were up against unsolicited AI drive-by pull requests only, not that you were ideologically against AIs, however they are used. There's nothing wrong with an AI that's correctly used by a human who first talks to you in an issue, gets to know the project, collaborates with you to understand if their suggestion would be a good match for the project, and only then gets moderate help from an AI for their development work. That is, a true developer that submits code after they've tested and reviewed it; not someone who doesn't know how to code, gives prompts to an AI and then lets it open a PR with a long LLM generated description full of emojis. A PR can be good even if the code is partially written by an AI, as long as a human is there to understand it and make it proper before sending it to you. Well, if that's your stance, good luck to you then. My advice should be to quit computers before going insane. #19 Miguel Grinberg said a day ago @Dan: I have stopped reading the paragraph that starts with "There's nothing wrong with an AI that's correctly used by a human" because I don't care and I see no point in arguing on my own blog of all places. And I'm not going insane, but thanks for your concern. #20 Andrew said 9 hours ago I appreciate this stance. Reviewing code was never the fun part of the job, but was worth it to teach someone and make the project better. If it's just a machine on the other end, there's no teaching benefit, and the odds it will actually make the project better are exceedingly low, if admittedly not non-existent. That bar is not nearly high enough to be worth the effort, especially at scale. (/post/i-am-not-a-reverse-centaur/page/1#comments) «« (/post/i-am-not-a-reverse-centaur/page/0#comments) « (/post/i-am-not-a-reverse-centaur/page/0#comments) » (/post/i-am-not-a-reverse-centaur/page/0#comments) »» Leave a Comment () (IjQ2MTFlNDY5NDcwYTk0NDUyZWQ5YWQ1OWU0YjI4YTMwMmFjODRjZWQi.ajHmVg.QoxBnL_9Te8RHgKCP5s86VP57-I) Name () Email () Comment Captcha (reCAPTCHA) (Submit) MicroPython for the Raspberry Pi Pico W (https://learn.miguelgrinberg.com/product/micropython-pico) (MicroPython for the Raspberry Pi Pico W) If you like my (https://blog.miguelgrinberg.com/post/micropython-and-the-internet-of-things-part-i-welcome) MicroPython tutorial series on this blog, you may also like my (https://learn.miguelgrinberg.com/product/micropython-pico) MicroPython for the Raspberry Pi Pico W book. (https://learn.miguelgrinberg.com/product/micropython-pico) Click here to get this Book! About Miguel Welcome to my blog! I'm a software engineer and technical writer, currently living in Drogheda, Ireland. Generative AI notice: I do not use LLMs, agents or any other generative AI tools for help with writing, coding, image creation or any other tasks related to this blog or my open source work. You can also find me on (https://github.com/miguelgrinberg) Github , (http://www.linkedin.com/in/miguelgrinberg) LinkedIn , (https://bsky.app/profile/miguelgrinberg.com) Bluesky , (https://mstdn.social/@miguelgrinberg) Mastodon , (https://twitter.com/miguelgrinberg) Twitter , (https://youtube.com/miguelgrinberg) YouTube , (https://www.buymeacoffee.com/miguelgrinberg) Buy Me a Coffee , and (https://patreon.com/miguelgrinberg) Patreon . Thank you for visiting! Categories (/category/AI/feed) (AI RSS Feed) (AI RSS Feed) (AI RSS Feed) (AI) 5 (/category/Arduino/feed) (Arduino RSS Feed) (Arduino RSS Feed) (Arduino RSS Feed) (Arduino) 7 (/category/Authentication/feed) (Authentication RSS Feed) (Authentication RSS Feed) (Authentication RSS Feed) (Authentication) 10 (/category/Blog/feed) (Blog RSS Feed) (Blog RSS Feed) (Blog RSS Feed) (Blog) 1 (/category/C++/feed) (C++ RSS Feed) (C++ RSS Feed) (C++ RSS Feed) (C++) 5 (/category/CSS/feed) (CSS RSS Feed) (CSS RSS Feed) (CSS RSS Feed) (CSS) 1 (/category/Cloud/feed) (Cloud RSS Feed) (Cloud RSS Feed) (Cloud RSS Feed) (Cloud) 12 (/category/Database/feed) (Database RSS Feed) (Database RSS Feed) (Database RSS Feed) (Database) 33 (/category/Docker/feed) (Docker RSS Feed) (Docker RSS Feed) (Docker RSS Feed) (Docker) 6 (/category/Filmmaking/feed) (Filmmaking RSS Feed) (Filmmaking RSS Feed) (Filmmaking RSS Feed) (Filmmaking) 6 (/category/Flask/feed) (Flask RSS Feed) (Flask RSS Feed) (Flask RSS Feed) (Flask) 130 (/category/Games/feed) (Games RSS Feed) (Games RSS Feed) (Games RSS Feed) (Games) 1 (/category/Infra/feed) (Infra RSS Feed) (Infra RSS Feed) (Infra RSS Feed) (Infra) 1 (/category/IoT/feed) (IoT RSS Feed) (IoT RSS Feed) (IoT RSS Feed) (IoT) 8 (/category/JavaScript/feed) (JavaScript RSS Feed) (JavaScript RSS Feed) (JavaScript RSS Feed) (JavaScript) 37 (/category/MicroPython/feed) (MicroPython RSS Feed) (MicroPython RSS Feed) (MicroPython RSS Feed) (MicroPython) 10 (/category/Microdot/feed) (Microdot RSS Feed) (Microdot RSS Feed) (Microdot RSS Feed) (Microdot) 1 (/category/Microservices/feed) (Microservices RSS Feed) (Microservices RSS Feed) (Microservices RSS Feed) (Microservices) 2 (/category/Movie Reviews/feed) (Movie Reviews RSS Feed) (Movie Reviews RSS Feed) (Movie Reviews RSS Feed) (Movie Reviews) 5 (/category/Personal/feed) (Personal RSS Feed) (Personal RSS Feed) (Personal RSS Feed) (Personal) 5 (/category/Photography/feed) (Photography RSS Feed) (Photography RSS Feed) (Photography RSS Feed) (Photography) 7 (/category/Product Reviews/feed) (Product Reviews RSS Feed) (Product Reviews RSS Feed) (Product Reviews RSS Feed) (Product Reviews) 2 (/category/Programming/feed) (Programming RSS Feed) (Programming RSS Feed) (Programming RSS Feed) (Programming) 198 (/category/Project Management/feed) (Project Management RSS Feed) (Project Management RSS Feed) (Project Management RSS Feed) (Project Management) 1 (/category/Python/feed) (Python RSS Feed) (Python RSS Feed) (Python RSS Feed) (Python) 187 (/category/REST/feed) (REST RSS Feed) (REST RSS Feed) (REST RSS Feed) (REST) 7 (/category/Raspberry Pi/feed) (Raspberry Pi RSS Feed) (Raspberry Pi RSS Feed) (Raspberry Pi RSS Feed) (Raspberry Pi) 8 (/category/React/feed) (React RSS Feed) (React RSS Feed) (React RSS Feed) (React) 19 (/category/Reviews/feed) (Reviews RSS Feed) (Reviews RSS Feed) (Reviews RSS Feed) (Reviews) 1 (/category/Robotics/feed) (Robotics RSS Feed) (Robotics RSS Feed) (Robotics RSS Feed) (Robotics) 6 (/category/Security/feed) (Security RSS Feed) (Security RSS Feed) (Security RSS Feed) (Security) 14 (/category/Video/feed) (Video RSS Feed) (Video RSS Feed) (Video RSS Feed) (Video) 22 (/category/WebSocket/feed) (WebSocket RSS Feed) (WebSocket RSS Feed) (WebSocket RSS Feed) (WebSocket) 2 (/category/Webcast/feed) (Webcast RSS Feed) (Webcast RSS Feed) (Webcast RSS Feed) (Webcast) 3 (/category/Windows/feed) (Windows RSS Feed) (Windows RSS Feed) (Windows RSS Feed) (Windows) 1 © 2012-2026 by Miguel Grinberg. All rights reserved. (mailto:webmaster _at_ miguelgrinberg _dot_ com) Questions?