
올해 초 오픈 클루가 나오면서 AI 개인비서를 써보기 위한 결과가 현재 제 상황을 만들고 있습니다. 현재는 대부분의 업무를 AI 에이전트로 작업을 하고 있기 때문입니다. 음성채팅을 이용하여 말로 명령하고 말로답변하는 환경에서 모니터링을 위한 AI 비서라고 할 수 있습니다.

말로하는 나만의 AI 에이전트 만들기

초기에 Chat GPT로 전체글을 복붇했었는데.. 요즘은 AI에게 정보를 주고 글을 써달라고 하기보다, 작업 전반에 AI의 도움을 받는 것으로 바뀌게 되었습니다.

일반적인 ChatGPT 채팅 앱 대신 코딩을 위해 만들어진 코덱스를 사용하고 있습니다. 이름에서 알 수 있듯이 코딩을 위한 AI 에이전트입니다. 그래서 저도 1단계로는 홈페이지 제작 같은 코딩을 중심으로 사용하다 2단계 업무용 앱을 만들고, 현재는 3단계로 개인 AI 에이전트를 사용하고 있습니다.
현재는 채팅 하나를 제 전용 비서 채팅으로 이용하고 있습니다.

오른쪽의 채팅 이름이 있는데 GPT의 채팅창과는 다르게 하나의 채팅을 한 달 단위로 사용하고 있습니다. 코덱스는 채팅 하나를 프로젝트처럼 사용해도 문제가 없다고 생각해서 하나의 전용 AI 에이전트로 만들고 그 채팅을 "효율적으로 사용하는 앱" 을 만들어서 비서 역할을 하는 채팅과 연동 한 것입니다.
AI 에이전트 개인 비서 '자비스'
시작은 개인 비서를 만든 것이 아니라 외부에서 '아이패드 프로'로 코덱스가 설치된 제 맥북프로에 연결하는 것이 목적이었습니다.

첫 번째로 LTE(외부 접속)으로 연결되는 앱입니다.
외부에서 코덱스를 제어하다 보니, 하나의 채팅으로 다른 코덱스 채팅까지 제어하면 AI 비서처럼 쓸 수 있을 것 같았습니다.
제 코덱스 컨트롤 채팅과 연결된 자비스라는 앱을 만들었습니다. '이름은 아이언맨의 자비스'에서 따왔습니다.
이렇게 아이패드에서 코덱스의 컨트롤이 가능해지니 또 맥에서도 별도로 띄어놓으면 편할 것 같았습니다.

하나의 채팅에서 음성 채팅을 시작하면 다른 채팅에서 텍스트로 채팅이 가능합니다.

실제 작업은 하드웨어 관리 채팅에서 진행하지만, 자비스에서 진행 상황을 확인할 수 있습니다.

코덱스 기본 음성 채팅 도우미 기능입니다.
맥에서 음성 채팅을 하면 코덱스 화면을 보더라도 컨트롤 패널이 있어서 모니터링을 할 수 있는 시스템입니다.

아이패드의 자비스 앱에서는 제가 음성으로 내린 명령과 답변을 계속 확인할 수 있었습니다. 그동안 맥의 코덱스에서는 다른 창을 음성 명령으로 제어했습니다. 맥에서도 음성으로 명령하면 이 채팅 기능을 따로 띄워두면 편하겠다는 생각에 만든 것이 맥용 자비스입니다.

아이언맨 아이콘을 만들어달라고 하니.. 제 코덱스는 안된다고 면서 아이언맨 비슷한 아이콘을 만들어주었습니다. 활성 버튼을 사용하고 있습니다. 기본 구조가 최상단에 떠있기 때문에 가끔 다른 작업을 할때는 채팅창을 끌때가 필요합니다. 그래서 메뉴에 밖아 놓았습니다.

실제 비서처럼 활용되는 자비스 앱
설정은 최상단 고정으로 해서 항상 모니터링이 가능합니다. 특히 음성 채팅으로 작업하는 특성상 음성 답변이 텍스트로 정리되어 보여주는 것도 특징입니다.
음성 관리를 위한 기능과 입력창을 열 수 있습니다.

제 맥북 작업 창입니다. 오른쪽에는 개인 비서 역할을 하는 자비스가, 왼쪽에는 직접 작업하고 맥북을 제어하는 코덱스가 열려 있습니다.
학습이 되면서 점점 다른 채팅의 컨트롤이 잘되고 있습니다. 코덱스는 단순 기능도 좋지만 약간의 커스텀을 하면 정말 효율적인 업무 처리가 가능한 것 같습니다. 업무 강도는 매우 높지만 피로는 거의 절반 미만인 것 같습니다.
자랑만 하고 끝내려고 했는데, 한 번 따라해보시면 AI 활용에 도움이 될 것 같습니다.
아래는 제가 사용한 프롬프트입니다 맥용을 기본으로 했는데.. 윈도우에서는 "맥용인데.. 이방식으로 원도우용으로 만들어줘" 라고 하시면 될 것 입니다. 코덱스나 클루드 코드에서 사용하시면 될 것 같습니다
채팅의 시작은 >> "AI 비서를 만들거야" 라고 목적을 정확히 알려줘야합니다/
제작 순서도


확대해서 보세요.
새 제작에 권하는 구성 — 설계 제안
기존 코드를 통째로 복제하기보다 독립된 JarvisLab을 만듭니다. Swift 네이티브 UI와 URLSession을 사용하면 초기 대화·음성·저장을 작은 단위로 확인하기 쉽습니다. 초기 버전에는 Python 허브나 WKWebView가 필수는 아닙니다. iPad를 연결할 때 허브를 추가할 수 있습니다.
소스는 ~/Developer/JarvisLab-날짜시간에, 빌드 앱은 그 아래 build에 둡니다. 대화와 설정은 Application Support/JarvisLab에, 내보내기·시험 녹음·로그는 iCloud work의 독립 폴더에 둡니다. 이 분리는 기존 앱과 충돌을 피하고 work 전체 삭제 때 대화까지 잃는 일을 줄이기 위한 새 설계입니다. 초기 앱은 대화도 work에 보관했습니다.
개인용 앱의 키는 Keychain에 보관하고 소스나 앱 번들에 넣지 않습니다. 공개 배포를 계획하면 사용자별 인증·서버 중계 등 별도 설계가 필요합니다. 초기 앱의 기존 .env.local 참조는 과거 구현 사실이며 새 제작의 권장 저장 방식은 아닙니다.
공식 문서 확인 사항
새 텍스트 대화는 Responses API를 사용하고 REST output 배열을 해석합니다. SDK의 output_text 편의 속성과 구분합니다. Text generation
확인일의 전사 문서는 gpt-transcribe를 권장합니다. 초기 코드의 gpt-4o-mini-transcribe는 현재 문서상 폐기 예정 모델이므로 새 기본값으로 고정하지 않습니다. 모델 접근 가능 여부는 실제 계정에서 별도로 확인합니다. File transcription
앱에 Codex를 붙일 때 공식 app-server의 초기화·thread·turn 흐름을 사용합니다. 설치 버전 스키마를 확인한 후 구현합니다. Codex App Server
열린 기존 대화로 보내는 queue는 별도 경로입니다. 접수 성공과 실행 완료를 구분합니다. Codex CLI 명령
ChatGPT 플랜 인증을 음성 전사 API의 키처럼 재사용하지 않습니다. 확인일의 Sign in with ChatGPT 미리보기 문서는 전사 API를 지원하지 않는다고 명시합니다. 이 경로와 일반 Codex 로그인 전체를 동일시하지 않습니다. 인증 경로의 제한
녹음·읽기는 기존 소스에서 AVAudioRecorder·AVSpeechSynthesizer 사용을 확인했습니다. Apple 공식 페이지는 접근했지만 이 조회 도구에서는 본문 로드가 제한됐으므로 세부 지원 버전·권한 API는 실제 제작 시 설치 SDK 문서로 확인하도록 프롬프트에 반영했습니다. 녹음 API, 음성 합성 API
참고하세요..
프롬프트 사용 순서와 완료 기준
동봉한 ‘단계별_복사프롬프트.md’에서 공통 지침을 먼저 복사하고 아래 순서로 붙여 넣습니다. 실행은 사용자의 새 Codex 작업 공간에서 진행합니다.
단계
만드는 것
다음 단계로 가는 증거
1
새 작업 공간과 환경 기록
Swift/SDK 확인, 독립 경로, 실행 가능한 빌드 계획
2
최소 창과 모의 응답
빌드·실행, 입력·응답·창 재열기
3
실제 텍스트 대화
API 한국어 응답, 문맥 유지, 인증 오류 구분
4
녹음·전사·한국어 읽기
실제 발화 전사, 수정 전송, 청취와 중지
5
대화 복원·문서 내보내기
재시작 복원, MD/HTML 일치, 실제 클립보드
6
선택적인 Codex 작업 모드
새 시험 파일 내용과 해당 turn 완료 확인
7
실패와 복구
취소·타임아웃·중복 요청·저장 실패 시험
8
최종 빌드와 사용 설명
기능별 PASS/FAIL/사용자 확인 필요 기록
텍스트 대화와 문서 작성만 필요하면 6단계를 건너뛸 수 있습니다. Codex가 파일을 만들고 작업하도록 하려면 6단계를 포함합니다. API 키 미등록이나 마이크 미허용은 해당 기능의 실제 검증을 막으므로 사용자 조작이 필요합니다. 그 외 구현 단계마다 반복 승인을 받도록 만들지는 않습니다.
실행 범위와 기록
명령: ‘새 폴더에서 맥용 자비스 1단계부터 만들어 줘’와 해당 프롬프트.
목적: 독립 Mac 비서 앱을 작은 단계로 제작하고 실제 동작을 확인합니다.
실행 기준: 새 제작을 요청한 Codex 채팅에서 공통 지침을 적용한 상태.
필요한 입력: 개발 환경·설치 폰트·도구 경로는 자동 확인, API 키는 앱 보안 입력, 로그인·마이크 허용은 사용자 직접 처리.
중단 조건: 새 폴더 밖의 변경이 필요하거나 실제 권한·인증이 없는 경우 해당 작업만 중단하고 이유를 기록합니다. 기존 앱 덮어쓰기, 인증정보 출력, 지원되지 않는 UI 조작 우회는 진행하지 않습니다.
저장/기록: 소스 폴더 docs/환경확인.md와 docs/검증결과.md, work의 산출물 및 비밀값 없는 로그.
다른 Mac 적용: 두 Markdown과 프롬프트를 옮긴 뒤 1단계부터 환경·로그인·서명·키·마이크 권한을 새로 확인합니다. 개인 인증파일·토큰·기존 기기 인증서를 복사하지 않습니다. 이 문서는 프로젝트 지침이나 등록된 스킬이 아니며 work 안의 파일을 활성 운영 규칙으로 사용하지 않습니다.
# 맥용 자비스 단계별 복사 프롬프트
작성일: 2026-10-29. 새 Codex 채팅에서 공통 지침을 먼저 붙여 넣고, 1~8단계를 차례로 실행하세요. 각 단계는 실제 파일 수정과 검증을 요청하는 실행용입니다. 이 문서를 작성한 현재 작업에서는 앱을 빌드하거나 수정하지 않았습니다.
## 공통 지침 — 먼저 한 번 붙여 넣기
```text
맥용 개인 비서 JarvisLab을 Swift macOS 네이티브 앱으로 만들어 주세요. 설명만 하지 말고 아래에서 내가 붙여 넣는 단계의 구현과 검증을 실제로 수행하세요. 매 단계 성공 기준을 충족한 뒤 결과와 다음 단계를 짧게 보고하세요. 이미 허용한 범위의 파일 생성과 수정은 반복 승인 질문 없이 진행하세요. 단계가 실패하면 원인을 고치고 재검증하되 실제 권한이나 인증이 없으면 해당 기능만 미검증으로 남기세요.
기존 자비스·천추 비서 앱, 사용자 프로젝트, 기존 대화, 기존 인증 설정은 덮어쓰거나 수정하지 마세요. 홈 디렉터리는 운영체제에서 구하고, 새 영구 소스 폴더 ~/Developer/JarvisLab-날짜시간을 충돌 없이 만드세요. 앱 이름 JarvisLab, 새 bundle identifier, 독립 저장소를 사용하세요. 빌드 결과는 새 소스 폴더의 build에 두고 Applications에는 자동 설치하지 마세요. 다운로드·시험 녹음·결과물·로그는 iCloud Drive/work/JarvisLab-날짜시간 아래에 모으세요. iCloud가 없으면 새 소스 폴더의 artifacts를 사용하고 실제 경로를 보고하세요. 영구 대화 기록과 사용자 설정은 ~/Library/Application Support/JarvisLab 아래에 저장하세요. work는 삭제 가능한 산출물 폴더입니다.
기본 기능은 텍스트 대화, 버튼 녹음과 전사, 한국어 답변 읽기, 대화 JSON, MD·복사용 HTML 내보내기입니다. 이후 별도 모드로 Codex 작업 실행을 붙입니다. 개인용 로컬 앱으로 만들고 공개 배포는 범위에 넣지 마세요. 무단 발행·삭제·결제·메일 발송·기존 사용자 자료 수정은 하지 마세요. 음성 인식 결과를 셸 명령으로 직접 실행하지 마세요.
OpenAI API와 Codex 연동은 실행 시점 공식 문서를 열어 현재 규격을 확인하세요. 모델 이름과 SDK 버전을 과거 예제에서 그대로 복사하지 마세요. Swift URLSession REST를 기본으로 하며 공식 Swift SDK라고 확인되지 않은 패키지를 공식으로 소개하지 마세요. API 키·로그인 토큰은 채팅, 소스, plist, 문서, URL, 로그에 쓰지 마세요. 키는 앱의 보안 입력창에서 macOS Keychain으로 저장하고 런타임에만 읽으세요. Codex 로그인은 공식 로그인 절차를 사용하고 다른 앱의 토큰을 복사하지 마세요. Finder로 실행한 앱이 터미널 환경 변수를 상속한다고 가정하지 마세요.
최소 UI부터 만들고 UI 스레드를 막지 마세요. 폰트는 설치된 사용자 폰트를 확인해 사용하세요. 천추 환경에서는 나눔바른고딕을 우선 확인하고, 없으면 시스템 폰트로 임의 대체하지 말고 폰트 지정이 필요하다고 보고하세요. 상태는 대기·녹음·전사·요청·읽기·실패를 구분하세요. 작업 결과를 코드 존재만으로 완료 처리하지 마세요. PASS/FAIL/사용자 확인 필요를 구분한 검증 기록을 남기세요.
현재 단계만 구현하고 다음 단계로 멋대로 확장하지 마세요. 인증이나 마이크 허용이 필요하면 사용자가 해야 할 한 동작만 알려 주세요. 이미 검증된 앞 단계는 회귀 문제가 있을 때만 다시 시험하세요.
```
## 1단계 — 환경 확인과 새 작업 공간
```text
공통 지침의 1단계를 실행하세요. macOS 버전, CPU 아키텍처, xcode-select 경로, swift와 xcodebuild 사용 가능 여부, 사용할 수 있는 macOS SDK와 코드 서명 인증서 유무를 확인하세요. 인증서 이름이나 키 값을 불필요하게 출력하지 마세요. 기존 소스나 설치 앱은 읽기 외 조작하지 마세요.
독립된 새 소스 폴더를 만들고 실제 절대 경로를 기록하세요. 최소 macOS 지원 버전과 AppKit 또는 SwiftUI 중 이 환경에서 가장 단순하게 빌드 가능한 구성을 정하세요. 별도 라이브러리 없이 Swift/AppKit, AVFoundation, Security를 기본으로 검토하세요. 개발 도구가 없으면 임의 설치를 진행하지 말고 필요한 공식 설치 방법을 적으세요.
성공 기준: 새 소스·산출물 경로가 서로 구분되고, 컴파일러/SDK 검사 결과와 빌드 명령이 기록되며, 기존 앱이나 인증 설정을 변경하지 않았습니다. 구현 불가 항목은 이유를 명시하세요.
```
## 2단계 — 최소 앱 UI
```text
같은 JarvisLab 소스에서 2단계를 실행하세요. 대화 표시 영역, 여러 줄 입력창, 보내기, 취소, 상태 표시, 설정 버튼을 가진 작은 macOS 창을 만드세요. 메뉴에서 창 다시 열기와 종료가 가능하게 하고 마지막 창 크기·위치를 저장하세요. 메뉴 막대 전용 장식이나 복잡한 화면은 뒤로 미루세요.
아직 네트워크를 연결하지 말고 테스트용 응답임이 표시되는 모의 응답으로 전송 흐름을 구현하세요. 빈 입력 방지, 전송 중 중복 클릭 방지, 긴 한국어 문장 표시, 키보드 입력을 확인하세요. 빌드 스크립트가 새 build/JarvisLab.app에만 쓰게 하세요. 사용 가능한 개발자 서명을 우선하고, 없으면 로컬 시험용 서명임을 명시해 별도 앱에만 적용하세요. 공개 배포·공증 완료라고 쓰지 마세요.
성공 기준: 컴파일 성공, 새 앱 실행과 종료, 한국어 입력→모의 응답 표시, 창 재열기 확인. GUI를 직접 관찰할 수 없으면 빌드 성공과 화면 확인 필요를 구분하세요.
```
## 3단계 — 실제 텍스트 대화
```text
3단계를 실행하세요. 설정의 보안 입력창으로 API 키를 입력·저장·삭제할 수 있게 하고 Keychain을 사용하세요. 키를 채팅에 붙여 넣으라고 요구하지 마세요. 키가 없으면 모의 모드와 연결 필요 상태를 유지하세요. API 사용료 및 입력 내용의 외부 전송을 설정 화면에 짧게 안내하세요.
성공 기준: 키 등록 후 실제 한국어 질문에 답변이 표시되고 이어지는 질문에 문맥이 유지됩니다. 미등록·잘못된 키 상태가 구분됩니다. 실제 키가 없으면 구현 및 모의 응답 검사까지만 PASS로 표시하고 실제 API 대화는 미검증으로 남기세요.
```
## 4단계 — 음성 입력과 한국어 읽기
```text
4단계를 실행하세요. AVAudioRecorder로 말하기 버튼을 누르면 녹음하고 다시 누르면 종료하세요. 최대 2분, 중복 녹음 방지, 녹음 중 상태, NSMicrophoneUsageDescription과 필요한 마이크 권한/entitlement를 구성하세요. 시험 녹음은 새 산출물 폴더에만 만드세요.
녹음 파일은 현재 공식 전사 API 규격에 맞춰 multipart/form-data로 전송하세요. 2026-10-29 확인 문서는 /v1/audio/transcriptions와 gpt-transcribe를 권장하지만 구현 시 다시 확인하세요. 과거 코드의 gpt-4o-mini-transcribe를 최신 기본값으로 고정하지 마세요. 전사 결과는 먼저 입력창에 넣어 사용자가 고치고 보내게 하세요. 전사만으로 자동 작업을 실행하지 마세요. 전사 완료·실패·취소 후 시험 녹음 파일을 정리하세요.
AVSpeechSynthesizer로 답변 읽기 체크박스와 읽기 중지 버튼을 만드세요. 설치된 한국어 음성을 선택하고 없으면 텍스트는 유지한 채 음성 설치 안내를 하세요. 읽는 중 새 녹음을 시작하면 읽기를 멈추고, 최초 버전은 답변 앞 1600자까지만 읽으세요.
성공 기준: 실제 사용자 마이크로 '오늘 해야 할 일을 메모로 정리해 주세요'를 녹음→전사→수정→전송하고 한국어 답변을 스피커로 듣고 중지할 수 있습니다. 합성 음성 시험, 마이크 패킷 전송, 실제 사용자 발화 인식을 각각 구분해 기록하세요. Realtime 통화·깨우기 단어·원거리 음성 제외·오른쪽 Option 단축키는 이 단계에 넣지 마세요.
```
## 5단계 — 대화와 문서 저장
```text
5단계를 실행하세요. 대화를 Application Support/JarvisLab의 버전 필드가 있는 JSON으로 원자적으로 저장하고 재실행 시 복원하세요. 새 대화는 이전 JSON을 고유 파일명으로 보관한 뒤 시작하세요. 손상 JSON을 덮어쓰지 말고 따로 보존해 복구 안내를 표시하세요.
'답변 저장'으로 같은 본문에서 UTF-8 Markdown과 복사용 HTML을 새 산출물 하위 폴더에 함께 만드세요. 날짜시간+UUID로 덮어쓰기를 막고 경로 이탈 문자를 제거하세요. HTML은 제목·버튼과 본문을 분리하고 본문을 <main id="copyContent">로 감싸세요. '본문 HTML 복사' 버튼으로 text/html과 text/plain을 복사하세요. HTML 특수 문자는 이스케이프하고 임의 스크립트는 실행하지 마세요. 소제목 볼드 30px, 본문 16px, 줄간격 170%, 문단 사이와 소제목 위에 실제 빈 문단 <p><br></p>을 넣으세요. 로컬 파일의 클립보드 권한 제약에 맞춰 네이티브 NSPasteboard 또는 검증된 대체 방식을 제공하세요. 복사 성공은 실제 클립보드 결과로 판단하세요.
성공 기준: 재실행 후 같은 대화 복원, 새 대화 후 이전 기록 보존, MD/HTML 본문 일치, 복사 시 버튼·제목·작업 메모 제외, 한국어/따옴표/<기호 안전 처리, 같은 제목 두 번 저장해도 다른 파일 생성. 저장 성공 후에만 실제 경로를 표시하세요. 네이버 발행이나 블로그 최종 검수가 완료됐다고 말하지 마세요.
```
## 6단계 — 필요한 Codex 연결
```text
6단계를 실행하세요. 기본 API 대화 모드를 유지하고 별도 'Mac 작업' 모드를 만드세요. 음성 전사나 일반 대화가 자동으로 Mac 작업을 시작하지 않게 하세요. 사용자가 작업 폴더·요청을 화면에서 확인하고 '작업 실행'을 눌러야 전송합니다.
먼저 codex 설치 경로·버전·app-server --help를 확인하세요. GUI 앱의 PATH에 의존하지 말고 실행 파일 경로를 검증해 설정으로 저장하세요. 로그인은 공식 Codex 절차를 안내하고 ~/.codex의 토큰이나 다른 앱의 인증을 읽어 복사하지 마세요. API 키 인증과 Codex 로그인을 별도로 표시하세요.
최초 구현은 앱이 소유하는 새 Codex 대화만 대상으로 하세요. 공식 app-server를 자식 프로세스로 시작하고 설치 버전이 지원하는 stdio 전송을 사용하세요. 공식 문서와 설치 버전의 생성 스키마를 확인해 initialize→initialized→thread/start→turn/start를 구현하세요. JSON 메시지는 프로세스 인수/표준입력으로 전달하고 사용자 입력을 셸 문자열에 보간하지 마세요. stdout 프로토콜과 stderr 로그를 분리하고 비동기로 읽으세요. 시작은 read-only로 연결 검사하고 파일 생성 시험만 새 시험 폴더에 workspace-write로 제한하세요. 승인 정책과 지원 매개변수는 현재 스키마로 검증하고 무조건 승인·sandbox 우회는 넣지 마세요. 승인 요청은 사용자 선택까지 보류하고 지원하지 않는 종류는 거절/미지원으로 표시하세요.
수락·진행·완료·실패·취소를 구분하고 해당 turn의 완료 이벤트와 결과를 추적하세요. 시험 요청은 새 시험 폴더에 연결검증.txt를 만들고 내용 JARVIS_CODEX_OK를 쓰는 것입니다. 결과 파일의 존재와 내용을 확인해야 성공입니다. 앱이 시작한 프로세스만 종료하고 기존 Codex 앱은 종료하지 마세요.
기존 데스크톱 대화 이어쓰기는 선택 확장입니다. 필요하면 현 CLI의 codex queue --help 및 공식 문서로 queue 지원을 확인하고 사용자가 선택한 thread ID로 전달하세요. 열린 기존 대화를 별도 writer로 resume하지 마세요. queue 접수만으로 완료 처리하지 말고 동일 요청의 turn과 최종 응답을 확인하세요. 지원되지 않으면 새 대화 경로를 유지하고 제한을 보고하세요. Codex 데스크톱 음성 시작/종료의 UI 단축키 흉내는 구현하지 마세요.
성공 기준: 로그인·실행 파일 없음이 구분되고 새 대화 작업 결과가 앱에 표시되며 검증 파일 내용이 일치합니다. 인증이 없으면 프로토콜 모의 검증과 실제 Codex 연동 미검증을 구분하세요.
```
## 7단계 — 오류 처리와 복구
```text
7단계를 실행하세요. API의 401/403/429, 5xx, 오프라인, 타임아웃, 빈 응답, 잘못된 JSON, 마이크 거부, 음성 없음, 파일 저장 실패, Codex 프로세스 종료·로그인 만료·승인 대기를 구분하세요. 요청 취소 시 URLSession 작업/음성 재생/앱 소유 Codex turn을 가능한 지원 방식으로 중단하세요. 추적이 끊겼으면 '상태 확인 불가'로 표시하고 실제 작업이 종료됐다고 단정하지 마세요.
요청 ID를 유지해 자동 재시도에 따른 이중 요청·중복 저장·중복 Codex 작업을 막으세요. 작업 실행은 접수 여부가 모호할 때 자동 재전송하지 말고 상태를 먼저 조회하세요. 429는 일시 제한과 한도 부족을 구분할 수 있는 범위만 설명하고 재시도 횟수를 제한하세요. 로그에는 시간·오류 분류·HTTP 코드·요청 ID만 기본 기록하고 키·토큰·녹음·대화 전문은 남기지 마세요.
성공 기준: 주요 실패를 모의 응답/임시 폴더로 재현하고 앱이 멈추지 않으며 입력을 보존하고 다시 시도할 수 있습니다. 비밀값 마스킹, 중복 실행 방지와 손상 기록 보존을 확인하세요. 유료 실제 요청을 오류 시험마다 반복하지 마세요.
```
## 8단계 — 최종 빌드와 실행 검증
```text
8단계를 실행하세요. 새 폴더에서 재현 가능한 빌드 명령, 실행 방법, 사용한 SDK/도구/모델/조회일을 README에 정리하세요. 독립 bundle identifier와 저장 경로, 마이크 설명, 서명 검증을 확인하세요. 기존 Applications 앱에 자동 설치하거나 원본 프로젝트를 수정하지 마세요.
텍스트 대화→실제 사용자 음성 전사→한국어 읽기와 중지→MD/HTML 내보내기와 클립보드→앱 재시작과 JSON 복원→Codex 시험 파일 생성까지 최종 시나리오를 수행하세요. 앞 단계에서 통과한 결과는 재사용하고 변경에 영향을 받은 부분만 다시 검증하세요. 소스·README·plist·빌드 결과·로그에 인증값이 포함되지 않았는지 값 자체를 출력하지 않는 방법으로 점검하세요.
docs/검증결과.md에 항목별 PASS/FAIL/사용자 확인 필요와 증거를 남기세요. 컴파일, 서명, 실제 화면, API 응답, 마이크 전사, 스피커 청취를 각각 구분하세요. '빌드 성공'을 '음성 비서 전체 완성'으로 보고하지 마세요. 마지막에 실제 앱 경로와 실행 명령, 남은 제한만 짧게 보고하세요. Realtime 통화, 오른쪽 Option, 원거리 음성 제외, iPad는 별도 확장입니다.
성공 기준: 다른 사람이 README대로 새 소스에서 빌드할 수 있고 기능별 검증 상태와 실제 산출물 경로를 확인할 수 있습니다. 권한 미허용이나 키 미등록 항목이 있으면 전체 완료 대신 검증된 범위를 명시하세요.
```
## 선택 확장 — iPad는 Mac 완성 후
```text
Mac JarvisLab 핵심 기능이 통과한 상태에서 iPad 연동 설계만 별도 docs/iPad확장.md로 작성하세요. 이번에는 실제 설치·네트워크 변경을 하지 마세요. Mac 허브를 사설 네트워크에 한정하고 인증된 HTTPS API로 대화·작업 요청·결과를 중계하며 iPad에 OpenAI 장기 키를 넣지 않는 구조를 제안하세요. 기기 연결 토큰과 인증서는 소스 밖에 보관하고 인증서 검증을 무조건 허용하지 마세요. 음성 모델은 요청 초안만 준비하고 실제 작업은 화면 실행 버튼으로 분리하세요. 텍스트 연결→결과 조회→음성 순으로 검증하고 같은 Wi-Fi 접속과 셀룰러 접속을 구분하세요. 실시간 음성은 VAD·끼어들기·에코·종료·재연결을 별도로 검증해야 한다고 명시하세요. 성공 기준은 설계와 시험 항목이 정리된 문서이며 연동 완료라고 보고하지 마세요.
```
마지막으로 제가 이글을 읽고 자비스 같은 앱은 만든다면 .." 주소를 주고.. 내용 검토해서 비슷한 것 만들 수 있어?" 라고 물어보고 답변이 나오든 말든 "진행해줘" 라고 할 것입니다. 이제는 코딩 기술의 방제가 아니다 결과를 만드는 방법이 더 중요해지는 것 같습니다.

