All notes
Agent-native

An agent defaults to bullets

LLMs default to consulting-deck output — bullets, bold headers, passive constructions — because that's the most common form of structured prose in their training data. Aspirational instructions like 'be concise' don't override it. Falsifiable rules and before/after examples do.

When I started building Janus, most of the early iteration went into the pipeline — parsing git logs, extracting sessions, routing context. The voice section of the system prompt was an afterthought. Then I read the first output: three nested bullet lists and a summary that opened with “Here’s the day’s analysis.”

The silent default

LLMs have a learned default for “write a report,” and it looks like a consulting deck. Bullets, bold headers per item, no transitions, passive constructions throughout. The model isn’t being lazy — it’s pattern-matching to the most common form of structured output in its training data. If you don’t override that default explicitly, you get it every time.

Aspirational instructions don’t work

My first attempt was something like “write in a narrative, journalistic style.” The output improved marginally. What actually moved the needle was getting specific: a list of banned adjectives (“solid”, “impressive”, “productive”), a rule against file-language when product-language would do, a name for the narrator stance (“soft third-person — observes but doesn’t lecture”). The model needs constraints it can check against, not a vibe it has to guess at. “Be concise” is not falsifiable. “No summary that opens with ‘Here’s’” is.

Examples are the fastest spec

The most effective part of the voice rules isn’t the prose description — it’s four before/after pairs showing the same content rendered badly and then well. One bad example plus one good example communicates more about what “narrative over bullets” means than two paragraphs of explanation. Writing a system prompt for a prose-generating agent is closer to writing a style guide than writing an API contract. The style guide has to earn its authority with samples, not just statements.

The bigger point

Any LLM output that has a quality dimension beyond “factually correct” needs explicit, falsifiable rules in the prompt. The more concrete the constraint, the less the model fills gaps with defaults — and the more reliably you get the output you designed rather than the output the training distribution suggested.