Why Human Syntax Breaks LLMs

ASLang published a technical essay on September 8, 2026, about why coding agents stumble on languages like Python and Rust. It argues that a surprising amount of model effort goes into syntax repair, not useful programming work. The useful takeaway is not to accept or reject the claim on vibes, but to test whether your own agentic coding failures are syntax-shaped, context-shaped, or review-shaped.
Agentic coding is software work where a model plans changes, edits files, runs tools, reads results, and iterates toward a goal. Cursor, Anysphere's AI code editor, makes that loop visible enough that you can measure where it goes wrong instead of only reading the final diff. Gemini Workshop is part of Harness Institute.
Understand the claim before picking a side
The ASLang essay landed because it names a thing many developers have seen: the agent writes nearly-right code, hits a parser or compiler error, patches the surface issue, then breaks something nearby. The author describes this as a syntax repair loop and claims models can spend 32% to 41% of inference compute there.
The essay's core argument is that human-friendly grammar can be awkward for transformer attention. Python indentation needs state. Rust has dense lifetime, generic, and macro-heavy syntax. The model is not just choosing tokens; it is trying to keep a hidden structure valid while also solving the task.
That matters for agentic coding because agents pay for mistakes twice. First they generate the wrong shape. Then they spend tool calls, context, and attention repairing it. The failure may look like low reasoning quality when the first problem was a brittle representation.
The trap is treating the benchmark number as universal. The essay may be right about its setup and still not describe your repo. A tiny FastAPI service, a Rust macro crate, and a generated TypeScript client create very different syntax pressure.
Take the training-data objection seriously
The strongest objection from the Hacker News discussion was simple: how much of the gap is really syntax, and how much is training distribution? LLMs have seen mountains of Python and Rust. If you create or transform a cleaner grammar with little public corpus behind it, the model may perform worse even if the grammar is easier in theory.
That is a real objection, not pedantry. Models learn from examples. A syntax with fewer edge cases can still lose if the model has not seen enough idiomatic code, build failures, fixes, library patterns, and tests in that form.
A good version of the ASLang side says grammar can increase the amount of state the model must preserve. A good version of the skeptical side says corpus familiarity can dominate grammar elegance in practice. Both can be true.
The practical move is to separate parser failures from semantic failures. In Cursor, ask the Agent to make a small change, then inspect the edit history and tool output. Did it fail because the syntax was invalid, because the API call was wrong, because the test expected different behavior, or because the prompt asked for too much?
Avoid arguing from one transcript. Agents are noisy. A single hilarious broken diff is a story, not an eval.
Notice when agents repair syntax instead of code
A syntax repair loop has a smell. The agent makes a broad change, gets a parser or compiler error, changes only the line that errored, gets a nearby error, then repeats. The diff grows, but the program is not getting closer to the requested behavior.
In a Python repo, this may look like the agent fighting indentation across nested try, with, and async blocks. In a Rust repo, it may bounce between borrow checker errors, trait bounds, and lifetime annotations while never revisiting the design that caused the constraints.
Cursor users can catch this without building a benchmark harness. Keep the Agent pane, terminal output, and diff review open together. If the same class of error appears three times in one task, label it before you continue.
A small review note is enough:
Repair loop observed:
- Task: add cached lookup to pricing service
- Language area: Python async context managers
- Repeated failure: indentation and exception block shape
- Human fix: rewrote control flow before asking agent to continue
This is where code review guardrails help without becoming bureaucracy. You are not banning the agent from editing hard code. You are teaching yourself when to stop the loop and change the shape of the problem.
For another example of measuring agent waste rather than just arguing about output quality, see Felan Makes Coding Agents Spend Less.
Run the argument as a local eval
The cleanest way to use the ASLang debate is to test a narrow claim on a repo you actually maintain. Pick one task that usually goes well and one task that often causes repair loops. Run each twice: once in the original syntax, once with scaffolding that reduces syntax pressure.
For example, in a Python service, compare "edit this nested function in place" with "extract the branch into a new helper and add tests first." You are not inventing a new language. You are making the structure easier for the agent to hold.
In Cursor, the workflow can be very small:
- Open a real branch with failing or missing tests.
- Ask Agent to implement the same bounded change three times in fresh worktrees or reset states.
- Record parser/compiler failures, test failures, tool calls, and human interventions.
- Repeat with a prompt that asks for a simpler intermediate structure.
- Compare the pattern, not just the final pass/fail.
The trap is optimizing for the agent transcript instead of the code. If the "cleaner" prompt produces ugly abstractions, you learned something too. Syntax pressure is only one cost.
If you keep repo instructions in AGENTS.md, add a boundary rather than a lecture:
# AGENTS.md
## Editing boundary
When changing parser-sensitive code, prefer small structural edits over chained patching.
For Python:
- Do not repair indentation errors more than twice in a row.
- If nested control flow causes repeated parser failures, extract a helper and rerun tests.
For Rust:
- Do not keep adding lifetime or trait bounds without explaining the ownership shape.
- If borrow-checker fixes cascade, propose a smaller design change before editing again.
That kind of note is also part of the related training topic, but the important thing here is measurement. The rule exists so the next transcript is easier to inspect.
Copy this small experiment
Use this when the debate starts turning philosophical. It gives both sides a fair shot and keeps the result local.
| Question | Syntax-pressure view | Training-data view | What to record |
|---|---|---|---|
| Why did the agent fail? | The grammar forced too much hidden structure into token prediction. | The model lacked enough examples of this code shape. | First failing tool output and the agent's next edit. |
| What would help? | Simpler intermediate structure, smaller edits, AST-aware checks. | More examples, better repo context, idiomatic patterns. | Whether a scaffolded prompt reduces repeated syntax errors. |
| What proves it locally? | Same task improves when syntax burden is reduced. | Same task improves when examples and conventions are supplied. | Three runs per condition, with resets between runs. |
A Cursor rule stub can make the experiment repeatable:
---
description: Use when evaluating repeated syntax or compiler repair loops in agent edits
alwaysApply: false
---
Before editing, write a one-sentence plan with the expected syntax risk.
During the task:
- Stop after two parser/compiler errors of the same class.
- Name the repeated failure before making another edit.
- Prefer extracting a helper, adding a test, or reducing nesting over local patching.
After the task, report:
- Number of syntax/compiler failures
- Number of test failures
- Whether the final diff changed structure or only patched lines
This is deliberately small. You can run it in one afternoon, and it will tell you more about your repo than a comment thread can.
Try one measured run
Pick one recent agent transcript that felt circular, then label the first three failures before changing anything. If two are syntax or compiler repairs of the same class, rerun the task with the small Cursor rule and see whether the loop gets shorter.
One methodology lens
One useful way to read this through our methodology is the Plan step: delegate first-pass decomposition and dependency mapping, review the sequencing and assumptions, and keep ownership of scope and priorities. If that split is still fuzzy, the workflow usually is too.
Common questions
How should teams start with Cursor?
Start by writing down one visible team rule for Cursor, not a loose preference. That usually means a short repository convention, a review checklist, and one owner who can reject agent output when the evidence is missing.
Which Cursor artifact should teams standardize first?
Standardize the smallest artifact that reviewers already touch: a .mdc rule, AGENTS.md note, or review checklist. The point is not documentation volume; it is a shared place where scope, allowed tools, expected tests, and rollback notes are visible before generated code reaches review.
How do teams know the convention is working?
The convention is working when reviewers can approve or reject agent output from the artifact and evidence alone. Track whether pull requests name the rule used, include the promised checks, and avoid replaying long sessions just to understand what changed.
Best ways to use this research
- Best for: Cursor teams deciding which rule, subagent, skill, or MCP boundary to standardize next around “Why Human Syntax Breaks LLMs.”
- Best first artifact: turn the named fix into a
.mdcrule, AGENTS.md note, subagent receipt, or review checklist before the next automated run. - Best comparison angle: compare the workflow against the current Cursor review path, connector scope, and team rule file; keep the path that leaves the shortest auditable trail.
Further reading
- How to Fix Agentic Coding: Why Autonomous LLMs Break on Human Languages — source essay
- Model Context Protocol — specification
- Cursor — Agent
- Claude Code — getting started
- developers.google.com: fundamentals creating helpful content
Where to go next
Start from the related training topic and make the first exercise prove scope, verification, and ownership in the PR body.