{
  "type": "miscellanea",
  "draft": false,
  "title": "Miscellanea for 2025-06-06",
  "time": "23:59:00-07:00",
  "slug": "miscellanea",
  "tags": [
    "miscellanea"
  ],
  "attachments": [],
  "year": "2025",
  "month": "06",
  "day": "06",
  "isDir": false,
  "date": "2025-06-07T06:59:00.000Z",
  "postName": "2025-06-06",
  "html": "<ul>\n<li>Hello world!</li>\n<li>My brain's been eaten by work for most of this week, so the blogging slowed down a bunch. Hoping to pick it up again soon.<ul>\n<li>I'm almost afraid to mention that I spent a bunch of this week deep down an LLM vibe-coding rabbit hole in Windsurf.</li>\n<li>Just in time for <a href=\"https://techcrunch.com/2025/06/05/anthropic-co-founder-on-cutting-access-to-windsurf-it-would-be-odd-for-us-to-sell-claude-to-openai/\">Anthropic to cut Windsurf off from Claude models</a> - oops.</li>\n</ul>\n</li>\n<li>We'll see how good it all ends up being, but I cycled through a handful of models and ended up with about 11,000 lines of code.<ul>\n<li>The code had unit tests and it pretty much did what I intended.</li>\n<li>It wasn't great code - a lot of it was boilerplate - but it's mostly stuff I would have ended up doing myself more tediously while fighting my ADHD.</li>\n</ul>\n</li>\n<li>Trying to compose some thoughts somewhat along the lines of <a href=\"https://harper.blog/2025/02/16/my-llm-codegen-workflow-atm/\">Harper Reed's LLM codegen workflow</a>:<ul>\n<li>I settled on a workflow that wasn't just pestering the agent with wishes.</li>\n<li>I had a series of discrete sessions, each started by creating a directory named for a new git branch. I wrote a shell script to semi-automate this.</li>\n<li>In that directory, I wrote a couple hundred words of intention in a <strong>spec.md</strong> file.</li>\n<li>I asked the agent to expand my intentions into a step-by-step <strong>plan.md</strong> file.</li>\n<li>I edited the plan and asked the agent to review it critically and ask questions.</li>\n<li>I answered the questions.</li>\n<li>I asked the agent to review it again and tell me if the plan looked clear enough to start implementing.</li>\n<li>When it said \"yes\", I told it to start implementing.</li>\n<li>The agent started implementing while I watched.</li>\n<li>Sometimes I interrupted and told it that it was on the wrong track. But, for long stretches I was just reviewing the code as it wrote.</li>\n<li>When it claimed to be done, I asked it to review the current changes against the plan and judge if it was really done.</li>\n<li>Sometimes it wasn't and it went back to work.</li>\n<li>When it petered out finally, I told it to make sure all the tests passed and linting errors were fixed. It did that.</li>\n<li>I made sure the tests made sense, myself, fixed a few that didn't. Then I told it to run the tests some more.</li>\n<li>Finally, when I was okay with the results, I told it to review our entire chat history for this session and summarize the results in a <strong>notes.md</strong> file.</li>\n<li>In particular, I told it to pay special attention to things we did that hadn't been captured in the plan. Try to come up with unexpected conditions and derive some lessons learned.</li>\n<li>These notes ended up being actually pretty good?</li>\n<li>These three artifacts - <strong>spec.md</strong>, <strong>plan.md</strong>, and <strong>notes.md</strong> - were committed along with the code. That marked the end of the session and the branch.</li>\n</ul>\n</li>\n<li>Now, I won't say that each of the sessions I ran went perfectly. But, I expected it to be an exploration.<ul>\n<li>I switched models a few times between Claude Sonnet 3.7, GPT-4.1, and SWE-1.</li>\n<li>I found Claude to usually work the best. It just sort of got to work and did the needful without enticing many objections from me.</li>\n<li>GPT-4.1 seemed to like to make very detailed plans (even after reading the <strong>plan.md</strong>), ask lots of questions, and then drive off into the ditch and need rescuing.</li>\n<li>SWE-1 was about in the middle - but I ended using it more because there's a promotion running right now that makes it free in Windsurf.</li>\n<li>Occasionally, I'd switch models mid-session just to see what happened. I'm not sure how to characterize the differences, but they each had slightly different coding styles.</li>\n<li>Claude and SWE-1 did better than GPT-4.1 at picking up from unfinished work in progress, I think?</li>\n<li>Still, even with the needful babysitting, between these models I did get stuff implemented and it looked a lot like what I would have written if I'd had the executive function to work at it as doggedly.</li>\n</ul>\n</li>\n<li>I think I've learned that a focused scope and context window management are essential.<ul>\n<li>A few times, I think I asked the agent to bite off more than it could chew? Maybe I blew out the context windows? This is something I could get quantified answers around, if I paid attention to the metrics.</li>\n<li>In those cases, I stopped the presses, backed up, and reworked the spec into a smaller scope.</li>\n<li>Sometimes, I found it handy to get to the point of having the <strong>plan.md</strong> tuned up, then started a fresh chat with only the plan as context to start. That seemed to work pretty well - again, I think freeing up some of the context window with more condensed material.</li>\n</ul>\n</li>\n<li>Occasionally, I wandered off into the weeds myself and my session-based approach devolved into chatty iteration. That worked well for making very small tweaks and fussy updates.<ul>\n<li>I also learned that I'm good at juggling lots of git commits as save states. Whenever things were in a decent enough state, time to commit now and clean up later.</li>\n<li>I forgot this a few times and lost some progress after driving into a ditch. But that wasn't too much of a hardship, since I could usually just scroll back in the chat and re-attempt the relative bits of the session for similar results.</li>\n</ul>\n</li>\n<li>I should clean all these bullets up into a proper blog post, but maybe tomorrow. The tl;dr, I guess, is that I think I'm getting comfortable with this stuff.<ul>\n<li>It's surprising me with how much it gets done. </li>\n<li>I'm getting less surprised with where &amp; how it goes wrong.</li>\n<li>The failures seem manageable and the results seem decent.</li>\n</ul>\n</li>\n<li>I had a kind of meta-chat with Claude about the above process, trying to think through some improvements.<ul>\n<li>One interesting notion was to use some big cloud models for the <strong>spec.md</strong> to <strong>plan.md</strong> stage.</li>\n<li>But, then, switch to a local model running on my laptop for the actual process of implementing the plan.</li>\n<li>Then, switch back to a big model for the <strong>notes.md</strong> summary.</li>\n<li>If this worked, it could save a lot of tokens!</li>\n</ul>\n</li>\n<li>I could also see all the above being bundled up and semi-automated into its own agentic workflow.</li>\n</ul>\n",
  "body": "\n- Hello world!\n- My brain's been eaten by work for most of this week, so the blogging slowed down a bunch. Hoping to pick it up again soon.\n\t- I'm almost afraid to mention that I spent a bunch of this week deep down an LLM vibe-coding rabbit hole in Windsurf.\n\t- Just in time for [Anthropic to cut Windsurf off from Claude models](https://techcrunch.com/2025/06/05/anthropic-co-founder-on-cutting-access-to-windsurf-it-would-be-odd-for-us-to-sell-claude-to-openai/) - oops.\n- We'll see how good it all ends up being, but I cycled through a handful of models and ended up with about 11,000 lines of code.\n\t- The code had unit tests and it pretty much did what I intended.\n\t- It wasn't great code - a lot of it was boilerplate - but it's mostly stuff I would have ended up doing myself more tediously while fighting my ADHD.\n- Trying to compose some thoughts somewhat along the lines of [Harper Reed's LLM codegen workflow](https://harper.blog/2025/02/16/my-llm-codegen-workflow-atm/):\n\t- I settled on a workflow that wasn't just pestering the agent with wishes.\n\t- I had a series of discrete sessions, each started by creating a directory named for a new git branch. I wrote a shell script to semi-automate this.\n\t- In that directory, I wrote a couple hundred words of intention in a **spec.md** file.\n\t- I asked the agent to expand my intentions into a step-by-step **plan.md** file.\n\t- I edited the plan and asked the agent to review it critically and ask questions.\n\t- I answered the questions.\n\t- I asked the agent to review it again and tell me if the plan looked clear enough to start implementing.\n\t- When it said \"yes\", I told it to start implementing.\n\t- The agent started implementing while I watched.\n\t- Sometimes I interrupted and told it that it was on the wrong track. But, for long stretches I was just reviewing the code as it wrote.\n\t- When it claimed to be done, I asked it to review the current changes against the plan and judge if it was really done.\n\t- Sometimes it wasn't and it went back to work.\n\t- When it petered out finally, I told it to make sure all the tests passed and linting errors were fixed. It did that.\n\t- I made sure the tests made sense, myself, fixed a few that didn't. Then I told it to run the tests some more.\n\t- Finally, when I was okay with the results, I told it to review our entire chat history for this session and summarize the results in a **notes.md** file.\n\t- In particular, I told it to pay special attention to things we did that hadn't been captured in the plan. Try to come up with unexpected conditions and derive some lessons learned.\n\t- These notes ended up being actually pretty good?\n\t- These three artifacts - **spec.md**, **plan.md**, and **notes.md** - were committed along with the code. That marked the end of the session and the branch.\n- Now, I won't say that each of the sessions I ran went perfectly. But, I expected it to be an exploration.\n\t- I switched models a few times between Claude Sonnet 3.7, GPT-4.1, and SWE-1.\n\t- I found Claude to usually work the best. It just sort of got to work and did the needful without enticing many objections from me.\n\t- GPT-4.1 seemed to like to make very detailed plans (even after reading the **plan.md**), ask lots of questions, and then drive off into the ditch and need rescuing.\n\t- SWE-1 was about in the middle - but I ended using it more because there's a promotion running right now that makes it free in Windsurf.\n\t- Occasionally, I'd switch models mid-session just to see what happened. I'm not sure how to characterize the differences, but they each had slightly different coding styles.\n\t- Claude and SWE-1 did better than GPT-4.1 at picking up from unfinished work in progress, I think?\n\t- Still, even with the needful babysitting, between these models I did get stuff implemented and it looked a lot like what I would have written if I'd had the executive function to work at it as doggedly.\n- I think I've learned that a focused scope and context window management are essential.\n\t- A few times, I think I asked the agent to bite off more than it could chew? Maybe I blew out the context windows? This is something I could get quantified answers around, if I paid attention to the metrics.\n\t- In those cases, I stopped the presses, backed up, and reworked the spec into a smaller scope.\n\t- Sometimes, I found it handy to get to the point of having the **plan.md** tuned up, then started a fresh chat with only the plan as context to start. That seemed to work pretty well - again, I think freeing up some of the context window with more condensed material.\n- Occasionally, I wandered off into the weeds myself and my session-based approach devolved into chatty iteration. That worked well for making very small tweaks and fussy updates.\n\t- I also learned that I'm good at juggling lots of git commits as save states. Whenever things were in a decent enough state, time to commit now and clean up later.\n\t- I forgot this a few times and lost some progress after driving into a ditch. But that wasn't too much of a hardship, since I could usually just scroll back in the chat and re-attempt the relative bits of the session for similar results.\n- I should clean all these bullets up into a proper blog post, but maybe tomorrow. The tl;dr, I guess, is that I think I'm getting comfortable with this stuff.\n\t- It's surprising me with how much it gets done. \n\t- I'm getting less surprised with where & how it goes wrong.\n\t- The failures seem manageable and the results seem decent.\n- I had a kind of meta-chat with Claude about the above process, trying to think through some improvements.\n\t- One interesting notion was to use some big cloud models for the **spec.md** to **plan.md** stage.\n\t- But, then, switch to a local model running on my laptop for the actual process of implementing the plan.\n\t- Then, switch back to a big model for the **notes.md** summary.\n\t- If this worked, it could save a lot of tokens!\n- I could also see all the above being bundled up and semi-automated into its own agentic workflow.",
  "parentPath": "./content/posts/2025",
  "path": "2025/06/06/miscellanea",
  "needsBuild": true,
  "prevPostPath": "2025/06/04/miscellanea",
  "prevPostTitle": "Miscellanea for 2025-06-04",
  "nextPostPath": "2025/06/07/semi-automatic-coding",
  "nextPostTitle": "Baby steps into semi-automatic coding"
}