Community코딩 & 개발github.com

opendraft

18개 에이전트 파이프라인으로, 한 줄의 주제를 실제 문헌 기반이 포함된 완성된 논문으로 초안 작성합니다.

opendraft란 무엇인가요?

opendraft는 하나의 주제 라인에서 실제 문헌 기반을 갖춘 완성된 학술 논문을 생성하는 18단계 에이전트 파이프라인입니다. OpenAI의 OpenDraft 프로젝트에서 포팅되었으며, 사용자 자신이 AI 모델 역할을 수행합니다. API 키나 외부 서비스 계정이 필요 없으며, Crossref, OpenAlex, DataCite 같은 공개 엔드포인트만을 네트워크 호출에 사용합니다. 파이프라인은 18개의 에이전트 프롬프트(agents/ 디렉토리)와 5개의 Python 스크립트로 구성되며, 각 단계는 순차적으로 실행되어 소스 검색, 요약, 인용 데이터베이스 구축, 개요 작성, 본문 초안, 교차 검증, 동료 검토 시뮬레이션, 문법 교정, 초록 및 제목 생성을 수행합니다. 사용자는 논문 작성 전에 대상 학술지, 전체 단어 제한, 인용 스타일, 문서 유형을 설정해야 합니다. 이 도구는 Claude Code, Cursor, Codex 등 AI 코딩 에이전트에서 사용할 수 있도록 설계되었으며, 스크립트는 Python 표준 라이브러리만으로 동작합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/getedgehq/skills/tree/main/opendraft

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

opendraft은(는) 무엇을 하나요?

하나의 주제 라인을 실제 문헌 기반이 포함된 완성된 논문으로 전환합니다.

OpenDraft(github.com/federicodeponte/opendraft, MIT)에서 포팅되었으며, 원본은 호스팅 엔진으로 실행됩니다. 여기서 엔진은 바로 사용자입니다: 18단계로, 각 단계는 agents/ 디렉토리의 프롬프트이며, 언어 모델이 직접 수행해서는 안 되는 부분을 처리하는 5개의 스크립트가 있습니다.

당신이 모델입니다. 키도, 서비스도, 계정도 필요 없습니다. 유일한 네트워크 호출은 Crossref, OpenAlex, DataCite이며, 모두 공개 엔드포인트입니다.

하나의 명령어

<topic>에 대한 논문 작성

아래의 모든 과정은 이 명령어로부터 시작됩니다. 사용자에게 단계를 직접 실행하도록 요청하지 말고, 직접 실행하세요.

먼저 네 가지 질문

5단계 전에, 사용자가 이미 말하지 않았다면 다음을 물어보세요:

  1. 대상 학술지, 또는 "없음, 일반 학술"
  2. 전체 단어 제한
  3. 인용 스타일, references/citation-styles.md에 있는 여섯 가지 중 하나
  4. 문서 유형, references/paper-types.md에 있는 유형 중 하나

이 네 가지 질문은 한 메시지에 담아야 하며, 인터뷰 형식이 아닙니다. 이것이 파이프라인이 묻는 유일한 질문입니다. 그 외의 모든 것은 파이프라인이 결정합니다.

질문해야 하는 이유는 추측의 비용이 마지막에 발생하며 그 시점에서는 해결할 수 없기 때문입니다. 150단어 엄격 제한이 있는 학술지는 6단계에서 적용되거나 전혀 적용되지 않습니다: 17단계에서 초록을 작성할 때쯤이면 모든 섹션이 작성된 단어 예산이 이미 잘못되어 있습니다. 게이트에서 선택된 인용 스타일은 6단계에서 선택된 것과 달리 전체 초안이 잘못된 마커 밀도에 맞춰 작성되는 것을 방지합니다.

사용자가 답변을 거부하거나 "당신이 선택하세요"라고 말하면, references/paper-types.md의 기본값을 사용하여 진행하고, 6단계의 학술지 형식 블록에 기록한 후 한 줄로 사용한 기본값을 알리세요. 사용자에게 보여주지 않은 가정으로 진행하지 마세요.

스크립트가 담당하고 사용자가 담당하지 않는 네 가지

언어 모델은 판단에는 능숙하지만 기록 관리에는 취약합니다. 이러한 구분은 의도적이며, 이를 위반하면 출력이 손상됩니다. 각각은 0이 아닌 종료 코드를 반환하는 스크립트에 의해 강제되므로 게이트에서 의견의 문제가 아닙니다.

절대로 수동으로 렌더링된 인용 마커를 작성하지 마세요. [3], (Smith, 2020) 등으로 작성하지 마세요. 초안 작성 중에는 주장의 정확한 지점에 {cite_<doi>}를 인라인으로 작성하세요. scripts/citations.py compile은 이를 마커로 변환하고 사전 조회를 통해 참고문헌을 구축합니다. 이는 결정론적이므로 산문과 참고문헌 간의 매핑이 기억이 아닌 기계적으로 이루어집니다.

지원할 수 없는 주장에 대해 출처를 절대 지어내지 마세요. 주장이 사실이고 출처를 찾을 수 없으면 {cite_MISSING: 주장에 대한 짧은 설명}을 작성하고 계속 진행하세요. compile은 이를 렌더링하지 않고 이름을 지정하며 0이 아닌 종료 코드를 반환하고, integrity.py는 이를 심각한 문제로 간주하여 완성된 논문에서 살아남지 못합니다. 이것이 요점입니다: 출처가 없는 주장을 조용히 삭제하거나 지어낸 DOI에 첨부하는 것이 아니라, 초안 작성 중에 정직하게 처리하는 방법입니다. 게이트 전에 sources.py find로 실제 출처를 찾거나 의도적으로 주장을 삭제하여 각각을 해결하세요.

절대로 섹션을 수동으로 초안에 병합하지 마세요. scripts/assemble.py가 숫자 순서로 병합하며, 번호가 매겨진 섹션이 아닌 것은 논문에 삽입하지 않습니다. 수동 병합으로 한 섹션이 누락되면 독자가 발견할 때까지 아무도 눈치채지 못하는 실패입니다.

절대로 논문이 내부적으로 일관성 있는지 눈으로 판단하지 마세요. scripts/integrity.py가 이를 확인하고 0이 아닌 종료 코드를 반환합니다. 실행하고 종료 코드를 읽으세요.

설정

mkdir -p research sections review

API 키도, 계정도, 설치 단계도 필요 없습니다: 스크립트는 Python 표준 라이브러리만 사용합니다. 하나의 선택적 환경 변수가 있으며, 이것이 여기서 읽는 유일한 변수입니다. OPENDRAFT_CONTACT_EMAIL을 자신의 이메일 주소로 설정하면 sources.py가 이를 User-Agent에 추가하여 Crossref 요청을 폴리트 풀로 이동시키고 더 나은 속도 제한을 받습니다. 설정하지 않아도 모든 단계는 실행됩니다; 기본값이 내장되어 있지 않은 이유는 출하된 기본값이 모든 설치자를 하나의 신원으로 풀링하여 속도 제한 문제를 낯선 사람의 받은 편지함으로 라우팅하기 때문입니다.

파이프라인은 고정된 경로에 쓰고, 각 단계는 이전 단계가 쓴 내용을 읽습니다. 경로는 단계 간의 계약입니다:

research/sources.md        research/sources.json     research/summaries.md
research/gaps.md           research/citations.json   research/citation-notes.md
outline.md                 outline_formatted.md
sections/*.md              full_draft.md             final.md
review/thread.md           review/narrator.md        review/skeptic.md
review/verifier.md         review/referee.md         review/voice.md
review/entropy.md          review/polish.md

해당 경로에 대한 네 가지 규칙이며, 각각은 이전에 위반된 적이 있습니다:

  • sections/는 논문 섹션만 보관하며 그 외에는 아무것도 보관하지 않습니다. 그 안의 모든 파일은 scripts/assemble.py에 의해 완성된 논문에 삽입됩니다. 단계 보고서가 거기에 저장되면 누군가의 논문 안에 들어가게 됩니다. 보고서는 review/에 저장하세요.
  • research/sources.json은 기계 입력이고, research/sources.md는 사람이 읽는 용도입니다. 1단계에서 둘 다 작성합니다. citations.py build는 JSON 파일을 읽습니다.
  • research/citations.json에는 수동으로 작성된 내용이 절대 들어가지 않습니다. citations.py build에 의해 구축되며, build를 다시 실행하는 경우에만 변경됩니다. 어떤 스크립트도 할 수 없는 판단 호출, DOI가 없는 출처, 검토가 필요한 항목, 플레이스홀더로 전환할 수 없는 언급은 research/citation-notes.md에 저장되며, 이는 산문이며 스크립트가 읽지 않습니다. 수동 편집된 데이터베이스는 verified 플래그가 게이트를 통과하기 위해 뒤집히는 방법이며, 이는 확인되지 않은 DOI가 검토된 것처럼 참고문헌에 도달하는 방법입니다.
  • 9.5단계 이후에는 full_draft.md만이 유일한 초안입니다. 이후 단계는 sections/*.md를 다시 읽지 않으므로, 조립 후 섹션 파일을 편집해도 아무것도 변경되지 않으며 조용히 편집이 손실됩니다.

파이프라인

순서대로 실행하세요. 하나의 단계를 제외한 모든 단계는 agents/ 디렉토리의 파일입니다: 해당 파일을 읽고, 지시대로 수행하고, 이름이 지정된 출력을 작성한 다음 계속 진행하세요. 예외는 9.5단계로, 실행하는 스크립트입니다. 주제가 쉬워 보인다고 단계를 건너뛰지 마세요.

#단계에이전트 파일 또는 스크립트작성 대상
1출처 검색agents/01-scout.mdresearch/sources.md, research/sources.json
2읽고 요약agents/02-scribe.mdresearch/summaries.md
3작성할 가치가 있는 격차 찾기agents/03-signal.mdresearch/gaps.md
4인용 데이터베이스 구축agents/04-citation-manager.mdresearch/citations.json, research/citation-notes.md
5논증 개요agents/05-architect.mdoutline.md
6학술지 형식 및 단어 예산 적용agents/06-formatter.mdoutline_formatted.md
7각 섹션 작성agents/07-crafter.mdsections/*.md, research/gaps.md에 추가
8섹션 간 일관성 확인agents/08-thread.mdsections/*.md 수정, review/thread.md
9어조 통일agents/09-narrator.mdsections/*.md 수정, review/narrator.md
9.5섹션을 하나의 초안으로 조립scripts/assemble.pyfull_draft.md
10논증 공격agents/10-skeptic.mdreview/skeptic.md, 이후 수정
11출처에 대한 주장 확인agents/11-verifier.mdreview/verifier.md, 이후 수정
12동료 검토 시뮬레이션agents/12-referee.mdreview/referee.md, 이후 수정
13저자의 어조 일치 (선택 사항)agents/13-voice.mdfull_draft.md 수정, review/voice.md
14산문 리듬 변화agents/14-entropy.mdfull_draft.md 수정, review/entropy.md
15문법 및 최종 교정agents/15-polish.mdfull_draft.md, review/polish.md
16장치 추가 (선택 사항)agents/16-enhancer.mdfull_draft.md
17초록 작성agents/17-abstract.mdfull_draft.md 앞에 추가
18제목 작성agents/18-titlemaker.mdfull_draft.md 앞에 추가

7단계는 논문당 한 번이 아니라 섹션당 한 번 실행됩니다. 10~12단계는 문제 목록을 생성합니다; 아무도 적용하지 않는 문제 목록은 무효이므로 수정을 적용하고 심각한 문제가 남지 않을 때까지 단계를 다시 실행하세요.

12단계에는 숫자가 있으며 감정이 아닙니다. 새로 실행했을 때 심각한 문제가 0개이고 전체 평균이 5점 만점에 최소 3.0점이며, 어떤 단일 차원도 3점 미만이 아닐 때(단, 그 이유를 review/referee.md에 기록한 경우는 제외) 중단하세요. "보내기에 충분히 좋음"은 중단 조건이 아닙니다. 자신의 초안을 판단하도록 요청받은 모델은 항상 세 번째 패스에서 충분히 좋다고 판단하기 때문입니다.

13단계는 파이프라인이 생성하지 않는 입력을 가진 유일한 단계입니다. 초안을 저자 자신의 산문에 맞추며, 작업 디렉토리의 samples/ 디렉토리에서 해당 산문을 읽습니다: .md 또는 .txt 형식의 이전 논문, 장, 또는 긴 형식의 게시물 2~3개. 아무것도 해당 디렉토리를 생성하지 않으며 아무것도 요청하지 않으므로, 생성하지 않는 실행은 13단계를 깔끔하게 건너뛰며, 이는 실패가 아닌 정상적인 결과입니다. 논문이 사용자가 작성한 것처럼 들리게 하려면 실행 전에 자신의 글을 해당 디렉토리에 넣으세요.

9.5단계는 에이전트 프롬프트가 아닌 스크립트이므로 반 단계로 번호가 매겨져 있으며, 18개의 에이전트 단계가 이미 가지고 있던 번호를 유지하기 때문입니다. 선택 사항이 아닙니다. 19단계는 sections/*.md에서 작업하고, 1018단계는 full_draft.md에서 작업합니다; 다음 명령어 외에는 이 파일을 생성하는 것이 없습니다:

python3 scripts/assemble.py sections -o full_draft.md

섹션 파일을 숫자 순서로 병합하고, 번호가 매겨진 섹션이 아닌 파일은 포함을 거부하며, 번호 공백, 중복 번호 또는 빈 디렉토리에서 0이 아닌 종료 코드를 반환합니다. --check는 쓰지 않고 무엇을 할지 보고합니다.

또한 이름에 report, review, notes, checklist 또는 log가 포함된 번호가 매겨진 파일을 건너뛰며, 이는 오래된 단계 보고서가 논문 안에 들어가는 것을 방지하는 메커니즘입니다. 이는 파일 이름 휴리스틱이므로 한 가지 날카로운 모서리가 있습니다: "Review of the literature"라는 실제 섹션은 건너뛰어지며, stdout에 "Skipped" 줄로만 표시되고 오류로 표시되지 않습니다. 대신 해당 섹션의 이름을 related-work 또는 literature로 지정하세요. 건너뛰기 줄을 읽으세요; 여기서 사라진 섹션은 조용히 사라집니다. full_draft.md가 존재한 후 다시 실행하려면 --force가 필요하며, --force는 10단계 이후에 초안에 대해 이루어진 모든 편집을 폐기하므로, 섹션에서 다시 시작하려는 경우에만 다시 조립하세요.

규모

파이프라인을 요청된 내용에 맞추세요. 단계는 동일하지만 깊이는 다릅니다.

  • 짧은 글, 1,500~3,000 단어. 17단계, 그 다음 9.5, 10, 11, 15단계. 1015개 출처.
  • 전체 논문, 기본값. 18개 모두, 9.5 포함. 25~50개 출처, 또는 논문이 문헌 검토인 경우 50개 이상, 이 경우 자체 최소 기준이 더 높은 쪽을 따릅니다(references/paper-types.md).
  • 논문 장 또는 긴 검토. 18개 모두, 9.5 포함, 출처는 50개 이상, 7단계는 섹션당 한 번이 아니라 하위 섹션당 한 번 실행.

9.5단계는 위 모든 목록에 있습니다. 어떤 규모에서도 논문이 스스로 조립되지 않습니다.

두 개의 참조 파일

  • references/paper-types.md 각 문서 유형에 대한 섹션 구조, 단어 예산 및 출처 수를 제공합니다. 5단계에서 읽으세요.
  • references/citation-styles.md 여섯 가지 스타일 모두의 실제 컴파일된 출력을 보여줍니다(인라인 마커 및 참조 항목). 학술지에 맞는 스타일을 선택하고 어떻게 보일지 알 수 있습니다. 6단계에서 읽고, 인용이 예상치 못한 방식으로 렌더링되는 경우 게이트 전에 다시 읽으세요. 또한 컴파일러가 수행하지 않는 것을 명시합니다: 권, 호, 페이지 번호, 저널 약어 없음. 지도교수가 이를 요구하는 경우, 이곳은 사후에 알게 되는 곳이 아니라 정직하게 말하는 곳입니다.

두 파일 모두 참조로 가장한 선택적 읽기가 아닙니다. 두 번째 파일을 읽지 않고 선택한 스타일은 기억에서 선택한 스타일이며, 컴파일러는 APA에 대한 기억을 구현하지 않습니다.

스크립트

python3 scripts/sources.py find "<query>" --n 15        # Crossref + OpenAlex
python3 scripts/sources.py find "<query>" --json        # 기계 판독 가능
python3 scripts/sources.py verify <doi> <doi> ...       # Crossref + DataCite

python3 scripts/citations.py build research/sources.json -o research/citations.json
python3 scripts/citations.py verify -d research/citations.json
python3 scripts/citations.py compile full_draft.md -d research/citations.json --style apa -o final.md
python3 scripts/citations.py bibtex -d research/citations.json -o refs.bib

python3 scripts/assemble.py sections -o full_draft.md
python3 scripts/assemble.py sections -o full_draft.md --check

python3 scripts/integrity.py final.md -d research/citations.json --target 8000
python3 scripts/integrity.py final.md -c research/summaries.md   # 권고적 숫자 확인
python3 scripts/export.py final.md --format docx -o final.docx

모든 스크립트는 실패 시 0이 아닌 종료 코드를 반환합니다. 해당 종료 코드가 신호입니다. 출력을 훑어보는 대신 읽으세요.

sources.py find는 어떤 API에도 전혀 도달할 수 없을 때 1을 반환하며, 이는 API에 도달했지만 결과가 없는 것과 다릅니다. agents/01-scout.md가 해당 종료 코드를 읽는 방법과 1단계가 진행을 중단하는 출처 최소 기준에 대한 권한입니다. 빈 결과를 신뢰하는 대신 거기서 읽으세요.

citations.py build는 1단계가 research/sources.json에 쓴 JSON 배열을 읽으며, research/sources.md의 마크다운이 아닙니다. 마크다운 파일을 제공하는 것은 오류이며, 그렇게 알릴 것입니다.

첫 번째 패스가 부실하면 두세 개의 더 좁은 하위 쿼리도 검색하세요. 5개 출처가 있는 논문은 5개 출처가 있는 것처럼 읽힙니다.

검증, 그리고 그것이 증명하는 것과 증명하지 않는 것

citations.py verify는 모든 DOI를 네 가지 상태 중 하나로 설정하며, unknown은 조용히 absent로 전환되지 않습니다:

  • resolved. Crossref 또는 DataCite가 레코드를 반환했습니다. 인용하세요.
  • absent. 둘 다 404를 반환했습니다. 삭제하세요. 수리하지 말고, 대체 DOI를 추측하지 마세요. 이전 단계로 돌아가서 {cite_MISSING: ...} 주석을 통해 실제 출처를 찾으세요.
  • unknown. API에 도달했지만 알려진 기간 내에 응답이 없습니다. 나중에 다시 시도하세요. 무시하거나 absent로 추측하지 마세요.

…

[번역이 잘렸습니다]

Individual skills in this repo

This repo contains 18 individual skills — each has its own dedicated page.

getedgehq/agent-evals

Build evals for an AI agent that already does real work. Use when someone asks "how do I know my agent is right", wants to test an agent before trusting it, compare models on cost versus quality, or turn production failures into tests. Walks from first tasks and yes/no verifiers, to isolated environments, to a trace-driven improvement loop.

getedgehq/cli-ux-review

Audit a command-line tool for user-friendliness — clear situation / next-step / options in every output, colour-highlighted runnable commands, no raw jargon, no silent hangs. Invoke for "CLI UX audit", "review my CLI", "is this CLI intuitive", or before any CLI release.

getedgehq/generate-image

Generate images with OpenAI GPT Image 2 via the Codex CLI, billed through the user's ChatGPT Plus subscription (no OpenAI API key, no per-image API cost). Use when the user asks to create, generate, or make an image, picture, illustration, icon, hero graphic, or concept art from a text prompt.

getedgehq/harness-first

Diagnose and fix an unreliable, expensive, or unsafe LLM agent by auditing its harness (golden set, judge, cost caps, data layer, action approvals, tracing) before blaming or swapping the model. Use when someone says an agent is "burning tokens", "hallucinating", "brittle", gives inconsistent answers, asks whether to switch to a cheaper/better model, or wants to ship an agent or prompt change to customers.

getedgehq/http-error-triage

Run before concluding anything from an HTTP error on a third-party API. Separates a real credential/entitlement problem from a CDN or WAF block, a wrong endpoint, or a client-signature ban. Use whenever an API returns 401/403/402/429 and you are about to say "the key is dead", "credits are exhausted", "the plan lacks access", or "we are rate limited".

getedgehq/linkedin-media-prep

Convert, crop, resize, and compress images and videos for optimal LinkedIn upload quality and file size. Use when the user wants to prepare a photo, image, or video for LinkedIn (profile picture, cover photo, post image, article featured image, post video, or video ad), optimize file size for LinkedIn, crop and resize for LinkedIn dimensions, convert HEIC/RAW/PNG/MOV to LinkedIn-ready JPEG or MP4, or mentions LinkedIn media requirements, specs, or limits.

getedgehq/monid

>-

getedgehq/people-search

Find and rank professional people for recruiting, partnerships, sales, or research from user-provided data, public web sources, an authenticated search session, or a connected provider. Use for people discovery, LinkedIn or Sales Navigator search design, profile-list ranking, or provider filter translation.

getedgehq/rocketlist

Turn a CV into a shortlist of live startup roles from Rocketlist's public job board, including adjacent job titles the person would never have searched for, each with its published salary, the evidence for the fit, and a direct apply link. Use for "find roles I would be a strong fit for", career pivots, remote or VC-backed job hunts, and salary-visible role discovery.

getedgehq/security-audit-checklist

Run a comprehensive security audit across application code, cloud infrastructure, containers, CI/CD pipelines, and infrastructure-as-code. Covers privacy compliance, OWASP basics, secret leakage, API security, IAM misconfigurations, storage exposure, Kubernetes hardening, and network security. Use when the user asks to audit, review, or harden app or cloud security, check for secrets, scan for XSS/SQLi, verify security headers, review Terraform/CloudFormation, audit AWS/GCP/Azure configs, or perform any security-focused review.

getedgehq/shadcn-first

>-

getedgehq/skills

Develop or review a branded long-form YouTube channel using Simon Kaiser's public creator-led approach: audience fit, recurring formats, natural brand integration, Time with Brand, and an organic, paid, and Shorts strategy. Use for channel strategy, format briefs, and pilots.

getedgehq/skills

Build a YouTube strategy, evidence-backed idea slate, and title plus thumbnail package using Paddy Galloway's public method. Use when planning a channel, choosing concepts, or preparing a video before filming.

getedgehq/skills

Build or review a buyer-centered strategic narrative using Andy Raskin's public method. Use for sales or investor deck stories, homepage positioning, keynotes, launch narratives, and why-now messaging.

getedgehq/skills

Turn a product URL, launch brief, or approved script into a production-ready launch video. Use for product reveals, feature announcements, SaaS launches, and narrated product films; not for generic explainers or editing existing footage.

getedgehq/strip-image-ai-metadata

Strip C2PA and AI-generation metadata from images (PNG, JPEG, WebP) to remove "Generated by AI" / "ChatGPT" / "DALL-E" labels that platforms like LinkedIn, Instagram, and X display. Use when the user wants to clean AI-generated images before posting, remove AI attribution from photos, strip C2PA manifests, sanitize image metadata for professional use, or verify whether an image contains C2PA data.

getedgehq/top-down-comms

>-

getedgehq/workplan

Create, update, or close work plans for multi-step tasks. Use when starting refactors, bug lists, feature work, migrations, or any task with 2+ steps. Also use after auto-compaction to re-orient. Triggers: "workplan", "work plan", "create a plan", "what's the plan", "where was I", or when Claude detects

관련 스킬