내 컴퓨터를 제어하는 AI를 만들었다. 그러다 이것이 무엇을 더 할 수 있는지 깨달았다.
요약
개인용 로컬 AI 에이전트인 Forge-AI 개발 과정을 다룹니다. 클라우드 의존성과 데이터 보안 문제를 해결하기 위해 로컬 모델과 FastAPI, LangGraph를 활용하여 사용자의 하드웨어와 네트워크를 직접 제어하는 자동화 시스템을 구축했습니다.
핵심 포인트
- 클라우드 API 제한과 데이터 프라이버시 문제를 해결하는 로컬 AI 에이전트 구축
- LangGraph와 FastAPI를 활용한 에이전트 루프 및 백엔드 아키텍처 설계
- Ollama와 로컬 오픈 웨이트 모델을 통한 데이터 외부 유출 방지
- 라우터 제어 및 네트워크 관리 등 실제 환경 실행 능력 구현
내 컴퓨터를 제어하는 AI를 만들었다. 그러다 이것이 무엇을 더 할 수 있는지 깨달았다.
Christopher Adams 작성
라우터(router)를 다루던 순간, 모든 것이 명확해졌다.
나는 몇 달 동안 Forge-AI를 개발해 왔다. 이는 내 개인 하드웨어에서 실행되고, 내 파일과 대화하며, 내 도구들을 사용하고, 그 누구에게도 데이터를 전송하지 않는 개인용 AI 에이전트(AI agent)다. 구독료도 없다. 클라우드 의존성도 없다. 프로젝트 도중에 나를 가로막는 API 속도 제한(rate limits)도 없다. 오직 로컬 모델(local model), FastAPI 백엔드, 그리고 내가 직접 구축해 온 점점 늘어나는 기능 스택만이 존재할 뿐이다.
라우터 오케스트레이션(orchestration) 모듈이 마지막 주요 조각이었다. 나는 WiFi 네트워크를 관리하고, 방화벽 규칙을 설정하며, VPN 연결을 교체하기 위한 JSON-RPC 호출을 작성하고 있었다. 이 모든 것은 내 홈 라우터에 있는 OpenWrt 인스턴스와 통신한다. 유용한 작업이다. AI 어시스턴트를 단순한 챗봇(chatbot)에서 실제로 사용자의 환경을 실행하는 무언가로 탈바꿈시키는 종류의 작업 말이다.
결국 1,086줄이 된 라우터 코드 중 800줄 근처 어딘가에서, 한 가지 생각이 떠올랐다. 공포 영화 같은 생각은 아니었다. 공상 과학도 아니었다. 개발자로서의 생각 — 무더운 날 마시는 시원한 음료처럼 가슴에 와닿는 깔끔한 엔지니어링적 관찰이었다.
잠깐. 외부에서 볼 때 이 녀석은 어떤 모습일까?
내가 이것을 만든 이유
잠시 시간을 되돌려보자.
나는 클라우드 AI와 싸우는 것에 지쳤다. 모델 자체를 말하는 것이 아니다. 모델들은 인상적이며 빠르게 발전하고 있다. 나는 모델을 둘러싼 제약 사항들에 지쳤다. 많은 문서를 처리해야 할 때 발생하는 속도 제한(rate limits). 코드를 '설명'할 수는 있지만 실제로 만질 수는 없는 어시스턴트들. 내가 무엇을 로그(log)로 남기고 있는지, 무엇이 학습에 사용될지, 내 전문적인 작업물을 타인의 API 엔드포인트(endpoint)에 붙여넣었을 때 어떤 일이 벌어질지에 대한 지속적이고 낮은 수준의 불안감 말이다.
나는 내 기기에서 살아가는 AI를 원했다. 나와 동일한 것들 — 내 파일, 내 브라우저, 내 터미널(terminal) — 에 접근할 수 있고, 내가 지난주에 말한 것을 기억하는 AI 말이다. 단순히 제안만 하는 것이 아니라, 내가 설계한 자동화(automations)를 실행할 수 있는 AI. 우리가 실제로 함께 작업하며 배우는 과정을 통해 시간이 지날수록 더 나아지는 AI 말이다.
그래서 나는 Forge-AI를 만들었다.
내가 프로젝트 개요(project brief)에 작성한 장기적인 비전은 이를 "Android의 Tasker와 정신적으로 유사한 로컬 AI 운영 레이어"라고 설명한다. 즉, 사용자가 직접 설계하고, 트리거(trigger)하고, 체인(chain)으로 연결하며, 공유할 수 있는 재사용 가능한 자동화 모듈이다. 하지만 어디선가는 시작해야 했고, 나는 기초부터 시작했다. 즉, 실제로 무언가를 수행할 수 있는 유능한 범용 에이전트(general-purpose agent)를 만드는 것부터 시작했다.
내가 정착한 아키텍처는 LangGraph 에이전트 루프를 호스팅하는 FastAPI 백엔드를 갖추고 있다. 사용자가 메시지를 보내면, 에이전트는 시스템 프롬프트(system prompt), SQLite에 저장된 세션 히스토리(session history), 그리고 BGE-M3 임베딩(embeddings)을 사용해 LanceDB를 통해 인덱싱된 문서로부터 검색(retrieval)한 컨텍스트(context)를 조립한다. 에이전트는 Ollama를 통해 로컬 오픈 웨이트 모델(open-weight model)을 호출하며, 그 어떤 데이터도 사용자의 기기를 벗어나지 않는다. 모델이 행동을 취해야 할 때, 에이전트는 11개의 서버로 구성된 MCP (Model Context Protocol) 레이어로 도구 호출(tool calls)을 전달하며, 여기서 각 기능 도메인은 각각의 전용 로컬 포트(port)에서 실행된다.
이 11개의 서버가 하는 일은 다음과 같다:
| 서버 | 포트 | 기능 |
|---|---|---|
browser_server.py | :8010 | Playwright 브라우저 자동화 — 탐색, 클릭, 타이핑, 스크린샷, 페이지 콘텐츠 추출 |
| ... |
내가 에이전트를 위해 작성한 시스템 프롬프트는 명확하게 명시한다: "당신은 사용자와 동일한 권한을 가지고 로컬에서 실행됩니다."
이 한 문장이 매우 중요한 역할을 한다.
작동 방식
나는 구체적으로 말하고 싶다. 왜냐하면 "컴퓨터를 제어하는 AI 에이전트"라는 표현은 실제 능력의 범위를 과소평가할 정도로 추상적이기 때문이다.
브라우저 서버는 어떤 URL로든 이동할 수 있고, 어떤 양식이든 채울 수 있으며, 화면에 보이는 것을 스크린샷으로 찍고 페이지 콘텐츠를 추출할 수 있다. 여기에는 뱅킹 세션이 포함된다. 이메일도 포함된다. 비밀번호 관리자의 마스킹(masking) 레이어에 도달하기 전 브라우저에 렌더링되는 모든 것이 포함된다.
스크린 서버는 디스플레이를 캡처하고 키보드와 마우스를 제어한다. 당신이 손으로 할 수 있는 모든 것을 프로그램 방식으로 수행할 수 있다. 화면에 나타나는 OTP 코드를 읽는 것부터, 클립보드(clipboard) 내용을 감시하는 것, 그리고 디스크에 기록되지는 않지만 화면에 표시되는 정보를 캡처하는 것까지 모두 포함된다.
터미널 서버는 PowerShell, CMD, WSL, Bash와 같은 나의 전체 OS 권한을 가진 셸 명령(shell commands)을 120초의 타임아웃(timeout)과 함께 실행하며, LLM 계층에서 제공하는 것 외에는 별도의 콘텐츠 필터링(content filtering)이 없다. 운영자의 권한을 가진 터미널 접근은 모든 에이전트 스택(agent stack)에서 가장 위험도가 높은 개별 구성 요소이다. 이를 통해 로그인된 사용자가 할 수 있는 모든 것을 수행할 수 있다.
라우터 서버는 내부 API를 통해 나의 홈 라우터에 직접 연결된다. 이 장치는 하루 24시간 작동하며, 집 안의 모든 기기에서 OS를 재설치해도 살아남고, 어떤 엔드포인트 보안 도구(endpoint security tool)보다 먼저 모든 네트워크 트래픽을 확인하며, 소비자용 OpenWrt 배포판에는 존재하지 않는 안티바이러스(antivirus)나 EDR이 없다.
이 모든 것은 실제로 실행되고 있는 코드이다. 내가 주장하는 모든 내용은 저장소(repository)에서 검증 가능하다.
두 개의 리스트
유능한 개인용 AI 에이전트(personal AI agent)에게 필요한 사항은 다음과 같다:
- 재실행 없이 대기 상태를 유지하는 지속적인 백그라운드 프로세스 (persistent background process)
- 브라우저, 터미널, 파일 시스템 및 네트워크 전반에 걸친 광범위한 도구 접근 권한
- 자율적인 다단계 실행 (autonomous multi-step execution) — 도움 없이 복잡한 목표를 완수하는 능력
- 세션 간에도 유지되는 지속적인 메모리 (persistent memory)
- 자기 개선 능력 (self-improvement capability) — 상호작용을 통해 시간이 지남에 따라 더 나아지는 학습 능력
- 네트워크 통합 (network integration) — 온라인에서 사용자를 대신하여 행동하는 능력
- 개인정보 보호와 속도를 위해 클라우드 의존성이 없는 로컬 모델 추론 (local model inference)
이제 유능한 AI 네이티브 임플란트(AI-native implant)에게 필요한 사항은 다음과 같다:
- 재부팅 후에도 살아남고 숨겨진 상태를 유지하는 지속적인 백그라운드 프로세스
- 데이터 유출(exfiltration), 명령 실행 및 자격 증명 캡처(credential capture)를 위한 광범위한 도구 접근 권한
- 자율적인 다단계 실행 (autonomous multi-step execution) — 공격자의 상호작용 없이 작동하는 능력
- 시간이 지남에 따라 피해자 프로필을 구축하기 위한 지속적인 메모리
- 자기 개선 능력 (self-improvement capability) — 대상 환경과 방어 체계에 적응하는 능력
- C2 통신 및 데이터 유출을 위한 네트워크 통합
- API 로깅과 콘텐츠 필터링이 없는 로컬 모델 추론
이것은 동일한 리스트이다.
이 부분은 잠시 짚고 넘어갈 필요가 있습니다. 그냥
데이터셋 빌더 (dataset builder)를 작성할 때 이런 사실을 발견하게 될 줄은 몰랐습니다. 저는 그저 저 자신의 워크플로우 최적화 (workflow optimization)에 대해서만 생각하고 있었습니다. 하지만 코드는 제가 무엇을 생각하고 있었는지 알지 못합니다.
내가 멈출 수 없는 질문
솔직하게 말씀드리겠습니다. 저는 위협 행위자 (threat actor)가 아닙니다. Forge-AI는 제가 필요하다고 느껴서 직접 만든 정당한 개인 생산성 플랫폼입니다. 저는 이것을 사용하며, 자랑스럽게 생각합니다. 코드와 함께 위협 모델 (threat model)을 공개하는 것 — 즉, 제가 여기서 설명한 내용을 정확히 짚어주는 THREAT_MODEL.md 문서를 함께 게시하는 것 — 은 제가 만든 것에 대해 정직해지려는 시도이지, 누군가가 이를 오용하도록 만드는 매뉴얼이 아닙니다.
하지만 그날 밤 라우터 (router) 코드의 800번 줄 근처를 살펴본 이후로, 저는 계속해서 같은 질문으로 돌아오고 있습니다.
만약 이런 아키텍처 (architecture)를 가진 무언가가 지금 당신의 컴퓨터에서 실행되고 있다면 — 악의적인 의도를 가진 누군가가 이미 존재하는 도구들로 만들고, 악성코드 시그니처 (malware signatures)가 없는 표준 파이썬 (Python) 라이브러리들을 사용하여 당신의 기기에 떨어뜨려 놓았다면 — 당신은 무엇을 확인하겠습니까?
그것은 파이썬 프로세스 (Python process)입니다. 파이썬은 모든 개발자의 컴퓨터에 설치되어 있습니다. 그것은 일반적인 개발 도구처럼 보이는 서브프로세스 (subprocesses)를 생성합니다. 그것은 신뢰할 수 있는 도메인 (domains)과 통신합니다. Discord나 GitHub로 보내는 암호화된 API 호출 (API call) 내부에 감싸진 공격자의 명령 서버 (command server)로의 트래픽은, 마치 개발자가 자신의 빌드 상태 (build status)를 확인하는 것처럼 보입니다. 그리고 만약 그것이 라우터 수준에서 지속성 (persistence)까지 확보했다면 — 즉, OS 재설치 후에도 살아남는 장치에 존재하며 당신의 WiFi에 접속하는 모든 기기에 다시 연결된다면 — 노트북을 정리하는 것만으로는 해결되지 않습니다. 그것은 다시 돌아옵니다.
그 질문에는 답이 있습니다. 다만 그 답이 편안하지 않을 뿐이며, 보안 업계가 아직 존재하지 않는 무언가를 구축해야 한다는 것을 의미합니다.
그것이 바로 다음 글에서 다룰 내용입니다.
Christopher Adams는 애리조나주 프레스콧 밸리(Prescott Valley, AZ)에 기반을 둔 독학 개발자입니다. 그는 완전한 능력을 갖추고 로컬에서 실행되는 AI 에이전트(AI agent)가 어떤 모습일 수 있는지 탐구하기 위한 개인 프로젝트로 Forge-AI를 구축했으며, 결과적으로 해당 소프트웨어 계층이 보안에 시사하는 바에 대한 실용적인 이중 용도(dual-use) 분석을 완성하게 되었습니다. 그는 AI 에이전트 아키텍처(AI agent architecture), 공격적 보안 연구(offensive security research), 그리고 이 두 분야의 교차점에 관심을 가지고 있습니다. 그는 현재 소프트웨어 개발 및 보안 연구 분야에서 기회를 적극적으로 찾고 있습니다.
GitHub: https://github.com/ChrisAdamsdevelopment/Forge-AI | Email: chris@spectracleanse.com
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기