Memdoor: 사용자 기기에서 작은 모델이 최첨단 모델을 능가하게 만드는 워크플로우 하네스
요약
Memdoor는 사용자 기기에서 작은 모델이 최첨단(frontier) 모델을 능가하도록 설계된 워크플로우 하네스입니다. 이 도구는 다섯 개의 Qwen3.8-27B 에이전트를 활용하여 LiveCodeBench Hard 테스트에서 높은 성능을 입증했습니다. YAML 형식의 워크플로우를 통해 Ollama, llama.cpp 등 다양한 로컬 런타임 환경에서 구동 가능하며, 단일 바이너리 파일만으로 사용이 편리합니다.
핵심 포인트
- Memdoor는 작은 모델로 최첨단 성능을 구현하는 워크플로우 하네스입니다.
- LiveCodeBench Hard 테스트에서 Fable 5보다 높은 평균 점수(9.8점)를 기록했습니다.
- Ollama, llama.cpp 등 다양한 로컬 런타임 환경에서 사용 가능합니다.
- 계정 없이 단일 바이너리 파일만으로 배포되어 접근성이 높습니다.
Memdoor 워크플로우를 통해 다섯 개의 Qwen3.8-27B 에이전트가 LiveCodeBench Hard에서 Fable 5를 능가하다.
GVS5H의 테스트 프레임워크(harness)를 저자들이 제시한 정확한 프롬프트와 루프를 사용하여 재구축했습니다. 그들의 목록 중 처음 10개 문제에 대해 각 5번씩 통과했으며, 평균 점수는 10점 만점에 9.8점을 기록했습니다. 저자들 자체 테스트 프레임워크는 9.6점을 받았고, Fable 5는 단일 호출에서 8.0점을 받았습니다. 이 격차는 저자들이 이 열 개의 문제(전체 100개에 걸쳐: 각각 92.4점과 90.4점)에서 측정한 것입니다. 총 50회의 실행 결과가 모두 공개되었습니다: 모든 요청, 응답, 프로그램 및 채점기 출력이 포함됩니다. 이 워크플로우는 YAML 형식이며 특정 모델을 지정하지 않습니다. 사용자의 모델이나 memdoor connect local을 통해 로컬에 있는 모델(권장하는 런타임인 janis; Ollama, llama.cpp, vLLM, LM Studio도 작동합니다; 오픈 가중치 모델에서 실행하는 방법, 키 필요 없음)을 지정할 수 있습니다.
examples/workflows/team-solve · 결과 페이지 · HN 스레드
Memdoor는 코딩 에이전트(coding agent)이자 워크플로우 러너(workflow runner)입니다. 에이전트에게 파일을 읽고, 코드를 편집하고, 검사를 실행하는 작업을 부여할 수 있습니다. 반복 가능한 작업의 경우, 워크플로우가 검사된 단계, 병렬 작업 및 승인 게이트를 조정합니다. 로컬 모델이나 키를 가진 제공업체(provider)로 실행하십시오.
이 장치에서:
curl -fsSL https://memdoor.ai/install.sh | bash
export OPENROUTER_API_KEY=sk-or-... # 또는 ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY 등
# 또는 키 없음: memdoor connect local # 이 장치에서 janis와 오픈 가중치 모델 — https://memdoor.ai/docs/open-weight
...
설치가 완료되지 않았거나 첫 실행에 실패한 경우: 설치 문제(Install issue) 열기.
ssh로 접근 가능한 장치에서는 아무것도 설치되지 않았습니다.
curl -fsSL https://memdoor.ai/install.sh | bash # 여기에서, 한 번만
memdoor --gateway ssh://you@box # 박스에 memdoor를 설치하고, 게이트웨이를 시작하며, 그 위에 창을 엽니다.
memdoor --gateway ssh://you@box connect openrouter # 사용자의 키가 박스에 보관되며; 모든 턴은 거기서 실행됩니다.
...
의사결정 모델(Decision model). Jev (TypeSafe)는 한 턴에 대한 타이핑된 질문에 보정된 확률로 반 네 시간 이내에 답변합니다. Judged는 검색, 파일 및 로그 읽기 결과가 필요한 것만 반환함을 읽어냅니다. 턴별 도구 상자(per-turn toolbox): 턴이 필요로 하는 도구만 전송됩니다. 정지 감지(Stall detection): 진행을 멈추는 턴은 종료됩니다. 44쌍의 실행, 의사결정 온/오프: 양방향 모두 22/22가 통과했습니다. 코드베이스 질문에 대해 54,661개에서 14,367개의 입력 토큰(−74%)을 사용했으며, 테스트와 함께하는 수정 및 10개의 단일 파일 수정은 어느 쪽이든 동일한 파일을 읽었습니다(±11%)(docs/features/DECIDE.md).
워크플로우, 결정론적 하네스(Workflows, the deterministic harness). 단계만 말하면 됩니다; 코더는 단계별로 하나의 YAML을 작성합니다. mario가 그래프를 실행합니다. 독립적인 단계들은 병렬로 실행됩니다. 체크가 통과할 때 단계가 완료됩니다. 게이트(gate)는 diff와 함께 승인을 기다립니다. 실패한 실행은 실패한 단계에서 재개됩니다. 수동으로, CI 또는 로컬 cron을 통해 시작됩니다(docs/features/WORKFLOWS.md). 스킬이 아닌 워크플로우입니다: 작성 문서.
예시들은 추가되기 전에 각각 실행되었습니다:
examples/workflows/. 야간 등급 단계(nightly grade step): examples/workflows/nightly-rule/steps/grade.yaml:
type: agent
prompt: |
오늘의 파티션은 {{.partition}}입니다.
...
검토 루프 기록 (실행을 통한 발견 확인, 게이트, 적용된 수정 사항): memdoor.ai/workflows.
창 내부에서
| 명령어 | 기능 |
|---|---|
/model | 에이전트의 사다리(가장 저렴한 발판부터). 제공업체의 모든 모델을 고정할 수 있습니다. 가격 목록 보기 |
| ... |
Esc는 중단합니다. ctrl+o는 도구 프레임을 확장합니다. Shift+Tab은 추론 노력(reasoning effort)을 설정합니다. @path는 파일을 언급합니다. MEMDOOR_APPROVE=changes는 모든 명령어 실행 및 쓰기 전에 확인을 요청합니다.
에디터에서
memdoor acp는 에이전트 클라이언트 프로토콜 (Agent Client Protocol, ACP)을 통해 코더에게 서비스를 제공합니다. Zed와 JetBrains는 이를 네이티브하게 지원합니다. VS Code의 경우: ACP 클라이언트 확장(예: "ACP Client")과 하나의 설정만 필요합니다:
"acp.agents": { "Memdoor": { "command": "memdoor", "args": ["acp"] } }
세션(session)은 로컬 게이트웨이에서의 대화입니다. 프롬프트(prompt)는 에디터의 작업 공간 폴더 내 한 턴을 의미합니다. 텍스트, 도구 호출 및 승인 사항은 마치 에디터 자체에서 나온 것처럼 표시됩니다. 단계별 가이드: memdoor.ai/docs/editor.
스크립트에서
memdoor run "make the retry wait configurable and add a test" # 창 없이 실행되는 턴(headless turn)입니다.
git diff | memdoor run "review this diff; one line per finding" # 표준 입력(stdin)이 입력값입니다.
memdoor run --json "fix the failing test" | jq 'select(.event=="done")'
...
종료 코드: 0은 확인됨(checked), 2는 미검증 또는 실패한 검사, 3은 아무도 답하지 않은 질문(--yes로 답변 가능), 1은 오류, 130은 중단된 상태를 의미합니다. 게이트웨이가 실행 중인 것이 없다면 자동으로 시작됩니다. memdoor resume는 모든 실행을 열어줍니다.
헤드리스(Headless) 모드 후 연결.
GitHub Actions에서
단 하나의 단계만 필요합니다. 키는 시크릿(secret)으로 사용됩니다. 저장소에 아무것도 추가할 필요가 없습니다 (Marketplace):
on: pull_request
jobs:
review:
...
내장됨:
pr-triage: 작업에서 실행된 검사(테스트, 존재하지 않는다고 주장하는 테스트, 아무것도 호출하지 않는 함수)를 기반으로 리뷰 준비 완료(ready for review), 수정 필요(needs work), 또는 스랩일 가능성이 높음(likely slop).pr-review: 코드를 실행하여 검증된 발견 사항; 블로커(blocker)에 대해서만 작업이 실패함.security-review: 비밀 정보(secrets), 주입(injection), 경로 탐색(path traversal), 누락된 권한 부여(missing authorization).write-tests: 변경 사항이 건드리는 부분에 대한 테스트; 이 테스트가 잘못되었음을 보여줄 때 작업이 실패함.pr-description: 제목, 무엇(What), 왜(Why), 테스트 방법(How to test), 위험도(Risk).explain-failure: 실패한 실행의 로그와 diff; 원인, 파일:라인, 수정 사항.issue-triage: 레이블, 종류, 요약, 중복 여부.fix-tests: 테스트 명령을 찾고, 테스트가 통과할 때까지 코드를 수정하며, 수정을 작업 트리(working tree)에 남겨둠.release-notes: 마지막 태그 이후 커밋들을 추가됨(Added) / 변경됨(Changed) / 수정됨(Fixed)으로 분류함.team-solve: 프롬프트가 정의하는 작업(memdoor workflow run team-solve "<작업>")을 수행하며, 신선한 컨텍스트 팀에 의해 수행됩니다. GVS5H의 모든 작업 및 모든 모델에 대한 방법론입니다: 자체 테스트로 검사되는 리포지토리 전반의 변경 사항, 샘플로 검사되는 프로그램, 새로운 심판(judge)으로 검사되는 문서. 이 프롬프트는 공개된 단계와 다르므로, 위에 언급된 9.8은 시스템 내장 기능이 아닌 그들만의 것입니다.
키 대신 local-model: Qwen3-8B-4bit를 사용하면: 모델이 러너(runner)(janis, 단일 파일, 캐시됨) 내부에서 실행되며, 한 번의 호출로 이루어집니다. 무료 러너에서는 약 1분 간격으로 명백한 버그와 미묘한 버그가 발견되며, 올바른 변경 사항이 블로커(blocker)로 플래그 지정될 수 있습니다. 이는 첫 번째 통과입니다.
workflow: <name>은 .memdoor/workflows/<name>/에서 사용자의 워크플로우를 실행합니다. 종료 코드(Exit code): 0은 완료, 2는 실패, 1은 중지, 3은 승인 게이트(approval gate)에서 중지됨을 의미합니다. 작업 요약에는 리뷰, 수정 사항 또는 메모가 포함됩니다. pull_request에 의해 트리거되며, 절대 pull_request_target으로 트리거되지 않습니다: 포크된 리포지토리의 풀 리퀘스트는 비밀 정보(secrets)를 받지 못합니다.
키와 모델
환경 변수에 제공업체 키(예: OPENROUTER_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY 등)를 설정하거나 memdoor connect을 사용합니다. 키가 없는 경우, 첫 번째 memdoor는 이 기기에서 OpenRouter를 통해 브라우저로 로그인하며, SSH 또는 별도의 박스(box)를 이용할 수 있습니다. 크레딧이 없는 경우: 하루 50개의 요청에 대해 무료 모델을 사용할 수 있으며, 해당 호스트는 전송된 데이터를 학습합니다. 이는 비공개 코드가 아닌 체험용입니다.
로컬 환경 설정: memdoor connect local은 우리가 권장하는 런타임인 janis를 설치하거나, 실행 중인 Ollama, llama.cpp 또는 LM Studio에 연결합니다. 아무것도 외부로 나가지 않습니다. janis는 Go 서버 하나이며, Mac의 GPU에서는 MLX를 통해, NVIDIA 박스에서는 CUDA를 통해 오픈 모델을 구동하며, 채팅 및 의사 결정 모델 서비스를 제공하고 키가 필요 없습니다. (예시: Google L4에서 시간당 $0.71에 Qwen3-Coder-30B-A3B 사용). 별도의 박스를 이용하는 경우: memdoor --gateway ssh://you@box connect local. 피어(Peers) 설정: memdoor peers add box http://box:18789 --dir ~/app 명령어로 박스 이름을 지정합니다. 이후 모든 대화에서 @box:coder …를 사용하면 해당 박스에서 턴을 실행하고 답변을 반환받습니다.
데이터가 저장되는 위치 (Where your data goes)
파일, 세션 및 명령어는 사용자 기기에 남아 있습니다. 모델이 읽은 내용은 제공업체(provider)로 전송됩니다. OpenRouter의 경우: 모든 요청에는 data_collection: deny가 포함되어 있으며, 유료 입력 데이터를 학습하는 호스트들은 제외됩니다. 예외 사항: 크레딧이 없는 계정에서 고정되거나 답변을 수행하는 :free 모델의 경우, 해당 호스트는 전송된 데이터로 학습하며, 요청에 명시(allow)됩니다. Memdoor는 이 경우 핀(pin) 설정 시 또는 연결 시 경고합니다. 공급업체 키나 회사 게이트웨이를 사용하는 경우: 다른 어떤 것도 접촉되지 않습니다. docs/SECURITY.md에는 바이너리가 지정할 수 있는 호스트 목록이 나열되어 있으며, 새로운 호스트에 대한 테스트는 빌드를 실패시킵니다.
소스에서 빌드하기 (Build from source)
Go 1.25:
git clone https://github.com/guregodevo/memdoor && cd memdoor
make install # ./memdoor를 빌드한 후, install.sh가 하는 것처럼 설치합니다
문서 (Documentation)
- 시작하기
- 워크플로우(Workflows) · 예약 검사(Scheduled checks) · MCP 서버(MCP servers)
- 프로바이더(Providers) · 보안(Security) · 의사결정(Decisions)
- CLI 참고 자료 · 아키텍처(Architecture) · 스킬(Skills) · ADRs
- 제공되는 문서: memdoor.ai/docs
저장소 레이아웃
cmd/cli/ CLI 도구 (cobra): tui, 모델(model), 워크플로우(workflow), 크론(cron), 계정(account), …
gateway/ 로컬 게이트웨이: 에이전트 런타임(agent runtime), 도구(tools), 프로바이더(providers), 워크플로우(workflows)
pkg/ 도메인: 의사결정(decision), 측정(metering), 계획(plan), 워크플로우 (마리오 태스크 팩토리) 등
...
라이선스
Apache License 2.0: LICENSE, NOTICE. 공용 저장소:
github.com/guregodevo/memdoor. 이슈는 여기로 가세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Codex tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기