Talking Shit About AI Agents

Scott Werner ยท RubyConf 2026

AI agents are a new computing primitive.
Ruby was accidentally built for it.

prompt_objects

Markdown files are the program. Ruby is the environment.

$ gem install prompt_objects Open on GitHub

The soundtrack, live

The talk's soundtrack was a prompt object composing in real time. It never plays the same piece twice.

$ gem install prompt_objects $ prompt_objects env create music --template music-beginner See the music template

Semantic late binding

Dynamic dispatch asks which implementation handles a known message. Semantic late binding asks what message the receiver believed it received.

The meaning is not fully fixed by the sender. It is resolved by the receiver, in context, at runtime.

Read the notes

Ruby and Smalltalk already bind late. bartender.send(:pour, :whiskey) works because the message names a method and lookup happens at runtime โ€” the receiver decides which implementation runs. That's dynamic dispatch, and it's why Ruby feels alive next to static OOP.

Now send bartender.send("I've had a day.") There is no method by that name. A prompt object doesn't raise NoMethodError โ€” it interprets. Pour a whiskey? Pour a water? Ask a question back? The receiver resolves what the message means before deciding what to do about it.

Vending machinepress_button("B7") โ†’ dispense_item(:chips). The message has one, fixed meaning.
Bartender"I've had a day." โ†’ context, tone, history. The message's meaning is negotiated.

That's the shift: dynamic dispatch binds the implementation late; semantic late binding binds the meaning late. When you drive agents โ€” or prompt objects โ€” programmatically, you aren't calling functions with fixed contracts. You're passing messages whose meaning is resolved by the receiver, in context, at runtime. It's the extreme late binding Alan Kay wanted, one step further. Ruby was accidentally built for it.

The deck

Every slide from today โ€” VHS grain, laser eyes, and all.

Open the slides

Tell me what it becomes

Take it. Break it. Report back.