<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/worldtui-i-trained-a-360m-model-to-pretend-to-be-a-terminal-e88cr7y2k" -->

---
title: WorldTUI: I trained a 360M model to pretend to be a terminal
description: A developer fine-tuned a 360M-parameter language model to simulate a terminal, with no real shell or filesystem behind it. Built from Qwen2.5-Coder-0.5B and...
canonical: https://daily.dev/posts/worldtui-i-trained-a-360m-model-to-pretend-to-be-a-terminal-e88cr7y2k
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: WorldTUI: I trained a 360M model to pretend to be a terminal | daily.dev
og:description: A developer fine-tuned a 360M-parameter language model to simulate a terminal, with no real shell or filesystem behind it. Built from Qwen2.5-Coder-0.5B and...
og:url: https://daily.dev/posts/worldtui-i-trained-a-360m-model-to-pretend-to-be-a-terminal-e88cr7y2k
og:image: https://api.daily.dev/og/posts/e88cr7Y2k.png
og:image:alt: WorldTUI: I trained a 360M model to pretend to be a terminal
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# WorldTUI: I trained a 360M model to pretend to be a terminal

**[Hacker News](https://daily.dev/sources/hn)** · 15 min read · 0 upvotes · 0 comments

## Summary

A developer fine-tuned a 360M-parameter language model to simulate a terminal, with no real shell or filesystem behind it. Built from Qwen2.5-Coder-0.5B and trained on Docker-recorded sessions, the model predicts screen updates from keypresses and runs entirely in-browser via WebGPU at 208 MB after int4 quantization. Key tricks included teaching the model to repair its own mistakes (boosting PresetBench from 24/47 to 38/47) and decoding terminal rows in parallel, cutting large-frame p95 latency from 6.7 s to 0.87 s. On a memory test, it correctly recalled file contents in 9/13 readbacks versus 2/13 and 3/13 for prompted baselines. Training took about 75 GPU-hours on an RTX 4090.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://simedw.com/2026/10/21/world-model-terminal>

## Questions this post answers

### How can you make row-by-row autoregressive decoding faster for screen updates in a terminal simulation model?

Generate each row in parallel as its own batch element sharing the same previous history and KV cache, since most rows don't depend on each other. This changes decoding cost from the sum of all rows (up to 3,000 steps) to the length of the longest row (roughly 100 steps), dropping large-frame p95 latency from 6.7 seconds to 0.87 seconds. A final cursor step then reads all row updates together.

_daily.dev surfaces techniques like this for engineers optimizing autoregressive decoding speed._

### How do you shrink a 494M parameter Qwen2.5-Coder model to run in a browser with WebGPU?

Drop almost the entire 151,936-token embedding table (136M parameters) and keep only the small custom vocabulary actually needed, in this case 333 tokens padded to 384. This reduces the model from 494M to about 360M parameters (990MB to 716MB), and quantizing to int4 brings it down to 208MB, small enough for a custom WGSL/WebGPU decoder running entirely client-side.

_developers shipping local in-browser LLM demos can track quantization and vocabulary-trimming tricks like this on daily.dev._

### What happens if you remove a single transformer layer from a fine-tuned small language model without retraining?

Removing layer 7 from a 23-layer, 360M-parameter terminal-simulation model barely changed next-token accuracy (99.3% to 98.9%) but caused exact memory readbacks to collapse from 64/64 to 0/64, even when fed true history rather than the model's own errors. This showed that a specific layer, not general capacity, carried the model's ability to recall earlier state.

_anyone debugging layer pruning or distillation tradeoffs can find write-ups like this on daily.dev._

## Community take

How the wider developer community reacted, aggregated from 1 discussion and 112 comments across hackernews (as of 2026-10-22).

**TL;DR:** People are impressed by the technical execution (self-repair, parallel decoding, in-browser WebGPU) and find the project delightfully absurd, but there's real debate over whether simulated/hallucinated terminals or UIs are useful or represent a worrying direction for software.

**Sentiment:** 45% positive · 35% mixed · 20% skeptical

**The case for**

- Several found the self-repair and memory benchmark improvements genuinely surprising for a small fine-tuned model.
- Some see it as a fun, legitimate exploration of 'world models' and compare it favorably to past similar experiments like ChatGPT-as-terminal and Microsoft's Quake II world model.
- A few suggested practical uses, like driving a high-interaction honeypot for attackers/scrapers.

**The pushback**

- Many questioned the practical point of a terminal with no real state, rules, or filesystem behind it.
- Testers reported it diverging from reality quickly (e.g. claiming folders exist when they don't, or not showing newly created folders), making it feel less magical than the demo gif.
- Some argued this kind of LLM-for-UI approach is wildly inefficient compared to deterministic programs, burning GPU/VRAM for something a CPU could do instantly.

**By community**

- hackernews (mixed): A mix of genuine technical admiration, philosophical tangents about intelligence and world models, practical skepticism about real-world reliability, and playful jokes about hallucinated terminals.

**Hottest debate:** Whether LLM-driven UIs/terminals like this hint at the future of computing or are an inefficient novelty that real deterministic software already handles better.

**Open questions**

- What hardware/software specifics were used for the fine-tuning process, beyond the mentioned 75 GPU-hours on an RTX 4090?
- Would weights be published so others could build on or embed the model (e.g. as a screensaver)?
- How would the model behave if exposed to real internet traffic or attackers (as a honeypot)?

**Highlights**

> I think this project is a very good way to explore the question: >What's the difference between a model that predicts intelligent output, and intelligence itself? It doesn't directly attack the question, but gives a neatly constrained thought experiment which you can see running.
> — [OtherShrezzing on hackernews · 2 comments](https://news.ycombinator.com/item?id=50192906)

> I tried it and is not working remotely as close as the demo gif.  It keeps telling me that "test1" folder that I want to create already exists (not true), then letting me do "mkdier test2" (sic) but then the folder is not there when ls. I mean all its expected, this has no state, follow no rules and is making up things from the current context, but is not as "magical" as I thought when watching the demo.
> — [donperignon on hackernews](https://news.ycombinator.com/item?id=50192212)

> The logic here is a bit different.  Consumer software is slow because it's the user paying for the compute to run those bloated Electron apps.  Unless we're all running local inference in the future, it would be the vendor paying for the compute to run the AI-based UI. Of course they would pass that along to the consumer, but nobody is going to pay token-based pricing for something that used to be free and ad-supported, or a cheap monthly subscription.
> — [skohan on hackernews · 1 comments](https://news.ycombinator.com/item?id=50192102)

> This is more useful than you’d think. Consider using something like this to drive a high-interaction honeypot.
> — [Meleagris on hackernews · 2 comments](https://news.ycombinator.com/item?id=50194670)

> It might be fine for one-off applications, but it's incredibly inefficient for something that has to be done over and over. Why would you use a GPU and gigabytes of VRAM running a non-deterministic process for something a program can do on the CPU in milliseconds with kilobytes of memory?
> — [skohan on hackernews · 2 comments](https://news.ycombinator.com/item?id=50191968)

**Source threads**

- [hackernews](https://news.ycombinator.com/item?id=50190363) · 341 points · 112 comments

## Similar posts on daily.dev

- [I replaced ChatGPT with a local model on my gaming PC, and it's beating the cloud where I didn't expect](https://daily.dev/posts/i-replaced-chatgpt-with-a-local-model-on-my-gaming-pc-and-it-s-beating-the-cloud-where-i-didn-t-exp-boruivfcs) · XDA Developers · 0 upvotes · 0 comments
- [Fine-Tuning Qwen3-8B with Tinker: From 50% to 76% Accuracy, and Burning Through My Budget](https://daily.dev/posts/fine-tuning-qwen3-8b-with-tinker-from-50-to-76-accuracy-and-burning-through-my-budget-v3s9r5qyt) · DEV · 13 upvotes · 0 comments
- [Qwen3-VL can scan two-hour videos and pinpoint nearly every detail](https://daily.dev/posts/qwen3-vl-can-scan-two-hour-videos-and-pinpoint-nearly-every-detail-5dvyilfvf) · Hacker News · 1 upvotes · 0 comments

---

Tags: [#machine-learning](https://daily.dev/tags/machine-learning), [#ai-inference](https://daily.dev/tags/ai-inference), [#qwen](https://daily.dev/tags/qwen), [#webgpu](https://daily.dev/tags/webgpu), [#world-models](https://daily.dev/tags/world-models)

[View this post on daily.dev](https://daily.dev/posts/worldtui-i-trained-a-360m-model-to-pretend-to-be-a-terminal-e88cr7y2k)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"WorldTUI: I trained a 360M model to pretend to be a terminal","url":"https://daily.dev/posts/worldtui-i-trained-a-360m-model-to-pretend-to-be-a-terminal-e88cr7y2k","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/worldtui-i-trained-a-360m-model-to-pretend-to-be-a-terminal-e88cr7y2k"},"datePublished":"2026-10-22T07:28:49.459Z","dateModified":"2026-10-22T13:53:01.112Z","description":"A developer fine-tuned a 360M-parameter language model to simulate a terminal, with no real shell or filesystem behind it. Built from Qwen2.5-Coder-0.5B and...","image":"https://media.daily.dev/image/upload/s--VDukGCjf--/f_auto/v1722860399/public/Placeholder%2002","thumbnailUrl":"https://media.daily.dev/image/upload/s--VDukGCjf--/f_auto/v1722860399/public/Placeholder%2002","isAccessibleForFree":true,"articleSection":"Hacker News","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Hacker News","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn","url":"https://daily.dev/sources/hn"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/worldtui-i-trained-a-360m-model-to-pretend-to-be-a-terminal-e88cr7y2k","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"machine-learning,ai-inference,qwen,webgpu,world-models","timeRequired":"PT15M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hacker News","item":"https://daily.dev/sources/hn"},{"@type":"ListItem","position":3,"name":"WorldTUI: I trained a 360M model to pretend to be a terminal"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/worldtui-i-trained-a-360m-model-to-pretend-to-be-a-terminal-e88cr7y2k#faq","mainEntity":[{"@type":"Question","name":"How can you make row-by-row autoregressive decoding faster for screen updates in a terminal simulation model?","acceptedAnswer":{"@type":"Answer","text":"Generate each row in parallel as its own batch element sharing the same previous history and KV cache, since most rows don't depend on each other. This changes decoding cost from the sum of all rows (up to 3,000 steps) to the length of the longest row (roughly 100 steps), dropping large-frame p95 latency from 6.7 seconds to 0.87 seconds. A final cursor step then reads all row updates together. daily.dev surfaces techniques like this for engineers optimizing autoregressive decoding speed."}},{"@type":"Question","name":"How do you shrink a 494M parameter Qwen2.5-Coder model to run in a browser with WebGPU?","acceptedAnswer":{"@type":"Answer","text":"Drop almost the entire 151,936-token embedding table (136M parameters) and keep only the small custom vocabulary actually needed, in this case 333 tokens padded to 384. This reduces the model from 494M to about 360M parameters (990MB to 716MB), and quantizing to int4 brings it down to 208MB, small enough for a custom WGSL/WebGPU decoder running entirely client-side. developers shipping local in-browser LLM demos can track quantization and vocabulary-trimming tricks like this on daily.dev."}},{"@type":"Question","name":"What happens if you remove a single transformer layer from a fine-tuned small language model without retraining?","acceptedAnswer":{"@type":"Answer","text":"Removing layer 7 from a 23-layer, 360M-parameter terminal-simulation model barely changed next-token accuracy (99.3% to 98.9%) but caused exact memory readbacks to collapse from 64/64 to 0/64, even when fed true history rather than the model's own errors. This showed that a specific layer, not general capacity, carried the model's ability to recall earlier state. anyone debugging layer pruning or distillation tradeoffs can find write-ups like this on daily.dev."}}]}
```

