SKILL.state: 장기 실행 에이전트 스킬을 위한 명시적 실행 상태
SKILL.state: Scalable Long-Horizon Agent Skills
TL;DR Highlight
대화 기록 대신 JSON 상태만 넘겼더니 토큰은 줄고 정확도는 올랐다
Who Should Read
에이전트가 수십~수백 스텝을 돌수록 느려지고 토큰 비용이 폭증해 고민인 백엔드 개발자
Core Mechanics
- 대화 기록 대신 상태 JSON만 넘긴다
- 매 스텝 프롬프트는 스킬 지시문, 현재 상태 JSON, 최신 관찰 세 가지로만 구성한다.
- 이전 관찰·행동·추론은 프롬프트에 넣지 않는다.
- 추론은 쓰고 바로 버린다
- 스텝 안에서는 Chain-of-Thought(단계별 추론)를 그대로 쓴다.
- 상태 패치(JSON)를 검증해 반영하면 추론 기록은 버린다.
- 프롬프트 길이가 일정하다
- 대화 누적형은 총 토큰이 O(T²)로 늘고, SKILL.state는 O(T)다.
- 프롬프트 크기는 스텝 수와 무관하게 거의 고정된다.
- 잘라내기·압축으로는 안 된다
- 같은 토큰 예산에 맞춘 슬라이딩 윈도우와 LLMLingua는 점수가 크게 떨어진다.
- 구조화된 상태를 유지하는 것이 핵심이다.
- 노이즈와 외부 변경에 강하다
- 쓸모없는 텔레메트리는 패치 생성 단계에서 걸러져 다음 프롬프트에 들어가지 않는다.
- 외부에서 상태가 바뀌어도 알림만 오면 바로 반영해 복구 스텝이 0이다.
Evidence
- Warehouse T=100 토큰 16.2배 절감
- Gemini-3-Flash 기준 Stateful(LangGraph식)은 1,062,387 토큰, SKILL.state는 65,408 토큰이다.
- 정확도는 Prompt(ReAct) 0.84, Stateful 0.91, SKILL.state 0.94다.
- Warehouse T=200에서 정확도 0.94 유지
- SKILL.state는 122k 토큰으로 0.94, Prompt(ReAct)는 2.6M 토큰에 0.74다.
- Memory는 6.1M 토큰까지 불어났다.
- InterCode CTF pass@1 54.2%
- Gemini-3-Flash 기준 가장 강한 기준선보다 7.8%p, Stateful보다 12.4%p 높다.
- 총 토큰은 ReAct 대비 60.4%, Stateful 대비 65.9% 줄었다.
- 같은 예산(~1,800)에서 비교하면 격차가 크다
- Warehouse T=100에서 SKILL.state 0.94, 슬라이딩 윈도우 0.18, LLMLingua 0.22, Summary-capped 0.52다.
- 노이즈 50개/턴(T=50)에서 Prompt는 0.53, SKILL.state는 0.98이다.
How to Apply
- 지금 쓰는 에이전트 상태를 5개 필드로 뽑아보기
- 오늘 로그 한 건을 골라 다음 스텝에 꼭 필요한 정보만 JSON 키로 정리하라.
- 논문의 CTF 스키마처럼 발견한 결과, 시도한 가설, 작업 경로 같은 필드를 쓰라.
- 루프에서 history 대신 state만 프롬프트에 넣기
- state_patch 검증과 롤백 재시도 붙이기
- 모델 출력은 state_patch와 action 두 키만 허용하고 스키마로 검증하라.
- 실패하면 상태를 건드리지 말고 재시도하라.
- null로 키를 삭제할 수 있게 병합 함수를 만들라.
- 작은 모델이면 JSON 출력을 강제하기
- 오류의 68%가 기존 키 덮어쓰기·삭제였다.
- 병합 방식을 프롬프트에 명시하고 가능하면 grammar-constrained decoding을 쓰라.
Try It
# Claude나 ChatGPT에 붙여넣기 (논문 방법의 간이 버전: SKILL.state 한 스텝 시뮬레이션)
Instructions:
{{에이전트 역할과 규칙, 사용 가능한 행동}}
Skill Execution State:
{{현재 상태 JSON, 처음엔 {}}}
Latest Observation: {{최신 관찰}}
Provide your response with:
1. Step-by-step reasoning (will be discarded after execution)
2. A JSON block containing exactly two keys: {"state_patch": {<updates; set keys to null to delete>}, "action": "<exact command>"}
이어서 해 볼 것: 반환된 state_patch를 상태에 병합하고, 추론은 버린 채 다음 관찰과 함께 같은 프롬프트를 반복하라.Terminology
관련 논문
같은 시뮬레이션, 다른 근거: 도구 출력을 파일로 넘기면 LLM 에이전트 정확도가 어디서 깎이나
긴 툴 출력을 파일로 넘기자 GPT-5.1은 정확도 11.3%p 하락, 정식 출력 지정하니 회복
가짜 뉴스가 진짜 폭락을: LLM 트레이딩 에이전트 대상 정보 주입 공격
가짜 헤드라인 한 줄로 LLM 트레이딩 에이전트 62%를 조종했다(프롬프트 주입은 14%)
Harness Engineering 101: LLM은 뇌, harness는 몸
에이전트는 JSON 배열을 관리하는 루프이고, 16개 챕터로 직접 만들어 본다
Harness²: 에이전트 harness를 스스로 고쳐 쓰는 재귀 최적화 프레임워크
모델은 고정하고 harness를 재귀로 고쳤더니 벤치마크 점수가 최대 11.8%p 올랐다
해고된 Savannah 경찰관, ICE 요원 남편에게 Flock 계정 공유
경찰관이 Flock 계정을 남편(ICE 요원)에게 공유했고, 감사에서 983건 검색이 드러나 해고됐다
tmux와 Claude Code: 세션, send-keys, 그리고 한계선
tmux로 Claude Code 여러 개를 돌리면 편하지만 에이전트 4개쯤에서 한계가 온다
Hybrid Reasoning Agents: 잠재 공간에서 생각하고 텍스트로 행동하는 LLM 에이전트
잠재 공간 추론과 텍스트 도구 호출을 섞었더니 성능 10.4%↑, 토큰 최대 54.7%↓
Original Abstract (Expand)
Large Language Models (LLMs) increasingly act as autonomous agents executing complex, long-running procedural skills. Existing agent runtimes maintain execution by continually appending observations, actions, and intermediate reasoning traces to an ever-growing conversation history, causing latency degradation and context-poisoning failures over long horizons. We present SKILL. state, a runtime architecture that replaces append-only conversational history with an explicit, mutable execution state. At each execution step, the model receives only the immutable skill specification, the current structured execution state, and the latest observation. Intermediate reasoning is discarded immediately after producing a validated state update, preventing prompt growth with execution history. Across diverse datasets, models, and execution environments, SKILL. state improves task accuracy while substantially reducing cumulative token consumption. Our results demonstrate that explicit execution state is an effective and architecture-agnostic abstraction for scalable long-horizon agent skills.