본문으로

Penelope Ontology이야기 생성 엔진 · 개인 작업 · 2026.07

선택 하나에 세계 속 인물이
모두 움직이는 이야기 생성 엔진

사용자가 고른 선택이 다음 대사 한 줄만 바꾸고 끝나면 이야기는 금방 납작해집니다. Penelope Ontology는 선택 하나가 들어오면 세계 속 인물 모두가 그 결과를 받게 합니다. 누가 무엇을 새로 알게 됐는지, 누가 의심을 품고 움직이기 시작했는지, 어떤 대가가 다음 장면까지 남는지를 먼저 계산하고, AI는 그 결과를 문장으로 씁니다. 이야기가 무너지는 네 조건은 가드레일로 걸어 두어서, 매끄럽지만 설정을 깨는 문장은 세계에 들어오지 못합니다.

자동 시험 893개 모두 통과선택의 결과가 인물 반응·지식·결말로 이어지는지, 가드레일이 지켜지는지 확인 · 108개 파일 · 2026-10-21 직접 실행

내가 정한 것
선택 하나가 세계 속 인물 모두에게 번지게 하는 원칙, 이야기가 무너지는 네 조건(가드레일), 세계를 통제하는 규칙, 문장 판단 기준, 최종 범위
AI가 짠 것
그 판단을 옮긴 규칙 코드, 화면, 자동 시험, 배포 전 검사 (Codex 구현)
내가 확인한 것
데모 장면 문장을 직접 읽고 고르거나 고침, 제품 범위 승인(2026-07-15)

이주형장편소설을 낸 작가 · OpenAI Build Week 제출(Work & Productivity 부문) · TypeScript · Next.js · Vercel · MIT 라이선스로 공개

라이브 데모 열기 영상 보기 (2분 42초) GitHub 저장소

선택 하나가 이야기가 되기까지

세계가 먼저 움직이고 문장은 나중에

  1. 세계 불러오기

    이야기 세계 하나를 설정표로 불러옵니다. 인물마다 아는 것과 모르는 것이 따로 적혀 있습니다.

  2. 선택하기

    창작자가 추천(A), 대안(B), 직접 방향(C) 가운데 하나를 고릅니다. C를 고르면 인물의 목표, 동기, 감수할 대가를 먼저 묻습니다.

  3. 세계가 먼저 움직임내가 정한 규칙

    미리 정한 규칙이 행동의 결과와 대가, 장면 안팎 인물의 반응, 결말 조건을 계산합니다. 이 단계에는 AI 문장이 끼어들지 않습니다.

  4. 문장과 창작자 판정

    AI는 인물이 볼 수 있는 범위만 받아 문장 후보를 씁니다. 가드레일에 걸린 후보는 세계를 바꾸지 못하고, 통과한 후보는 창작자가 받아들이거나 고치거나 버립니다.

선택이 모두에게 닿는 모습

오디세이아 19권 데모 · 실제 시험

파장 1

장면 밖 인물도 반응합니다

비밀을 지키려고 하녀 멜란토를 방에서 내보내면 멜란토는 나갑니다. 그런데 쫓겨난 이유를 캐려고 장면 밖에서 조사를 시작하고, 의심 수치도 함께 오릅니다. 목격자를 치웠더니 조사자가 생깁니다.

시험인물의 반응을 그 선택에서 이어진 사건으로 기록함.

파장 2

가만히 있어도 인물은 움직입니다

주인공이 아무것도 하지 않고 기다리면 다른 인물이 자기 목표를 한 걸음 진행합니다. 사용자가 멈춰 있어도 세계는 멈추지 않습니다.

시험주인공이 기다리면 다른 인물의 목표가 진행됨. 목표를 이미 이룬 인물에게는 반응을 더 만들지 않음.

파장 3

반응이 새 지식을 만듭니다

인물이 처음부터 아는 것과 다른 인물의 반응을 보고 새로 알게 된 것을 따로 기록합니다. 다음 장면에서 인물은 그때까지 알게 된 만큼만 말하고 행동합니다.

시험처음 아는 것과 반응으로 알게 된 것을 나눠 기록함.

파장 4

같은 지점에서 다른 결말로

같은 저장 지점으로 돌아가 멜란토 대신 유모 에우리클레이아의 반응을 막으면, 같은 과거에서 「정체 지킴」 결말로 갑니다. 두 갈래는 인물의 위치, 아는 것, 위험, 결말이 어떻게 달라졌는지로 비교합니다.

시험같은 지점에서 갈라진 두 결과를 상태 차이로 비교함. 정해 둔 결말 네 개에 모두 닿을 수 있음.

인물 반응은 세계 설정표에 미리 적어 둔 인과 규칙으로 계산합니다. 사용자가 자리를 비운 동안에도 인물들이 스스로 살아가는 기능은 아직 없습니다. 장면의 문장과 화면은 미리 준비한 결과입니다.

가드레일: 이야기가 무너지는 네 조건

내가 정한 조건 · 엔진이 막는 방법 · 실제 시험

조건 1

비밀이 엉뚱한 인물에게 샌다

인물마다 아는 것을 따로 두고, 문장을 쓸 때는 그 인물이 알 수 있는 것만 넘깁니다.

시험페넬로페에게 오디세우스가 오기기아섬에 있다는 사실을 넘기지 않음. 유모 에우리클레이아가 흉터를 알아본 일은 겉으로 드러날 때까지 비밀로 둠.

조건 2

과거 선택의 대가가 지워진다

선택이 남긴 결과를 기록해 다음 장면으로 넘깁니다. 같은 행동이라도 세계 상태가 다르면 결과가 달라집니다.

시험앞선 선택의 결과가 다음 장면의 맥락에 실림. 같은 대면이 상태에 따라 다른 결과를 냄.

조건 3

없던 설정이 갑자기 생긴다

근거 없는 설정은 세계에 넣지 않고, 세계를 넓힐지 창작자에게 묻습니다.

시험이미 죽어 그 자리에 없는 헥토르를 살아 있는 인물로 쓴 초안을 막음. 「숨은 마법 거울로 변장을 꿰뚫는다」는 제안은 세계를 바꾸지 않고 목표만 남겨 둠.

조건 4

모든 인물이 서술자처럼 움직인다

서술자가 아는 사실과 그 인물이 보고 들을 수 있는 사실을 나눕니다.

시험인물이 확신할 수 없는 일을 서술자가 보고하듯 단정하는 문장을 막음. 장면에 없는 인물의 대사를 거부함.

시험 예시는 저장소의 자동 시험 이름을 우리말로 옮긴 것입니다. 오디세이아 장면은 공개 저작물을 직접 요약한 것입니다.

세계를 먼저 계산하게 바꾼 과정

다음 문단부터 쓰던 방식 → 세계를 먼저 계산하는 방식

  1. 문제

    흔한 AI 이야기 도구는 다음 문단을 바로 씁니다. 문장은 유창해도 누가 무엇을 아는지, 어떤 대가가 남았는지는 쉽게 잊습니다.

  2. 판단

    세계의 설정(지식, 동기, 위험, 관계, 결말)과 표현(문장)을 나눴습니다. 선택이 들어오면 세계 상태가 먼저 움직이고, 문장은 그 결과만 받습니다.

  3. 검증

    네 조건이 지켜지는지 자동 시험으로 확인하고, 조건을 어긴 초안을 일부러 넣어 막히는지도 봅니다. 지금 저장소의 시험 893개가 모두 통과합니다.

  4. 결과

    계정이나 API 키 없이 열리는 공개 데모에서 오디세이아 19권, 오즈, 창작자가 만든 세계가 같은 엔진으로 돌아갑니다.

숫자로 본 결과

2026-10-21 npx vitest run으로 직접 실행

893개자동 시험 모두 통과 (108개 파일, 실패 0)
21개창작자 판정을 지키는 시험 (직접 방향 묻기 13 + 문장 검토 8)
7개인물별로 아는 것을 나누는 시험 (지식 범위 5 + 인물별 자료 찾기 2)
4개오디세이아 19권 세계에 정해 둔 결말 (정체 지킴 · 통제된 발견 · 계획 노출 · 시간 초과)

공개 데모와 영상의 문장은 미리 준비해 둔 결과이고, 공개 데모는 AI 모델을 부르지 않습니다. 자동 시험은 규칙이 지켜지는지를 보고, 문장의 문학적 품질은 따로 평가하지 않았습니다.

캐릭터 챗과 AI 스토리 서비스에 붙인다면

이 엔진이 맡을 수 있는 일

캐릭터 챗

인물이 자기가 아는 만큼만 말합니다

대화 속 선택이 관계와 의심 같은 상태로 남아서, 대화가 길어져도 앞서 생긴 대가가 사라지지 않습니다.

인터랙티브 스토리

선택마다 세계가 갈라집니다

사용자의 선택이 정해 둔 결말 조건으로 이어지고, 같은 지점에서 고른 다른 선택과 나란히 비교할 수 있습니다.

세계관 운영

설정 밖 전개는 허락받고 들어옵니다

근거 없는 설정은 창작자가 승인할 때만 세계에 들어옵니다. World Forge로 두세 문장 설정에서 다섯 장면짜리 이야기를 만듭니다.

실제 서비스에 붙여 사용자 반응을 잰 적은 아직 없습니다.

궁금한 부분을 더 자세히

소설을 쓰던 눈으로 정한 규칙출간 이력과 정한 규칙
출간
  • 장편소설 「초파리」 (핌, 2024) · 집필 5년
  • 동화에세이 「별로 간 소년」 (풍경놀이터, 2021)
  • 동화 「선글라스」 외 4편 (풍경놀이터, 2022)
이 엔진에 정한 규칙
  • 인물은 자기가 아는 것만 말하고 행동한다
  • 선택의 대가는 다음 장면까지 남는다
  • 근거 없는 설정은 창작자가 허락할 때만 들어온다
  • 서술자가 아는 것과 인물이 보는 것을 나눈다
  • 문장의 최종 판정은 창작자가 한다
한 장면으로 보기: 오디세이아 19권목격자를 내보내면 조사자가 생김

공개 데모는 오디세이아 19권의 밤 장면에서 시작합니다. 오디세우스는 변장한 채 돌아와 있고, 유모 에우리클레이아는 그의 다리 흉터를 알아보려 하고, 하녀 멜란토는 근처에서 약점을 찾고 있습니다.

창작자가 비밀을 지키려고 멜란토를 방 밖으로 내보내면 멜란토는 나갑니다. 대신 장면 밖에서 조사를 시작하고 의심 수치가 올라가, 그대로 두면 「계획 노출」 결말로 갈 수 있습니다. 같은 지점으로 돌아가 에우리클레이아의 반응을 막으면, 같은 과거에서 「정체 지킴」 결말로 갑니다.

두 갈래는 인물의 위치, 아는 것, 위험, 결말이 어떻게 달라졌는지로 비교합니다. 이 장면의 문장과 화면은 미리 준비한 결과입니다.

인물마다 아는 것이 다르게시험 7개 + 문장 검사

세계 설정표에는 사실마다 누가 알고 있는지가 적혀 있습니다. 문장을 쓰기 전에 장면에 있는 인물이 알 수 있는 사실만 골라 넘기고, 다 쓴 문장에서도 숨겨야 할 표현이 그대로 나오면 막습니다.

인물별 지식 범위 시험 5개는 페넬로페와 같은 장면의 인물에게 오기기아섬 이야기가 새지 않는지, 서술자처럼 단정하는 문장과 장면에 없는 인물의 대사를 막는지 확인합니다. 인물별 자료 찾기 시험 2개는 같은 입력에 늘 같은 자료가 나오고 숨긴 사실은 나오지 않는지 확인합니다.

최종 판정은 창작자가시험 21개

창작자는 매 선택에서 추천(A), 대안(B), 직접 방향(C)을 고릅니다. C를 고르면 엔진이 인물의 목표, 동기, 감수할 대가를 한 번에 하나씩 묻고, 답이 모자라거나 모호하거나 세계에 근거가 없으면 세계를 바꾸지 않습니다. C가 A나 B로 몰래 바뀌는 일도 없습니다. 직접 방향을 지키는 시험이 13개입니다.

문장 후보가 나오면 창작자가 받아들이거나, 고치거나, 버립니다. 버리면 저장 지점이 바뀌지 않고, 고치더라도 이미 계산된 사건은 다시 쓰지 않습니다. 문장 검토를 지키는 시험이 8개입니다.

세계를 직접 만드는 World Forge두세 문장 → 24개 승인 → 다섯 장면

두세 문장짜리 설정을 넣으면 엔진이 제목, 두 인물, 장소, 바뀌지 않는 사실, 서로 다른 목표, 숨긴 지식, 금지할 전개, 결말 조건 같은 항목 24개를 하나씩 묻고, 창작자가 모두 승인하면 다섯 장면짜리 이야기 하나를 만듭니다.

세계는 정해 둔 관계 하나와 두 갈래 전략, 숨긴 지식, 대가, 결말 조건을 갖춥니다. 창작자가 직접 올린 세계는 공개 목록에 올라가지 않고, 서버 메모리에서 30분 뒤 지워집니다. 아직 공개하지 않은 원고는 공개 데모 대신 자기 컴퓨터에서 실행하라고 안내합니다.

아직 모르는 것과 주장하지 않는 것준비된 결과와 실제 생성 구분

공개 데모, 화면, 영상에 나오는 문장은 모두 미리 준비한 결과입니다. 공개 데모는 AI 모델을 부르지 못하게 막혀 있습니다.

제 컴퓨터에서 gpt-5.6-terra로 문장을 만든 실행이 있습니다. 네 턴짜리 실행에서 가드레일이 문장 후보 두 개(모호한 대명사를 쓴 문장, 화로를 행동하는 주어로 쓴 문장)를 막고 세계 상태를 그대로 두었고, 그 뒤 후보 네 개는 검사를 통과했습니다.

OpenAI 도구가 맡은 일은 Codex 구현, 대회 제출용 피드백 기록, 로컬 실행의 문장 생성(gpt-5.6-terra)입니다. 이야기의 저작과 최종 판정은 창작자에게 있습니다.

생성 문장의 문학적 품질, 실무자가 실제로 쓰는지, 작업 시간이 줄었는지는 아직 재지 않았습니다. 세계 설정표 하나가 다루는 범위는 장면 몇 개 분량의 정해진 이야기입니다.

기술과 저장소 구성실행 · 시험 · 폴더

TypeScript, Next.js 16, React 19로 만들었고 입력 형식은 Zod로 검사합니다. 시험은 Vitest와 Playwright, 배포는 Vercel입니다.

직접 실행: npm ci 다음 npm run dev. 시험: npx vitest run. API 키 없이 돌아갑니다.

규칙과 세계 계산은 src/domain, 선택 처리와 World Forge는 src/application, 화면은 components/world, 시험은 tests에 있습니다.

이주형 · Penelope Ontology

선택 하나에
모두가움직인다

선택 하나가 들어오면 세계 속 인물 모두가 그 결과를 받습니다. 누가 알게 됐는지, 누가 움직이기 시작했는지, 어떤 대가가 남는지를 먼저 계산하고 문장은 그 뒤에 쓰는 이야기 생성 엔진입니다.

01 작동 흐름
  1. 세계 불러오기
  2. A · B · C 선택
  3. 세계가 먼저 움직임내 규칙
  4. 문장 후보 → 창작자 판정

버린 문장은 세계를 바꾸지 않습니다.

02 선택의 파장
  • 쫓겨난 인물이 장면 밖에서 조사
  • 기다리면 다른 인물이 목표를 진행
  • 반응을 본 인물이 새로 알게 됨
  • 같은 지점에서 다른 결말
03 가드레일
  • 비밀은 아는 인물에게만
  • 선택의 대가는 남는다
  • 없던 설정은 허락받고
  • 인물은 서술자처럼 알 수 없다
04 결과893

자동 시험 893개 모두 통과

108개 파일 · 2026-10-21 직접 실행 · 창작자 판정 시험 21개 · 인물별 지식 시험 7개

05 한 장면

오디세이아 19권에서 비밀을 지키려고 하녀 멜란토를 내보내면, 멜란토는 장면 밖에서 조사를 시작합니다. 목격자를 치웠더니 조사자가 생깁니다. (공개 데모의 준비된 결과)

공개 데모와 영상의 문장은 미리 준비한 결과입니다.