Comment by throwaway219450
8 hours ago
Astra writes well (which is why I often like to work with it over Claude), but it tends to produce code golf that's borderline unreadable, like completely omitting line breaks. I thought I had something funky with my config, but it seems to be a known issue.
https://lucumr.pocoo.org/2026/9/7/astra-why/
EDIT: You can search for "tenobrus astra" on X, but link removed.
The generated code certainly does what's asked of it, but it's as sloppy as anything else I've seen. I don't think this benchmark can control for that. Maybe if it had a metric for minimum diff to satisfy the new requirement with the existing constraints on dead code etc?
6.1 Sol does this too. Like, line break after a function, but absolutely nowhere else. This solved it for me:
- Use paragraph-oriented formatting: give distinct logical steps room to breathe. Keep closely related statements together, but separate changes of purpose and a block's final result with blank lines. Prefer readability over vertical compactness.
I've found passing its output through a formatter is essential, also turning dead code warnings into errors.
I use the frontier models only in plan mode; coding is held out to cheaper models.
I run Paseo as an orchestrator with agent profiles. "Distinguished Member of Technical Staff" -> Fable, plan mode. "End-User Customer Advocate" -> Astra, plan mode. A few others. Basically, these agents (with profile prompts) can only be "consulted" for input on design elements; it's OK if they produce a bit of verbosity here. This has worked fantastically for me, really awesome to see a self-constructed team own the work end-to-end.
A "Director of Engineering" (6.1 Sol or Opus 5.5) also in plan mode organizes the team for the task and then owns coordination and instruction. You can think of this in essence like a "model router".
Coding is handled by Haiku 5.5/GPT 6 Luna/DeepSeek v4.1 Flash. One "Principal Engineer" Sonnet 5.5 or 6.1 Sol for some tasks.
You are deep in it.
You may be larping for no additional benefit vs just using Opus 5.5 and just asking it to implement a feature.
You are correct, at least based on my experimentation. This subagent workflow really only delivers meaningful results when working across model families (ex: Opus asking Astra for a review) or when working across conceptual hardware boundaries (cloud offloading to local inference, etc). The planner / overseer model ends up reading all the output of the coder model anyway, at least if you want quality output, so there's not much benefit otherwise.
4 replies →
Nah; I can use my token budget across both providers this way, use tokens more sparingly with smaller models for heavy text in/out (why pay Opus prices to babysit a PR? run tests?), and you'd be surprised when the agents talk to each other and "role play" how much this improves things like the UX as well as technical design which are more subjective.
Distinguished Member of Technical Staff, for example, is asked to "expand the solution space" which I find has a strong effect on approaches considered (it doesn't know what was already considered on the main thread; only the domain and problem space).
This also helps with context growth since the sub-agents do the heavy lifting (e.g. search, read docs) and just provide the key bits back to the lead.
Like you, I was a single-model, single-TUI user up until three weeks ago when I picked up Paseo and it is the only tool that I've found that has significantly positively improved my throughput without sacrificing quality of product.
Is it "larping"? I ran an eval today on a contract ingest and extract agent I'm working on. Changing the <role> fragment of the prompt lifted the results by +7 points by simply changing the text to the effect of "You are a senior partner at a prestigious law firm that focuses on reading licensing contracts..." and some bits about the content the agent is reviewing + objective. No one would believe it without an eval.
Claude docs explicitly say to LARP[0]:
My conclusion: the agents like to LARP so I'm happy to LARP with them.
[0] https://platform.claude.com/docs/en/build-with-claude/prompt...
2 replies →
He has to be deep in it because it’s the product he sells.
1 reply →
No "may be" about it. There is no benefit to having bad models write your code, and there's no benefit to "plan" mode. Plan mode is an outdated 2025 concept that should be removed from standard harnesses.
There are 2 scenarios for dumb builder agents:
1. Your "planner" actually implements the project almost completely, finds all the gotchas, solves all of the emergent problems, and fully plans the solution.
2. Your "planner" takes a half-assed first attempt, solving none of the major problems that will arise during implementation
In scenario 1 -- just pay cache output on a few more tokens to finish the project. No need to spend twenty minutes pumping a few million tokens through deepseek regardless of how cheap it is to do so.
In scenario 2 -- good luck getting quality output
I do think this "software team" LARPing is an engineering version of AI psychosis. You can get all of the little parts humming along, sending messages, and looking really cool. You can even convince yourself that all of these busy little bees actually make better product.
But a frontier model working alone can produce better output in a tiny fraction of the time. Just build the thing.
2 replies →
Don’t apologize for x, just don’t post x links.
X links are fine. People who don't want to visit the site can choose not to visit it.
This current situation where people get shamed for sharing the information until they edit it out and leave obscure "search for___ on X" is infinitely worse.
I think it's the best possible approach. It lets you refer to content that's unfortunately stuck on the site, while still signaling clearly that it's something to avoid if possible and to apologize for if not. Omitting the link just removes information without influencing consensus on whether to use X.
edit: I wish it would let me view the darn screenshot tho :c
There are plenty of alternatives to link to X content without hitting X's servers.
2 replies →
I removed it, but it's frustrating when the options are someone's (reasonable) post on X, or slop-spam aggregators. I don't really want to drive visits to either, but at least the X poster can get the views. I don't really like xcancel either as it still encourages indirect engagement with X.
Astra is some of the worst code I've seen in terms of slop, so the benchmark is kind of surprising to me. Astra gets things right, but I need Claude clean up its slop all the time. Many times I've cut down Astra changes from 1000+ lines to ~100 lines.
I've noticed the line breaks issue. It's easily fixed with a formatter like prettier and, frankly, that kind of quality-of-life thing is best handled deterministically anyway.
I haven't used prettier much but this is what the prettier docs say about empty lines.
> It turns out that empty lines are very hard to automatically generate. The approach that Prettier takes is to preserve empty lines the way they were in the original source code. There are two additional rules: > > - Prettier collapses multiple blank lines into a single blank line. > - Empty lines at the start and end of blocks (and whole files) are removed. (Files always end with a single newline, though.)
The last time I used astra it wrote a lot of rust code where it would insert almost no empty lines at all. Not before functions, structs, impl blocks, etc., and not inside functions to group statements. Similar to prettier, rustfmt doesn't really insert empty lines.
Edit: hmm maybe I misunderstood your and the parent's comment. Are you talking about missing regular newlines after statements, i.e. multiple statements on one line?
I was talking about a function with 100 lines and no line breaks. Very difficult to read.
I use black/ruff on a lot of projects and it will only touch standard-y things like docstring spacing, or spacing between methods and classes, import sorting etc. It doesn’t touch intentional/aesthetic user spacing. With agents it is helpful to make them run ruff and mypy to keep them honest, but as long as the code adheres to the spec, it doesn’t get changed. Astra also creates things like “report” functions with 10 arguments, so it’s useful to turn on complexity checkers as well.
I don’t see how Prettier is any better here unless you really want everything to be deterministic; how could it possibly know (always) when to insert a line? Aside from some more obvious cases like adding a gap before a loop declaration. Sometimes I group lines because they’re part of a mathematical formula or other operation and it makes sense to me, but Prettier doesn’t know that.
Doesn’t this mess up the context though? I use ruff and my agents get confused if I edit and run ruff out of band. How do people deal with that? I’m always having to remind agents to re-read files because they’ve changed
I find it is okay if I tell the agent that running the formatting step is required before every commit.
xxcancel (n.b. dos equis) works:
https://xxcancel.com/tenobrus/status/2096636223414808719
Beware NSFW: redirects to private instances that redirect to porn for monetization
Edit: disable JS to prevent click-jacking
Interesting, I've never seen it do that.