Skill: paper-search
SkillSearchThis skill should be used when the user asks to "найди новые статьи", "поищи свежие статьи по моей теме", "scan for new papers", or wants a library-aware arXiv shortlist added to the Operon Reading Kanban in Obsidian.
Then ask your AI: use the Skill: paper-search
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add it as a step in a pipeline you build on Ahel, or connect Ahel to Claude, ChatGPT, Cursor, Claude Code or Codex and ask your AI to use it.
What this skill tells your AI
The instructions your AI receives, as published by vepricov/claude-brainlab in skills/paper-search/SKILL.md and read by Ahel’s review.
Общий корпус лаборатории
Этот скилл только предлагает статьи и кладёт карточки на доску: в библиотеку и в общий корпус
ничего не попадает. Ввозит их /want-2-read (или /paper-ingest для одной статьи), и именно там
стоит обязательный шаг отправки в корпус. Не считать статью добавленной, пока она не появилась в
корпусе разделами: доска и библиотека это ещё не то, что видят остальные.
Goal
Сначала проверить колонку «Жду публикацию» и пометить [found] те карточки, у которых появилась публичная версия. Затем просканировать текущую Obsidian-библиотеку, вывести темы из живой структуры Literature/ и проектных карточек, найти свежие статьи arXiv за последние 30 дней, записать один обзорный файл в _inbox и завести по каждой найденной статье карточку в колонке «Инбокс» доски Reading плагина Operon. Решение принимает владелец, перетаскивая карточку из «Инбокса» в «Очередь»; ingest делает потом /want-2-read. Обзорный файл в _inbox остаётся: он служит журналом уже виденных arXiv ID, чтобы одни и те же статьи не всплывали в следующих поисках.
Boundaries
- Не использовать захардкоженные темы.
- Не предлагать статьи, которые уже есть в библиотеке,
_inbox,_trash, живых карточкахOperon/Reading/или архивеOperon/Archives/. - Не создавать отдельную папку
papers_<date>/. - Не создавать полные paper notes и не запускать
paper-ingest: подтверждение выражается переносом карточки владельцем из «Инбокса» в «Очередь», после чего ingest выполняет/want-2-read. - Все human-facing описания, статусы и инструкции в обзорном файле писать на русском.
- Не раскладывать статьи по отдельным спискам чтения: единственная очередь это доска Reading в Operon.
- Не запускать
paper-ingestсамому: этот скилл только кладёт карточки в «Инбокс». Ingest делает/want-2-readпо тем карточкам, которые владелец перетащил в «Очередь». - Не менять
statusни у одной карточки. Единственная разрешённая правка чужой колонки это префикс[found]и содержимое разделов у карточек в «Жду публикацию». - Не молчать про правки доски: каждое изменение статуса, заголовка или колонки проговаривается в чате.
Default Workflow
0. Проверить колонку «Жду публикацию» (всегда первым шагом)
До любого поиска пройти по живым карточкам со status: Reading.Жду публикацию:
VAULT="/Users/andrey/Library/Mobile Documents/iCloud~md~obsidian/Documents/shkodnik1917"
rg -l '^status: Reading\.Жду публикацию$' "$VAULT/Operon/Reading" -g '*.md'
Для каждой карточки поискать точное название в официальных источниках: arXiv, OpenReview,
Crossref/DOI, DBLP, страница венью. Записать paperLastChecked: <сегодня> независимо от исхода.
Если публичной версии по-прежнему нет — обновить только paperLastChecked и, если появились
новые детали поиска, дописать одну строку под ## Комментарии. Заголовок не трогать.
Если публичная версия найдена — оформить карточку по протоколу [found] ниже. Статус НЕ
менять: этот скилл не делает ingest, поэтому и двигать карточку ему не за что. Перенос в
«Очередь» сделает /want-2-read — но только после успешного полного ingest, а не по факту
находки. До этого карточка живёт в «Жду публикацию» с пометкой [found].
Протокол [found]
- Дописать префикс
[found]в начало H1 и вtaskTitle. Ровно один раз: если префикс уже стоит, не дублировать. Префикс нужен, чтобы на доске было видно, какие карточки ждать больше не надо. - Записать канонический URL в раздел
## arXiv. - Проставить во frontmatter
paperSource(arxiv|openreview|doi|venue),paperAvailability: public,paperLastChecked. - Удалить устаревший агентский отчёт о том, что статья не находится. Это единственный текст,
который скиллу можно стирать в
## Комментарии: собственные заметки владельца не трогать никогда. Вместо отчёта поставить callout находки. - Если старая заметка в
Literature/создавалась без доступного full text, оставитьpaperIngestState: pendingво frontmatter, чтобы/want-2-readсделал повторный полный ingest.
Итоговый вид карточки:
---
operonId: <7 символов>
taskTitle: '[found] <Заголовок статьи>'
status: Reading.Жду публикацию
priority: C
datetimeCreated: <ISO>
datetimeModified: <ISO, обновить>
paperSource: arxiv
paperAvailability: public
paperLastChecked: <YYYY-MM-DD>
---
# [found] <Заголовок статьи>
## Заметка
## arXiv
https://arxiv.org/abs/<ARXIV_ID>
## Тема
<тема>
## Комментарии
> [!success] Публичная версия нашлась DD-MM-YYYY
> Источник: arXiv `<ARXIV_ID>`, PDF доступен — https://arxiv.org/abs/<ARXIV_ID>
> Следующий `/want-2-read` сделает полный ingest и после него перенесёт карточку в «Очередь».
Если arXiv-версии не существует, а найден только OpenReview, DOI или страница венью:
## Комментарии
> [!success] Публичная версия нашлась DD-MM-YYYY
> Источник: OpenReview, ICML 2026 — https://openreview.net/forum?id=<ID>
> arXiv-версии не существует, поэтому `/want-2-read` не сможет зеркалить карточку на AlphaXiv:
> MCP умеет добавлять только arXiv-статьи. Ingest в Zotero и Obsidian при этом отработает.
Раздел ## arXiv при этом сохраняет своё имя (менять схему карточки нельзя), но содержит
канонический не-arXiv URL и строку arXiv-версии не существует.
Сообщить в чат
Про изменения на доске молчать нельзя: владелец должен понимать, что произошло, не открывая Obsidian. После шага 0 написать отдельным блоком, что именно проверено и что изменилось:
Проверил «Жду публикацию» (N карточек):
- [found] <Заголовок> — нашлась arXiv-версия 2605.24956, помечена [found], лежит в «Жду публикацию»
- <Заголовок> — публичной версии по-прежнему нет, обновил только дату проверки
Помеченные [found] следующий /want-2-read заингестит и сам перенесёт в «Очередь».
Если ничего не изменилось, всё равно написать одну строку: «Проверил «Жду публикацию»: N карточек, изменений нет.» То же правило действует для любого другого случая, когда скилл трогает статус, заголовок или колонку карточки: каждое такое изменение проговаривается в чате отдельной строкой.
1. Построить topic index из библиотеки
Работать от текущей структуры:
VAULT="/Users/andrey/Library/Mobile Documents/iCloud~md~obsidian/Documents/shkodnik1917/Literature"
Извлечь сигналы из:
- подпапок
Literature/<тема>/ - заголовков заметок
- тегов во frontmatter
- проектных карточек в
Papers/,Projects/,Staff/ - уже виденных arXiv ID в библиотеке,
_inbox,_trash,Operon/Reading/иOperon/Archives/
Нужно получить ранжированный инвентарь тем:
- доминирующие folder families
- повторяющиеся method keywords
- recurring model families
- application domains
Если библиотека меняется, набор тем тоже должен меняться автоматически.
2. Сформировать несколько topic bundles
Из strongest clusters сформировать несколько независимых поисковых направлений.
Примеры валидных паттернов:
- ключевые слова из названий заметок
- ключевые теги
- пары вроде
zeroth-order + llm,lora + hybrid,muon + pretraining
Нельзя:
- подставлять фиксированную тему из памяти модели
- использовать один общий запрос вместо нескольких узких
3. Искать параллельно через subagents
Для повышения полноты нужно запускать параллельных агентов, а не делать один линейный поиск.
Обязательное правило:
- выделить 3-6 topic bundles
- на каждый bundle запустить отдельного subagent через
Task - предпочитать
exploreдля поиска иgeneralдля более сложной агрегации - просить каждый subagent вернуть только релевантные свежие arXiv-кандидаты с кратким обоснованием
Схема примерная, темы берутся из живой структуры, а не отсюда. Прежней двухуровневой
таксономии (Optimization/, PEFT/, LLM/) больше нет ни в хранилище, ни в базе, ни на
AlphaXiv, ни в Zotero: темы плоские и называются одинаково во всех четырёх местах.
- агент 1:
zo-estimators - агент 2:
muon-sign-methods,muon-convergence-theory,non-euclidean-dependent - агент 3:
lora-basics,rank-budget,adapter-composition - агент 4:
llm-scaling,training-dynamics,learning-rate-schedules - при необходимости дополнительные агенты под
reinforcement-learningи прикладные темы
Каждый агент должен:
- искать статьи только за последние 30 дней
- исключать already seen arXiv IDs
- возвращать больше кандидатов, чем войдет в финальный shortlist
- отбрасывать weakly related papers сам, но с коротким reason
4. Использовать arXiv через реально доступный путь
Предпочтительный источник: export.arxiv.org.
Если один способ недоступен, агент должен попробовать другой рабочий read-only маршрут, но не должен останавливаться после первой неудачи.
При поиске учитывать только новые статьи за последние 30 дней.
5. Собрать единый shortlist
После параллельного поиска нужно:
- объединить кандидатов от всех subagents
- дедуплицировать по arXiv ID
- отфильтровать уже существующие статьи
- rerank по близости к текущей библиотеке
Ранжирование должно учитывать:
- совпадение с folder names
- совпадение с tags
- совпадение с темами из
Papers/,Projects/,Staff/ - близость к уже существующим research clusters
Нужно находить немного больше статей, чем в минимальном shortlist, но не превращать обзор в мусорную свалку. Обычно целевой диапазон: 8-15 хороших кандидатов, если материал реально есть.
6. Записать один overview file в _inbox
Использовать один файл:
Literature/_inbox/papers_DD-MM-YYYY.md
Не создавать папку papers_DD-MM-YYYY/.
Файл служит техническим журналом поиска и dedup по arXiv ID. Пользователь принимает статьи не через редактирование этого файла, а на доске Reading.
Если _inbox/ не существует, создать его.
7. Формат обзора
Обзорный файл должен быть целиком на русском и иметь формат примерно такого вида:
# Новые статьи - DD-MM-YYYY
Найдено N новых статей по M тематическим блокам.
## Откуда взялись темы
- ...
## <Тематический блок из реальной библиотеки>
### [1] Название статьи
**Предлагаемая папка**: `Literature/<тема>`
**arXiv**: <url>
**Дата**: YYYY-MM-DD
Короткое описание на русском:
- что делает статья
- почему она релевантна текущей библиотеке
- почему предложенная папка подходит лучше всего
Статус: `кандидат, еще не ingested`
## Слабые кандидаты
- Название — краткая причина, почему не вошло в основной список
Важно:
- тематические блоки должны идти из живой структуры библиотеки, а не из захардкоженной онтологии
- у каждой shortlisted статьи должна быть конкретная proposed destination folder
- нумерация должна быть стабильной для аудита и ссылок на кандидатов; решение о чтении принимается переносом карточки на Kanban
8. Сообщение пользователю
После записи обзора сообщать коротко:
Найдено N статей по M темам. Карточки добавлены в Reading → Инбокс.
Перетащи интересные статьи в «Очередь». Технический журнал: [[Literature/_inbox/papers_DD-MM-YYYY]]
9. Завести карточки в «Инбоксе» доски Reading
Сразу после записи обзорного файла, без ожидания одобрения: по одной карточке на каждую найденную статью. Владелец разбирает их перетаскиванием, и это дешевле, чем диалог «принять 2, 5, 7».
Operon/Reading/<Заголовок статьи>.md
Карточка использует ту же каноническую схему, что и /want-2-read: четыре раздела,
## Заметка пустой до ingest.
---
operonId: <7 символов, уникально: [a-z0-9]>
status: Reading.Инбокс
priority: C
datetimeCreated: <ISO, локальное время>
datetimeModified: <ISO, локальное время>
---
# <Заголовок статьи>
## Заметка
## arXiv
https://arxiv.org/abs/<ARXIV_ID>
## Тема
<человекочитаемая тема из тематического блока обзора>
## Комментарии
<одно-два предложения из обзора: чем статья задевает текущие проекты и почему предложена
именно эта папка>
Правила:
## Заметкаоставить ПУСТЫМ. Пустой раздел означает «через ingest не проходила», и именно по нему/want-2-readотбирает работу. Не писать туда заглушку.- Все четыре раздела присутствуют всегда, даже если раздел пуст.
## Темаэто человекочитаемая метка (LoRA base,Zero-order optimization,Muon), никогда не слаг вродеlora_baseи не хвост пути папки.operonIdдолжен быть уникален по всей папкеOperon/Reading/и поOperon/Archives/; проверить перед записью.- Имя файла всегда
Operon/Reading/operon-<operonId>.md(правило 11 в~/.claude/rules/alphaxiv-sync.md), никогда не заголовок статьи и не arXiv ID. Человекочитаемое имя живёт в YAML-полеtaskTitleи в H1: Operon показываетtaskTitle, а не basename. Заголовок вtaskTitleи H1 сохраняется как есть, включая двоеточия и$...$; санитайзить его не надо, потому что в имя файла он больше не попадает.taskTitleпри этом обязан быть корректным YAML-скаляром: заключить в одинарные кавычки, внутренний апостроф удвоить. - Если карточка с такой статьёй уже есть в любой колонке, второй не создавать.
- Статус всегда
Reading.Инбокс. Решение о чтении принимает владелец перетаскиванием.
После triage владелец использует две дополнительные колонки:
Жду публикацию— статья интересна, но публичной версии пока нет. Иpaper-search(шаг 0), и/want-2-readперепроверяют доступность на каждом запуске и помечают карточку[found], когда публичная версия появилась. Самpaper-searchстатус не меняет — он не ингестит.[found]карточка попадает в рабочий батч/want-2-read, получает полный ingest и после него переносится в «Очередь»: колонка означает «публичной версии ещё нет», и после разбора это уже неправда._Trash— явный отказ. Это terminal/cancelled status, но карточка остаётся видимой в колонке 14 дней: ночной архиватор (~/.local/bin/operon_daily_archive.py,--cancelled-grace-days) уносит отменённое вOperon/Archivesтолько после этого окна, в отличие отПрочитано, которое уходит на следующий день. Случайный сброс в корзину поэтому всегда можно откатить прямо на доске. Title и arXiv ID остаются частью dedup и в архиве.
Заполнением ## Заметка, **Zotero**: и подробного описания занимается /want-2-read
после ingest. Этот скилл ingest не делает и постоянные папки не трогает.
Для отклоненных статей:
- добавить запись в
Literature/_trash/paper-search_rejected.md - формат должен быть простым и пригодным для future dedup, например:
- 27-04-2026 — Title — https://arxiv.org/abs/2604.12345 — отклонено после daily shortlist
- в обзорном файле
papers_DD-MM-YYYY.mdперенести их в блок отклоненных или явно пометить как отклоненные
До решения пользователя никаких full notes и никаких Zotero moves.
Hard Rules
- NEVER использовать фиксированные темы вроде EEG, если библиотека этого не показывает.
- ALWAYS писать human-facing обзор по-русски.
- ALWAYS использовать один файл
Literature/_inbox/papers_DD-MM-YYYY.md. - NEVER создавать папку
papers_DD-MM-YYYY/. - ALWAYS запускать несколько параллельных subagents для поиска по разным topic bundles.
- NEVER пересказывать пользователю статьи, которые уже есть в библиотеке или были ранее staged/trashed.
- NEVER возвращать статьи, чьи карточки уже лежат в
Operon/Reading/илиOperon/Archives/, включаяReading._Trash. - ALWAYS заводить по карточке на статью в
Operon/Reading/со статусомReading.Инбокс, пустым разделом## Заметкаи всеми четырьмя каноническими разделами. - ALWAYS логировать отклоненные статьи в
Literature/_trash/paper-search_rejected.md, чтобы их ID больше не всплывали в shortlist. - NEVER класть найденное в папку «Want to read» на AlphaXiv. Эта папка означает «владелец решил читать» и синхронизируется с колонкой «Очередь», а
paper-searchкладёт кандидатов только в «Инбокс». Зеркалить на AlphaXiv будет/want-2-readпосле ingest. - BEFORE the owner moves a card to «Очередь», only the dedup overview and the
Reading.Инбоксcard may exist; no ingest, Zotero item, PDF, or permanent Literature note. - NEVER выставлять статус карточки выше «Инбокса»: перекладывать в «Очередь» решает владелец, а ingest потом делает
/want-2-read. - NEVER автоматически ставить
Жду публикациюили_Trash: это решения владельца на Kanban. - ALWAYS начинать запуск с шага 0: проверка колонки «Жду публикацию» и протокол
[found]. - NEVER двигать карточку из «Жду публикацию» в «Очередь» самому, даже когда публичная версия
найдена и бесспорна. Скилл ставит
[found]и сообщает; перетаскивает владелец. - ALWAYS дублировать в чат любое изменение доски: что проверено, что помечено
[found], что осталось без изменений. Владелец не должен открывать Obsidian, чтобы понять, что произошло. - ALWAYS удалять устаревший агентский отчёт «в интернете ничего не найдено» при постановке
[found]. Собственный текст владельца в## Комментариине трогать никогда. - ALWAYS сохранять имя файла
operon-<operonId>.mdи человекочитаемыйtaskTitle.
Signals
- GitHub stars
- 29
- Forks
- 4
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
paper-search-vepricov- Source
- github.com/vepricov/claude-brainlab
github.com/vepricov/claude-brainlab
Related picks
Skill · larksuite
The pick for Markdownmarkdown-formatter
Skill · nvidia
The pick for Markdowngolden-pdf-ch
Skill · yusufkaraaslan
The pick for PDFpdf-co-automation
Skill · composio-community
The pick for PDFsearch
Skill · davila7
The pick for Searchsummarize
Skill · zhouguoqing
The pick for Summarize