Ollama LLM로 코드도 쓰고, 바이너리도 뜯어보는 네이티브 IDE.NET·WASM·ELF 바이너리를 뜯어보는 리버스 엔지니어링 스위트(디컴파일러·디스어셈블러·스텝 디버거·라이브 디버깅). 태그라인 "Ollama cursor like coding / Reversing Interface"가 정확히 이 두 축이다.
이 문서는 "LibreCode를 쓰는 법"이 아니라, 로컬 LLM 에이전트 · 임베딩 RAG · 제로디펜던시 바이너리 파서를 어떻게 한 데스크톱 앱으로 설계하는가를 공부하기 위한 자료다 — Avalonia MVVM·상호운용·리버싱의 기술 밀도가 매우 높은 교재.
(저장소: re4/LibreCode · C# ~100% · .NET 10 + Avalonia · v1.1.0 · 커스텀 라이선스(소스공개이나 비(非)오픈소스) · New 2026 · TrendShift 오늘 Daily #1)
LibreCode는 "내 PC 안에서만 도는 로컬 LLM으로 코드를 짜고·고치고·설명받으면서, 동시에 컴파일된 바이너리(.NET DLL·WebAssembly·리눅스 ELF)를 디컴파일·디스어셈블·디버깅까지 할 수 있는 네이티브 데스크톱 IDE"다. 이름의 Libre는 "자유"(스페인·프랑스어)로, 클라우드·구독·계정 없이 전부 로컬에서 돌린다는 정체성을 담는다. 대부분의 AI 코딩 도구가 웹/Electron 기반인 것과 달리, LibreCode는 거의 전부 C#(80개 .cs 파일, 약 15,500줄)에 Avalonia 네이티브 UI라는 점이 첫 번째 이례성이다.
보통 AI 코딩 도구는 클라우드에 전화를 거는 비서다 — 내 코드를 서버로 보내 GPT·Claude에게 물어보고 답을 받아온다(Cursor·Copilot). LibreCode는 그 비서를 내 책상 서랍 안에 넣어버린다. Ollama로 받은 로컬 모델이 인터넷 없이 코드를 읽고 짜준다 — 코드가 기기를 절대 떠나지 않는다.
게다가 이 작업대에는 "기계를 분해하는 공구함"이 하나 더 딸려 있다. 남이 컴파일해 배포한 프로그램(.NET DLL, WASM 모듈, ELF 실행파일)을 역으로 소스에 가깝게 되돌려(디컴파일) 한 줄씩 실행해보며 뜯어보는 리버스 엔지니어링 기능이다. "코드를 만드는 AI"와 "코드를 해부하는 도구"가 한 창 안에 있는 셈.
127.0.0.1:11434에 HTTP 서버를 띄우고, 앱은 여기에 "이 코드 설명해줘" 같은 요청을 보낸다. LibreCode의 모든 AI 기능은 이 로컬 Ollama 서버 한 곳에만 말을 건다 — 그래서 인터넷·API 키·구독이 필요 없다.ICSharpCode.Decompiler)을 재사용한다.2026년 개발자 트렌드의 두 축은 ①로컬·프라이버시 우선 AI와 ②AI 코딩 에이전트다. LibreCode는 이 둘을 합치고, 거기에 "바이너리를 뜯어보는 리버싱 도구"라는 세 번째 축까지 한 네이티브 앱에 얹었다. "로컬 AI IDE"는 이제 여럿 있지만, 진지한 멀티포맷 리버스 엔지니어링 스위트를 함께 내장한 사례는 거의 없다 — 이 희소성이 X·해커뉴스에서 화제가 되며 TrendShift Daily 최상위로 밀어올렸다. (TrendShift의 굵은 숫자는 별 수가 아니라 사회적 언급 모멘텀이다.)
Cursor·Copilot은 코드를 클라우드로 보낸다. LibreCode는 Ollama 로컬 모델에만 말을 걸어, 텔레메트리·계정·구독이 전혀 없다. 소스에서 확인되는 유일한 외부 접속은 로컬 127.0.0.1과, 모델을 고르기 위한 ollama.com/library(공식 모델 마켓플레이스) 스크래핑뿐이다. 회사 코드처럼 밖으로 내보낼 수 없는 코드베이스에 특히 매력적.
VS Code·Cursor·Windsurf는 전부 Electron/웹뷰(브라우저를 통째로 안고 도는 구조)다. LibreCode는 Avalonia 네이티브 렌더링이라 시작이 빠르고 메모리가 가볍다. "웹 기술 없이 순수 C#으로 IDE급 데스크톱 앱을 어떻게 짜나"의 실전 예시.
단순 뷰어가 아니다. OLLVM 난독화 해제(제어흐름 평탄화·불투명 술어 탐지), WASM 라이브 스텝 인터프리터, Chrome DevTools Protocol로 실행 중인 WASM을 라이브 디버깅, 안티디버그 스캐너까지 — Ghidra/dnSpy에 가까운 고급 기능을 AI 코드 에디터와 한 창에 통합했다는 점이 개발자들의 호기심을 자극한다.
2026년에 새로 등장한 프로젝트인데도, 코드가 Features/ 기능별 수직 슬라이스 + 공유 Services/ + MVVM으로 잘 정리돼 있다. "AI 도구 하나를 실제로 어떻게 조립하나"(DI 컨테이너·에이전트 툴 루프·임베딩 RAG·명령 샌드박스)를 실물 코드로 볼 수 있어, 완제품보다 "AI IDE 아키텍처 학습 자료"로서 값지다.
| 비교 축 | LibreCode | Cursor / Windsurf | Cline / Continue |
|---|---|---|---|
| 실행 형태 | 네이티브 Avalonia 단독 앱 | Electron 단독 앱 | VS Code 확장 |
| 모델 | 완전 로컬(Ollama) | 주로 클라우드 API | 클라우드/로컬 혼용 |
| 프라이버시 | 코드가 기기를 안 떠남 | 서버 전송 | 설정에 따라 |
| 리버싱 도구 | 내장(.NET/WASM/ELF) | 없음 | 없음 |
| 구현 언어 | C# / .NET 10 | TS / 웹 | TS |
로컬 모델은 내 GPU/RAM 성능이 곧 모델 성능이다. GPT-5·Claude 같은 최상위 모델은 수백 GB VRAM이 필요해 개인 PC에서 못 돌린다. LibreCode의 기본 모델도 27B~35B급이라 강력한 GPU 또는 대용량 RAM을 요구한다(뒤 §7). 즉 로컬의 대가는 "프라이버시·무료·오프라인"을 얻는 대신 "최상위 품질·가벼운 기기"를 일부 포기하는 것 — LibreCode는 이 트레이드오프의 로컬 쪽 극단을 택한 도구다.
LibreCode는 단일 .NET 프로젝트다. LibreCode.csproj가 타깃을 net10.0, 출력을 WinExe, PlatformTarget을 x64로 고정하고 Nullable·ImplicitUsings를 켠다. 버전은 <Version>1.1.0</Version>. 구성은 80개 .cs(약 15,493줄) + 37개 .axaml(Avalonia XAML 뷰) + json/md 소수로, 사실상 C# 100%다.
README의 "Tech Stack" 표는 Avalonia 11.3이라고 적혀 있으나, 실제 LibreCode.csproj는 12.0.4로 핀돼 있다. 문서(README)가 소스보다 낡은 전형적 사례다 — 이 딥다이브의 수치는 전부 클론한 소스 기준이다.
| 영역 | 패키지 (버전) | 역할 |
|---|---|---|
| UI 프레임워크 | Avalonia · Desktop · Themes.Fluent · Fonts.Inter 12.0.4 | 크로스플랫폼 네이티브 데스크톱 UI(웹뷰 없음) |
| 데이터 그리드 | Avalonia.Controls.DataGrid 12.0.0 | 심볼·바이트·분석 결과 테이블 표시 |
| 코드 에디터 | AvaloniaEdit 12.0.0 + AvaloniaEdit.TextMate 12.0.0 | 구문 강조 코드 편집기 위젯 |
| 문법 강조 | TextMateSharp.Grammars 2.* | Dark+ 테마 · 25+ 언어 TextMate 문법 |
| 통합 터미널 | Iciclecreek.Avalonia.Terminal 2.0.3 | 앱 내장 터미널(XTerm.NET + Porta.Pty) |
| 영역 | 패키지 (버전) | 역할 / 왜 골랐나 |
|---|---|---|
| 디컴파일러 | ICSharpCode.Decompiler 10.1.0.8386 | .NET IL → C# 복원. ILSpy/dnSpy와 같은 엔진 |
| 디스어셈블러 | Iced 1.21.0 | x86/x86-64 기계어 ↔ 어셈블리(ELF 분석·진단) |
| MVVM | CommunityToolkit.Mvvm 8.* | [ObservableProperty]·[RelayCommand] 소스생성 |
| DI · 설정 · HTTP · 로깅 | Microsoft.Extensions.* 10.* (DI·Configuration·Http·Logging) | 서비스 컨테이너 · appsettings.json 바인딩 · Ollama HTTP |
| PE 분석 | System.Reflection.Metadata (BCL 내장) | .NET 어셈블리 메타데이터 파싱 |
| 리눅스 통합 | Tmds.DBus.Protocol 0.94.1 | 리눅스 데스크톱 D-Bus 연동 |
| Windows GPU 조회 | System.Management 10.* (조건부) | WMI로 VRAM 감지(모델 자동선택용) |
주목할 점: WASM/ELF 파서는 외부 라이브러리가 아니라 자체 제로디펜던시 구현이다. .NET 바이너리는 BCL의 System.Reflection.Metadata로, x86 디스어셈블은 Iced로 처리하지만, WebAssembly 바이트코드 파싱·스텝 인터프리터와 ELF 헤더 파서는 직접 손으로 짰다. "라이브러리에 기대지 않고 바이너리 포맷을 스스로 해석하는 코드"를 통째로 읽을 수 있다는 뜻이라, 학습 가치가 크다.
ILSpy와 dnSpy가 바로 이걸 쓴다 — LibreCode는 바퀴를 다시 만들지 않고 검증된 엔진을 재사용한다. Iced는 .NET에서 가장 널리 쓰이는 x86/x64 디스어셈블러로, 기계어 바이트(48 8B 04 25 …)를 사람이 읽는 어셈블리(mov rax, ...)로 바꾼다. LibreCode에서는 ELF 코드 섹션 분석과 OLLVM 난독화 탐지의 제어흐름 그래프(CFG) 재구성에 쓴다.이 섹션의 첫 문장만 기억해도 이 레포의 절반은 이해한 것이다: LibreCode = "MVVM UI 껍데기 + DI로 묶인 서비스 다발"이고, 그 서비스 다발이 ①LLM 대화(RAG 주입) · ②자율 에이전트(툴 루프) · ③바이너리 분석(리버싱) · ④모델 마켓플레이스로 갈라진다. 모든 AI 요청은 결국 OllamaClient 하나를 통과해 로컬 127.0.0.1:11434로 나간다.
App.axaml.cs의 ConfigureServices()가 앱의 배선도다. OllamaClient를 typed HttpClient로 등록하되, LLM 스트리밍이 오래 걸릴 수 있으니 Timeout을 InfiniteTimeSpan으로, 로컬 접속이라 UseProxy=false로 설정한다. 나머지 15개 서비스(ChatService·AgentOrchestrator·CodebaseIndexer·FileSystemService…)를 전부 싱글톤으로 넣고, 화면 상태는 MainViewModel.cs(447줄) 한 곳에 모은다.
// App.axaml.cs — DI 컨테이너에 서비스 배선 (개념 발췌)
services.AddHttpClient<OllamaClient>(c => {
c.BaseAddress = new Uri("http://127.0.0.1:11434");
c.Timeout = Timeout.InfiniteTimeSpan; // 스트리밍 응답은 끊지 않음
}).ConfigurePrimaryHttpMessageHandler(() =>
new SocketsHttpHandler { UseProxy = false }); // 로컬이라 프록시 우회
services.AddSingleton<ChatService>();
services.AddSingleton<AgentOrchestrator>();
services.AddSingleton<CodebaseIndexer>();
// ... 총 15개 서비스 싱글톤 등록 → MainViewModel이 주입받아 중앙 상태로
.axaml)과 로직·상태(ViewModel)를 데이터 바인딩으로 느슨하게 잇는 UI 패턴. DI(의존성 주입): "이 서비스가 필요해"라고 선언만 하면 컨테이너가 알아서 만들어 넣어준다 — 객체를 직접 new하지 않아 테스트·교체가 쉽다. typed HttpClient: OllamaClient를 HttpClient로 등록해 커넥션 풀·수명 관리를 .NET에 맡기는 관용 패턴.Features/Agent/AgentOrchestrator.cs(320줄)가 에이전트의 심장이다. LLM은 글만 쓸 뿐 파일을 읽거나 명령을 실행할 수 없다. 그래서 이 오케스트레이터가 "LLM 응답 → 툴 호출 파싱 → 툴 실행 → 결과를 다시 LLM에 전달"을 반복한다. 폭주를 막기 위해 최대 15회로 상한을 두고, 응답을 토큰 단위로 스트리밍하며, ParseToolCall()이 XML 태그(<tool>...</tool><args>{...}</args>)를 파싱한다.
// AgentOrchestrator.cs — 파싱된 툴 이름으로 5개 툴 디스패치 (실제 발췌)
return toolCall.Name.ToLowerInvariant() switch {
"read_file" => await FileReadTool.ExecuteAsync(...),
"write_file" => await FileWriteTool.ExecuteAsync(...),
"search_files" => SearchTool.Execute(...),
"run_command" => await ShellTool.ExecuteAsync(...), // ← 샌드박스(4-4)
"list_files" => SearchTool.ListDirectory(...),
_ => $"Unknown tool: {toolCall.Name}"
};
루프 상한 for (var i = 0; i < 15; i++)은 작지만 중요한 안전장치다 — LLM이 툴을 무한히 부르며 맴도는 것을 막는다. 새 능력을 추가하려면 툴 클래스 하나 + switch 한 줄만 늘리면 된다.
로컬 모델은 내 프로젝트 전체를 알지 못한다. 그래서 Features/Context/CodebaseIndexer.cs(272줄)가 파일들을 잘게 쪼개(청킹) nomic-embed-text 모델로 임베딩(의미를 담은 숫자 벡터)하고, EmbeddingStore.cs(205줄)가 이를 인메모리 벡터 스토어에 담는다. 질문이 오면 ChatService.cs(269줄)가 선택 코드 + 현재 열린 파일 + 관련도 top-3 청크를 골라 프롬프트에 끼워 넣는다(RAG).
두 벡터의 의미 유사도는 보통 코사인 유사도로 잰다(각도가 작을수록 유사). 그런데 벡터를 미리 길이 1로 정규화해두면 코사인 유사도가 그냥 내적(dot product)으로 단순해진다. LibreCode는 이 점을 이용해 System.Numerics.Vector.Dot(query, chunk.Embedding)로 SIMD(한 번에 여러 숫자 동시 계산) 가속을 건다. "수학적 성질을 이용해 계산을 싸게 만드는" 최적화의 교과서 사례.
에이전트가 run_command 툴로 셸 명령을 실행하는 건 강력하지만 위험하다. LLM이 rm -rf / 같은 명령을 만들어낼 수도 있기 때문이다. Features/Agent/Tools/ShellTool.cs(149줄)는 이를 방어적으로 막는다 — 이 레포에서 "안전 설계"를 배우기 가장 좋은 파일이다.
이 설계는 멀웨어와 정반대다 — 오히려 "자율 에이전트에게 셸을 쥐여줄 때 어떤 가드레일이 필요한가"의 실전 체크리스트에 가깝다. 다만 블록리스트 방식은 본질적으로 완전할 수 없으니(뒤 §6 주의), 이 파일을 읽을 때 "무엇을 빠뜨릴 수 있나"를 같이 생각해보면 좋다.
Features/Reversing/가 이 레포에서 가장 무겁고 독창적인 영역이다. 외부 라이브러리 없이 바이너리 포맷을 직접 파싱·해석하는 코드가 여기 모여 있다.
| 파일 | 줄수 | 무엇을 하나 |
|---|---|---|
| WasmAnalysisService.cs | 1,675 | 자체 WASM 파서 + 약 200개 opcode 스텝 인터프리터(WASM을 한 명령씩 실제로 실행) |
| AssemblyAnalysisService.cs | 1,654 | ICSharpCode.Decompiler 래핑 + IL 스텝 디버거 + PE 인스펙터 |
| ElfAnalysisService.cs | 1,179 | 제로디펜던시 ELF 파서 + Iced로 x86/64 디스어셈블(그 외 아키텍처는 hex 덤프) |
| CdpDebugService.cs | 605 | System.Net.WebSockets로 Chrome DevTools Protocol → 실행 중 WASM 라이브 디버깅 |
| OllvmDeobfuscator.cs | 529 | Iced로 CFG 재구성 + OLLVM 난독화 3종(제어흐름 평탄화·불투명 술어·명령 치환) 휴리스틱 탐지 |
보통 앱은 WASM/ELF 파싱을 라이브러리에 맡기고 내부는 블랙박스로 둔다. LibreCode는 이 파서를 직접 손으로 짰기 때문에, "바이너리 파일의 헤더가 어떻게 생겼고, 바이트코드가 어떻게 명령으로 해석되는가"를 남의 소스로 통째로 읽을 수 있다. 리버싱·컴파일러·바이너리 포맷을 공부하는 사람에게 이만한 실물 교재가 드물다.
구조를 읽는 요령: 구성 철학은 "기능은 세로로, 공용은 가로로"다. 하나의 기능(예: 에이전트)에 필요한 모델·서비스·툴을 Features/Agent/ 한 폴더에 모으고(수직 슬라이스), 여러 기능이 함께 쓰는 파일 I/O·Ollama 클라이언트는 Services/에 둔다. 처음 읽는다면 별표(★) 다섯 곳부터 — App.axaml.cs(배선) → Services/Ollama/(모든 AI의 관문) → Features/Agent/·Features/Context/(에이전트·RAG) → Features/Reversing/(리버싱) 순.
| 정독 우선순위 | 파일 | 배우는 것 |
|---|---|---|
| ★★★ | App.axaml.cs | DI로 앱 전체를 조립하는 배선도 — 큰 그림 |
| ★★★ | Services/Ollama/OllamaClient.cs (421) | 로컬 LLM HTTP 클라이언트 · 스트리밍 · 서버 자동 기동 |
| ★★★ | Features/Agent/AgentOrchestrator.cs (320) | 툴-유즈 루프(15회 상한 · XML 툴콜 파싱 · switch 디스패치) |
| ★★ | Features/Context/CodebaseIndexer.cs · EmbeddingStore.cs (272·205) | 임베딩 RAG + SIMD 코사인 검색 |
| ★★ | Features/Agent/Tools/ShellTool.cs (149) | 블록리스트 샌드박스 — "에이전트 안전 설계" |
| ★ | Features/Reversing/WasmAnalysisService.cs (1675) | 제로디펜던시 WASM 파서 + ~200 opcode 인터프리터 |
ConfigureServices() 한 곳에서 typed HttpClient·싱글톤 서비스·설정 바인딩을 배선하는 패턴은 모든 규모 있는 .NET 앱의 기본기다. "객체를 직접 new하지 않고 필요를 선언만 하면 컨테이너가 채워준다"는 감각을 실물 코드로 익힐 수 있다. ASP.NET·MAUI·콘솔 어디서나 그대로 쓰이는 보편 기술.
"LLM 응답 → 툴 호출 파싱 → 실행 → 결과 재주입"의 루프에 반복 상한(15회) · 스트리밍 · switch 디스패치 · 샌드박스를 얹는 구조는, 2026년 AI 도구의 핵심 패턴이다. LibreCode는 이걸 군더더기 없이 320줄로 보여준다 — LangChain 같은 프레임워크의 내부에서 실제로 무슨 일이 벌어지는지 이해하는 데 최고의 축소 모델.
Pinecone·Chroma 같은 외부 벡터 DB 없이, 인메모리 배열 + 정규화 + SIMD 내적만으로 코드베이스 검색을 구현했다. "RAG가 마법이 아니라 (임베딩 → 저장 → 유사도 검색 → 프롬프트 주입)의 조립"임을 코드로 깨닫게 한다. 수학적 성질(정규화→내적)로 계산을 싸게 만드는 최적화 감각도 덤.
ShellTool의 블록리스트 + 정규식 + 디렉토리 고정 + 타임아웃은, "AI에게 실행 권한을 줄 때 최소한 무엇을 막아야 하나"의 체크리스트다. 동시에 "블록리스트는 왜 근본적으로 불완전한가"(우회 가능성)를 고민하는 출발점이기도 하다. 보안·에이전트를 다루는 사람에게 필수 사고 훈련.
WASM 스텝 인터프리터·ELF 파서·OLLVM 역난독화는 컴파일러/리버싱의 살아있는 교재다. "바이트 배열이 어떻게 명령이 되고, 명령이 어떻게 제어흐름 그래프가 되는가"를 남의 소스로 통독할 수 있다. AOT·인터프리터·정적분석에 관심 있다면 여기가 보물창고.
README는 "free, open-source"라고 말하지만, LICENSE.md는 실제로 재배포·판매·서브라이선스를 금지하고, 포크는 오직 원본 리포에 기여(PR)할 목적만 허용하며, 모든 기여물의 저작권을 원저자에게 양도(CLA.md도 완전 양도)하도록 요구한다. SaaS 제공 금지, 위반 시 즉시 라이선스 종료 + 사본 파기 의무. 즉 OSI 정의의 오픈소스가 아니라 source-available(소스 공개형) 독점 라이선스다. 자유롭게 포크·재배포할 수 없으니 공부용으로 읽되 이 점을 분명히 알고 봐야 한다.
appsettings.json의 기본값이 AutoPullDefaultModel: true이고, 기본 모델이 커뮤니티 파인튜닝 "uncensored/aggressive" 계열(예: ...qwen3.6-27B-uncensored... / 저VRAM은 ...35B-A3B-Uncensored...:IQ2_M)로 설정돼 있다. 즉 첫 실행에서 안전장치가 제거된 수십 GB 모델을 자동으로 내려받는다. README 예시는 무해한 llama3.2를 보여주지만 실제 배포 기본값은 다르다 — 불법은 아니나 학습자가 반드시 인지하고, 원하면 appsettings.json에서 모델을 바꿔야 한다.
Stealth 탭은 Harmony 패치로 Debugger.IsAttached를 false로 강제하는 등 안티디버그 우회를 생성한다. 이는 멀웨어 분석·보안 연구에서 표준적인(합법적) 기법이지만, 본인이 소유했거나 분석 권한이 있는 바이너리에만 써야 한다. 남의 상용 소프트웨어에 적용하면 라이선스·법 위반이 될 수 있다.
| 항목 | 요구사항 |
|---|---|
| 빌드 도구 | .NET 10 SDK (net10.0 타깃) |
| AI 기능 전제 | 로컬 Ollama 설치·실행 (OllamaClient가 자동 기동 시도) |
| OS | Windows / Linux / macOS (네이티브 Avalonia). 단 x64 전용(PlatformTarget x64) |
| GPU 감지 | Windows 전용 — GpuDetectionService가 DXGI + WMI 사용. 비Windows는 VramGb=0 반환 → 모델 자동선택이 Windows에 최적화 |
| VRAM / 모델 | GPU 필수는 아니나(Ollama는 CPU 가능) VRAM이 모델을 좌우. LargeModelVramThresholdGb: 20.0 기준 — 20GB↑이면 27B, 미만이면 35B-A3B(IQ2_M 양자화) 자동 선택 |
| 현실 권장 | 기본 모델이 27B~35B급이라 강력한 GPU(≥20GB VRAM) 또는 대용량 RAM 권장. 사양이 낮으면 Ollama에서 더 작은 모델로 교체 |
| 빌드 방법 | git clone → LibreCode.slnx 열기 → dotnet build 또는 dotnet run |
현실 점검: "가벼운 노트북에서 최고급 AI 코딩을 하고 싶다"면 이 도구는 기대와 다를 수 있다 — 품질은 내 기기가 돌릴 수 있는 로컬 모델의 크기에 묶인다. 반면 "코드를 밖으로 내보내지 않으면서 오프라인으로 AI 도움을 받고, 겸사겸사 바이너리도 뜯어보고 싶다"면 정확히 이 도구의 자리다.
레포를 git clone --depth 1로 받아, App.axaml.cs의 ConfigureServices() → OllamaClient.cs → AgentOrchestrator.cs 순으로 읽으며, 4-0의 ASCII 흐름이 어느 코드 줄에 대응하는지 표시해보라. "DI 배선 → 로컬 LLM 관문 → 에이전트 루프"의 큰 그림을 몸에 새기는 연습.
파이썬이나 C#으로, 문장 몇 개를 임베딩(무료 nomic-embed-text나 sentence-transformers)한 뒤 정규화 → 내적으로 질의와 가장 가까운 top-3을 찾는 30줄짜리 검색기를 짜보라. 정규화한 벡터의 내적이 왜 코사인 유사도와 같아지는지 손으로 확인하면, 4-3의 SIMD 최적화가 왜 성립하는지 이해된다.
로컬 Ollama(또는 아무 LLM API)에 붙여, 응답에서 <tool>read_file</tool> 같은 태그를 파싱해 실제 파일을 읽어 결과를 다시 넣는 루프를 반복 상한 5회로 만들어보라. LibreCode의 AgentOrchestrator를 축소 재현한 것 — "LLM에게 손발을 다는" 원리가 손에 잡힌다.
ShellTool처럼 블록리스트 + 정규식으로 위험 명령을 막는 미니 실행기를 만든 뒤, 스스로 그것을 우회해보라(예: 대소문자·공백·인코딩·별칭). 블록리스트가 왜 근본적으로 불완전한지 체감하고, "허용 목록(allowlist)이 더 안전한 이유"를 스스로 도출하는 과제.
간단한 .wasm(또는 리눅스 ELF) 파일 하나를 골라, 매직 넘버·섹션(또는 프로그램 헤더) 목록을 출력하는 100줄 파서를 짜보라. LibreCode의 WasmAnalysisService.cs/ElfAnalysisService.cs를 참고. "바이너리가 어떻게 구조화돼 있는가"를 손으로 체험하는, 리버싱 세계의 첫 관문.
| 주차 | 주제 | 학습 내용 |
|---|---|---|
| 1주차 | Avalonia + MVVM + DI | Avalonia XAML·데이터 바인딩, MVVM(ViewModel·Command), Microsoft.Extensions.DependencyInjection 컨테이너·typed HttpClient. App.axaml.cs·MainViewModel.cs 읽기 + 과제 1. |
| 2주차 | 로컬 LLM & 에이전트 | Ollama API(생성·임베딩·스트리밍), 툴-유즈 루프, 반복 상한·프롬프트 설계. OllamaClient.cs·AgentOrchestrator.cs 정독 + 과제 3. |
| 3주차 | 임베딩 & RAG | 임베딩 벡터, 코사인 유사도↔내적, 정규화·SIMD, 청킹·컨텍스트 주입 전략. CodebaseIndexer.cs·EmbeddingStore.cs + 과제 2. |
| 4주차 | 리버싱 & 바이너리 포맷 | WASM/ELF 포맷, 디스어셈블(Iced)·디컴파일(ICSharpCode), CFG·OLLVM 역난독화, CDP 라이브 디버깅. Reversing/ 서비스 훑기 + 과제 5. |
먼저 앱이 어떻게 조립되는지(1주차)를 잡아라 — 이게 되면 "그 안에 꽂힌 서비스들이 무슨 일을 하나"(LLM·에이전트·RAG)가 자연스럽게 이어진다. 리버싱(4주차)은 가장 무겁고 독립적이라 맨 뒤로 미뤄도 된다. AI 도구 쪽에만 관심 있다면 4주차는 건너뛰어도 1~3주차만으로 "로컬 AI IDE의 설계"를 완주할 수 있다.
같은 문제를 다르게 푼 도구들과 나란히 놓으면 시야가 넓어진다. Cline / Continue(VS Code 확장, TS)는 "에이전트 툴 루프"를 웹 스택으로 구현한 참고서이고, Ollama 자체는 LibreCode가 기대는 로컬 런타임이라 그 API 문서를 함께 보면 좋다. 리버싱 쪽은 dnSpy / ILSpy(LibreCode와 같은 디컴파일 엔진)와 Ghidra(정통 RE 스위트)를 곁들이면, "AI 코드 에디터에 리버싱을 합친다"는 LibreCode의 선택이 얼마나 독특한지 실감난다.
127.0.0.1:11434에 HTTP 서버를 띄운다. LibreCode의 모든 AI 기능이 여기에만 말을 건다(인터넷·API키 불요)..axaml)과 상태·로직(ViewModel)을 데이터 바인딩으로 잇는 패턴.new하지 않고 "선언"하면 컨테이너가 만들어 넣어주는 방식. typed HttpClient는 API 클라이언트를 HttpClient로 등록해 커넥션 수명을 .NET에 맡기는 관용법.Vector.Dot로 SIMD 가속해 유사도 검색을 빠르게 한다.ICSharpCode.Decompiler 엔진으로 .NET IL을 C#으로 복원한다.| 구분 | 링크 / 위치 |
|---|---|
| GitHub 저장소 | github.com/re4/LibreCode |
| TrendShift | trendshift.io/repositories/80315 |
| 핵심 파일 | LibreCode/App.axaml.cs (DI 배선) |
| 핵심 파일 | LibreCode/Services/Ollama/OllamaClient.cs (로컬 LLM 관문) |
| 핵심 파일 | LibreCode/Features/Agent/AgentOrchestrator.cs · Tools/ShellTool.cs (에이전트 루프·샌드박스) |
| 핵심 파일 | LibreCode/Features/Context/CodebaseIndexer.cs · EmbeddingStore.cs (RAG) |
| 핵심 파일 | LibreCode/Features/Reversing/WasmAnalysisService.cs · ElfAnalysisService.cs · CdpDebugService.cs |
| 이웃 프로젝트 | Cline · Continue(에이전트·TS) · Ollama(로컬 런타임) · dnSpy · ILSpy · Ghidra(리버싱) |
| 연관 개념 | Avalonia/MVVM · DI · LLM 에이전트 · 임베딩 RAG · WASM/ELF · 디컴파일/디스어셈블 |