When I was a kid in the 80s I noticed a lot of hackers of that era that typed like that. I thought it was strange at the time, but not at all uncommon
HN user
ianbicking
Hi, I'm Ian Bicking. I'm a programmer. I was at Mozilla a long time, now I'm at Meta Reality Labs.
My homepage: http://ianbicking.org
Blog: http://ianbicking.org/blog/
GitHub: https://github.com/ianb/
Projects: http://ianbicking.org/projects.html
Email: ianbicking at the google mail site
I've been doing something similar to this in a personal claude code frontend, though not particularly "magical".
I'm mostly using my system to make comments on long AI-generated documents (especially design documents). I find it works well to have the AI generate something, and then I read through it, making comments along the way.
You can get pretty far just repeating the things you see... "I'm reading [heading] and [comments]". But I do find some use in selecting content and saying "I don't agree with this" or whatever else.
The result is just an augmented message. It looks like:
<transcript>
Let's see what we've got here.
<selection doc="proposal.md" location="paragraph 3">
The system already...
</selection>
No, I don't like how this is approaching the problem, ...
</transcript>
Then I just send this as a user message. Claude Code (and I'm guessing any of the agentic systems) picks up on the markup very easily. It also helps to label it as a transcript, as it can understand there may be errors, and things like spelling and punctuation are inferred not deliberate. (Some additional instruction is necessary to help it understand, for example, that it should look for homophones that might make more sense in context.)It makes reviewing feel pretty relaxed and natural. I've played around with similar note taking systems, which I think could be great for studying in school, but haven't had the focus on that particular problem to take it very far.
But I think the best thing really is giving the agent a richer understanding of what the user is experiencing and doing and just creating a rich representation of that. The keywords can be useful, but almost only as checkpoints: a keyword can identify the moment to take the transcript and package it up and deliver it.
One difference perhaps in design motivation: I have really embraced long latency interactions. I use ChatGPT with extended thinking by default, and just suck it up when the answer didn't really require thinking. I deliver 10 points of feedback at once instead of little by little. (Often halfway through I explicitly contradict myself, because I'm thinking out loud and my ideas are developing.) I just don't stress out about latency or feedback, and so low-latency but lower-intelligence interactions don't do it for me (such as ChatGPT's advanced voice mode, or probably Thinking Machine's work). I think this focus is in part a value statement: I'm trying to do higher quality work, not faster work.
In a sense they do use their own language; they program in tokenized source, not ASCII source. And maybe that's just a form of syntactic sugar, like replacing >= with ≥ but x100. Or... maybe it's more than that? The tokenization and the models coevolve, from my understanding.
If we do enough passes of synthetic or goal-based training of source code generation, where the models are trained to successfully implement things instead of imitating success, then we may see new programming paradigms emerge that were not present in any training data. The "new language" would probably not be a programming language (because we train on generating source FOR a language, not giving it the freedom to generate languages), but could be new patterns within languages.
The knowledge machine question is fascinating ("Imagine you had access to a machine embodying all the collective knowledge of your ancestors. What would you ask it?") – it truly does not know about computers, has no concept of its own substrate. But a knowledge machine is still comprehensible to it.
It makes me think of the Book Of Ember, the possibility of chopping things out very deliberately. Maybe creating something that could wonder at its own existence, discovering well beyond what it could know. And then of course forgetting it immediately, which is also a well-worn trope in speculative fiction.
I haven't really kept up with what Midjourney has been doing the past year or two. While I liked the stylistic aspects of Midjourney, being able to use image examples to maintain stylistic consistency and character consistency is SO useful for creating any meaningful output. Have they done anything in that respect?
That is, it's nice to make a pretty stand-alone image, but without tools to maintain consistency and place them in context you can't make a project that is more than just one image, or one video, or a scattered and disconnected sequence of pieces.
I've been working on a LLM fiction writing workflow and associated tools. It's built on agentic coding tools with lots of structure, guidance, prompting, and critique. Almost all of the flow is on the filesystem and using a custom command-line tool, making it accessible to agentic programming tools. (No MCP though; it seems superfluous?)
I was fairly neutral about the tool for a while, but lately I've been going all-in on Claude Code, using things like rules and subagents.
It's also built to "rerender" the story, for instance rewriting it (slightly) for voice, translate it, or target different reading levels or background. I'm interested in translating stories for language learners in addition to simply translating into other native languages.
I'm also hoping to create some stories that stretch the medium. Perhaps CYOA (though I'm struggling with understanding what a CYOA is good at), though also other multi-perspective stories with reader autonomy in how to read through the story. LLMs make it easier to overproduce content, so you can give the reader flexibility without feeling regret that much of the content will be skipped, or rewrite passages for readers who jump into stories part way through.
Producing quality content is hard, and frankly kind of expensive, which is why I'm focused on finished products instead of interactive experiences. Though I do look forward to some future opportunity to take these rich characters that are grounded in full stories and find other things to do with them.
I've come around to feeling that if I'm going to make an experimental development tool, I need to make it in service of building something specific. Maybe something playful... if I'm building something "important" then it can put unwanted conservative pressure on the tool. But something, and if I do that then at least I have something interesting regardless of the fate of the development tool. Because yeah, there's a good chance no one else is going to be excited about the tool, so I have to build for my own sense of excitement, be my own most enthusiastic user.
It does however work just fine if you ask it for grammar help or whatever, then apply those edits. And for pretty much the rest of the content too: if you have the AI generate feedback, ideas, edits, etc., and then apply them yourself to the text, the result avoids these pitfalls and the author is doing the work that the reader expects and deserves.
I think there might be a pattern across education with a strong ideology (Montessori, Waldorf, Classical education, etc) that they aren't very good at recognizing when the ideology is failing a kid. The relatively weak and mushy educational philosophy of a normal public school is also a somewhat reasonable way to run a school that has to take kids wherever they are at and wherever they came from.
I have wanted to do experiments with a receipt printer hooked up to a Raspberry Pi, with some simple controls... but every time I look up the cost of the printer I balk. It's probably not fair, but I guess in my head it feels like they should be cheaper. Or at least the cost then makes me question how much time I'm really ready to put into stuff like debugging the printer drivers and putting together a case, etc etc.
The thing I actually want to play with is probably some kind of board game that incorporates the printer... ideally with bar/QR codes so the computer can print out money, IOUs, instructions, etc., and have this computer mediation that still gives people physical items to manipulate.
I think it can be a false comfort to think of LLMs being trained to the center of the bell curve. I think it's closer to true that there's no real "average" (just like there isn't an "average" human) because there's just too many dimensions.
But what LLMs do, in the absence of better instructions, is expect that the user WANTS the most middling innocuous output. Which is very reasonable! It's not a lack of capability; it's a strong capability to fill in the gaps in its instructions.
The person who has a good intuition for design (visual, narrative, conversational) but can't articulate that as instructions will find themselves stuck. And unsurprisingly this is common, because having that vision and being able to communicate that vision to an LLM is not a well practiced skill. Instructing an LLM is a little like instructing a person... but only a little. You have to learn it. And I don't think as LLMs get better that this will magically fix itself, because it's not exactly an error, there's no "right" answer.
Which is to say: I think applying design to one's work with AI is possible, important, and seldom done.
I remembered hearing a podcast about a startup robotics company doing the same thing; a little search and they actually have a comparison page between their product and HP's:
https://www.dustyrobotics.com/compare/fieldprinter-vs-sitepr...
I think a big part of it is not so much that they aren't capable of being a dungeon master, but they are constitutionally unfit due to their agreeability.
The biggest improvement there is to treat the game engine as the "user", and the player (and their input) is merely one among many things the game engine is managing. But then you also need a game engine that manages lots of the state programmatically, with formal transitions of that state. The LLM can manage the state transitions, but the actual state needs to be more formal.
I think the player freedom and simulation elements of a text adventure are mostly an illusion. I don't think a typical text adventure has more degrees of freedom than a point-and-click adventure.
Doing experiments with LLMs and text adventures was revealing for me in this sense. An obvious thing to consider is using the LLM to parse the text... but if you try this you'll quickly realize that the parsers are mostly limited by what the parser _can parse into_. That is, the representation of a command is so limited that there's not a rich set of alternate inputs that would map to any valid command.
Before LLMs this also struck me in the voice assistant / NLP space, especially "natural language understanding" (NLU). The parsing wasn't great, but the thing-you-parse-into was also incredibly limited. Like you could parse "set an alarm for 8:30" into some template structure. But "no, change that to 8" didn't have a template structure, didn't have any structured representation.
What we've discovered is that the representation that actually fits these concepts is the chat log, or the somewhat magical discernment process of the LLM.
Unlike the point-and-click adventure, the text adventure has poor discoverability. This creates a fog where the player can imagine all kinds of possibilities. But the actual choice points are on the same order of magnitude as the hotspots, verbs, and inventory that define the choice points of a point-and-click adventure.
What I think the text adventure DOES accomplish (and the point-and-click adventure also accomplishes) is giving the player freedom of focus. You can look anywhere. You are usually in some open series of spaces where you can explore at leisure. The text adventure in particular offers a kind of tesseract opportunity, like in the flashback sequence shown in the article.
(Writing this, I am now thinking about a kind of LLM-driven game that discards all pretense of action or puzzles, but instead the player is a ghost free to view their environment, free even to view the internal thoughts of characters, but unable to change anything.)
Oh, I got confused at first, I think it's writing the story out in Chinese on purpose as a kind of hidden state...? Clever approach. I can't tell what the background color shifts represent, and they are a bit abrupt, but I like the concept.
It's possible to have a more structured substrate to an LLM text adventure, though also a lot of work... I wrote up my own thoughts on an experiment here: https://ianbicking.org/blog/2025/07/intra-llm-text-adventure
The default with LLMs are more collaborative storytelling than what we'd normally call a "game", but I think there's some new game genre waiting to be discovered.
I did give it a try, but no luck; qb64 seems to only run the code by compiling it via C++, and that failed on my system. (And I don't have the determination to try to find out why.)
Anyone got it running on a Mac? It says to use DOSBox, but that doesn't work for me. (Sure would be nice if this could run on the web...)
Text adventures and AI-driven interactions are surprisingly different I've found... https://ianbicking.org/blog/2025/07/intra-llm-text-adventure – still not sure what the right fusion might be.
I'm doing some experiments in LLM (historical) fiction writing. I feel like we can get pretty good writing out of an LLM (especially Sonnet) with enough prompting, reasoning, and guided thinking. Still with a human as producer and guidance.
I'm trying to use this to create stories that would be somewhat unreasonable to write otherwise. Branching stories (i.e., CYOA), multiperspective stories, some multimedia. I'm still trying to figure out the narrative structures that might work well.
LLMs can overproduce and write in different directions than is reasonable for a regular author. Though even then I'm finding branching hard to handle.
The big challenges are rhythm, pacing, following an arc. Those have been hard for LLMs all along.
Alan Kay described [1] what he considers the first object oriented system, made in the 60s by an unknown programmer. It was a tape-based storage system, where the "format" of the tap was a set of routines to read, write, etc. at a known offsets on the tape.
So, prior art! :)
[1] https://www.cs.tufts.edu/comp/150FP/archive/alan-kay/smallta... (page 4)
This looks like RAG...? That's fine, RAG is a very broad approach and there's lots to be done with it. But it's not distinct from RAG.
Searching by embedding is just a way to construct queries, like ILIKE or tsvector. It works pretty nicely, but it's not distinct from SQL given pg_vector/etc.
The more distinctive feature here seems to be some kind of proxy (or monkeypatching?) – is it rewriting prompts on the way out to add memories to the prompt, and creating memories from the incoming responses? That's clever (but I'd never want to deploy that).
From another comment it seems like you are doing an LLM-driven query phase. That's a valid approach in RAG. Maybe these all work together well, but SQL seems like an aside. And it's already how lots of normal RAG or memory systems are built, it doesn't seem particularly unique...?
Re: RpcPromise, I'm pretty sure all logical operations will result in unexpected results. TypeScript isn't going to complain about using RpcPromise as a boolean.
Maybe the best solution is just an eslint plugin. Like this plugin basically warns for the same thing on another type: https://github.com/bensaufley/eslint-plugin-preact-signals
Overloading .map() does feel a bit too clever here, as it has this major difference from Array.map. I'd rather see it as .mapRemote() or something that immediately sticks out.
I can imagine a RpcPromise.filterRemote(func: (p: RPCPromise) => RPCPromise) that only allows filtering on the truthiness of properties; in that case the types really would save someone from confusion.
I guess if the output type of map was something like:
type MapOutput = RpcPromise | MapOutput[] | Record<string, MapOutput>;
map(func: (p: RpcPromise) => MapOutput)
... then you'd catch most cases, because there's no good reason to have any constant/literal value in the return value. Almost every case where there's a non-RpcPromise value is likely some case where a value was calculated in a way that won't work.Though another case occurs to me that might not be caught by any of this:
result = aPromise.map(friend => {...friend, nickname: getNickname(friend.id, userId)})
The spread operator is a pretty natural thing to use in this case, and it probably doesn't work on an RpcPromise?Couple random thoughts:
I'm trying to see if there's something specifically for streaming/generators. I don't think so? Of course you can use callbacks, but you have to implement your own sentinel to mark the end, and other little corner cases. It seems like you can create a callback to an anonymous function, but then the garbage collector probably can't collect that function?
---
I don't see anything about exceptions (though Error objects can be passed through).
---
Looking at array mapping: https://blog.cloudflare.com/capnweb-javascript-rpc-library/#...
I get how it works: remotePromise.map(callback) will invoke the callback to see how it behaves, then make it behave similarly on the server. But it seems awfully fragile... I am assuming something like this would fail (in this case probably silently losing the conditional):
friendsPromise.map(friend => {friend, lastStatus: friend.isBestFriend ? api.getStatus(friend.id) : null})
---The array escape is clever and compact: https://blog.cloudflare.com/capnweb-javascript-rpc-library/#...
---
I think the biggest question I have is: how would I apply this to my boring stateless-HTTP server? I can imagine something where there's a worker that's fairly simple and neutral that the browser connects to, and proxies to my server. But then my server can also get callbacks that it can use to connect back to the browser, and put those callbacks (capability?) into a database or something. Then it can connect to a worker (maybe?) and do server-initiated communication. But that's only good for a session. It has to be rebuilt when the browser network connection is interrupted, or if the browser page is reloaded.
I can imagine building that on top of Cap'n Web, but it feels very complicated and I can equally imagine lots of headaches.
There were some responses about educational expectations, but I would love to hear how folks in these Asian countries specifically deal with cell phones, social media, and these general media/online distractions.
Respect (or lack thereof) goes both ways: both the writer and reader. I have frequently felt disrespected by producing documentation, planning/etc that isn't read. In the end I mostly rely on oral transmission of knowledge because then at least I can read the room and know if I'm providing some value to people, and ultimately we're both trapped in the room together and have to invest the same amount of time.
The LLM isn't always smart, but it's always attentive. It rewards that effort in a way that people frequently don't. (Arguably this is a company culture issue, but it's also a widespread issue.)
My experience writing in a professional setting is that people mostly don't read what I write, and the more effort I put into being thorough the less likely that it will be read.
Probably ignoring things like robots.txt, I'm guessing? But I'd be curious what exactly the list of things is, and if it's growing. Would it go as far as ChatGPT filling in CAPTCHAs?
autocomplete="off" is an instance of something that user agents willfully ignore based on their own heuristics, and I'm assuming accessibility tools have always ignored a lot of similar things.
The surgeon general warning came along with a large number of other measures to reduce smoking. If that warning had an effect, I would guess that effect was to prime the public for the other measures and generally to change consensus.
BUT, I think it's very likely that the surgeon general warning was closer to a signal that consensus had been achieved. That voice of authority didn't actually _tell_ anyone what to believe, but was a message that anyone could look around and use many sources to see that there was a consensus on the bad effects of smoking.
I'm doing something similar, so some thoughts:
1. I really like the "commitment" concept. That solves a real conversational problem where the AI can be too easy to redirect, moving on too fluidly from previous conversational beats. And the AI will easily make commitments that it can't or won't keep, so tracking them is good.
2. Reflection is a good approach. I think this is generally in the zone of "memory", though a more neutral term like insight or observation can be better for setting expectations. There's a lot of systems that are using explicit memory management, with tools to save or load or search memories, and I don't think that's very good. I include both techniques in my work because sometimes the AI wants to KNOW that it has remembered something. But maybe the commitment idea is a better way to think about it. Reflection lets the memory be built from a larger context. And usually the peak moment when a memory would be explicitly stored isn't actually the final moment, and so a reflective memory will be more nuanced and correct.
3. It's good to create a model for personality. I should probably be more explicit in my own work, though I guess I focus mostly on behavioral aspects: how the AI should act toward the user, not what the AI's "identity" is. But generally I don't trust scores. A score implies a rubrik already embedded in the model, and to the degree that even exists the rubrik is unstable, not portable between models, and changes can be arbitrary. Instead I like to use terms that imply the rubrik. So if you take Big Five then I'd create terms for each attribute and score and use those terms exclusively, ignoring numbers entirely. For instance for neuroticism you might have Unflappable → Even-keeled → Sensitive → Reactive → Vulnerable.
4. I can't tell if Emergence Metrics are prescriptive or descriptive. I'm guessing it's actually unclear in the implementation as well. The AI can pretend to be all kinds of things, but I think you are trying to get past just pretend.
Thought: if one of these automation tools wants to do some deep research task, is it legit if it just goes to chatgpt.com or notebooklm.google.com?
Obviously Anthropic or OpenAI doesn't need to do this, but there are a dozen other browser automation tools which aren't backed with these particular features, and whose users are probably already paying for one of these services.
When ChatGPT first came out there were lots of people using extensions to get "free" API calls (that just ran the completion through the UI). They blocked these, and there's terms of service or whatever to disallow them. But these companies are going to try to construct a theory where they can ignore those rules in other service's terms of service. And then... turnabout's fair play?