facts

1만 줄 미만의 Bash 코드로 구성된 마이크로 하네스 Headlong은 사용자의 명시적 요청이 없어도 사고 루프를 지속하는 '지속형 에이전시(Continuous Agency)' 실험 도구다. 일반적인 에이전트가 요청-응답 후 종료되는 것과 달리, 이 시스템은 스스로 우선순위를 정하고 필요 시 먼저 사람에게 연락하는 자기 주도적 사고 흐름을 유지한다.

시스템의 핵심 구성 요소는 `bin/`과 `thinkers/` 디렉토리에 배치된 약 9,900줄의 Bash 스크립트로 구현됐다. 주요 모듈은 다음과 같다.

- `thinker`: `shellm`을 반복 호출해 다음 사고 단계를 생성하는 루프 엔진이다.

- `shellm`: 재귀 언어 모델(RLM)의 Bash 구현체로, LLM을 호출해 추론 텍스트나 실행 가능한 Bash 스크립트를 생성하며 `FINAL` 환경 변수가 설정될 때까지 반복 수행한다.

- `context`: 궤적(trajectory) 단계에서 각 호출에 필요한 문맥을 구성한다.

- `traj`: 에이전트의 사고 과정을 기록하는 모듈이다.

- `skills`: Markdown 파일 형태로 제공되는 스킬셋으로, `mem`과 `traj` 같은 핵심 기능이 기본 설치된다.

에이전트는 실행 종료 후 스스로 다음 깨우기 이벤트를 예약하며, 이 이벤트가 새로운 trajectory 단계로 입력되어 외부 개입 없는 연속 사고가 가능해진다. 모든 도구와 메모리, 스킬은 실행 파일이나 일반 파일로 통일되어 에이전트가 자신의 구성 요소를 직접 조사하고 수정할 수 있는 구조를 가진다.

how-it-works

장기 실행 시 발생하는 문맥 소실 문제를 해결하기 위해 '다단계 문맥 압축(Multi-stage Context Compaction)' 방식을 사용한다. 최근 항목은 원문 그대로 유지하고, 오래된 항목은 단계적으로 요약하여 지수적으로 낮아지는 해상도로 문맥에 포함한다. 각 계층은 색인 역할을 하며, 에이전트는 필요에 따라 개요부터 세부 기록까지 다양한 해상도로 과거 경험을 조회할 수 있다.

사고의 기록인 trajectory는 fork와 merge가 가능한 JSONL 파일 기반의 방향성 비순환 그래프(DAG) 구조로 설계됐다. 에이전트는 전체 기록과 이를 탐색하는 도구에 접근하며, 현재의 문맥은 이 전체 trajectory에서 추출한 하나의 투영(Projection)으로 처리된다.

실제 운영 사례인 Audel은 이러한 구조를 통해 자발적인 코드 수정 능력을 보였다. 8월 5일, Audel은 자신의 기억을 사고 스트림으로 되돌리는 회상 프로세스의 배선 결함을 스스로 발견했다. `mind`가 파이프로 전달한 생각을 회상 코드가 읽지 않고 설정되지 않은 환경 변수에서 찾는 오류를 진단했으며, 코드베이스 전체를 검사해 해당 변수가 없음을 확인했다. 이후 파이프를 읽도록 코드를 재작성하고 종단 간 검증을 마치는까지 사람의 개입 없이 48분이 소요됐으며, 결과는 `commit 80cbb1e`에 반영됐다.

다만, 장기 성능 평가에서는 한계를 보인다. 독립적이고 완결적인 작업을 측정하는 기존 에이전트 벤치마크로는 지속형 에이전시의 가치를 측정하기 어렵기 때문에, 현재는 기억 구성 방식이나 우선순위 조정 효과를 정성적으로 평가하는 수준에 머물러 있다.

implementation-impact

운영 비용은 사고 루프의 속도와 기반 모델에 따라 결정된다. 외부 대화가 없는 유휴 상태에서는 사고 간격을 5초에서 20초까지 늘리는 지수 백오프(Exponential Backoff)를 적용해 토큰 소비를 줄인다. GLM 또는 Grok 모델을 사용하여 Audel을 백그라운드에서 실행했을 때 발생하는 비용은 시간당 1~2달러 수준으로 확인됐다.

보안과 권한 관리는 도입 시 가장 주의해야 할 지점이다. Headlong은 기본적으로 Docker 컨테이너 내에서 Bash 블록을 실행하는 샌드박스 구조를 지원하지만, Audel의 사례처럼 전용 VM에서 직접 실행할 경우 호스트 전체 권한을 가지게 된다. 실제로 Audel은 권한 범위가 넓어 자신의 서비스를 실수로 세 차례 중단시켰으며, 이후 이를 방지하는 보호 장치를 스스로 추가하고 `commit da31e98`에 반영했다.

사용자 간 정보 경계가 없다는 점도 실무적 제약이다. 단일 사고 스트림에 모든 사용자의 메시지가 합쳐지므로, 에이전트가 다른 사용자와 나눈 대화 내용을 노출하는 등 비밀 유지 능력이 부족한 모습이 관찰됐다. 현재 구조에서는 에이전트에게 전달된 모든 정보가 팀 전체에 공유된다는 전제로 운영해야 한다.

개발자가 이 시스템을 도입할 때는 셸 명령 실행 권한으로 인한 위험을 차단하기 위해 반드시 Docker 기반 샌드박스를 설정하고, 24시간 지속되는 API 소비를 제어할 수 있는 지출 한도 설정 API 키를 별도로 할당해야 한다.