하네스는 계약이다Inflearn Offline Meetup
Harness Engineering · 90 min

하네스는
계약이다

단일 프롬프트의 한계에서 오픈소스 Agent OS까지.
실패 사례에서 시작해, 8개 런타임을 붙이며 내린 판단과
오픈소스로 이 층을 만들어 온 과정을 이야기합니다.

Jaegyu Lee
Jaegyu Lee Q00 · Ouroboros maintainer
LinkedIn QR
LinkedIn발표 후 이어서
이야기해요
github.com/Q00/ouroboros01 / 23
하네스는 계약이다Contents
Session Map · 4 × 20 min + QnA

오늘 90분에 담은 이야기

1부20 MIN

왜 하네스가 필요해졌나

구현법이 아니라 실제 실패 사례로 이해하는 단일 프롬프트의 한계.

2부20 MIN

8개 런타임을 붙이며 느꼈던 점

인터페이스·상태·파일 시스템·권한·실행 환경, 그리고 그때의 판단.

3부20 MIN

하네스는 에이전트에게 줄 수 있는 계약이다

메타하네스와 self-improving, 그리고 에이전트 메모리라는 트렌드.

4부20 MIN

오픈소스로 Agent OS를 만든다는 것

피드백·이슈·신뢰·릴리즈, 그리고 실패한 설계를 버리는 일.

마지막 10분은 QnA로 진행합니다. 중간 질문도 환영합니다.

Agenda02 / 23
하네스는 계약이다Part 1 — Why harness
1PART 1 / 4
1부 · 왜 하네스가 필요해졌나

"AI 코딩은 출력이 아니라
입력에서 실패한다."

AI가 실행을 대신하기 시작하자 질문 하나가 남았습니다 —
그러면 우리는 AI에게 무엇을, 어떻게 시켜야 하는가.

서울대학교 디자인씽킹 강연에서 Double Diamond를 다시 보다, deliver 이전의 세 단계가 진짜 일이라는 걸 깨달았습니다. 소크라테스의 문답법과 허버트 사이먼의 철학이 겹치며 "입력을 잘해야 한다"로 수렴했습니다.

단일 프롬프트의 한계03 / 23
하네스는 계약이다Part 1 — Real failures
세 가지 실화

저는 세 번, 같은 방식으로
당했습니다

CASE 01

소크라테스를 자처한 에이전트

"문서를 개선해줘"라고 시켰을 뿐인데, ralph evolve 4세대쯤 에이전트는 스스로 '소크라테스'를 자처하며 요청에 없던 자동 툴 감지·문서 감사 시스템을 짓고 있었습니다.

CASE 02

존재하지 않는 플래그의 승인

리뷰 봇이 zcode runtime PR에서 실제 zcode CLI에 없는 --model 플래그를 승인했습니다. 라이브 검증 없이 Codex의 관성을 그대로 옮긴 판단이었습니다.

CASE 03

정상 실행을 위조로 오판

릴리즈 직전, fat-harness 검증기가 멀쩡한 실행을 FABRICATION으로 오판했습니다. 안전장치가 정상 실행까지 막을 수 있는지를 검증하지 못한 것입니다.

발표자 실화 · reward hacking04 / 23
하네스는 계약이다Part 1 — Diagnosis
진단

모델을 탓하다가
멈춰 선 날

A · 출력을 탓하는 루프

더 좋은 프롬프트

  • 모델이 멍청해서 그래
  • 프롬프트를 더 길게
  • 다시 굴려보기
  • 사람이 매번 검수
B · 입력을 고치는 루프

더 좋은 환경

  • 의도를 구조로 고정
  • 검증을 코드로 강제
  • 실행 기록을 남기기
  • 성공을 재현 가능하게
철학이 생긴 지점05 / 23
하네스는 계약이다Part 1 — Structural limits
단일 프롬프트에 없는 네 가지

프롬프트에 없던 네 가지를
세어봤습니다

01 · STATE

상태 없음

대화가 끝나면 의도도 함께 사라집니다. 다음 세션은 처음부터 다시 설명해야 합니다.

02 · VERIFY

검증 없음

에이전트의 자기 보고 외에는 완료를 판정할 장치가 없습니다.

03 · PERMISSION

권한 없음

무엇을 해도 되고 무엇은 안 되는지가 문장 속 부탁으로만 존재합니다.

04 · REPLAY

재현 없음

같은 입력을 다시 만들 방법이 없어, 성공도 실패도 일회성입니다.

이 네 가지 결핍을 코드로 메우는 층 — 그것이 하네스입니다.

하네스가 필요한 이유06 / 23
하네스는 계약이다Part 2 — Eight runtimes
2부 · 8개 런타임을 붙이며 느꼈던 점

일단 여덟 개에
붙여보기로 했습니다

Claude Codehook · skill · MCP 생태계
Codex CLI세션 지향 런타임
OpenCode오픈소스 TUI 런타임
HermesNousResearch 에이전트
Gemini CLI공식 CLI 서브프로세스 어댑터
Copilot CLI라이브 모델 카탈로그
Kiro CLIheadless 모드 실행
Pi CLIJSON mode 실행

같은 workflow spec이 여덟 런타임에서 돌아야 합니다. 문제는 기능이 아니라 차이였습니다.

multi-runtime adapter07 / 23
하네스는 계약이다Part 2 — Five surfaces
갈라진 다섯 표면

여덟 번 붙이고 나서야
보인 것들

Surface런타임마다 갈린 지점우리가 내린 판단
인터페이스subagent를 Claude는 RPC로 부르고, Codex는 명시 기능이 없어 자연어로 지시어댑터 뒤로 숨기고 workflow spec은 하나로 유지
상태 관리resume으로 세션을 잇는 툴과, 매번 새로 시작하는 툴이 섞여 있음상태의 소유자는 런타임이 아니라 event store
파일 시스템작업 디렉토리·샌드박스·경로 규칙의 차이파일 변경은 evidence로 정규화해서 기록
권한자동 승인·프롬프트 승인·스코프 모델이 상이권한은 policy에 선언하고 런타임은 집행만
실행 환경설치 경로·모델 카탈로그·플랫폼 제약setup에서 감지해 capability로 노출
interface · state · fs · permission · env08 / 23
하네스는 계약이다Part 2 — The judgment
핵심 판단 · capability graph

능력마다 이름을
붙여주기 시작했습니다

Claude Code의 코드가 유출됐을 때, 모델에게 툴을 'capability'로 설명하는 방식에서 힌트를 얻었습니다. 여기에 DDD의 유비쿼터스 언어를 겹쳐, ouroboros 능력마다 통용 이름을 붙이고 런타임별로 번역했습니다.

Ouroboros capabilityClaude CodeCodexcapability가 없을 때
askUserAskUserQuestionrequestUserInput질문을 자연어로 본문에 삽입
subagentRPC call명시 기능 없음 · 자연어 지시단일 세션에서 순차 처리

capability가 있으면 각 런타임의 네이티브 기능으로, 없으면 자연어로 설명하는 fallback. 통용 언어를 만들어 런타임 전체에 전파했습니다.

capability를 숨기지 않는다09 / 23
하네스는 계약이다Part 2 — Lesson
2부의 결론

런타임은 갈아 끼우는 부품이 되고,
계약만이 남는다.

여덟 런타임을 붙이고 나서야 알게 됐습니다.
하네스의 본체는 실행기가 아니라, 실행기들 사이에서 변하지 않는 약속이라는 것을요.

same spec, different engines10 / 23
하네스는 계약이다Part 3 — Harness as contract
3PART 3 / 4
3부 · 하네스는 에이전트에게 줄 수 있는 계약이다

에이전트에게 필요한 건
더 긴 지시가 아니라 계약과 환경이다.

사람에게 좋은 온보딩이 문서 더미가 아니라 명확한 역할·권한·평가 기준이듯,
에이전트에게도 같은 것을 줄 수 있습니다.

contract over instruction11 / 23
하네스는 계약이다Part 3 — The loop I drew
모호함이 계약이 되고 · 결과가 다음 세대의 입력이 된다

제가 화면에 띄워놓고
설명하던 그림

Interview에서 모호함이 0.2 이하로 떨어지면 Seed는 immutable로 고정됩니다. 각 단계를 서로 다른 하네스(Codex·Omx·CC·Hermes)가 맡아도 Seed Contract는 그대로고, 모든 기록은 event store로 내려가 다음 세대의 입력이 됩니다.

Interview → Seed → AC Tree → Execute → Evaluate 루프를 그린 발표 화면

Interview → Seed → AC Tree → Execute → Evaluate ↻ Wonder · Reflect — 발표 화면 캡처

interview → seed → ac tree → execute → evaluate12 / 23
하네스는 계약이다Part 3 — Self-improving
메타하네스에서 self-improving까지

여기까지 어떻게
올라왔는지

STEP 01

Prompt

사람이 매번 지시를 새로 씁니다. 성공은 우연에 가깝습니다.

STEP 02

Harness

실행 루프·검증·권한이 코드로 고정됩니다. 성공이 재현 가능해집니다.

STEP 03

Meta-harness

하네스가 하네스를 구성합니다. 에이전트가 자신의 스킬·설정·워크플로를 만듭니다.

STEP 04

Self-improving

실행 기록이 판정을 거쳐 다음 실행의 입력이 됩니다. 단, 자기개선에는 배포 규율이 붙습니다.

봇은 열되 머지하지 않습니다 (bot opens, never merges). human merge가 safety valve이고, 머지 가능한 diff는 PR·새 capability는 Issue로, rollback은 분·초 단위로 되돌릴 수 있게.

배포 규율 출처: ICML 2026 "Self-Improving Tool Agents" 발표 구조

meta-harness → self-improving13 / 23
하네스는 계약이다Part 3 — Agent memory
다음 트렌드 · 에이전트 메모리

봇에게 기억이
생기고 나서

LAYER 01

Working

지금 이 턴의 컨텍스트 창. 프롬프트가 다루던 유일한 기억.

LAYER 02

Episodic

지난 실행들의 기록. event journal과 replay가 여기에 해당합니다.

LAYER 03

Semantic

반복에서 추출된 사실. 출처가 박힌 ledger 항목으로 남습니다.

LAYER 04

Procedural

일하는 방식 자체의 갱신. 스킬과 하네스 설정이 진화합니다.

실전 사례 — ouroboros bot: 메모리 프로필을 스스로 갱신하며 성장하고 회고하는 메인테이너 봇. PR 리뷰, 이슈 체크, 직접 PR 작성까지 합니다.

memory is a layer14 / 23
하네스는 계약이다Part 3 — The bot sets a boundary
실전 · ouroboros bot

봇이 스스로
선을 그었습니다

한 유저가 "나를 조사해봐"라고 하자, 봇은 시키지 않았는데도 조사 범위의 경계를 먼저 선언했습니다 — 공개 footprint만 보고, 실명·위치·연락처는 추적하지 않겠다고. 계약이 사람의 감시가 아니라 봇의 판단으로 지켜지는 순간이었습니다.

ouroboros bot이 조사 범위의 경계를 스스로 선언하는 디스코드 대화

ouroboros bot — Discord, 2026-07-13

the bot declares its own scope15 / 23
하네스는 계약이다Part 4 — Open source Agent OS
4PART 4 / 4
4부 · 오픈소스로 Agent OS를 만든다는 것

유저가 원하는 걸 계약으로 만들고,
어떤 하네스가 올라가도 상관없게.

공동 메인테이너 나정환 님과의 대화에서 비전이 잡혔습니다 — OS가 시스템콜과 리소스를 추상화해 인터페이스만 맞으면 어떤 프로그램이든 띄우듯이.

에이전트의 모든 행동을 로그로 남기고 검증할 수 있다면, 그것이 새로운 agent era의 OS입니다.

contract-based agent os16 / 23
하네스는 계약이다Part 4 — A repo that stopped
지표 이야기 · 반례 하나

스타를 다 받고
멈춘 레포를 봤습니다

11.7k 스타, 1k 포크. 숫자만 보면 성공한 프로젝트입니다. 그런데 마지막 커밋이 7개월 전에 멈춰 있었습니다. 스타를 다 받고 멈춘 레포는, 결국 죽은 레포더군요.

11.7k 스타를 받고도 마지막 커밋이 7개월 전에 멈춘 GitHub 레포

11.7k stars · 1k forks · 마지막 커밋 7개월 전 — GitHub, 2026-07 캡처

stars are not aliveness17 / 23
하네스는 계약이다Part 4 — Operating reality
운영의 실제 · 메인테이너 지표

저는 스타 수를 믿지 않습니다

2026-01-14repo 생성
4,890stars
482forks
109version tags · 6개월
v0.50.4v0.1.0a1 → latest

GitHub API, 2026-07-15 조회. 오픈소스의 진짜 지표는 스타 수가 아니라 — (1) 유저가 이슈를 얼마나 잘 올려주는가, (2) 실제 다운로드 수, (3) 버전별 다운로드로 유저가 업데이트를 따라오는지입니다.

ouroboros-ai 패키지 일일 다운로드 추이

ouroboros-ai 패키지 일일 다운로드 · 1월 말 0에서 피크 약 3만/일 — pypistats, 2026-01-26 – 07-13

issues · downloads · release adoption18 / 23
하네스는 계약이다Part 4 — Killing a design
버리는 것도 설계다

OS에 메모장은 있어도
한컴은 없다

fat skill을 OS에 넣으려다 뺐습니다.
core에는 퍼스트레벨 프로그램만 남기고, 무거운 스킬은 plugin으로 분리했습니다.

Deprecation RecordOUROBOROS
signalfat skill이 core를 무겁게 함
decisioncore는 first-level 프로그램만
movefat skill → Q00/ouroboros-plugins
framefat-skill-thin-harness = vertical 축
ouroboroshorizontal Contract-based Agent OS
vertical fat-skill vs horizontal contract-os19 / 23
하네스는 계약이다Part 4 — Working with the bot
봇과 함께 일하는 메인테이너

봇이 자기 실수를
먼저 고백했습니다

릴리즈 직전, 봇은 자기가 놓친 것들을 스스로 회고했습니다 — 존재하지 않는 --model 플래그를 승인한 일, 정상 실행을 위조로 오판한 일. 그리고 앞으로 어떻게 기준을 바꾸겠다고 먼저 적었습니다. 봇이 먼저 gate하고, 사람은 정리된 것만 봅니다.

봇이 릴리즈 게이트 실패를 스스로 회고하는 디스코드 대화

봇의 공개 릴리즈 게이트 회고 — Discord, 2026-07-07

bot gates, human merges20 / 23
하네스는 계약이다Part 4 — Why it matters
임팩트는 빌더에게 왜 중요한가

임팩트는 스타 수가 아니라,
누군가의 워크플로가 바뀌는 순간이다.

01

씬을 움직인다

오픈소스는 AI 씬의 기본값을 바꾸는 가장 빠른 방법입니다. 좋은 계약은 복제됩니다.

02

이름이 곧 이력

빌더 개인에게 공개된 설계 판단의 기록은 어떤 이력서보다 강한 증명이 됩니다.

03

혼자보다 멀리

기여자와 사용자의 피드백 루프가 혼자서는 도달할 수 없는 완성도를 만듭니다.

impact for builders21 / 23
하네스는 계약이다Discussion
Q
10 min · Ask me anything

질문
있으신가요

하네스, 런타임, 오픈소스 운영 —
무엇이든 질문해 주세요.

QnA22 / 23
하네스는 계약이다Colophon · Takeaway
Takeaway

프롬프트가 아니라
계약을 남기세요

실패는 입력에서 시작되고,
계약은 실행을 재현 가능하게 만들며,
그 기록이 에이전트의 기억이 됩니다.

Ouroboros repository QR
Ouroborosgithub.com/Q00/ouroboros
오픈소스 Agent OS

별 하나, 이슈 하나가 이 프로젝트를 움직입니다.