hermes-agent - AI 에이전트 오픈소스 기여
hermes-agent는 CLI·메시징 게이트웨이·TUI·데스크톱으로 쓰는 Python 기반 AI 에이전트입니다(GitHub Star 248,000+, Fork 52,000+). Slack·텔레그램 같은 메신저를 게이트웨이로 붙여 에이전트와 대화하고, 플러그인과 스킬로 확장합니다.
이 엔진을 직접 운영하면서 Slack 게이트웨이 경로의 결함을 찾아 수정했고, 메인테이너가 성능 정리 PR에 함께 실어 main에 반영했습니다. 커밋의 authorship은 그대로 유지됐습니다. 같은 방식으로 찾은 Anthropic 자격증명 결함은 이슈로 올리고 직접 구현해 리뷰를 받고 있습니다.
기여 내역
1. Slack 첨부 블록 텍스트의 컨텍스트 폭증 차단 (main 반영)
NousResearch/hermes-agent#116533 · fix(slack) · main 커밋 709aaf9
메인테이너가 Slack attachments[].blocks[](붙여넣은 표, 알림 봇 본문)를 인바운드 메시지에 렌더링하기 시작했는데, 여기에 길이 상한이 없었습니다. Slack은 메시지 하나에 첨부 20개까지 허용하므로 알림 하나가 첨부당 3,247자 × 20 = 64,855자를 에이전트 컨텍스트로 밀어 넣을 수 있었습니다(실측). 상위 blocks 경로는 이미 6,000자로 막혀 있어 두 경로가 비대칭이었습니다.
_SLACK_UNFURL_BLOCKS_MAX_CHARS = 6000도입, 첨부 배열 전체가 하나의 예산을 나눠 씀- 예산이 소진돼도 첨부 헤더(
📎 [title](url))는 남겨 무엇이 있었는지는 보이게 - 결과: 첨부 20개 기준 64,855자 → 6,659자
- 인바리언트 테스트 2개 추가(총 길이가 예산에 묶임 / 첫 첨부 본문은 캡 전과 바이트 단위 동일). 수정 전 코드에서 실패하는 것을 먼저 확인하고, Slack 스위트 254개 통과 확인
- 변경량 +52 / −1. 메인테이너가 perf sweep PR #120405에 cherry-pick으로 실어 2026-09-24 main 머지
2. Anthropic 자격증명 선택 경로 로깅 (리뷰 중)
NousResearch/hermes-agent#116542 · fix(anthropic) · P2
ANTHROPIC_API_KEY 환경변수가 Claude Code 구독 자격증명을 아무 로그 없이 가려, 구독으로 써야 할 요청이 API 과금으로 나가는 문제를 겪었습니다. 이슈 #97085로 올리고 직접 구현했습니다.
resolve_anthropic_token()이 어떤 소스를 골랐는지 debug 로그, 구독 자격증명이 가려질 때 프로세스당 1회 warning- 토큰 값은 절대 출력하지 않음, 동작 변경 없음
- 인바리언트 테스트 2개, 관련 스위트 141개 통과, 실제 환경변수·credentials 파일·임시 HERMES_HOME으로 E2E 검증
- 변경량 +72 / −4, 독립 검증 봇 “No findings”
기여 방식
이 저장소는 외부 기여에 증상 재현(수정 전 코드에서 실패하는 테스트), 원인 라인 지목, 인바리언트 테스트, E2E를 요구하고, 메인테이너가 cherry-pick으로 main에 싣습니다. 두 건 모두 그 절차대로 준비했습니다.
사용 기술
- Python (게이트웨이 어댑터·자격증명 리졸버)
- pytest 인바리언트 테스트
- Git / GitHub PR 워크플로