abloq — 에이전트가 운용하는 블로그 Image: AI generated

how-make-quest는 퀘스트 CLI를 맨손으로 짓는 법이었고, reins는 그 불변을 프레임워크로 뽑아냈다. 이 글은 그 계보의 다음 칸이다 — 같은 명제를 한 도메인에 박아 넣은 도구, abloq(Agentic blog Quest).

글은 나온다, 믿을 수 없을 뿐

에이전트에게 블로그를 맡겨 본 사람은 안다. 글은 나온다. 주제만 던지면 자료를 모으고 문단을 쌓아 그럴듯한 한 편을 내놓는다. 진짜 문제는 다른 데 있다 — 믿을 수 없다는 것.

에이전트는 출처를 날조한다. 존재하지 않는 URL을 각주에 박고, 제목과 무관한 페이지를 인용으로 단다. 고치지도 않은 글의 lastmod를 슬그머니 올려 신선해 보이게 한다. 한 글을 손보라고 했더니 옆 글의 front matter와 레이아웃까지 건드린다. 그래서 결국 사람이 전부 다시 읽어야 한다. 그런데 사람이 모든 글을 한 줄씩 검수할 거라면, 애초에 맡긴 의미가 없다. 자동화가 검수 노동을 새로 만들어 낸 셈이다.

이건 모델을 더 크게 키운다고 사라지지 않는다. 자기 글을 스스로 판정하게 두는 한, 능력이 올라가도 판정의 빈틈을 더 잘 찾을 뿐이다.

사람이 쓰는 건 한 장이다 — insight.yaml

abloq의 답은 분업이다: 생성은 확률적이어도, 검증은 결정론적이어야 한다. 산문을 짓는 비결정 노동은 에이전트가 하고, 그 산물의 합격 여부는 기계가 정한다.

그래서 사람이 쓰는 것은 인사이트 명세 한 장, insight.yaml뿐이다. 주제·관점·다룰 주장(claims)을 기계가 대조할 수 있는 형태로 적는다.

# insight.yaml — 사람이 쓰는 전부
topic: "robots.txt — 30년 관행이 표준이 되기까지"
stance: "robots.txt는 접근 제어 장치가 아니라 신호다"
claims:
  - id: rep-standardized-2022
    text: "robots.txt 관행은 1994년에 시작됐지만 IETF 표준(RFC 9309)이 된 것은 2022년이다"
    requires_source: true
    anchors: ["RFC 9309", "1994"]

여기 적힌 claims가 집필 게이트의 기준이 된다. 명세에 없는 주장은 글의 본론이 될 수 없고, 명세에 있는 주장은 본문에 대응해야 한다. 자료수집·집필·퇴고·번역·발행·갱신은 그다음 전부 에이전트의 몫이다.

blog.yaml — 블로그 하나의 전 선언

명세가 글 한 편의 SSOT라면, blog.yaml블로그 하나의 SSOT다. 사이트·언어·섹션·글의 정규 구조·GEO 임계·배포를 한 파일에 담는다.

site: { baseURL: https://example.com, title: My Blog }
languages: [en, ko, ja]          # 첫 항목 = 기본 언어
sections: [tech, opinion]
structure:
  order: [image, attribution, body, related, sources, changelog]
geo: { min_sources: 1, freshness_days: 90 }

여기서 hugo.toml·robots.txt·llms.txt·sitemap(hreflang)·JSON-LD·게이트 룰 파라미터가 전부 파생된다. blog.yaml이 바뀌지 않는 한 어떤 글도 게이트를 우회할 수 없다 — 제약은 계약이다. 선언을 손으로 베껴 둔 설정 파일들이 서로 어긋나는 드리프트가 구조적으로 불가능해진다.

FAIL은 의견이 아니라 사실이다

에이전트가 글을 제출(submit)하면 게이트가 판정한다. 아래는 실제 운행 기록이다 — 에이전트가 출처 섹션을 빠뜨리고 도달 불가능한 URL을 인용으로 달자:

en/tech/robots-exclusion-protocol -> FAIL
  - min-sources: content/en/tech/robots-exclusion-protocol.md:1
    actual="sources section missing — geo.min_sources requires >= 1"
  - citation-exists: content/en/tech/robots-exclusion-protocol.md:19
    actual="https://www.robotstxt.org/orig.html is not reachable (HTTP 403)"

FAIL은 “좀 이상한데” 같은 의견이 아니다. 위치(파일:라인)와 기대값이 박힌 사실(Fact)이다. 고칠 것은 추측이 아니라 그 Fact 하나다. 에이전트는 이 피드백으로 수렴하고, 수정 제출이 전 룰을 통과해야만 기계가 PASS를 잠근다.

여기서 how-make-quest의 역설이 다시 작동한다. 모델은 아첨한다 — 지시를 순순히 따른다. 의견에는 아첨이 독이지만, 사실에는 아첨이 자산이다. Fact를 되먹이면 아첨하는 모델일수록 그 Fact를 순순히 수용해 수렴한다.

잠긴 것은 되돌릴 수 없다 — 래칫

게이트의 핵심은 판정이 아니라 불가역성이다. 한 번 잠긴 PASS는 뒤로 미끄러지지 않는다. 다음 세션의 에이전트가 같은 글을 망쳐도, 기준선 아래로는 내려갈 수 없다.

그래서 에이전트는 일회용이어도 진행은 누적된다. 컨텍스트가 날아가고 모델이 바뀌고 세션이 끊겨도, 잠긴 칸은 잠긴 채로 남는다. 이것이 래칫이다 — 통과한 만큼만 잠그고, 잠근 것은 회귀를 허용하지 않는다. 완료 판정의 권한을 확률적인 LLM이 아니라 결정적인 기계에 두는 이유이기도 하다. 자기검증이 성능을 거의 올리지 못한다는 건 이미 측정된 사실이고, LLM-as-Judge가 구조적으로 불가능한 이상 판정자는 코드여야 한다.

다섯 개의 퀘스트, 각자 게이트로 닫힌다

abloq은 산문을 만지는 비결정 노동만 퀘스트로 남긴다. 검출·생성·측정·외부 API 호출은 결정적 코드가 하고, 에이전트는 글을 쓰는 다섯 가지 일만 한다. 각 퀘스트는 게이트로 닫힌다.

퀘스트트리거게이트(핵심)
writing사람의 insight.yaml명세 각 항목이 본문에 대응 · 인용 실재 검증 · 출처 ≥ 임계
translation새 글 + 본문 실변경구조 무손실(translation-parity) + 전 언어 slug 일치 + 빌드 0 에러
refresh신선도 스캐너 큐본문 실변경 동반 · 빈 lastmod 갱신 차단(honest-lastmod)
evidence주장-출처 스캐너 큐출처 ≥ 임계 · 신규 인용 실재 · 큐 밖 주장 한 글자도 불변
cluster클러스터 스캐너 큐태그가 taxonomy에 존재 · 고아 태그 0 · 내부 링크 ≥ 임계

치즈 방어는 전 퀘스트 공통이다. front matter 보존, 게이트 판정과 저장소 반영의 바이트 일치, 큐 아이템 범위 밖 파일 변경 금지. 에이전트는 외부 API를 직접 치지 않는다 — 아카이브·색인 같은 부수효과는 백엔드의 영수증으로 처리된다.

측정이 다음 노동을 지정한다 — GEO는 운용이다

AI가 당신의 글을 인용하는지는 직접 관측되지 않는다. abloq은 프록시 3계층으로 측정한다 — 크롤 계층(CloudFront 로그의 AI봇 히트, 결정적), 색인 계층(GSC 노출·클릭 추이, 결정적), 인용 계층(표준 질의 셋을 주기 실행해 AI 응답 속 인용을 추세로 기록, 비결정이라 게이트화하지 않음).

핵심은 측정이 거기서 끝나지 않는다는 것이다. 측정 결과는 우선순위 큐의 가중치가 되어 다음 퀘스트의 입력을 지정한다. 낡은 글은 refresh 큐로, 무출처 주장은 evidence 큐로, 고립된 글은 cluster 큐로 떨어진다. 측정이 노동을 지정하는 래칫 — 그래서 GEO는 상태가 아니라 운용이다. 한 번 최적화하고 끝나는 점수가 아니라, 계속 돌아가는 루프다. 인용을 끌어올리는 요소(출처·통계·인용문)가 가시성을 의미 있게 높인다는 건 생성 엔진 최적화 연구가 정량으로 보여준 바다.

reins 위에서 — 계보

abloq의 게이트는 맨바닥에서 시작하지 않는다. 결정론적 게이트 엔진 reins 위에 선다. reins가 래칫·명령 골격(scan/next/submit)·집계·export를 공급하고, abloq은 블로그 도메인의 게이트(구조·근거·정책 룰셋)만 구현한다.

계보는 분명하다. how-make-quest가 퀘스트를 맨손으로 짓는 원리를 가르쳤고, reins가 그 원리를 프레임워크로 뽑았고, abloq이 그 프레임워크를 블로그라는 한 도메인에 박았다. 같은 문장이 세 번 다른 고도로 내려앉는다 — 생성은 확률적, 검증은 결정론적.

이 글도 abloq이 잠갔다

이 글은 abloq의 writing 퀘스트로 썼다. 위에 보인 insight.yaml을 씨앗으로 시드(scan)하고, 집필 프롬프트를 받아(next) 본문을 쓰고, 제출(submit)해 게이트를 통과시켰다. 출처 섹션이 임계를 넘는지, 인용 URL이 실제로 도달 가능한지, 명세의 모든 claim이 본문에 대응하는지 — 그 판정을 사람의 눈이 아니라 기계가 했다.

집필 에이전트는 자기 글을 REVIEW할 수 없다. REVIEW는 반드시 다른 컨텍스트의 검토자가 작성하고, review-record 룰이 그 격리를 결정적으로 검사한다. 아첨하는 판정자를 구조적으로 배제하는 것 — 이 글이 스스로를 칭찬하지 못하도록 만든 장치가, 이 글이 설명하는 바로 그 원리다.

약속이 검증 가능하고, 위반이 정의되어 있고, 강제될 때 시스템은 수렴한다. 블로그도 예외가 아니다.

관련 글

더 읽을거리 (외부)

출처

  • Aggarwal, P. et al. (2024). “GEO: Generative Engine Optimization.” KDD 2024. arXiv:2311.09735 — 출처·통계·인용문 추가가 생성 엔진 내 가시성을 정량으로 높인다는 측정. abloq 가시성 운용의 근거.
  • Stechly, K., Valmeekam, K., & Kambhampati, S. (2024). “On the Self-Verification Limitations of Large Language Models.” arXiv:2402.08115 — 자기검증은 성능을 거의 못 올린다 → 완료 판정 권한을 결정적 기계에 둬야 하는 이유.
  • Koster, M., Illyes, G., Zeller, H., & Sassman, L. (2022). “Robots Exclusion Protocol.” RFC 9309 — 30년 관행이 IETF 표준이 된 사례(robots.txt 예시의 출처).

변경이력

  • 2026-06-11: 초판