본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 25. 10:22

AI 프롬프트를 위한 Git을 만들었습니다 — 이유와 방법

요약

프롬프트 버전 관리의 어려움을 해결하기 위해 Git의 사고 모델을 도입한 CLI 도구인 promptctl을 소개합니다. 커밋, diff, 롤백, 파일 감시 기능을 통해 프롬프트 변경 이력을 체계적으로 관리할 수 있습니다.

핵심 포인트

  • 프롬프트 변경 이력을 Git처럼 커밋, 비교, 롤백 가능
  • 파일 수정 시 자동으로 버전을 생성하는 watch 기능 제공
  • CLI 기반의 직관적인 워크플로우로 프롬프트 엔지니어링 효율화
  • 프롬프트 내용 및 커밋 메시지 기반의 검색 기능 지원

AI 프롬프트를 위한 Git을 만들었습니다 — 이유와 방법

LLM (Large Language Models)을 사용하여 개발하는 제가 아는 모든 엔지니어는 동일한 문제를 겪고 있습니다.

시스템 프롬프트 (system prompt)를 튜닝하는 데 몇 시간을 소비합니다. 아주 잘 작동하죠. 조금 수정합니다. 그리고 조금 더 수정합니다. 그러다 무언가 망가집니다 — 모델이 더 나쁜 답변을 내놓기 시작하고, 환각 (hallucination) 현상이 더 심해지며, 지침을 무시하기 시작합니다.

그리고 당신은 무엇을 변경했는지 전혀 알 수 없습니다.

당신의 프롬프트 이력은 파일, Notion 문서, Slack 메시지, 그리고 애플리케이션 코드 안에 파묻힌 git 커밋 (git commits) 등에 흩어져 있습니다. 무엇이, 언제, 왜 바뀌었는지 확인하거나, 실제로 작동했던 버전으로 되돌아갈 수 있는 깔끔한 방법이 없습니다.

그래서 저는 promptctl을 만들었습니다.

이것은 무엇인가요?

promptctl은 프롬프트 관리에 git의 사고 모델 (mental model)을 도입하는 CLI (Command Line Interface) 도구입니다. 터미널에서 버전을 커밋 (commit)하고, 차이점(diff)을 비교하고, 롤백 (roll back)하고, 전체를 검색할 수 있습니다.

$ echo "You are a helpful assistant." | promptctl commit system -m "initial"
✓ Committed prompt "system" as v1

...

만약 당신이 git을 사용해 본 적이 있다면, 이미 promptctl 사용법을 알고 있는 것이나 다름없습니다.

전체 워크플로우 (Workflow)

프롬프트 커밋하기

stdin (표준 입력)으로부터 파이프 (pipe)를 연결하거나, 파일에서 읽거나, 대화형으로 입력할 수 있습니다:

# From stdin
echo "You are a helpful assistant." | promptctl commit system -m "initial"

...

이력 보기

$ promptctl log system --preview

prompt: system
...

버전 차이 비교 (Diffing)

promptctl diff system          # 최신 버전 vs 이전 버전
promptctl diff system 2        # v2 vs 최신 버전
promptctl diff system 1 3      # 명시적 비교

Diff는 색상이 지정됩니다 — 삭제된 줄은 빨간색, 추가된 줄은 초록색으로 표시됩니다.

모든 항목 검색하기

$ promptctl search "cite sources"

Results for "cite sources"
...

검색은 내용, 커밋 메시지 (commit messages), 그리고 태그 (tags)를 확인합니다.

파일 감시하기 (Watching)

이 기능은 제가 가장 좋아합니다. 파일을 지정하면 저장할 때마다 자동으로 커밋합니다:

promptctl watch prompts/system.txt --as system --model claude-3

이제 평소 사용하는 에디터에서 편집할 수 있으며, 저장할 때마다 버전이 지정된 스냅샷(snapshot)이 생성됩니다. 커밋 타임스탬프(commit timestamp)는 promptctl이 실행된 시점이 아니라 파일의 수정 시간과 일치합니다.

기타 명령어

promptctl copy system system-experimental   # 전체 이력을 포함하여 포크 (fork)
promptctl show system --copy                # 클립보드로 복사
promptctl show system --version-at 2026-06-01  # 타임 트래블 (time travel)
...

작동 원리

모든 데이터는 프로젝트 디렉토리 내의 .promptctl/store.json에 저장됩니다. 이는 .git/이 작동하는 방식과 유사합니다. 스토어(store)는 상위 디렉토리를 탐색하며 발견되므로, 어떤 하위 디렉토리에서도 명령어가 작동합니다.

your-project/
├── .promptctl/
│   └── store.json     ← 모든 프롬프트 버전이 여기에 저장됨
...

store.json을 git에 커밋하면 팀 전체가 프롬프트 이력을 공유할 수 있습니다. 만약 로컬 전용 스토어를 원한다면 .promptctl/.gitignore에 추가하세요.

쓰기 작업은 원자적(atomic)으로 수행됩니다. 임시 파일에 먼저 쓰고 이름을 변경하는 방식을 사용하므로, 쓰기 도중 프로세스가 종료되더라도 스토어가 손상되지 않습니다.

왜 Go인가, 왜 의존성 제로(zero dependencies)인가?

저는 promptctl이 한 번 설치하면 잊어버려도 되는 도구가 되기를 원했습니다. 별도의 런타임(runtime)이 필요 없고, node_modules도, pip install도, 버전 충돌도 없습니다.

Go의 표준 라이브러리는 promptctl에 필요한 모든 것을 충족합니다:

  • JSON 직렬화 (serialization)
  • 원자적 파일 쓰기 (atomic file writes)
  • 디렉토리 순회 (directory traversal)
  • Diff 알고리즘 (LCS, 처음부터 직접 구현)
  • ANSI 색상 감지 (ANSI color detection)

그 결과, 다음과 같이 설치할 수 있는 단일 바이너리(single binary)가 만들어졌습니다:

go install github.com/naya-ai/promptctl/cmd/promptctl@latest

그리고 Mac, Linux, Windows에서 모두 작동합니다.

셸 완성 (Shell completions)

# Bash
source <(promptctl completion bash)

...

셸 완성 기능은 <name> 인자를 받는 모든 명령어에 대해 프롬프트 이름을 동적으로 제안합니다.

향후 계획

이것은 v0.1.0 버전입니다. 핵심 워크플로우는 견고하지만, 구축해야 할 것이 훨씬 더 많습니다. 제가 고민 중인 사항들은 다음과 같습니다:

  • 프롬프트 백업 및 공유를 위한 원격 동기화 (Remote sync: S3, GitHub Gist)
  • 나란히 보기 방식의 Diff 뷰 (Side-by-side diff view)
  • VS Code 확장 프로그램 (extension)

만약 당신이 LLM (Large Language Models)을 사용하여 개발하고 있는데 프롬프트 관리 (prompt management)에 어려움을 겪고 있다면, 어떤 기능이 더 필요한지 꼭 알려주세요.

사용해 보기

go install github.com/naya-ai/promptctl/cmd/promptctl@latest
promptctl init
echo "You are a helpful assistant." | promptctl commit system -m "initial"
...

GitHub: github.com/naya-ai/promptctl

이 도구가 당신의 문제를 해결해 준다면, 저장소(repo)에 별(star)을 눌러주세요. 1인 프로젝트에게는 큰 힘이 됩니다. 만약 버그가 있거나 부족한 점이 있다면 이슈(issue)를 생성해 주세요. 빠르게 답변하겠습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0