write-post
DEVLOG 생성부터 AI 활용 사례 게시글 작성까지 한 번에 진행합니다. AI 코딩 도구의 대화 세션을 자동으로 파싱하여 개발 로그를 만들고, 비개발자 대상 사례글까지 작성합니다.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
DEVLOG 생성부터 AI 활용 사례 게시글 작성까지 한 번에 진행합니다. AI 코딩 도구의 대화 세션을 자동으로 파싱하여 개발 로그를 만들고, 비개발자 대상 사례글까지 작성합니다.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | write-post |
| description | DEVLOG 생성부터 AI 활용 사례 게시글 작성까지 한 번에 진행합니다. AI 코딩 도구의 대화 세션을 자동으로 파싱하여 개발 로그를 만들고, 비개발자 대상 사례글까지 작성합니다. |
DEVLOG 생성부터 사례 게시글 작성까지 한 번에 진행합니다.
사용 가능한 모든 AI 코딩 도구의 세션을 프로젝트 단위로 스캔하고, 통합 개발 로그 문서를 자동 생성합니다.
스킬 실행 시 아래 모든 도구의 세션 경로를 스캔하여 현재 프로젝트와 매칭되는 세션을 수집합니다:
~/.claude/projects/ 에서 현재 프로젝트 경로와 매칭되는 폴더 탐색session_list 또는 ~/.local/share/opencode/storage/에서 directory 필드로 매칭~/.gemini/antigravity/brain/에서 아티팩트 내 프로젝트 경로 매칭~/.codex/sessions/에서 세션 파일 내 작업 디렉토리 매칭~/.gemini/tmp/에서 프로젝트 해시 매칭스캔 결과 처리:
세션 파일을 대량 파싱하기 전에 반드시 다음 사전 검증을 수행하세요:
셸 환경 확인: 첫 번째 명령 실행 전 echo $SHELL 또는 echo $0으로 현재 셸 확인. Windows에서 Git Bash가 기본이므로 Unix 명령어(ls, cat, grep) 사용.
파일 1개 샘플링: 전체 파싱 전에 대상 파일 1개를 먼저 읽어 구조 확인. JSONL의 경우 첫 줄을 파싱하여 필드명(type, content 등)과 값(user/assistant — human/ai 아님)을 검증.
경로 표기법 통일:
| 환경 | 경로 형식 | 예시 |
|---|---|---|
| Git Bash 셸 | /c/Users/... | ls /c/Users/name/.claude/ |
| Python 스크립트 | C:/Users/... | glob.glob('C:/Users/name/.claude/**') |
| PowerShell/CMD | C:\Users\... | dir C:\Users\name\.claude\ |
Python에서는 항상 os.path.expanduser('~') 또는 C:/ 형식 사용.
인코딩 설정: Python 실행 시 PYTHONIOENCODING=utf-8 환경변수 설정. Windows 기본 인코딩(cp949)으로 인한 UnicodeEncodeError 방지.
에이전트 위임 전 검증: 백그라운드 에이전트에게 파싱 로직을 위임할 때, 위 1-4 검증을 완료한 로직만 전달. 검증되지 않은 가정(필드명, 경로 형식)을 에이전트에게 넘기지 마세요.
# {프로젝트명} - 개발 로그
AI 코딩 도구와 함께 진행한 개발 작업 기록입니다.
---
## YYYY-MM-DD (Day N)
### 1. 작업 제목 (간결하게)
사용자가 입력한 원문 그대로
**{해당 작업의 도구명} 작업:**
- 수행한 작업 설명
- `파일경로` - 파일 설명
- 생성/수정된 파일들 bullet point로 나열
---
### 2. 다음 작업 제목
사용자 요청
**{해당 작업의 도구명} 작업:**
- 작업 내용
---
## 커밋 히스토리
| 날짜 | 커밋 | 설명 |
|------|------|------|
| MM/DD | `해시` | 커밋 메시지 |
---
## 기술 스택
- **Frontend**: 사용된 기술
- **Backend**: 사용된 기술
- **Deployment**: 배포 환경
---
## 주요 기능
1. **기능명**
- 세부 설명
멀티 도구 참고: 여러 도구의 세션이 수집된 경우, 각 작업 섹션의
**{도구명} 작업:**헤더에 해당 작업을 수행한 실제 도구명이 표시됩니다. 같은 날짜에 여러 도구를 사용한 경우 도구별로 구분하여 기록합니다.
프로젝트에 DEVLOG.md 또는 DEVLOG_*.md 파일이 있으면, 사용자에게 선택지를 제시:
기존 DEVLOG가 있습니다. 어떻게 진행할까요?
- 기존 DEVLOG.md에 이어쓰기 (추천 — 마지막 기록: {마지막 날짜})
- 새 DEVLOG 생성 (DEVLOG_{제목슬러그}.md — 세션별 파일 분리)
- 처음부터 다시 생성 (기존 파일 덮어쓰기 — 모든 세션 재스캔)
선택별 동작:
DEVLOG_{슬러그}.md 생성 (예: DEVLOG_인증모듈.md). 모든 세션 파싱하여 새 파일에 작성DEVLOG.md 파일을 새로 생성~/.claude/projects/ 폴더에서 현재 프로젝트의 절대경로를 -로 치환한 폴더명 탐색. 예: /Users/dahye/DEV/my-app → ~/.claude/projects/-Users-dahye-DEV-my-app/~/.claude/projects/{프로젝트경로를-로치환}/ 폴더.jsonl 파일들 (agent-*.jsonl 제외)type: 'user' → 사용자 요청, type: 'assistant' → Claude 응답Windows 참고:
- Claude Code는 Windows에서 Git Bash를 셸로 사용합니다.
process.platform이win32로 보고되더라도 bash 문법을 사용하세요 (CMD/PowerShell 문법 사용 금지).- 프로젝트 경로 매칭: Windows에서의 폴더명 패턴이 다를 수 있습니다. 매칭이 안 되면
ls ~/.claude/projects/실행 후 현재 프로젝트에 해당하는 폴더를 직접 찾으세요.- Python으로 파싱할 때: Git Bash 경로(
/c/Users/...) 대신 Python 네이티브 경로(C:/Users/...) 사용.PYTHONIOENCODING=utf-8환경변수 필수.
Claude Code에서 기획 모드(Prometheus 등)가 사용자에게 선택지를 제시할 때
AskUserQuestion도구를 사용합니다. 이 도구의 질문과 사용자 응답은 JSONL 파일 안에 인라인으로 저장되므로 별도 보충 스캔이 필요 없습니다. 단, 기존 파싱 로직에서 이 도구를 인식하도록 해야 합니다.
감지 방법: JSONL 파싱 시 type: "assistant" 메시지의 content 배열에서 type == "tool_use" AND name == "AskUserQuestion" 항목을 찾습니다.
질문 추출 (assistant 메시지 내 tool_use):
{
"type": "tool_use",
"id": "toolu_...",
"name": "AskUserQuestion",
"input": {
"questions": [
{
"question": "어떤 기능을 포함할까요?",
"header": "기능 선택",
"options": [
{ "label": "기능A", "description": "설명..." },
{ "label": "기능B", "description": "설명..." }
],
"multiSelect": false
}
]
}
}
응답 추출 (다음 user 메시지의 tool_result):
{
"type": "user",
"message": {
"role": "user",
"content": [
{
"type": "tool_result",
"content": "User has answered your questions: \"어떤 기능을 포함할까요?\"=\"기능A\"...",
"tool_use_id": "toolu_..."
}
]
},
"toolUseResult": {
"questions": [...],
"answers": {
"어떤 기능을 포함할까요?": "기능A"
}
}
}
추출 우선순위:
toolUseResult.answers — 질문→답변 매핑이 구조화되어 있어 가장 정확tool_result.content — "Q"="A" 형식의 문자열. toolUseResult가 없을 때 폴백DEVLOG 반영 방법:
적용 시점:
AskUserQuestion 도구 호출이 감지된 경우session_list 사용 시 현재 프로젝트 세션 자동 필터링. Raw 파싱 시 ses_*.json의 directory 필드가 현재 프로젝트 경로와 일치하는지 확인.session_list → 현재 프로젝트의 세션 목록 조회session_read(session_id) → 세션 메시지 읽기 (role, content 포함)session_search(query) → 키워드로 세션 내 검색~/.local/share/opencode/storage/storage/session/{project-hash}/ 폴더 내 ses_*.json의 directory 필드 확인message/ses_*/msg_*.json (role 필드) → part/msg_*/prt_*.json (text 필드)%USERPROFILE%\.local\share\opencode\storage\Windows:
%USERPROFILE%\.local\share\opencode\storage\경로 사용. Python에서는os.path.expanduser('~')활용.
문제:
session_readMCP는[tool: question]이라고만 표시하고, 실제로 어떤 질문이 제시되었는지와 사용자가 어떤 선택지를 골랐는지를 노출하지 않습니다. 특히 Prometheus(기획) 에이전트 세션에서는 질문-응답(Q&A) 흐름이 기획 과정의 핵심이므로 반드시 추출해야 합니다.
3단계 저장소 구조 이해:
Session (ses_*.json) ← session_list/session_read로 접근 가능
└── Message (msg_*.json) ← session_read로 일부 접근 가능
└── Part (prt_*.json) ← MCP로 접근 불가, Raw 파일만 접근 가능
추출 방법:
1차 방법 (MCP session_read)으로 세션을 읽은 후, [tool: question]이 감지되면 반드시 아래 보충 스캔을 수행:
~/.local/share/opencode/storage/part/msg_*/prt_*.json 경로에서 해당 세션의 메시지에 속하는 Part 파일들을 탐색type == "tool" (도구 호출 Part)tool == "question" (Question 도구)state.input.questions 배열에서 각 질문의 question, options[].label, options[].description 추출state.output 문자열에서 사용자 답변 파싱. 형식: User has answered your questions: "질문1"="답변1", "질문2"="답변2"Part JSON 구조 예시:
{
"id": "prt_...",
"type": "tool",
"tool": "question",
"state": {
"status": "completed",
"input": {
"questions": [
{
"question": "어떤 기능을 포함할까요?",
"header": "기능 선택",
"multiple": true,
"options": [
{ "label": "기능A", "description": "설명..." },
{ "label": "기능B", "description": "설명..." }
]
}
]
},
"output": "User has answered your questions: \"어떤 기능을 포함할까요?\"=\"기능A, 기능B\""
}
}
DEVLOG 반영 방법:
적용 시점:
session_read 결과에 [tool: question]이 1개 이상 포함된 경우cwd 또는 working_directory 필드가 현재 프로젝트 경로와 일치하는지 확인. 해당 필드가 없으면 사용자에게 "이 세션이 현재 프로젝트의 것인가요?" 질문.~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl%USERPROFILE%\.codex\sessions\Windows:
%USERPROFILE%\.codex\sessions\경로 사용.
~/.gemini/tmp/ 하위 해시 디렉토리들의 채팅 파일 내에서 현재 프로젝트 경로가 언급되는지 확인. 매칭이 불확실하면 사용자에게 확인 질문.~/.gemini/tmp/<project_hash>/chats/~/.gemini/tmp/<project_hash>/checkpoints/ (/chat save <tag>)%USERPROFILE%\.gemini\tmp\Windows:
%USERPROFILE%\.gemini\tmp\경로 사용.
brain/ 폴더의 마크다운 아티팩트는 작업 맥락 파악용 참고자료로만 활용 (AI 생성 요약이므로 DEVLOG의 사용자 요청 원문 소스로는 사용하지 않음).pb 암호화 파일의 내용까지 접근 가능하므로 가장 완전한 대화 기록을 얻을 수 있습니다~/.gemini/antigravity/code_tracker/active/ 에서 현재 프로젝트명이 포함된 디렉토리 탐색. 또는 brain/*/task.md.resolved 파일 내 file:/// 링크에서 현재 프로젝트 경로 매칭. 매칭된 conversation-id의 아티팩트만 파싱.~/.gemini/antigravity/brain/<conversation-id>/walkthrough.md → implementation_plan.md → task.md 순으로 탐색.resolved, .resolved.N 파일 중 가장 최신 버전 사용conversations/ 폴더의 .pb 파일은 암호화되어 있어 읽기 불가 — 이 방법에서는 brain/ 마크다운만 활용 가능brain/ 아티팩트는 모두 AI 생성 문서이므로 사용자 원문이 없음. 아티팩트의 작업 내용에서 사용자가 어떤 요청을 했을지 역으로 추론하여, [추정] 표시와 함께 코드블록에 기록. 예: walkthrough.md에 "인증 모듈 구현" 내용이 있으면 → DEVLOG에 [추정] 인증 모듈을 구현해줘로 기록. 이는 2차 방법에서만 적용되는 워크어라운드이며, 원문 접근이 가능한 1차 방법에서는 불필요.공통 필터링:
<ide_opened_file> 등 IDE 메타데이터 제외[search-mode], <session-context> 등 시스템 메시지 제외.metadata.json, .resolved 파일 자체는 제외 (본문만 파싱)구조화:
**{도구명} 작업:** 헤더에 해당 도구의 실제 이름 표시사용자 요청 정리 규칙 (중요):
근데 일부만 되고 다 안채워지는데 이유가 뭐야?[Airtable 필드 자동 업데이트 중] 근데 일부만 되고 다 안채워지는데 이유가 뭐야? 개선해마지막에 추가:
git log --oneline으로 커밋 히스토리 테이블 생성DEVLOG.md 생성이 완료되면:
사용자가 요청할 수 있는 수정 유형:
표현 다듬기
구조 변경
내용 보강
제외 요청
DEVLOG.md를 기반으로 비개발자 대상 AI 활용 사례 게시글을 작성합니다.
주의: Phase 3은 사용자와의 대화형 프로세스입니다.
- Phase 3의 각 단계(맥락 질문, 제목 선정, 피드백)를 todo/task 목록에 등록하지 마세요
- 매 단계마다 사용자 답변이 필요하므로 자동 진행이 불가합니다
- todo 기반 자동 진행 훅이 반복 발동되는 것을 방지하기 위함입니다
DEVLOG.md 파일을 읽고 전체 작업 흐름 파악다음 항목들에 대해 한 번에 하나씩 질문하며 충분한 맥락 수집:
배경 (Before)
과정 (During)
결과 (After)
공유 (For Readers)
질문 규칙:
초안 작성 직전, 후킹 가능한 제목 3-4개를 추천하고 사용자에게 선택받기:
제목 추천 기준:
예시:
제목 추천드려요. 어떤 게 좋을까요?
- "비개발자가 Claude Code로 오전 2시간 만에 매출 대시보드를 만들었다"
- "스프레드시트 노가다 끝! AI로 3,500개 데이터 자동 분류한 후기"
- "개발자 없이 Airtable 대시보드 만든 비개발자의 AI 협업기"
- (직접 입력하기)
사용자가 선택하거나 수정 요청하면 반영
아래 템플릿에 맞춰 AI_CASE_STUDY.md 파일로 작성
# [사용한 도구] 제목 - 임팩트 포함
## 📝 한줄 요약
(뭘 했고, 어떤 효과가 있었는지 1-2문장)
**바쁘시면 이것만 읽어도 돼요:**
- 사용한 도구와 목표 (예: OpenCode로 ~~~ 자동화 구축, 수동 N분 → N분)
- 과정 중 깨달은 점 (예: 1개 처리와 배치 처리는 다른 전략 필요)
- 핵심 해결 방법 (예: API 없이 브라우저 자동화로 해결)
- 특별히 인상적이었던 순간 (예: AI가 엣지 케이스를 먼저 감지)
- 확장성/재사용성 (예: 다른 서비스도 파일 하나만 추가하면 확장 가능)
- 배운 교훈 (예: AI 멈춰있으면 그냥 물어보기)
## 🎯 이런 분들께 도움돼요
- 타겟 독자 1
- 타겟 독자 2
- 타겟 독자 3
## 😫 문제 상황 (Before)
(기존에 어떤 불편함이 있었는지, 구체적인 상황 묘사)
(시간/노력이 얼마나 들었는지)
(이 작업을 시작하게 된 구체적인 계기, 왜 더 이상 미룰 수 없었는지)
## 🛠️ 사용한 도구
- **도구명**: (예: Claude Code, OpenCode — 여러 도구 사용 시 모두 나열)
- **모델**: (예: Claude Opus 4.5)
- **특이사항**: (있다면)
---
## 🔧 작업 과정
DEVLOG 기반으로 실제 작업 순서대로 **스토리텔링** 형식으로 풀어씁니다.
딱딱한 "상황-요청-결과" 구조 대신, 자연스럽게 읽히는 이야기처럼 작성합니다.
### [작업 제목] - 임팩트나 느낌을 담은 소제목
(왜 이 작업을 하게 됐는지 상황 설명으로 시작)
(어떻게 요청했는지 자연스럽게 연결)
실제 사용자 질문/요청
(AI가 뭘 했는지, 결과가 어땠는지 이어서 서술)
(이 과정에서 느낀 점이나 인사이트)
---
### [다음 작업 제목]
(이전 결과를 보고 뭐가 더 필요했는지로 시작)
사용자 요청
(결과와 느낀 점)
---
### (필요한 만큼 반복 - 각 섹션은 하나의 에피소드처럼)
---
## ✅ 결과 (After)
### Before vs After
| 항목 | Before | After |
|------|--------|-------|
| 소요 시간 | | |
| 기타 | | |
### 결과물
(스크린샷, 링크 등)
## 💬 이 과정에서 배운 AI 활용 팁
### 효과적이었던 것
1. 팁 1
2. 팁 2
### 이렇게 하면 안 돼요
1. 주의점 1
2. 주의점 2
## 🌍 다른 업무에 적용한다면?
(이 경험을 다른 상황에 적용할 수 있는 아이디어)
## 🚀 앞으로의 계획
(이 결과물을 어떻게 발전시킬 예정인지)
(또는 이번 경험을 바탕으로 도전해보고 싶은 것)
## 📋 재사용 가능한 프롬프트
### 프롬프트 1: (용도)
> 프롬프트 내용
> [수정할 부분]은 본인 상황에 맞게 변경하세요
### 프롬프트 2: (용도)
> 프롬프트 내용
>)으로 포함글 작성이 완료되면, 독자 이해를 돕기 위해 최소 3개 이미지를 추천:
예시:
추천 이미지:
- "문제 상황" 섹션: 기존 방식의 불편함을 보여주는 스크린샷
- "AI와 협업한 과정" 섹션: AI와 대화하며 작업하는 터미널 화면
- "결과" 섹션: 완성된 결과물 전체 화면
📋 게시판에 올리는 방법:
1. AI_CASE_STUDY.md 파일에서 마우스 우클릭 → "미리보기 열기" (또는 Cmd+Shift+V)
2. 미리보기 화면에서 Cmd+A로 전체 선택
3. 게시판 작성 화면에 Cmd+V로 붙여넣기
4. 추천된 위치에 이미지 추가
5. 게시!