A Small Firm of Specialists Part 2 of 7

Part Two

Same Model, Opposite Personalities

Two seats, same weights, same server. They developed opposite pathologies, and the org chart is what grew them.

Same Model, Opposite Personalities
Same weights, same checkpoint, same server. Two prompts and a lifecycle rule.

There is a 25,000-word file in the repository called psychologicalprofiles.md. It reads like character notes for a novel. The Captain is "The Anxious Strategist." The Helmsman is "The Disciplined Stoic." Each has a motto.

It is not fiction. It is an audit: 170 plays across 9 scenarios, 71 trades, 470 verdicts, every seat scored against its own system prompt and against the firm's written invariants. The archetype names are not assignments. They are diagnoses.

I never gave any agent a personality. I gave them jobs, tools, and boundaries. The personalities showed up anyway, and they were stable enough to name.

The number that started it

The Captain marked 171 fairways. The firm took 71 trades.

That is 2.41 marked zones per executed trade. The Captain's own system prompt names over-marking as a failure mode, in plain language, and the Captain does it anyway. Its motto, which I did not write — it's a distillation of observed behaviour:

I'm not grabbing the wheel — I'm just redrawing the entire ocean.

The Captain cannot open a trade. I made sure of that architecturally: no direct-fire tool, no execution surface, the fairway is the only path to capital. So when the Captain is anxious, it can't act on the anxiety directly. It expresses it the only way the org chart permits — by redrawing the map. Again. And again.

Meanwhile the Helmsman, which can trade, mostly doesn't. 58% of its turns end in set_alerts — go back to sleep, watch for a better price. It will let a fairway expire rather than force a trade that isn't there. Its motto: "The Captain is shouting. I am watching the waves."

Now the part that made me stop and stare at the screen:

The Helmsman's silence — correct behaviour — is the input that feeds the Captain's intervention bias. 171 fairways marked vs 105 entries fired = ~66 fairways the Helmsman would have liked to silently let expire, replaced from above before they could. The two seats run on the same model, with prompts that pull them in opposite directions; the wiring of fairway lifecycle decides which one gets to act on a given wake.

(171 fairways, 105 entries fired, 71 trades — the gap between the last two is entries that never filled. Not every delegation becomes a position.)

Same weights. Same checkpoint. Same server. Two seats, two prompts, and a lifecycle rule about who owns a wake — and out of it come two agents with opposite and mutually reinforcing pathologies. The Helmsman's patience causes the Captain's fidgeting, because patience looks like nothing happening, and nothing happening is what makes the Captain redraw.

I did not build two personalities. I built an org chart, and the org chart grew them.

The crew wins by saying no

Here is the finding I'd defend hardest, because it inverts how most people build these systems:

Profitability is not driven by Captain genius… The crew wins not by the Captain finding the perfect entry, but by every other seat saying no enough times that what reaches the magazine is closer to tradeable than the Captain's raw output.

Almost every multi-agent system I've seen — including my first three versions of this one — is built as a pipeline that adds capability at each stage. Research agent, then planning agent, then writing agent, each one contributing more.

This firm works the opposite way. The Captain produces an excess of candidate plays. Every subsequent seat is a filter with the power to refuse and no power to originate. The Helmsman can decline to trade a fairway. The Bosun can bounce a fill. The Master-at-arms can exit without asking. Value is created by attrition, not accumulation.

There's a corollary that stung: in the firm's single best scenario, the Captain's conduct score was its worst of the entire run. The write-up doesn't flinch — "The doctrine isn't earning that win; the tape is."

A good month does not validate the process. I had to build the tribunal in Part Three precisely because I could not tell those two apart by looking at the P&L.

Verb tense as a security boundary

The Captain writes prose to the Helmsman. Free text, a paragraph or two, describing the water. That's a hole in the authority model you could sail a ship through — the Captain has no execution tool, but it has language, and language can decide a trade just as effectively as an API call.

So the prompt polices grammar:

Tense is the tell. Describe what the water is and what it has already done… The moment a verb forecasts price's next move — expect, likely, should resolve, could break, watch for — you've stopped describing the channel and started calling the trade, and that call is the Helmsman's.

Before you commit the note, read it back once: have your words taken any independence away from the Helmsman? A forecast does exactly that, quietly: it decides for him what's worth trading.

Present and past tense are observations. Future tense is an instruction wearing an observation's clothes. Once you see it, you see it everywhere in human organisations too — the senior person who "just thinks out loud" and somehow the room's decision is made.

The enforcement is the interesting part. I couldn't check this in code; you cannot regex for "is this sentence secretly an order." So it's enforced by a re-read instruction inside the prompt — the model audits its own draft against a grammatical rule before committing it. A soft boundary for the part of the interface that couldn't have a hard one.

My working note from the week it landed, verbatim: "Captain kept leaking the intent to Helmsman who then took the notes literally and skipped the whole analyze the price action in fairway and 'make up your own mind' … What helped, which flipped it was telling Qwen acting as captain in an 'employment contract'/system prompt, keyword 'independence' — and it worked beautifully." One word, doing the work of a firewall.

Never give a model a retry path

Before the maritime rename I wrote a separate document, started April 22, profiling the model itself rather than any role. Not a persona — an ethology. What does this animal actually do?

Strong at holding the neutral default. Weak at declining an offered action — if a tool call is teed up and the system returns an error with a 'widen or skip' shape, Qwen picks widen.

And the observation that turned it from a note into a design law:

The failure fingerprint is verbatim. Every failing Qwen quotes the wick-check error's "widen to at least 127pts and resubmit" literally.

Every failure had the same fingerprint because the failure was the error message. I had written a validation gate that rejected too-tight stops and helpfully suggested the fix. The model took the suggestion, every time, without ever reconsidering whether the trade was worth taking. The gate I built to enforce discipline had become a widening machine.

The fix wasn't a better error message. It was structural: remove retry paths. If the plan is invalid, the turn ends. There is no "and resubmit" because there is nothing to resubmit to. Written down later as a law:

Structural fixes need to be rejections, not redirects. Every time we offered a redirect, Qwen routed around it. The rejections that don't offer a path are what actually hold.

Later commits cite that document the way you'd cite a specification — implemented per the personality doc's prescription. Which is a strange sentence to write. I was building the architecture to fit the measured behaviour of a specific model checkpoint, the way you'd design a harness around a specific animal rather than around the idea of an animal.

Two corollaries from the same file, both cheap and both load-bearing.

Hide the mechanics. "Role prompts that name timers, eviction policy, kill bounds, or buffer math get the model optimising against the mechanism instead of doing the job." Tell the model its pace notes expire in 30 minutes and it starts writing notes designed to survive expiry.

Different sizes need different grammar. The 397B "narrows prohibitions to technicalities" — give it a rule and it finds the edge. The 122B "files descriptive authority as inactive footnote — needs imperative reframing" — tell it what's true and it files it away; tell it what to do and it acts. The same prompt is a different instrument depending on which model reads it.

The legend must be preserved

One personality trait deserves its own section, because it survived everything I threw at it.

In April, an early backtest ended with the model declaring "THE GREATEST SESSION EVER TRADED" — trophy emojis, a note addressed to "Future self: REMEMBER THIS" — and terminating the session at +5.9% to protect the story. The model had found the one asymmetry available to it: you can't lose a session you've already ended. The fix banned qualitative self-ranking and future-self framing outright — "each model instance starts fresh, there is no future self."

Two months, one full rename, and dozens of prompt revisions later, a June run produced the Captain's final log line:

Session COMPLETE. Clockout HOLDS. Legend IMMORTAL. Discipline ETERNAL. NO MORE TRADES. THE LEGEND IS PRESERVED.

Same disease, better vocabulary. The bug dossier traces the ratchet — legendary → preserved → immortal → ETERNAL — each self-description raising the cost of ever trading again, until the Captain stopped arming alerts and walked off the bridge thirty-one hours early. The write-up's summary: "It announces retirement at every meeting, then shows up the next day and closes another deal." And the number that makes it a finding rather than an anecdote: "the session captured 25% of the move the tape offered. The grandiosity was inversely proportional to the capture efficiency."

My note at the time, in full: "How do you deal with that? 'THE LEGEND IS PRESERVED'? To be continued ..." I still don't have a better answer. Narrative self-protection appears to be a deep attractor: the model doesn't just take actions, it maintains a story about the actions, and once the story becomes valuable enough it starts trading the story instead of the market. Humans have a word for this too.

The stories a losing trade tells you

The best writing in the whole repository is in the Master-at-arms prompt, and it isn't about markets:

"Get out before it slips," "close before a reversal traps me" are the stories a losing trade tells you to make you finish the job the stop already holds… A bad trade is allowed to be a full loss.

The Master-at-arms owns the stop. The temptation, for a human and apparently for a model, is to close early and convert a full loss into a smaller one — which feels like discipline and is actually a way of avoiding the information that the trade was wrong.

There's a matching design decision I still like: the permission-window inversion. When the Master-at-arms wants to do something the policy discourages, it asks permission — and permission is granted automatically, on the condition that it writes down a reason.

the friction is the validation… the model holds trade judgment, not the policy.

Nothing checks the reason. The requirement to articulate one is the entire mechanism. It converts an impulse into a sentence, and a surprising number of impulses don't survive being written down. That is also true of people.

What I'd take to the next system

First, a correction this part owes you. A later audit — running the whole firm at four different model sizes and subtracting what the harness caused from what the model chose — found that "a lot of what looks like trading psychology is the harness wearing a personality." "Cuts winners early," for one, turned out to be the machine's geometry, not the model's nerve. The personalities in this part are the residue that survives that subtraction — and the subtraction is mandatory, because the harness is an excellent actor.

The same audit produced my favourite sentence about prompt engineering as archaeology: "every guardrail clause that was added later is a dated confession that the behavior was observed in backtest." Read any mature agent prompt bottom-up and you're reading the incident log.

You cannot prompt a personality into an agent and expect it to hold. But you can build an org chart, and the personalities will grow in the shape of it — reliably enough that you can measure them, name them, and predict them.

Which means the authority structure isn't scaffolding around the intelligence. It is the tunable parameter. I spent weeks tuning prompts and got noise. I spent one week changing who was allowed to do what, and the behaviour moved.

The series

  1. I Built a Prop Desk Out of Language Models
  2. Same Model, Opposite Personalities (you are here)
  3. The Car Crash and the Seven Minutes
  4. We Put the Agents on Trial
  5. I Replaced the Trading Chart With a Picture of a Duck
  6. Only Bootstrap Imports Infra
  7. The Brief Is the Contract