Save Papers to Zotero
데스크톱 앱의 로컬 Connector 서버(127.0.0.1:23119)를 통해 명시적인 Zotero 가져오기 요청을 완료하십시오. 사용자에게 Zotero Connector 브라우저 확장 프로그램을 호출하도록 요청하지 마십시오. 사용자가 dry run을 요청하지 않는 한, 확인된 저장 PDF가 없는 상위 항목은 불완전한 것으로 간주하십시오.
번들 경로 확인
가져오기 프로그램을 실행하기 전에 이 SKILL.md가 포함된 디렉터리를 확인하십시오. Claude Code에서는 ${CLAUDE_SKILL_DIR}을 사용하십시오. Codex에서는 로드된 스킬과 함께 제공된 설치된 스킬 디렉터리를 사용하십시오. 아래에서 <skill-dir>을 해당 절대 경로로 바꾸고, 결과 스크립트 경로를 인용부호로 감싸십시오. 현재 작업 디렉터리가 스킬 디렉터리라고 가정하지 마십시오. 사용 가능한 Python 3.10+ 실행 파일을 사용하십시오. 예제에서는 python을 사용합니다.
가져오기 프로그램 선택
- 한 편의 논문에는
<skill-dir>/scripts/zotero_connector_import.py를 사용하십시오. - 두 편 이상의 논문, DOI/문서 목록, 또는 문헌 검토 결과물에는
<skill-dir>/scripts/zotero_batch_import.py를 사용하십시오. - 배치 매니페스트를 준비하기 전에
<skill-dir>/references/batch-manifest.md를 읽으십시오.
두 가져오기 프로그램 모두:
- Zotero 연결 상태와 정확한 대상 컬렉션을 확인합니다.
- DOI, arXiv ID, 정규화된 제목 순서로 가능한 기존 일치 항목을 식별합니다.
- 해당 일치 항목을 보고하지만 요청된 새 항목을 계속 생성합니다.
- 번역기 스타일 메타데이터와 선택적 자식 노트(arXiv
Comments포함)를 저장합니다. - 요청된 컬렉션, 일반 태그, 기본
#status/to-read, 선택적 우선순위 태그를 할당합니다. - PDF 바이트를 저장된 자식 첨부 파일로 업로드합니다.
- 새로 생성된 상위 항목(기존 일치 항목이 아님)이 저장된 PDF와 함께 컬렉션에 있는지 확인합니다.
가능한 일치 항목이 있다는 이유로 항목을 자동으로 삭제, 병합, 대체 또는 숨기지 마십시오. possible_duplicate_count와 possible_duplicate_keys를 반환하여 사용자가 Zotero에서 검사하고 제거할 항목을 결정할 수 있도록 하십시오.
신뢰할 수 있는 입력 준비
각 논문을 정식 랜딩 페이지로 확인하십시오. 게시자 페이지, DOI 레코드, PubMed Central, 리포지토리, 또는 사용자가 합법적으로 접근할 수 있는 프리프린트 페이지를 선호하십시오. 초록, 출판사, 권, 호, 페이지, 언어, DOI, arXiv 식별자, 전체 저자 목록을 포함하여 소스가 제공하는 모든 신뢰할 수 있는 메타데이터를 채우십시오. 누락된 값을 임의로 생성하지 마십시오.
arXiv 논문의 경우, 공백 정규화를 제외하고 소스의 Comments 필드를 그대로 복사하십시오. 값만 전달하십시오. 가져오기 프로그램은 Comment: 로 시작하는 별도의 자식 노트를 만듭니다. 해당 필드에 포함된 학회, 코드, 프로젝트 및 출판 정보를 보존하십시오. 초록, 인용 또는 자신의 분석에서 arXiv 주석을 합성하지 말고, 소스에 Comments 필드가 없으면 생략하십시오.
Ethereal Style 플러그인에서 인식하는 #status/... 및 #priority/... 형식의 일반 Zotero 태그를 사용하십시오. 특별한 Zotero 필드나 태그 유형이 필요하지 않습니다. 다른 상태나 명시적 거부가 제공되지 않는 한, 새로 가져온 모든 논문의 기본값을 #status/to-read로 설정하십시오:
reading_status: to-read는#status/to-read가 됩니다.reading_status: reading은#status/reading이 됩니다.reading_status: none은 자동 상태 할당을 비활성화합니다.priority: high,medium, 또는low는#priority/high,#priority/medium, 또는#priority/low가 됩니다.
기본값으로 바꾸는 대신 항목이나 요청된 태그에 이미 있는 명시적인 #status/... 태그를 보존하십시오. 제공된 의미적 상태는 충돌하는 상태 태그를 대체합니다. 논문 내용에서 우선순위를 유추하지 마십시오. 사용자 값이나 사용자 정의 계층과 같은 명시적 매핑에서만 추가하십시오.
Zotero 번역기 스타일 항목 객체를 사용하십시오:
{
"itemType": "preprint",
"title": "Example Paper",
"creators": [
{"firstName": "Ada", "lastName": "Lovelace", "creatorType": "author"}
],
"date": "2026",
"url": "https://example.org/paper",
"DOI": "10.0000/example",
"archiveID": "arXiv:2601.00001"
}
각 PDF를 두 가지 방법 중 하나로 획득하십시오:
- 공개 직접 PDF URL과 해당 랜딩 페이지를 리퍼러로 전달합니다.
- 사용자의 로그인된 Chrome 세션에서만 사용할 수 있는 PDF의 경우, 호스트의 브라우저 통합을 사용하십시오: Codex의 Chrome 제어 스킬을 사용하거나
claude --chrome으로 실행된 Claude Code 세션(또는 Chrome이 기본적으로 활성화된 상태)에서 Claude를 Chrome과 함께 사용하십시오. 보이는 합법적인 PDF를 임시 파일로 다운로드한 다음--pdf-file과 함께 해당 파일을 전달하십시오. 쿠키나 세션 저장소를 검사, 내보내기 또는 유지하지 마십시오.
브라우저 통합을 사용할 수 없거나, 권한이 거부되었거나, 다운로드 결과가 로컬 유효 PDF가 아닌 경우, Zotero 쓰기 전에 중단하고 사용자에게 합법적으로 획득한 로컬 PDF를 제공하도록 요청하십시오. 신뢰할 수 없는 미러로 대체하지 마십시오.
페이월, CAPTCHA, 접근 제어 또는 라이선스 제한을 우회하지 마십시오.
한 편의 논문 가져오기
공개 PDF URL의 경우:
python -X utf8 "<skill-dir>/scripts/zotero_connector_import.py" \
--item-json <item.json> \
--collection <정확한 컬렉션 이름> \
--source-url <랜딩 페이지 URL> \
--pdf-url <직접 PDF URL> \
--referrer <랜딩 페이지 URL>
다운로드된 PDF의 경우 --pdf-url을 --pdf-file <path>로 바꾸십시오. 첨부 파일의 기록된 소스가 다운로드 URL과 달라야 하는 경우 --pdf-file 또는 --pdf-url과 함께 --pdf-source-url <URL>을 사용하십시오.
소스의 arXiv Comments 값에는 --arxiv-comment <text>를 사용하십시오. 가져오기 프로그램은 Comment: 를 정확히 한 번 추가합니다. 다른 자식 노트에는 --note를, 일반 태그에는 --tag를 반복하십시오. 읽기 상태 기본값은 to-read입니다. 재정의하려면 --reading-status reading을, 옵트아웃하려면 --reading-status none을 사용하십시오. 명시적으로 요청되거나 사용자 제공 계층에서 매핑된 경우에만 --priority high|medium|low를 사용하십시오. 쓰기 가능한 Connector 대상이 여러 개 있을 때 정확히 요청된 이름을 가진 경우에만 --target-id <id>를 추가하십시오. 쓰기 없이 연결, 컬렉션, 입력 및 가능한 중복 확인을 위해 --dry-run을 사용하십시오.
배치 가져오기
쓰기를 시작하기 전에 모든 매니페스트 항목을 준비하고 검증하십시오. 그런 다음 실행하십시오:
python -X utf8 "<skill-dir>/scripts/zotero_batch_import.py" \
--manifest <papers.json> \
--collection <정확한 컬렉션 이름> \
--target-id <id> \
--ledger <results.jsonl> \
--summary-json <summary.json>
같은 이름의 Connector 대상이 모호하지 않은 경우 예제의 --target-id 줄을 생략하십시오. 모든 매니페스트 항목의 기본값은 #status/to-read입니다. reading 또는 none을 선택하려는 경우에만 공유 또는 논문별 reading_status를 사용하십시오. 매니페스트에서 공유 및 논문별 tags, notes, priority를 설정하십시오. 각 논문의 arxiv_comment는 자체 arXiv 소스에서 설정하십시오. 배치 CLI에는 의도적으로 --tag 또는 --note 옵션이 없습니다. 첫 번째 불완전한 항목 이후에 더 이상 논문을 시도하지 않아야 하는 경우 --stop-on-error를 추가하십시오.
배치 가져오기 프로그램은 직렬로 유지되어야 합니다. 각 쓰기 직전에 정확한 대상을 다시 확인하고, 각 논문 후에 하나의 원장 레코드를 추가하고 플러시하며, 기본적으로 논문별 실패 후에도 계속 진행하고, Zotero 연결 또는 컬렉션 실패 시 중지합니다. 재개는 기본적으로 활성화됩니다. 동일한 매니페스트와 원장을 다시 실행하면 이전 saved_with_pdf 레코드를 건너니다. 사용자가 이전에 완료된 요청을 다시 쓰기를 명시적으로 원하는 경우에만 --no-resume을 사용하십시오.
쓰기를 병렬화하거나 동일한 원장에 대해 두 개의 프로세스를 실행하지 마십시오. 가져오기 프로그램은 운영 체제 권고 잠금을 사용합니다. 실행 또는 충돌 후 .lock 파일이 디스크에 남아 있을 수 있습니다. 파일 자체만으로는 향후 배치를 차단하지 않습니다.
배치 종료 코드는 모든 요청이 완료되거나 안전하게 건너 경우 0, 불완전한 항목으로 실행이 종료된 경우 3, 치명적인 매니페스트, 잠금, 연결 또는 컬렉션 오류의 경우 다른 0이 아닌 코드입니다. 단일 가져오기 프로그램은 성공 시 0, 실패 시 0이 아닌 코드를 반환합니다.
결과 해석
가져오기 프로그램 JSON을 신뢰할 수 있는 정보로 간주하십시오:
saved_with_pdf: 새 상위 항목 및 저장된 PDF 확인 완료.skipped_completed: 재개 중 이전 성공적인 원장 레코드 유지됨.skipped_duplicate_in_manifest: 반복된 매니페스트 항목이 두 번째 쓰기 없이 건너.invalid_pdf,http_error또는 기타 논문별 상태: 배치를 계속하고 소스와 이유를 보고합니다.verification_failed: 메타데이터가 저장되었을 수 있지만 새로 생성된 항목 또는 저장된 PDF를 확인할 수 없습니다. 맹목적으로 다시 실행하지 마십시오.not_attempted: 치명적인 배치 수준 오류로 인해 이후 항목이 중지되었습니다.
possible_duplicate_count와 possible_duplicate_keys는 정보 제공용입니다. 이 요청 전에 존재했던 항목만 참조합니다. 가져오기 프로그램은 계속해서 새 상위 항목을 쓰고 확인합니다. 수동 검토를 위해 제시하고 명시적인 사용자 결정 없이 항목을 제거하지 마십시오.
제공된 경우 arxiv_comment는 정규화된 자식 노트 텍스트를 보고합니다. workflow_tags는 적용된 기본값 또는 명시적 #status/... 태그와 요청된 #priority/... 태그를 보고합니다. 완료 보고서에 이를 포함하여 사용자가 모든 항목을 열지 않고도 워크플로 메타데이터를 확인할 수 있도록 하십시오.
배치 보고
다음 정보를 보고하십시오:
- 총 요청 수
- 확인된 PDF와 함께 새로 저장된 수
- 재개 건너뛰기 및 매니페스트 중복 건너뛰기 수
- 가능한 기존 일치 항목이 있었던 새로 저장된 항목(키 포함)
- 사용자 조치 필요 사항
- 실패 또는 시도되지 않은 항목
- 불완전한 각 논문의 제목, 소스, 상태 및 이유
첨부 파일 행이나 URL이 보인다고 성공을 주장하지 마십시오. 가져오기 프로그램의 저장된 파일 확인을 요구하십시오.