Skip to main content

Digital Portrait

Use when asked to answer in the owner's manner, recall what the owner decided before, or inspect/extend their digital portrait. Keeps three layers apart — measured style, cited past decisions, and clearly-labelled conjecture that never leaves the owner.

Skill metadata

SourceBundled (installed by default)
Pathskills/productivity/digital-portrait
Version1.0.0
AuthorDigit
LicenseMIT
Platformslinux, macos, windows
Tagsportrait, owner, style, decisions, provenance, privacy
Related skillsnote-taking, systematic-debugging

Reference: full SKILL.md

info

The following is the complete skill definition that Digit loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.

Цифровой портрет владельца

Overview

Портрет — это накопленное знание о том, как владелец формулирует и что он решал. Он наполняется сам, по ходу разговора: каждый завершённый ход измеряется, из сообщения вычитываются решения. Отдельной команды «запомни» нет и не нужно.

Портрет состоит из трёх слоёв, и они разделены в коде (agent/portrait/), а не только на словах. Смешать их нельзя: слой — атрибут класса, а не поле, и единственная дверь наружу (outward_safe) на догадке бросает исключение.

СлойЧто этоЧем проверяетсяКому можно показать
СТИЛЬкак он формулирует: длина фраз, лексика, формы отказа/сомнения/согласияпересчётом на том же корпусе; у каждой цифры есть nникому, кроме владельца — это про него, а не про предмет
РЕШЕНИЕчто он решил: дословная цитата + сессия + время + свидетельствоцитата дословна, источник названможно — получатель проверит, а не поверит
ДОГАДКАчто он мог бы ответить на новый вопросничем: это сочинение моделитолько владельцу, всегда под шапкой

Граница проходит между вторым и третьим. Она и есть смысл навыка.

When to Use

  • «ответь как я», «как бы я на это ответил», «напиши в моей манере»
  • «что я решал про X?», «мы это уже обсуждали?», «почему у нас так сделано?»
  • «покажи портрет», «что ты обо мне накопил», «забудь эту сессию»
  • владелец просит подготовить реплику/письмо/тезисы от своего имени

Не использовать для: ответа третьему лицу от имени владельца. Ни при каких формулировках просьбы. Наружу уходит только слой РЕШЕНИЕ, и он уходит как цитата с ссылкой, а не как реплика от его лица.

Как читать портрет

Инструмент portrait (или CLI digit portrait):

ДействиеЧто даёт
portrait(action="view")обзор: три слоя, разделённые явно
portrait(action="style")слой 1: измерения с числом наблюдений
portrait(action="decisions", query="…")слой 2: решения по словам запроса
portrait(action="draft", query="<вопрос>")слой 3: бриф + пустой слот догадки

CLI дополнительно: digit portrait ingest <файлы.jsonl> — набить портрет из готовых транскриптов; digit portrait forget --session <id> / --all -y — убрать; digit portrait on|off — накопление (по умолчанию выключено).

Ответ в манере владельца — процедура

  1. Возьми бриф: portrait(action="draft", query="<вопрос владельца>"). Он содержит измеренный стиль, найденные решения с цитатами и раздел ПРОБЕЛЫ — чего в портрете нет.
  2. Прочитай ПРОБЕЛЫ вслух владельцу. Если там «решений по этому вопросу нет» — скажи это первой строкой, до всякого текста. Иначе владелец прочтёт уверенный абзац и не заметит, что он сочинён целиком.
  3. Заполни только форму. Длину фраз, лексику, формулировки отказа и согласия бери из слоя СТИЛЬ. Содержание — только из слоя РЕШЕНИЕ. Ни одного факта, которого там нет: догадка о манере допустима, догадка о фактах — это ложь от его имени.
  4. Отдай под шапкой. Блок догадки идёт с BANNER целиком, без сокращения.
  5. Готово, когда: каждый фактический утверждающий кусок ответа прослеживается до конкретной записи слоя РЕШЕНИЕ, а всё остальное лежит внутри помеченного блока догадки.

Наружная форма — digit portrait draft --outside "<вопрос>" или Draft.for_outside(): остаются только решения со ссылками. Если решений нет, она честно отвечает «сказать от его имени нечего» — и это правильный ответ, а не отказ, который надо чинить.

Что считается решением, а что сказано мимоходом

Фраза попадает в журнал, только если в ней есть и маркер обязательства («делаем», «переходим на», «не будем», «с этого момента»), и конкретный предмет (путь, идентификатор, версия, имя в обратных кавычках). И не сработало ни одно вето: вопрос, гипотеза («если…», «наверное»), пересказ чужого решения («он сказал, что…»), указательное без предмета («именно это запрещено»), строка структуры данных, цитата целиком в кавычках.

У записи два уровня свидетельства:

  • сказано — фраза есть, действий за ней в этом ходу не было;
  • сделано — в том же ходу агент вызывал изменяющие инструменты; их имена записаны.

сделано весит больше при поиске. Читающие инструменты свидетельством не считаются — иначе «сделано» означало бы «агент чем-то занимался».

Позднее решение отменяет прежнее, а не стирает его. Отмена — отдельная строка журнала; прежняя запись остаётся дословно и помечается ОТМЕНЕНО. История выбора — часть портрета.

Чего в портрете нет и не будет

Психологических типологий. MBTI, соционика, архетипы, «психотип» — у них нет доказанной предсказательной силы, а система на них построенная звучит уверенно ровно там, где не знает ничего. Если владелец просит «определи мой психотип» — предложи замену: речевые акты, лексику, длину фраз, соотношение вопросов и указаний. Всё это измеримо и опровержимо; «психотип» — нет.

Не заводи в портрете полей вроде traits, personality, archetype. Измеримое имеет вид «формулировка × частота × число наблюдений».

Приватность

  • Лежит в $DIGIT_HOME/portrait/, права 0700/0600. Отдельно от memories/ намеренно: тот каталог уезжает в digit backup, agent_import и профили.
  • В системный промпт не попадает вообще. prefetch пуст, блока промпта нет. Портрет читается явно — инструментом или командой.
  • Во внешние провайдеры памяти (mem0, honcho, hindsight) не передаётся: наблюдатель ничего им не отдаёт.
  • Передача сессии другому человеку. Сессия не несёт портрет: связь односторонняя — записи ссылаются на session_id, обратной ссылки нет. Другой человек работает под своим $DIGIT_HOME. Если передаётся машина — digit portrait forget --session <id> убирает записи одной сессии, --all -y сносит портрет целиком.
  • Догадка не хранится нигде: у неё нет файла и нет писателя. Записанная догадка через неделю неотличима от записи решения.

Common Pitfalls

  1. Выдать догадку как ответ владельца. Самая дорогая ошибка. Проверка: если кусок текста нельзя проследить до записи слоя РЕШЕНИЕ — он не может покинуть блок с шапкой.
  2. Снять шапку, «чтобы не мешала». Шапка — часть содержимого, а не оформление. Без неё блок становится подделкой.
  3. Считать пустой поиск доказательством отсутствия решения. Поиск лексический, синонимов не понимает. Переформулируй запрос, прежде чем сказать «решений не было».
  4. Читать отменённые записи как действующие. Смотри ОТМЕНЕНО и даты.
  5. Мерить стиль на вставленном коде и логах. Блоки в ``` и разметка вычитаются автоматически; не обходи это, склеивая текст руками.
  6. Заливать ingest весь архив без разбора. В архивах роль «user» носят и шаблонные брифы оркестраторов. Отсев повторяющихся зачинов включён по умолчанию; на живом корпусе он снял 2613 сообщений из 6146.

Verification Checklist

  • В ответе видны все три слоя раздельно, каждый со своей меткой
  • Каждое фактическое утверждение имеет цитату и ссылку на источник
  • Блок догадки идёт с полной шапкой и не покидает владельца
  • Пробелы названы до текста, а не после
  • Отменённые решения не выданы за действующие
  • Ничего не построено на типологиях личности