ML 엔지니어 C씨는 AI 코딩 에이전트가 내뱉는 모호한 에러 메시지를 다시 사람이 해석해 수정하는 반복 작업에 지쳐 있었다. 에이전트가 작성한 코드에서 발생한 오류를 컴파일러가 텍스트 형태로 출력하면, 이를 다시 에이전트가 파싱하여 수정안을 제시하는 과정에서 잦은 오작동이 발생한다. 에러 메시지 형식은 수시로 변하고, 대부분의 경고문은 기계가 아닌 인간의 이해를 돕기 위해 서술적으로 작성되었기 때문이다.

이런 환경에서 에이전트는 스택 출력물을 수동으로 추적하거나 불확실한 힌트에 의존해 코드를 수정하며, 이는 결국 개발자가 다시 개입해야 하는 비효율로 이어진다. 예측 가능한 토큰과 안정적인 코드, 그리고 기계가 즉시 해석 가능한 복구 힌트가 있다면 에이전트의 자율성은 비약적으로 상승할 수 있다. 시스템 프로그래밍 언어 수준에서부터 이러한 기계 가독성을 설계 원칙으로 삼는 시도가 관찰된다. 이런 곤란을 겪는 개발자가 늘고 있다.

Vercel Labs(버셀 랩스)가 제안하는 시스템 언어 Zero의 정체

개발자가 사용하는 기존 시스템 언어들은 사람이 에러 메시지를 읽고 스택 출력물을 추적해 버그를 잡는 방식에 최적화되어 있다. Vercel Labs(버셀 랩스, 웹 프런트엔드 플랫폼 기업의 연구 조직)가 공개한 Zero는 이 지점을 정면으로 겨냥한다. Zero는 C나 Rust(러스트, 메모리 안전성을 강조한 시스템 프로그래밍 언어)와 동일한 설계 공간에 위치하는 시스템 프로그래밍 언어다. 네이티브 실행 파일로 컴파일되며 개발자에게 명시적인 메모리 제어권을 제공하고 저수준 환경을 타겟팅한다는 점에서 전통적인 시스템 언어의 정체성을 유지한다. 다만 설계의 목적지가 인간이 아닌 AI 에이전트라는 점이 결정적인 차이다. AI가 코드를 더 쉽게 읽고 수정하며 배포할 수 있도록 최적화된 실험적 언어로 정의된다.

도구 체인의 통합 방식에서도 AI 에이전트의 작업 효율을 고려한 설계가 관찰된다. Zero는 여러 도구를 파편화하지 않고 하나의 통합 CLI(명령줄 인터페이스) 바이너리로 제공한다. 구체적으로 zero check, zero run, zero build, zero graph, zero size, zero routes, zero skills, zero explain, zero fix, zero doctor와 같은 모든 핵심 기능이 단일 바이너리의 하위 명령어로 포함되어 있다. 이러한 구조는 AI 에이전트가 특정 작업 수행을 위해 어떤 도구를 호출해야 할지 추론하는 인지적 비용을 획기적으로 줄여준다. 에이전트는 단일한 인터페이스 내에서 코드 진단부터 실행, 빌드, 크기 측정, 그리고 자동 수정 제안까지의 전 과정을 일관되게 수행할 수 있다.

실제 환경에 적용하기 위한 진입 장벽은 매우 낮게 설정되어 있다. 설치는 다음의 단일 명령어로 수행된다.

bash
curl -sSL https://zero.build/install.sh | sh

프로젝트를 시작할 때는 아래 명령어를 통해 초기 구조를 생성한다.

bash
zero new cli <name>

생성된 프로젝트는 zero.json이라는 매니페스트 파일과 소스 코드가 담기는 src/ 폴더 구조를 가진다. 이는 프로젝트의 메타데이터와 실제 구현부를 명확히 분리하여 AI가 프로젝트의 전체 구조를 빠르게 파악하고 수정 지점을 찾도록 돕는다. 개발 환경의 편의성을 위해 extensions/vscode/ 경로에 VS Code(비주얼 스튜디오 코드, 마이크로소프트의 코드 편집기) 확장 프로그램도 함께 제공하고 있다.

Zero의 상세한 구현 내용과 최신 업데이트는 공식 GitHub RepoProject Page에서 확인할 수 있다. 시스템 언어의 저수준 제어권과 AI의 자동화 능력을 결합하려는 시도는 현재 실험적인 단계에서 구체적인 도구 체인과 매니페스트 구조로 구현되어 공개된 상태다.

JSON 진단과 zero skills를 통한 에이전트 루프의 구조화

기존의 시스템 언어 컴파일러가 내뱉는 에러 메시지는 사람이 읽고 해석하는 것을 전제로 설계되었다. AI 에이전트는 이러한 비정형 텍스트를 파싱하여 오류의 원인을 추론해야 하며, 이 과정에서 메시지 형식이 조금만 바뀌어도 수정 능력이 급격히 떨어지는 취약성이 관찰된다. Vercel Labs(버셀 랩스)가 공개한 Zero는 이러한 간극을 메우기 위해 진단 출력 자체를 구조화된 데이터로 전환하는 방식을 제안한다. 개발자가 bash zero check --json 명령어를 실행하면 컴파일러는 단순한 텍스트가 아닌 JSON 형태로 진단 결과를 반환한다. 여기에는 NAM003과 같은 안정적인 진단 코드와 타입화된 repair ID(수정 식별자)가 포함되어 에이전트가 모호함 없이 오류의 성격을 즉각적으로 식별하게 한다. 이는 에이전트가 텍스트의 뉘앙스를 분석하는 대신 고정된 토큰을 통해 상태를 파악하게 함으로써 제어 가능성을 높이는 결과로 이어진다.

에이전트가 오류를 인지한 이후의 수정 루프 역시 기계 가독성을 중심으로 재설계되었다. 특히 모든 도구 체인이 하나의 바이너리로 통합되어 있어 에이전트가 작업에 따라 어떤 도구를 호출해야 할지 고민하는 추론 비용이 제거되었다. 에이전트는 외부 문서에서 정답을 검색하는 대신 bash zero explain <diagnostic-code> 명령어를 통해 특정 진단 코드에 대한 상세 설명을 직접 조회한다. 이는 에이전트가 산문 형태의 문서를 파싱하며 겪는 정보 손실을 방지하는 장치가 된다. 더 나아가 bash zero fix --plan --json <file-or-package> 명령어를 사용하면 에이전트가 스스로 수정 방안을 추론할 필요 없이, 컴파일러가 제안하는 기계 가독성 수정 계획을 JSON으로 전달받는다. 결과적으로 에이전트의 작업 흐름은 텍스트 해석 기반의 추측에서 구조화된 데이터 기반의 실행으로 전환되며, 이는 코드 수정의 정확도와 직결된다.

컴파일러 버전과 에이전트가 보유한 지식 사이의 불일치는 실무 적용 시 가장 빈번하게 발생하는 병목 지점이다. Zero는 이를 해결하기 위해 CLI 내부에 버전 일치 가이드를 내장한 zero skills(제로 스킬즈) 기능을 제공한다. bash zero skills get zero --full 명령어를 실행하면 현재 설치된 컴파일러 버전과 정확히 일치하는 워크플로우 가이드가 제공된다. 이 가이드의 범위는 단순한 구문과 진단을 넘어 빌드, 패키지 관리, 표준 라이브러리 사용법, 테스트 전략, 그리고 에이전트 편집 루프까지 포괄한다. 에이전트가 최신 버전의 명세서를 외부에서 스크래핑할 필요 없이 도구 체인 내부에서 즉시 정답을 찾게 함으로써, 환경 변화에 따른 에이전트의 성능 저하 가능성을 구조적으로 차단하는 설계가 관찰된다. 이러한 접근은 AI 에이전트가 도구의 최신 상태를 실시간으로 동기화하며 작업할 수 있는 환경을 구축하는 데 기여한다.

인간 중심의 텍스트 피드백과 기계 중심의 구조적 데이터 비교

기존의 컴파일러가 내뱉는 에러 메시지는 기본적으로 사람이 읽고 해석한다는 전제하에 설계되었다. AI 에이전트가 코드를 수정하는 과정에서 가장 취약한 지점은 바로 이 비정형 텍스트를 파싱하는 단계에서 관찰된다. 컴파일러가 출력한 텍스트에서 에러의 원인을 찾고 수정안을 추론하는 루프는 메시지 형식이 조금만 바뀌어도 쉽게 무너지는 특성을 보인다. 이는 기존 언어들이 제공하는 피드백이 기계의 처리 능력이 아닌 인간의 인지 능력과 경험에 의존하는 인간 중심적 설계였기 때문에 발생하는 한계다. 에이전트는 텍스트 속에 숨겨진 의도를 파악하기 위해 불필요한 추론 과정을 거쳐야 하며, 이 과정에서 할루시네이션이나 잘못된 수정 방향으로 이어질 가능성이 상존한다.

Zero(Vercel Labs가 공개한 실험적 시스템 언어)는 이 지점을 구조적 데이터로 전환하여 해결한다. `zero check --json` 명령어를 실행하면 컴파일러는 비정형 텍스트 대신 구조화된 JSON(JavaScript Object Notation) 데이터를 기본값으로 출력한다. 여기에는 NAM003과 같은 안정적인 코드(Stable Code)와 인간이 읽을 수 있는 메시지, 그리고 정의된 복구 객체(Repair Object)가 함께 포함된다. 에이전트는 더 이상 모호한 문장을 해석해 수정안을 추론하는 취약한 루프에 머물지 않는다. 대신 정해진 타입의 복구 ID를 통해 즉시 실행 가능한 액션을 인식하고 이를 코드에 적용하는 방식으로 작동한다. 이는 에러 해결 과정을 추론의 영역에서 실행의 영역으로 옮긴 설계적 전환으로 평가된다.

정보 습득 경로의 변화 역시 실무적 가치가 크다. 일반적인 개발 환경에서 AI 에이전트는 최신 문법이나 에러 해결법을 찾기 위해 외부 문서를 스크래핑하는 방식을 취한다. 이 과정에서 현재 설치된 컴파일러 버전과 외부 문서의 버전이 일치하지 않아 잘못된 수정안을 제시하는 버전 불일치 문제가 빈번하게 발생한다. 반면 Zero는 CLI(명령줄 인터페이스)를 통해 설치된 버전과 정확히 일치하는 가이드를 직접 제공하는 방식을 택했다. `zero skills get zero --full` 명령어를 통해 구문, 진단, 빌드, 패키지 사용법 및 에이전트 편집 루프에 최적화된 워크플로우를 즉시 확보할 수 있다. 이는 에이전트가 외부 환경의 불확실성에 노출되지 않고 컴파일러 내부의 신뢰할 수 있는 지식 베이스를 직접 활용하게 함으로써, 복구 루프의 전체적인 안정성과 정확도를 극대화하는 결과로 이어진다.

명시적 효과 선언과 World 파라미터가 가져올 안정성

개발자가 가장 먼저 체감하는 제어권의 변화는 World 파라미터의 도입이다. 기존 시스템 언어들이 전역 객체나 암시적인 런타임 환경을 통해 I/O에 접근했다면, Zero는 Capability(특정 리소스에 대한 접근 권한을 정의한 객체) 객체를 함수 시그니처에 명시하도록 강제한다.

zero

fn main(world: World) raises Error { ... }

이 구조에서 World 파라미터는 외부 세계에 접근할 수 있는 유일한 통로가 된다. World나 여기서 파생된 Capability 객체를 인자로 받지 않은 함수는 표준 출력, 파일 시스템 접근, 네트워크 호출과 같은 부수 효과(Side Effect)를 절대 수행할 수 없다. 이러한 제약은 런타임이 아닌 컴파일 타임에 강제된다는 점에서 결정적인 차이를 만든다. 이는 개발자가 코드의 인터페이스만 보고도 해당 함수가 시스템에 어떤 영향을 줄 수 있는지 즉각적으로 판단할 수 있게 하며, 불필요한 권한 남용을 원천적으로 차단하는 효과를 가져온다.

에이전트가 코드를 작성하고 수정하는 루프에서 가장 위험한 지점은 예측하지 못한 부수 효과의 발생이다. 기존 언어 환경에서는 함수 내부 로직을 전부 분석하거나 실제로 실행해보기 전까지는 해당 함수가 네트워크 호출을 수행하는지, 혹은 중요한 파일을 수정하는지 확신하기 어려웠다. Zero는 이러한 불확실성을 시그니처 수준으로 끌어올려 에이전트가 코드의 영향 범위를 정적으로 예측하게 한다. 에이전트는 이제 함수 시그니처를 통해 사용 가능한 권한을 확인하고, 그 범위 내에서만 동작하는 코드를 생성한다. 이는 에이전트가 임의로 시스템 설정을 변경하거나 권한 밖의 작업을 수행하는 리스크를 컴파일 단계에서 차단함으로써, AI 기반의 자동 수정 프로세스에 강력한 안전장치를 제공한다.

실패 가능성이 있는 작업의 처리 방식 역시 극도로 명시적이다. Zero는 check 키워드를 통해 fallible operations(실패 가능성이 있는 연산)를 처리하며, raises 어노테이션을 통해 에러가 전파되는 경로를 시그니처에 직접 기록한다. 이는 런타임 예외가 코드 깊숙한 곳에 은닉되어 갑작스럽게 프로그램이 종료되는 상황을 방지한다. 에이전트는 raises에 명시된 에러 타입을 보고 어떤 예외 처리가 필요한지 즉각적으로 판단할 수 있으며, 이는 곧 기계가 읽고 수정하기 쉬운 구조적 안정성으로 이어진다. 결국 명시적 효과 선언과 에러 전파 경로의 가시화는 에이전트가 런타임 오류를 추측하는 것이 아니라, 타입 시스템이 제공하는 증거를 바탕으로 정밀하게 코드를 복구하는 기반이 된다.

한국 AI 실무 환경에서의 시스템 프로그래밍 자동화 가능성

기존의 시스템 최적화 작업은 엔지니어가 스택 트레이스(Stack Trace, 프로그램 실행 중 오류 발생 시 호출 스택의 기록)를 일일이 추적하며 메모리 누수나 성능 병목을 찾는 수동 작업에 의존했다. 특히 저수준 언어의 특성상 작은 실수 하나가 시스템 전체의 크래시로 이어지기에 검증 과정에 막대한 시간이 소요되었다. 하지만 제로(Zero, AI 에이전트 최적화 시스템 언어)와 같은 구조적 언어가 도입되면 이 과정은 데이터 기반의 자동화 루프로 전환된다. 에이전트가 `zero check --json` 명령어를 통해 정형화된 진단 데이터를 수신하고, 이를 바탕으로 네이티브 바이너리를 직접 수정하는 파이프라인 구축이 가능해지기 때문이다. 이는 고성능 네이티브 프로그램 개발에서 인간의 개입을 최소화하는 에이전트 기반 칩핑(Shipping, 소프트웨어 배포) 환경의 실질적인 토대가 된다.

실무 환경에서 AI 에이전트의 활용도를 낮추는 결정적 요인은 컴파일러의 비정형 텍스트 오류 메시지를 해석할 때 발생하는 추론 오류다. 제로는 이를 해결하기 위해 `zero fix --plan --json`과 같은 명령어로 기계가 즉시 실행 가능한 수정 계획을 제공하며, 에이전트가 도구 선택에 에너지를 낭비하지 않도록 단일 바이너리로 통합된 CLI(Command Line Interface, 명령줄 인터페이스)를 제공한다. 여기에 `zero skills`를 통해 컴파일러 버전과 정확히 일치하는 가이드를 CLI 내부에서 직접 제공함으로써, 에이전트가 외부 문서를 검색하며 겪는 버전 불일치 문제를 제거한다. 이러한 구조는 에이전트가 코드 작성, 검증, 수정, 배포에 이르는 전 과정을 자율적으로 수행하는 루프를 구현하게 하며, 저수준 환경을 타겟팅하는 AI 기반 시스템 최적화 도구가 런타임 성능을 실시간으로 개선하고 이를 즉시 바이너리에 반영하는 수준으로 진화하게 만든다.

AI가 생성한 네이티브 코드를 실제 운영 환경에 배포할 때 가장 큰 진입장벽은 보안 및 안정성 검증에 드는 비용이다. 제로의 설계에서 주목할 점은 함수 시그니처에 효과(Effects)를 명시하고 `World`라는 기능 객체를 통해 외부 세계로의 접근 권한을 엄격히 제어한다는 사실이다. 파일 시스템 접근이나 네트워크 호출이 필요한 함수는 반드시 이 객체를 전달받아야 하며, 컴파일러가 이를 강제하므로 AI가 임의로 위험한 시스템 호출을 삽입하는 행위를 원천적으로 차단한다. 또한 `check` 키워드를 통해 실패 가능성이 있는 연산을 명시적으로 처리하게 함으로써 에러 경로를 가시화한다. 이러한 명시적 권한 제어 체계는 보안 검토에 투입되는 인간의 리소스를 획기적으로 줄이며, AI 에이전트가 생성한 저수준 코드를 신뢰하고 실제 프로덕션 환경에 배포할 수 있는 기술적 근거를 제시한다.