Skip to content
This repository was archived by the owner on Aug 22, 2026. It is now read-only.
 
 

Repository files navigation

⚒ Chore Forge

반복 잡무를 설명하면, 에이전트가 도구를 직접 만들어 자기 능력으로 등록한다.

맞다톤 2026 출품작 · 개인 생산성 향상 웹 앱

배포: https://ca-web-onfvnhccevt2q.blackforest-e0d48dbe.koreacentral.azurecontainerapps.io · 에이전트 진입점: /llms.txt · API 문서: /docs

로그인·회원가입·토큰이 전혀 없습니다. 위 주소를 열면 바로 사용할 수 있습니다.

기존 AI 비서는 요청할 때마다 매번 처음부터 추론합니다. Chore Forge는 다릅니다. 한 번 설명한 잡무는 실행 가능한 도구로 벼려져 영구히 남고, 두 번째부터는 LLM 호출 없이 수십 밀리초 만에 끝납니다. 에이전트가 스스로 능력을 늘려가는 자가 확장(self-extending) 구조입니다.


1. 무엇을 해결하나

기존 방식 Chore Forge
1회차 손으로 25분 설명 → 약 100초 (도구 생성·검증·승인)
2회차 이후 손으로 25분 0.02초 (등록된 도구 재실행, 모델 호출 없음)
한계비용 매번 동일 0에 수렴

대상 사용자: 매주 주간보고 작성, CSV 정제, 회의록에서 실행항목 추출 같은 정형 잡무를 반복하는 개발자·직장인.

실측 예시 — "커밋 로그를 주간보고 마크다운으로 정리" 도구: 1회차 97.7초에 생성·검증 완료, 2회차부터 0.021초. 실행 1회당 25분 절약.


2. 동작 방식

사용자: "이번 주 커밋 로그를 주간보고 마크다운으로 정리해줘"
   │
   ├─ ① SpecAgent      잡무 → 검증 가능한 JSON 명세
   ├─ ② BuilderAgent   Copilot SDK로 파이썬 도구 코드 생성
   ├─ ③ Sandbox        격리 실행. 실패하면 오류를 Builder에게 되돌려 자가 수정 (최대 2회)
   ├─ ④ VerifierAgent  샌드박스를 실제 tool 로 호출해 독립 검증 → pass/fail 판정
   │
   └─ ⑤ 이중 게이트     샌드박스 통과 AND Verifier pass 를 모두 만족해야 자동 등록
          │             (둘 중 하나라도 실패하면 보류 + 사유 표시)
          │
          └─ Skill Registry (PostgreSQL) — 이후 한 번의 클릭으로 재실행

아키텍처

flowchart LR
    U["사용자 · AI 심사 에이전트"]

    subgraph ACA["Azure Container Apps"]
        direction TB
        API["FastAPI<br/>단조 파이프라인 · 스킬 실행 API"]
        SBX["샌드박스<br/>AST 허용목록 + rlimit 격리 서브프로세스"]
        API -->|"코드 실행"| SBX
    end

    subgraph AF["Microsoft Agent Framework · GitHubCopilotAgent"]
        direction TB
        A1["① SpecAgent<br/>명세 생성"]
        A2["② BuilderAgent<br/>코드 생성"]
        A3["④ VerifierAgent<br/>독립 검증"]
        A1 --> A2 --> A3
    end

    U -->|"SSE /api/forge"| API
    API -->|"ChatAgent 프로토콜"| A1
    A3 -->|"pass / fail 판정"| API
    A2 -.->|"③ 샌드박스 오류 피드백<br/>자가 수정 최대 2회"| A2
    A3 -.->|"tool 로 호출"| SBX
    A1 --> CP["GitHub Copilot SDK"]
    A2 --> CP
    A3 --> CP

    API -->|"이중 게이트 통과 시 등록"| PG[("Azure Database for PostgreSQL<br/>skills · runs")]
    KV["Key Vault<br/>Managed Identity"] -->|"DATABASE_URL · Copilot 토큰"| API
Loading

자가 수정 루프Verifier의 독립 검증이 이 구조의 핵심입니다. 생성된 코드는 Builder 자신이 아니라 샌드박스의 실제 실행 결과와 별도 에이전트의 판정을 통과해야만 영구 스킬이 됩니다.


3. 필수 기술 사용

GitHub Copilot SDK

  • 세 에이전트 전부 agent-framework-github-copilotGitHubCopilotAgent로 구동 — Copilot SDK가 실제 모델 백엔드이자 에이전트 런타임입니다.
  • Copilot SDK의 고유 강점(코드 생성·수정) 을 제품의 핵심 기능으로 사용합니다. Chore Forge의 산출물은 텍스트가 아니라 실행 가능한 프로그램입니다.
  • SDK의 permission handler(on_permission_request)를 명시적으로 구성해 에이전트의 도구 호출 권한을 코드 레벨에서 통제합니다.
  • 인증: COPILOT_GITHUB_TOKEN(fine-grained PAT)을 Key Vault에서 주입.

Microsoft Agent Framework

사용 요소 위치
다중 에이전트 파이프라인 (Spec → Build → Verify) app/orchestrator.py
커스텀 tool 호출 — VerifierAgent가 execute_in_sandbox 함수를 실제 호출 ForgeRun._verify
세션(컨텍스트) 관리 — 자가 수정 루프가 대화 맥락을 유지 builder.create_session()
스트리밍agent.run(..., stream=True) 델타를 SSE로 그대로 중계 _stream_text
OpenTelemetry 관측성configure_otel_providers() → Application Insights app/main.py

4. Azure 통합

필요한 것만 씁니다. 각 서비스에 앱상의 필연적 이유가 있습니다.

서비스 왜 필요한가
Container Apps Copilot SDK가 CLI를 자식 프로세스로 띄우므로 상주 프로세스가 필요. Functions Consumption 부적합. 콜드스타트 회피를 위해 minReplicas: 1
Database for PostgreSQL (유연 서버, Burstable B1ms) 벼려낸 스킬과 실행 기록은 영구 자산. 재배포·스케일아웃 후에도 살아남아야 함. 로컬 docker compose동일한 엔진이라 환경 간 차이가 없음
Key Vault GitHub 토큰을 Container App secret이 keyVaultUrl로 참조. 이미지·환경변수에 평문 비밀 없음
관리 ID (사용자 할당) ACR pull과 Key Vault 접근을 암호 없이 처리. DB 접속 문자열도 Key Vault 시크릿으로만 주입
Application Insights + Log Analytics 에이전트 실행을 OTel 트레이스로 관측

adminUserEnabled: false — 레지스트리 키 인증을 인프라 수준에서 차단했고, DB 자격 증명은 Key Vault를 통해서만 컨테이너에 도달합니다.

앱 자체에는 인증이 없습니다. 심사 에이전트가 로그인 없이 모든 기능에 접근할 수 있어야 하기 때문입니다. 설계 근거는 PRD §5.5.


5. 책임 있는 AI · 보안

  • 2중 샌드박스 (app/sandbox.py) — 생성 코드가 실행되는 유일한 경로
    • 정적: AST 스캔으로 허용 목록 밖의 import와 eval/exec/open/dunder 접근을 실행 전에 차단
    • 동적: 별도 프로세스 · 세션 격리(setsid) · 세척된 환경변수 · 임시 작업 디렉터리 · CPU 5초 · 메모리 512MB · 파일 8MB · 벽시계 12초 제한
  • 등록에는 두 관문을 모두 통과해야 합니다 — ①샌드박스가 코드를 실행할 수 있는지, ②VerifierAgent가 올바른 일을 하는지 판정. 둘 중 하나라도 실패하면 초안으로 남아 사람의 검토를 기다립니다. 자동 등록의 안전은 승인 클릭이 아니라 이 두 관문이 담당합니다.
  • 사용자 통제권 — 진행 중 중단, 등록 후 취소·삭제가 상시 가능하며, 승인 게이트를 켜면 사람이 코드를 검토·승인해야만 등록됩니다. (기본 꺼짐 — 설계 근거는 PRD §5.4, TRD §8.4)
  • AI 생성 표시 — 모든 AI 산출물에 AI 생성 배지를 붙이고, 생성된 코드 전문과 샌드박스 실행 결과, Verifier 판정을 항상 노출합니다.
  • 프롬프트 인젝션 방어 — 사용자 입력을 <chore> 태그로 감싸 신뢰 경계를 명시하고, 역할 변경·지시 유출·범위 밖 행동을 거부하도록 지시. 에이전트 자신은 셸·파일·네트워크 접근이 금지되며 우리가 등록한 함수만 호출할 수 있습니다.
  • 환각 완화 — VerifierAgent는 결과를 예측하지 못하고 반드시 샌드박스를 실제로 호출해야 합니다. 최종 판정은 실행 결과에 근거합니다.
  • 비밀 관리 — 토큰은 Key Vault에만. 소스·이미지·로그에 남지 않습니다.

6. 로컬 실행

Docker Compose — 권장

앱과 PostgreSQL이 함께 뜹니다.

export COPILOT_GITHUB_TOKEN=github_pat_...   # 클래식 ghp_ 토큰은 지원되지 않습니다
docker compose up --build
# → http://localhost:8080

첫 부팅에 데모 스킬 3개가 자동으로 심어지므로 빈 화면을 마주할 일이 없습니다. 이 스킬들도 특별 대우 없이 다른 코드와 똑같이 샌드박스를 통과해야 등록됩니다.

토큰은 새 도구를 단조할 때만 필요합니다. 없어도 앱은 정상 기동하며, 등록된 스킬 실행·조회·지표·실행 기록이 모두 동작합니다. 이 경우 UI와 /healthz가 무엇이 가능하고 무엇이 불가능한지 명시적으로 알려줍니다.

파이썬 직접 실행

python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/python -m uvicorn app.main:app --port 8080

DATABASE_URL이 없으면 인메모리 레지스트리로 자동 폴백하므로 Postgres 없이도 뜹니다.

7. Azure 배포

az login
./deploy.sh github_pat_...

deploy.sh가 azd 환경 구성, PostgreSQL 관리자 암호 생성, 프로비저닝, 배포, 헬스체크까지 처리합니다.

8. 구조

app/
  main.py          FastAPI · SSE 스트림 · 스킬 REST API · 스킬 런타임
  orchestrator.py  Agent Framework 파이프라인 (Spec → Build → Verify + 자가 수정)
  sandbox.py       정적 AST 검사 + 격리 서브프로세스 실행
  store.py         PostgreSQL 스킬 + 실행 기록 (인메모리 폴백)
  seed.py          첫 부팅 시 심는 데모 스킬 3개
  forge_state.py   Copilot 자격 증명 가용성 상태
  models.py        Skill 도메인 모델
  static/index.html  단일 파일 프론트엔드 (빌드 스텝 없음)
infra/             Bicep IaC — Container Apps · PostgreSQL · Key Vault · 관리 ID · App Insights
docker-compose.yml 앱 + PostgreSQL 로컬 스택

9. API

메서드 경로 설명
POST /api/forge 잡무 설명 → 파이프라인을 SSE로 스트리밍
POST /api/skills/{id}/approve 초안 스킬 등록 (보류된 스킬 수동 승인)
POST /api/skills/{id}/reject 거부
POST /api/skills/{id}/run 승인된 스킬 실행 (승인 전에는 403)
GET /api/skills · /api/skills/{id} 스킬 목록 · 단건 상세(코드 포함)
GET /api/runs 실행 기록
GET /api/stats 절약 시간·속도향상 지표
GET /api/agent/guide · /llms.txt AI 에이전트용 자기설명 가이드
GET /docs · /openapi.json 한국어 설명이 붙은 OpenAPI
GET /healthz 헬스체크 (저장소·단조 가용성 포함)

인증이 없으므로 위 엔드포인트는 모두 그대로 호출할 수 있습니다. 처음 방문하는 에이전트는 /llms.txt 부터 읽으면 됩니다.

10. 심사 기준 대응

기준 배점 대응 근거 위치
Copilot SDK · Agent Framework 활용 25% 세 에이전트를 GitHubCopilotAgent로 구동. Verifier는 샌드박스를 실제 tool로 호출해 독립 검증하고, 그 판정이 등록 여부를 실제로 좌우함 app/orchestrator.py
생산성 향상 18% 1회차 약 100초 → 2회차부터 0.02초. 실측 속도향상 8,000× 이상, 실행마다 절약 시간 누적 /api/stats, 대시보드
Azure 통합 18% Container Apps + PostgreSQL Flexible Server + Key Vault + Managed Identity가 핵심. 나머지(ACR·Log Analytics·App Insights)는 컨테이너 구동과 관측에 필수인 것만. 점수를 위한 과잉 서비스 없음 infra/resources.bicep
완성도 16% 39개 테스트 통과, Docker Compose 원커맨드 기동, 시드 스킬 3종이 부팅 시 자체 검증 tests/, docker-compose.yml
UX 12% 6개 화면 사이드바 SPA, 라이트·다크 자동 전환, 파이프라인 실시간 SSE 스트리밍, 보류 사유 설명 app/static/index.html
책임 있는 AI 6% 이중 게이트(샌드박스 + Verifier), 2계층 샌드박스 격리, 코드 전문 공개, 무인증 결정의 트레이드오프 명시 PRD §5.5, TRD §8.8–8.9
혁신성 5% 도구를 쓰는 에이전트가 아니라 도구를 만들어 자기 능력으로 등록하는 자가 확장 구조 §2 아키텍처

11. 문서

문서 내용
PRD.md 제품 요구사항 — 문제 정의, 사용자, 플로우, 수용 기준, 결정 기록
TRD.md 기술 요구사항 — 아키텍처, 에이전트 계층, 샌드박스, 트레이드오프, 구현 기록
AGENTS.md AI 코딩 에이전트를 위한 작업 규칙·명령어·가드레일

About

자연어로 설명한 반복 잡무를 Copilot 에이전트가 실행 가능한 도구로 만들어 영구 스킬로 등록하는 자가 확장 자동화 에이전트 · 맞다톤 2026

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages