AI 게임 스튜디오 · Codex CLI 오케스트레이션

아이디어 한 줄을 입력하면,
파이프라인이 게임을 만듭니다

기획 · 에셋 · 코드 · 검증 · 자기진화를 하나의 파이프라인으로 잇습니다. 게임 하나가 아니라, 게임을 만드는 생산 시스템 자체가 결과물입니다.

이주형 · Lee Ju Hyeong역할 — 파이프라인 설계·구현 (1인)
Node · TypeScript strict Codex CLI 내장 image_gen Chrome headless 검증
agent-forge — 5-stage pipeline RUNNING
기획Plan구현 범위로 묶는 GDD01
에셋Assetimage_gen → Canvas02
코드CodeCanvas 게임 생성03
검증Verify플레이 가능성 증명04
자기진화Evolve재사용 · 룰 누적05
재사용 템플릿 · 디버그 룰이 다음 생성에 반영 studio-memory ↺
0
파이프라인 단계 · 기획부터 자기진화까지
0
처리 도메인 · 게임 · 앱 · 문서
0
실제 생성 run · 게임 산출물 증거
0
공개 코드 시크릿 · 날조 산출물
01 · 문제

AI로 게임을 만들 때 늘 막히는 두 가지

과정이 안 보인다

어디서 막혔는지, AI가 무엇을 했는지, 만든 코드가 실제로 도는지 알 수 없습니다.

매번 처음부터

어제 만든 것을 오늘이 재활용하지 못합니다. 반복해 지어도 쌓이는 것이 없습니다.

Agent Forge는 생성을 단계로 쪼개 보이게 하고, 바꾸기 전에 플레이 가능성을 증명하며, 지을수록 쌓이는 생산을 지향합니다.
How it works

한 줄 입력이 검증된 게임이 되기까지

npm run generate -- "<아이디어>" 한 줄이면 오케스트레이터가 Codex CLI를 단계별로 부릅니다. 코드와 이미지가 한 흐름이고, 결과는 run 폴더에 그대로 남습니다. 아래 단계를 눌러 각 산출물을 확인하세요.

$ npm run generate -- "달빛 고사리를 모으는 대시 게임"
01 · 기획

구현 가능한 범위로 묶는 기획서

재미 규칙과 함께 엔진이 실제로 할 수 있는 것을 기획서에 같이 담습니다. 범위 밖(예: "3D MMO")은 조용히 버리지 않고 다운스코프로 표시합니다.

// gdd.json
{ "goal": "모든 고사리 수집 후 탈출",
  "design_rules": ["대시로 가속", "제한시간"],
  "template_api": ["move", "dash", "collect", "timer"],
  "downscoped": ["3D 지형 — 엔진 범위 밖"] }
02 · 에셋

스프라이트를 만들고 Canvas에 그립니다

image_gen이 스프라이트를 만들면 magenta-key로 배경을 빼고 atlas로 묶어 Canvas에 그립니다. DOM 요소가 아니라 실제 그림으로 렌더합니다.

// assets/pipeline
image_gen ──▶ magenta-key ──▶ atlas ──▶ drawImage()
// 스프라이트가 없어도 게임 내장 폴백 도형으로 렌더
03 · 코드

브라우저만 있으면 도는 게임

standalone Canvas 게임을 생성합니다. 생성에는 Codex CLI가 필요하지만, 플레이는 아무 브라우저에서나 됩니다. 결과는 run 폴더에 그대로 남습니다.

// runs/20260629T050944Z-moon-fern-dash/
├─ gdd.json    기획
├─ game.html  플레이 가능
├─ proof/     검증 결과
└─ meta.json  혈통 · 재사용 기록
04 · 검증

보기엔 멀쩡해도, 실제로 플레이되는가

화면 없이(headless) 실제로 플레이해 입력이 캐릭터를 움직이는지 · 점수가 바뀌는지 · 승패에 닿는지를 확인합니다. 멈춘 화면은 통과시키지 않습니다.

playerMoves scoreChanges winReachable: true 멈춘 화면 차단
05 · 자기진화

지을수록 쌓이는 메모리

완성한 게임은 다음 게임의 재료가 됩니다. 앞 게임에서 뽑은 템플릿을 다음 게임이 물려받아 재사용하고, 같은 에러가 세 번 이상이면 사전 체크 룰 후보가 됩니다. 룰 활성화는 사람 확인을 거칩니다.

템플릿 · stability 1crystal-fox-dash대시 메커니즘을 처음 완성
재사용 · stability 2moon-fern-dash대시 템플릿을 물려받아 누적
설계 결정

라벨이 아니라, 작동하는 코드로

설계로만 있던 게임 스튜디오 이론을 실제 작동 코드로 옮긴, 다섯 가지 핵심 결정입니다. 각 결정은 공개 저장소의 모듈로 재현됩니다.

결정 1엔진 · Codex CLI 오케스트레이션

Node가 코드 생성과 이미지 생성을 한 파이프라인에 묶습니다. 이미지는 에이전트가 한 말이 아니라 실제 파일로 회수합니다.

codex-cli.ts
결정 2기획 · 구현 범위를 아는 기획서

재미 규칙과 엔진이 실제 할 수 있는 것을 함께 담아, 구현 불가능한 디자인을 걸러냅니다. 범위 밖은 조용히 버리지 않고 다운스코프로 표시합니다.

template-api.ts
결정 3검증 · 플레이 가능성 먼저

게임이 실제로 움직이고 점수가 바뀌고 승패에 닿는지 화면 없이 확인합니다. 멈춘 화면은 통과시키지 않습니다.

reachability.ts
결정 4자기진화 · 지을수록 누적

완성한 게임은 재사용 스캐폴드로 쌓이고, 같은 에러가 세 번 이상이면 사전 체크 룰 후보가 됩니다. 룰 활성화는 사람이 확인합니다.

evolution.ts
결정 5에셋 · Canvas 백드

생성한 스프라이트를 배경 제거·묶음 처리해 실제 그림으로 그립니다. HTML 요소가 아니라 Canvas에 직접 렌더합니다.

assets pipeline
Proof

그럴듯한 화면이 아니라, 실제로 플레이됩니다

아래 둘은 파이프라인이 실제로 생성한 게임을 그 자리에서 플레이하는 화면입니다. 화면을 클릭해 포커스한 뒤 방향키 / WASD로 이동, Space로 대시하세요.

moon-fern-dash검증 통과 · win·fail 도달
방향키/WASD 이동 · Space 대시 · 클릭 재시작. 검증에서 승·패 조건 모두 도달 확인(winReachable: true).
magnet-coin-dash최초 run · 스프라이트 증명
코인 30개 · 60초. 가장 이른 생성 — 자석 수집·대시. 자기진화 이전 run이라 검증 블록은 없습니다(정직 표기).

두 게임 모두 파이프라인이 실제로 생성한 결과물입니다.

One pipeline, three outputs

같은 파이프라인, 세 산출물

기획 → 검증 → 자기진화라는 같은 5단계를 게임 · 앱 · 문서로 확장합니다. 게임은 위에서 실증했고, 앱은 별도 디자인 스튜디오로, 문서는 생성 샘플로 이어집니다.

게임실증

아이디어 → 기획 → 스프라이트 → Canvas 게임 → 플레이 가능성 검증. 위 두 게임이 실제 생성 결과입니다.

실제 플레이 보기
앱 · 디자인 시스템연계

같은 검증·누적 규율을 UI 산출로 확장합니다. 컴포넌트 · 프리셋 · 이펙트를 하나의 디자인 스튜디오로 정리한 별도 자산과 연결됩니다.

디자인 스튜디오
문서생성 샘플

코드 입력 → 문서 범위 → 코드 분석 → 집필 → 검증. 같은 파이프라인이 게임 대신 Markdown 문서를 산출하는 확장 모드입니다.

생성 문서 보기
runs/moon-fern-dash/docs/README.md 문서 모드 · 생성 샘플

Moon Fern Dash

자동 생성 기술 문서 · 입력 = game.html · 문서 모드 5단계
개요

제한 시간 안에 흩어진 달빛 고사리(mote)를 모두 모으면 승리하는 탑다운 대시 게임입니다. 대시로 순간 가속해 시간 안에 목표에 도달합니다.

조작
  • 이동 — 방향키 또는 WASD
  • 대시 — Space (짧은 쿨다운)
  • 재시작 — 게임 화면 클릭
게임 규칙
  • 목표 — 고사리 winTarget = 2개 수집 시 승리
  • 실패 — 제한 시간(failTime) 초과 시 패배
  • 상태 — play → win / fail 3상태 머신
코드 구조
// game.html — 단일 Canvas, 외부 의존 없음
update(dt)  → 입력·대시·수집·승패 판정 (순수 로직)
render()    → 배경·모트·플레이어·UI·오버레이 (표현)
loop(t)     → requestAnimationFrame 게임 루프
reset()     → 상태 초기화 (재시작)

update(규칙)와 render(화면)를 분리해, 규칙은 화면과 독립적으로 검증됩니다.

검증 결과
  • playerMoves · scoreChanges — 관측됨
  • winReachable — true (승·패 모두 도달)
  • 멈춘 화면 — 없음 (통과)
기술 스택

무엇으로 만들었나

오케스트레이터Node · TypeScript · Codex CLI (codex exec --json · 내장 image_gen)
모듈codex-cli · generate · template-api · reachability · evolution
검증Chrome headless · 관찰 digest · 단계 실행 커맨드
에셋image_gen → 배경 제거 → atlas → Canvas drawImage
모니터React 18 · Vite 5 · TypeScript strict · Tailwind (생성 결과 · 메모리 시각화)
산출runs/<id>/ (기획 · 에셋 · 게임 · 검증 · 메타) · MIT

초기 버전(브라우저 Gemini · DOM 웹앱)은 레거시입니다 — 진화 궤적의 증거로만 남겼습니다.

어떻게 읽히나

두 직무 관점

AI 응용 엔지니어 · FDE

프로덕션 에이전트 시스템

멀티스텝 오케스트레이션 · 플레이 가능성 검증(멈춘 화면 차단) · 자기진화(누적 메모리 · 사람 승인) · 비용/모델 인식. 에이전트를 "돌려보는" 게 아니라 운영하는 감각입니다.

게임 · 게임 AI · 툴 · PM

생산 시스템이 산출물

AI로 게임을 기획→에셋→코드→검증까지 만드는 시스템입니다. 다중 관점 교차검증과 플레이 가능성 검증 패턴이 다른 작업에도 그대로 이어집니다.

Operating harness

만들게 두지 않고, 규율로 운영합니다

"AI가 게임을 만들어준다"가 아닙니다. 만드는 과정을 검증하고 누적하도록, 여섯 개의 운영 규율을 설계해 파이프라인에 심었습니다.

검증 계약을 먼저

무엇을 통과해야 하는지를 생성 전에 정합니다. 만든 뒤 점수를 매기는 게 아니라, 기준을 먼저 세웁니다.

규칙과 화면을 분리

게임 규칙은 순수 로직으로, 렌더·플랫폼은 바깥으로. 경계를 넘기 전에 반드시 이름을 붙입니다.

표현까지 증명

코드가 도는 것과 화면에 실제로 나타나는 것을 각각 확인합니다. 통과 테스트가 실제 플레이를 대신하지 않습니다.

멈춘 결과는 차단

플레이 가능성을 통과하지 못하면 배포하지 않습니다. 되돌림에는 상한을 둬, 무한 루프 대신 종료합니다.

사람 승인 게이트

자기진화로 쌓인 규칙은 사람이 확인한 뒤에만 켜집니다. 자동으로 스스로 반영하는 일은 없습니다.

지을수록 누적

재사용 템플릿과 반복 에러 규칙이 쌓여, 다음 생성이 앞선 결과를 물려받는 구조입니다.

용어

비전문가용 한 줄 풀이

Codex CLI
터미널에서 코드와 이미지를 생성하는 AI 실행 도구입니다. 여기선 Node가 단계별로 부릅니다.
image_gen
Codex에 내장된 이미지 생성입니다. 게임 스프라이트(픽셀 그림)를 만듭니다.
headless
화면 없이 브라우저를 돌려, 게임이 진짜 작동하는지 자동으로 점검하는 방식입니다.
플레이 가능성
이 게임을 실제로 플레이해 승리까지 갈 수 있는지를 만든 뒤에 증명하는 검증입니다.
GDD
게임 기획서(Game Design Document)입니다. 여기선 재미 규칙과 엔진의 실제 능력을 함께 담습니다.
사람 승인 게이트
자동화 중간에 사람 확인 단계를 끼워, AI가 혼자 결정하지 않게 하는 방식입니다.
주형 유니버스 · Juhyeong Universe

Agent Forge는 이 은하의 한 별입니다

Agent Forge에서 만든 게임들은 제가 이어 온 AI 게임 은하의 일부입니다. 각 프로젝트가 서로 연결된 하나의 세계로 이어집니다.

AI 게임 은하로 진입
Agent Forge AI 게임 포트폴리오 디자인 스튜디오