Oko/Docs

Operations

Person model

Oko's model of the operator as a person: how each of his messages reads as an instruction and a decision, how his decisions fared, what frustrates and relieves him, and what he said about himself.

Person model#

Oko keeps a model of the operator as a person, built only from his own words and decisions: how each message of his reads as an instruction and as a decision, how his decisions fared, what frustrates and relieves him, and what he said about himself. Every claim in it carries the turn it came from, so a reader can open his words and disagree.

Why a model of the person#

The registers Oko already kept each answered one question about the operator: what kind of work a message asked for (oko tasks read), when he lost patience (oko frustration), what he decided (oko rulings). None said how his messages read to the agent that receives them, whether his decisions held, or who he is across all of them. An agent starting a session had to learn him again from scratch, and the operator had to repeat himself.

How a message is assessed#

Each operator message is read once by the model on the dimensions the product declares in prose (rust/src/person/messages/assessment.json), in any language, with no word list deciding a choice:

DimensionChoicesWhat it asks
wordsown, pasteWhether he wrote the words or pasted output from a terminal, program or document.
clarityclear, ambiguous, noneWhether an agent can act on the message without guessing what is wanted or what it applies to.
completionstated, unstated, noneWhether the message says how the agent will know the work it asks for is finished.
autonomydelegates, directs, consults, noneHow much of the method the message leaves to the agent.
decisionreasoned, unreasoned, noneWhether the message decides something, and whether it says why.

The reading is one typed choice per dimension on Brama's decision route, all in one request with the whole message as the state; where oko model-service set declared an OpenAI-compatible service, the same choices are that service's one record_assessment tool call. An answer that names a choice the declaration does not offer is refused with the model's own words, never guessed.

A pasted output is assessed but counted nowhere in the model: it says nothing about the person who pasted it.

When messages are assessed#

Every reading pass assesses each stored operator message of the signed-in member the register does not hold yet: oko tasks read, and the reading stage of every oko tasks control pass that the Oko routine with action control repeats. The pass answers assessment beside its readings, with what it assessed, each message the model refused with its answer (unassessed), and refusal when the person register could not be read or written — which stops that pass's assessments while the task ledger's readings go on. A message the model refuses (one too long for the route, say) does not stop the messages after it.

One session is assessed on demand with oko person assess --session ID, or from a transcript file with oko person assess --transcript PATH. A turn already held with the same words asks the model nothing.

Correcting a reading#

When the operator disagrees with a reading, oko person assessment correct ID --dimension D --choice C --by operator records his choice. It stands over the model's in every count, the model's choice is kept beside it, and the model never reads that message again.

How his decisions fared#

oko person decisions reads the rulings register: every decision of his in his own words, whether it still stands, what later decision of his replaced it and after how long, how many of his messages repeated the replacement, and whether a hook, refusal or test enforces it. A standing decision nothing enforces depends on every session remembering it; the count of those is unenforced.

What he said about himself#

oko person trait add --said TEXT --session ID --ordinal N keeps one thing he said about himself — how he works, what he values, what he expects of an agent — in his words with the turn he said it in. edit binds it to the turn he restated it in, remove takes it out when it no longer holds. The same words added twice are kept once.

The model#

oko person show prints the whole model: his own messages counted on every dimension with his newest words behind each choice, his decisions, the causes of his frustration with how many moments name each, what he said lowers it, and his traits. A register that cannot be read refuses the whole answer naming the file, so the model is never drawn from part of the evidence.

Where it is kept#

The register is ~/Library/Application Support/Oko/person.json; OKO_PERSON_REGISTER moves it, which is what a test uses and what a second machine points at its own copy. It quotes the operator verbatim and, like the frustration register, is published nowhere. Each machine keeps its own copy and assesses the member's stored messages itself.

In Oko Desktop#

Person, under Work, shows the same model: how his messages read on each dimension, how his decisions fared, what frustrates and relieves him, and what he said about himself. Assess a session runs oko person assess for a session id or a transcript file and shows each turn the model refused; each assessed message carries Correct a reading; each trait carries He restated it and It no longer holds — remove, and Keep something he said about himself adds one. Every refusal is shown with the register's own sentence.

Tests#

cargo test --manifest-path rust/Cargo.toml --test person-traits and --test person-model drive the real CLI against registers of their own. The model journey OKO_TEST_SOURCE_REVISION=$(git rev-parse HEAD) cargo test --manifest-path rust/Cargo.toml --test person-assessment -- --ignored --nocapture assesses a transcript through the real model route on a committed revision and keeps every command, exit status and output beside its register. Oko Desktop's OkoDesktopPersonTests keeps, edits and removes a trait through the resident service.

Migrated from src/content/docs/person-model.md