Models & Algorithms•SOTAAZ Lab••EN

Claude Code, Codex, OpenCode, Hermes: 하네스 여덟 부분을 얼마나 열어 두나

에이전트 하네스 네 가지(Claude Code, Codex, OpenCode, Hermes Agent)를 Harness² 논문의 여덟 부분 기준으로 비교했습니다. 각 부분이 파일이나 설정으로 열려 있는지 공식 문서로 확인하고, 설치한 도구는 일부를 직접 열어 봤습니다. 읽은 문서 범위에서 여덟 부분을 모두 열어 둔 도구는 없었습니다.

Claude Code, Codex, OpenCode, Hermes: 하네스 여덟 부분을 얼마나 열어 두나

Claude Code, Codex, OpenCode, Hermes: 하네스 여덟 부분을 얼마나 열어 두나

같은 모델을 쓰는 코딩 에이전트라도 사용자가 고칠 수 있는 범위는 도구마다 다릅니다. 1부에서 하네스를 모델을 뺀 전부로 정의하고, Harness² 논문이 편집 가능한 여덟 부분을 꼽는다고 정리했습니다. 이번 글은 그 여덟 부분을 잣대로 네 도구를 훑습니다. 질문은 하나입니다. 이 부분을 파일이나 설정으로 고칠 수 있다고 도구가 문서에서 말하는가.

어떻게 셌나

측정 기준은 세 단계입니다. 공식 문서가 그 부분을 파일, 디렉터리, 설정 키, 명령줄 플래그 중 하나로 사용자가 직접 고치게 적으면 "열림"입니다. 같은 효과를 내는 간접 경로만 있거나(같은 이름의 커스텀 도구로 대체, 호출 인수로 즉석에서 만드는 방식), 구조를 확인하지 못했으면 "부분"입니다. 지침 파일(CLAUDE.md, AGENTS.md)은 사람이 쓰는 메모리로 세고, 에이전트가 스스로 쌓는 기억은 그 위에 따로 적습니다. 읽은 문서에서 찾지 못하면 "문서에 없음"이라 적고, 없다고 단정하지 않습니다. 다른 페이지에 있을 수 있기 때문입니다.

확인 방법은 도구마다 다릅니다. Claude Code(2.1.302), Codex(0.41.0), OpenCode(v2.0.32)는 이 서버에 설치되어 있습니다. Claude Code는 명령줄 도움말(claude --help의 플래그), OpenCode는 opencode.json의 instructions 키를 직접 열어 봤고, Codex는 ~/.codex 아래 폴더만 확인했습니다. Hermes Agent(v0.22.2)는 마운트 없는 격리 컨테이너에 설치해서 ~/.hermes 폴더, 설정 파일, 소스를 직접 열어 봤습니다. 다만 각 부분의 세부 경로는 2026년 10월 21일 현행 공식 문서에서 확인했고, 설치한 Codex와 OpenCode가 현행 문서와 같다는 보장은 없습니다. Codex 문서의 훅 파일과 서브에이전트 폴더가 설치한 0.41.0에서도 동작하는지는 확인하지 못했습니다.

네 도구 비교

부분Claude CodeCodexOpenCodeHermes Agent
시스템 프롬프트열림. 교체와 추가 플래그 (--system-prompt, --append-system-prompt)열림. config.toml의 model_instructions_file(교체), developer_instructions(추가)열림. 에이전트별 prompt 필드, 지침 파일은 instructions 키열림. ~/.hermes/SOUL.md, config.yaml의 agent.system_prompt
가드레일열림. settings.json의 permissions 허용, 질문, 거부 규칙열림. rules/*.rules의 prefix_rule(), sandbox_mode, approval_policy열림. opencode.json의 permission 키열림. config.yaml의 approvals.mode, approvals.deny
메모리열림. CLAUDE.md, .claude/rules/, 에이전트가 쓰는 자동 메모리열림. AGENTS.md. ~/.codex/memories/는 생성되는 상태이고 기본 꺼짐열림. AGENTS.md 지침 파일. 에이전트가 쌓는 메모리 저장소는 문서에 없음열림. ~/.hermes/memories/의 MEMORY.md, USER.md
도구 안내문서에 없음. 내장 도구 설명 편집은 못 찾았고 --tools는 노출만 제어문서에 없음. tools.* 켜기와 끄기 키만 확인부분. 같은 이름의 커스텀 도구로 내장 도구를 대체문서에 없음. 설정과 소스에서 설명을 고치는 항목을 못 찾았고 툴셋 선택만 확인
서브에이전트열림. .claude/agents/*.md열림. .codex/agents/의 TOML열림. .opencode/agents/*.md부분. 파일 정의는 없고 delegate_task의 인수(goal, context, toolsets, model)와 delegation 설정으로 즉석 생성
스킬열림. .claude/skills/<이름>/SKILL.md열림. .agents/skills/열림. .opencode/skills/열림. ~/.hermes/skills/(설치 직후 SKILL.md 58개)
스크립트·훅열림. 설정 파일의 hooks열림. hooks.json부분. 커스텀 명령과 플러그인의 이벤트 훅, 독립 훅 파일은 문서에 없음열림. config.yaml의 hooks:에 셸 명령을 등록(이벤트 11종)
플러그인열림. .claude-plugin/plugin.json으로 묶는 번들부분. .codex-plugin/plugin.json(구조는 공식 문서에서 직접 확인하지 못함)열림. .opencode/plugins/열림. ~/.hermes/plugins/<이름>/(설치 직후엔 폴더 없음, hermes plugins로 관리)

세 범주로 세어 보면 Claude Code는 열림 7, 문서에 없음 1(도구 안내)입니다. Codex는 열림 6, 부분 1(플러그인), 문서에 없음 1입니다. OpenCode는 열림 6, 부분 2(도구 안내, 스크립트·훅)입니다. Hermes는 열림 6, 부분 1(서브에이전트), 문서에 없음 1입니다. 읽은 문서 범위에서 여덟 부분을 모두 "열림"으로 확인한 도구는 없었습니다. 명령줄 플래그도 열림으로 셌기 때문에, 플래그뿐인 Claude Code의 시스템 프롬프트가 열림에 들어간 점을 감안해서 읽어 주세요.

읽어 낼 수 있는 것

내장 도구의 설명문을 직접 고치는 길은 네 도구의 문서에서 찾지 못했습니다. OpenCode만 같은 이름의 커스텀 도구로 내장 도구를 덮어쓰는 우회로를 명시합니다. 나머지 도구에서 찾은 길은 지침 파일에 "이 도구는 이렇게 쓰라"고 적는 간접 방법이었습니다. Harness² 논문이 도구 안내를 편집 대상 여덟 부분 안에 넣은 것과 대비되는 지점입니다.

시스템 프롬프트의 교체와 추가를 별개의 플래그나 키로 문서화한 쪽은 Claude Code와 Codex입니다. Claude Code 문서는 두 쪽의 차이를 이렇게 적습니다. 추가는 기본 도구 안내, 안전 지침, 코딩 관례를 보존하고, 교체는 기본 프롬프트를 모두 버립니다("Replacing drops all of the default prompt, including tool guidance and safety instructions"). 통째로 바꾸면 그 보호도 함께 사라진다는 뜻입니다.

메모리는 두 종류가 섞여 있습니다. 사람이 쓰는 지침 파일(CLAUDE.md, AGENTS.md)과, 에이전트가 스스로 쌓는 기억(Claude Code의 자동 메모리, Codex의 memories/, Hermes의 MEMORY.md)입니다. Codex 문서는 후자를 "생성되는 상태"로 보고, 손으로 고치는 것을 주된 제어 수단으로 삼지 말라고 안내합니다. 에이전트가 쓰는 기억을 사람이 고칠 수 있다고 해서 고쳐야 하는 것은 아닙니다. Hermes는 반대 방향에도 문을 둡니다. 저희가 설치한 Hermes 설정 파일에는 에이전트가 AGENTS.md나 SOUL.md 같은 지침 파일에 쓰려 하면 사람의 승인을 받는 보호 장치가 기본으로 켜져 있습니다.

Harness²의 여덟 부분은 기존 하네스의 원래 구조와는 다릅니다

여덟 부분이 어떤 도구의 기본 폴더 구조와 일대일로 맞는 것은 아닙니다. 공개된 코드를 보면 Harness²의 OpenCode 서브스트레이트는 systemprompt.md, guardrails.md, LongTermMEMORY.md, tool_descriptions/tool_guidance.md, scripts/, sub_agents/<이름>/AGENT.md, plugin/, skills/<이름>/SKILL.md를 작업 공간에 준비하고, 실행할 때 이것을 AGENTS.md 추가분과 .opencode/{skills,agent} 등 도구가 읽는 모양으로 렌더링합니다. 이 렌더링은 JobBench 설치 방식에 해당하고, WorkBuddy는 다른 템플릿을 씁니다. Codex 서브스트레이트는 항상 켜지는 글의 상한이 8,000자로 따로 정해져 있습니다. 즉 논문의 여덟 부분은 도구가 원래 열어 둔 구조가 아니라, 논문이 도구 위에 한 겹 얹은 편집 표면입니다. 위 표에서 도구마다 열린 정도가 달라도 서브스트레이트가 여덟 부분을 모두 편집 대상으로 삼을 수 있는 이유입니다.

이 표로 말할 수 없는 것

  • 열려 있다는 것과 쓸 만하다는 것은 다릅니다. 이 글은 문서에 파일이나 설정 키가 있는지만 셌고, 고친 결과가 에이전트 행동을 바꾸는지는 재지 않았습니다.
  • Claude Code 문서는 CLAUDE.md와 자동 메모리를 "강제되는 설정이 아니라 맥락"으로 다룹니다("context, not enforced configuration"). 막아야 하는 행동은 PreToolUse 훅으로 막으라는 안내입니다. 같은 "열림"이라도 강제력이 다릅니다.
  • Codex 문서의 경로(hooks.json, .codex/agents/, 플러그인)는 설치한 0.41.0에서 동작하는지 확인하지 않았습니다. Hermes는 설치해서 폴더와 설정을 열어 봤지만 소스 전체를 읽은 것은 아니어서, "문서에 없음"은 찾은 범위에서 없었다는 뜻입니다.

다음 글

3부에서는 이 여덟 부분을 고치는 루프, 곧 Harness² 논문을 분석해 보고 공개 데모를 돌립니다.

확인한 범위

  • 문서 확인일: 2026년 10월 21일. Claude Code는 code.claude.com/docs/en/cli-reference와 /memory, Codex는 developers.openai.com/codex 문서(메모리 쪽은 learn.chatgpt.com/docs/customization/memories로 연결됨), OpenCode는 opencode.ai/docs, Hermes는 GitHub README와 hermes-agent.nousresearch.com/docs. 시스템 프롬프트 플래그와 "맥락, 강제 아님" 문장, Codex 메모리의 "생성되는 상태" 문장은 원문 페이지에서 직접 대조했습니다.
  • 직접 확인: Claude Code 2.1.302의 claude --help(--system-prompt, --append-system-prompt, --agents, --plugin-dir), Codex 0.41.0이 설치된 서버의 ~/.codex 아래 skills, plugins, memories 폴더(어느 버전이 만든 폴더인지는 확인 못 함), OpenCode v2.0.32의 opencode.json, 격리 컨테이너에 설치한 Hermes v0.22.2의 ~/.hermes(SOUL.md, config.yaml, skills/, memories/), 설정 기본값과 delegate_task, approvals 소스.
  • 확인하지 못한 것: Codex 플러그인 구조의 공식 페이지, 설치한 Codex와 OpenCode 버전에서 문서의 각 경로가 실제로 동작하는지, Hermes의 소스 전체. 문서가 길어 끝까지 읽지 못한 페이지가 있어, "문서에 없음"은 읽은 범위에서 없었다는 뜻입니다.
  • 하네스 여덟 부분의 코드 근거: google-research/harness2 커밋 1cfe254의 substrate/opencode.py. 8,000자 상한은 substrate/codex.py에서 확인했습니다.

참고

더 많은 콘텐츠를 받아보세요

SNS에서 새로운 글과 튜토리얼 소식을 가장 먼저 받아보세요

이메일로 받아보기