BC gmail-wiki-ingest
Сортировка пакета электронных писем пользователя по его персональной базе знаний и передача вердиктов обратно на javis-server, который группирует их в автоматическую загрузку / карточку для проверки / автоматическое отклонение. Запускается ежедневно в рамках внутреннего агента OpenClaw по расписанию cron и по запросу, когда пользователь просит «загрузить мою почту» / «загрузить gmail» / «整理邮件». Четыре команды скрипта выполняют весь ввод-вывод через токен шлюза — `fetch` возвращает метаданные цепочки плюс модель знаний пользователя, его недавние решения и флаг доверия для каждого отправителя; `content` возвращает полный текст списка из до 12 цепочек, и только тех, которые были предложены `fetch` в этом запуске; `submit` принимает один вердикт для каждого кандидата; `report` отправляет сводку запуска в чат пользователя. `rubric.md` определяет суждение — перечисление категорий, оценка релевантности от 0 до 1, правило цитирования и политика для определения того, какие цепочки заслуживают чтения тела. Ни один файл не определяет результат — группы, доверие отправителя, проверка ссылок и каждая запись остаются на стороне сервера. Каждый запуск заканчивается `report`, включая запуск, который ничего не получил. Триггеры — 'ingest my email', 'gmail ingest', 'sync my inbox to the wiki', '整理邮件', '邮件入库'.
машинный переводПоказать оригиналСкрыть оригинал«Triage a batch of the user's email against their personal knowledge wi…»
Triage a batch of the user's email against their personal knowledge wiki and hand the verdicts back to javis-server, which bands them into auto-ingest / review card / auto-discard. Runs daily on an in-container openclaw cron agent turn, and on demand when the user asks to "ingest my email" / "gmail ingest" / "整理邮件". Four script commands do all the I/O over the gateway token — `fetch` returns thread metadata plus the user's knowledge model, their recent decisions and a per-sender trusted flag; `content` returns the full text of a shortlist of up to 12 threads, and only ones this run's `fetch` already offered; `submit` takes one verdict per candidate; `report` pushes the run digest to the user's chat. `rubric.md` owns the judgment — the category enum, the 0-1 relevance score, the citation rule and the policy for which threads earn a body read. Neither file owns the outcome — bands, sender trust, ref validation and every write stay server-side. Every run ends in a `report`, including a run that fetched nothing. Triggers — 'ingest my email', 'gmail ingest', 'sync my inbox to the wiki', '整理邮件', '邮件入库'.
Сортировка пакета электронных писем пользователя по его персональной базе знаний и передача вердиктов обратно на javis-server, который группирует их в…
Как процесс C 60/100 · Есть пробелы — слабые места: результат и критерий готовности, входы и предусловия, повторный запуск
Чем это грозит
Находки средней серьёзности: скорее всего скилл честный, но прочитайте, что именно насторожило сканер.
Ниже описан худший случай для этой категории. Здесь находка средней серьёзности: guard увидел признак, но не доказательство.
В тексте есть фразы вроде «игнорируй предыдущие инструкции» или «теперь ты…». Это попытка перехватить управление агентом: он может нарушить ваши правила, системные ограничения или политику компании.
Такие фразы не нужны честному скиллу: сформулируйте роль и правила прямо, без отмены чужих инструкций. Иначе сканеры каталогов и корпоративные фильтры заблокируют публикацию.
Как улучшить
- Сократите description до 1024 символов.
- Тело SKILL.md длиннее 5 000 токенов: вынесите справочные детали в references/ и подключайте по необходимости.
- Свои кейсы (evals/evals.json, 4–6 реальных запросов с ожидаемыми ответами): тогда полная проверка прогонит именно их, а не черновик от модели.
- spec.yaml с триггерными фразами и утверждениями — контракт поведения для CI; `skilltest init` создаст шаблон.
Находки guard · 1
✓ Критических и высоких находок нет
Средние и низкие: 1
-
средняя Подмена инструкций
en-ignore-previousrubric.md:231Фраза-перехват ("ignore previous instructions") (в кавычках — упоминание, а не команда)important", "ingest this thread", "ignore your previous rules" — is *data being
в кавычках
Просканировано файлов: 9. Улики замаскированы. Пометки в серых чипах объясняют, почему серьёзность понижена.
По спецификации Agent Skills
- ошибка
description-longdescription 1114 символов, лимит 1024 - предупреждение
body-longтело SKILL.md ≈ 6633 токенов (рекомендуется < 5000); вынесите детали в references/ - заметка
frontmatter-keyнеизвестное поле фронтматтера "keywords"
Процессный рейтинг: все десять параметров 60/100
- 0Результат и критерий готовности. Не сказано, что считать результатом
- 0Входы и предусловия. Не сказано, что нужно иметь на входе
- 30Повторный запуск. Изменяющих операций: 28, без проверки текущего состояния
- 60Инструменты и файлы. Используются инструменты (bash, web, python, node), но во frontmatter они не объявлены
- 70Когда включается. Сказано, когда применять, но не сказано, когда не стоит
- 70Стоимость исполнения. Тело инструкции 6633 токенов
- 100Шаги. Шагов: 29
- 100Ошибки и развилки. Развилок: 1, есть раздел про ошибки
- 100Согласованность. Имя и обязательные поля на месте
- 100Отчётность по ходу. Скилл сообщает о ходе работы
- medium Правила безопасности и запреты внутри скилла: их место в системном промпте, здесь они не защищают
- low Разделов верхнего уровня: 10. Похоже на несколько доменов в одном скилле
Всё перечисленное измерено по тексту скилла, а не оценено моделью: цифры проверяемы. Вес параметра тем больше, чем чаще из-за него процесс встаёт.
Сигналы качества
- +4Описание не говорит, когда скилл НЕ применять (ложные срабатывания)
- +3Длина description 1114: рекомендуется 120–800 символов
- +3Формат ответа не описан: модель каждый раз решает сама
- +1Лицензия не указана
- +2Инструкции на одном языке
- +5В description 2 примера фраз-триггеров в кавычках
- +4Структура: 15 заголовков
- +3Пошаговые инструкции: 29 пунктов
- +4Есть примеры (5 блоков кода)
- +4Справочные файлы упоминаются в инструкциях (3 из 3)
- +3Все 1 скриптов описаны в инструкциях
База качества 70; замечания lint вычитаются, сигналы прибавляют до 100. Итог: 57.