{"slug": "i-use-ai-on-this-blog", "title": "I use AI on this blog", "summary": "In a blog post, the author describes their personal policy for using AI tools like ChatGPT and Claude in creating content for their blog, emphasizing that AI is used for ideation, code review, and editorial feedback, but all text and code are human-generated. The author's philosophy is that AIs identify problems and the author fixes them, with a specific exception that is always flagged. The post serves as a snapshot of current practices for future reference.", "body_md": "## How I use AI on this blog\n\nInspired by [this LessWrong post](https://www.lesswrong.com/posts/tgigHkZoYrJEGe4tP/ai-use-policy-for-my-essay-writing),\nI thought I'd write about how I use AI here. This is less in the\ninterest of disclosure, more to provide a snapshot of what I'm doing right now so\nthat I can revisit it in the future and see how it changes. And hey, maybe it'll be of\ninterest to you, dear readers.\n\nIf I were to summarise my working philosophy in fewer than ten words, it would be: AIs identify\nproblems and I fix them myself. With a very specific kind of exception (which I\nalways flag), the text and code on this blog are human-generated. That's not a\nmoral stand, but more a constraint imposed by what this blog is meant to be -- a place for me to\n[learn in public](/2025/02/20250223-til-deep-dive-posts).\n\n### Ideation and running experiments\n\nEvery post here is based on an idea I had, and work that I've done. For many posts\n-- for example, the large-scale coding projects like [this one](/2026/07/llm-from-scratch-34b-building-and-training-gpt-2-small-in-jax) --\nI'll have multiple chat sessions ongoing while I do the work, normally with either\nChatGPT or Claude, or sometimes both. The amount of input they have varies, but\nbecause the value of these projects is in what I learn when I'm doing them, letting an AI\ndo my thinking for me would make the whole thing pointless -- so I take steps to stop that\nfrom happening.\n\nAIs are, of course, trained to be helpful, and will often explain things in their\nreplies that I would have better learned on my own through experimentation. I'm generally\npretty good at spotting when that happens before I've read more than a sentence or two,\nthough, so I can skip reading that part, scroll straight down to the input field, and ask it\nto operate in more of a [rubber duck](https://en.wikipedia.org/wiki/Rubber_duck_debugging) mode.\n\nWith the most complicated projects, where each step has a hard dependency on having\ngot the previous one just right, I do use AIs for code review. Let's say that I've\nbuilt a model that I intend to extend. I'll test it myself (does the loss go down\nwhen training, is it generating plausible-looking results?), but if I want to be really\ncautious, then I'll run the code past an AI. I'll paste it into a chat session and tell the LLM what it's meant to\ndo, and ask it to check if I've screwed up 1. Again, though, I make it clear that I don't want\nit to make fixes -- just to point out any bugs.\n\n### Writing things up, and the editorial board\n\nAs things progress with a project, I keep detailed notes. When I'm done, I write them up without AI assistance, getting the post to a level where it might be a little messy in terms of how things are explained, but all of the important information is in there. I read it through and make sure I'm reasonably happy with it, and then it's time for what I've taken to calling the editorial board.\n\nI paste the draft post into a fresh chat session with an LLM -- right now, this is normally\nClaude -- and ask for comments. It already has enough information in its memory of earlier conversations to\nknow that what I'm looking for: places where I'm confidently wrong\nor other technical errors, places where my explanations are missing a step, or\nwhere I'm overexplaining things, conclusions that don't really follow from the results of\nan experiment, and that kind of issue. It tends to spot a few\nsilly grammatical errors and typos at the same time. An important standing instruction\nis that I do *not* want it to rewrite anything. Just as with the code, it should tell me where there is a\nproblem, and let me fix it.\n\nWe iterate on that for a while until we have something that we're both happy with, and then I feed it to the next LLM -- normally ChatGPT.\n\nChatGPT has a much more pernickety attitude than Claude does. I often use metaphors, and it will generally want me to replace them with mathematically rigorous prose. This is still very useful, though. Sometimes the metaphors aren't flagged as such well enough -- or even worse, there are times when the terms I've hit on for a metaphor happen to clash with a technical term, making what I've written misleading at best.\n\nI don't always address all of the issues that ChatGPT raises, as otherwise every post\nwould be a mess of hedges and overexplanations and what-have-you, but I like to get\nto a stage where I'm comfortable that I have a good understanding of specifically *why* I'm rejecting\nthe remaining points it raises.\n\nOne other point where ChatGPT has helped a lot is that it's very diligent about checking supporting materials that I link to. When I was recently about to post an article on running an eval on a model, it followed the link to the training code and spotted a silly bug. It wasn't something that materially changed the eval's outcome, which is probably why I'd not noticed it, but it was something that was important to get right if I wanted later runs of the same evals to be solid. Definitely helpful.\n\nWith that done, I run it past a cast of other LLMs. The exact set varies over time; for the last few posts it has been (in this order) DeepSeek, Grok, GLM-5.2 and Kimi K3. I did use Gemini in the past, but over time it became less effective and just started complimenting me on the post and suggesting related topics to chat about, which was kind of pointless. I'll wait until the next release and then try it again.\n\nBecause the Claude and ChatGPT passes have generally got rid of anything particularly\nnasty, this second group of AIs often don't have much to add. However, occasionally they will spot\nsomething the others have missed, or have other suggestions, so it's worth spending\nthe five minutes or so it takes to use them. It also helps to keep me up to date\nwith what the other models out there are like. [2](#fn-2)\n\nWhen all of that's done, I run it past Claude one final time, tidy up any remaining issues, then publish it on a private staging site, and read through it carefully myself. The best time for that final readthrough is after dinner, ideally after a glass of wine; the goal is to smooth out the prose, and remove anything overly formal. To make it as close to being fun to read as I can manage.\n\nOnce I'm happy, I can promote it to the live site and hit the publish button.\n\nThat probably all sounds much more complicated than it actually is. A short post will normally go through all of that in half an hour -- less if I skip the full editorial board, which I sometimes do. The longer ones can take an hour or two, but given that they're normally the result of a week of work, on and off, in percentage terms it's not that much, and it's worth it for the polish.\n\nSo, there's no AI-generated text here, but I do lean on AIs to make it the best version I can of what I have to say. How about the code?\n\n### AI coding\n\nAgain, the goal of the projects I document here is to learn in public. If I'm learning some concept that is expressed in code, then I need to write that code. So that means that anything non-trivial will be something I've written by hand, with AI input limited to code review -- the same rule as I have for the text.\n\nOf course, sometimes there are things I'd like to publish that I wouldn't learn anything\nby writing. Coding up `matplotlib`\n\nstuff to chart loss curves, or writing a fancy\nJavaScript visualiser to [show what models' parameters are used for](/2026/07/llm-parameter-counts)\nwould teach me nothing. So for that kind of thing, I just let the AIs get on with it (and even\nthen, for the parameter visualisation, I hacked a first version together in a spreadsheet\nto check my understanding, and then tested the visualiser against it). I do always\nmention in the text when a particular bit of code was AI-generated, though.\n\nSo, my rule is: if I would learn something by writing the code, I'll write it. If not, I'm happy to delegate to an AI.\n\nBut even then, I apply one restriction: if it's for the blog, I'll ask for the code in a chat session, rather than using a more agentic system like Claude Code or Codex. This is to add friction. If you're using an agent, it's easy for a task to grow, and what started as a throwaway idea can come to consume more and more time and cognitive space. Keeping it in the chat interface keeps things minimal -- or at least, that's how it works for me.\n\nDoes that mean that I'm against coding agents?\n\n### Yes to agents, but not on this blog -- yet\n\nThis blog is where I post about experiments I've done and what I've learned. At the moment, what I'm learning is all pretty low-level. How does an LLM work? What factors make it smarter or dumber? It's all pretty hands-on, and involves code that I need to understand.\n\nI do other things apart from writing this blog, of course :-) And for that I'm keen on agentic tools; I have an OpenClaw agent to help me run my life generally, and use Codex and Claude Code for projects where I'm trying to achieve a specific goal, rather than trying to learn something. But by their very nature, those are not projects that will wind up here on the blog right now.\n\nThat might change in the future! When I feel that I have a solid, large enough foundation, perhaps I'll be running experiments that I want to write about, where it would make sense for AIs to handle the details, while I focus on the broader strokes.\n\nBut that time is not now, so right now, you can be sure that every word 3, and almost\nevery line of code, was written by hand. Even if I do need the AIs to keep me on track\nand at least borderline coherent.\n\n-\nIf you're wondering \"why not use Claude Code or Codex\", I get into why I avoid them for blog-related work towards the end of this post.\n\n[↩](#fnref-1) -\nCurrent thoughts:\n\n- DeepSeek used to be close to Claude and ChatGPT, but has been left somewhat behind. I have been hearing rumours on X of an upcoming update, though.\n- Grok used to have a propensity to try to turn my posts into clickbait. It would always want to rewrite things, and would suggest titles that were not a million miles away from \"Ten things you never knew about RNNs -- number four will shock you!\" Recent releases have been much better, though, and I might experiment with moving it further forward in the sequence.\n- GLM-5.2 recently complimented me on my \"science fiction\" blogpost that mentioned ChatGPT 5.6 Sol. I probed it a bit on that and it said that because the publication date on the post was in 2026, it understood that I was writing near-future SF. From its perspective, the real date was sometime in late 2024. Surprising! I think the last time I saw that kind of behaviour from a model was, well, sometime in 2024...\n- Kimi K3 is really quite impressive. I will be using it more. I particularly like the way it shows a fairly detailed chain of thought -- something it shares with DeepSeek and GLM-5.2, but there seems to be more depth there. It's a pity that Claude and ChatGPT only show summaries in the chat interface, though I understand their reasoning.\n\n-\nChatGPT, being wonderfully true to form, thinks I should clarify here that I'm not including quotes from models here (like the ones\n\n[here](/2026/04/how-an-llm-becomes-more-coherent-over-training)) when I say that.[↩](#fnref-3)", "url": "https://wpnews.pro/news/i-use-ai-on-this-blog", "canonical_source": "https://www.gilesthomas.com/2026/07/ai-use", "published_at": "2026-07-31 19:31:43+00:00", "updated_at": "2026-07-31 19:52:47.255219+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-tools", "ai-ethics"], "entities": ["ChatGPT", "Claude", "LessWrong"], "alternates": {"html": "https://wpnews.pro/news/i-use-ai-on-this-blog", "markdown": "https://wpnews.pro/news/i-use-ai-on-this-blog.md", "text": "https://wpnews.pro/news/i-use-ai-on-this-blog.txt", "jsonld": "https://wpnews.pro/news/i-use-ai-on-this-blog.jsonld"}}