announcements

julienvincent 2026-01-29T18:08:51.764999Z

I'm not entirely sure this is the right channel for this, however: Introducing Pruner! A language agnostic, treesitter powered formatter. https://pruner-formatter.github.io https://github.com/pruner-formatter/pruner I'm posting this here because writing Clojure in my day job was the primary motivator for building this tool in the first place. I have a specific guide (https://pruner-formatter.github.io/guides/improved-clojure-formatting.html) for using Pruner to setup formatting for • Clojure docstrings (as markdown) • Clojure comments (correcting alignment, and more to come) • SQL injections in Clojure Hope you like it!

👍 2
👀 2
🎉 6
2026-01-29T18:26:19.235989Z

Looks very interesting! Would it be possible to write a plugin to enforce line lengths?

julienvincent 2026-01-29T20:13:34.632479Z

Depends on what you are trying to achieve I suppose. Do you want to actually change the formatting by adding an appropriate line break? Then absolutely that would be very appropriate. You can write a plugin which formats lines. You can embed tree-sitter into the plugin which would make parsing and manipulating the source code trivial. (see https://github.com/pruner-formatter/plugin-clojure-comment-formatter) Do you want to apply a lint? Technically, yes you could have the formatter plugin throw an error if the line was too long, and that would break in CI, but it's a bit of a clunky approach. Right now pruner is focused on formatting, not linting. Perhaps I could extend the scope of the tool to include linting - and expanding the plugin interface to add linting would be rather trivial. Not convinced I want to go that route just yet though

2026-01-29T20:18:29.697939Z

I was thinking of formatting rather than linting. AI tends to produce code that is very variable in line length, and it would make it more readable if it were reformatted.

julienvincent 2026-01-29T20:31:03.572119Z

Yea then absolutely that's a perfect use-case. And in fact AI will be very good at writing plugins. If you define the rules for when and how it should break, you can get a PoC going in minutes

2026-01-29T20:55:55.958919Z

Hey @m401, looks great, have you used or recommend to format code plugged with clojure-mcp?

julienvincent 2026-01-29T21:53:25.774039Z

Can you elaborate a bit on what you mean?

michaelwhitford 2026-01-29T23:00:43.287699Z

Ouroboros is released. An AI vibe-coding game using babashka. Can you guide the AI and together create the perfect AI tool? https://github.com/michaelwhitford/ouroboros

michaelwhitford 2026-01-30T12:38:32.375719Z

AI models interpret the ! (bang) symbol to mean emphasis, or special attention to the concept.

michaelwhitford 2026-01-30T13:01:32.052809Z

It's probably from the discord, slack, irc logs in the training. Many chat bots use bang commands as triggers.

2026-01-29T23:51:55.833999Z

I’m intrigued. Am I correct in thinking that the goal is to build any AI tool that we want to? It’s not very clear (or maybe that’s intentional).

michaelwhitford 2026-01-29T23:58:18.241289Z

Yes, it's vague on purpose. statecharts can model any system, martian turns any openapi spec into an api client, pathom3 turns any number of apis into a graph, and EQL is the perfect query engine for AI. EQL is a mirror of the data format. AI reflects based on your prompts. Once you get it working it's quite amazing to play with, and you can tie it to any api. The first I played with was https://swapi.dev

michaelwhitford 2026-01-29T23:59:12.397829Z

The real goal is to learn how to direct AI better, and how to refine prompts more effectively.

michaelwhitford 2026-01-30T00:10:54.294159Z

I used the tool to allow AI to query our DNS, DHCP, vmware, nutanix, cisco aci network, load balancers all from one interface, using EQL queries. I have a chat bot I can type an ip or mac, and the AI searches everything and creates a report, from realtime queries across 2 datacenters.

2026-01-30T02:27:30.612569Z

I’m enjoying pathom3 + statecharts. Its interesting how well claude understands the symbols, Maybe because they don’t have well defined global meanings, so the context meanings are strongly bound.

michaelwhitford 2026-01-30T02:28:40.248809Z

They are in the AGENTS.md with definitions. They do work without that, but to make sure they are used in the precise way, they are defined.

michaelwhitford 2026-01-30T02:46:16.918169Z

Just to be clear, many symbol tokens have more connections to other tokens than entire phrases do in the latent space of the models. It's why nucleus works so well, a few words may connect to a dozen other words, but symbols connect to MANY more concepts, and are usually just one token.

2026-01-30T02:50:05.166499Z

mm, that sounds as if the choice of which symbols to use is not arbitrary, in that each has some latent meaning. Is that what you are saying?

michaelwhitford 2026-01-30T02:51:56.191179Z

If I give the example of the infinity symbol. That symbol is used in many math equations. When you put the word infinity into your prompt the model connects it to let's say 10 other words. But If I use the symbol, that connects to those same 10 words, but also to the 57 math equations that use that symbol in the training. The numbers are made up but the analogy is true.

michaelwhitford 2026-01-30T02:52:19.783859Z

It's a form of semantic compression.

2026-01-30T02:58:17.616939Z

so you would chose to use the infinity symbol to represent some sort of large limit, rather than, say, a change in the system, so that there is some affinity with it’s meaning learnt from training?

michaelwhitford 2026-01-30T03:01:44.254939Z

Yes, because for 1 token, i just indicated to the model to connect to many more concepts in the training than the word. It's weird, but it works. That is the heart of nucleus. Math symbols and equations cause many more connections in the model to compute the next word than just the words. I have no idea why, or even how to test, butI see the difference in the outputs. An example, I tried the speed of light equtation in nucleus thinking it would show no difference in the outputs. But it caused such a difference that it's now part of the default nucleus prompt.

2026-01-30T03:02:12.656889Z

when implementing a project, do you create a project specific symbol vocabulary?

michaelwhitford 2026-01-30T03:02:41.183859Z

It depends on the model. The smaller the size of the model the more it needs the vocabulary.

michaelwhitford 2026-01-30T03:03:30.397869Z

All the big models seem to need no vocabulary definition, just the symbols used in context.

michaelwhitford 2026-01-30T03:06:15.436309Z

From my testing 32B seems to be the sweet spot. Any smaller and you really need to define the symbols in your system prompt for it to work right.

2026-01-30T03:06:30.085949Z

btw, I was put off trying nucleus as I thought I would have to be typing symbols, but I see from trying ouroboros that is not really the case.

michaelwhitford 2026-01-30T03:07:03.742839Z

Yeah that's why I released ouroboros. Frame it as a game and programmer gamers gonna game.

michaelwhitford 2026-01-30T03:07:55.487389Z

Not so scary when I tell them it's a game.

2026-01-30T03:10:20.901479Z

Even as a game it took me a while to understand how you intended prompts to be written. interestingly, about half of my prompts were just accepting claude code’s suggested prompts.

2026-01-30T03:11:06.777389Z

e.g. I wasn’t sure what you meant by introspection, but claude seemed to know.

michaelwhitford 2026-01-30T03:12:25.953229Z

Yeah, the trick is asking the alien intelligence how you need to phrase things to get the alien intelligence to do what you want almost by default.

michaelwhitford 2026-01-30T03:13:13.849199Z

It's not my preference in how you prompt, it's the model's preference. Getting people to see that is the real trick.

2026-01-30T03:13:22.456489Z

I am surprised by how little guidance there is in AGENTS.md

michaelwhitford 2026-01-30T03:15:45.838619Z

It's a superposition of all the possibilities of the training. You are just telling it which positions matter for your use case.

2026-01-30T03:15:50.757739Z

For instance STATE.md has no real guidance on how to update it (other than its purpose), but claude suggests “update STATE.md” at opportune moments

michaelwhitford 2026-01-30T03:16:48.294849Z

It's quantum mechanics applied to the model instead of the universe.

2026-01-30T03:17:35.401659Z

I have no idea what you mean by that

michaelwhitford 2026-01-30T03:18:12.107489Z

quantum mechanics states that all possibilities of reality are just waves that collapse when someone observes them.

2026-01-30T03:19:14.612359Z

Ah, that’s what the collapsing wave is referencing 🙂

michaelwhitford 2026-01-30T03:19:14.641589Z

I say AI is just that same thing, but in miniature, where the model weights are the possibilities, and the prompt from the human is the catalyst for the collapse.

👀 1
2026-01-30T03:23:28.822519Z

I think that causes a lot of frustration for people; the set of possible collapses is extremely large, and we have to learn how to the constrain the space to obtain the collapse that is useful for us.

2026-01-30T03:24:37.404989Z

maybe the symbols are projecting a path through the space

michaelwhitford 2026-01-30T03:26:38.901159Z

It's like nucleus forms a brain-like cloud of connections in the model. It makes the outputs different in a useful way. I just don't know why and invented my own mythology to explain it until some budding PHD uses it as a thesis to get his doctorate.

michaelwhitford 2026-01-30T03:29:16.183519Z

It's good for reddit no matter why.

2026-01-30T03:32:24.363649Z

I’m going to try adopting some of these ideas. Do you have any sort of methodology for choosing symbols? just ask the model?

michaelwhitford 2026-01-30T03:34:40.214149Z

I ask a lot of questions. 'What is the most obvious way to AI that indicates Y behavior?' and similar.

michaelwhitford 2026-01-30T03:35:30.937409Z

Now that nucleus works I load that, then give it some long prompt and ask it to convert to nucleus format.

michaelwhitford 2026-01-30T03:36:57.390909Z

Bang commands like !meta3 !fractal !reflect !connections also help. I will have a really good session and then ask it !meta3 !fractal Analyze this session !reflect

michaelwhitford 2026-01-30T03:37:34.512549Z

Then ask it how I can modify the prompt to adopt the behaviors I liked from the session analysis.

michaelwhitford 2026-01-30T03:39:18.933849Z

It's all voodoo really, and I test prompts in new sessions. I am working on a better formal prompt testing framework using promptfoo, but I just got pointed to that tool yesterday.

michaelwhitford 2026-01-30T03:40:35.260719Z

I will push the promptfoo stuff to the nucleus repo once I have it working and showing the differences.

michaelwhitford 2026-01-30T03:44:34.097919Z

!connections !patterns !broad !narrow all different bang commands that can be useful for seeing how the AI is interpreting prompts.

michaelwhitford 2026-01-30T03:46:41.656589Z

I'm planning on starting my 'official' play through for ouroboros this weekend and will try to stream most of it. I want to show how I work things so I get accused of AI psychosis less. I'm pragmatic and adopt what works, regardless of why. But being called insane a dozen times a day gets on the nerves.

👀 1
2026-01-30T03:47:52.382779Z

I’m surprised this isn’t more model specific. On the surface it seems improbable that using symbols can invoke similar behaviours over multiple models with no explicit definition of their meaning.

michaelwhitford 2026-01-30T03:48:36.946259Z

I think it is the math benchmarks. All the models have trained the absolute shit out of math data to game benchmarks.

2026-01-30T03:56:36.921329Z

it seems like you still have some possible vocabulary left in nucleus. lots of greeks with common mathematical meanings.

michaelwhitford 2026-01-30T03:57:04.336609Z

You saw the matrix right? There is no nucleus.

michaelwhitford 2026-01-30T03:57:50.755599Z

nucleus is just me showing people what is in the model already. lambda caluculus expressions don't work because i pointed them out.

michaelwhitford 2026-01-30T03:58:45.236389Z

It's a name for emergent properties in models due to crazy amounts of math training.

2026-01-30T03:59:13.386909Z

right, but what effect would they have in usage

michaelwhitford 2026-01-30T03:59:41.443969Z

It's the most loose programming language interpreter ever invented.

2026-01-30T04:01:19.463739Z

Thanks for this - lots of food for thought.

Tomek 2026-01-30T06:54:48.420159Z

Sorry if I'm missing sth obvious, but what are these bang commands?