Slopfluencer

Its Time To Let The Model Drive

Guest writers

Its Time To Let The Model Drive (for coding)

Its 2025 and you're still writing code by hand?!

Just a few months ago, I would not have trusted a LLM to generate tons of code. The quality of the models were good, but there was some intersection between model capability, my skill issues, and my engrained preference to control the code.

Something changed very recently. With Opus-4.5, GPT-5.2, and Composer-1, after using these models for a few weeks inside Cursor, I'm a full convert. The quality of the code is good (probably better than what I can write), the instruction following of the models is good, and I've discovered a workflow that really feels powerful.

It started when I attened the 2025 AI Engineer Summit which was focused on coding agents. Numerous talks covered topics like context engineering, Research - Plan - Implement workflows, using markdown files and skills etc. It opened my eyes to the reality that I needed to change how I worked and put more trust into the models.

The workflow

The workflow itself is pretty simple.

  • I use the smartest model I can get, then use it to sketch a plan.
    • In the initial prompt, I often reference files that I know the model should use to provide more context, and I also try to give it as much context as I can.
    • I use plan mode in Cursor which generates a markdown file with the implementation details.
    • I then review the plan, and iterate on the plan with the model until I'm satisfied.
  • Then I implement the plan, with a fast model.
    • In Cursor, I use composer-1. You can also use a model like Sonnet-4.5 to execute the plan.
  • Afterwards review the code and accept.
  • Have the model add tests.

The key point is something I learned in Dex Horthy's talk[1], its important to create a plan and review it in plain english so you can catch potential issues before they're turned into code. This makes a world of difference!

I'm also a fan of cursor. I've used VSCode for years and its familiar and does what I want. You can do the same thing with CLI coding agents like claude code as well. I just hate reviewing diffs in the terminal interface.

Code organization

Another discovery is how you organize your code matters a lot in the age of agents. You need to spend extra time organizing your code into discrete, well organized chunks that the model can take and digest easily and that won't eat up their context.

What I mean is organizing your code in a way that you can tell the model to "go use the foo utility/package/library" and it can find the code easily, get context about it, and then use it. If you have a spaghetti mess, it will be very expensive for a model to poke around the codebase to learn how to use it.

Agent context

Using something like claude.md/agents.md is important. This document provides high level contextual information for your codebase that the model can easily discover and learn. Use a model to generate it, giving it stylistic guidance, contextual information, or other details that are important to point out.

Skills are another pattern that's starting to emerge. Skills are just folders with markdown files, scripts, or other files that a model can use to "learn" how to do a thing. It's just a folder with different chunks of context it can dynamically load if it needs to.

This is actually a really powerful pattern. When i mentioned above that you can tell a model to just use a utility/package/library, you're effectively telling the model to go use a "skill". It helps if your skills contain contextual data in the form of a readme, or you can follow Anthropic's skill spec. A skill is a neatly packaged combination of code + context and the model can use this discrete chunk to fulfill your intent.

Trust

I think letting go and trusting the models to do the right thing is hard. You need to continuously prove to yourself that you're giving the model the right context, and the model is doing what you asked. It's like you and the models are a team now, and like all teams, it takes time and effort to build a level of trust and understanding. But once you're on a high functioning, high trust team, you're able to get so much done.

It takes time and you'll need practice, but after a while it just clicks and its hard to go back. You may have to take the reigns sometimes and write actual code to get stuff done, especially with edge cases. I'm quite fortunate my employer is very AI-forward and provides a ton of support when it comes to trying the best tools and this freedom has allowed me to gain a lot of competency with the tools.

You'll need to practice, and you really can't cheap out by running open models (unfortunately).

Async vs Sync

There's also uncertainty between how asyncronous agents and syncronous agents should be used. Should you be firing off a bunch of tasks and then context switching between them? Should you just do one thing at a time with an IDE-like experience?

I think you can do both, but you need to be mindful about how you're using them.

Async agents

I have used an asyncronous agent at work that's able to run code against our own internal codebases. These are really powerful tools, but because they're asyncronous, the expectation is that you fire off the tool and it just runs and you check in at the end.

This puts the burden on you to context-dump at the beginning and put in a lot of effort thinking through all the potential context the agent might need. There's no real iteration loop. The expectation is you give it a task and it gets the work done.

This means that small, self contained tasks are perfect for async agents. Bug fixes, small JIRA tickets, anything that has a definitive answer for whether it's done or not, you can use an async agent. Just fire it off, it can run tests and once its done it'll create a PR for you. Easy.

Where async agents fail is if the task requires a human in a loop.

Syncronous agents

A syncronous agent runs in an IDE or in the terminal and you're continuously prompting it to work on small discrete tasks that add up to something bigger or more ambiguous. These agents require the driver to highly aware of the context around the code, and is more of a pair-programmer than anything. I've found the most success using the Plan/Research, then Execute workflow on small chunks of work.

An example:

Goal: I want to refactor a part of the codebase.
Chunk 1: Go find this module, move it over here, fix imports and references to this code.
Chunk 2: Split up this code into these separate modules, fix imports and references, add tests.
Chunk 3: ...so on and so forth.

The project is completed by implementing small discrete steps that you're able to plan, execute, and verify along the way. If you try to do a huge big bang refactor you're going to more than likely not like what you see. There's a lot of small decisions along the way that you as the human will need to make that if left up to an agent, may make all the wrong decisions (because they lack the context!)

Conclusion

Building trust and coming to a workflow that works for you is going to take time and a lot of tokens. Those of us that can adapt will implement more than ever before, and those that refuse will fall behind and become obsolete. It's unfortunate, but these tools are here to stay, they're far too economically useful.

Footnotes


  1. No Vibes Allowed: Solving Hard Problems in Complex Codebases – Dex Horthy, HumanLayer ↩︎