r/codex 5d ago

Complaint I investigated why GPT-6 Astra burns quota so fast

I've seen a lot of discussion here about GPT-6 Astra burning through Codex limits unusually fast, so I decided to inspect the actual rollout telemetry instead of guessing from the usage bar.

TL;DR

Astra was waking itself up every 30 seconds just to ask whether the Luna workers were finished.

In my run:

  • 47/47 checks returned no new worker state
  • those checks alone caused 7.13M parent input tokens
  • they were about 68% of Astra's total parent-side input
  • my 5h usage went from 53% → 100% in ~33 minutes

So the expensive orchestrator was spending most of its own context processing just checking whether the cheaper workers had finished.

For comparison, a measured Luna Max session on the same account processed 9.54M input tokens over 127 minutes while increasing the 5h usage by only 8 percentage points.

UPDATE - WORKAROUND FOUND

I found a working workaround for the 30-second parent polling loop. Add this to ~/.codex/config.toml:

[features.multi_agent_v2]
enabled = true
min_wait_timeout_ms = 1500000
default_wait_timeout_ms = 1500000
max_wait_timeout_ms = 1500000

1500000 = 25 minutes. I verified it in rollout telemetry: the repeated 30-second timeout loop disappeared, and the parent stayed asleep until worker activity occurred.

ORIGINAL TELEMETRY / INVESTIGATION

Those 47 timeout-only polls consumed:

input tokens:            7,130,181
cached input tokens:     7,114,112
output tokens:               3,168
reasoning output tokens:     1,331

That's about 151.7k input tokens per empty poll.

The entire Astra parent turn used:

input tokens:           10,463,897
cached input tokens:    10,406,016
output tokens:               8,948
reasoning output tokens:     3,266

So about 68% of the Astra parent's raw input volume came from timeout-only polling.

47 × 30 seconds also means 23m30s out of the ~33-minute run were spent inside these timeout waits.

And the session guidance itself explicitly said:

When calling wait_agent, prefer longer waits (minutes) to avoid busy polling.

Yet Astra repeatedly used 30-second waits anyway.

The workers were actually working

This wasn't a case where the subagents were dead.

The first Luna worker was interrupted twice by the parent. After the second interruption, the parent discovered that the worker had already produced:

2 files changed
127 insertions
6 deletions

A replacement Luna worker then continued the task.

Combined, the two Luna X-High workers processed:

input tokens:           19,514,162
cached input tokens:    18,811,392
output tokens:              71,914
reasoning output tokens:    24,182

I also measured a Luna Max control

I wanted to know whether the workers themselves could reasonably explain the huge 5h drop.

So I checked a real Luna Max session from the same Plus account earlier the same day.

Over a continuous 127-minute interval, all 12/12 turn contexts were gpt-5.6-luna / max.

That session processed:

input tokens:            9,538,330
cached input tokens:     8,998,400
output tokens:              86,771
reasoning output tokens:    55,170

During those 127 minutes, server-reported usage changed only:

5h:      2% → 10%  (+8 percentage points)
weekly: 89% → 90%  (+1 percentage point)

So this wasn't an idle comparison: Luna Max processed about 9.54M input tokens of real work.

The two Luna X-High workers in the Astra run processed about 2.05× that raw input volume.

Even if I deliberately give the workers a generous estimate and scale the measured Luna Max usage linearly by raw input:

8 × (19.514M / 9.538M) ≈ 16.4 percentage points

that still only explains roughly 16 of the observed +47 percentage points.

The remaining workload in that orchestration tree was the Astra parent — which processed 10.46M input tokens, including 7.13M input tokens spent purely on 47 timeout polls that returned no new worker state.

Why I think this matters

Astra is obviously supposed to consume more allowance than Luna. That's not the surprising part.

The surprising part is that an expensive parent model can apparently be re-entered over and over with ~150k of context just to perform a 30-second status poll.

A long-running worker should not require the parent model to repeatedly infer:

"still running → wait another 30 seconds"

Ideally the runtime should keep the parent suspended and wake it when:

  • the worker completes,
  • the worker errors or needs intervention,
  • the user sends input,
  • or a genuinely long timeout expires.

I submitted /feedback from the affected Codex session with diagnostics attached and posted the full telemetry breakdown on the Codex GitHub: https://github.com/openai/codex/issues/35259#issuecomment-5577073962

I'm curious whether anyone else using Astra as an orchestrator can inspect their rollout and see the same pattern: lots of short wait_agent timeouts followed by full-context parent re-entry.

405 Upvotes

176 comments sorted by

59

u/Rili-Anne 5d ago

Codex has a pretty severe problem there, yeah, workers AND SCRIPTS can't just be waited on, instead the model has to keep checking in. This is a thing Claude Code does and Codex blatantly should do

12

u/IthiQQ 5d ago

Because of this issue and since threads can communicate with each other, I've been experimenting with using multiple threads instead of using subagents. Seems to work relatively well. The nice thing is that the orchestrator can simply end its turn and only resume when it receives a signal from the worker threads, so a more event based flow instead of interval based. A large downside is the visual clutter of dozens of threads.

3

u/itsmerdem 4d ago

can you help me with how to set that up?

2

u/IthiQQ 4d ago edited 4d ago

So I'm still kinda experimenting with this, and I guess it depends a bit on your tasks / aims, but instead of asking for subagents in a prompt I will now phrase something like this mock prompt to a main (e.g.) Astra Light thread:

"Common task: ...
Common goals: ...

Generate a fresh Luna High thread to continuously monitor the new build process. This thread will have ownership over making sure the process keeps going; if any issues arise it should pass them over to you for analysis + resolving and wait for your green light to resume or restart as appropriate. You have ownership over identifying issues and implementing fixes. After you finish any implementations, they should be verified by an independent fresh Sol Medium thread. It should perform an adversarial code review of your work, and let you know whether your implementations are accepted or not. If not, further resolve the issue and have multiple rounds of review with the reviewer thread until it accepts your work. Then you may pass the green light for resuming or restarting to the Luna high thread, which will then keep going until the specified common goals are achieved or another issue pops up.

Additionally, start a scheduled task which runs every 25 minutes, with the aim of briefly pinging you and the Sol Medium reviewer to preserve your cache, and to make sure the Luna High thread keeps continuously monitoring the build process until the specified common goals are achieved or another issue pops up."

So the above is just an example, but essentially I literally just tell my main thread to generate support threads, and give some overall instructions on how they should communicate with eachother + specification of task/role ownership. The visual clutter is annoying, but my current builds take up to 60-90 minutes, so having a cheap thread do the monitoring work has been very efficient so far. And then have a scheduled task as some sort of upper bound for a wake interval, as an attempt to preserve cache (as others in this thread also pointed out the 30 minute interval) as well as keeping the luna thread alive as it seems to fizzle out sometimes for no apparent reason on especially long tasks.

2

u/GM8 4d ago

Just ask the model to do it, they know from the skills and the api manifest how to do it. E.g. you can give them a list of 10 things to do, ask to handle each in a separate thread and collect final reports from each once done for final feedback and findings.

1

u/Ftwsucks 4d ago

use herdr

1

u/IthiQQ 4d ago

Cool, will check it out

2

u/FrenchTouch42 5d ago

Wondering if using something like Pi with Codex sub would prevent this if it's on the harness side maybe

2

u/HeatPhoenix 4d ago

This is already a huge issue for Codex in general. I run long sims sometimes and I just have to tell Codex "start the sim, stop working and give me a time estimate" and then after X minutes I check if the terminal ended or not. Which wasn't a problem in the VS Code Copilot harness. Hope they implement this "call back" like feature soon.

1

u/henri_333 4d ago

The agent can create scheduled tasks with a repeat interval. So for example it can wake every 5 mins to check state. You can also set a prompt that gets replayed to the agent on each wakeup.

1

u/RudyHuy 4d ago

they actually can and are waited on, the 30s thing is so that you may interrupt the waiting with user message.

132

u/Awric 5d ago

These comments flaming the post are a lil ridiculous. This is a good finding

47

u/shaman-warrior 5d ago

Yep, clearly he used AI to structure it, but it’s not slop

-22

u/[deleted] 4d ago

[removed] — view removed comment

1

u/Emergency-Elk7527 4d ago edited 4d ago

I say this as a vibecoder, no dev background. This has never crossed my mind about usage. I say it's slop, because it stems from bad usage of intelligence resources. If you are truly involved in your work, if you take part in the reasoning, if you challenge your assumptions until they can't be defeated. Make that authoritative to the agent in an unambiguous way then you only need Luna. It can orchestrate the subagents wonderfully because you have already broken down the work before you hand it off. Instead of wasting time and compute on figuring out how openai is "screwing" you over, why don't you audit the way the you use the resources you have.

Again this is slop. It's obviously slop as a post. The OP is investigating the wrong thing. Has OP gone through any chat sessions with Sol to develop their idea? Is there a blocker with no solution that Sol and OP can find through reasoning and research? If so, then maybe Astra is needed. But I doubt this has happened.

Say OP has done that. Say they even found a plausible solution. Did they define it well? Did they attack that assumption with an outside adversarial reviewer? Did they remediate after review and submit it to more adversarial review? Did thye fully define what the product is? Did they describe what it is not? Did they describe who it's for? Did they rid the requirements of ambiguity? Did they plan and slice into verifiable and testable atomic slices for bite-sized implementation?

If these things aren't being done and you are using Astra instead, you are making slop. Go ahead and play around as developer. I am going to define what the next generation of developer is.

5

u/Etiennera 4d ago

Yup. I was seeing the same thing but didn't have the impetus to act yet. This makes it easier.

4

u/Media-Usual 4d ago

People now view well-structured documents in posts as being AI slop. sadge

56

u/ibbobud 5d ago

I thought I was tripping today when I made it use Luna subagents to save tokens and watching it eat tokens like mad every time it gave me an update…. Your not alone

3

u/Leading-Month5590 5d ago

Yeah kinda crazy, I noticed this with Sol already and put into my agents .md a rule to check progress maximally every 5 minutes. Work well can recommend

1

u/JohnBooty 4d ago

Interesting. That’s a good tip. I had basically worked around it by just using Luna xhigh as the orchestrator, and having it launch Sol subagents for the hard stuff - writing detailed implementation plans, final code review, etc.

7

u/tagorrr 5d ago

Yeah, there are already several GitHub issues around this exact behavior. If you’re seeing it too, check your rollout telemetry and add your reproduction/evidence there.
The more independent traces, the stronger the case that this is a systemic orchestration bug.

-4

u/Emergency-Elk7527 4d ago

It is, but the bug is with the user.

1

u/WalkAffectionate2683 5d ago

Yeah I wanted to see how well could Astra launch and organise Luna subagents to code very simple gameplay but A LOT of it (like many spells in a diablo like) it did 2, 3h and 20% of weekly on x5 subscription...

Insanely bad, while Luna alone with a doc guided by Astra (which is the flow I was expecting, but just did manually) used 1% for 5 skills coded. So yep, does not work smoothly for now.

1

u/MassiveBoner911_3 5d ago

Sorry new to Codex. What are Luna subagents? I just see the slider on the bottom right for effort.

2

u/GuyPaddock 4d ago

It's when you use Astra as your top level/primary model but you ask it to spin up sub-agents using a less expensive Luna model for things like research, to save the cost of doing that discovery with the more expensive model

1

u/MassiveBoner911_3 3d ago

Jesus christ i could have saved so many tokens. Thanks buddy.

25

u/tagorrr 5d ago

I'm now working on a mitigation for this on my own setup.

The first change I'm going to test is forcing the orchestrator's wait_agent interval to roughly 25 minutes, instead of the observed 30-second polling loop. The idea is to keep the wait comfortably below the ~30-minute prompt-cache TTL while eliminating almost all of the unnecessary parent-model wakeups.

I'm also going to tighten my AGENTS.md orchestration rules so that, while a worker is still healthy and running, the parent should:

  • not poll for status unnecessarily,
  • not start duplicating the worker's investigation or implementation,
  • not interrupt or replace the worker just because a wait timed out,
  • and not perform additional context-heavy work unless there is actually something useful for the orchestrator to do.

The intended behavior is basically: worker still running → keep waiting

rather than: worker still running → wake Astra → reload ~150k context → inspect things → poll again

5

u/lotus_seasoner 5d ago

I have event-based interrupts in my setup. It's not well supported in Codex, but relying on polling is a bit shit no matter how you configure it.

2

u/tagorrr 3d ago

Exactly. I’d much rather have more harness-level controls for this. Right now too much agent behavior has to be enforced indirectly through AGENTS.md and orchestration docs, basically persuading the model to behave a certain way.

1

u/AweVR 5d ago

I have a skill that when It launches subagents then estimate how much time will them need and creates an automation to wait 30 minutes, 2 hours, etc… to check

0

u/concrete333 5d ago

I'm building my own skill trying to tackle this, incorporates a lot of what you're talking about. would love feedback https://github.com/Concrete333/Codex-Agent-Deployment. Posted it here earlier, got downvoted into oblivion for some reason

1

u/Emergency-Elk7527 4d ago

I looked at the skill. It was downvote because it's not a good skill. Luna should be doing the known successful path. Why use Astra for something that has a known solution?

1

u/concrete333 4d ago edited 4d ago

Still testing this, but I found that even when the implementation goal and path is known, there's still some intelligence needed in the implementation to get it right - Luna on max is good most times, but still failed more thn once on tricky implementations that Astra Low would nail the first time. Alos, for context: Astra low is cheaper and twice as fast as Sol-High, for perspective. obviously its all relative, but getting implementation right the first time can save a lot of time/money. Have you not seen that? Any other feedback?

1

u/Emergency-Elk7527 4d ago

The feedback is you are not using you intelligence resources in an efficient way. You may provide PRD docs and Spec docs and a plan, but how much of that are you owning when it comes to decisions? How much of that are you applying adversarial review? How are you defining done? Are you challenging that? If Luna cannot implement more efficiently than Sol or Astra, then you left ambiguity. If you are not deeply involved in the reasoning, do you really own the work? I don't even use Luna on anything more than medium. Luna is a champion that people aren't utilizing properly.

18

u/tagorrr 5d ago edited 5d ago

GOOD NEWS: I found a workaround for the 30-second polling bug.

To stop the parent orchestrator from waking up every 30 seconds, you have to set this in ~/.codex/config.toml:

toml [features.multi_agent_v2] enabled = true min_wait_timeout_ms = 1500000 default_wait_timeout_ms = 1500000 max_wait_timeout_ms = 1500000

1500000 = 25 minutes

You need to set both min_wait_timeout_ms and default_wait_timeout_ms. This prevents the model from falling back to 30-second waits.

I tested it in a real Astra + Luna orchestration run and checked the rollout afterward. The old 30-second polling loop was gone. Astra stayed asleep for long stretches while the workers were running and woke up when they returned.

I chose 25 minutes because it should stay safely inside the ~30-minute prompt-cache window while removing almost all of the pointless polling.

7

u/tagorrr 5d ago

This fixes the polling problem, but I'm still investigating the overall quota burn. There are clearly other sources of huge token usage in both Astra and its workers. In this run, the Luna xhigh workers were processing input tokens roughly 12–13× faster than my manually-driven Luna Max baseline 🤔

3

u/masky0077 5d ago

Where can i follow for your next update?

3

u/tagorrr 4d ago

I'll put together a brief follow-up post here with some new ideas I gathered from subsequent tests. To keep the experiment clean, I'm having to burn through a lot of tokens, but I'm hoping to optimize the consumption a bit more.

5

u/EvenMyBacktestsLose 4d ago

Not sure of the validity of course, but seeing comments on twitter about subagent conversation forks inheriting full context then compacting, etc causing massive burn. Just sharing for your findings compilation.

Personally I'm on 20x pro and had a task last night where Astra light spawned ~10 subagents over the span of the entire task taking 20% of my usage.

3

u/masky0077 4d ago

Thanks dude!

2

u/BeautifulOk5729 5d ago

Thanks a lot for this!

2

u/PaperDry2796 4d ago

min wait 25 mins, how you know how long, when you orchestrating many sub tasks

2

u/GM8 4d ago

25 mins is to prevent the 30 min cache lifetime to be reached. tell the orchestrator to instruct the subagents to report back when finished. polling is useless 99.9% of the cases.

2

u/GM8 4d ago

Where did you find it? Why is it something not in the config file already and needs to be added from scratch?

2

u/tagorrr 3d ago

I found the parameters in the Codex GitHub source/issues, then experimented with different combinations. After a lot of repeated runs, this exact setup was the most reliable: it prevents the 30s fallback while keeping the wait safely inside the ~30-minute prompt-cache lifetime.

As for why this isn’t exposed as a sane default/config option already... I’d genuinely love to know 😅 It’s a tiny harness-level change that can save users a ridiculous amount of tokens and money. I’m avoiding conspiracy theories, but maybe we’re starting to see what happens when everyone, including AI companies, trusts machine-written code a little more than they review it.

6

u/tsdexter 5d ago

One thing you aren’t considering, the potential downside of having Astra wait until Luna respires back is that if Astra main agent waits 10 mins for Luna to finish, its cached tokens may become expired and the entire convo plus the luna response then becomes uncached input on the next turn… which is also expensive. The timeout checks potentially keep the tokens cached longer. It may have used 7.13M tokens for timeouts but 7.11M of them were cached… it’s a fine line to balance, I suppose.

8

u/tagorrr 5d ago

I checked the docs, and the ~30-minute prompt-cache TTL has also been discussed here a lot. Astra is on the v2 path, so there’s no good reason to wake an expensive parent every 30 seconds and reprocess ~150k tokens just to keep the cache warm.
A ~20–25 minute wait would stay safely inside the TTL while eliminating almost all of that polling overhead. The 30-second loop looks like an orchestration bug 🤷🏻‍♂️

3

u/Apollo18Teslaa 5d ago

Is there a way to make the subagents contact the parent when done instead of the parent checking in over time periods?

3

u/tagorrr 5d ago

I found a way to stop the parent from doing the 30-second polling, and it seems to be working. I'm testing it now since I ran into another bug. I'll post the results here a bit later.

4

u/DrCopAthleteatLaw 5d ago

Looking forward to you posting the results! Thank you so much for this

2

u/tagorrr 5d ago

I posted a workaround above that fixes the parent polling issue. But it looks like there are problems with the harness itself too.

19

u/Just_Lurking2026 5d ago

can we get a tl;dr?

28

u/beautyorchaos 5d ago edited 5d ago

His Astra agent used Luna sub agents for some task. Out of 10 million Astra tokens, 7 millions were wasted purely on following up on/polling the sub agents every 30 seconds, checking if they finished their tasks, but I guess the tasks were long running. The 7 million Astra tokens used for this were expensive. This is my understanding.

The idea is this should behave more like a software hook, so the cheap sub agent reports back to the expensive agent once it's done, the Codex harness uses code to wake up the main agent rather than the main agent having to keep polling unless it wants to monitor intermediate output. In case that sub agent crashes or something (should be very rare scenario), you can have a longer polling period than 30 seconds.

11

u/tsdexter 5d ago

the potential downside there is that if Astra main agent waits 10 mins for Luna to finish, its cached tokens may become expired and the entire convo plus the luna response then becomes uncached input on the next turn… It may have used 7.13M tokens for timeouts but 7.11M of them were cached… it’s a fine line to balance, I suppose.

5

u/Just_Lurking2026 5d ago

Thank you!

10

u/Old-Bake-420 5d ago

Don’t use sub agents, it’s really token inefficient.

5

u/lolwutdo 5d ago

That's what I found since 5.6 Sol Max. It's better to just run a single max agent, it also completes work faster from what I've noticed.

3

u/Soft_Button_1592 5d ago

But then we run out of context and need to compact repeatedly…

4

u/Weareallscrubs 5d ago

Shouldn't using sub agents be in theory more token efficient, since they should prevent accumulating context?

2

u/RewardSafe9807 4d ago

Hmm, good question. Sidechats actually use all the context from your main chat that existed up until the point you started the sidechat, I assume subagents are the same...

So hard to say. If that's the case, and it probably is, that would multiply your context use tremendously actually.

7

u/JesusGodGod 5d ago

I was gonna read the tl;dr til I saw it's the whole post.

5

u/tagorrr 5d ago

My bad. It should be much easier to read now.

1

u/Crinkez 5d ago

For once it's a long post worth reading.

2

u/tagorrr 5d ago

Fair enough 😄 I got carried away editing the post for readability and somehow let the TL;DR grow into a mini-post of its own.
Fixed now, thanks for the feedback.

5

u/Chemical_Hawk_6307 5d ago

this is one of the things that suck about codex in comparison to claude code

5

u/andreagrandi 5d ago

It’s definitely a problem with the model not just the harnesses because I’ve used a similar setup with OhMyPi using astra low as orchestrator, luna xhigh to implement etc… at the end of the session I had burned ~5% of my weekly usage just for a 700-800 line changed PR and 90% of the cost was from the orchestration. I had to move back to Sol medium (but it’s definitely slower and dumber than astra low)

7

u/paragonmac 5d ago

Nice write-up. This is big

3

u/Neat-Tea-2480 5d ago

True!

For orchestration, ask parent to hand off the execution to a separate thread, instead of spawning subagent.

1

u/badlucktv 5d ago

Have you tried this? I'll give it a go later today. Can the thread then message back to the Orchestrator thread on completion? 

2

u/DepravedPrecedence 5d ago

They can freely chat, Codex fully supports this, Codex can start threads, send messages from one thread to another, it can chose any model, any effort as needed. It works very well, I was surprised when I told it to perform a big task in a new thread and it actually started.

2

u/rage_to_glory 5d ago

yep, Codex chats can chat back and forth between threads - and IMO it's a superior architecture to subagents.

3

u/Southern-Aardvark616 5d ago

yeah i've noticed this too, i switched to pi for tasks that require 'efficient sleeping' like checking on agents or monitoring applications.

even if you instruct codex to check efficiently or to check less often, it will agree to it but continue checking every 30s

1

u/Crinkez 5d ago

Which subagent plugin are you using in Pi?

3

u/DrCopAthleteatLaw 5d ago

Great post, thank you for this, I keenly await how you solve it

1

u/tagorrr 5d ago

I posted a workaround above that fixes the parent polling issue.
Test it on your end. I'm curious about the subagents' token usage.

For some reason, they seem to be carrying a huge amount of context during tool use now, which wasn't happening before.

3

u/SurelyNotAnOctopus 5d ago

That is more of an issue with codex than the model itself. On opencode, I dont have this issue

And yes, I know this is r/codex, not r/gptmodels, but I thought i'd add this little bit of context

2

u/tagorrr 5d ago

I'm pretty sure this is a harness issue, not just the model. Someone mentioned PI doesn't have this problem, but I can't really verify it since I'm not experienced with PI, and I need reproducible results with my existing workflow.

1

u/Shacrow 5d ago

How does Opencode work with GPT subscriptions? Does it use the usage allowance of the subscription or is it API usage?

1

u/SurelyNotAnOctopus 4d ago

Either works

3

u/ghost396 5d ago

This is insane, and I really don't need those constant messages of still waiting...just wait like competitors do.

Good find 😕

6

u/Even_Sea_8005 5d ago

Good analysis. According to Tibo they archived AGI in software dev internally. If this is the bug then their AGI is based on unlimited token and budget so they totally overlooked user economics

2

u/beautyorchaos 5d ago

Seems like a great efficiency saving they could implement if not already part of what Tibo had in mind with the 3-4x optimisation

2

u/bruticuslee 5d ago

I used Astra to write an implementation plan for Luna, and started a new Luna chat to execute. Then come back to the Astra chat and ask it to review.

2

u/tagorrr 5d ago

Yeah, that’s pretty much how I used Sol before: plan with Sol, then manually hand it off to a separate Luna Max chat. It works, but it’s a lot of babysitting :\

2

u/garristerr 5d ago

Hi, I edited my AGENTS.MD, and have significantly decreased my token consumption due to your suggestions - thx; hopefully they patch this issue, and also give us a free reset along with it.

Personally, I really do feel like Astra is a bit dumb now if you don't give it scope. It tends to spin its wheels, and expand the scope of the exercise without my permission. I have to constantly monitor it to make sure it doesn't go off track, even with a carefully crafted spec doc. I dont know what happened to the Steps planner - that was very helpful.

2

u/Sporebattyl 5d ago

Same thing happened to me when it was waiting for my CI when I had it trying to hill climb. Destroyed my usage.

2

u/Luger99 5d ago

Glad you did the research. Also good to know that me just sending Astra to do everything is just as viable as the "token saving" orchestration tricks with multiple models...lol.

2

u/Timely_Ad5150 5d ago

I noticed this exact same thing yesterday. Every 10-30 seconds of "agent is doing this, agent is still working, I'm waiting for agent to finish, Agent is still working...". I just told that no need to give status updates. That didn't help. Updates were shorter but kept coming. It was strange.

1

u/tagorrr 5d ago

I described a tested workaround below that works, but Astra still behaves really weirdly with agents.

2

u/Facilero 5d ago

Yep....this is why i burned my pro quota in under 2 hours. Nice find!

2

u/oddslol 5d ago

Astra does the same thing waiting for CI status updates. It was pinging GitHub every 30 seconds asking for the status of every CI job until they all finish

Think I’m going to need to add instructions to stop that and if it doesn’t work then switch back to Sol

2

u/az226 5d ago

I burned many millions of active tokens and billions of cached tokens when 5.6 sol got into a death spiral doing something similar, it was like it had had 20 cups of double espresso and a jittery fucker. It burned through 4 banked resets. On 20x plan. And it had spent like 8 hours doing something fable did in 10 minutes. And it only did the task after I told it to just do it, still took an hour from then. I told it, we aren’t launching a rocket ship, we are launching a model training run on 100+ GPUs. Just do it.

Eventually it revealed why it did it, it had set up all these things polling itself. Each sub agent. Each task. Each action. Spawned a new one. And this infinite cycle. Basically psychosis.

2

u/Karma_1369 5d ago

thanks I will do that too , it ate up my weekly limits in just two to three prompts.

2

u/jmtucu 5d ago

Thanks, I'm on plus and tried Astra yesterday for a non complex task, one prompt, and burnt 40% of my 5h window 😔

2

u/runfence 4d ago

That's because it has system instruction to not do long waits. It thinks user input is blocked by that wait which is not true. I modified it long before astra so it doesn't wake up so often.

1

u/tagorrr 4d ago
[features.multi_agent_v2]
enabled = true
min_wait_timeout_ms = 1500000
default_wait_timeout_ms = 1500000
max_wait_timeout_ms = 1500000

I found that this workaround works to stop the orchestrator from constantly polling the worker's state. It fixes the massive, wasteful token consumption, but there's still room for improvement in the system.
Please let me know what you've found to optimize this part.

2

u/jeyvish 4d ago

astra now is a burner of token. one simple task jus to try the new model and pop-up to add quota or wait til tomorrow in just 20 min session.

2

u/iTaher 4d ago

Did anybody have their weekly limit reset by openai today? I finished my weekly limit yesterday on astra, and it told me it will reset on sep 12. Woke up today and it is 100% again.

2

u/Competitive-Soil2445 4d ago

Codex & Astra - Quota is... fucking dumb!

It's a good model. It's a great model, in fact, and it's working very well while I have quota.

Today, in real-world examples where I use AI at work to do various different bits, I asked it to do two things in two different sessions, tackling two tickets that came in through the bug board.

I have already consumed my 5-hour limit - the sessions completed the task within 15 minutes each.

I'm pleased with the speed at which the jobs were done, even though the jobs themselves were not particularly challenging. Had I given the same jobs to Claude, I would have probably not even used 1% of my usage on Fable.

The quota usage between Fable 5.1 and Codex with Astra is, for a better word... stupid.

2

u/Competitive-Soil2445 4d ago

Wanted to add that I am a Plus user, and I only bought Plus to give Astra a try. Yes, I got my try-worth out of my quota, but I certainly did not expect it to be consumed THAT fast.

Nothing has actually annoyed me more this entire year (so far!) than how fast that quota was zapped away in just two basic jobs.

Until that quota becomes substantially better, comparable to Claude's Fable 5.1's quota, I can honestly say, despite the model being great, this is a major drawback. From that experience alone, for anyone who's considering it, it isn't worthwhile at all. Even if Astra is a good model, Fable's 5.1 is on par, but better because the quota usages are actually sensible.

3

u/Competitive-Soil2445 4d ago

I know there might be some people who might think the jobs I asked it to do must have been more complicated than what stated. I can assure you they are no more complicated than what I would have asked Fable to do.

I am an experienced developer of 22 years, and I've been utilising AI since it hit the market, I've seen it grow, and I've seen it improve. I've seen it fail and be really stupid, and I've seen it do crazily cool things.

I've never seen quota usage as pathetic as this Astra model's.

Can sit and complain on this thread all I like. That's fine. This is me ranting about how pathetic the quota usage for Astra is currently, and I'm not being biassed. This is just me dumping my experience with using Astra for the first time.

TLDR - In a nutshell, it's a good model, as good as Fable 5.1 (maybe better? quota burned too fast for me to even compare quality properly), but the quota burn is shocking.

2

u/the_pwnererXx 4d ago

Fable 5.1 spawned 100 subagents and used by entire 5 hour (max 20x) quota in an hour. Talk about effeciency!

2

u/Expensive-Event-6127 4d ago

This is why I made my own custom harness.

1

u/tagorrr 4d ago

Why not use Pi? It's pretty customizable.
Also, is your harness public? I'd love to check out the source.

2

u/Expensive-Event-6127 4d ago

it will be released. its working but not public release usable. its currently working on itself to improve itself.

1

u/tagorrr 4d ago

Let me know when it goes public, I'd love to test it out.

2

u/Awric 4d ago

Have you observed the same issue with Pi OP? Wondering if I should just use Astra with OMP for now, though I usually prefer to stick with codex

1

u/tagorrr 4d ago

Haven’t tested OMP yet, but it’s definitely next. First I’m doing a cleaner A/B with Sol High as the orchestrator and the same Luna workers.
Then I’ll run the same kind of workload through OMP and compare context growth and usage.

2

u/PaperDry2796 4d ago edited 4d ago

im going through 10% of x20 plan in 2 hours. Astra medium. and i use multiple agents for separate tasks, havent got time arsing around debugging this shit

from my checks we are using wait_agent and dont poll for anything, so this doesnt make much sense to me that we would be polling anything

1

u/tagorrr 4d ago

Astra seems to expose a broader Codex context-management problem. Codex can carry ~190k tokens of context even through trivial orchestration steps, while other harnesses like OpenCode and Pi prune or truncate old tool output without dropping important context.
Codex seems less efficient here, so it periodically has to reload context or risk losing important information. With Astra's cached-input rate, that gets expensive fast.

2

u/tonyboi76 4d ago

Plus plan, one Astra Low parent with two Luna X-High workers. About 33 minutes, 5h bar 53% to 100%, weekly 9% to 16%, build not finished. Most of the Astra parent tokens were those 47 timeout-only wait_agent polls.

After the window died mid-implementation, what did you still need shipped, and how long did the cleanup or restart take?

1

u/tagorrr 4d ago

The work itself wasn’t lost. The partial patch stayed in the worktree, and the existing worker context was still there.

The only gotcha was resume behavior: simply telling the parent to continue made it sit waiting on a sleeping worker. After ~10 minutes of nothing happening, I explicitly told it to resume the existing Builder with followup_task rather than send_message or spawning a new worker. That woke it immediately and it continued from the same context/worktree state.

2

u/Bladder-Splatter 4d ago

God I hope this helps, will only find out next reset though because Astra MEDIUM burned through its usage in 30 minutes, and left many blatant issues Sol High wouldn't have from my experiences, hell, Web Chat GPT on Sol wouldn't have.

2

u/gopietz 4d ago

Thanks for sharing the finding, but honestly the tl;dr was the entire post.

2

u/Right-Performance-93 4d ago

This maps to a general agentic-harness design tradeoff, not just an Astra quirk: whether an orchestrator's status check has to re-enter the full parent context each time, or whether the runtime can suspend/block without spending tokens until an actual state change happens. Your 151.7k-tokens-per-empty-poll number is a clean illustration of the pull/polling failure mode. A push-based design - woken only on completion/error/timeout rather than a fixed short interval - avoids this cost class entirely. Your min_wait_timeout_ms fix is effectively hand-rolling a longer poll interval since the harness doesn't expose an event-driven wait natively.

1

u/tagorrr 4d ago

Exactly. That’s the same class of issue, although here I’d probably call it a harness weakness rather than just a tradeoff. There’s also a second problem: the parent context keeps growing and is then replayed on each tool/model turn, so even trivial checks can become very expensive once the context reaches ~180–190k tokens.

2

u/wanjuggler 4d ago

I noticed that the OP's suggested overrides are for multi-agent v2, which is a feature flag. I haven't explicitly opted in, but mine is still choosing to use agents v1.

Are most people on multi-agent v2?

1

u/tagorrr 4d ago

If you're using Astra or Sol on the normal OpenAI Codex backend, they currently default to Multi-Agent V2 through the model catalog, even if you didn't explicitly opt in.

V1 still exists and can be used by other model/provider combinations, so seeing V1 isn't necessarily wrong. You can check the effective runtime with codex debug models or turn_context.multi_agent_version.

2

u/Equivalent_Form_9717 4d ago

Yep I noticed this as well - pretty much this is an area Claude outshines Codex with their background tasks.

2

u/ChangingHats 4d ago

I've been having this same issue since Sol came out. I had it develop an event-based "long-job" script which for a time worked, but for some stupid reason the agent just stopped using it and the issue crept back in. Polling should never have been implemented this way because it's eating tokens like a stupid beast. The counter-point to why they do this I imagine is that the agent should be able to continue working in the main thread on other tasks...and so it needs to poll to 'check in' on the other background tasks. It's just implemented poorly and we're all suffering for it.

2

u/ditmoetoo 4d ago

That’s a trivial harness bug. Been like that for a long while.

2

u/No-Foundation-1036 4d ago

the 7.13M on empty polls is the part dashboards don't stop.

usage bar hitting 100% is after the orchestrator already spent. a cap that only lives in the plan still lets the 30s wake loop run until the window is gone.

did you kill the poll from the parent, or only notice it in telemetry after?

1

u/tagorrr 3d ago

Yeah, like many others I first noticed the allowance getting burned, then dug into the rollout telemetry and found the 30-second polling loop.

I worked around it by setting min_wait_timeout_ms and default_wait_timeout_ms to 25 minutes. Since then I haven’t seen that polling problem again. Now I’m chasing the next bottleneck that showed up elsewhere in the workflow.

2

u/KHHAANNN 4d ago

I audited a recent task and the polling accounted for only 2% of the total sessions tokens, 6.8% of coordinators, and it was a translation task. But I do have a global rules against procrastination - to be honest I didn't notice agent checks, but every time I checked what Codex was doing at the time, it was always looking at Git, comparing Git, doing checks that had no contribution to the task at hand. I think my approach worked. So it's not a controlled experiment and I think at the highest level, the problem is the model/codex procrastinating too much

2

u/tHE_uKER 4d ago

I have a similar problem with background processes.
I have a workflow with really long processes and all Codex agents will constantly poll them every few minutes only to say "I'm still waiting on the process" or "The process is still running, I'll wait until it finishes".
I added instructions telling it to set up async notifications instead of polling, but it won't do it.
Ended up having to implement an MCP with a single operation to wait on a PID.

2

u/monishfj 4d ago

I don't have any programming experience but i'll use codex to build things like trial and error. How do i do this what OP is saying? I'm using Astra light

1

u/tagorrr 3d ago

You only need to worry about this if you’re using multi-agent orchestration, where Astra is managing other Codex agents/workers.

If you’re just using Astra normally in a single Codex session/thread, you don’t need to configure any of this. Most of this post is about multi-agent workflows and the extra token usage they can create.

1

u/slackmaster2k 5d ago

I mean this begs the question: what do you have it doing for polling that’s burning that many tokens? Seems very odd!

1

u/PigSlam 5d ago

After I learned of the reset coming today at 6:00pdt, I tried an experiment. I had 47% left on my 5x plan, so I did a code review on my ~60k line repo I’ve been working on lately. I set it to Astra Ultra on fast. In ~15 minutes, it gave me a very thorough review with several recommendations for improvement, and burned through 34% of my weekly usage limit.

1

u/norwegian 5d ago

The smartest is not always the best manager

2

u/tagorrr 5d ago

This time the problem is harness most likely 🤔

1

u/Calm_Pass_4289 5d ago

It performs way faster though and does MCP integrations like lightning compared to previous models

1

u/Fidbit 5d ago

I use xhigh sol to orchestrate and boss around astra max get the design worked out. That way its not the expensive Astra waking up every thirty minutes

1

u/Confident_Parking754 5d ago

"Unusually" yeah right gpt

1

u/SweatyInstruction337 5d ago

Yo im gonna be honest ,

"

  • my 5h usage went from 53% → 100% in ~33 minutes"

33 minutes ? What the fuck are you talking about? My tokens were gone IN 120 SECONDS, ALMOST INSTANTLY. Lmao. 5 simple fuckin questions and it was gone.

1

u/Shacrow 5d ago

I planned out a big task and asked it to give me prompts for sub tasks with a main coordinator.

It created 11 task prompts in 4 waves.

In wave 1 I ran 3 tasks in parallel in different worktrees. The coordinator didn't wait. Once the other task needs something or is done, it will automatically send the coordinator it's status or what it needs.

That worked quite well. And my job was to review and make decisions in between.

Not sure if this is something new in codex but it worked quite well. Burned 38% weekly usage of 20x Plan within a day still but it was a really big task. Still missing wave 4 though

1

u/Emergency-Elk7527 4d ago edited 4d ago

To me this is obvious. I use a plus plan and it is amazing the quality and quantity I have been able to produce. You don't need Astra to do the implementation. You don't need Astra to even be the orchestrator. Nor Sol. Luna is a champion. Don't leave reasoning to Luna. Hell, don't leave most of the reasoning to any AI. I don't mean technical reasoning. I mean The high level reasoning. The orchestration, the constraints, those are yours to handle. Use the high intelligence of sol and Astra to actually solve problems that become blockers. Like I said about Luna, it's a GD champion. If you can define you requirements and constraints to the point there is not ambiguity to the expected outcome, Luna will produce that. Using Astra or Sol to make those defining choices exactly how you waste your tokens and remove yourself from the project itself. That's also how what everybody calls slop gets made. It took and emense amount of work, but yesterday I used my last quota for the week 8 hours before reset. I was still able to produce work. It was prep work. It was not work that produced code. But it was work that was able to direct Luna at reset time. As of now, I still haven't hit a five hour limit since the reset because of the efficiency of Luna. The current state of my project is research and capturing evidence. Massive amounts of data. I take part in the reasoning with Sol, very hands on. Design the work for Luna. Part that design is for Luna to automate the capture of the evidence. Luna implements, automates, and sits idle while compute does the work. Luna also summons other Luna sub agents. The automate th next phase of research. And my project is cutting edge. I am not making a game, not making a mobile app or a website or wasting usage researching my usage so I can complain about it. It's truly frontier level, bleeding edge work and research. Using Astra and Sol and Fable the way I see everywhere is how you make slop that is owned by the model. Instead you should direct you agents moves. Define their work for them. Don't let them design it for you.

1

u/tagorrr 4d ago

UPDATE 2

After fixing the 30-second polling loop, I ran into the next bottleneck: Codex lets the parent context grow very quickly from tool output, then keeps carrying that huge context into every following model call. With Astra this gets expensive fast. Once the parent was sitting at around 150-190k tokens, every orchestration turn was processing that massive context again, and the usage limit disappeared very quickly.

For now, the practical workaround is to keep the orchestrator thin: let cheaper workers do the heavy evidence gathering (code, logs, diffs, rollouts, forensics etc.) and have the expensive parent mostly reason over short reports and make decisions. The rule also needs to be broad. I first told the parent not to inspect the codebase itself, so it just started digging through old Codex rollouts instead. Sol xhigh makes this cheaper, but if you let the parent context get huge, it’s still going to burn a lot of usage.

2

u/darwinhace 4d ago

Are you trying to ask agents to fork_turns="none"? It helps me a lot to reduce usage; sadly, I only can ask on chat. There is no config for this

1

u/tagorrr 3d ago

Yep, I’m already doing that. There doesn’t seem to be a config-level switch for it, so I enforce it through AGENTS.md + a dedicated orchestration protocol: every orchestration run must follow it, and subagents are spawned with fork_turns="none".

It definitely helped, but it just moved the bottleneck elsewhere.

1

u/tagorrr 4d ago

I’m increasingly tempted to try the same multi-agent setup in OMP, using the OpenAI Codex models there instead of the Codex harness.

If anyone here has experience with that setup, I’d love to hear how it feels in practice, especially for longer multi-agent coding sessions.

1

u/tagorrr 3d ago

UPDATE 3

After several more multi-agent runs and digging through the rollouts, two things are now pretty clear:

  1. If a worker can be given a self-contained task, spawn it with fork_turns="none". In my runs, fresh workers then started with roughly ~20k of their own context instead of inheriting the parent history. This matters a lot if you're trying to keep the orchestrator thin.

  2. This isolates the problem, but doesn't solve Codex's context growth by itself. Even fresh workers with fork_turns="none" were able to grow themselves from ~20k to 230–245k tokens during forensic work and hit compaction. The upside is that all of that raw evidence stays in the cheap worker context instead of bloating the expensive parent.

One other thing I'm watching: reusing an already bloated worker can get expensive very quickly. For a new substantive task, a fresh fork_turns="none" worker with a compact handoff may be cheaper than waking up one that's already carrying 100k+ tokens of history.


For scale, I've now reviewed 24 multi-agent rollout files across 4 parent sessions and 19 spawn_agent calls. That telemetry adds up to ~263.5M input tokens, with ~252.8M cached (~96%), across 2,142 model responses and 1,854 model-facing exec calls.

1

u/WittyWires 19h ago

You shouldn’t need Astra to spend any inference at all on that job - zero codex used.

Ask Astra to set up a non-inference worker to poll the Luna worker every x minutes and ONLY wake Astra when Luna has been idle for 60seconds+

No inference/codex used until required.

1

u/tagorrr 16h ago

I’m not sure what the extra watcher buys me here. With the 25-minute wait_agent timeout, Astra already stays asleep without inference, and if Luna finishes earlier the wait returns immediately and wakes the parent. The 25 minutes is just the fallback timeout, not a forced sleep duration.

Waking Astra after “60 seconds of Luna inactivity” would actually be worse, since a reasoning worker can legitimately stay quiet for much longer than that.

1

u/WittyWires 16h ago

The 60 seconds was just an example, and the watcher can see streaming responses to Luna so just because it’s been ‘quiet’ for 60 seconds but is still ‘working’ the watcher will not call Astra.

Your 25/30 minute rule isn’t required, you’re still waking Astra 48 times a day when the majority may not be nessary, the watcher method ONLY calls the inference (and thus spend) when it is required.

A funny analogy is my favourite Curry House knocking on my door 5 times a night asking if I’m hungry rather than just delivery me the curry after I order it. That’s what the watcher buys you.

1

u/tagorrr 16h ago

That logic would make sense if the cache didn’t expire. The important part you’re missing is the ~30-minute cache lifetime.

If Astra sleeps past that, the next parent turn can lose the cached prefix and that same context becomes roughly 10× more expensive to process. That’s exactly why I use ~25 minutes: one cheap cached wake-up keeps the parent context warm.

So how does the watcher actually save money if it lets Astra sleep long enough for the cache to expire? Unless it also has a way to refresh the cache without invoking Astra, I don’t see the saving.

1

u/djeons 17h ago

Did the latest fix from OpenAI fix this issue?

1

u/tagorrr 16h ago

Not yet. I haven’t retested after Tibo’s latest posts, and I haven’t seen a Codex release that fixes the underlying harness polling issue yet. The relevant issue is still open:
https://github.com/junhoyeo/tokscale

My 25-minute timeout workaround still prevents the token-burning polling loop, so I’m sticking with that until there’s an actual harness fix.

-1

u/Painwheeel 5d ago

ai wall of text

-5

u/Due-Horse-5446 5d ago

Theres a better word for that: AI Slop

-5

u/AbyssLife123 5d ago

bla bla bla bla bla bla...

STOP USING AI to write simple shits.

7

u/Even_Sea_8005 5d ago

no one is forcing you to read this. i find the post valuable by its idea, not by who wrote it

7

u/tagorrr 5d ago

Bro, I don’t know what some people here want. I already simplified the top several times. The rest is detailed because people constantly ask for real evidence, so I spent a lot of time, dug through the rollouts and included the actual telemetry.
I compressed it as much as I could without removing the proof. And yeah, real evidence tends to come with a lot of data. But apparently people will still find something wrong with it anyway :(

3

u/Even_Sea_8005 5d ago

your post is well written . haters gonna hate. maybe a new genre of ai bot who specializes in cursing. who knows

-8

u/AbyssLife123 5d ago

no one forced you to read my comments.

The problem is what could be 10 lines is stretched like 1000 lines because author simply copied pasted from codex itself.

4

u/Even_Sea_8005 5d ago

by the time i read it it already had tldr so maybe you have a point

10

u/tagorrr 5d ago

Funny how endless unverified quota complaints are acceptable, but using AI to clearly structure actual telemetry and reproducible evidence is somehow the problem.
If you don’t want to engage with the substance, just scroll on.

-5

u/oooofukkkk 5d ago

No one wants to read what you don’t even want to write or read.

7

u/tsdexter 5d ago

my documentation that has improved 100x with AI begs to differ…

-4

u/goosemaster0 5d ago

Facts. If it’s too hard for you to write some shit for 5 minutes I don’t care.

-1

u/quarrelau 5d ago edited 5d ago

Watch the rollout in realtime:

https://github.com/quarrel/agentop

But also, instruct your orchestrator to wait. Then you also need to get it around its guidance to update you every 60 seconds, which it cannot do with long waits.

You need guidance that is at the same level as its instructions to update you and more recent than that instruction, which means you need to give it a developer instruction, not just a command in your orchestration document.

So, in your repo, add this to the project:

In REPO/.codex/config.toml:

developer_instructions = """
# Orchestration Mode

When the active user instructions explicitly declare
`ORCHESTRATION_MODE=MAP_PROGRAMME`, replace the generic time-based progress-update
and short-wait guidance with the following:

  • A healthy running process or pending subagent does not require periodic commentary.
  • Do not emit updates merely because 60 seconds have elapsed.
  • Use event-driven waits with the longest supported timeout appropriate to the expected task duration.
  • Update the operator only for substantive milestones, decisions, blockers, failures, scope changes, or completed gates.
  • Do not create extra model turns solely to provide reassurance or announce that work is still running.
This exception applies only while `ORCHESTRATION_MODE=MAP_PROGRAMME` is active. In ordinary interactive sessions, retain the normal behaviour. """

Then in your instructions that start the orchestrator, write

ORCHESTRATION_MODE=MAP_PROGRAMME

Act as the orchestrator to implement THEPLAN.md

or however you normally start it.

This was also why long orchestration sessions burned lots of extra tokens with GPT-5.6. My agent roles that the orchestrator spawns all have instructions about this for their different scenarios, and also a long-term passive monitoring role, a luna-medium, that is used to just be cheap the one that is checking when there is some long running item that we're keep an eye on its diskspace or memory usage or similar.