터미널이 아니라 백그라운드 데몬이 작업 상태와 실행을 소유해야 하는 이유를 설명합니다.
// docs/why/the-terminal-should-not-own-the-work.md 온라인 문서
터미널은 프로세스를 시작하기에 좋은 곳입니다. 그러나 그 프로세스에 관한 사실을 저장하기에는 좋지 않은 곳입니다.
에이전트 작업이 하나의 터미널 탭에 속하면, 그 탭은 의도치 않게 제어 평면이 됩니다. 탭을 닫으면 작업이 중단될 수 있습니다. 스크롤백을 잃으면 유용한 설명이 사라질 수 있습니다. 프로젝트를 다시 열면 무엇이 실행되었는지, 어떤 브랜치를 변경했는지, 그리고 대기 중인지, 완료되었는지, 아니면 조용히 멈춰 있는지를 다시 구성해야 합니다. 작업이 오래 실행될수록 이런 구성은 더 취약하게 느껴집니다.
Vincent는 소유권을 백그라운드 데몬으로 옮깁니다. 데몬은 작업 상태, 워크플로 실행, 에이전트 프로세스, 스케줄링, 데이터베이스, git 워크트리를 소유합니다. TUI, CLI, API는 그 상태의 클라이언트입니다. 어떤 클라이언트를 닫아도 그 뒤의 작업은 바뀌지 않습니다.
이 아키텍처 선택은 쉽게 체감할 수 있는 결과를 낳습니다. 작업을 시작하고, TUI를 닫고, 터미널을 다른 용도로 사용한 뒤, 나중에 동일한 상태와 기록으로 돌아올 수 있습니다. 여러 클라이언트가 경쟁하는 작성자가 되지 않고도 같은 데몬을 검사할 수 있습니다. 아무도 대시보드를 열어 두지 않아도 스케줄러는 우선순위와 동시성 제한에 따라 작업을 받아들일 수 있습니다.
내구성은 인터럽트 처리 방식도 바꿉니다. Vincent는 상태 전이를 수행하기 전에 이를 영속화합니다. 단계 도중 데몬이 멈추면, 재시작 복구는 중단된 시도를 기록하고, 고아 프로세스를 중지하기 전에 이를 확인하며, 실패 재시도를 소모하지 않고 해당 단계를 다시 실행합니다. 시스템은 프로세스가 머신 재시작 뒤에도 살아남는 척하지 않습니다. 대신 인터럽트를 명시적으로 만들고 알려진 상태에서 복구합니다.
데몬을 사용자 서비스로 설치하면 같은 모델이 로그인 전반으로 확장됩니다. 운영 체제가 제어 평면을 시작하고, 터미널은 본래 그래야 하는 모습으로 돌아갑니다. 즉, 작업을 볼 수 있는 선택 가능한 하나의 창이 됩니다.
이는 에이전트 코딩이 점점 대화가 아니라 워크로드가 되고 있기 때문에 중요합니다. 작업은 할당량, 게이트, 재시도, 하위 브랜치, 외부 검사를 기다립니다. 작업의 수명은 이를 시작한 인터페이스의 수명과 결합되어서는 안 됩니다.
터미널은 작업을 보여줄 수 있습니다. 작업을 소유해서는 안 됩니다.