RL 동영상 튜토리얼에서 프로덕션 RL 엔지니어링 스킬까지
Terminal-Bench와 Harbor를 만드는 팀은 어렵게 얻은 RL 엔지니어링 지식을 많이 공유해 왔습니다. 작업을 어떻게 패키징하는지, 에이전트의 부정행위를 어떻게 잡아내는지, 롤아웃을 어떻게 학습 데이터로 바꾸는지. 그 대부분은 긴 컨퍼런스 강연 속에 있습니다.
그중 강연 3개를 합치면 약 1시간 30분 분량입니다. 1분 1분이 가치 있지만 재사용하기는 어렵습니다. 다음에 환경을 만들 때면, 기억나는 슬라이드 한 장을 찾으려고 다시 타임라인을 뒤지게 됩니다.
그래서 시청을 에이전트 팀에 맡겼습니다. Eigent에서 Gemini 4를 사용하자, 브리프 하나로 Terminal-Bench 강연 3개가 프로덕션 RL 환경 엔지니어링을 위한 파일 기반 스킬 4개로 바뀌었고, 모든 아이디어의 출처를 보여주는 링크 포함 보고서도 함께 만들어졌습니다.
전체 워크플로 한눈에 보기
강연은 직접 고릅니다. 그다음부터는 브리프 하나로 에이전트가 재사용할 수 있는 스킬까지 이어집니다. 단계마다 파일이 남기 때문에 각 단계의 작업을 확인할 수 있습니다.
| 단계 | 하는 일 | 얻는 결과 |
|---|---|---|
| 고르기 | 배우고 싶은 YouTube 강연 선택 | 브리프에 넣을 짧은 동영상 링크 목록 |
| 시청 | 자막과 프레임을 내려받고 각 강연을 끝까지 시청 | 강연별 타임스탬프 개요 |
| 분석 | 방법, 인사이트, 보고된 결과, 경고 추출 | OBSERVED, INFERRED, UPDATED 라벨이 붙은 학습 포인트 |
| 비교 | 강연들을 서로 맞대어 비교 | 일치하는 점, 다른 점, 서로의 공백을 채우는 방식 |
| 추출 | 실용적인 역량별로 방법과 인사이트 묶기 | 스킬마다 SKILL.md와 evidence.md |
| 검증 | 구조 확인, 스크립트 실행, 새 작업에 스킬 적용 | STRUCTURALLY CHECKED, EXECUTED, UNTESTED로 표시된 각 스킬 |
| 보고 | HTML 보고서를 만들어 127.0.0.1에서 제공 | 임베드된 강연, 클릭 가능한 타임스탬프, 공백을 보여주는 커버리지 매트릭스 |
| 재사용 | 코워커에게 SKILL.md 지정 | 내 프로젝트에서의 프로덕션 RL 환경 엔지니어링 |
이제 직접 실행하는 방법을 단계별로 살펴보겠습니다. 브리프 작성에 관해 저희가 배운 교훈도 함께 소개합니다.
얻게 되는 것
- 재사용 가능한 스킬 - 각각
SKILL.md와evidence.md로 구성되며, 다른 에이전트가 강연을 보지 않고도 적용할 수 있도록 작성됩니다. - 출처가 연결된 HTML 보고서 - 로컬에서 제공되며, 모든 강연이 임베드되고, 타임스탬프 개요와 클릭하면 해당 순간으로 바로 이동하는 학습 포인트가 담깁니다.
- 커버리지 매트릭스 - 어떤 스킬이 RL 워크플로의 어느 부분을 다루는지, 그리고 어떤 영역은 어느 강연에서도 다루지 않는지 보여줍니다.
- 정직한 기록 - 모든 주장에 OBSERVED, INFERRED, UPDATED 라벨이 붙고, 모든 스킬은 실행됨, 구조 확인됨, 미테스트 중 하나로 표시됩니다.
시작하기 전에
- 컴퓨터에 Eigent가 설치되어 있어야 합니다.
- Gemini API 키.
- 에이전트가 학습할 YouTube 링크. 저희는 다음 세 개를 사용했습니다:
| 강연 | 채널 | 길이 |
|---|---|---|
| Introducing Terminal-Bench: Evaluating LLM Agents in Realistic Terminal Settings | Anyscale (Ray Summit 2025) | 31:23 |
| Everything Is a Rollout - Alex Shaw + Ryan Marten | AI Engineer | 21:11 |
| Terminal-Bench 2.0: Launch + Q&A with the founders | Latent Space | 35:00 |
Gemini API 키 추가하기
- Settings → Models를 엽니다.
- Gemini를 찾아 설정을 엽니다.
- API key를 붙여넣습니다.
- model type을
gemini-4로 설정합니다. - Save를 클릭합니다.
Gemini 4 선택하기
- 홈 화면에서 입력창 아래의 모델 선택기를 엽니다.
- Gemini → gemini-4를 선택합니다.
- 원하면 사고 강도를 설정합니다. 기본값으로도 충분합니다.
브리프 붙여넣기
아래 브리프를 Cowork with 입력창에 복사합니다. 동영상 링크를 내 것으로 바꾸고, Docker 줄을 allowed 또는 not allowed로 설정하세요.
Watch the YouTube videos listed below and turn their methods and insights into reusable,
file-based agent skills. Then publish the results as a well-designed HTML report served from a
local web server.
Videos:
- https://www.youtube.com/watch?v=zt-U4lDdenY&t=1559s
- https://www.youtube.com/watch?v=jRCpXUjz4CI
- https://www.youtube.com/watch?v=5wo0mLlG0fk&t=1815s
Use only these videos as primary sources. Do not search for, substitute, or add other videos.
You may consult official documentation and the code repositories the videos link to or name,
but only to check or update details shown in the videos.
## Focus
Extract practical, repeatable methods. Where the videos cover them, include:
- Defining tasks, observations, actions, and termination conditions.
- Creating reproducible environments and reset behaviour.
- Building verifiers and reward functions.
- Detecting reward hacking and invalid successes.
- Collecting, scoring, and reviewing agent trajectories.
- Preparing data for agent training and evaluation.
Do not invent coverage for areas the videos don't address. List those areas as gaps instead.
Capture insights, not only procedures. For every method, record why the speakers use it, what
went wrong before they did, any results or numbers they reported, and the warnings they gave.
Treat named tools and frameworks (for example Harbor or Terminal-Bench) as one implementation
of a method. Record the underlying principle first and the tool-specific steps second.
## Permissions and limits
- Allowed: reading the video pages; downloading subtitles, transcripts, and the video files
for analysis; extracting frames; reading official docs and repositories named in the
videos; creating a local virtual environment and installing open-source packages into it;
running a local static web server bound to 127.0.0.1.
- Docker: [allowed / not allowed].
- Not allowed: model training, GPU jobs, paid hosted services, calls to paid LLM APIs, or
publishing anything to a public host. For trajectory collection tests, use a scripted,
rule-based, or random policy.
- Keep all files inside ./rl-env-skills/ in the current working directory. Delete downloaded
video files when finished.
- Do not ask for confirmation for the actions allowed above. Stop and report only if a required
action falls outside them.
- If a video is private, removed, region-locked, or has no usable audio or transcript, say so in
the report. Continue with the remaining videos, and do not replace it.
## Capability honesty
Before starting, record which relevant capabilities you have: video viewing, frame
extraction, transcript access, code execution, browser preview. If you cannot inspect video
visuals, work from transcripts and mark every visual claim as "not observed".
Never describe on-screen content you did not actually see.
## Analysis
For each video:
- Record title, channel, published date, duration, and view count with the date checked.
- Watch it in full. Inspect visual demonstrations, code, diagrams, and narration where your
capabilities allow.
- Build a timestamped outline of the main sections.
- Preserve timestamps for every important procedure, decision, and warning.
- List the key insights and takeaways: design decisions and the reasons behind them, lessons
learned, failure stories, reported results, and warnings. Give each one a timestamp.
- Label each claim OBSERVED (seen or heard in the video), INFERRED (your interpretation), or
UPDATED (adapted to current official docs; cite the doc URL and the date checked).
- Re-inspect unclear moments. Record unresolved details instead of guessing.
- Paraphrase. Quotes must be under 15 words and carry a timestamp. Do not reproduce transcripts.
Then note where the videos agree, where they differ, and where one fills a gap in another.
## Skills
Create 2–4 skills grouped by practical capability. A skill may draw from several videos.
Layout:
rl-env-skills/
<skill-name>/
SKILL.md # required
evidence.md # timestamps, OBSERVED/INFERRED/UPDATED labels, source per point
scripts/ templates/ # only if they materially help; scripts must be tested
report/
index.html # the HTML report (see below)
assets/ # extracted frames or screenshots used in the report, if any
REPORT.md
manifest.json
SKILL.md must begin with YAML frontmatter:
---
name: <kebab-case, matches folder name>
description: <1–2 sentences: what it does and when to use it, including trigger phrases>
---
The body must cover: prerequisites, required inputs, key insights (the principles and lessons
behind the procedure, each with its source and timestamp), procedure (numbered steps), expected
outputs, decision rules, failure recovery, observable success checks, and a tool-agnostic path
for projects that don't use the tools shown in the videos. Another agent should be able to
apply it to a new project without watching the videos.
A skill must not be only a wrapper around one tool's features. If you removed every
tool-specific command, the insights and decision rules should still stand on their own.
Keep these four things distinct throughout: task datasets, recorded trajectories, supervised
training examples, and RL policy optimisation. Never imply that exporting trajectories is RL
training.
## Validation
- Structural: frontmatter is present and valid, the name matches the folder, every referenced
file exists, every evidence timestamp falls within the source video's duration, and every
skill has a key insights section with at least three sourced insights.
- Execution: run every script you created. Where feasible, apply at least one skill end to end on
a small example the videos don't use (e.g. a text grid-world, or a "make this failing unit
test pass" task).
- Report each item as STRUCTURALLY CHECKED, EXECUTED (with command and result), or UNTESTED
(with reason).
## HTML report (report/index.html)
### Content, in this order
1. Header: report title, date checked, the agent's capability summary (had / lacked).
2. Summary: 3–5 sentences on what was produced and the main limitations. No marketing language.
3. Sources: one row per video (title, channel, published date, duration, views with date
checked, linked code or repository, access status).
4. One section per video:
- The original video embedded with a privacy-enhanced YouTube embed
(https://www.youtube-nocookie.com/embed/<VIDEO_ID>), with a 16:9 responsive frame.
- Link to the original.
- Timestamped outline of the video.
- Key insights and takeaways, each with a clickable timestamp and a label.
- Learning points: numbered, each with a clickable timestamp that seeks the embedded player
(YouTube IFrame Player API) and an OBSERVED / INFERRED / UPDATED label.
- Unresolved details.
- If embedding is blocked, show the video thumbnail linked to youtube.com/watch?v=<ID>
and state that embedding was unavailable.
5. How the videos compare: agreements, differences, and how each fills the others' gaps.
6. One section per skill:
- Name, absolute path to SKILL.md, one-sentence purpose, and when to use it.
- Key insights the skill carries, with their sources.
- Procedure summary (the key steps, not the whole file).
- Evidence: every supporting source point as a row — video, timestamp (clickable), label,
and what the skill took from it. Include doc URLs for UPDATED items.
- Validation status with the command and result if executed.
7. Coverage matrix: skills × the videos, showing which video supports which skill, plus
the focus areas no video covered.
8. Data distinctions: a short table defining task dataset, trajectory, supervised example, and
RL policy optimisation, and which of them the skills actually produce.
9. Limitations and untested items.
10. Three copy-paste reuse requests, each in a code block with a copy button.
### Visual design: light mode, in Google's design language
- Style only: do not use Google logos or wordmarks, or suggest the report is a Google product.
- Colours: page #FFFFFF; secondary surfaces #F8F9FA; borders #DADCE0; primary text #202124;
secondary text #5F6368; links and primary actions #1A73E8. Use the Google accent set
(blue #4285F4, red #EA4335, yellow #FBBC04, green #34A853) only for status and labels,
e.g. OBSERVED blue, INFERRED yellow tint with dark text, UPDATED green, UNTESTED red.
Text must meet WCAG AA contrast.
- Type: Google Sans / Google Sans Text if available from Google Fonts, otherwise Roboto; Roboto
Mono or Google Sans Code for code and timestamps. Clear scale: one H1, H2 per section, 16px
body, 1.5 line height, comfortable line length (about 70–80 characters).
- Layout: 8px spacing grid, max content width about 1100px, sticky left table of contents on
desktop that collapses on mobile, flat cards with 1px borders or a subtle Material elevation
shadow, 8–12px corner radius, plain tables with hairline row dividers.
- Avoid the generic "AI-generated" look: no gradients, purple/indigo themes, glassmorphism,
glowing effects, emoji used as icons, sparkle icons, oversized hero banners, decorative
blobs, or hype copy ("unlock", "supercharge", "seamless"). Prefer real content, tables, and
data over decoration.
- Technical: one self-contained HTML file with inline CSS and JS. Only external requests allowed:
Google Fonts and YouTube embed/API. Responsive down to 360px width with no horizontal
page scroll. Semantic HTML, keyboard-accessible controls, alt text on images.
### Serve and verify
1. Start a static server from rl-env-skills/report/ bound to 127.0.0.1, e.g.
`python3 -m http.server 8000 --bind 127.0.0.1`. If port 8000 is busy, use the next free port.
Keep the server running when you finish.
2. Do not rely on opening the file from disk: YouTube embeds often fail without an http origin.
3. Verify: the page returns HTTP 200; every embed loads or shows the fallback; timestamp links
seek the player; all anchors and file links resolve; no console errors. If you have a browser
tool, take a desktop and a 375px-wide screenshot and save them to report/assets/.
4. Report how you verified each item, and which checks you could not run.
## Deliverables
- REPORT.md: a plain-text version of the report's findings.
- manifest.json:
{ "date_checked": "...",
"videos": [{"url","title","channel","published","duration","views","access_status"}],
"skills": [{"name","path","sources":["<video id>", "..."],
"insights": <number of sourced insights>,
"validation":"executed|structural|untested"}],
"capabilities": {"video": bool, "frames": bool, "transcripts": bool, "code_exec": bool,
"browser_preview": bool},
"report": {"path": "<absolute path to index.html>", "preview_url": "http://127.0.0.1:<port>/",
"server_command": "...", "verified": [...], "not_verified": [...]} }
- Final reply: the preview link on its own line first
(http://127.0.0.1:<port>/), then the command to restart the server if it stops, then a short
summary of the videos, skills with absolute paths, validation results, and limitations.
이 브리프에서 핵심 역할을 하는 부분은 다음과 같습니다:
- Use only these videos는 에이전트가 내가 고른 출처만 사용하도록 합니다. 교체도, 추가도 없습니다.
- Capture insights, not only procedures는 방법과 함께 이유도 남도록 합니다. 자세한 내용은 아래에서 설명합니다.
- Capability honesty는 아무도 실제로 보지 않은 동영상 프레임을 묘사하지 못하게 합니다.
- OBSERVED / INFERRED / UPDATED 라벨은 사실, 해석, 문서로 확인한 업데이트를 구분합니다.
- 데이터 구분은 작업 데이터셋, 궤적, 지도 학습 예제, RL 정책 최적화를 분리해, 궤적 내보내기가 학습으로 오해되지 않도록 합니다.
브리프에서 바꾼 점과 그 이유
영상 속 실행에서는 이 브리프의 이전 버전을 사용했습니다. 잘된 점도 많았습니다. Gemini 4는 강연 3개를 모두 시청했고, Harbor 문서와 저장소로 세부 사항을 교차 확인했으며, 스킬 4개를 만들었습니다. 모든 스킬 스크립트가 강연에서 다루지 않은 작업, 즉 fix-ini-interpolator라는 Python 설정 파서를 고치는 작업에서 끝까지 실행되었습니다.
하지만 스킬을 읽어 보니 눈에 띄는 점이 있었습니다. 스킬이 작업 폴더 구조, 궤적 형식, CLI 명령 같은 Harbor의 기능에 크게 의존하고 있었던 것입니다. 그 이면의 인사이트는 대부분 보고서에만 남아 있었습니다.
강연에는 인사이트가 가득합니다. 보고서 자체에도 다음과 같은 내용이 담겼습니다:
- 스캐폴드는 모델만큼 중요합니다. 멈춘 명령을 일찍 취소하면 약 5
10%, 한 번의 실행에서 여러 모델을 섞으면 약 56%의 향상이 있었습니다(Ray Summit 강연, 18:05~19:23). - 규모는 일찍 계획하세요. 노트북 한 대로는 동시에 컨테이너 6개 정도가 한계이고, 그래서 팀들은 클라우드 샌드박스로 옮겼습니다(강연 3개 모두).
- 보상 해킹은 RL의 과적합입니다. 의심스러울 만큼 높은 점수는 의심스러울 만큼 낮은 검증 손실처럼 다뤄야 합니다(AI Engineer 강연, 06:35).
도구를 어떻게 실행하는지만 아는 스킬은 그 접근 방식이 언제 무너지는지, 그 도구가 없는 스택에서는 무엇을 해야 하는지 알려주지 못합니다. 그래서 네 가지를 바꿨습니다:
- 인사이트를 핵심 산출물로. 이제 모든 동영상 섹션과 모든 스킬이 발표자의 추론, 교훈, 결과, 경고를 각각 타임스탬프와 함께 기록합니다.
- 원칙이 먼저, 도구는 나중. Harbor와 Terminal-Bench는 방법을 적용하는 한 가지 수단일 뿐, 방법 그 자체가 아닙니다.
- 도구 래퍼 금지. 모든 스킬에는 핵심 인사이트 섹션과 도구에 의존하지 않는 경로가 있어야 합니다. 명령을 모두 걷어내도 스킬은 여전히 무언가를 가르쳐야 합니다.
- 검증에서 이를 확인합니다. 각 스킬은 출처가 있는 인사이트를 최소 3개 담아야 하며, 그렇지 않으면 구조 검사를 통과하지 못합니다.
작은 불일치도 바로잡았습니다. 이전 브리프는 "동영상 2개"라고 하면서 링크는 3개를 나열했습니다. Gemini 4는 이를 발견해 보고서에 기록하고 3개를 모두 분석했습니다. 새 문구는 동영상 개수와 상관없이 쓸 수 있습니다.
에이전트에게 작업 맡기기
브리프를 보냅니다. Gemini 4가 작업을 계획하고 에이전트를 실행합니다. 이후 실행은 브리프를 따라 진행됩니다:
- 각 강연을 시청합니다. 자막, 프레임, 슬라이드, 라이브 데모를 살펴보고 타임스탬프를 남깁니다.
- 방법과 인사이트를 스킬로 추출합니다. 각 스킬에는 자체 증거 파일이 있습니다.
- 스킬을 검증하고 확인됨, 실행됨, 미테스트 항목을 기록합니다.
- 보고서를 생성하고
127.0.0.1에서 제공합니다.
저희 실행에서 에이전트는 강연 3개를 모두 내려받고, 키프레임을 25개 이상 추출하고, 타임스탬프가 포함된 전체 자막을 가져왔으며, Harbor의 세부 사항을 공식 문서와 교차 확인했습니다. 그리고 브리프의 요청대로 내려받은 동영상 파일을 정리했습니다.
보고서 열기
보고서는 로컬 서버에서 열립니다. 저희 실행에서는 http://127.0.0.1:8000이었습니다. 다음 내용을 확인할 수 있습니다:
- 역량 - 동영상 시청부터 브라우저 미리보기까지, 에이전트가 갖춘 것과 부족했던 것.
- 요약과 출처 - 각 강연의 채널, 게시일, 길이, 조회수, 연결된 저장소.
- 강연별 섹션 - 개인정보 보호 강화 플레이어로 임베드된 동영상, 타임스탬프 개요, 라벨이 붙은 학습 포인트.
- 강연 비교 - 일치하는 점, 다른 점, 서로의 공백을 채우는 방식.
- 스킬별 섹션 - 목적, 핵심 단계, 증거, 그리고 정확한 검증 명령.
- 한계 - 클라우드 샌드박스와 유료 모델 API처럼 테스트하지 않은 항목과 그 이유.
커버리지 매트릭스 읽기
매트릭스는 어떤 스킬이 RL 워크플로의 어느 부분을 다루는지, 그리고 강연이 어디에 공백을 남겼는지 보여줍니다.
| 중점 영역 | Task Scaffolder | Verifier & Anti-Cheat | Rollout Collector | SFT Dataset Preparer |
|---|---|---|---|---|
| 작업, 관측, 행동, 종료 조건 정의 | 주요 | 보조 | 주요 | - |
| 재현 가능한 환경과 리셋 | 주요 | 보조 | 보조 | - |
| 검증기와 보상 함수 구축 | 보조 | 주요 | - | - |
| 보상 해킹과 무효한 성공 탐지 | - | 주요 | 보조 | - |
| 궤적 수집, 채점, 검토 | - | - | 주요 | 보조 |
| SFT 학습과 평가를 위한 데이터 준비 | - | - | - | 주요 |
| 공백: RL 정책 경사 수학과 트레이너 내부 | 다루지 않음 | 다루지 않음 | 다루지 않음 | 별도로 분리 |
| 공백: 스텝 단위의 조밀한 과정 보상 설계 | 다루지 않음 | 결과 보상만 | 다루지 않음 | 다루지 않음 |
이 두 공백 행이 중요합니다. 강연은 SkyRL과 Tinker 같은 트레이너를 언급하지만 학습 루프는 보여주지 않습니다. 그래서 스킬도 이를 다루는 척하지 않습니다.
스킬 활용하기
각 스킬은 rl-env-skills/ 안의 자체 폴더에 있습니다:
sandboxed-task-environment-scaffolder- 재현 가능한 컨테이너화 작업을 만들고 검증합니다.verifier-and-anti-cheat-auditor- 결과 검증기를 구축하고 보상 해킹 여부를 감사합니다.rollout-trajectory-collector-and-debugger- 샌드박스 롤아웃을 실행하고, 궤적을 기록하며, 실패를 분류합니다.trajectory-to-sft-dataset-preparer- 검증된 궤적을 깨끗한 SFT 데이터로 걸러내며, RL 학습과는 엄격히 분리합니다.
코워커에게 그중 하나를 지정하고 실제 작업을 맡겨 보세요. 예를 들면:
Use rl-env-skills/verifier-and-anti-cheat-auditor/SKILL.md to design a verifier
for my "make this failing unit test pass" task. Flag any way an agent could
pass without fixing the bug.
스킬에는 절차, 판단 규칙, 성공 확인 항목이 담겨 있고, 증거 파일에는 그 근거가 담겨 있습니다. 새 브리프를 쓰면 인사이트도 함께 따라옵니다.
나만의 방식으로 활용하기
이 브리프는 어떤 기술 강연 묶음에도 쓸 수 있습니다. 동영상 링크와 중점 목록만 바꾸고 나머지는 그대로 두세요:
- 인사이트 규칙은 유지하세요. 도구 매뉴얼을 어렵게 얻은 판단력으로 바꿔 주는 것이 바로 이 규칙입니다.
- 정직성 규칙은 유지하세요. 역량 확인과 주장 라벨이 결과물을 신뢰할 수 있게 만듭니다.
- 검증 단계는 유지하세요. 한 번도 실행되지 않은 스킬은 스킬이 아니라 메모일 뿐입니다.
1시간 30분짜리 강연이 언제까지나 1시간 30분짜리 강연으로 남을 필요는 없습니다. 에이전트에게 맡기고, 그들이 배운 것을 간직하세요.
크레딧: Gemini 4와 Eigent로 제작. 강연은 Mike Merrill(Ray Summit 2025), Alex Shaw와 Ryan Marten(AI Engineer), 그리고 Latent Space에 출연한 Terminal-Bench 창업자들의 것이며, 원본은 YouTube에서 시청할 수 있습니다. 음악: "Wallpaper" Kevin MacLeod (incompetech.com), Creative Commons: By Attribution 4.0 라이선스.



