minimal-harness
예시 — 30줄짜리 최소 하네스(의사코드)
섹션 제목: “예시 — 30줄짜리 최소 하네스(의사코드)”실제 Claude Code의 100분의 1 수준이지만, 하네스가 무엇을 하는지 한눈에 보여 주는 의사코드.
SYSTEM_PROMPT = open("CLAUDE.md").read() + ANTHROPIC_DEFAULT_PROMPTTOOLS = {"read_file": read_file, "write_file": write_file, "run_bash": run_bash}
def can_use_tool(name, args, mode): if mode == "plan": return False # 권한 게이트 if name == "run_bash" and "rm -rf" in args["cmd"]: return False return True
messages = [{"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": user_task}]
for step in range(MAX_STEPS): # 4. 에이전트 루프 resp = claude.messages.create(model="claude-sonnet", messages=messages, tools=TOOLS_SCHEMA) if resp.stop_reason == "end_turn": break # 종료 조건 for block in resp.content: # 3. 도구 디스패치 if block.type == "tool_use": if not can_use_tool(block.name, block.input, MODE): result = "permission denied" else: result = TOOLS[block.name](**block.input) # 1. 실행 환경 messages.append({"role": "user", "content": [{"type":"tool_result","tool_use_id":block.id,"content":result}]}) if context_tokens(messages) > 0.70 * 200_000: # 5. 컨텍스트 관리 messages = compact(messages)이 30줄에 본 파트의 모든 챕터 주제가 한 줄씩 들어 있다. 본 파트는 이 30줄을 200,000줄짜리 현실 하네스로 확장하는 여정이다.