Навык museum-source-access

← назад, ко всей доске · копия рабочего документа проекта · 17.10.2026 17:08 МСК · Загрузчик навыка (~/.claude/skills) и его канонический текст. · вырезано секретов/адресов: 3

Исходник: ~/.claude/skills/museum-source-access/SKILL.md

name: museum-source-access
description: Получение российских музейных и архивных материалов при прямом доступе, сетевых отказах и недоступности российского моста. Использовать при поиске карточки, скана или источника для любого музея Русской цивилизации; не заменяет предметный навык и проверку прав.

Доступ к российским источникам

Использовать существующий общий загрузчик проекта; не создавать личный прокси, параллельный реестр или отдельный загрузчик для каждого агента.

Порядок и команды: /home/agent/projects/russian-civilization/docs/registries/autonomous-access.md (полный путь: из worktree превью-сайта папки docs/registries нет). Базы по музеям: /home/agent/projects/russian-civilization/docs/registries/README.md.

Проверенная карточка для проверки установки и порядок переноса в другой контейнер даны в общем маршруте. Успешная проверка одного агента не доказывает установку у других.


Исходник: ~/projects/russian-civilization/docs/registries/autonomous-access.md

Самостоятельный доступ для всех музейных агентов

Один runtime — access.py, одна база — sources.json, один навык — docs/skills/museum-source-access/SKILL.md. Работает из любого текущего каталога, Python 3 со стандартной библиотекой; дополнительные сертификаты берутся из certificates/ с проверкой SHA. Браузер/поиск подключаются средствами конкретного агента и не являются обязательной зависимостью прямой загрузки.

Предмет, затем маршрут

  1. Выбрать профильный фонд через query.py --museum <профиль>. Это поиск фондов, не предметов. Если точный URL известен, сразу загружать его.
  2. Получить точный документ с ожидаемым фрагментом. Использовать отдельную папку результата на задачу, чтобы агенты не перезаписывали файлы друг друга.
  3. При отказе найти ту же карточку через веб-поиск, «Артефакт» или музей-хранитель. Сопоставить название, автора, дату, инвентарный номер. Если это другой предмет, отметить альтернативу и не выдавать её за исходный документ.
  4. Если точный оригинал остаётся недоступен, использовать индексированные сведения только как сведения из индекса; исторические файлы моста — только как снимки. Уникальный недоступный скан остаётся отдельной зависимостью, остальная работа идёт.
RC_PROJECT_ROOT="${RC_PROJECT_ROOT:-$HOME/projects/russian-civilization}"
/usr/bin/python3 "$RC_PROJECT_ROOT/docs/registries/access.py" \
  --url https://ar.culture.ru/ru/subject/burlaki-na-volge-1 \
  --contains 'Бурлаки на Волге' --require-exact --out-dir /tmp/source-access-sample

/usr/bin/python3 "$RC_PROJECT_ROOT/docs/registries/access.py" \
  --source goskatalog --query 'название предмета инвентарный номер' \
  --discover --out-dir /tmp/source-discovery

Второй вызов только составляет план: status=discovery_only, artifacts=[]. Агент сам исполняет предложенные запросы своим доступным поисковым инструментом, открывает найденную точную карточку и повторяет первый вызов с её URL. Нет поискового инструмента — использовать прямые каталоги и известные фонды, зафиксировав not_searched; не имитировать поиск из памяти.

--require-exact требует непустой --contains; код 0 означает полученное тело исходного URL с ожидаемым фрагментом. Перенаправление на другой URL, другая коллекция или исторический снимок дают код 2 в этом режиме. Каноническое перенаправление можно открыть, проверить и запросить его конечный адрес явно. Это машинная проверка адреса и текста, не экспертная атрибуция или разрешение публиковать изображение. HTML-карточка, полный текст, скан и оригинал изображения проверяются раздельно. Без --require-exact сохранено прежнее поведение: код 0 может означать альтернативный материал; читать relation в отчёте.

Что реально подтверждено

23.09.2026 напрямую скачана указанная карточка «Артефакта» с ожидаемым текстом. Это одна проверенная карточка, не проверка всего каталога или российского IP. Поиск показал метаданные карточек ГИМ и НЭБ; их прямая загрузка не подтверждена. Действующий российский мост не прислал heartbeat. Развёртывание облака не выполнено. Не записывать сайты целиком как недоступные по одному адресу; не записывать их целиком как доступные по одной удачной карточке. Повторять адресную проверку при использовании материала в другой задаче.

Установка в контейнер каждого агента

Проверенный общий runtime и навык должны находиться в клоне проекта. Не копировать один access.py: нужны реестры, transport.py, сертификаты и связанные описания. После получения версии проекта выполнить в каждом контейнере от его пользователя:

/usr/bin/python3 "$RC_PROJECT_ROOT/docs/registries/install-source-skill.py" \
  --apply --report /tmp/source-skill-install.json
/usr/bin/python3 "$RC_PROJECT_ROOT/docs/registries/install-source-skill.py" \
  --check --report /tmp/source-skill-check.json

Установщик добавляет общий навык в .codex/skills и .claude/skills текущего пользователя, а существующим музейным навыкам добавляет небольшой блок маршрута. Для другого загрузчика указать его каталог через --skills-dir. Остальной текст навыков сохраняется. Он не меняет модели, секреты, конфигурацию ботов, PAUSED или чужие домашние каталоги. Повторный запуск не дублирует блоки. Сначала допустим --check: отсутствующая установка возвращает код 2 и список различий.

Затем выполнить живую загрузку карточки из первого примера. Сохранить оба отчёта отдельно для каждого контейнера. Установка подтверждается SHA runtime и навыка, сеть — конкретным report.json. До получения этих квитанций статус других контейнеров — «не проверено», даже если проект доступен всем агентам.

Подготовленные варианты российского узла: continuous-access.md continuous-access.md. Они нужны для оставшихся уникальных оригиналов, а не для начала всякой работы.

Российский выходной узел (10.10.2026)

Сайты .ru/.su/.рф, закрытые для зарубежного адреса (Госкаталог, Культура.РФ, НЭБ, Росархив, Минобороны), transport.py ведёт через SSH-туннель на российский сервер [вырезано] (ru_tunnel.py, настройки — ru-route.json). Туннель поднимается сам при первом запросе, через час простоя выходит. TLS сквозной, на узле ничего не установлено. Узел недоступен — запрос идёт напрямую, как без маршрута. Работает там, где читается ключ ~/.ssh/id_ed25519_target (контейнер Джарвиса); у исполнителей маршрут спит. Выключить: "enabled": false или RC_RU_ROUTE=0. «Память народа» отвечает 401 и с российского адреса — это вход на сайт, не география.

Вход через rf-proxy и поиск Госкаталога (12.10.2026)

Прямое подключение к [вырезано] из контейнера закрыто (timeout) — помощники из-за этого получали «не найден». ru-route.json → "node": "rf-proxy" (тот же вход, что у tools/rf-ssh.py). Старый процесс ru_tunnel.py serve на [вырезано] с прежним адресом надо убить (kill по /proc/*/cmdline), иначе запросы идут в него. Проверено 12.10: Госкаталог, РЭМ, Русский музей, АОНБ — 200. aonb.ru не отдаёт промежуточный сертификат → certificates/globalsign-alphassl-2025.pem. Госкаталог без заголовка User-Agent браузера отвечает 403. Поиск: POST https://goskatalog.ru/muzfo-rest/rest/exhibits/ext?statusIds=6&publicationLimit=false&limit=N&offset=0&q=<запрос>&calcCountsType=1, тело [], ответ objects[]. artefact.culture.ru рвёт соединение — не решено.