DigitableCourses
Portal settings
Show me around

Local and account-free. No account, no sign-up: whatever you type into the tools stays in this browser's localStorage and never reaches a server.

Our own counter records page opens and finishes: the address leaves, plus one tenth-of-the-text figure. No cookies, no outside trackers, your IP is not stored, Do Not Track is honoured. How to check that

The portal's own repository is not published, so we do not call it open source. What is open:

The portal lives on donations, paid consultations and requested write-ups, and on Workbench sales.

There are no plans to make the courses paid.

Digital portrait of the owner: digit portrait

The digit portrait team: measured speech manner of the owner, a log of his decisions with a reference to the session and time, a separately marked hypothesis. Accumulation is disabled by default, the portrait is stored separately from memory with 0700 permissions and does not move to the system prompt.

Digital Portrait of the Owner: digit portrait

The idea was about a “digital twin”: let the agent act as the owner, refer to their previous decisions, and eventually join calls. In one sentence, three different things are mixed, and the cost of mixing is asymmetrical: a guess placed next to a fact is read as a fact after a week.

Therefore, the layers are separated in the code, not in the description.

Layer What is it How is it verified Who can it be shown to
Style how the owner formulates: length of phrases, vocabulary, forms of refusal and consent by recalculating on the same corpus; each figure is stored with n to no one but the owner
Decision what he decided: a literal quote + session + time + evidence the quote is literal, the source is named can be shown to: the recipient will verify, not just believe
Guess what he could have answered to a new question by nothing: this is a model’s composition only to the owner, always under a header

The boundary lies between the second and third layers. This is the essence of this command.

Accumulation is disabled by default

digit portrait on      # включить накопление
digit portrait off     # выключить

The speech profile should not start collecting data just because the user updated the package. As long as data collection is not enabled, all the commands below will work and provide honest responses – they will simply indicate that the profile is empty.

A live run on a machine where the portrait was not included:

$ digit portrait style
[СТИЛЬ · измерено]
Стиль не измерен: ни одного сообщения владельца не наблюдалось.

$ digit portrait decisions
Ничего не найдено. Поиск лексический — синонимов не понимает; попробуйте
другие слова, прежде чем считать, что решений не было.

The second line is not an excuse, but an important property: an empty result does not prove the absence of a solution, and the team points this out itself, instead of letting the reader draw a false conclusion.

Stage 1: Style – measured, not ascribed

digit portrait style displays the median length of the message and phrase, the proportion of questions and imperatives, switching to Latin characters in the middle of a Russian phrase, distinctive vocabulary, and, most importantly, the words the owner uses to refuse, hesitate, and agree.

The literal surface («мимо» ×7) is placed in the portrait, not the class name «refusal»: it is precisely this that will have to be reproduced. Distinctiveness is calculated as log-odds against the background of the assistant’s responses, so the word «distinctive» acquires a precise meaning — what the owner says, but the model does not say in its place.

Each digit stores the number of observations. As long as there are fewer than twelve messages, the report refers to itself as preliminary.

There are no psychotypes here. Neither MBTI, nor socionics, nor archetypes: they lack proven predictive power, and the system built on them sounds confident only where it knows nothing. “Logical introvert” cannot be verified or refuted; “refuses with the word ’no’ in 7 out of 9 refusals” — both are possible.

Layer 2: Solutions — Facts with Provenance

digit portrait decisions [слова для поиска] — a log of previous decisions literally, with a reference to the session and time. Not a retelling: it retells the model, and then the record ceases to differ from a guess.

A phrase is added to the log only if it contains both a commitment marker (“we will switch to,” “we will not,” “from this moment on”) and a specific subject (path, identifier, version, name in backticks). “Let’s make it beautiful” is a marker without a subject, meaning it was said in passing. Plus, it is rejected if it is a question, hypothesis, retelling of someone else’s solution, an indefinite statement without a subject, or a line of data structure.

The entry has two levels of evidence, and the difference is visible in the report:

  • said — the phrase was uttered, but no action followed in this turn;
  • done — in the same turn, the agent invoked modifying tools, and their names are recorded.

Reading tools are deliberately not considered as evidence: with bash and git in the “done” list, it became almost always true, which means it ceased to have any meaning.

A later decision does not erase the previous one, but marks it as canceled with a separate line in the log (--all will show both the current and canceled decisions). The history of choices is part of the profile: only the one who keeps both moves knows that “we switched from X to Y, and then returned.”

Layer 3: the guess – and three fences around it

digit portrait draft "вопрос" gathers a brief for the response in the manner of an owner. The module itself does not compose the text; it provides style constraints, found solutions with quotes, and a section called GAPS — what is missing in the portrait.

Live run on a blank canvas:

$ digit portrait draft "стоит ли переходить на pnpm"
[СТИЛЬ · измерено]
Стиль не измерен: ни одного сообщения владельца не наблюдалось.

[РЕШЕНИЕ · факт со ссылкой]
Ничего: в портрете нет решений по этому вопросу.
Всё, что будет сказано ниже, — сочинено.

[ДОГАДКА · сочинено моделью, не владельцем]
…

[ПРОБЕЛЫ]
— стиль не измерен — воспроизводить нечего
— решений по этому вопросу нет — поиск лексический, попробуйте другие слова

An empty solutions section means that the entire answer will be composed entirely, and the owner must see this before reading the beautiful paragraph.

The entire Digit construct relies on the fact that the content is not composed by the model; a twin, by definition, composes. They cannot be combined; they can only be fenced, and the fence is in three places in the code:

  1. A layer is a class attribute, not a field: an instance cannot declare itself as another layer;
  2. There is only one door leading out, and it throws an exception instead of setting a flag: silent throwing will one day become silent passing;
  3. A guess is not stored anywhere – it has no file and no writer, which is confirmed by the test. A recorded guess is indistinguishable from a recorded solution after a week.

digit portrait draft --outside shows the same thing from the perspective of someone who is not the owner: only entries with links. When there are none, the answer is “there is nothing to say on his behalf.” This is the correct answer, not a bug that needs to be fixed.

Where is it located and what is passed when transferring the machine

A portrait is the most sensitive data in the system: it’s not about “what a person did,” but about “how they are structured in terms of speech.” Therefore, it exists separately:

  • $DIGIT_HOME/portrait/ — its own directory with 0700 permissions, 0600 files;
  • memories/ is located nearby and falls into digit backup, agent import and profiles — the portrait should not end up there;
  • nothing goes into the system prompt. Neither the prompt block nor the pre-loading. Otherwise, you would have to pay for the portrait with each request and include the speech profile of the owner in every log of every model provider. The portrait is read explicitly — using this command or a corresponding tool;
  • it is not transmitted to external memory providers.

There are exactly two files: style.json (sufficient statistics) and decisions.jsonl (log, only appending). There is no third one, nor will there be—this is the absence of a file for the hypothesis.

View the complete machine-readable profile: digit portrait --json. In this result, the guess has "stored": false with the note “the guess is not stored; it is collected on request” — the same property, but in a form that can be checked by a script.

Passing the session to another person does not transfer the portrait: the records refer to the session, there is no reverse link, and the other person works under their own $DIGIT_HOME. If the machine itself is transferred:

digit portrait forget --session <префикс id>   # убрать одну сессию
digit portrait forget --all                    # снести всё

Create a portrait from the archive

Typically, the profile is populated as the conversation progresses, and there is no separate “remember” command. But if the correspondence is already stored in files, it can be processed all at once:

digit portrait ingest ПУТЬ [ПУТЬ …]   # файлы или каталоги с *.jsonl
digit portrait ingest ПУТЬ --dry-run  # посчитать, но не писать

By default, a message whose opening has already appeared twice is skipped (--no-dedupe disables this). The filtering is not cosmetic: in the archives, the “user” role is assigned not only to a person but also to template briefs from orchestrators — and the profile, assembled without filtering, measures them, not the owner.

What is measured

On the live archive: 487 transcripts, 6,146 messages from the “user” role.

2,613 of them were discarded as template spam – in the archives, the “user” role is not only held by a person, and the same opening line appeared 468 times. The profile compiled without this filtering measured the orchestrator: 1.40 emojis per message versus 0.33 afterward.

There are 3,533 messages left from the owner → 650 solution records (18 per 100 messages); 519 “done,” 131 “said”; 316 active, 334 canceled. On a short conversational corpus, the density is lower: 34 messages → 5 records.

When the portrait becomes non-empty: the first solution is in the 7th message, stable average style is achieved from the 12th message, and the first repeated formulation of a speech act occurs in the 101st message. The latter is the honest threshold for “it is possible to write in his style”: one phrase, said once, does not constitute a style.

The accuracy of extraction on the manually labeled random sample of 40 entries is 37 out of 40. Three misses: descriptive prose that fell under the marker.

The proportion of facts and assumptions in what the portrait stores: 100% — entries with a verbatim quote and a link to the source. There are zero assumptions, and this is no coincidence — there is no file for them.

The cost of an operation with a profile consisting of 3,533 messages and 650 decisions is 17 ms median, and it is calculated in a background thread, not on the user’s path. Reading the log takes 7.7 ms, searching it takes 26 ms, and building the style report takes 11 ms.

Boundaries stated aloud

Lexical search. It does not understand synonyms, and an empty result does not prove the absence of a solution. That is exactly why both the draft and the command line mention this in the answer itself.

Inserted logs are visible in the lexicon. Markup and code blocks are removed from the speech, but the inserted log is not, and it becomes apparent in the distinctive words.

The portrait knows only one role. Trained on work correspondence, it knows how the owner writes tasks to the agent, and knows nothing about how he speaks with someone else.

Extraction accuracy is 37 out of 40, not 40 out of 40. Descriptive prose sometimes passes under the marker of commitment. The quote remains verbatim: the error lies not in the record itself, but in its attribution to decisions.

Code: agent/portrait/, skill skills/productivity/digital-portrait/. There is no English documentation for this command; it is described only here.

Spotted a mistake? Select a fragment of the text — a bug icon will appear next to it.

Нужен разбор именно вашей ситуации?

Статья описывает общий случай. Если у вас частный — можно разобрать его отдельно, платно. А если не хватает целого материала, предложите тему: её оплачивают вскладчину, и она выходит открытой для всех.

Доска запросов
Next