
🐦 Mingbird는 이미 보유한 노트북의 내장 그래픽에서 2–9B 모델로 실제 작업을 끝내도록 설계된 로컬 우선 에이전트 하네스다. Windows 10/11을 지원하며 Linux와 macOS는 실험 단계다. Apache-2.0 라이선스로 배포되고 오프라인 우선으로 동작한다.
제작진은 같은 2B 모델의 점수가 일반적인 하네스에서 0.017이던 작업을 Mingbird에서 0.821로 수행했다고 제시한다. 제작진의 주장은 작은 모델 자체보다 도구 호출 반복, 문맥 초과, 자기 수정 실패 같은 하네스 결함이 작업 실패의 원인이라는 것이다. 결과는 전체 288개 셀을 공개한 종단 간 측정에 근거한다고 설명한다.
현재 릴리스는 v1.8.2다. 제작진은 프로젝트를 활발히 유지하고 있으며, 한 번의 클릭으로 오프라인 모드를 켤 수 있다고 밝혔다. Linux와 macOS용 CI 빌드도 제공한다. 회귀 테스트는 단위 테스트 435개와 통합 테스트 26개를 합쳐 461개다.
작은 모델을 돕는 방식
Mingbird는 작은 모델이 스스로 하기 어려운 일을 하네스가 보완하는 구조다.
- 모델이 코드를 스스로 디버깅하기 어려우면 하네스가 테스트를 실행하고 파일과 줄 번호, 원래 오류 메시지를 돌려준다.
- 코드 변경 전에는 자동으로
.bak백업을 만들고, 한 번의 명령으로 되돌릴 수 있다. - 질문과 작업을 분리한다. 채팅 질문에는 한 번 답하고 멈추며, 도구 호출이 반복되면 단계적으로 알림, 강제 초기화, 정상 종료를 적용한다.
- 도구 전체를 문맥에 넣지 않도록 범주별로 미리 불러온다. 기본 팩토리 사전 입력은 정확히 797토큰이며, CI는 길이가 단 1바이트라도 늘면 실패하도록 설정됐다.
- 한 번에 큰 파일을 출력하지 못하는 경우를 위해 호출당 출력 한도를 기존 2048에서 8192로 높였다. 그래도 잘리면 빈 응답을 반복하는 대신 골격을 먼저 쓰고 이어서 덧붙이도록 나눠 피드백한다.
- 대용량 파일을 훑는 작업에는 바이트 예산 기반의 크롤링 제한 v2를 적용한다. 예산은 파일 크기의 2배이며 64KB에서 512KB 사이로 제한된다. 이 제한은 작업을 거부하지 않는다.
- 긴 작업에서는 완료를 알리기 전에 원래 요청을 다시 읽고 결과를 점검하는 전달 자기 점검 단계를 거친다.
- 파괴적인 동작을 막는 5중 안전망을 제공한다.
Ollama 주소와 실행 파일, GPU 환경 변수, 모델 별칭은 실행 시 자동 감지하거나 ~/.ollama_agent/config.json에서 설정할 수 있다. 자세한 내용은 AGENTS.md에 있다. 461개 회귀 테스트에는 사전 입력 길이 증가를 막는 검증도 포함된다. 테스트 묶음에는 실행 중인 백엔드나 네트워크가 필요한 테스트가 없으며, 실제 Ollama를 사용하는 종단 간 테스트도 없다. bench/와 benchmarks/의 벤치마크 실행기는 별도 프로그램으로 pytest 테스트 묶음에 포함되지 않는다.
지원하는 작업과 기능
Mingbird는 코드 작성 및 테스트 실행, 파일 정리, 웹 조사, 데이터 분석, MCP 도구 호출을 지원한다.
- 오프라인 모드는 v1.8.0부터 제공한다. 도구 모음의 🔒 버튼을 켜면 로컬 모델만 사용한다. 웹 도구는 프롬프트에 조립되지 않으며 외부로 나가는 연결도 구조적으로 차단된다. 자세한 내용은 아래 데이터 처리 설명에 있다.
- 결과를 스트리밍하고 작업 중 생각을 표시한다. 작업이 끝나면 생각 영역은 접힌다.
- 파일을 끌어다 놓거나
Ctrl+V를 눌러 파일과 스크린샷을 첨부할 수 있다. 첨부물은 지시와 함께 전달된다. - 설치 프로그램에는 CPU에서 실행하는 로컬 음성 인식(STT) 모델이 포함된다. 제작진은 실시간보다 약 20배 빠르게 처리하며 사용자가 말을 멈추면 자동으로 인식도 멈춘다고 설명한다.
- 기본값은 꺼져 있는 작업 시간 제한 기능을 제공한다. 입력창에
40,1.5h,half an hour를 쓰거나 작업 설명에限时 40 分钟또는timebox 40 minutes라고 적으면 된다. 작업 설명에서 자동 감지한 시간은 최우선으로 적용되며 마감이 가까워지면 하네스가 작업을 마무리하도록 유도한다. - 세션 기록을 로컬에 저장하며 검색과 재생을 지원한다.
- Ollama에 내려받은 모델을 자동 감지하고 최대 256K 문맥을 지원한다.
- 마크다운 스킬은 필요할 때 불러오며 MCP 서버는 일반 JSON 설정으로 지정한다.
- 영어와 중국어 UI를 제공한다.
- 실험 단계인 웹 UI를 브라우저에서 사용할 수 있다. 로컬 전용이며
127.0.0.1에만 연결된다. 안내는 저장소의 가이드에서 확인할 수 있다. - 한 번의 클릭으로 설치하거나 소스에서 실행할 수 있다.
벤치마크 결과와 조건
제작진은 한 대의 컴퓨터에서 네 하네스와 4개 오픈 모델(2B–35B)을 18개 실제 작업에 적용해 총 288개 셀을 측정했다. 결과물은 결정론적 점수 산정 방식으로 평가했고 모든 셀을 공개했다.
| 벤치마크 | 실행 주체 | 결과 |
|---|---|---|
| LRAB-288 | 제작진 자체 구축 | 전체 점수 0.886, goose 0.631 / opencode 0.479 / agent-mini 0.405 |
| τ²-bench, 3개 도메인 | Sierra Research의 벤치마크를 제작진이 실행 | 소매 0.763 / 항공 0.740 / 통신 1.000 — 모든 도메인에서 1위 또는 공동 1위 |
| 프런티어 모델 조사 | 제작진 | 네 하네스에서 같은 호스팅 모델 사용: 0.997 / 0.989 / 0.925 / 0.478 |
| 제거 실험(v1.5.0 코드) | 제작진 | 방향성만 확인했으며, 단일 실행 셀의 분산이 각 메커니즘의 변화량보다 컸음 |
제작진이 강조하는 결과는 2B 모델 점수다. Mingbird는 0.821을 기록해 경쟁 하네스의 0.017–0.271보다 높았으며, 네 하네스 중 작은 모델에서 급격한 성능 하락이 나타나지 않은 유일한 하네스였다고 설명한다. 제작진은 2B가 내장 그래픽 노트북에서 편하게 실행할 수 있는 크기라고 덧붙였다. Holm 보정을 적용한 Wilcoxon 검정에서 2B와 12B의 세 경쟁 하네스 대비 차이는 유의했다. 차이가 유의하지 않은 비교, 즉 4B에서 goose와의 비교 및 35B에서 opencode와의 비교도 공개했다.
모델 계열 하나에 결과가 좌우되는지 확인하려고 두 번째 소형 모델인 qwen3.5:2b로 네 하네스 전체 행렬을 다시 실행했다. 같은 18개 작업과 점수 산정 방식을 사용했으며, 제작진은 작은 모델의 성능 하락이 재현됐다고 밝혔다. 점수는 Mingbird 0.779, 경쟁 하네스 0.017 / 0.096 / 0.239였고 자료 파일은 family_qwen352b_2609.csv다.
외부 벤치마크인 τ²-bench의 통신 도메인은 1.000 / 0.991 / 0.930으로 점수가 거의 포화 상태였다. 제작진은 해당 작업군이 반복적이며, τ² 어댑터의 반복 호출 방지 장치가 바로 이 실패 유형을 흡수한다고 설명한다.
프런티어 모델 조사에서는 네 하네스가 같은 호스팅 모델을 사용했다. 온도는 0, 사고 기능은 끈 상태였고, 로컬 심을 통해 실행했으며 하네스는 수정하지 않았다. 점수는 0.997 / 0.989 / 0.925 / 0.478이다. 제작진은 결함 있는 하네스가 측정된 모델 능력의 절반 이상을 가릴 수 있다고 해석한다. 다만 이를 좁은 범위에서 읽어야 한다고 밝힌다. 제대로 구성된 세 하네스의 점수 차이는 0.07 이내이며, 정상적인 하네스끼리 비교할 때는 여전히 모델이 더 큰 변수라는 설명이다. 셀별 점수는 benchmarks/frontier_probe/에 공개했다.
사고 기능을 켜거나 끄는 것도 하네스 수준의 변수이며, 경쟁 시스템의 점수가 최대 +0.69 변했다고 제작진은 밝혔다. 자세한 내용은 benchmarks/README.md에 있다. 전체 표와 유의성 검정, 셀별 원자료는 benchmarks/에 공개돼 있다. 288개 셀은 lrab_scores.csv에, τ²의 시행별 기록은 tau2/에 있다. benchmarks/reproduce_one.md의 절차를 따르면 한 대의 컴퓨터에서 셀 하나를 약 30분 안에 재현할 수 있다고 한다.
하드웨어와 설치
제작진은 예상치가 아니라 실제 기기에서 측정했다고 밝힌 하드웨어 범위를 제시한다.
| 등급 | 하드웨어 | 모델 | 사용 경험 |
|---|---|---|---|
| 입문형 | 내장 그래픽, RAM 16GB | 2–4B | 스트리밍 출력, Ollama 원시 속도와 비슷함 |
| 기본형 | 내장 그래픽 또는 보급형 외장 그래픽, RAM 32GB | 2–35B | 35B로 긴 작업을 처음부터 끝까지 실행 |
제작진에 따르면 Ollama가 실행되는 기기라면 Mingbird도 실행된다. 모델에 추가되는 것은 Mingbird 자체의 정적 사전 입력 텍스트뿐이다. 로컬 실행은 속도나 비용뿐 아니라 작업 디렉터리가 기기 밖으로 나갈 수 있는지를 결정하는 문제라고 설명한다.
Mingbird는 같은 엔진을 사용하는 네 가지 방식으로 실행할 수 있으며, 모든 방식은 세션과 스킬, MCP 서버, 설정을 공유한다.
- Windows 데스크톱: 최신 릴리스에서
Mingbird-…-EN-Setup.exe또는-CN-Setup.exe를 내려받는다. - Linux/macOS 데스크톱(실험 단계): 릴리스의 CI 빌드 tarball을 내려받고
sh install-unix.sh를 실행한다. - 소스에서 데스크톱 GUI 실행:
pip install -r requirements.txt를 실행한 뒤python agent_gui.py를 실행한다. - 실험 단계인 웹 UI:
pip install -r requirements.txt를 실행하고python webui/server.py를 실행한 뒤http://127.0.0.1:8765를 연다. 안내는 가이드에서 확인할 수 있다.
Windows에서 시작하려면 Ollama를 설치하고 모델을 내려받는다. 원문은 다음 명령을 제시한다.
ollama pull gemma4:e2b # small and fast
ollama pull qwen3.5:4b # 4B, the benchmark workhorse
그다음 최신 릴리스에서 -EN-Setup.exe(영어 UI) 또는 -CN(중국어 UI) 설치 파일을 받아 설치하면 바탕 화면에 바로 가기가 생긴다. 서명되지 않은 설치 프로그램은 Windows SmartScreen 경고를 표시할 수 있다. 이때 More info를 누르고 Run anyway를 선택하라고 안내한다. 프로그램을 실행한 뒤 모델을 고르고 작업을 맡기면 된다.
Linux와 macOS 패키지는 실험 단계의 CI 빌드다. 릴리스에서 linux-x64 또는 macos-arm64 tarball을 내려받아 압축을 풀고 sh install-unix.sh를 실행한다. 실행 파일은 ~/.local/share/Mingbird/LocalAgent에 생긴다. 해당 기기에 Ollama가 설치돼 있어야 한다.
소스에서 실행할 때는 GUI에 python agent_gui.py, 명령줄 인터페이스에 python ollama_agent.py --help를 사용한다. Python 3.12를 권장한다.
데이터 처리와 네트워크 연결
모델은 사용자의 기기에서 실행되므로 데이터를 업로드할 필요가 없다는 것이 제작진의 설명이다. 제작진은 이를 약속이 아니라 아키텍처에 관한 설명이라고 선을 긋는다. 계정 시스템, 원격 측정, 충돌 보고서, 업데이트 확인, 분석 기능은 없다고 밝혔다. 소스의 네트워크 호출을 모두 점검했으며, 순수 로컬 작업 중 루프백이 아닌 연결이 0개인 것도 확인했다고 주장한다. 아래 명령으로 직접 확인할 수 있다고 안내한다.
작업 디렉터리에는 현재 코드뿐 아니라 삭제한 키와 버려진 브랜치, 과거에 커밋했으나 잊은 내용이 담긴 .git 기록도 포함된다. 디렉터리가 기기 밖으로 나갈 수 있는지는 설정 문제가 아니라 아키텍처 문제이며, Mingbird에서는 추론이 로컬에서 이뤄지고 롤백 자료인 .bak와 .mingbird_trash/도 디스크를 벗어나지 않는다고 제작진은 설명한다. 작업 공간을 묶어 전송하거나 백그라운드에서 스냅샷을 만들거나 업로드하는 기능은 코드에 없다고 밝혔다.
v1.8.0부터 제공하는 오프라인 모드에서는 도구 모음의 🔒 버튼을 켠다. 에이전트는 로컬 모델만 사용하고 웹 도구와 URL 기반 MCP 서버는 프롬프트에 조립되지 않는다. 모델에 보이지 않는 도구는 호출할 수 없으며, 선택형 클라우드 제공자도 비활성화된다. 제작진은 정책에 의존하는 것이 아니라 구조적으로 외부 연결이 차단된다고 설명한다.
v1.8.2에서는 클라우드 모델 선택기를 추가했다. 🔒 버튼 옆에 도움말 버튼이 있는 클라우드 모델 입력란이 나타난다. 온라인 상태이고 클라우드 모델이 설정된 경우에만 선택할 수 있다. 클라우드 모델을 선택하면 로컬 모델 입력란이 비워지고, 그 반대도 마찬가지다. 대화 하나에는 모델 하나만 사용한다. 오프라인 모드에서는 입력란이 비활성화되며 클라우드 경로도 구조적으로 차단된다.
클라우드 설정은 최소화했다. 기본 설정 파일인 ~/.ollama_agent/config.json을 수정하고 OpenAI 호환 엔드포인트의 cloud 항목을 추가한다. 이식형 또는 격리 설치에서는 MINGBIRD_HOME 디렉터리를 사용한다.
"cloud": {
"enabled": true,
"base_url": "https://api.example.com/v1",
"api_key": "your-key",
"model": "model-name"
}
api_key는 로컬 config.json에만 저장되며 저장소나 로그, 원격 측정으로 전송되지 않는다고 제작진은 밝혔다. GUI를 다시 시작하고 클라우드 모델 입력란에서 모델을 선택해 사용한다.
순수 로컬 작업에서 연결을 확인하려면 다음 명령을 실행한다.
netstat -ano | findstr <pid> # <pid> = the agent's python process
제작진은 Ollama로 향하는 루프백(127.0.0.1) 연결만 보여야 하며 다른 연결은 없어야 한다고 안내한다. 웹 UI도 127.0.0.1에만 연결된다.
일반 온라인 모드에서 Mingbird가 네트워크에 접속하는 경우는 정확히 두 가지라고 제작진은 설명한다. 첫째, 모델이 웹 검색을 선택할 때다. 기본 검색 엔진은 Bing과 Baidu이며 설정을 바꿀 수 있고 검색어는 해당 엔진으로 전송된다. 둘째, 사용자가 직접 설정한 MCP 서버에 연결할 때다. 미리 설정된 서버나 번들 API 키는 없으며 그 밖의 네트워크 연결도 없다고 밝혔다. 세션과 설정은 ~/.ollama_agent에 저장된다.
안전 장치와 한계
Mingbird는 디스크의 파일을 읽고 쓰며 명령을 실행한다. 제작진은 작업 디렉터리를 신중하게 선택하라고 경고한다. 작은 모델이 충동적으로 프로그램을 지우거나 여러 항목을 한꺼번에 삭제하는 실패 사례가 실제로 관찰됐다며 5중 안전망을 마련했다고 설명한다.
| 안전망 | 동작 |
|---|---|
| 0 · 하위 에이전트 격리 | 병렬 하위 에이전트는 기본적으로 거부되며 주 에이전트보다 적은 권한만 갖는다. |
| 1 · 되돌릴 수 없는 작업 거부 | 디스크 포맷, diskpart, vssadmin delete shadows, 원시 장치에 쓰는 dd, wsl --unregister, dism, 드라이버 제거, userdel 등을 거부한다. |
| 2 · 동작별 권한 단계 | 소프트웨어 제거와 시스템 환경 변경은 사용자가 지켜보는 동안 매번 확인을 요구한다. 무인 상태에서는 기본적으로 거부하며, 허용하려면 AGENT_ALLOW_ENV_MUTATION=1을 설정한다. |
| 3 · 경계 확인 | 재귀 삭제는 작업 디렉터리 안에서만 허용한다. 범위를 벗어난 요청은 파일별로 처리할 수 있는 방법을 제시하며 거부한다. |
| 4 · 전반적인 롤백 | 쓰기 전에 .bak을 만들고 delete_file은 .mingbird_trash/로 이동한다. 기존 대용량 파일을 훨씬 짧은 내용으로 덮어쓸 때는 replace=true를 명시해야 한다. |
AGENT_UNSAFE=1을 설정하면 모든 안전망을 끌 수 있다. 제작진은 이를 사용자 책임으로 둔다.
제작진이 밝힌 한계는 다음과 같다.
- 2B 모델은 코드베이스 전체를 한 번에 다시 작성하지 못한다. 다만 일상적인 에이전트 작업 대부분을 처리하며, 할 수 없는 일은 조용히 실패하지 않고 오류를 드러낸다고 설명한다.
- 내장 그래픽에서 35B 모델로 작업을 끝까지 실행할 수 있지만 빠르지는 않다. 128K 문맥에서 약 26토큰/초다.
- Linux와 macOS 패키지는 실험 단계의 CI 빌드이며 Windows가 주 플랫폼이다.
- LRAB는 제작진이 직접 설계한 벤치마크다. 제작진은 작업과 점수 산정 코드, 셀별 원자료를 공개해 결과를 그대로 받아들이기보다 직접 재실행할 수 있다고 밝혔다.
벤치마크 재현 정보와 라이선스
공개된 LRAB 수치는 해당 결과를 만든 코드베이스와 백엔드, 데이터 수집 기간에 한해 재현할 수 있다. 제작진이 밝힌 기준은 다음과 같다.
| 항목 | 기준 |
|---|---|
| 공개 LRAB 수치의 코드베이스 | git 태그 v1.5.0, 커밋 1ee92d1 |
| 데이터 공개 커밋 | 61fc6aa |
| 수치가 처음 나타난 커밋 | 7c99941 |
| 백엔드 | Ollama 0.33.2 — 2026-08-28 이후 변경 없음. 바이너리 이름과 버전, SHA-256은 benchmarks/models.lock에 고정 |
| 데이터 수집 기간 | 09-01…04 · 09-13…14 · 09-18…20 · 09-22 |
일부 구성 요소는 v1.5.0 코드베이스보다 나중 작업 트리에서 만들어졌다. 제작진은 이 내용을 논문 부록에 공개하고 다음과 같이 다시 밝혔다.
- 프런티어 모델 조사: 2026-09-20, v1.7.0 이후 트리. 자료는
benchmarks/frontier_probe/에 있다. - 정적 사전 입력 비용 곡선: 2026-09-20, 같은 v1.7.0 이후 트리. 자료는
benchmarks/failure_forms/의cost_curve_data_2609.csv,make_fig9_costcurve.py,fig9_caption.md다. - 메커니즘 제거 실험 재실행: 2026-09-22, v1.8.2 시기의 트리. 자료는
benchmarks/ablation/에 있다.
경쟁 하네스는 고정된 바이너리가 아니라 계속 바뀌는 대상이다. 공개 수치에 사용한 버전은 goose 1.48.0, opencode 1.18.23, agent-mini 0.3.1이다. 수치는 위에 적힌 고정 수집 기간의 결과이며, 이후 각 하네스가 새 버전을 내면 별개의 실험이 된다. 재현하려면 명시된 버전과 benchmarks/README.md의 절차를 사용해야 한다.
코드는 Apache-2.0 라이선스로 자유롭게 사용, 수정, 배포할 수 있다. 저장소의 벤치마크 데이터는 별도인 CC BY 4.0 라이선스를 따르며, 제3자 구성 요소와 벤치마크는 THIRD_PARTY_NOTICES에 기재돼 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요