Quartz 5 기반 개인 지식 저장소. AI Agent 또는 웹(Pages CMS)에서 글을 작성해 바로 발행하는 흐름이 목적이다. 별도 초안(draft) 단계 없이 content/posts/에 쓰면 즉시 웹에 노출된다. 공개 전 검수가 필요하면 private: true로 두고(암호화된 채로 웹에서 확인) 준비되면 해제한다.
라이브 사이트: https://rohdonghyun.github.io
content/
├── index.md 홈 페이지
├── images/ 업로드 이미지 (Pages CMS가 여기에 저장, /images/* 로 서빙)
└── posts/ 발행된 글 (사이트에 노출)
├── foundations/ 카테고리: 학술 기초 지식
├── insights/ 카테고리: 세미나·기사·글 신지식
└── papers/ 카테고리: 논문 요약
└── <date>-<slug>.md
.pages.yml Pages CMS 설정 (웹 편집·이미지 업로드)
quartz/ Quartz 5 엔진 (수정 금지)
quartz.config.yaml 사이트 설정 (수정 가능)
quartz.config.default.yaml 업스트림 기본값 참조용
scripts/build.mjs 배포 빌드 + 카테고리 강제 검증 / 비공개 글 암호화
.github/workflows/deploy.yml Pages 자동 배포
content/posts/<category>/<date>-<slug>.md 에 바로 쓴다. 초안 폴더는 더 이상 쓰지 않는다.2026-06-14-llm-agent-trends.md). 제목은 한국어여도 파일명은 영문.index.md는 explorer에 표시되는 폴더 이름(title)을 결정한다. 건드리지 말 것.글 하나는 카테고리 1개(아래 3개 중 하나로 제한)와 태그(1개 이상, 값은 자유)를 가진다. scripts/build.mjs가 발행글(posts/)에 대해 빌드 시 “카테고리 폴더가 유효한지 + 태그가 1개 이상인지”를 강제하며, 위반 시 빌드가 실패한다. 태그 값 자체는 검증하지 않는다.
글이 속한 폴더가 곧 카테고리다. 별도 frontmatter 필드는 없다. 어느 카테고리인지는 writer-agent가 글 내용으로 판단한다.
foundations — 학교나 학술계에서 보편적으로 다루는 기초 지식. 널리 통용되어 별도 출처가 필요 없는 내용.insights — 세미나·기사·블로그 등에서 얻은 비교적 최신의 지식. Fresh하지만 빠르게 바뀌거나 잊히기 쉬운 내용.papers — 개별 논문 요약·정리.tags, 1개 이상, 값 자유)태그 값은 자유롭게 만들 수 있다(빌드가 값을 제한하지 않음). 다만 난립을 막기 위해 자주 쓰는 태그는 재사용한다. 대표 태그:
AI Scheduling — 강화학습, 모방학습 등 AI 기술 기반 스케줄링 및 디스패칭 (특히 반도체 FAB)AI Agent — AI Agent 시스템·아키텍처·트렌드이 둘은 Pages CMS 태그 입력란에서 제안으로 뜬다. 필요하면 새 태그를 그 자리에서 입력하면 된다.
예: AI Agent에 관한 세미나 요약 글 → 카테고리
insights(=posts/insights/에 저장) / 태그AI Agent.
카테고리(폴더) 목록을 늘리려면 이 문서,
scripts/build.mjs의CATEGORIES,.pages.yml의 컬렉션을 함께 수정한다. 태그는 자유 입력이라 코드 수정이 필요 없다.
---
title: 글 제목
date: 2026-06-04 # YYYY-MM-DD
tags:
- AI Agent # 1개 이상 (값 자유)
---
title, date, tags(1개 이상) 필수.private: true를 추가 (아래 ‘비공개 글’).$...$, 블록 $$...$$.\\ 줄바꿈은 KaTeX 호환 표기. AMS align* 환경 가능.latex.ts에 mhchem import 추가 (현재 미설정).$$는 여는 줄·닫는 줄 모두 자기 줄에 단독으로 둔다. 닫는 $$를 내용 끝에 붙이면(...content$$) 파서가 블록을 못 닫고 이후 인라인 $...$·### 헤딩까지 수식으로 삼켜 페이지가 깨진다.>) 안의 블록 수식은 $$·내용 모든 줄에 >를 붙인다. 내용 줄에서 >가 빠지면 닫힘이 어긋나 뒤 문장의 인라인 $가 깨진다.$...$ 로 쓴다. $$...$$를 인라인으로 쓰면 에러는 없어도 가운데 정렬 블록으로 빠진다.**...** 바로 뒤 한글 조사: 닫는 **가 )·] 같은 구두점 뒤 + 문자 앞이면 CommonMark flanking 규칙상 닫히지 않아 굵게가 안 먹는다 (**용어(Term)**이다 → 깨짐). 닫는 ** 뒤에 공백을 넣어 해결 (**용어(Term)** 이다). 끝이 문자면(**용어**이다) 정상이라 구두점으로 끝나는 경우만 문제.npm run build 후 public/**/*.html에서 class="katex-error"·잔존 $$를 grep해 확인한다. 멀쩡한 수식을 추측으로 건드리면 오히려 깨질 수 있으니, 깨진 파일만 골라 고친다.[[posts/insights/2026-06-04-llm-agent-horizons]].[arXiv](https://arxiv.org/abs/xxxx.yyyyy).사용자의 요청은 주로 아래 4가지 유형이다. Main Agent는 유형을 판별해 자료 수집 → 작성 → 검토 순으로 위임한다.
| 요청 유형 | 자료 수집 에이전트 | 핵심 입력 |
|---|---|---|
| (A) 논문 URL을 주고 상세 설명 요청 | search-agent (mode: paper-deep-dive) |
arXiv/DOI/논문 URL |
| (B) 키워드를 주고 최신·임팩트 큰 논문 목록 요약 요청 | search-agent (mode: paper-roundup) |
키워드 + (선택) 기간/개수 |
| (C) PPT/슬라이드 내용 요약 요청 | ppt-agent |
PDF 절대 경로 |
| (D) 키워드(특히 AI Agent)의 최신 trend 검색 요청 | search-agent (mode: trend-scan) |
키워드 |
절차:
writer-agent (수집 결과를 materials로 전달). 카테고리를 판단해 content/posts/<category>/YYYY-MM-DD-<slug>.md에 직접 작성. 공개 전 검수가 필요한 글이면 private: true를 넣는다.review-agent (작성된 posts/<category>/<file>.md를 직접 revise).private를 해제하거나 직접 수정.각 subagent의 도구 권한과 시스템 프롬프트는 .claude/agents/에서 관리한다.
사람이 직접 쓸 때는 Pages CMS에서 웹으로 편집한다 (.pages.yml이 설정). 이미지를 본문에 붙여넣으면 content/images/에 커밋되고 /images/... 링크가 자동 삽입된다. 저장하면 main에 직접 커밋 → 자동 배포.
.md를 확인할 것.npm ci # 의존성 설치 (최초 1회 + lockfile 변경 시)
npx quartz plugin install # 플러그인 설치 (최초 1회 + quartz.lock.json 변경 시)
npx quartz build --serve # 로컬 미리보기 (http://localhost:8080) — 비공개 글은 평문으로 보임
npm run build # 배포용 빌드 (public/ 생성, 비공개 글 암호화)
public/과 node_modules/, .quartz/, .env는 .gitignore 적용.
frontmatter에 private: true를 추가하면 본문이 AES-256-GCM으로 빌드 시 암호화된다. 제목/태그/링크는 listings·RSS·sitemap에 그대로 노출되고 본문만 잠긴다.
---
title: 비공개 메모
date: 2026-06-05
tags:
- note
private: true
---
비밀번호는 환경변수 PRIVATE_POSTS_PASSWORD에서 읽는다. 글의 frontmatter에는 비밀번호를 적지 않는다 (공개 repo에 새는 것 방지).
.env(gitignored)에 PRIVATE_POSTS_PASSWORD=... 한 줄 추가Settings → Secrets and variables → Actions)npm run build가 호출되면 scripts/build.mjs가 content/를 OS 임시 디렉토리에 복제하고 private: true 글의 frontmatter에 password:를 주입한 뒤 quartz에 그 디렉토리를 빌드시킨다. 원본 content/는 절대 수정되지 않는다.
브라우저에서 비공개 글에 접근하면 비밀번호 입력 UI가 뜨고, 한 번 입력하면 localStorage에 캐싱되어 동일 비밀번호의 다른 비공개 글도 자동 해제된다. 우하단의 🔒 로그아웃 버튼으로 캐시를 비울 수 있다 (콘솔에서 privateLogout() 호출과 동등).
main 브랜치에 push → GitHub Actions가 npm ci → quartz plugin install → npm run build → public/을 GitHub Pages로 업로드.
Settings → Pages 의 Source는 GitHub Actions여야 한다 (Deploy from branch가 아님).
자동 발행 파이프라인은 다음 작업이 끝나야 동작한다:
scripts/fetch_arxiv.py — arXiv API에서 지정 카테고리(cs.LG, cs.AI 등)의 최근 논문 메타데이터를 가져온다.scripts/summarize.py — Claude API로 논문 PDF/abstract를 요약해 Markdown으로 변환.content/posts/<category>/YYYY-MM-DD-<slug>.md 로 저장 (검수 전이면 private: true)..github/workflows/auto-draft.yml — schedule: cron으로 매일 1회 실행, 생성된 글을 PR로 올린다. (직접 push 금지 — 검수 단계 강제)private 해제).Anthropic API 키는 GitHub Secrets ANTHROPIC_API_KEY로 보관 예정.
quartz.config.yaml). v4의 TypeScript 설정과 다르다.npx quartz plugin install이 필수.jackyzha0/quartz)의 v5 변경사항을 가져오려면 quartz/ 디렉토리를 통째로 교체하는 것이 가장 안전.