smallnest/pigo
pi agent in Golang
pigo – Go 기반 CLI 코드 어시스턴트 (pi 스타일 AI 에이전트)
무엇인가요 – pigo는 pi 코드 어시스턴트의 기능을 모방한 오픈소스 명령줄 AI 에이전트로, Go로 작성되었습니다. 파일 읽기/쓰기, 쉘 명령 실행, 웹 페이지 가져오기, 대규모 언어 모델(LLM) 호출을 통해 요청을 이해하고 코드를 수정한 후 결과를 반환할 수 있습니다. 이 도구는 두 가지 모드에서 작동합니다:
- 헤드리스 (
-p …) – 단일 프롬프트로 최종 답변을 출력하거나 JSON 이벤트를 스트리밍합니다. - 인터랙티브 REPL – 터미널 UI에서 질문을 반복적으로 제출하고 도구를 실행하며 에이전트의 추론 과정을 확인할 수 있습니다.
주요 기능 (README에 설명됨)
| 기능 | 설명 |
|---|---|
| 두 가지 실행 모드 | -p는 단일 스크립트/CI용, REPL은 인터랙티브 사용용입니다. |
| 다수의 LLM 제공자 | OpenRouter(기본), 로컬 Ollama, NVIDIA NIM, Anthropic, OpenAI 호환 엔드포인트 등 |
| 내장 도구 세트 | read, write, edit, grep, find, bash (백그라운드 실행 가능), todo, webfetch, websearch, memory_search, task 등 |
| 세션 관리 | 이전 세션 목록, 재개, 계속 가능; 각 세션은 session_id를 포함한 JSON을 스트리밍합니다. |
| 도구 수준 허용/차단 | --allowed-tools (화이트리스트) 및 --disallowed-tools (블랙리스트) – 블랙리스트가 우선하며, 도구가 모델에 제시되기 전에 강제 적용됩니다. |
| 프로젝트 신뢰 | 파일시스템 디렉터리는 기본적으로 신뢰되지 않으며, 부작용 도구(bash, write, edit)는 --approve를 사용하지 않으면 확인이 필요합니다. |
| 스킬 및 플러그인 | 슬래시 스타일 명령(/skill-name)은 ~/.agents/skills에서 로드되며, 외부 플러그인으로 더 많은 도구를 추가할 수 있습니다. |
| 프롬프트 템플릿 | 재사용 가능한 Markdown 프롬프트 스니펫(/name로 확장)을 위치 매개변수 구문($1, ${1:-default}, $@ 등)으로 사용 가능합니다. |
| 컨텍스트 압축 | 토큰 창이 한계에 가까워지면 자동 요약되며, 수동으로 /compact 명령도 사용 가능합니다. |
| 자기 업데이트 | pigo update로 최신 GitHub 릴리스로 바이너리 업그레이드 가능합니다. |
| SDK | 핵심 에이전트는 github.com/smallnest/pigo/agent로 가져와 다른 Go 프로그램에 임베딩할 수 있습니다. |
| 훅 | PreToolUse, UserPromptSubmit 등 9개의 라이프사이클 훅 포인트가 있으며, 쉘 명령을 실행하고 실행을 차단하거나 수정할 수 있습니다. |
| GitHub PR 리뷰 웹훅 | 선택적 모드로, PR이 리뷰 대기 상태가 되면 읽기 전용 리뷰 세션을 생성합니다. |
설치 및 빠른 시작 (README에서)
# 소스에서 빌드 (Go 1.27+ 필요)
git clone https://github.com/smallnest/pigo.git
cd pigo
go build ./cmd/pigo # ./pigo 생성
# 또는 $GOPATH/bin에 설치
go install ./cmd/pigo
또는 Linux/macOS용 원라인 스크립트로 사전 컴파일된 바이너리 가져오기:
curl -fsSL https://raw.githubusercontent.com/smallnest/pigo/master/install.sh | sh
LLM 인증 정보를 설정한 후 실행:
export OPENROUTER_API_KEY=sk-… # 또는 다른 제공자 키
pigo -p "README를 읽고 3문장으로 요약해" # 헤드리스 모드
pigo # REPL 시작
pigo -m ollama/qwen2.5-coder -u http://localhost:11434/v1 -p "main.go가 무엇을 하는지 설명해"
작동 방식 (고수준 아키텍처)
- CLI → 에이전트 루프 – 명령줄이 플래그를 파싱하고 에이전트 런타임을 시작합니다.
- 이중 루프 구조 – 내부 루프는 LLM 응답을 스트리밍하고, 도구 호출 여부를 결정하며, 도구를 실행하고 결과를 피드백합니다. 외부 루프는 후속 메시지를 확인하고 내부 루프를 재시작할 수 있습니다.
- 제공자 추상화 – 모델 ID는 히ュ리스틱을 사용해 구체적인 제공자(OpenRouter, Ollama 등)로 매핑되며, 제공자가 LLM 게이트웨이로의 HTTP 요청을 처리합니다.
- 도구 실행 및 신뢰 게이트 – 도구 실행 전 신뢰 시스템이 현재 디렉터리가 신뢰되는지, 도구가 화이트리스트/블랙리스트에 허용되는지 확인합니다.
- 세션 및 컨텍스트 처리 – 모든 턴이 저장되며, 토큰 창이 모델 제한에 가까워지면 컨텍스트가 자동 요약됩니다.
- 프롬프트 조립 – 시스템 프롬프트는 기본 프롬프트, 환경 정보, 선택적
AGENTS.md파일,--append-system-prompt인수로 구성됩니다.
pigo를 사용할 때
- CI에서 자동 코드 수정 – 헤드리스 모드(
-p)는 lint, 테스트 실행, 실패한 파일의 LLM 수정을 스크립트로 자동화할 수 있습니다. - 로컬 개발 지원 – REPL은 리포지토리 읽기, 명령 실행, 변경 제안이 가능한 인터랙티브한 "파트너 프로그래머"를 제공합니다.
- 자체 호스팅 LLM – Ollama 또는 OpenAI 호환 엔드포인트와 함께 작동하므로 클라우드 API가 필요하지 않습니다.
- 확장 가능한 워크플로우 – 플러그인을 통해 커스텀 도구를 추가하거나 도메인 전용 작업용 재사용 가능한 프롬프트/스킬을 정의할 수 있습니다.
제한 사항 / 안전성 주의사항 (README에서)
- 부작용 도구는 디렉터리 신뢰 또는 명시적
--approve가 필요하며, 신뢰되지 않은 위치에서는 실행되지 않습니다. - 도구 블랙리스트는 화이트리스트보다 우선하며, 블랙리스트로 차단된 도구는
--approve로 재정의할 수 없습니다. - 훅은 현재 사용자로 실행되며 자격 증명을 받지 않지만, 실행을 차단할 수 있습니다.
- 에이전트는 병렬 안전하지 않음 –
Session은 단일 고루틴에서 사용해야 합니다.
일반적인 플래그 요약
| 플래그 | 의미 |
|---|---|
-p, --print |
헤드리스 모드용 프롬프트 (또는 위치 인수 사용). |
-m, --model |
모델 식별자 (기본값 openrouter/free). |
-u, --base-url |
제공자 URL 재정의 (예: 로컬 Ollama). |
-k, --api-key |
API 키를 직접 제공하여 환경/설정을 무시. |
-P, --protocol |
openai 또는 anthropic 프로토콜 강제. |
-o, --output-format |
text (기본값) 또는 stream-json. |
-n, --no-tools |
내장 도구 및 플러그인 탐색 비활성화. |
--allowed-tools / --disallowed-tools |
도구 사용용 화이트리스트/블랙리스트. |
-a, --approve |
이번 실행에서 현재 작업 디렉터리를 신뢰. |
--prompt-template |
추가 프롬프트 템플릿 파일 또는 디렉터리 로드. |
--system-prompt |
기본 시스템 프롬프트 완전 교체. |
--append-system-prompt |
시스템 프롬프트에 추가 텍스트 또는 파일 내용 추가. |
SDK 예제 (README에서)
import (
"log"
"os"
"github.com/smallnest/pigo/agent"
)
func main() {
sess, err := agent.New(
agent.WithModel("claude-opus-4-8"),
agent.WithAPIKey(os.Getenv("ANTHROPIC_API_KEY")),
)
if err != nil { log.Fatal(err) }
defer sess.Close()
reply, err := sess.Prompt(context.Background(), "코딩 에이전트란 무엇인지 한 문장으로 설명해")
if err != nil { log.Fatal(err) }
fmt.Println(reply)
}
SDK는 CLI 기본값(도구 활성화, 요청 시 스킬/메모리 제외)을 반영하며, WithTools, WithoutTools, WithSkills 등으로 구성 가능합니다.
더 알아보기
- 문서 – 리포지토리의
docs/폴더에는 아키텍처 다이어그램과 REPL 흐름도가 포함되어 있습니다. - 전자책 – "Go로 pi 에이전트 만들기" (
write_pi_agent_in_go.pdf)는ebooks리포지토리에 포함되어 있습니다. - 릴리스 – Linux/macOS/Windows용 사전 컴파일된 바이너리는 GitHub 릴리스 페이지에 있습니다.
- 이슈 및 커뮤니티 – README는 SDK 사용 이슈 #554에 링크되어 있으며, 프로젝트는 활발히 CI 테스트되고 있습니다.
TL;DR
pigo는 로컬 또는 클라우드 LLM에서 작동하는 Go 네이티브 명령줄 AI 코드 어시스턴트로, 풍부한 파일 시스템 및 쉘 도구를 제공하며, 스크립팅과 인터랙티브 REPL을 지원하며, 플러그인, 프롬프트 템플릿, Go SDK를 통해 확장 가능합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트