We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
The most useful diagnosis: agents are workflows, not chatbots
“Some obvious & non-obvious reasons I think AI agents may not have really been widely adopted yet, even though the tech is ready” — X thread · Creator: @BadCapitalVC · Recommended by: Aaron Levie.
Levie calls the post “a great place to start” for understanding real-world agent adoption. Its central distinction is that an agent is a process you set up and steer, not a chatbot that simply returns an answer; prompting is therefore closer to writing a specification, including a definition of “done.”
The thread extends that diagnosis into a practical checklist: delegation, technical setup, agent-to-agent and agent-to-colleague handoffs, asymmetric trust when an agent can send or edit something, and the absence of a public job-to-be-done. Levie adds that the payoff requires new data flows, cross-organizational context, and redesigned human review—not merely putting an agent on top of an unchanged workflow.
Why it matters: This is the clearest adoption filter in the set. When assessing an agent product, ask whether it defines the work, supplies the context, manages handoffs, and makes review safe; a better prompt alone is not the transition Levie is describing.
A benchmark for long-horizon agency
Factorio Learning Environment (FLE) v0.3.0 — evaluation environment / benchmark · Creator: Factorio Learning Environment project · Recommended by: Tobi Lütke.
Tobi’s endorsement is deliberately provocative: “Let’s all agree that this is the correct and final eval for agi.” The release describes FLE 0.3.0 as an environment for testing agents on long-term planning, reasoning, and world modelling. Its lab-play benchmark gives an agent fixed resources and a production target, has it write Python against the FLE API, and limits the run to 64 steps; targets are 16 units per minute for solids and 250 for fluids.
The useful difficulty is operational rather than exam-like. FLE says its model ranking is closer to an economically oriented benchmark than to static exam benchmarks, while also warning that many successful agents still shuttle resources manually or use chests and belts as buffers. A 60-second holdout period is used to reduce that shortcut.
Why it matters: FLE gives Tobi’s claim a concrete basis: it tests whether an agent can maintain a model of a changing environment and construct robust multi-step automation, not just produce a plausible answer. Treat “final eval” as Lütke’s standard, not settled consensus; the release itself presents a constrained lab-play setting with known measurement limitations.
A serious reading path into agency: Spinoza
Three biographies of Spinoza, by Nadler, Goldstein, and Stewart — book set · Recommended by: Garry Tan. (The talk names the authors but does not supply full titles or links.)
Tan calls these three biographies “the best biographies about the man.” He says an agent read roughly 1,500 pages and produced a chronology, a map of disagreements among the biographers, and cited quotations that he used to build his talk. He also tells prospective founders that they could do well to learn from Spinoza, whose concept of joy he summarizes as an increase in one’s power of acting.
Why it matters: This is a substantive humanities recommendation with a direct founder lens: the biographies provide a way into a thinker Tan uses to ask whether a tool, decision, or practice increases a person’s capacity to act. The recommendation is also unusually specific about how to read a difficult corpus—compare biographies, preserve disagreements, and retain the quotations that survive the comparison.
Priority and attention
“First and Second Things” — essay · Creator: C.S. Lewis · Recommended by: David Perell.
Perell points to Lewis’s essay for a paradox: putting the highest thing first can bring the second thing with it, while putting the second thing first can cost both. He connects that idea to the warning that results are rarely achieved by obsessing over results themselves, and that a less outcome-dependent identity can create more freedom to perform.
Why it matters: It is a compact decision rule for ambition: keep the activity or value that makes the outcome possible ahead of the outcome as an identity test. (Perell’s post did not provide a direct link to the essay; the link above is a reading pointer.)
Tim Ferriss offers a related, more personal set of cues. He says seven quotes shaped his thinking and changed his behavior over the previous year, and that he revisits them often. Two of the book-derived recommendations are:
- Notes of a Native Son — book · Creator: James Baldwin. Ferriss selects Baldwin’s observation that people may cling to hatred because abandoning it would force them to face pain. Why it matters: It is a prompt to examine the emotional function of a story or grievance before treating it as a settled belief.
- The Art of Possibility — book · Creators: Rosamund and Benjamin Zander. Ferriss highlights the instruction: “I am here today to cross the swamp, not to fight all the alligators.” Why it matters: It directs attention toward completing the central passage rather than spending the day responding to every obstacle.
FLE (Factorio Learning Environment) v0.3.0 is an open-source evaluation environment for testing AI agents in long-term planning, reasoning and world modelling inside Factorio . Its formal benchmark in this release is lab-play: a constrained setting where an agent is given fixed resources and a single target entity to maximize production throughput, writes Python programs against the FLE API, and observes stdout/error output from each program . It replicates the original FLE paper's methodology to evaluate the strongest models as of September 2025 . The standardized harness appends interactions to a single conversation history and summarizes old history near token exhaustion; it deliberately does not use backtracking/reflection agent designs .
What it measures
- Objective: production throughput targets of 16/min for solid items and 250/min for fluids, within 64 steps with early stopping; results reported as Pass@8 at Throughput Level 1 .
-
Verification uses task-specific success/failure flags (
task_verification) and production-flow statistics (flows) . To counter buffering, the agent must leave the factory untouched for 60 seconds before quotas are tested . - Caveat: agents can store items in chests/belts and pass checks without sustained production, so throughput is hard to measure consistently; the authors note higher targets would make manual logistics infeasible and force proper automation .
Reported results and limitations
- Ranking across frontier models is Claude > GPT > Gemini > Grok, a pattern the authors say is closest to GDPVal and opposite to static exam benchmarks (Humanity's Last Exam, AIME 25, GPQA, MMMU) where weaker FLE models do better .
- Mean error rates: Claude Opus 4.1 22.99%, GPT-5 25.05%, Gemini 2.5 Pro 27.29%, Grok 4 40.89% . Claude had zero syntactic errors and almost all pragmatic errors (97.7%); GPT-5 and Grok 4 had high syntactic-error rates (21% and 17%); Gemini 2.5 Pro, GPT-5 and Grok 4 showed API-misunderstanding rates of 12–17% .
- Error-recovery analysis: Grok 4 often falls into degenerate debug loops, while GPT-5 recovers gracefully; error accumulation/recovery remains hard across models .
- Open-source models reached the v0.2.0 SoTA on electronic circuits, steel plate, sulfur and plastic, and for the first time models succeed on harder tasks with over a dozen ingredient dependencies .
- Limitations: many successes are semi-manual (manual shuttling, chests as buffers) rather than full automation; agents rarely use the helper-function namespace (only Gemini 2.5 Pro does); misplacement of entities cascades into unrecoverable failures .
Operational details useful for a recommendation
-
Install with
uv add factorio-learning-environment; start a server cluster withfle cluster start; run an eval withfle eval --config configs/gym_run_config.json. - Release features: no dependency on the Factorio game client (headless pixel renderer for multimodal research), OpenAI Gym-compatible interface, open-source evaluation code with Weights & Biases logging, sweep resuming, analysis tools .
-
Agents receive a structured Observation object:
raw_text,entities,inventory,research,game_info,flows,messages,task_info,task_verification,serialized_functions, and optionalmap_image. - Claude Code integration via MCP adapters is included (livestreamed), demonstrating external-agent use .
- The page explicitly states frontier models are still 'shockingly bad' at Factorio and sees the environment as resisting saturation; planned work includes human baselines, METR-style task scaling, open-play/megabase scaling, latency-constrained real-time evaluation, multi-agent coordination, mod-based out-of-distribution tests, a native keyboard/mouse/vision interface and adversarial dynamics .
Identity. The target article is From Open Source Software to Open Source Strategy on the P3 Institute Substack (URL in bundle metadata). It carries no explicit byline. Internal first-person evidence points to Bill Gurley: “my own optimistic 1999 expectations,” “Benchmark, the firm where I worked as a General Partner for over 25 years,” and “my 2011 post, The Freight Train That is Android” . Treat the byline as inferred, not confirmed by the bundle.
Core argument. Open source has evolved from a development methodology into “Open Source Strategy”: a deliberate corporate-strategy tool used by a small number of companies to neutralize a stronger competitor, commoditize an expensive input, align an industry around a shared standard, or head off a regulatory crisis . The article stresses that these plays are mostly defensive, with offensive payoff often arriving later as a byproduct . Two premises drive the mechanism: open source always produces superior, more secure code than a closed alternative, and when an industry needs to coordinate on a single non-proprietary architecture, open source is the most powerful tool available . The underlying technical rationale is Linus’s Law — “given enough eyeballs, all bugs are shallow” — plus the classic strengths of leveraged development, better testing and bug discovery, more innovation, viral distribution, and customer cost-savings .
Framework worth retaining. The article frames four enabling developments: the rise of neutral foundations as referees, CIOs going “open source first,” AWS benefiting from a commoditized stack, and China embracing open source as national strategy . The core playbook is six canonical cases: Android (2007), Open Compute Project (2011), Kubernetes (2014), LF Networking (header 2017; launched January 2018), RISC-V (2010 roots), and Overture Maps Foundation (2022) . The cleanest codification is Overture’s “Open Source Strategy fingerprints”: a neutral referee under the Linux Foundation/Joint Development Foundation, a common adversary, a repeatable playbook, and a widening tent — with the referee contrast explaining why Google could recapture Android while members cannot recapture OCP-style projects . The economic case is also supported by major acquisitions, including IBM’s $34B Red Hat purchase and IBM’s later HashiCorp and Confluent deals .
Live evidence to include. Two unresolved cases carry the argument: autonomous vehicles and AI . For AVs, the author frames a fifty-plus-player prisoner’s dilemma — Choice A (outspend Waymo/Tesla) versus Choice B (support an open standard) — citing Waymo’s more than $45 billion in cumulative investment and $126 billion valuation, Cruise’s shutdown after more than $10 billion spent, and China’s Apollo history and structural advantages as reasons a Chinese-led open consortium should be expected . For AI, the key distinction is open weights; the claimed benefits are no lock-in, real academic participation, and little-tech access . The state of play: China currently leads the open-weight frontier (DeepSeek, Qwen, Kimi, GLM), OpenAI and Anthropic lead the closed frontier, Meta has pulled back from open frontier releases, and there is no credible Western open-frontier player; the author warns regulation could close the market rather than increase competition .
Uncertainties. No explicit publication date is in the bundle, but the text cites dated events through April 2026, so it was evidently written no earlier than that . Author identity is strongly indicated but not stated in the bundle, and the AV/AI predictions are forward-looking claims that should be re-checked before presentation as established fact.
Elad Gil cited a piece by Ben Horowitz proposing companies hold a pre-planned, once-a-year board meeting to discuss, without emotion, whether to consider exiting in the next six months — scheduled so neither founders nor investors are pushing it .
The episode also flagged YouTube videos of Jansen from Jansen Pharmaceuticals, called one of the best drug developers ever, interviewed 30–40 years ago about regulatory capture in pharma: drugs became expensive and slow due to regulatory capture and a risk-reward setup where the FDA focuses too much on safety/risk and not enough on benefit .
- Garry Tan recommends three biographies of Spinoza — by Nadler, Goldstein, and Stewart — calling them "the best biographies about the man"; his AI agent read the about 1,500 pages and synthesized a chronology, the points where the biographers disagree, and cited quotes, which became the opening story of his talk.
- He tells founders to learn from Spinoza ("If you're going to start a startup, you could do well to learn from Spinosa"), citing Spinoza's Ethics for its definitions of joy and sadness as the feeling of your power of acting increasing or decreasing, and its closing line: "All things excellent are as difficult as they are rare."
Box CEO Aaron Levie (@levie) recommends an X post by @BadCapitalVC on why AI agents haven't been widely adopted even though the tech is ready , calling it "a great place to start" to understand the dynamic of real-world agent adoption , and links the post: https://x.com/badcapitalvc/status/2085262600749945153.
His key takeaway: working with an agent is "much more like managing someone in a process vs. just asking an ai some questions and getting a response back" . He highlights the post's line that "prompting an agent is closer to writing a spec than asking a question. you have to scope the task extensively and define what "done" looks like" , and argues the real upside comes only when you change the underlying workflow — getting agents the right data, crossing organizational boundaries, and evolving the human-in-the-loop review steps . He predicts the vast majority of enterprise token usage will be agents "deployed" to go execute tasks inside workflows .
The recommended post argues adoption lags because agents are processes to set up and steer rather than prompt-in/answer-out; prompting is closer to writing a spec; the work requires delegation skills akin to managing an employee; much power still lives in terminal-shaped tools like Codex or Claude Code; agent-to-agent and agent-to-colleague handoffs are manual; trust is asymmetric (a wrong agent can send the email or edit the file, while a wrong chatbot wastes 10 seconds); and there is no job-to-be-done the public feels yet .
Paul Graham shared and endorsed the X thread 'Who Opposed Nuking Japan?' by @scotthortonshow , which compiles quotes from senior US leaders — including Eisenhower, Hoover, MacArthur, Nimitz, LeMay, Leahy, and Halsey — saying Japan was already ready to surrender and the atomic bombings were unnecessary or immoral . Graham said he was 'very surprised' by the quotes, noting that Eisenhower and Halsey were both against the bomb, and guessed there was heavy pressure toward public unanimity after the bombings . Link: https://x.com/scotthortonshow/status/2085415767474843744.
Chamath Palihapitiya shared Alfred Lin's X thread analyzing Empire State Building vs World Trade Center construction as a lesson source for startups — his quote post reads "I remember it well." and links to the thread . The thread argues the ESB (1930, 410 days, under budget, ~1,250 ft) beat the WTC (1966 groundbreaking, ~7 years, ~1,370 ft) by subordinating every design decision to speed: known steel/floor/window systems, minimizing on-site cutting/hand-fitting, designing trades to work in parallel, overlapping design with construction, co-locating owner/architect/engineer/contractor, and removing material/people friction with on-site railways, hoists, and on-floor cafeterias . It also notes the ESB was built to 85 stories for prestige despite the profit-maximizing design of 63, with speed discipline saving "vanity height economics" , while the WTC was plagued by lawsuits, political fights, and novel systems . The author distills "lots of learnings for startups, both inside the building (focus, parallelizing vs serializing, etc.) and outside the building (regulatory, etc.)" . The thread is at https://x.com/alfred_lin/status/2085007234665431359.
Bill Gurley (@bgurley) directed readers to a P3 Institute Substack article (https://p3institute.substack.com/p/from-open-source-software-to-open) as the detailed case for his argument that it is not "game-over" for Google in AI: Google's only remaining play is to follow its own Android/Kubernetes playbook and fully embrace open models . Vinod Khosla (@vkhosla) amplified and endorsed Gurley's post, adding that Google DeepMind still has one of the deepest AI talent benches and will remain a player whether models are closed or open .
Keith Rabois quote-posted 'Not wrong' in endorsement of an X post by Dean W Ball (@deanwball): https://x.com/deanwball/status/2085239725061972327. Ball argues that no macro-technology birthed by the Bay Area tech industry has drawn more hatred from Bay Area tech elites than frontier AI: many elites dismissed the labs' 'AGI' hopes in 2020/21, concluded crypto would be the technology of the decade, and now — with their businesses and worldviews under threat — openly hope the US frontier labs are commoditized or immolated by America's principal geostrategic rival. Ball allows commodification could render the labs insolvent, but sees something 'Randian' in the elites' disdain for success and achievement .
Tim Ferriss (@tferriss) shared seven quotes that he says shaped his thinking and changed his behavior over the past year, which he revisits often :
- Arthur Koestler: “Language can become a screen which stands between the thinker and reality. This is the reason why true creativity often starts where language ends.”
- James Baldwin, Notes of a Native Son: “I imagine one of the reasons people cling to their hates so stubbornly is because they sense, once hate is gone, they will be forced to deal with pain.”
- Chuck Palahniuk: “People fall so in love with their pain, they can’t leave it behind. The same as the stories they tell. We trap ourselves.”
- Robert M. Pirsig: “The truth knocks on the door and you say, ‘Go away, I’m looking for the truth,’ and so it goes away. Puzzling.”
- Yousuf Karsh: “Character, like a photograph, develops in darkness.”
- Winston Churchill: “A man is about as big as the things that make him angry.”
- Rosamund and Benjamin Zander, The Art of Possibility: “I will have to remember ‘I am here today to cross the swamp, not to fight all the alligators.’”
Elon Musk endorsed a video post by @teslaownersSV featuring his quote: "Don't pursue money. Make useful products, and money will come as a consequence" , replying "Yes" . The post calls it a "simple philosophy" behind some of the world's most ambitious companies and links the clip: https://video.twimg.com/amplify_video/2085250299393167360/vid/avc1/1080x1080/xtl72xiCBbangoa-.mp4?tag=29.
David Perell recommended C.S. Lewis's essay "First and Second Things," saying Lewis argued you're more likely to get what you want when getting it isn't the most important thing in your life — if you put the highest thing first, you'll often get the second thing as well, but put the second thing first and you'll lose both . Perell offered this in response to a Rory McIlroy quote about the paradox of chasing success — that obsessing over winning and results is "playing the wrong game" and that outcomes are rarely achieved by focusing on outcomes themselves .
Elon Musk endorsed a video by @Rothmus on the Berlin Wall's history, drawing the lesson that walls are built to keep people in: "Easy to tell who the bad guys are by looking at who has to build a wall to keep people from escaping!" . The video, attached to Rothmus's post, recounts how East Germany closed the border in 1961 after ~2.5 million fled, gave shoot-to-kill orders, and that escapes only ever went one direction . Video link: https://video.twimg.com/amplify_video/2085394736718782464/vid/avc1/1920x1080/tUri0Qe4d45WxrdI.mp4?tag=29
Tobi Lütke endorsed the Factorio Learning Environment (v0.3.0) at https://jackhopkins.github.io/factorio-learning-environment/versions/0.3.0.html as "the correct and final eval for agi" .
On the August 2026 episode of 20VC with Nikesh Arora, no genuine content recommendations were made. The episode discussed Airtable's acquisition by Bending Spoons for $1.285 billion , AI cybersecurity (average patch time 55 days, detection 4 days) , and the "Situational Awareness" memo by Leo Ashenbrenner, but only praised its investment thesis, not as a learning resource . No books, articles, podcasts, or papers were recommended.
Marc Benioff shared a Fast Company article about the next ad market being built for machines, noting that AI agents have overtaken humans in reading TIME Magazine ads: "Spoiler: the bots just took the lead" . Link: https://www.fastcompany.com/91584067/next-ad-market-built-machines.
Factorio Learning Environment
Quickstart
# 1. Install FLE with uv
uv add factorio-learning-environment
# 2. Start a Factorio server cluster
fle cluster start
# 3. Run an evaluation (with API keys in .env)
fle eval --config configs/gym_run_config.jsonFLE 0.3.0 SDK: Release Highlights
The 0.3.0 release of the Factorio Learning Environment (FLE) marks a major step forward in our effort to test agents in long-term planning, reasoning and world modelling.
Since the original FLE paper (opens in new tab), where we demonstrated that frontier models struggle with adapting to changing environments, long-term goal setting, and dynamic recovery; and the 0.2.0 release, which introduced multi-agency, backtracking agents, and vision, we have worked hard over summer to bring v0.3.0, with numerous improvements.
Claude Code Plays Factorio
We bridged Claude Code into Factorio via FLE and are livestreaming it on Twitch to showcase the capabilities of frontier agents in long-horizon interactive environments.
Headless Environment Scaling
FLE no longer depends on the Factorio game client, enabling massively scalable experimentation. Our new headless game renderer provides realistic pixel observations to facilitate multimodal agent research.
OpenAI Gym Compatibility
We standardized the FLE evaluation environment to conform to the OpenAI gym interface, simplifying integration into existing research codebases for multi-turn interactive agent research. Examples from the observation and action spaces are shown below.
Developer and Research Tooling
The FLE CLI makes running experiments as simple as 1-line shell commands. We also open source our evaluation code with features like Weights and Biases logging, sweep resuming, and analysis tools.
Example: Build an automatic iron gear wheel factory
Illustrative example of an agent building an automatic iron gear wheel factory. The agent iteratively debugs and refines its factory design through programmatic interaction with the game environment.
Power Setup
The agent spawns into the lab-play world with an inventory of items and an objective to build an iron gear wheel factory.
Input State

State After Action

Action Program
# Step 1: Find water and set up power generation
water_pos = nearest(Resource.Water)
print(f"Found water at {water_pos}")
# Move to water and place offshore pump
move_to(water_pos)
offshore_pump = place_entity(Prototype.OffshorePump, position=water_pos)
print(f"Placed offshore pump at {offshore_pump.position}")
# Find buildable area for boiler (away from water)
boiler_box = BuildingBox(width=Prototype.Boiler.WIDTH + 4, height=Prototype.Boiler.HEIGHT + 4)
boiler_coords = nearest_buildable(Prototype.Boiler, boiler_box, offshore_pump.position)
move_to(boiler_coords.center)
boiler = place_entity(Prototype.Boiler, position=boiler_coords.center, direction=Direction.LEFT)
print(f"Placed boiler at {boiler.position}")
# Add coal to boiler
boiler = insert_item(Prototype.Coal, boiler, quantity=20)
# Find buildable area for steam engine
engine_box = BuildingBox(width=Prototype.SteamEngine.WIDTH + 4, height=Prototype.SteamEngine.HEIGHT + 4)
engine_coords = nearest_buildable(Prototype.SteamEngine, engine_box, boiler.position)
move_to(engine_coords.center)
steam_engine = place_entity(Prototype.SteamEngine, position=engine_coords.center, direction=Direction.LEFT)
print(f"Placed steam engine at {steam_engine.position}")
# Connect water flow
water_pipes = connect_entities(offshore_pump, boiler, Prototype.Pipe)
print(f"Connected offshore pump to boiler with pipes")
steam_pipes = connect_entities(boiler, steam_engine, Prototype.Pipe)
print(f"Connected boiler to steam engine with pipes")
# Wait and verify power generation
sleep(5)
steam_engine = get_entity(Prototype.SteamEngine, steam_engine.position)
assert steam_engine.energy > 0, "Steam engine not generating power"
print(f"Power generation verified! Steam engine producing {steam_engine.energy} energy")Iron Mining
The agent sets up electric mining drills on an iron ore patch and connects them to electric furnaces for automated iron plate production.
Input State

State After Action

Action Program
# Find iron ore and setup mining
iron_pos = nearest(Resource.IronOre)
print(f"Found iron ore at {iron_pos}")
steam_engine = get_entity(Prototype.SteamEngine, Position(x=2.5, y=8.5))
# Create mining area - need 2 electric mining drills for enough iron throughput
# Iron gear wheels need 2 iron plates each, and we need 16 per minute
# So we need 32 iron plates per minute
# Electric mining drill mines 30 ore per 60 seconds, so 2 drills = 60 ore/min
drill_area_box = BuildingBox(
width=2 * Prototype.ElectricMiningDrill.WIDTH + 2,
height=Prototype.ElectricMiningDrill.HEIGHT + Prototype.ElectricFurnace.HEIGHT + 4
)
drill_coords = nearest_buildable(Prototype.ElectricMiningDrill, drill_area_box, iron_pos)
print(f"Found buildable area for drills at {drill_coords.center}")
move_to(drill_coords.left_top)
# Place 2 electric mining drills
drills = []
for i in range(2):
drill_pos = Position(x=drill_coords.left_top.x + Prototype.ElectricMiningDrill.WIDTH * i, y=drill_coords.left_top.y)
drill = place_entity(Prototype.ElectricMiningDrill, position=drill_pos, direction=Direction.DOWN)
drills.append(drill)
# Place furnace below each drill
furnace = place_entity_next_to(Prototype.ElectricFurnace, drill.position, direction=Direction.DOWN)
# Connect to power
connect_entities(steam_engine, drill, Prototype.MediumElectricPole)
connect_entities(steam_engine, furnace, Prototype.MediumElectricPole)Assembling Machine
The agent places an assembler to create iron gear wheels in the vicinity of the mining setup and hooks it up to power while the mining operation collects iron plates in chests.
Input State

State After Action

Action Program
# Need to place assembling machines away from the mining area
# Iron gear wheels need 2 iron plates each, and we need 16 per minute
# Assembling machine 2 crafts 90 iron gear wheels per 60 seconds, so 1 machine is enough
# Find a position away from the mining setup (at least 20 tiles away)
assembly_position = Position(x=15.5, y=90.0) # 20+ tiles south of furnaces
# Define building area for assembler with space for inserters
assembly_box = BuildingBox(
width=Prototype.AssemblingMachine2.WIDTH + 2 * Prototype.Inserter.WIDTH + 4,
height=Prototype.AssemblingMachine2.HEIGHT + 4
)
assembly_coords = nearest_buildable(Prototype.AssemblingMachine2, assembly_box, assembly_position)
# Place assembling machine
move_to(assembly_coords.center)
assembler = place_entity(Prototype.AssemblingMachine2, position=assembly_coords.center, direction=Direction.DOWN)
print(f"Placed assembling machine at {assembler.position}")
# Set recipe to iron gear wheels
assembler = set_entity_recipe(assembler, Prototype.IronGearWheel)
print(f"Set recipe to iron gear wheels")
# Connect assembler to power
steam_engine = get_entity(Prototype.SteamEngine, Position(x=2.5, y=8.5))
poles = connect_entities(steam_engine, assembler, Prototype.MediumElectricPole)
print(f"Connected assembler to power network")
# Place input inserter on the right side
input_inserter = place_entity_next_to(Prototype.Inserter, assembler.position, direction=Direction.RIGHT, spacing=0)
input_inserter = rotate_entity(input_inserter, Direction.LEFT)
print(f"Placed input inserter at {input_inserter.position}")
# Place output inserter on the left side
output_inserter = place_entity_next_to(Prototype.Inserter, assembler.position, direction=Direction.LEFT, spacing=0)
print(f"Placed output inserter at {output_inserter.position}")
# Connect inserters to power
poles = connect_entities(steam_engine, input_inserter, Prototype.MediumElectricPole)
poles = connect_entities(steam_engine, output_inserter, Prototype.MediumElectricPole)
print(f"Connected inserters to power")Attempting to Connect Mining to Assembler
After trying to directly connect the mining output inserters to the assembler, the agent realizes that the chests are blocking the belts and removes them. This program below again produces an error because the agent did not also remove the chest being used as an input buffer at the assembler.
Input State

State After Action

Action Program
# Let me remove the iron plate storage chests and connect belts directly from furnace inserters
# First, pickup the chests that are blocking
chest1 = get_entity(Prototype.WoodenChest, Position(x=15.5, y=76.5))
chest2 = get_entity(Prototype.WoodenChest, Position(x=18.5, y=76.5))
# Extract iron plates from chests before removing them
move_to(chest1.position)
extracted1 = extract_item(Prototype.IronPlate, chest1, quantity=351)
print(f"Extracted {extracted1} iron plates from chest 1")
move_to(chest2.position)
extracted2 = extract_item(Prototype.IronPlate, chest2, quantity=351)
print(f"Extracted {extracted2} iron plates from chest 2")
# Pickup the chests
pickup_entity(chest1)
print(f"Removed chest at {chest1.position}")
pickup_entity(chest2)
print(f"Removed chest at {chest2.position}")
# Now connect the furnace output inserters to the assembler input inserter with belts
output_inserter1 = get_entity(Prototype.Inserter, Position(x=15.5, y=75.5))
output_inserter2 = get_entity(Prototype.Inserter, Position(x=18.5, y=75.5))
assembler_input_inserter = get_entity(Prototype.Inserter, Position(x=22.5, y=93.5))
# Connect first inserter to assembler input
belts1 = connect_entities(
output_inserter1,
assembler_input_inserter,
Prototype.TransportBelt
)
print(f"Connected first furnace output to assembler input: {belts1}")
# Connect second inserter to main belt
belts2 = connect_entities(
output_inserter2,
belts1,
Prototype.TransportBelt
)
print(f"Connected second furnace output to belt line: {belts2}")Final Success
The agent removes the problematic input buffer chest and connects the transport belt-based logistics network from miner to assembler, resulting in an automated iron gear wheel system which achieves the target throughput.
Input State

State After Action

Action Program
# The assembler input chest is also blocking. Let me remove it too and rethink the setup
# I need to place belts first, then the input chest on the belt line
# Remove the assembler input chest
assembler_input_chest = get_entity(Prototype.WoodenChest, Position(x=23.5, y=93.5))
move_to(assembler_input_chest.position)
pickup_entity(assembler_input_chest)
print(f"Removed input chest at {assembler_input_chest.position}")
# Now connect the furnace output inserters to the assembler input inserter with belts
output_inserter1 = get_entity(Prototype.Inserter, Position(x=15.5, y=75.5))
output_inserter2 = get_entity(Prototype.Inserter, Position(x=18.5, y=75.5))
assembler_input_inserter = get_entity(Prototype.Inserter, Position(x=22.5, y=93.5))
print(f"Connecting from inserter 1 at {output_inserter1.position} to assembler input at {assembler_input_inserter.position}")
# Connect first inserter to assembler input
belts1 = connect_entities(
output_inserter1,
assembler_input_inserter,
Prototype.TransportBelt
)
print(f"Connected first furnace output to assembler input: {belts1}")
# Connect second inserter to main belt
belts2 = connect_entities(
output_inserter2,
belts1,
Prototype.TransportBelt
)
print(f"Connected second furnace output to belt line: {belts2}")
# Refuel boiler
boiler = get_entity(Prototype.Boiler, Position(x=-4.0, y=3.5))
move_to(boiler.position)
boiler = insert_item(Prototype.Coal, boiler, quantity=30)
print(f"Refueled boiler")
print("Belt connections complete - waiting for iron flow")At each step, agents receive a structured Observation object containing comprehensive information about the game state and with fields as described below:
| Field | Description |
|---|---|
raw_text | Standard output and error messages from the last action program execution, annotated with source code line numbers |
entities | List of all entities in the game world with their properties (position, type, orientation, inventory contents, warnings, etc.) |
inventory | The agent’s personal inventory with item types and quantities |
research | Technology tree state with researched technologies, current research progress, and available technologies with prerequisites and costs |
game_info | Game timing information (tick count, elapsed time, game speed) |
flows | Production statistics tracking input/output rates, crafted items, harvested resources, and optional price lists for economic evaluation |
messages | Inter-agent communication messages for multi-agent coordination scenarios |
task_info | Task metadata including goal description, instructions, task identifier, and maximum trajectory length |
task_verification | Task-specific verification results indicating success/failure and metadata about progress toward objectives |
serialized_functions | Previously defined helper functions and abstractions stored in the agent’s namespace for reuse across episodes |
map_image | Base64-encoded PNG rendering of the factory layout for visual agents (optional) |
This rich observation space enables agents to maintain spatial awareness, track production metrics, debug errors, and plan multi-step automation strategies. The combination of structured data and human-readable text provides both programmatic access and interpretability. Agent implementations can utilize and format these fields as needed. The agent harness used for evaluation concatenates these fields into a formatted markdown string.
Benchmark: Lab-Play
Early signs of life for production automation
Lab-play is a highly constrained environment, where agents are given a fixed set of resources and a single target entity to maximize production throughput. This simple setting has only a tiny fraction of the complexity of open-play, where agents spawn in a procedurally generated map and must achieve a complex goal given no starting inventory and sparser resources. Agents write Python using the FLE API to interact with the game, and observe the standard outputs and error messages from their execution.
We replicate the methodology from the original FLE paper (opens in new tab) for the lab-play setting to evaluate the strongest models as of September 2025.
The standardized agent harness is minimal: it continuously appends environment interactions to a single conversational history, and when the token budget is nearing exhaustion, it invokes the agent to summarize the older history so it can continue reasoning while remaining aware of past interactions.
We do not evaluate agents with backtracking and/or reflection logic as we did in FLE 0.2.0, and instead we encourage the community to experiment with more advanced agent designs.
Setting
- Objective: to achieve production throughput targets of 16 per minute for solid items and 250 per minute for fluids.
- Prompt: documentation of the FLE API, Factorio recipes, and a guide describing common patterns.
- Inventory: a set of useful items for building functional factories.
- Max Steps: 64 steps with early stopping upon completion.
- Reasoning: default settings (
{"enabled": true}) for models that support reasoning.
Model Performance on Lab-Play Tasks (Pass@8 - Throughput Level 1)

Open source models have caught up to the SoTA performance observed in v0.2.0 (May 2025), with successes in electronic circuits, steel plate, sulfur and plastic automation. This is consistent with trends showing that the time for open source models to reach parity with closed source results is diminishing.
Discussion
The latest generation of frontier models continues to advance the state of the art in FLE with substantial improvement compared to FLE v0.2.0 For the first time, models are able to achieve successes in the harder half of tasks which can utilize over a dozen ingredient dependencies.
FLE lab-play clearly differentiates between the capabilities of the frontier models. Notably, the rank and performance gaps between the most advanced models (Claude > GPT > Gemini > Grok) is most similar to GDPVal (opens in new tab), a novel benchmark recently released to measure progress in automating economically valuable tasks. This is in contrast to many other static exam-like benchmarks including Humanity’s Last Exam, AIME 25, GPQA and MMMU where weaker models in FLE achieve higher performance.
While successful agents achieve their throughput goals, many rely on semi-manual strategies rather than building robust automation for more complex tasks. This manifests in agents shuttling resources manually and using storage chests as resource buffers, instead of constructing fully automated logistics chains. Although this does achieve progress toward the target, it creates a local optimum where agents shortcut the more difficult but necessary step of full automation. Throughput is challenging to measure consistently due to these buffering effects. Agents can store items in intermediate buffers (like chests or belts) which temporarily satisfy throughput checks without true sustained production. We mitigate this by enforcing a holdout period during eval, in which an agent must leave their factory alone for 60 seconds before we test whether quotas are met. Higher throughput targets would make it infeasible to pass with manual logistics, forcing agents to build proper automation.
Although the FLE harness provides a Python namespace for defining helper functions and abstractions, agents rarely leverage this capability. Instead, they rely on primitive, out-of-the-box tools, which limits their ability to scale solutions to more complex tasks. We expect stronger coding models to define their own abstractions commonly in future. Currently, only Gemini 2.5 Pro takes this approach. Agents also struggle to maintain consistent mental models of the factory layout. Misplacement of entities often cascades into larger failures, since the agent is unable to recover efficiently or reorganize the environment once errors occur (see below).
Frontier models display different capacities for error recovery

Above: Mean error rate across all trajectories for each model at each step number, revealing how error rates evolve throughout the 64-step trajectories. Grok 4 often falls into degenerate debug loops, whereas GPT-5 recovers gracefully. The pattern suggests that error accumulation and recovery remain challenging across models, with most exhibiting elevated error rates in the middle portions of trajectories when factory complexity increases.
Error Analysis
Common failure patterns can be grouped by type:
- Syntactic Errors: Invalid Python code, syntax mistakes, or other execution errors that prevent actions from running at all. These errors are significant failures as the agents did not follow the high-level instructions which are expected of coding agents.
- Semantic Errors: Misuse of FLE commands or tool arguments (e.g., incorrect parameters, misunderstanding documentation), leading to errors in the execution of the action program. These errors imply difficulty in correctly using the API specification given in the system prompt, and are most commonly expressed through exceptions such as TypeError, AttributeError, NameError, etc.
- Pragmatic Errors: Incorrect reasoning about the current game state, such as attempting to insert items that are not present in the inventory. These errors are the most common category of failures as the game state is dynamic and challenging to model implicitly.
- Planning and Control Errors: Even when primitives are known, agents fail to chain actions coherently, resulting in inefficient or incomplete trajectories. Note: This category cannot be reliably quantified through automated trajectory analysis, as it requires evaluating higher-level strategic coherence rather than individual error types.
Failure modes vary across frontier models

Above: Relative error frequencies across all evaluation tasks for proprietary frontier models.
Mean Error Rates: Claude Opus 4.1: 22.99% | GPT-5: 25.05% | Gemini 2.5 Pro: 27.29% | Grok 4: 40.89%
The distribution of errors reveals notable model-specific patterns. Claude Opus 4.1 stands out with zero syntactic errors and almost entirely pragmatic errors (97.7%), indicating strong code generation but difficulties maintaining accurate mental models of game state. All other models - Gemini 2.5 Pro, Grok 4, and GPT-5 - exhibit API misunderstandings at noticeable rates (12-17%), suggesting challenges with correctly using the FLE API documentation. Additionally, GPT-5 and Grok 4 show surprisingly high rates of syntactic errors (21% and 17% respectively), failing to generate valid Python code more frequently than we might expect from frontier models with SoTA coding benchmark performance.
Claude Code plays Factorio
In v0.2.0 we released an MCP server to facilitate external agent interaction with FLE. We develop this further in v0.3.0, and include adapters to Claude Code. Check out our stream!
Future Work
In human terms, frontier models are shockingly bad at playing Factorio. They find it difficult to represent and model dynamic environments, and rarely develop formal abstractions they can use as tools in future. Despite this, we observed a steady improvement in the capabilities of frontier models in lab-play during 2025.
Starter
Scaling
Megabase
[10 10 SPM Base Reddit Showcase
Frontier models in lab-play
](https://www.reddit.com/r/factorio/comments/kmo1m0/10_spm_base/#lightbox)[30 (opens in new tab) Winning the game in 1h 18m
launch a 🚀
](https://www.youtube.com/watch?v=79T4Gp0RlfY)[100 (opens in new tab) 100 SPM Base YouTube Showcase](https://www.youtube.com/watch?v=11IFvIMz2EM (opens in new tab)) 300 300 SPM Factory Tour (opens in new tab) 1K 1K SPM Megabase Tour (opens in new tab) 3K 3K SPM Megabase Showcase (opens in new tab) 10K 10K SPM Megabase YouTube Tour (opens in new tab)
Production Scale Milestones (Science Production Per Minute)
It is our expectation that Factorio will resist saturation for the foreseeable future, while providing visibility into general model capabilities such as long-horizon planning, domain adaptation, world modeling and spatial reasoning.
FLE v0.3.0 establishes lab-play as our first formal benchmark, but this represents only the beginning of our planned research agenda.
Immediate
- Human baseline establishment: Systematically measuring human performance across task difficulties to better calibrate agent capabilities.
- Addressing reward hacking: Agents currently exploit manual crafting for complex items rather than building proper automation, however we expect higher throughput targets will force true factory automation.
- METR-style task scaling: Developing scaling charts that systematically map task difficulty to required capabilities.
Horizon
Factorio is an exceptional platform for evaluating agents, due to its emphasis on system engineering and unbounded sandbox nature. FLE presents numerous research opportunities for evaluating agents with valuable system-level problem-solving abilities (our perspective is detailed in this position paper (opens in new tab)) - including:
- Scaling to Open-Play and Megabases. Lab-play tasks use constrained starting inventories and single production targets. Open-play requires surviving from nothing on procedurally generated maps with complex, multi-stage objectives. The difficulty spectrum extends orders of magnitude: from manual crafting to megabases with thousands of interconnected machines.
- Real-time Performance Under Latency Constraints. Current evaluations allow agents unlimited thinking time between actions. We’re developing benchmarks where Factorio runs continuously, forcing agents to balance solution quality against response latency. This tests whether agents can maintain robust performance in streaming environments rather than idealized turn-based settings.
- Multi-Agent Coordination. Extending beyond single-agent scenarios to multi-player worlds where agents must cooperate, compete, and potentially establish emergent market dynamics. Research questions include: Can agents learn division of labor? Negotiate resource allocation? Develop comparative advantage in shared production systems?
- Out-of-Distribution Environments via Mods. Factorio’s extensive modding ecosystem enables testing generalization to entirely new tech trees and game mechanics. This probes whether agents can re-learn causal structures when fundamental rules shift, rather than overfitting to fixed dependencies that they may have learned during pretraining.
- Native Computer-Use Interface. Moving beyond our agent-optimized Python API to evaluate agents using the same keyboard/mouse/vision interface that humans use. This tests whether computer-use agents can match API-driven performance when operating through realistic human interaction modalities
- Adversarial Dynamics and Robustness. Introducing hostile aliens and non-deterministic environmental challenges from the base game into FLE. This evaluates adaptive control strategies and resilience when faced with disturbances outside training distributions
Getting Involved
The path from current performance to superhuman Factorio gameplay is long, but the skills developed along this path – logistics optimization, system debugging, constraint satisfaction under uncertainty – transfer directly to real-world world challenges.
This isn’t another benchmark to saturate. It’s an environment whose challenges scales with progress, offering no ceiling as agent capabilities mature. FLE is open source in code and mission. We need:
- Researchers exploring novel architectures for long-horizon planning and spatial reasoning
- Engineers optimizing infrastructure for large-scale evaluation and training
- Modders designing new challenge domains
If you are interested in joining our team, you can find us on Discord (opens in new tab). We look forward to seeing you!
FLE (Factorio Learning Environment) v0.3.0 is an open-source evaluation environment for testing AI agents in long-term planning, reasoning and world modelling inside Factorio . Its formal benchmark in this release is lab-play: a constrained setting where an agent is given fixed resources and a single target entity to maximize production throughput, writes Python programs against the FLE API, and observes stdout/error output from each program . It replicates the original FLE paper's methodology to evaluate the strongest models as of September 2025 . The standardized harness appends interactions to a single conversation history and summarizes old history near token exhaustion; it deliberately does not use backtracking/reflection agent designs .
What it measures
- Objective: production throughput targets of 16/min for solid items and 250/min for fluids, within 64 steps with early stopping; results reported as Pass@8 at Throughput Level 1 .
-
Verification uses task-specific success/failure flags (
task_verification) and production-flow statistics (flows) . To counter buffering, the agent must leave the factory untouched for 60 seconds before quotas are tested . - Caveat: agents can store items in chests/belts and pass checks without sustained production, so throughput is hard to measure consistently; the authors note higher targets would make manual logistics infeasible and force proper automation .
Reported results and limitations
- Ranking across frontier models is Claude > GPT > Gemini > Grok, a pattern the authors say is closest to GDPVal and opposite to static exam benchmarks (Humanity's Last Exam, AIME 25, GPQA, MMMU) where weaker FLE models do better .
- Mean error rates: Claude Opus 4.1 22.99%, GPT-5 25.05%, Gemini 2.5 Pro 27.29%, Grok 4 40.89% . Claude had zero syntactic errors and almost all pragmatic errors (97.7%); GPT-5 and Grok 4 had high syntactic-error rates (21% and 17%); Gemini 2.5 Pro, GPT-5 and Grok 4 showed API-misunderstanding rates of 12–17% .
- Error-recovery analysis: Grok 4 often falls into degenerate debug loops, while GPT-5 recovers gracefully; error accumulation/recovery remains hard across models .
- Open-source models reached the v0.2.0 SoTA on electronic circuits, steel plate, sulfur and plastic, and for the first time models succeed on harder tasks with over a dozen ingredient dependencies .
- Limitations: many successes are semi-manual (manual shuttling, chests as buffers) rather than full automation; agents rarely use the helper-function namespace (only Gemini 2.5 Pro does); misplacement of entities cascades into unrecoverable failures .
Operational details useful for a recommendation
-
Install with
uv add factorio-learning-environment; start a server cluster withfle cluster start; run an eval withfle eval --config configs/gym_run_config.json. - Release features: no dependency on the Factorio game client (headless pixel renderer for multimodal research), OpenAI Gym-compatible interface, open-source evaluation code with Weights & Biases logging, sweep resuming, analysis tools .
-
Agents receive a structured Observation object:
raw_text,entities,inventory,research,game_info,flows,messages,task_info,task_verification,serialized_functions, and optionalmap_image. - Claude Code integration via MCP adapters is included (livestreamed), demonstrating external-agent use .
- The page explicitly states frontier models are still 'shockingly bad' at Factorio and sees the environment as resisting saturation; planned work includes human baselines, METR-style task scaling, open-play/megabase scaling, latency-constrained real-time evaluation, multi-agent coordination, mod-based out-of-distribution tests, a native keyboard/mouse/vision interface and adversarial dynamics .
