Codex-maxxing - Jason Liu Skip to content
Initializing search
blog
Goals<br>The side panel
Codex-maxxing¶<br>I was already using coding agents a lot before Codex. Mostly, though, I used them through interfaces built for coding work: making diffs, changing repos, and shipping code.<br>Around November, I started pushing them into knowledge work too. I made presentations in Slidev, used agents more like note-takers with voice input, and kept looking for other artifacts a coding agent could help me produce: an index.html, a PDF, a spreadsheet, a slide deck.<br>The latest Codex app upgrades are the first thing I've used that make that broader mode feel native. Codex is still excellent for coding, but the more interesting shift is that it gives my work somewhere to live.<br>What changed my behavior was learning to give work an operating loop: a durable thread, shared memory, tools that can act on my computer, ways to steer and resume the task, and a surface where I can review the artifact itself.<br>Durable threads¶<br>The first thing that changed my behavior was compaction.<br>I now keep a pinned thread for every important workstream I care about:<br>my Chief of Staff thread<br>the Agents SDK<br>the OpenAI CLI<br>Codex for open source<br>one just to monitor Twitter<br>These are not short chats. They are megathreads that I have been compacting for months. They accumulate history, preferences, and old decisions that I do not want to recreate every time I come back.<br>Pinned thread shortcuts<br>You can jump directly to pinned threads with Command-1 through Command-9.
There is a tradeoff here. Long-running threads are not free. If you revisit them later, the conversation is probably no longer in cache, so you can incur more cost than you would in a fresh short thread. For workstreams I care about, continuity is worth it.<br>Voice input¶<br>Voice input gets more of my actual thinking into Codex.<br>The benefit is not speed. It is that the agent gets the unedited version of my thinking. Codex has built-in voice input, but I also use Wispr Flow because system-wide dictation changes how much context I can feed into everything else too. If I am planning a piece of work, I might say, "I think there is some guy named Ben in Slack who mentioned this, I do not remember exactly what, just go look." That sentence is too vague and annoying to type, but completely natural to say.<br>The same thing applies to transcripts. If I want to write a post, I can call someone, record the conversation, or talk to them in person with Granola on my phone, then use the transcript as the starting material. A lot of plans get better when the model has access to the messy version of what I think, not just the polished one.<br>Steering¶<br>Voice becomes more useful when combined with steering.<br>Steering lets you inject the next message after a tool call. If I am reviewing a website, I can keep talking while I look at it:<br>make this smaller<br>this copy is wrong<br>the spacing between these two things feels off<br>once this is done, open a PR<br>wait for the preview deploy<br>send the preview link to the person who needs to review it on Slack<br>I do not need to wait for each step to finish before deciding the next one. I can keep adding intent while the agent is still working, then walk away with the queue already shaped.<br>Later, Heartbeats can monitor the PR or Slack thread after I leave. The unit of work stops being "one prompt, one answer." It becomes a small operating loop.<br>Memory¶<br>Once threads started lasting longer, they needed shared memory outside any one repo.<br>The important move is not just preserving message history. A long thread can remember a lot, but that memory is trapped inside the thread unless the useful parts get serialized somewhere durable. The point of the memory system is to turn what the thread learns into an artifact I can inspect, edit, diff, and reuse.<br>Most of my long-running threads start in an Obsidian vault:<br>vault/<br>├── TODO.md<br>├── people/<br>├── projects/<br>├── agent/<br>└── notes/
At the top level, I keep AGENTS.md instructions that say things like: as you learn more about people, make progress on projects, or close an open loop, update the relevant pages in the vault.<br>The vault is where the agent lives, separate from any one project. Repositories hold code. The vault holds rolling context around my work: people, decisions, open loops, daily notes, project state, and the bits of understanding that would otherwise get lost between threads.<br>I also keep the vault as a GitHub repo. That buys me two things:<br>it can work in the cloud<br>diffs become a review surface for memory<br>When the agent updates the vault, I can read the diff and see what it thought was important enough to remember. That review step matters. I do not want evergreen threads to quietly accumulate vibes in conversation history. I want them to write down what changed: this person prefers this, this project is waiting on that, this decision was made, this loop is closed.<br>This is also why I like memory as files. Files...