Patricia
официальныйPatricia подключает ваш ИИ-клиент к одному рабочему пространству Patricia. Читает память и файлы рабочего пространства, проверяет подключенные интеграции и делегирует задачи Patricia с контролем одобрения человеком.
Что можно делать с Patricia MCP?
- Install the plugin — Install
patriciafrom thepatricia-app/patricia-pluginmarketplace so Claude Code loads its skills, MCP server, and hooks. - Sign in to the MCP server — Authenticate the
patriciaserver with OAuth via/mcp, or add it with apat_mcp_bearer token header. - Transfer workspace files — Declare
sha256,byte_size, andcontent_typeoncreate_fileorupdate_file, then complete the upload with itsupload_id. - Read files as downloads — Call
read_filewithas_download_url=trueto get metadata and a temporary signed GET URL. - Recall memory before prompts — The recall hook adds relevant memory to eligible prompts using one
search_memorycall when a token is set. - Propose memory writes — The memory bridge and push reminder propose
rememberwith an explicit scope; they never write to Patricia themselves.
Документация
[!NOTE] Этот репозиторий сгенерирован из
bettergroupinc/patricia-monorepoвplugins/patricia/. Автоматизация синхронизирует это публичное зеркало. Исходный коммит:df2bda0088e804342599b2b58d411e65a4cfd8d7. Создавайте запросы на слияние и задачи в монорепозитории.
Плагин patricia Claude Code
Установите его один раз, и агент будет правильно использовать MCP-сервер Patricia, без дополнительных напоминаний.
В него входят три компонента.
- Рекомендации. Пять навыков охватывают основы Patricia, адаптацию, делегирование задач, интеграции и мост памяти.
- Подключение к MCP. При установке настраивается сервер Patricia Streamable HTTP для входа через OAuth.
- Пять локальных хуков. Они адаптируют проекты, извлекают воспоминания, сначала проверяют интеграции и предлагают отправить воспоминания. Они никогда ничего не записывают в 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 проверок и подтверждений без сохраненной личности инициатора может потребоваться повторить тот же вызов.