GitHub은 AI 에이전트를 위해 만들어지지 않았습니다 (그래서 Cloudflare가 직접 만들었습니다)

BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술

Transcript

00:00:00Cloudflow는 Artifacts라는 것을 작업 중인데, 이는 분산 파일 시스템으로
00:00:05Git과 호환되며 에이전트를 위해 설계되었습니다. 프로그래밍 방식으로 생성, 포크
00:00:10또는 삭제할 수 있으며, 크기에 상관없이 수천 개의 저장소를 다룰 수 있습니다. 예를 들어 병렬
00:00:15PR 검토, 대규모 코드베이스의 자동 리팩토링, 세션별 에이전트 작업 공간 등을 위한 것입니다.
00:00:20하지만 이게 Durable Objects 위에 구축되었다면, JavaScript만 사용해야 하고
00:00:25Git을 실행하기 위한 셸 명령에 접근할 수 없다는 의미일까요?
00:00:28구독하고 함께 알아봅시다!
00:00:33GitHub은 인간을 위해 만들어졌지, 에이전트를 위해 만들어진 것이 아닙니다. 즉, 그들은 어떤 사회적
00:00:37측면이나 팔로워 기능, 토론 시작 기능이 필요 없습니다. 하지만 에이전트는 Git에 매우 능숙하며, 이는 그들의
00:00:42학습 데이터에 포함되어 있습니다.
00:00:43그래서 Cloudflare는 Zig로 기본적인 Git 구현을 만들고, Wasm으로 컴파일하여
00:00:49Git 서버 역할을 하도록 Durable Object에 넣었습니다.
00:00:52한편 클라이언트 자체는 원하는 무엇이든 될 수 있습니다. 예를 들어 Isomorphic Git을 사용하는 워커를
00:00:57워커 내부에서 사용하거나 Git 프로토콜, 심지어 HTTP 클라이언트를 사용하여
00:01:03JavaScript를 사용하지 않는 환경에서도 연결할 수 있습니다.
00:01:05현재 녹화 시점에서는 안타깝게도 Artifacts가 비공개 베타 상태라
00:01:10직접 접근할 수는 없지만, 관련 문서가 많이 나와 있어서 그
00:01:15문서의 코드로 데모를 만들 수 있습니다. 나중에 공개 베타로 출시되면
00:01:19제 코드가 실제로 작동하는지 확인해 보실 수 있을 겁니다.
00:01:20이제 할 일은 특정 저장소에 대한 작업 목록을 가져와서
00:01:24해당 저장소를 여러 번 포크하여 모든 작업을 병렬로 실행하고
00:01:29Durable Object의 Cloud 저장소에 있는 각 아티팩트에서 각 작업을 실행하는 도구를 만드는 것입니다.
00:01:34어떻게 작동하는지 살펴봅시다.
00:01:35우선 워커를 위한 Artifacts 시작하기 문서를 따라 시작했습니다.
00:01:39이 명령어를 사용했고, 명령어 뒤의 텍스트는 프로젝트 이름으로
00:01:44원하는 대로 정할 수 있습니다.
00:01:45모든 단계를 따랐더니 기본적인 워커 코드가 생성되었습니다.
00:01:49Artifacts용 워커는 REST API를 사용하는 것보다 라운드 트립이 적어서
00:01:53약간 더 성능이 좋습니다.
00:01:55그다음, wrangler.jsonc 또는 toml 파일에 Artifacts 바인딩을 추가하고
00:02:00타입을 다시 실행해야 합니다.
00:02:02문서에서는 새 저장소 생성에 초점을 맞추고 있으므로, Artifacts 바인딩의
00:02:07create 메서드와 저장소 이름을 사용합니다.
00:02:09이름을 생성하면 토큰과 원격 주소를 제공합니다.
00:02:13원격 주소는 아티팩트의 위치이고, 토큰이나 인증 토큰 또한
00:02:17접근 권한을 얻는 데 필요합니다.
00:02:18물론 원격 주소와 토큰을 사용하여 Git 프로토콜로
00:02:22아티팩트와 상호 작용할 수 있습니다.
00:02:23하지만 우리는 다르게 해볼 겁니다.
00:02:25Artifacts Durable Object에 새 저장소를 만드는 대신, 먼저
00:02:29baseline이라는 저장소가 존재하는지 확인하겠습니다.
00:02:31만약 존재하지 않는다면, Git 저장소를 가져온 다음
00:02:35baseline이라는 이름을 부여하고 그 값을 반환합니다.
00:02:39물론 워커 바인딩을 위한 API 문서를 확인하면 import 메서드에
00:02:43추가할 수 있는 매개변수들이 더 있다는 것을 알 수 있습니다.
00:02:45기존 저장소를 반환한 후에는 아주 멋진 일들을
00:02:49할 수 있습니다.
00:02:50여기 저장소에 수행하고 싶은 작업들이 있습니다. 물론 하드코딩해 두었지만,
00:02:53입력값이나 UI를 통해 추가할 수도 있습니다.
00:02:56워커 기본 내보내기 내부에는 Anthropic SDK와
00:03:00baseline 저장소가 있습니다.
00:03:02모든 작업을 순회하면서 이 이름으로
00:03:06저장소를 포크합니다.
00:03:07나중에 자세히 설명할 함수가 있는데, 이것이
00:03:10포크된 저장소 안에서 작업을 실행하고 에이전트가 변경을 수행하도록 하며 에이전트의 요약을 반환합니다.
00:03:15즉 에이전트가 마지막으로 한 말입니다. 포 루프가 끝날 때마다 이
00:03:19정보를 반환합니다.
00:03:20작업 이름, 포크 이름, 원격 주소, 토큰을 반환하여
00:03:23언제든지 변경 사항이 괜찮은지 확인할 수 있도록 하고, 수행된
00:03:27작업에 대한 요약도 함께 반환합니다.
00:03:28현재로서는 워커 바인딩이 풀(pull), 커밋, 푸시(push) 기능을 제공하지 않습니다.
00:03:33그래서 코드를 보면 Isomorphic Fetch를 사용했고, 변경 사항을 일시적으로 저장하기 위해
00:03:38인메모리 저장 시스템을 사용했습니다.
00:03:39에이전트 코드에서 인메모리 파일 시스템을 생성하고, 에이전트에게
00:03:43관련 변경 사항을 만들고 코드를 커밋하도록
00:03:47지시하는 시스템 프롬프트를 가지고 있습니다.
00:03:48제공된 원격 주소와 토큰을 사용하여 포크된 저장소를 클론합니다.
00:03:51그리고 읽기, 쓰기, 커밋이라는 도구들을 정의합니다.
00:03:52모델을 선택하고 시스템 프롬프트를 전달한 다음, 작업을
00:03:55사용자 메시지로 전달합니다.
00:03:59나머지 코드는 표준적인 에이전트 루프입니다.
00:04:00도구 호출이 있으면 추론을 멈추고 도구 호출을 실행합니다. 여기서는 읽기, 쓰기
00:04:02또는 커밋을 수행하며, 커밋 후에는 코드 푸시까지 실행됩니다.
00:04:07아티팩트를 사용하면 모든 코드가 Durable Object 안에 존재하며
00:04:10객체의 SQLite 데이터베이스에 저장된다는 장점이 있습니다. Durable Object가 다운되어도
00:04:14다시 살아나면 언제든지 SQLite 데이터베이스에서 정보를 검색할 수 있습니다.
00:04:20도구 호출 후에 모델의 추론을 계속하고 모델의
00:04:23최신 메시지를 반환합니다.
00:04:27코드를 직접 실행할 수 없어서 이 모든 과정이 일어나는 것을 시각화하기가 매우 어렵다는 것을 잘 알지만,
00:04:29아티팩트로 무엇을 할 수 있는지, 그리고 그 잠재력을
00:04:32어느 정도 이해하셨기를 바랍니다.
00:04:37아티팩트에서 일어나는 모든 변경 사항을 볼 수 있는 UI가 있고,
00:04:38개별 에이전트나 단일 오케스트레이터 에이전트와 통신하여
00:04:42다른 저장소들에 변경 사항을 적용할 수 있다고 상상해 보세요.
00:04:46오케스트레이터 에이전트 이야기가 나와서 말인데, 모든 변경 사항을 조율하고
00:04:48검토자 에이전트가 코드를 확인한 후 메인 저장소에 병합하는
00:04:52단일 워커를 둘 수도 있습니다.
00:04:56아티팩트와 동적 워커를 결합하여 에이전트가 변경한 코드를 실행해 보고
00:04:57작동 여부를 확인할 수도 있습니다.
00:05:02JavaScript 코드가 아니라면 Cloudflare 샌드박스를 사용하여 원하는 언어로 실행하고
00:05:03셸 명령까지 실행할 수 있습니다.
00:05:07프런트엔드 변경 사항이 올바르게 구현되었는지 모델이 Puppeteer 브라우저로
00:05:09확인할 수 있는 Cloudflare 브라우저 옵션도 있습니다.
00:05:13아직 실행해 볼 수는 없지만, 아티팩트의 가능성에 대해 생각하는 것만으로도 정말 즐거웠습니다.
00:05:18하지만 한 가지 눈에 띄는 점은 'git diff' 명령이 없다는 것입니다.
00:05:21워커 바인딩 API나 Isomorphic Git에도 노출되어 있지 않습니다.
00:05:22아마도 유일한 방법은 Git 프로토콜을 통하는 것일 테고, 나중에 추가될 수도 있겠죠.
00:05:25어쨌든 지금 당장은 Git 프로토콜을 사용하지 않고 하려면
00:05:30Isomorphic Git의 'git log'를 사용하여 Git 트리를 찾고, 트리를 내려가면서
00:05:35차이점을 비교하는 방식을 써야 할 것 같습니다.
00:05:36어쨌든, 이것은 Cloudflare의 매우 멋진 릴리스라고 생각합니다.
00:05:40S3 파일, ZeroFS, JuiceFS 같은 파일 시스템 도구들이
00:05:45이미 존재하지만, Git과 호환되지 않는다는 점에서 아티팩트는 매우 멋진 기능이며
00:05:46에이전트 친화적입니다.
00:05:50S3 이야기가 나와서 말인데, 로컬 기기에서 S3를 실행하고 싶다면
00:05:55그 방법을 정확히 알려주는 Josh의 영상을 확인해 보세요.
00:05:59더 에이전트 친화적입니다.
00:06:01S3 이야기가 나와서 말인데, 만약 S3를 로컬 기기에서 실행해 보고 싶었다면,
00:06:05정확한 방법을 알려주는 Josh의 이 영상을 확인해 보세요.

Key Takeaway

Cloudflare의 Artifacts는 Git 호환성과 Durable Objects의 내구성을 결합하여 대규모 자동화 에이전트 작업에 최적화된 파일 시스템 환경을 제공한다.

Highlights

Cloudflare Artifacts는 Git과 호환되며 에이전트 작업을 위해 설계된 분산 파일 시스템이다.

Artifacts는 Durable Objects에 기반하여 수천 개의 저장소를 병렬로 처리할 수 있다.

Zig로 구현하고 Wasm으로 컴파일된 Git 서버가 Durable Object 내부에서 작동한다.

Isomorphic Git과 같은 도구를 사용하여 에이전트가 코드를 읽고, 쓰고, 커밋할 수 있다.

모든 데이터는 객체 내 SQLite 데이터베이스에 저장되어 객체가 재시작되어도 정보가 유지된다.

Timeline

에이전트를 위한 분산 파일 시스템

  • Artifacts는 대규모 코드베이스 리팩토링 및 병렬 PR 검토를 지원한다.
  • 기존 GitHub은 인간의 사회적 기능에 집중되어 있어 자동화 에이전트의 효율적 작업에 한계가 있다.

Artifacts는 프로그래밍 방식으로 생성, 포크, 삭제가 가능한 저장소 시스템이다. 수천 개의 저장소를 다룰 수 있도록 설계되어 에이전트별 작업 공간을 분리하는 데 최적화되어 있다.

Artifacts의 기술적 구조와 구현

  • Zig로 작성하고 Wasm으로 컴파일된 코드가 Durable Object에서 Git 서버 역할을 수행한다.
  • Artifacts는 REST API보다 라운드 트립이 적어 성능상 이점이 있다.
  • 원격 주소와 인증 토큰을 통해 외부 클라이언트와 Git 프로토콜로 상호작용할 수 있다.

에이전트가 Git 환경에 익숙하다는 점을 활용해 Cloudflare는 Durable Object 내부에 Git 서버를 직접 구현했다. 클라이언트는 워커나 HTTP 클라이언트를 통해 환경 제약 없이 연결이 가능하다.

에이전트 자동화 루프 및 데이터 보존

  • 에이전트는 저장소를 포크하고 코드를 수정 및 커밋하는 도구 호출 루프를 실행한다.
  • SQLite 데이터베이스를 기반으로 모든 변경 사항이 저장되어 시스템 장애 시에도 복구가 가능하다.

특정 기준 저장소(baseline)를 확인하고 작업을 수행하는 에이전트 로직을 구성한다. 인메모리 파일 시스템과 도구 호출을 결합하여, 에이전트가 코드 변경을 제어하고 결과를 푸시하는 자동화 과정을 구축할 수 있다.

잠재적 활용 및 기술적 고려사항

  • 오케스트레이터 에이전트를 통해 다수의 저장소 변경 사항을 통합 관리할 수 있다.
  • 현재 'git diff' 명령은 직접 지원되지 않으며 트리 비교 방식을 사용해야 한다.
  • Cloudflare 샌드박스를 사용하여 비-JavaScript 환경의 코드 실행이나 브라우저 기반 UI 검증이 가능하다.

Artifacts는 파일 시스템 도구 중 Git과의 강력한 호환성을 제공한다는 점에서 차별화된다. 향후 에이전트 기반의 워크플로우를 구성할 때 오케스트레이션과 샌드박스 실행 환경을 결합해 확장성을 높일 수 있다.

Community Posts

View all posts