<p align="center">
<img src="https://raw.githubusercontent.com/dzhng/yap/HEAD/.github/readme/header.png" alt="Yap — just yap. Your agent gets it." width="100%">
</p>
<p align="center">
<a href="https://github.com/dzhng/yap/releases/latest"><img alt="Latest release" src="https://img.shields.io/github/v/release/dzhng/yap?label=release"></a>
<img alt="macOS 26+ on Apple Silicon" src="https://img.shields.io/badge/macOS-26%2B%20%C2%B7%20Apple%20Silicon-black">
<img alt="Works with Claude Code, Codex and MCP agents" src="https://img.shields.io/badge/works%20with-Claude%20Code%20%C2%B7%20Codex%20%C2%B7%20MCP-blue">
<img alt="Runs locally" src="https://img.shields.io/badge/runs-100%25%20local-green">
</p>
그냥 말하세요. 당신의 에이전트가 이해합니다.
어떤 아이디어는 글로 쓰는 것보다 보여주는 것이 더 빠릅니다: 눈에 보이는 버그, 변경하고 싶은 디자인, 시연하고 싶은 제품, 팀을 위한 업데이트 등. Yap을 사용하면 그냥 말하고 보여주기만 하면 됩니다. 당신의 에이전트인 **Claude Code, Codex 또는 모든 에이전트 하네스(agent harness)**가 눈과 귀와 손으로 녹화된 내용을 받아 이해하고 행동합니다.
시작하기 → 당신의 에이전트가 설치할 수 있습니다.
에이전트에게 보여주기
버그나 디자인에 대해 세 단락을 타이핑하는 대신, 그것을 보여주세요. 네 가지 키를 기억하세요:
- ⌥⇧S는 포인터 아래의 화면 녹화를 시작합니다. 카운트다운은 없습니다.
- 말하고, 가리키세요. **⇧**를 누른 채 움직여 그리기를 합니다. ⇧-클릭은 번호가 매겨진 핀을 떨어뜨리고, 클릭은 여전히 앱에 도달합니다. ⌥⇧Z는 마지막 마크를 되돌립니다(undo); ⌥⇧X는 취소합니다(cancel).
- ⌥⇧S를 다시 누르면 완료됩니다.
- ⌥⇧V는 에이전트에게 짧은 프롬프트를 붙여넣습니다: 녹화 ID, 캡처된 내용(스크린, 카메라, 마이크), 그리고 시간대별로 어떤 창에 있었는지와 함께 당신의 마크, 핀 및 클릭 정보입니다.
에이전트는 yap CLI와 스킬을 사용하여 작업을 이어받습니다: 사용자가 말한 내용을 읽고, "this"라고 말한 프레임을 찾아 고정된 내용(pinned)을 확인하고 그에 따라 행동합니다. 모든 녹화본은 백그라운드에서 전사되므로 붙여넣기 할 때 준비되어 있습니다. 단축키는 설정(Settings)에서 재지정할 수 있습니다. Yap은 이를 위해 추가 권한이 필요하지 않습니다. 접근성(Accessibility)과 옵션+시프트+V를 붙여넣기로 부여하면 되며, 그렇지 않으면 프롬프트를 복사합니다.
버그 보고서, 디자인 피드백, 소리 내어 검토된 풀 리퀘스트, "제가 해보는 걸 봐주세요. 그리고 저 대신 해주세요".
사람들에게 보여줄 때 (Show people)
청중이 사람이면, 에이전트는 거친 원본 녹화본을 그들의 시간을 들일 가치가 있는 결과물로 만듭니다: 핵심만 잘라내고(cut to the point), 자막을 달고(captioned), 다듬어(cleaned up) 원하는 형식에 맞춥니다.
- 직장 동료를 위한 메시지. 챕터, 요약 및 자막이 포함된 간결한 비동기 업데이트, 워크스루 및 코드 리뷰 내레이션.
- 출시 및 데모 영상. 제품을 보여주는 원본 녹화본 하나가 청중이나 플랫폼별로 잘린 세련된 데모 영상으로 바뀝니다.
- 팟캐스트 및 강연. 깨끗한 오디오, 일관된 음량, 자막이 있는 하이라이트 클립, 그리고 에이전트가 쇼 노트나 게시물로 변환할 수 있는 전사본.
- 최상의 당신. 발표를 리허설하고 속도와 필러 단어에 대한 증거를 얻거나, 가장 좋은 원본을 유지하거나, 자신의 목소리로 잘못 말한 단어를 수정합니다.
오늘 가능한 것, 아직 불가능한 것, 그리고 Yap이 대안들과 어떻게 비교되는지에 대한 전체 그림은 positioning에서 확인할 수 있습니다.
Yap은 의도적으로 편집 타임라인, 전사본 편집기 또는 사람들을 위한 하우스 스타일을 가지고 있지 않습니다. 사용자가 원하는 것을 에이전트에게 말하면, 에이전트는 Yap의 CLI나 MCP 작업을 사용하여 증거를 검사하고, 변경 사항을 선택하며, 비파괴적인 수정(non-destructive revision)을 수행합니다. 동일한 작업은 모든 어댑터에서 작동하므로, 요청이 Claude Code, Codex, 다른 하네스 또는 스크립트 중 어디에서 오든 같은 의미를 가집니다.
Yap은 녹음(recordings), 스크립트(transcripts), 프레임(frames), 오디오 측정값(audio measurements), 구성 편집(composition edits), 처리(processing), 미리보기(previews) 및 내보내기(exports)와 같은 기본 요소들을 제공합니다. Yap이 무엇을 자르고, 무엇을 유지할지, 또는 무엇이 좋아 보일지를 결정하지는 않습니다. 이 경계가 의도적입니다. 이는 Yap을 구성 가능하게 유지하고, 각 에이전트가 사용자의 맥락과 취향을 따르도록 하며, 모든 결정을 명시적이고, 검토 가능하며, 되돌릴 수 있도록 만듭니다.
작동 방식
<p align="center">
<img src="https://raw.githubusercontent.com/dzhng/yap/HEAD/.github/readme/01-you-ask-agent-edits.png" alt="A person hands over a note in plain words while Xiaohei cuts the recorded film with huge scissors" width="85%">
</p>
- Yap. ⌥⇧S를 누르거나 메뉴 바에서 녹음(화면, 마이크, 시스템 오디오 및 선택적 카메라)하여 에이전트가 녹화를 시작하도록 하거나, 이미 가지고 있는 비디오를 전달합니다. 녹음과 가져오기는 자동으로 스크립트로 변환됩니다.
- 평범한 말로 요청합니다. ⌥⇧V 프롬프트를 붙여넣고 "이것을 수정해줘"라고 말하거나, "캡션이 포함된 간결한 60초 데모를 만들어줘"와 같이 요청합니다. 원하는 스타일의 참고 비디오가 있다면 첨부하세요.
- 에이전트가 이해합니다. 에이전트는 스크립트를 읽고, 프레임을 보고, 사용자의 표시(marks)와 핀(pins)을 확인하며, 오디오를 듣고 사용자가 무엇을 의미했는지 파악합니다. 그런 다음 그에 따라 행동합니다: 보여준 버그를 수정하거나, 실수하는 부분을 잘라내거나, 요청한 것을 추가하고, 결과를 검토하여 최종 비디오를 내보냅니다.
선택이 마음에 들지 않나요? 한 문장만 더 말하세요. 모든 편집은 되돌릴 수 있는 수정 사항입니다.
요청할 수 있는 것들
에이전트에게 보여줄 때
"여기에 체크아웃 버그가 있어. 내가 핀으로 지정한 버튼을 수정해줘."
"내가 이걸 하는 걸 지켜보고, 나를 대신해서 할 스크립트를 작성해줘."
"세 가지 간격 문제에 대해 그렸어. CSS에서 이것들을 고쳐줘."
"이 diff(차이점)에 대한 내 검토본이야. 내가 지적한 각 사항을 다뤄줘."
사람들에게 보여줄 때
"이걸 60초짜리 제품 데모로 간결하게 만들어줘. 공백 시간과 시작 실패 부분은 잘라내고."
"X용으로 세로 버전(vertical version)을 만들고, 크고 임팩트 있는 캡션을 넣어줘."
"내가 좋아하는 출시 비디오가 있어. 이 비디오의 속도와 캡션 스타일을 맞춰줘.
"0:42에 '버전 세 개(version three)'라고 말했지만, 사실은 '버전 두 개(version two)'를 의미했어요. 제 목소리로 고쳐주세요."
"설정 패널을 열 때 줌인하고, 끝날 때는 페이드 아웃하며, 1080p로 내보내 주세요."
"배경의 낮은 웅웅거리는 소리를 제거하고, 나레이션만 담은 M4A 파일로 만들어 주세요."
"카메라 앞에서 제 음높이를 연습했어요. 페이싱(pacing)은 어떤가요? 그리고 어디서 말이 늘어졌나요?"
"어제 팟캐스트 에피소드를 자막이 달린 클립 세 개와 쇼 노트로 만들어 주세요."
"이 녹음 파일에서 팀원들을 위한 2분짜리 업데이트 영상을 요약해서 만들어 주세요."
여러분의 에이전트가 얻는 것
<p align="center">
<img src="https://raw.githubusercontent.com/dzhng/yap/HEAD/.github/readme/02-evidence-not-opinions.png" alt="A toolbox holds the transcript, waveform and frames while Xiaohei, on a stool, marks the cut" width="85%">
</p>
모든 기능은 메시지를 효과적으로 전달하는 데 도움이 되도록 설계되었습니다. Yap 자체는 어떠한 편집 결정도 내리지 않으며 내장된 에이전트가 없습니다. 여러분의 에이전트가 모든 결정을 합니다. Yap은 여러분이 말하고 보여준 것에 대한 증거와 정확한 작업 지침을 제공하며, 그 결과물은 내장된 스타일(house style) 대신 사용자의 의도에 따릅니다.
| 여러분의 에이전트가 사용할 수 있는 것 |
|---|
| 보고 듣기 | 단어별 시간 정보와 검색 기능이 포함된 현지 녹취록, 프레임 및 스토리보드, 파형(waveform) 및 스펙트로그램(spectrogram), 장면 및 커서 이벤트, 화자 전환(speaker turns), 음량 측정 |
| ... | |
| 모든 것은 Mac에서 실행됩니다. 녹음 파일, 녹취록, 음성 모델은 로컬에 보관됩니다. | |
여러분의 원본 자료는 절대 건드리지 않습니다
<p align="center">
<img src="https://raw.githubusercontent.com/dzhng/yap/HEAD/.github/readme/03-originals-untouched.png" alt="The original reel sits under a glass dome while Xiaohei pegs revisions on a line it can undo" width="85%">
</p>
편집은 비파괴적(non-destructive)입니다. 에이전트는 프로젝트의 수정본을 기반으로 작동하며, 원본 녹음 파일은 캡처된 그대로 바이트 단위로 유지됩니다. 모든 수정 사항은 미리 보고 비교하고 되돌리거나 복원할 수 있으므로, 에이전트에게 편집 권한을 주는 것이 위험하지 않습니다.
시작하기
Apple Silicon 및 macOS 26 이상이 필요합니다.
가장 쉬운 방법은 에이전트에게 설치하도록 맡기는 것입니다. Claude Code나 Codex를 열고 다음과 같이 말하세요:
https://justyap.io/llms.txt에 따라 Yap(Yap CLI와 스킬을 설정하는 Mac 앱)을 설치해 줘.
그런 다음 ⌥⇧S를 누르거나, 에이전트에게 무언가를 보여주거나, 원하는 비디오를 요청하세요.
에이전트가 앱을 설치하고, 그 앱이 나머지를 설치합니다. 아래의 에이전트 설정은 그것이 따르는 과정입니다.
에이전트 설정
이 단계들은 설치를 수행하는 에이전트를 위해 작성되었으므로 매우 정확합니다. Linux 컨테이너는 휴대 가능한 CLI 계약을 실행할 수는 있지만, 네이티브 앱을 실행하거나 macOS 미디어를 캡처할 수는 없습니다.
1. 최신 릴리스에서 앱 설치하기
소스 빌드가 아닌 최신 안정 GitHub 릴리스를 사용하세요. SHA256SUMS, release.json 그리고 SHA256SUMS가 명시하는 ZIP 파일(Yap-macos-arm64.zip)을 모두 다운로드한 다음, 추출하기 전에 shasum -a 256 -c SHA256SUMS를 실행하세요. 수신증의 아키텍처, 최소 macOS 버전 및 서명 상태를 확인하세요.
ditto -x -k <zip-path> <new-directory>로 추출합니다. 만약 Yap.app이 이미 /Applications 또는 ~/Applications에 있다면, 해당 앱을 종료하고 그 복사본을 교체하거나; 그렇지 않다면 ~/Applications/Yap.app에 설치하세요. 이 앱은 두 폴더 중 한 곳에서만 실행됩니다. Node가 번들되어 있어 사용자는 Bun, Node 또는 Swift가 필요하지 않습니다. macOS 로그인 시 Yap을 여는 것은 선택 사항입니다: 설치하는 에이전트가 사용자에게 묻고, 명시적인 '예' 답변 후에만 yap login.setEnabled를 사용합니다.
스킬의 설치 절차에 실행 가능한 명령어가 담겨 있습니다. 릴리스는 노타라이즈(notarized)되지 않았으므로, curl로 다운로드된 것은 절대 차단되지 않지만, 브라우저를 통해 다운로드하는 경우 시스템 설정 → 개인 정보 보호 및 보안에서 **'열기'**가 필요합니다. 격리 속성(quarantine attributes)을 절대 제거하지 마세요. 설치는 캡처 권한을 부여하지 않습니다.
2. 앱 열기; 나머지를 설치합니다
open ~/Applications/Yap.app (또는 대체한 사본). 에이전트 설정에서 (기본값) 앱은 설치하고 최신 상태를 유지하며, 업데이트 후 재실행을 포함하여 모든 실행 시점에 다음을 수행합니다:
~/.local/bin/yap 경로의 yap 명령어와, 시작 파일에 이미 ~/.local/bin이 PATH로 설정되어 있지 않은 경우 로그인 셸 프로필에 해당 경로를 추가하는 표시된 PATH 라인;
- 발견되는 모든 에이전트용 컨슈머 스킬을 위한 스킬을 설치하고, 앱에 번들된 사본으로
yap이라는 이름의 전역 스킬을 대체합니다.
런처를 직접 복사하거나 npx skills add를 실행하지 마십시오. 만약 cli.status 또는 skill.status가 문제를 보고하면, 설치 절차와 스킬 생명 주기가 수동 대체 방법을 제공합니다. 스킬이 발견되도록 새 에이전트 세션을 시작하십시오 ($yap은 Codex용, /yap은 Claude용).
3. 작동 전 확인하기
~/.local/bin/yap cli.status
~/.local/bin/yap skill.status
~/.local/bin/yap capture.status --help
...
Yap을 설치한 세션에서 전체 경로를 사용하십시오. PATH 라인은 새로운 로그인 셸에만 적용됩니다.
작동 도움말은 앱을 실행하지 않고 스키마를 반환합니다. service.health는 설치된 런타임을 확인하며 앱의 로컬 서비스를 시작할 수 있지만, 녹화를 시작하지는 않습니다. 작동 이름을 발견할 때 yap --help를 파일로 저장한 다음, 필요한 작업에 대해서만 도움말을 요청하십시오. 각 작업의 JSON 엔벨로프(envelope)를 파싱하고 실패 사례도 포함시키십시오. 성공적인 요청이라 하더라도 보류 중이거나 실패한 백그라운드 작업을 설명할 수 있습니다. 핀된 리비전(revision), 재시도 식별자, 전달된 미디어 검증을 위해 스킬을 따르십시오. 그 결과를 사용자에게 짧은 체크리스트로 보고하십시오: 릴리스 태그, 앱 위치, 명령어, 스킬 및 서비스 상태.
릴리스
앱은 GitHub Releases에서 다운로드하세요.
릴리스 노트에는 릴리스 제한 사항과 에이전트 설정 링크가 설명되어 있습니다. 빌드된 바이너리는 릴리스 자산이며, 소스 제어는 생성된 앱 번들 대신 재현 가능한 입력을 유지합니다.
릴리스는 로컬 Apple Silicon Mac에서 빌드, 서명 및 GitHub에 게시됩니다. 빌드 및 릴리스 가이드에서는 버전 소유권, CI 후크(hooks), 개인 소스 설치를 설명합니다.
기여 (Contributing)
제품 경계 (Product boundary)
이 프로젝트는 어떠한 편집 결정도 내리지 않습니다. 원시 요소(primitives)만을 제공할 뿐입니다.
녹음, 전사(transcription), 검색 및 감지는 증거를 공급합니다. 호출자(사용자의 에이전트)가 무엇을 변경할지 결정하고 명시적인 작업을 제출합니다. 기본값은 요청된 작업 내의 매개변수를 채울 뿐이며, 다른 처리를 승인하거나 자동 편집하지 않습니다. 원본 미디어는 손상되지 않은 상태로 유지됩니다.
기본적으로 출력합니다(Output by default). 어떤 작업이 출력을 생성할 수 있다면, 그것을 수행하고 해당 출력에서 모든 문제를 이슈(issue)로 보고합니다. 거부는 잘못된 형식의 입력, 모호한 입력, 식별자 또는 개정 버전 충돌, 리소스 제한, 누락된 전제 조건, 파괴적인 동작, 그리고 실패한 실행에 한해서입니다. 각 클램프(clamp), 폴백(fallback) 또는 충족되지 않은 목표는 무엇이 요청되었고 무엇이 생성되었는지 명시합니다. 프로토콜 가이드가 이 계약을 설명합니다.