Matt Priselac

I.Research · The Reasoning Project

Machines that weigh arguments: a two-sided coin

Spending time working with AI agents every day for work, they seemed to me to follow a mode of thinking that I would describe as distinctively associative. Even when you trace the visible thinking of a reasoning model, what you see is that the pattern of association has changed and leads somewhere different, not that the nature of the pattern has changed. That’s no knock on these models, or on associative thought in general. But it raised a question for me about whether the part of reasoning that association handles worst, weighing many reasons into one verdict, could be given a structure of its own, one that isn’t just more association. So I built a laboratory for doxastic norms, in which language models make small, isolated judgments and deterministic code decides what stands. The rule I hold myself to throughout is that nothing the system believes is ever up to a model.

The question

\n

The basic guiding thought was this: the judgment of a model at a point is good, but aggregating, weighing a whole balance of judgments, is where things are most likely to go awry. Moreover, in those situations I don’t just want to trust the model’s own evaluation of how well it adhered to the norms, or let those self-assessments trickle up into the final verdict. Asking the model for higher-order judgments is, on this way of understanding things, just another path to piling on more judgments rather than adding any structure to the reasoning.

The design follows from that. Each language model sees only a slice of the argument, with no hint of which answer is winning, and returns one typed judgment; code then combines those judgments under published rules, so that no model ever declares the winner.

The laboratory

Language models do small, isolated jobs: propose a rival explanation, steelman a view, look for a counterexample, decide whether two sentences say the same thing. Deterministic code keeps the shared state, an argument graph whose verdicts are computed and never declared by a model. The jobs themselves come from familiar, hallmark even, modes of reasoning in late-twentieth-century analytic philosophy: inference to the best explanation, the method of cases, Pollock’s rebutting and undercutting defeaters, and Dung’s argumentation semantics.

That split is what makes the project two-sided. On one side the models are the subjects: how well can a model analyze an argument on its own, with rules supplied in context, or inside a full harness of tools and agent loops? On the other they are instruments: hold the argument fixed, vary the epistemic norm, and see where judgments diverge. Norms get into the system at two levels, though, and they don’t swap equally well. Some live in the code, like how defeaters add up (Pollock’s anti-accrual or a noisy-OR) or how much default trust testimony gets (Burge or Fricker), and those I can swap cleanly and replay the same evidence under each. Others live in the prompts at each node, in what a model is asked to count as bearing on what or how strong a defeater is. Those can be varied too, by rewording a prompt or changing the model, but much less cleanly, which means theories that disagree about what counts as evidence for what are the hardest ones to test.

How the project moved

1. A harness for one question (June to July). As an initial plan, I thought we could take those hallmark modes of reasoning and try to represent them in a harness, where each node is a particular operation in which a model makes a judgment, and those judgments are then integrated and cycled back on each other. The harness wasn’t conversational. A question comes in, is parsed into its assumptions and a core question, and then the harness loops until a stopping rule fires. Some stages are generative, coming up with rival explanations, defeaters and counterexamples, and others are evaluative: is this counterexample successful, how strong is it, does the putative reason actually cut against the claim, and by how much? More norms were then modeled for summing those judgments up. While the results were interesting and the outputs compelling, we quickly started to see the limits that the project is grappling with to this day. When you have generators coming up with dozens of counterexamples or defeaters or supporters, and you are trying to integrate them all through the harness, you need to be able to tell whether something is the same reason as something else. Another issue that arises quickly is that how the harness reasons through a question depends strongly on what the model at each node brings to the table. Worse, and this is really a theme, there was no good way to distinguish information flowing through the harness from what the system was actually committed to, which meant there was no principled way to balance how an input ought to shape the current judgment against prior commitments, because there was no real sense of a commitment in the system at all.

2. A conversational layer (July to August). Still, we had some interesting foundations, and a natural way to extend a fundamentally epistemological project was with a conversational arm. Adding that layer brings its own complexity, because giving every incoming statement the full twentieth-century analytic epistemology level of scrutiny is, on its face, absurd. So the goal was to take theoretical understanding of conversational context and speech acts from philosophy of language and use it as a second harness, one that keeps a structured record of the conversation: each party’s commitments and obligations, the live question, the context. As a conversation unfolds the system now has commitments to use as priors, takes information in and revises (or doesn’t) those commitments, and uses them as a basis for replies, while the full analytic treatment is only convened when the conversational harness decides the context demands it. Again, though, we quickly ran into issues around handling a record that is fundamentally about propositions that can be expressed in endless linguistic forms. When updating the record, how can we tell whether some claim is new or the same one as before? And as the context grows, which parts of the commitment record does a new input actually bear on, and to what degree? We tried various information retrieval structures as well as simply having a fast decision model make those calls, and each helped in some ways, but each also failed in ways that snowball quickly. The record stores each claim as a short, standardized summary, so the identity question is really whether a new statement says the same thing as one of those stored summaries. After a lot of trial and error, the best approach we found was to ask a model that question directly, one pair at a time, and on a hand-labelled test set it worked well. One model correctly matched 67 of 106 pairs that really were the same claim while wrongly linking only one of 363 pairs that weren’t, and a second model did about as well. But there was a catch in the test itself. Almost every new statement in it (467 of 469 pairs) had already been tidied into a summary before the comparison was made, so what we had shown was that two clean summaries can be matched reliably. What a person actually types in a conversation is messier: it leans on context, uses “that” and “it” for things said earlier, and words things loosely. Whether matching still works when one side is that kind of everyday language is the next thing to test, and it needs real conversations with human-checked labels rather than another synthetic set.

3. A benchmark that said no. The first real sign that something was wrong came in August, when I ran the epistemic harness against a plain prompt on Redwood Research’s argument-critique ratings (LMCA), and the plain prompt won on held-out arguments. Later work in October sharpened the point: the stronger the model, the more a hand-coded harness got in its way. Decomposing commitments, claims and reasons into separately stored propositions and then trying to reassemble them through code began to feel like an ultimate limiting block. Imposing structure in that way seemed to lose too much of the conceptual relationships already built into the models, and not buy enough epistemic performance back. So the next phase aimed to do better at leveraging the models’ ability to make conceptual connections at a broad scale, and to make the enforcement of epistemic norms less rigid.

4. A commitment store outside the model (September). The guiding idea here was that we needed to stop trying to discern propositional identity and relevance one proposition at a time, and instead use the power of the models to work in bigger chunks, themes and arguments rather than sentences. To do that, the DoxasticLayer starts from an explicit commitment store, a list of what the system should treat as its priors (the system’s, not the model’s anymore). Code groups that store into families of related commitments, which we called “towers”, and the model is then asked how a given input bears on each tower. This did help alleviate the difficulties of the more granular approach, since questions about the identity of propositions largely fell away, and moving the store outside the model gave us a clear, explicit and inspectable account of the priors belonging to the system. Nevertheless, we ran into a similar problem when it came to reading strength and degree of relevance back out of those judgments; even once we had verdicts on how an input bears on a tower, we had the same trouble judging the bearing and strength of those verdicts against the store in order to update it. A detour into the models’ own probabilities said why. Models read the direction of evidence reliably and its strength badly, and credences are in any case relative to priors, which a model’s weights are not.

5. Back to what models can do on their own (October). We have now taken a further step back, to try to understand the epistemic patterns that current models can express on their own. The first step narrowed to a single question, how well does one criticism land against one argument, so that strength could be measured at all. The second, now under way, moves the commitment store back inside the model’s own context rather than separating it out and running it through a harness, and asks whether a model can manage a set of commitments within a single run: noticing what a new item bears on, retracting what it overturns, and carrying the consequences through.

What I’ve learned so far

  • Structure doesn’t help just by being there.My first benchmark went against the graph. The failure taught me to test one layer at a time.
  • The hardest problem was sameness.“The policy will reduce costs” and “the policy will not reduce costs” share almost every word. A summarizer that is consistent still doesn’t converge.
  • Models read direction, not strength.They tell support from attack but don’t rank how much support. “Supports” works like Carnap’s classificatory concept: weak support is still support.
  • Relevance gets read as bearing.We see undercutters for a claim, reasons to distrust the evidence for it, often raising the probability a model gives to the claim. That seems like something in the nature of LLM activity, because it is not hard to see how a model trained the way modern models are trained becomes more likely to state a claim when anything relevant to it, whether for or against, enters its context.
  • Belief needs a commitment store.It needs something that persists, governs what you assert, and is revised by procedure. A context window has only a raw write path. A disciplined harness can supply what’s missing.

The ladder

The overall picture that’s emerging is a three-rung ladder for how well a norm is captured in a model, with each rung run on the same items:

  • Definitions only. If a model succeeds here, without any explication of the rules, the norm is most robustly in the model.
  • The rules stated in context. If it succeeds only here, the model can work within the norm when it is told what the norm is.
  • Through a harness. If only the harness succeeds, the model has a real gap that structure fills.

Failing all three leaves the question open. One caveat belongs next to any of these numbers, which is that agreement here means agreement with a key built from my own rules, so I check each norm with matched pairs whose right answer follows from how the items were built, and I look at whether different models converge on the same answers. With definitions only, models sit near a constant guess; with the rules in text, they converge.

The design · choose a cell

norm ↓ condition →
Innate
In-context rules
Harness
Observation over authority × Harness The harness does it best: 97%, the project’s clearest harness win.

Bigger picture

Where belief lives. As I’ve worked through these projects some big-picture themes keep cropping up and becoming clearer. The first is that it’s very obvious, working in this realm, that the question of where or how belief and commitment exist in or around a model is important to sort out. Whether beliefs are propositional attitudes or credences about propositions, the role of commitment, as opposed to the mere flow of information, is what keeps needing to be sussed out.

The missing middle. Reading the literature around this topic makes it clear that most work tends to fall toward one of two extremes. At the philosophical end we get discussion of the conditions that make the concept of belief applicable to models at all, which replays traditional arguments about teleology versus causal role. At the other end we get technical evaluations that are narrow in two ways at once: they are about currently existing models rather than about LLMs as such, and they rest on single measures such as next-token or answer probabilities. There is a more interesting middle ground, and the measures I’ve built sit there; one of them reads the probability of a relation word placed between evidence and claim. Results like the undercutter finding above don’t look like quirks of one model. They look like part of what LLM activity is, and there is much more work to be done here.

Commitment and answerability. The distinction between commitments in a system (a system, not a model, since it isn’t obvious where a commitment ought best to live) and information flowing through it matters not just for reasoning well but for safety and alignment too. Making commitments, and giving reasons for and against them, are the practices through which we hold ourselves and each other responsible for what we believe and what we do. A system with adequate commitment markers is therefore a step toward systems we can hold answerable: systems that can be challenged on what they hold, owe reasons for it, and don’t let whatever passes through them quietly become what they stand behind.

Models as vehicles of philosophy. Models are without a doubt now at a point of sophistication where they can be vehicles of philosophical research and argument. They can be subjects of assessment, to see how well they capture various candidate epistemic norms, but they can also be instruments of assessment, a way of seeing how a norm is expressed in the “folk” or intuitive sense that philosophers have relied on in their arguments for a long time. That cuts both ways, though, because a model trained on human practice inherits our shared blind spots along with everything else.

Why build harnesses anyway. The training material holds the bones of good epistemic practice alongside a great deal of bad practice, with nothing marking which is which. So to the degree that current models fall short, the project of learning how to build harnesses that define and express the better patterns is worthwhile for its own sake, and it is a step toward epistemically better, and so hopefully better-aligned, models.

1 Herrmann & Levinstein, Standards for Belief Representations in LLMs (2025), and Radical AI Interpretability (2026). Hofweber, Hase, Stengel-Eskin & Bansal, Are language models rational? (2025). Hase, Hofweber et al., Fundamental Problems With Model Editing (2024). Hofweber et al. ground belief in what post-training aims the model at: its states count as beliefs because it has been trained to track truth, and what it believes is fixed by what it would assent to. Herrmann & Levinstein instead test whether internal representations play a belief’s causal role (accuracy, coherence, uniformity, use).

2 For example, Kadavath et al. 2022 (P(True)), Burns et al. 2022 (latent-knowledge probes), and Marks & Tegmark 2023 (The Geometry of Truth).

3 The relation-word read, plus a placebo-matched yes/no change and an answer-slot read. In one study an undercutter on its own raised P(Yes) by 0.3 to 4.1 nats, and irrelevant on-topic premises earned 0.1 to 0.3 of a real reason’s credit.

Development diary

Reconstructed from the git history and the dated design documents. Short commit subjects are quoted where they capture a moment well.

Jun · 60Jul · 136Aug · 409Sep · 463Oct · 162

Building the harness

June – July 2026
Dev diary
June 23–24, 2026

A whole harness in two days

My first commit, Initial commit: defeasible reasoning harness, came with four design documents I’d written beforehand: an epistemic constitution (the norms), context-management principles (critics stay independent), an orchestration spec, and a build brief. The core idea was there from the start. LLM “leaves” each do one job on a status-blinded slice of an argument graph, and a deterministic Dung grounded-semantics engine computes which claims stand.

The first two days had 47 commits. The operations went in one at a time: steelmanning, counterexamples, reframing, source appraisal and evidence-seeking, distinction-drawing, surfacing hidden assumptions, and finally an explicit stopping rule. By that evening the log reads O10 termination judgment — the explicit stopping rule (all 12 ops complete). A graded layer (DF-QuAD) went alongside the binary verdicts. Then came a self-contained HTML viewer that replays a run move by move, and a plain-language narrator.

One early commit set the tone for the whole project: docs: correct O2 run observation — the reframe was operationally inert. I fixed it in the next commit.

Dev diary
Late June – early July

Making it usable

Multi-provider models with per-operation model and effort choices, parallel LLM calls, a chat-to-graph intake (the “front door”) and a local web app. On July 1 a structured review of the reasoning structure was implemented in six stages. Among the changes: per-claim case review, and counterexamples grounded in evidence instead of free invention.

Dev diary
July 6–14

The conversational harness

A sibling built from philosophy of language rather than epistemology. The Conversational Constitution (norms K1–K8, operations T1–T14) grew to about 124 KB. The build ran in steps: a score spine updated only by typed moves, an interpretation ladder, felicity validation with a “reject, don’t guess” rule, then four model leaves on top. Two adversarial reviews in the first day each found real defects. July 7–13 was a full calibration phase, with sweeps, a human-tier adjudication, and a ruling that one judge “was the defect.” Then came the “conversation x-ray”, an observer-only web front end.

Dev diary
July 13–27

Fusion, and learning from live sessions

The reasoning and conversational harnesses were joined so that a conversation’s claims become a “doxastic web” that the deliberation engine settles. The case-law ledger ran to 54 entries over two weeks. Each entry reviewed a live session, named the defects, ruled fixes and smoke-tested them, usually all on the same day. The subjects trace the system growing up: verdict always ships, the narrator is starved behind the high-stakes refusal storm, best session yet; turn 5 walled on one false contrary, first wall-free session. A documentation site went up on July 25–27.

The benchmark that said no, and the identity problem

August 2026
Experiment log
August 15–17

The benchmark that said no

On August 15 I restated the charter: the system is an instrument for exploring doxastic norms, not a solver of their hard problems. Experiment compute moved to Google Cloud Batch.

The key test was E6, built on a Redwood Research benchmark of arguments, critiques and human ratings. The question was whether reconstructing the argument as a graph and attaching each critique to its target would predict human ratings better than a plain prompt. The pilot looked promising. The pre-registered held-out test, split by whole argument, did not: E6 phase 2 — no uplift, decisive; signals not constants; realization chain indicted. The direct prompt won. This became my founding negative result. It didn’t refute the platform, but it showed that model-produced structure has to earn trust step by step. Looking back, this was the first sign of something that the October ladder results would make much sharper, which is that decomposing an argument and rebuilding it in code can end up costing a strong model more than it gives back.

Several smaller experiments ran alongside it. A local 4B model beat a frontier small model on one judgment at prompt parity, ~25x cheaper. A synthetic study showed that the standard way of aggregating defeaters double-counts repeated reasons, so I adopted “ground-aware” accrual, which counts one underlying reason once.

Experiment log
August 18–25

The identity problem takes over

The first realistic “generation window” ran ten conversation set-ups, four replicates each, across mixed model families, and captured 40,344 boundary pairs. It first surfaced nine engineering defects that could have quietly corrupted the evidence. One was every model call now carries a timeout — a dead socket hung a run for eighteen minutes. Another was the wave cap was the 429 storm: 8 was the exact width that broke, measured.

The bigger finding was that the weak point wasn’t computing standing. It was deciding when two sentences are the same claim. On August 23 I hand-labelled 191 identity pairs myself (the identity error is nearly all on one side). The fixes came in quick succession. Retired claims stop answering lookups. The judge is shown concise claim heads instead of whole paragraphs. A denial keeps its “not” when displayed. A user’s argument is stored as premises, a conclusion, and a separate claim that the one supports the other. Window 2 confirmed most of these and found that the failure “moved upstream.”

Experiment log
August 27–30

Canonicalization gets demoted

Window 3 (nine of nine runs clean) produced K06 UNIFIES for the first time: a test case that had failed for a week now succeeded. It was followed by the correction that this was a p~0.1 tail draw. An audit on 469 human-labelled pairs showed that exact equality of canonical keys was precise but caught only about a quarter of true paraphrases. The lesson: consistency is not convergence. Key equality stopped counting as proof of identity, and “link-first” identity, which asks the comparison question directly, replaced it. Its first gold run looked like a failure until the failure was traced to the experiment itself: arriving denials had been shown without their “not.” With that one wiring fix, and the prompt unchanged, both model families passed.

A software-engineering pass ran alongside: all-or-nothing turn boundaries with rollback, observers scoped to a single run, hardened saved state, and a plain-language system walkthrough. On August 30 I wrote From a Conceptual Benchmark to Real Work, a narrative of the whole experimental arc so far.

Rebuilding, and asking what belief needs

September – October 2026
Dev diary
September 14–21

The DoxasticLayer, rebuilt from a toy

After a two-week pause I opened a third branch. The idea was to stop trying to judge identity and relevance one sentence at a time, and instead to start from an explicit store of the system’s commitments and judge each input against families of them. I started from a toy engine I’d written by hand (“game night” and “export cause” scenarios) and kept it byte-for-byte as a replay target. The v2 design charter laid out a card of commitments that incoming text can occasion revising but never overwrite, update kept separate from response, and model judgment channelled into typed, auditable tasks.

September 14 alone had 87 commits. I ran it as a supervised build: worker “chips” for substrate, spine, transaction and fixtures, each with its own log, and a growing book of binding rulings from me (R0 to R61). By the end of the day the log reads STOPPING POINT: one full turn clean. On September 15–16 my own adversarial review reversed one of my rulings. The “tower judge”, the model step that decides what an input bears on, went through staged versions v1 to v6.1, ending in a hybrid in which an LLM reads, a trained classifier decides yes/no questions, and code assembles the structure.

Experiment log
September 21–28

The implicit-credence program

A research detour with its own agenda. A language model conflates the linguistic, the conceptual and the epistemic, and the work is to understand the epistemic patterns tangled up in the other two, and to learn how much structure has to be layered on top. On the second question, I think we’re at a stage like NLP before transformers.

The method was to read open-weight models directly from their probabilities rather than asking them, across Qwen, Gemma and OLMo ladders, with each phase pre-registered and frozen before any spend. The headline was direction yes, numeric strength no, verbal strength coarse: models tell support from attack but don’t rank how strong it is, and an undercutter on its own raises a model’s “yes.” On September 28 I wrote it up as “the wall”: credences are relative to priors, and a model’s weights are not a representation of priors. So I turned back to the doxastic project.

Method
October 3–14

The strength era, and the ladder

I founded the StrengthProject on October 3. If models read direction but not strength, a harness that asks models for magnitudes just passes the weakness along. The first step narrowed to one question, how well does one criticism land against one argument? The second, now under way, puts a commitment store back inside the model’s own context and asks whether the model can maintain it there.

On October 5 I framed the ladder, a way of evaluating models against norms in three rungs: one-shot with definitions, one-shot with the rules stated, and through a harness. The October 6 headline: with definitions only, models sit near a constant guess. With rules in text they converge, and rules in code do no better than rules in text. A harness helps the middle-ranked models and can hurt the strongest. What no model supplies well is the parse. Along the way a bug turned up in which the effort setting had never been sent to one family of models. It was fixed and recorded rather than buried.

Dev diary
October 12–15

What belief needs

A reading of four recent papers on belief in LLMs went alongside a probing study of models’ hidden states, with an AI referee reviewing the synthesis over three rounds. Out of it came my current thesis: belief requires a commitment store, meaning something that persists, governs assertion and inference, and is revised by procedure. Within a conversation the context window is the only candidate store, and it has only a raw write path. On this view an agent with a disciplined commitment store is an ally of LLM belief, and “memory plus tools” on its own is not enough.

To test that directly, my newest work is an in-context store-maintenance battery: noticing what a new item bears on, retracting what it overturns, and carrying the consequences through. It uses hand-written village scenarios with rebutters and undercutters rewritten to Pollock’s standard, audited cold, and run through smoke tests, pilots and length controls. Its second pass is being planned now.

Threads through the diary

Failures kept on the record.The project’s turning points are mostly negative results: E6, the canonical-key audit, “the wall”. Each one was pre-registered and kept.

Philosophy as engineering spec.Dung, Pollock, Grice, Burge and Fricker on testimony, Harman’s clutter avoidance and Carnap’s classificatory concepts all appear as settings or tests in the code.

Human direction, agent build.I wrote the charters, rulings and adjudications, and Claude agents wrote most of the commits.