One Goal, One Sprint
I was 20 turns deep into a Codex session. The model asked “remind me what we’re doing” — and I realized I needed structure.
Before OpenAI shipped decent context compression, long sessions were painful. Twenty turns in and the model would forget the original ask. The conversation turned into “remind me what we’re doing” on repeat.
Codex already has a /goal command — you type it, the thread works toward that target across turns. Simple. Effective. But it’s just a line in the prompt. After enough context compression, even /goal forgets.
Ultragoal from jxnl’s dots repo is what /goal should have been from the start. Same one-line input, but underneath it creates a goal.md and plan.md in the workspace. The model reads them at every turn, checks off completed items, updates statuses, picks the next step. If the thread gets compressed and you come back hours later, it reads the files and knows exactly where it left off. No re-explaining.
Jason Liu (@jxnlco), who built it:
“A goal combines ongoing execution with a verifier. The user defines the outcome, the stopping condition, and the signal that says whether Codex is getting closer.”
The verifier is the whole game. You don’t just say “build this thing” — you define what “done” looks like. Test passes. Benchmark holds. Bug stops reproducing. The model runs the check itself after every change.
“Ambition matters, but without verification it’s just a wish.”
What I like most is the sprint feeling. Give the model a clear target and it goes. It doesn’t wander, doesn’t hedge — it runs. If the test fails, it tries again. If it’s stuck, it flags it. The structure is just enough to keep direction without getting in the way.
He also pointed out something I didn’t expect:
“It’s almost better to prompt the model to set its own goal — it will likely write a better prompt than you.”
Let the LLM define its own finish line from a rough direction. That single sentence changed how I think about prompting.
For me, this is the difference between “AI that helps” and “AI I have to babysit.” Ultragoal is a small file in a .codex/ folder. But it turns a fire-and-forget prompt into a feedback loop that survives interruptions, context compression, and the thousand “continue” messages in between.
jxnl/dots — fork it, run the install script, try it on your next long task.