agentproto 0.4.0 — 데몬이 감독 표면(supervision surface)으로 성장하다
요약
agentproto 0.4.0 업데이트를 통해 에이전트의 지속적인 실행과 감독을 지원하는 데몬 기능이 강화되었습니다. 터미널 종료 후에도 유지되는 Durable cron, 폴링 루프를 제거하는 Scriptable wait, 그리고 동기화 로직을 간소화하는 WorkflowRunner 프리미티브가 도입되었습니다.
핵심 포인트
- 데몬 기반의 Durable cron으로 터미널 종료 후에도 에이전트 작업 예약 및 유지 가능
- Scriptable wait 기능을 통해 비효율적인 폴링 루프 없이 세션 상태 관리 가능
- WorkflowRunner를 도입하여 단계별 동시 실행 및 명시적 장벽(barrier) 제어 지원
- 기존 세션을 재사용하거나 스케줄에 따라 재프롬프트하는 기능 제공
2026-07-03 출시 · npm i -g @agentproto/cli · source · Apache-2.0
'에이전트를 시작할 수 있다'와 '에이전트를 계속 실행 상태로 유지할 수 있다' 사이의 간극이야말로 대부분의 오케스트레이션 툴링(orchestration tooling)이 조용히 포기하는 지점입니다. 시작은 쉽습니다. 어려운 것은 그 이후 모든 것입니다: 언제 끝났는지 아는 것, 거짓말을 했을 때 알아차리는 것, 내일 재개하는 것, CPU와 주의력을 소모시키는 폴링 루프 없이 다섯 개의 에이전트를 실행하는 것입니다.
0.4.0은 agentproto 데몬이 단순한 런처(launcher)가 아니라 **감독 표면(supervision surface)**이 되는 출시 버전입니다. 즉, 계속 실행되고, 기록을 유지하며, 스크립트로 제어할 수 있는 무언가입니다.
다음 기능들이 추가되었습니다.
데몬 기반의 영속적인 cron (Durable cron)
agentproto cron은 터미널이 닫혀도 살아남는 에이전트 작업을 예약합니다. 작업들은 데몬에 상주하며 세 가지 방식으로 노출됩니다: MCP 툴, REST 경로(route), 그리고 CLI 명령어입니다. 따라서 예약된 실행은 에이전트, 스크립트, 또는 셸에서 접근할 수 있습니다.
작업은 다음 세 가지 중 하나를 수행할 수 있습니다:
- 허용 목록에 등록된 명령을 실행하거나,
- 새로운 에이전트 세션을 생성하거나,
- 이미 활성화된 세션에 재프롬프트(re-prompt a session that's already alive) 할 수 있습니다 (
prompt-session).
세 번째 기능이 흥미롭습니다. 이는 장기간 유지되는 세션이 매번 컨텍스트를 처음부터 다시 구축하는 비용을 지불하지 않고도, 스케줄에 따라 '20분마다 배포(deploy) 상태를 확인하라'와 같이 자극될 수 있다는 것을 의미합니다.
스크립트 가능한 대기 (Scriptable wait) — 폴링 루프 삭제하기
만약 에이전트를 오케스트레이션 해봤다면, 이런 루프를 작성해 봤을 것입니다:
while true; do
status=$(check_session $id)
[ "$status" = "done" ] && break
...
이것은 모든 바쁜 대기(busy-waits)가 잘못된 방식으로 틀렸으며, 다섯 개의 세션으로 확장되면 상황은 더 나빠집니다. 0.4는 이를 실제 원시 요소(primitive)로 대체합니다: 세션 또는 **팬인 그룹(fan-in group)**의 세션이 종료되거나 완료 정책(completion policy)이 해결될 때까지 블록하는 기능입니다. 이는 REST 엔드포인트와 CLI 하위 명령어로 모두 사용할 수 있습니다.
단 한 번의 호출로 N개의 세션을 관리하며, 폴링 (polling)이 필요 없습니다. (while true가 왜 신뢰성이 아닌지에 대해 여기에서 작성했습니다.)
WorkflowRunner 프리미티브 (primitive)
이번 업데이트의 핵심 추가 사항입니다. WorkflowRunner는 단계별로 순서가 정해진 동시 단계 (concurrent steps)를 제공하며, 각 단계 사이에 **명시적 장벽 (explicit barriers)**을 둡니다. 즉, 동기화 (synchronization) 로직을 직접 구현할 필요 없이 "이 네 가지는 함께 실행하고, 네 가지가 모두 완료될 때까지 아무것도 진행하지 마라"라고 명령할 수 있습니다.
포함된 기능:
| 기능 | 역할 |
|---|---|
sessionRef | 단계가 새로운 세션 대신 이전 단계의 세션을 재사용함 |
| ... |
마지막 기능은 들리는 것보다 훨씬 중요합니다. 9단계 워크플로 (workflow) 중 7단계를 수정할 때, 1~6단계를 다시 실행하는 비용을 치를 필요가 없어야 하기 때문입니다.
WorkflowRunner.startFromFile과 workflow_run_file MCP 도구는 호출 시점에 WORKFLOW.md를 로드합니다. 따라서 워크플로는 저장소 (repo) 내의 파일로 존재하며, 코드 속에 파묻히지 않고 검토(review) 및 차이 비교(diff)가 가능합니다.
구조화된 트랜스크립트 (Structured transcripts)
세션별 대화 내보내기 기능과 더불어, 데몬 이벤트 (daemon-events) 내보내기 소스, 그리고 점진적 폴링 (incremental polling)을 위한 GET /sessions/:id/events를 제공합니다. 핵심은 감사 가능성 (auditability)입니다. 에이전트 (agent)가 테스트를 실행했다고 주장할 때, 실제로 실행했는지 확인할 수 있는 방법은 바로 트랜스크립트입니다. 이러한 주장은 감독 사다리 (the supervision ladder)의 핵심 주제입니다.
도구 동사 (Tool verbs), 패밀리 우선 분류 체계로 명칭 변경
다소 파격적이지만, 그만한 가치가 있는 변화입니다. MCP 도구들이 이제 다음과 같은 패밀리별로 그룹화됩니다: agent_*, session_*, terminal_*, command_*, file_*, directory_*, browser_*, policy_*, routine_*, tunnel_*.
모델이 60개의 도구 중에서 선택해야 할 때, 어떤 패밀리에 속하는지를 나타내는 이름은 실질적인 도움을 줍니다. 에이전트 도구 (Agent tools) 또한 전용 agent-tools.ts로 이동되었습니다.
첫 번째 인프로세스 어댑터 (AIP-45)
지금까지의 모든 어댑터는 서브프로세스 (subprocess)를 생성했습니다. createProprietaryProtocolArm은 어댑터의 createAgentCliClient를 동적 로드하며, createAgentCliRuntime은 프로세스 생성 (spawn) 과정을 완전히 생략합니다.
@agentproto/adapter-mastracode-inprocess가 이를 사용하는 첫 번째 사례입니다. 이는 셸 명령(shelling out)을 호출하는 대신, SDK(createMastraCode + runMC)를 통해 Mastra Code를 인프로세스(in-process) 방식으로 구동합니다. 복합적인 resourceId:threadId 세션 ID는 프로세스 재시작 후에도 유지되는데, 이 부분이 제가 실제로 중요하게 생각하는 지점입니다.
언급할 가치가 있는 신뢰성 개선 사항
- hermes 중단 현상. ACP 클라이언트의 턴당 침묵 감시자(per-turn silence watchdog)를 통해, 턴 종료(turn-end)를 방출하지 못한 채 멈춰버린 세션 문제를 해결했습니다. 만약 에이전트가 살아있는 것처럼 보이면서 아무것도 하지 않고 가만히 있었다면, 대개 이것이 원인이었습니다.
- 도구 사용 중(tool-busy turns)
agent_output유지. 출력이 사라지지 않고 계속 표시됩니다. - 도구 호출(Tool calls)의 정보성 렌더링. 일반적인
[tool] view라인 대신 더 유익한 정보를 제공합니다. - 디스크립터(descriptor) 상의 세션 활성 상태(Session liveness) —
pid,lastActivityAt,processAlive. 이제 대시보드에서 사용 중(busy), 유휴(idle), 그리고 만료 실행 중(stale-running, pid는 종료되었으나 레코드는 살아있다고 표시되는 세션)을 구분합니다. - 종료되거나 사용 중인 세션으로의 무음 프롬프트 전달 실패: 수정되었습니다. 이제 오류를 알려줍니다.
- 트랜스크립트 라이터(Transcript writer). 더 이상 텍스트 델타(text-delta) 이벤트에서 줄바꿈을 제거하지 않습니다.
온보딩 (Onboarding)
agentproto onboard는 MCP 서버를 등록하고 스킬 팩(skill pack)을 한 번의 실행으로 설치합니다. install skill/<slug>는 hermes, claude-code, claude-desktop을 대상으로 하며, install-mcp는 hermes를 위한 정밀한 config.yaml 업데이트(upsert)와 claude-desktop을 위한 매니페스트(manifest) 업데이트를 수행합니다. 즉, 필요한 부분만 수정하고 나머지는 그대로 둡니다.
더 깊이 알아보기
이번 릴리스에 포함된 대부분의 내용은 코드로 구현된 논거입니다. 디자인이 왜 당연해 보이는 방식이 아닌 이 방식으로 결정되었는지를 포함하여, 이를 글로 된 논거로 확인하고 싶다면 다음을 참고하세요:
| 0.4 버전에 포함된 내용 | 그 이면의 사고 과정 |
|---|---|
| 스크립트 가능한 대기(Scriptable wait), 내구성이 있는 cron | 루프를 제거하라: 왜 while true는 신뢰성이 아닌가 |
| ... |
업그레이드 전 주의 사항
- chat-tui가 Ink/React에서
@earendil-works/pi-tui로 마이그레이션되었습니다. 커스텀 Ink 테마를 사용 중이었다면 렌더링 상태를 다시 확인하십시오. - 루틴(Routines)과 워크플로우(Workflows)는 서로 다른 프리미티브(primitives)입니다. 루틴은 단계별 팬인(fan-in)을 포함하는 평면적인
RoutineStep[]구조입니다. 워크플로우는 명시적인 배리어(barriers)를 통해 단계별 동시성(staged concurrency)을 추가합니다. 새로운 오케스트레이션(orchestration) 코드를 작성할 때는 워크플로우를 사용하십시오.
npm i -g @agentproto/cli
전체 노트: the 0.4.0 release.
agentproto는 기존 스택 위에서 실행되는 오픈 소스 (Apache-2.0) 오케스트레이션 레이어(orchestration layer)입니다. 이는 여러분의 코딩 에이전트(coding agent)를 대체하는 것이 아니라, 이를 감독(supervise)합니다. 이슈를 제기하세요.
agentproto를 공개적으로 구축 중입니다 — X에서 @theagentproto와 @agentik_ai를 팔로우하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기