호스트 제어 인프라를 활용한 휴대 가능한 에이전트 매니페스트 (Portable Agent Manifests)
요약
에이전트의 정의와 실행 환경을 분리하여 휴대성을 높이는 '에이전트 매니페스트' 개념을 소개합니다. 에이전트 정의는 YAML/TypeScript로 관리하고, 자격 증명 및 인프라 제어는 호스트가 담당하여 보안과 유연성을 동시에 확보합니다.
핵심 포인트
- 에이전트 정의와 실행 인프라의 결합(coupling) 문제 해결
- 에이전트 매니페스트를 통한 휴대 가능한 에이전트 계약 정의
- 호스트 애플리케이션을 통한 자격 증명 및 도구 권한 제어
- 보안 강화를 위한 샌드박스 및 리소스 제한 관리
AI 에이전트는 종종 애플리케이션 코드, 즉 프롬프트(prompt), 모델 호출(model call), 몇 가지 도구(tools), 그리고 첫 번째 예시를 실행하기에 충분한 제어 흐름(control flow)으로 시작됩니다.
에이전트가 성장함에 따라, 정의(definition)와 환경(environment)이 서로 융합되는 경향이 있습니다. 모델 설정(Model configuration)이 자격 증명(credentials) 옆에 위치하게 됩니다. 도구 액세스(Tool access)가 프롬프트와 섞입니다. 지속성(Persistence)은 특정 프로세스를 가정합니다. 배포(Deployment) 선택 사항이 에이전트 자체의 일부가 됩니다.
그러한 결합(coupling)은 에이전트를 검사, 테스트, 이동 및 복구하기 어렵게 만듭니다.
우리는 다른 경계선을 중심으로 Clear Ideas Agent Runtime을 구축했습니다. 즉, 에이전트 정의는 휴대 가능(portable)해야 하며, 이를 실행하는 인프라(infrastructure)는 호스트(host)의 제어 하에 남아 있어야 한다는 것입니다.
에이전트 매니페스트(Agent Manifest)는 휴대 가능한 계약입니다
에이전트 매니페스트(Agent Manifest)는 버전 관리되는 YAML 또는 TypeScript 정의입니다. 이는 다음을 설명할 수 있습니다:
- 프롬프트(prompts) 및 구조화된 출력(structured outputs);
- 타입이 지정된 변수(typed variables);
- 조건(conditions) 및 루프(loops);
- 도구(tools) 및 MCP 연결(connections);
- 승인(approvals) 및 웹훅(webhooks);
- 샌드박스화된 코드 단계(sandboxed code steps);
- 서브 런(sub-runs);
- 제한 사항(limits) 및 최종 출력(final outputs).
별도의 에이전트 런 매니페스트(Agent Run Manifest)는 한 번의 호출(invocation)에 필요한 값과 실행 선택 사항을 제공합니다. 이를 통해 재사용 가능한 에이전트 정의를 특정 실행과 관련된 입력 및 운영 결정으로부터 분리하여 유지할 수 있습니다.
다음은 작은 예시입니다:
schemaVersion: "1.0"
name: research-brief
variables:
...
매니페스트는 에이전트를 설명합니다. 에이전트를 실행하는 데 사용되는 자격 증명(credentials), 인프라 계정(infrastructure account) 또는 지속성 구현(persistence implementation)을 포함하지 않습니다.
호스트가 운영 경계를 제어합니다
호스트 애플리케이션(host application)은 다음을 제공하고 제어합니다:
- 모델(models) 및 제공업체 자격 증명(provider credentials);
- 연결(connections) 및 도구 권한 부여(tool authorization);
- 지속성(persistence) 및 아티팩트 저장소(artifact stores);
- 로컬 또는 원격 컴퓨팅(local or remote compute);
- 샌드박스 제공업체(sandbox providers);
- 텔레메트리(telemetry);
- 동시성(concurrency) 및 리소스 제한(resource limits).
이는 단순한 설정 관리(configuration hygiene) 이상의 의미를 갖습니다. 이는 휴대 가능한 에이전트 정의(portable agent definition)가 스스로에게 더 넓은 권한을 부여하는 것을 방지합니다. 호스트는 자격 증명(credentials)을 해결하고, 승인된 도구(tools)를 노출하며, 연결 모드(connection modes)를 제한하고, 애플리케이션 정책에 따라 개별 도구 호출(tool calls)을 승인할 수 있습니다.
따라서 권한 부여(Authorization)는 호스팅된 서비스에 의해서만 제공되는 기능이 아니라, 런타임 경계(runtime boundary)의 일부입니다.
실행 환경 전반에 걸친 단일 실행 계약 (One run contract)
Agent Runtime은 단일 클라이언트 계약을 통해 세 가지 실행 경계(execution boundaries)를 지원합니다:
- In process: TypeScript 애플리케이션에 런타임을 임베딩(embedding)하기 위한 방식.
- Child process: 휴대 가능한 워커 프로토콜(portable worker protocol)을 통해 실행하는 방식.
- Remote compute: 실행 엔진 어댑터(execution-engine adapter)를 통한 원격 컴퓨팅 방식.
에이전트 매니페스트(Agent Manifest)는 실행 경계가 변경되어도 바뀌지 않습니다.
포함된 Modal 어댑터는 원격 제출(remote submission), 상태(status), 순차적 이벤트(ordered events), 결과 검색(result retrieval), 재개(resume) 및 취소(cancellation)를 구현합니다. Docker와 Modal Sandboxes는 격리된 코드 실행 및 생성된 아티팩트(artifacts)를 위해 런타임의 네이티브 샌드박스 계약(sandbox contract)을 구현합니다.
애플리케이션은 동일한 어댑터 인터페이스를 통해 서로 다른 컴퓨팅 또는 샌드박스 구현을 제공할 수 있습니다.
내구성 있는 실행 (Durable execution)은 런타임의 일부입니다
다단계 에이전트(multi-step agent)에는 최종 응답 이상의 것이 필요합니다.
Agent Runtime은 실행 상태(run state), 단계별 출력(step outputs), 트랜스크립트(transcripts), 생성된 파일(generated files) 및 연속 데이터(continuation data)를 체크포인트(checkpoint)로 저장합니다. 중단되거나 방해받은 실행은 새로운 프로세스에서 재개될 수 있습니다. 펜싱(fencing) 시도를 통해, 다른 프로세스가 실행을 재개한 후 이전 워커가 작업을 커밋(commit)하는 것을 방지합니다.
또한 실행(runs)은 순차적인 라이프사이클(lifecycle), 모델(model), 도구(tool), 체크포인트(checkpoint), 아티팩트(artifact) 및 텍스트 델타(text-delta) 이벤트를 방출합니다. CLI, 임베딩된 애플리케이션, 원격 워커 또는 OpenTelemetry 통합을 통해 동일한 이벤트 스트림을 소비할 수 있습니다.
이를 통해 런타임은 본질적으로 비결정론적(non-deterministic)인 모델 호출을 중심으로 안정적인 실행 이력(execution history)을 가질 수 있습니다.
런타임은 실행 그래프(execution graph)를 도출할 수 있습니다
많은 오케스트레이션 프레임워크 (orchestration frameworks)는 개발자에게 시퀀스 (sequence)를 정의하거나, 라우팅 코드 (routing code)를 작성하거나, 노드 (nodes)와 엣지 (edges)를 유지 관리하도록 요구합니다.
대신 Agent Runtime은 각 적격한 단계 (step)가 생성하고 소비하는 변수들을 읽을 수 있습니다. 이러한 데이터 의존성 (data dependencies)으로부터 실행 계획 (execution plan)을 도출합니다.
독립적인 프롬프트 분기 (prompt branches)는 병렬로 실행될 수 있습니다. 의존적인 단계들은 입력값이 준비될 때까지 대기합니다. 도구 사용이 가능하고 상태를 유지하는 (stateful) 작업들은 순서가 유지됩니다. 결과는 매니페스트 (manifest) 순서대로 커밋됩니다.
이 그래프는 에이전트 옆에 별도로 유지되는 두 번째 정의가 되지 않습니다. 이는 Agent Manifest로부터 해결됩니다.
이는 에이전트가 독립적인 모델 호출을 포함할 때 경과 시간을 단축할 수 있는 동시에, 순서가 지정된 체크포인트 (checkpoints)와 상태 전이 (state transitions)를 보존합니다. 대부분 선형적인 에이전트는 대부분 순차적으로 유지됩니다.
실행 그래프 기사 (execution-graph article)에는 완전한 예시, 스케줄링 규칙, 타이밍 모델 (timing model), 그리고 시각화가 포함되어 있습니다.
모델, 도구, 그리고 어댑터는 조합 가능하게 유지됩니다
모델은 AI SDK를 통해 연결됩니다. 도구는 애플리케이션에 의해 직접 제공되거나 Model Context Protocol 연결을 통해 제공될 수 있습니다.
메모리, 파일, 그리고 SQLite 저장소는 일반적인 영속성 (persistence) 요구 사항을 충족합니다. 별도의 패키지들이 모델, 영속성, 컴퓨팅, 샌드박스 (sandbox), 아티팩트 (artifact), 조건 (condition), 그리고 OpenTelemetry 어댑터 (adapters)를 제공하여, 애플리케이션이 실제로 사용하는 인프라를 설치할 수 있도록 합니다.
npm에서 설치하기
Agent Runtime은 Apache 2.0 라이선스 하에 제공되며, 호스팅된 Clear Ideas 서비스가 필요하지 않습니다.
npm install @clearideas/agent-runtime
5분 퀵스타트 (five-minute quickstart)로 시작하거나, 매니페스트 문서 (manifest documentation)를 검토하거나, GitHub의 소스 (source on GitHub)를 살펴보세요.
더 광범위한 출시 발표는 Clear Ideas Agent Runtime 0.1.0에서 확인할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기