콘텐츠로 이동

minimal-harness

예시 — 30줄짜리 최소 하네스(의사코드)

섹션 제목: “예시 — 30줄짜리 최소 하네스(의사코드)”

실제 Claude Code의 100분의 1 수준이지만, 하네스가 무엇을 하는지 한눈에 보여 주는 의사코드.

SYSTEM_PROMPT = open("CLAUDE.md").read() + ANTHROPIC_DEFAULT_PROMPT
TOOLS = {"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줄짜리 현실 하네스로 확장하는 여정이다.