Patricia

официальный

Patricia подключает ваш ИИ-клиент к одному рабочему пространству Patricia. Читает память и файлы рабочего пространства, проверяет подключенные интеграции и делегирует задачи Patricia с контролем одобрения человеком.

Что можно делать с Patricia MCP?

  • Install the plugin — Install patricia from the patricia-app/patricia-plugin marketplace so Claude Code loads its skills, MCP server, and hooks.
  • Sign in to the MCP server — Authenticate the patricia server with OAuth via /mcp, or add it with a pat_mcp_ bearer token header.
  • Transfer workspace files — Declare sha256, byte_size, and content_type on create_file or update_file, then complete the upload with its upload_id.
  • Read files as downloads — Call read_file with as_download_url=true to get metadata and a temporary signed GET URL.
  • Recall memory before prompts — The recall hook adds relevant memory to eligible prompts using one search_memory call when a token is set.
  • Propose memory writes — The memory bridge and push reminder propose remember with an explicit scope; they never write to Patricia themselves.

Документация

[!NOTE] Этот репозиторий сгенерирован из bettergroupinc/patricia-monorepo в plugins/patricia/. Автоматизация синхронизирует это публичное зеркало. Исходный коммит: df2bda0088e804342599b2b58d411e65a4cfd8d7. Создавайте запросы на слияние и задачи в монорепозитории.

Плагин patricia Claude Code

Установите его один раз, и агент будет правильно использовать MCP-сервер Patricia, без дополнительных напоминаний.

В него входят три компонента.

  1. Рекомендации. Пять навыков охватывают основы Patricia, адаптацию, делегирование задач, интеграции и мост памяти.
  2. Подключение к MCP. При установке настраивается сервер Patricia Streamable HTTP для входа через OAuth.
  3. Пять локальных хуков. Они адаптируют проекты, извлекают воспоминания, сначала проверяют интеграции и предлагают отправить воспоминания. Они никогда ничего не записывают в Patricia.

Это распространяемый плагин Claude Code. Пользователь устанавливает его на собственном компьютере, и он работает в сеансе Claude Code этого пользователя. Это не каталог навыков продукта Patricia, и внутри Patricia ничего из него не запускается.

Установка

claude plugin marketplace add patricia-app/patricia-plugin
claude plugin install patricia@patricia

Затем начните новый сеанс или выполните /reload-plugins.

Этот маркетплейс — https://github.com/patricia-app/patricia-plugin. Автоматизация генерирует каждый файл в нём из монорепозитория Patricia.

Примечание для участников: монорепозиторий закрытый. Участник с доступом может добавить сам монорепозиторий как маркетплейс, поскольку его корневой .claude-plugin/marketplace.json указывает плагин patricia на ./plugins/patricia.

Установите его. Не загружайте его с помощью --plugin-dir. У плагина, загруженного из каталога, доступны навыки, но не хуки, поэтому рекомендации будут работать, а мост памяти — никогда не сработает. Это проверили, а не предположили: пробный хук, загруженный через --plugin-dir, ни разу не запустился, тогда как тот же хук, объявленный в настройках проекта, сработал при той же записи в том же безголовом режиме. Claude Code регистрирует hooks/hooks.json плагина только для установленного и включённого плагина.

claude plugin details patricia показывает, что было установлено:

Component inventory
  Skills (5)  delegating-work, integrations, memory-bridge, onboard, using-patricia
  MCP servers (1)  patricia
  Hooks (5)  SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop

Вход на MCP-сервер

Плагин настраивает MCP-сервер без сохранённого заголовка. При первом использовании выполните /mcp и выберите Patricia. Также можно запустить процесс OAuth из терминала:

claude mcp login plugin:patricia:patricia

Вход через MCP OAuth и персональный токен pat_mcp_ для хуков — это разные учётные данные. Одного OAuth недостаточно для активации хуков, которым нужен токен.

Если OAuth не подходит, вместо него используйте токен:

claude mcp add --transport http patricia https://api.patricia.app/v1/mcp \
  --header "Authorization: Bearer $PATRICIA_MCP_TOKEN"

Персональный токен pat_mcp_ указывает ответственное лицо и позволяет выполнять запись. Ключ API арендатора pat_live_ не указывает на конкретного человека, поэтому он доступен только для чтения и не может отвечать на list_skills или list_integrations.

Настройка персонального токена для локальных хуков

Для локальных хуков Python 3 должен быть доступен через команду python3.

Создайте персональный ключ pat_mcp_ в Patricia: Settings > AI tools > Advanced > API keys. Затем выберите один из вариантов настройки:

export PATRICIA_MCP_TOKEN="pat_mcp_..."

Или создайте этот файл по пути ~/.claude/patricia.json:

{
  "token": "pat_mcp_..."
}

PATRICIA_MCP_TOKEN имеет приоритет над файлом. Пустое значение PATRICIA_MCP_TOKEN отключает резервное использование файла. Так задумано. Это позволяет приостановить работу аутентифицированных хуков, не перемещая файл.

Передача файлов рабочей области

Сервер предоставляет 39 инструментов. Для передачи файлов используются режимы в create_file, update_file и read_file.

  • Для записи встроенных данных передайте content или content_base64.
  • Для прямой загрузки укажите sha256, byte_size и content_type.
  • Завершите загрузку с помощью одноразового upload_id.
  • Прочитайте read_file(as_download_url=true), чтобы получить метаданные и временный подписанный URL для GET-запроса.

Для объявления создания также нужны name и kind. Для объявления обновления нужен file_id.

Сохраните JSON с результатом объявления в declaration.json рядом с file.pdf. Используйте Bash, jq и curl, чтобы отправить каждую возвращённую запись upload_headers. Подпись привязана к byte_size: отправьте ровно указанное число байтов с заголовком Content-Length; передача с фрагментированием завершится ошибкой.

declaration=declaration.json
file=file.pdf
mode=$(jq -er '
  if (.upload_id | type == "string" and length > 0) and has("upload_url") then
    if .upload_url == null and .already_stored == true then "reuse"
    elif (.upload_url | type == "string" and length > 0) and .already_stored == false
      and (.upload_headers | type == "object" and all(.[]; type == "string")) then "put"
    else error("Invalid upload declaration") end
  else error("Invalid upload declaration") end
' "$declaration") || { printf 'Invalid upload declaration.\n' >&2; exit 1; }
upload_id=$(jq -r '.upload_id' "$declaration") || exit 1
if [[ "$mode" == put ]]; then
  upload_url=$(jq -r '.upload_url' "$declaration") || exit 1
  headers=()
  while IFS= read -r header; do
    headers+=(--header "$header")
  done < <(jq -r '.upload_headers | to_entries[] | "\(.key): \(.value)"' "$declaration")
  status=$(curl --silent --show-error --output /dev/null --write-out '%{http_code}' \
    --request PUT "$upload_url" "${headers[@]}" --data-binary "@$file") || exit 1
  case "$status" in
    2??|412) ;;
    *) printf 'Upload refused: HTTP %s\n' "$status" >&2; exit 1 ;;
  esac
fi
# A null upload_url skips the PUT and goes straight to completion.
printf 'Complete with upload_id %s before its expiry.\n' "$upload_id"

Код 412 означает, что байты уже загружены по этому ключу. Вызовите complete с upload_id до истечения срока действия. После 412 значение [invalid_arguments] при завершении является окончательным: отправьте содержимое встроенным способом или попросите владельца поделиться им; не создавайте новое объявление.

Контрольная сумма — это кодирование в base64 необработанных байтов дайджеста SHA-256. Значение URL загрузки null означает, что Patricia может повторно использовать байты из активного файла, доступного этому пользователю. При завершении повторно проверяется доступ и подтверждаются сохранённые байты. Для завершения создания передавайте только upload_id. Для завершения обновления передавайте file_id и upload_id. Не смешивайте поля встроенных данных, объявления и завершения.

При завершении возвращаются id, version, byte_size, sha256 и доступное значение console_url. При завершении создания также возвращается sharing_note. В режиме скачивания возвращаются id, version, byte_size, sha256, content_type, download_url и поля срока действия. Используйте подписанный URL для GET-запроса, чтобы скачать байты вне диалога. Ответ на скачивание не содержит текстовых полей или полей с содержимым в формате base64. Для устаревшего содержимого базы данных возвращается [download_unavailable]; обычное чтение текста по-прежнему доступно.

Локальные хуки

Все пять хуков включены по умолчанию. Если файл конфигурации отсутствует или в нём нет ключа хука, хук остаётся включённым. Если файл повреждён или недоступен для чтения, хуки отключаются. Чтобы отключить только один хук, задайте для указанного ключа этого хука буквальное значение false в ~/.claude/patricia-plugin.json.

Адаптация

  • Когда и что делает: SessionStart запускается при создании или возобновлении сеанса. Он приветствует подключённого пользователя и один раз для каждого проекта предлагает навык адаптации.
  • Стоимость: При наличии токена выполняется один вызов whoami. Тайм-аут сети — 3 секунды, тайм-аут хука — 10 секунд.
  • Отключение: для hooks.onboarding.enabled задайте значение false.
  • Конфиденциальность: При наличии токена с компьютера отправляется только аутентифицированный запрос whoami. Через этот хук не передаются запросы, стенограммы или содержимое проекта.

Извлечение воспоминаний

  • Когда и что делает: UserPromptSubmit запускается перед каждым отправленным запросом. Он пропускает команды, короткие ответы, подтверждения и ввод, состоящий только из кода. В подходящие запросы он добавляет релевантные воспоминания.
  • Стоимость: При наличии токена и подходящего запроса выполняется один вызов search_memory. Тайм-аут сети — 3 секунды, тайм-аут хука — 8 секунд.
  • Отключение: для hooks.recall.enabled задайте значение false.
  • Конфиденциальность: В Patricia отправляется не более 300 символов свёрнутого текста запроса. Этот текст отправляется только при настроенном токене.

Сначала интеграции

  • Когда и что делает: UserPromptSubmit проверяет запрос. PreToolUse проверяет ввод WebFetch, WebSearch и Bash перед запуском инструмента. Локальный каталог распознаёт известных поставщиков.
  • Стоимость: Хук не выполняет вызовов MCP или сети и не требует токена. Тайм-аут хука — 8 секунд для запроса и 5 секунд перед вызовом инструмента.
  • Отключение: для hooks.integrations_first.enabled задайте значение false.
  • Конфиденциальность: Ничего не покидает компьютер. Хук локально проверяет запрос или ввод инструмента.

Мост памяти

  • Когда и что делает: PostToolUse запускается после Write, Edit или MultiEdit. Он обнаруживает сохранённую локальную заметку памяти и предлагает выполнить remember с явной областью действия.
  • Стоимость: Хук не выполняет вызовов MCP или сети. Тайм-аут хука — 5 секунд.
  • Отключение: для hooks.memory_bridge.enabled задайте значение false. В устаревшем файле ~/.claude/patricia-memory-bridge.json также можно задать для enabled значение false.
  • Конфиденциальность: Скрипт локально читает сохранённую заметку и ничего не отправляет по сети. Он возвращает Claude Code путь к заметке и текст напоминания, но не содержимое заметки.

Напоминание об отправке

  • Когда и что делает: Stop запускается по завершении работы агента. Он предлагает выполнить remember после локальной записи в память или продолжительного сеанса с использованием инструментов, в котором ничего не было записано в память Patricia.
  • Стоимость: Хук не выполняет вызовов MCP или сети. Тайм-аут хука — 8 секунд.
  • Отключение: для hooks.push_reminder.enabled задайте значение false.
  • Конфиденциальность: Хук читает не более 5 МБ локальной стенограммы и ничего не отправляет. Он запускается только при настроенном токене, поэтому предложенный вызов памяти можно выполнить после согласия пользователя.

Сеть и учётные данные

Этот плагин подключается к https://api.patricia.app/v1/mcp по протоколу Streamable HTTP.

Patricia использует OAuth 2.1 с PKCE S256. После завершения процесса OAuth клиент получает персональный токен pat_mcp_ типа bearer.

Манифест плагина не содержит учётных данных. После входа клиент отправляет токен bearer на api.patricia.app.

Другие маркетплейсы

  • Cursor считывает plugin.json и mcp.json из этого пакета.
  • OpenAI Codex и ChatGPT считывают .codex-plugin/plugin.json.
  • Для записи удалённого источника манифест не нужен. xAI считывает .claude-plugin/plugin.json, если он есть.

Все пакеты маркетплейсов указывают на одно дерево skills/ в этом пакете.

assets/icon.png — фирменный ресурс Patricia, предоставленный правообладателем.

Мост памяти предлагает, но никогда не записывает

Хук — это команда оболочки. У него нет клиента MCP, он не получил ни от кого согласия и не может прочитать заметку и отличить командный факт от личного. Хук, который отправлял бы каждую локальную заметку в общую рабочую область, незаметно показывал бы всей команде заметки, привязанные к конкретному компьютеру, временные и личные. Именно этого сбоя мост призван избежать, а не отложить на будущее.

Поэтому хук делает только одно: добавляет hookSpecificOutput.additionalContext, сообщая агенту, что заметка доступна только локально, а для remember требуется scope. Агент определяет область действия, спрашивает пользователя и выполняет вызов. И решение, и запись остаются в одном месте.

Работу хука ограничивают четыре условия:

УсловиеРезультат
В любой из поддерживаемых конфигураций для значения enabled моста задано falseНичего не происходит. Без этого значения мост включён.
Указанный путь находится вне каталога памятиНичего не происходит.
Запись не была выполнена или файл пустНичего не происходит.
В заголовке заметки указано patricia: skipНичего не происходит.

Кроме того, одна и та же заметка предлагается не более одного раза за сеанс, поэтому за Write с последующей серией вызовов Edit появляется одно напоминание, а не четыре. Запись хранится в ~/.claude/patricia-memory-bridge-state/: по одному файлу на сеанс; файлы удаляются через семь дней.

Для этого не используется CLAUDE_PLUGIN_DATA. Эта переменная присутствует в окружении хука, но она не всегда указывает на каталог самого запущенного плагина: хук уровня проекта на этом компьютере обнаружил, что она указывает на ~/.claude/plugins/data/codex-openai-codex, каталог данных постороннего плагина.

Какой инструмент фактически используется для записи в память

В Claude Code 2.1.238 объявлены инструменты с именами memory_list, memory_read и memory_write. Однако на компьютерах, для которых создавался этот плагин, заметки памяти записываются не с их помощью: проверка 120 последних стенограмм сеансов выявила 49 вызовов Write и 35 вызовов Edit для ~/.claude/projects/*/memory/ и ни одного вызова memory_write.

Поэтому сопоставление выполняется по Write|Edit|MultiEdit. memory_write намеренно исключён. Добавление сопоставления для инструмента с непроверенной структурой данных создаёт хук, который незаметно никогда не срабатывает и выглядит точно так же, как работающий. Добавьте его, когда будет прочитана реальная структура данных memory_write.

Рекомендации и постоянное правило сервера — это одна копия, а не две

start_onboarding_import может вернуть standing_rule_to_offer с ask_first, instruction и блоком markdown, размер которого рассчитан на то, чтобы поместиться в CLAUDE.md другого пользователя. Навык не повторяет этот блок. Он указывает агенту вызвать инструмент и использовать полученный результат, поэтому сервер остаётся единственным источником этой формулировки.

Альтернативой было бы получать его при установке, но это не работает. SKILL.md плагина — это статический текст в кэше с адресацией по содержимому; шага установки, который мог бы его переписать, нет. Кроме того, плагин, предназначенный для настройки Patricia, не может зависеть от работающего аутентифицированного подключения к Patricia, чтобы сформировать собственные инструкции. Получение текста инструмента во время использования даёт ту же единственную копию без всех этих проблем.

Каждое имя инструмента здесь соответствует реальному инструменту

Каждый идентификатор инструмента в обратных кавычках в этом плагине сверяется с собственным реестром инструментов сервера — списком, который сервер формирует tools/list. Та же проверка подтверждает, что найден непустой набор идентификаторов, поэтому неисправный экстрактор не сможет пройти проверку, ничего не найдя.

Примечание для участников: эта проверка — backend/api/tests/test_patricia_claude_plugin.py в монорепозитории Patricia; она запускается при каждом изменении этого плагина.

Настройки и поиск файлов

ИнструментНазначение
get_settingsПросматривать настройки или читать выбранные ключи и группы с описаниями, значениями и разрешениями. Оба типа учетных данных позволяют читать группы рабочей области.
update_settingsИзменять одну разрешенную группу с помощью операции панели управления. Требуется персональный токен.
list_filesПросматривать файлы. На первой странице отображаются папки и количество элементов с учетом настроек видимости.
get_brand_kitЧитать фирменные цвета, типографику и логотипы.

Для профиля компании используйте get_settings(keys=["company_profile"]). Инструменты настроек используют тот же каталог и те же операции, что Patricia применяет в чате. Для изменения настроек в чате требуется нажатие со стороны инициатора запроса. Изменение политики подтверждения влияет на запуски в консоли; для критически важных действий и действий, требуемых поставщиком, сохраняется минимальный уровень подтверждения, а для действий, о которых Patricia уже спрашивает, сохраняются минимальные уровни для аудитории и подтверждения нажатием.

Чтение интеграции ожидает, пока не завершится другая задача для того же пользователя. Проверьте состояние этой задачи с помощью get_task_status или дождитесь ее завершения. После прямого подтверждения интеграции следуйте предложению next, возвращенному decide_approval. Для получения результата проверьте get_task_status, указав идентификатор задачи. Не вызывайте инструмент повторно: Patricia выполнит одобренное действие один раз. Вызов после завершения — это новый запрос; действующие правила подтверждения определяют, потребуется ли предварительное подтверждение. Следуйте инструкции next: для сохраненных в Billit проверок и подтверждений без сохраненной личности инициатора может потребоваться повторить тот же вызов.