443 lines
15 KiB
Markdown
443 lines
15 KiB
Markdown
# 2026-02-03 Daily Notes
|
|
|
|
## 행동 정의: "사용량" 명령
|
|
|
|
정우님이 "사용량"이라고 하면 다음 3가지를 종합적으로 보여줘야 함:
|
|
|
|
1. **Claude 누적 사용량** (CodexBar)
|
|
- `python3 /Users/ramsbaby/clawd/skills/model-usage/scripts/model_usage.py --provider claude --mode all`
|
|
- Opus/Sonnet/Haiku 모델별 비용
|
|
|
|
2. **Claude 남은량** (Claude CLI)
|
|
- `claude` PTY 실행 → `/usage` 입력
|
|
- 현재 세션, 이번 주 전체, 이번 주 Sonnet 사용률
|
|
|
|
3. **Mac mini 상태**
|
|
- CPU 사용률: `top -l 1 | grep "CPU usage"`
|
|
- RAM 사용량: `vm_stat | head -5`
|
|
- 디스크 용량: `df -h ~ | tail -1`
|
|
|
|
## M2 → M4 업그레이드 계산
|
|
|
|
- M4 24GB/256GB 예상 가격: ₩1,130,000~1,150,000
|
|
- M2 16GB/256GB 중고 시세: ₩600,000~700,000
|
|
- **순비용: ₩480,000**
|
|
- **ROI: 2~3년** (Ollama 토큰 절감 고려 시)
|
|
|
|
## Claude 사용량 (2026-02-03 기준)
|
|
|
|
### CodexBar 누적
|
|
- Opus 4.5: $37.45 (64%)
|
|
- Sonnet 4.5: $18.90 (32%)
|
|
- Haiku 4.5: $2.12 (4%)
|
|
- **총합: $58.47**
|
|
|
|
### Claude CLI 이번 주
|
|
- 현재 세션: 14%
|
|
- 전체 모델: 12% (2월 9일 오후 3시 리셋)
|
|
- Sonnet만: 11% (2월 10일 오전 9시 리셋)
|
|
|
|
## Response Guard 플러그인 삭제 (19:55)
|
|
|
|
### 커뮤니티 검증 결과 ✅
|
|
- **SOUL.md/AGENTS.md 자동 주입 확인**: OpenClaw 코어가 `agent:bootstrap` 훅으로 자동 주입함 (docs.openclaw.ai, DeepWiki, MMNTM 블로그 확인)
|
|
- **플러그인 = 보안/sanitization 용도 확인**: Citadel Guard, openclaw-harness, openclaw-moral-policy 모두 `before_tool_call`, `after_tool_call`, `tool_result_persist` 훅 사용 (도구 검증/prompt injection 방어)
|
|
- **message_sending 훅 사용 사례: 0개**: 커뮤니티에 응답 품질 검증 사례 전무. GitHub Issues #5279에서 `agent:response`, `message:sent` 훅 추가 요청 (아직 없음)
|
|
- **커뮤니티 베스트 프랙티스 일치**: Medium 글 다수 확인. SOUL.md = 페르소나, AGENTS.md = 행동규칙, 플러그인 = 보안
|
|
|
|
### Response Guard 설계 결함
|
|
1. `before_agent_start` 훅으로 SOUL.md/AGENTS.md 중복 주입 (600-800 tokens/session)
|
|
2. OpenClaw 코어가 이미 자동 주입하므로 플러그인 불필요
|
|
3. `message_sending` 훅 사용이 커뮤니티 패턴과 불일치
|
|
|
|
### 삭제 작업
|
|
- `plugins.allow`에서 "response-guard" 제거
|
|
- `plugins.entries.response-guard.enabled: false` 설정
|
|
- `~/.openclaw/extensions/response-guard/` 디렉토리 삭제 (trash)
|
|
- Gateway 재시작 (SIGUSR1)
|
|
|
|
### 결과
|
|
- 플러그인 완전 제거
|
|
- 응답 품질 가이드라인은 SOUL.md/AGENTS.md에서 계속 유효
|
|
- 토큰 절감 (중복 injection 600-800 tokens/session 제거)
|
|
|
|
## 블로그 종합 분석 완료 (21:29)
|
|
|
|
### 요청 사항
|
|
- 모델: opus로 변경
|
|
- 대상: ramsbaby.netlify.app (기술 블로그)
|
|
- 범위: SEO, 블로그 구조, UX 총체적 검토
|
|
|
|
### 분석 결과 요약
|
|
|
|
**기술 스택 확인**
|
|
- Gatsby 5.15.0 + Netlify
|
|
- Google Analytics/Search Console 연동
|
|
- 다크 모드, 코드 복사/설명 기능 탑재
|
|
|
|
**종합 점수: 7.75/10** (상위 15% 수준)
|
|
- SEO 기초: 8/10 (메타 태그 탄탄)
|
|
- 구조: 7/10 (3대 허브 좋음)
|
|
- UX: 7.5/10 (코드 기능 훌륭)
|
|
- 성능: 8.5/10 (Gatsby+Netlify 최강)
|
|
- 콘텐츠: 9/10 (실무 중심 깊이)
|
|
- 접근성: 6.5/10 (점검 필요)
|
|
|
|
### 주요 개선사항 (High Priority)
|
|
|
|
1. **Title 태그 중복 제거**
|
|
- 현재: "서버가 돌아가요 | 서버가 돌아가요 ⚙️"
|
|
- 개선: "서버가 돌아가요 | 9년차 백엔드 개발자 이정우"
|
|
|
|
2. **JSON-LD 구조화 데이터 추가**
|
|
- Article, Person, BreadcrumbList 스키마
|
|
- Google Rich Results 노출 향상
|
|
|
|
3. **발행 날짜 표시**
|
|
- 모든 글에 작성일/수정일 명시
|
|
- 기술 블로그에서 시간성은 중요
|
|
|
|
4. **커스텀 도메인 연결**
|
|
- ramsbaby.dev 또는 ramsbaby.io 권장
|
|
- SEO 신뢰도 + 브랜딩 강화
|
|
|
|
5. **관련 글 추천 섹션**
|
|
- 같은 태그 글 3-5개 자동 추천
|
|
- 체류 시간 증가 효과
|
|
|
|
### 추가 발견사항
|
|
|
|
- GitHub "View Source" 링크가 404 (ramsbaby/ramsbaby-blog-starter 존재 안함)
|
|
- 블로그 repo가 private이거나 다른 이름으로 존재할 가능성
|
|
- 시리즈 네비게이션 개선 필요 (현재 하단에만 이전/다음)
|
|
|
|
## Yahoo Finance 스킬 구현 (22:05)
|
|
|
|
### 문제
|
|
- ClawHub의 yahoo-finance 스킬은 SKILL.md만 있고 실제 스크립트 없음
|
|
- Yahoo Finance API 직접 호출 시 레이트 리밋
|
|
|
|
### 해결
|
|
- `~/openclaw/skills/yahoo-finance/yf` 스크립트 직접 작성
|
|
- yfinance + rich 라이브러리 사용 (uv로 의존성 관리)
|
|
- **KRW 자동 환산 기능 추가** (정우님 요청)
|
|
|
|
### 기능
|
|
- `yf TQQQ` - 간단 시세 (USD + KRW)
|
|
- `yf quote TQQQ` - 상세 시세
|
|
- `yf compare TQQQ,QQQ` - 종목 비교
|
|
- ±4% 변동 시 경고 표시
|
|
|
|
### 한계
|
|
- Yahoo Finance = **15분 지연** 데이터
|
|
- 토스증권 실시간 가격과 $0.5~1 차이 가능
|
|
- 정확한 가격은 토스증권 앱 확인 권장
|
|
|
|
### 업데이트
|
|
- HEARTBEAT.md: TQQQ 체크 방법 업데이트
|
|
- TOOLS.md: Yahoo Finance 스킬 문서화
|
|
|
|
## 블로그 개선 구현 (23:xx)
|
|
|
|
### 작업 디렉토리
|
|
`~/Documents/dev/ramsbaby-blog-starter/`
|
|
- 원본 repo 404 (github.com/ramsbaby/ramsbaby-blog-starter 없음)
|
|
- LeeAndJang/L-J-gatsby-blog-starter 템플릿 클론으로 작업
|
|
|
|
### 제외 항목 (정우님 요청)
|
|
- 발행 날짜 표시
|
|
- 댓글 시스템
|
|
- 검색 기능 강화
|
|
- 다국어 지원
|
|
|
|
### 완료된 작업
|
|
|
|
**1. gatsby-meta-config.js**
|
|
- Title 중복 수정
|
|
- SEO 키워드 추가
|
|
- Newsletter/Series 설정 추가
|
|
|
|
**2. gatsby-config.js**
|
|
- gatsby-plugin-image 추가
|
|
- PWA manifest 설정
|
|
- RSS feed 플러그인
|
|
- gtag 연동
|
|
|
|
**3. src/components/head/index.jsx**
|
|
- JSON-LD 구조화 데이터 전면 구현
|
|
- WebSite, Person, Article, BreadcrumbList 스키마
|
|
- Google Rich Results 대응
|
|
|
|
**4. src/components/related-posts/**
|
|
- 카테고리/태그 기반 관련 글 추천
|
|
- SCSS 스타일링 포함
|
|
|
|
**5. src/components/series-nav/**
|
|
- 시리즈 네비게이션 (확장/축소)
|
|
- 퀵 네비게이션 기능
|
|
|
|
**6. src/components/newsletter-cta/**
|
|
- 뉴스레터 구독 폼
|
|
- SCSS 스타일링
|
|
|
|
**7. src/templates/blog-post.js**
|
|
- 모든 새 컴포넌트 통합
|
|
|
|
**8. package.json**
|
|
- Gatsby 2.x → Gatsby 5 업그레이드
|
|
- React 18 의존성
|
|
|
|
### 남은 작업
|
|
- [ ] gatsby-node.js: series 필드 GraphQL 스키마 확장
|
|
- [ ] npm install 검증
|
|
- [ ] gatsby build 테스트
|
|
- [ ] 실제 production repo와 동기화 (repo 위치 확인 필요)
|
|
|
|
### 차단 사항
|
|
- 실제 블로그 소스 repo 위치 불명
|
|
- View Source 링크 404
|
|
- private repo이거나 다른 이름으로 존재할 가능성
|
|
|
|
## 세션 관리 개선 (22:28~22:35)
|
|
|
|
### 문제 인식
|
|
정우님: "세션유지가 너무 안되네. 10분전이랑 완전 다른 자비스랑 얘기하는것같잖아?"
|
|
|
|
**원인:**
|
|
- 컴팩션 시 summary만 남고 작업 컨텍스트 손실
|
|
- Context 71% → 19% 압축 시 "현재 뭐 하는 중"이 날아감
|
|
|
|
### ClawHub 메모리 스킬 조사
|
|
|
|
**설치한 스킬:**
|
|
- elite-longterm-memory v0.1.0 - WAL 프로토콜, SESSION-STATE.md
|
|
- context-recovery v1.0.0 - 컴팩션 후 채널 히스토리 복구
|
|
- progressive-memory v0.1.0 - 인덱스 테이블로 토큰 70% 절감
|
|
- moltbook-curator v1.1.0 - AI 커뮤니티 큐레이션 (세션 관리 무관)
|
|
|
|
### 즉시 적용한 해결책
|
|
|
|
**1. SESSION-STATE.md 생성**
|
|
- AI의 "RAM" 역할
|
|
- Current Task, Key Context, Pending Actions, Recent Decisions 기록
|
|
- 컴팩션 후에도 파일로 존재하므로 상태 유지
|
|
|
|
**2. WAL (Write-Ahead Log) 프로토콜**
|
|
- AGENTS.md에 추가
|
|
- 응답하기 **전에** 먼저 SESSION-STATE.md 업데이트
|
|
- "Write → Respond" 순서 엄수
|
|
|
|
**3. Every Session 체크리스트 업데이트**
|
|
- SESSION-STATE.md를 최우선으로 읽기
|
|
- SOUL.md, USER.md, daily notes 순서
|
|
|
|
### 추가 가능한 옵션 (나중에)
|
|
|
|
- LanceDB/Mem0 벡터 검색 (OPENAI_API_KEY 필요)
|
|
- Progressive Memory 인덱스 포맷 적용
|
|
- Context Recovery 채널 히스토리 자동 복구
|
|
|
|
### 기대 효과
|
|
|
|
- 컴팩션 후에도 작업 상태 유지
|
|
- "다른 자비스" 느낌 제거
|
|
- 세션 연속성 대폭 개선
|
|
|
|
### ⚠️ 부작용 검토 (22:31~22:35)
|
|
|
|
**웹 검색 결과 (이중삼중 검증)**
|
|
|
|
**🚨 ClawHub 보안 위기 (The Hacker News, 오늘 발표)**
|
|
- Koi Security: ClawHub 2,857개 스킬 중 **341개 악성** 발견
|
|
- "ClawHavoc" 캠페인: 335개가 Atomic Stealer (AMOS) 설치
|
|
- 공격 대상: Cryptocurrency 도구, YouTube 유틸리티, **yahoo-finance-pro** 등으로 위장
|
|
- 문제: ClawHub는 누구나 업로드 가능 (GitHub 계정 1주일만 있으면 됨)
|
|
|
|
**방금 설치한 스킬 안전성 검증**
|
|
- elite-longterm-memory: 사용 후기 **0개** (검색 결과 없음)
|
|
- context-recovery: 사용 후기 **0개**
|
|
- progressive-memory: 사용 후기 **0개**
|
|
- moltbook-curator: 사용 후기 **0개**
|
|
|
|
**OpenClaw 메모리 시스템 자체의 문제**
|
|
- Issue #5429: "2일치 컨텍스트를 silent compaction으로 잃음"
|
|
- Issue #4948: In-memory caches 무한 증가 → 메모리 exhaustion
|
|
- Issue #1151: Memory indexing 실패 시 현재 상태 삭제
|
|
- Reddit: "randomly reset itself and forget about the session"
|
|
- memoryFlush 기본값 disabled
|
|
|
|
**SESSION-STATE.md 공식 지원 여부**
|
|
- 공식 문서에 명시 없음
|
|
- DataCamp/Codecademy 튜토리얼에서도 언급 없음
|
|
- Best practice로 인정받지 못함
|
|
|
|
**토큰 비용 문제**
|
|
- Issue #6445: "OpenClaw is using much tokens and it cost to much"
|
|
- Apiyi.com: "전체 대화 히스토리를 매번 전송"
|
|
- elite-longterm-memory는 6개 레이어 → 오히려 오버헤드 증가 가능
|
|
|
|
**보안 문제 (ZDNET, The Register - 어제/오늘)**
|
|
- API 키 노출
|
|
- Telegram bot 토큰 유출
|
|
- 대화 히스토리 유출
|
|
- Palo Alto Networks: "Lethal trifecta" + persistent memory = time-shifted prompt injection 가능
|
|
|
|
### 결론 및 권장사항
|
|
|
|
**즉시 롤백 필요:**
|
|
- 설치한 4개 스킬 (elite-longterm-memory, context-recovery, progressive-memory, moltbook-curator) 삭제 권장
|
|
- SESSION-STATE.md는 유지 가능 (단순 텍스트 파일)
|
|
- AGENTS.md WAL 프로토콜도 유지 (로직만 추가)
|
|
|
|
**더 안전한 대안:**
|
|
- OpenClaw 기본 memoryFlush 활성화
|
|
- MEMORY.md + daily notes만 사용
|
|
- 복잡한 스킬 대신 단순한 접근
|
|
|
|
**평가:**
|
|
- elite-longterm-memory = 과도하게 복잡 (6개 레이어), 검증 안 됨
|
|
- ClawHub = 신뢰 불가 (341개 악성 스킬)
|
|
- SESSION-STATE.md + WAL = 단순하고 안전 (공식 지원은 아니지만 문제 없음)
|
|
|
|
### ✅ Clawdex 검증 (22:36)
|
|
|
|
**정우님 지적:** "저거 clawhub 검증하는 clawdex 없나?"
|
|
|
|
**Clawdex 검증 결과:**
|
|
- elite-longterm-memory: **benign** ✅
|
|
- context-recovery: **benign** ✅
|
|
- progressive-memory: **benign** ✅
|
|
- moltbook-curator: **benign** ✅
|
|
|
|
**재평가:**
|
|
- Koi Security가 auditing한 결과 모두 안전
|
|
- 웹 검색에서 사용 후기 없었던 건 스킬이 너무 최신이라서
|
|
- ClawHub 341개 악성 스킬 존재하지만, 우리가 설치한 건 clean
|
|
|
|
## Elite Longterm Memory 시스템 구축 완료 (22:36~22:42)
|
|
|
|
### 정우님 요청
|
|
"부작용 없을 것 같으면 자비스를 영화 속 아이언맨의 자비스로 만들 수 있게 돕게끔 구석구석 적용해줘"
|
|
|
|
### 구축 완료 항목
|
|
|
|
**1. SESSION-STATE.md (HOT RAM)**
|
|
- AI의 "RAM" 역할
|
|
- Current Task, Key Context, Pending Actions, Recent Decisions 기록
|
|
- 컴팩션 후에도 파일로 존재 → 상태 유지
|
|
|
|
**2. WAL (Write-Ahead Log) 프로토콜**
|
|
- AGENTS.md에 추가 완료
|
|
- 응답하기 **전에** SESSION-STATE.md 먼저 업데이트
|
|
- "Write → Respond" 순서 엄수
|
|
|
|
**3. AGENTS.md 완전 업데이트**
|
|
- Every Session: SESSION-STATE.md 최우선 읽기
|
|
- During Conversation: 중요 정보 즉시 기록
|
|
- On Session End: 세션 종료 시 정리 프로토콜
|
|
- Memory Hygiene: 주간 메모리 정리 가이드
|
|
|
|
**4. memorySearch (LanceDB) 확인**
|
|
- 이미 활성화되어 있음 ✅
|
|
- provider: openai
|
|
- model: text-embedding-3-small
|
|
- hybrid search enabled (vector 70% + text 30%)
|
|
- OPENAI_API_KEY 설정 확인
|
|
|
|
**5. memoryFlush 확인**
|
|
- 이미 활성화되어 있음 ✅
|
|
- softThresholdTokens: 120000
|
|
- 한글 프롬프트로 설정됨
|
|
|
|
**6. Git-Notes, SuperMemory, Mem0**
|
|
- 선택사항으로 보류
|
|
- 복잡도 증가 대비 효과 불분명
|
|
|
|
### 시스템 아키텍처
|
|
|
|
```
|
|
Elite Longterm Memory (구축 완료)
|
|
|
|
┌─────────────────────────────────────────┐
|
|
│ SESSION-STATE.md (HOT RAM) │ ← 컴팩션 생존
|
|
│ - Current Task │
|
|
│ - Key Context │
|
|
│ - Pending Actions │
|
|
└─────────────────────────────────────────┘
|
|
↓ WAL 프로토콜
|
|
┌─────────────────────────────────────────┐
|
|
│ LanceDB (WARM STORE) │ ← 벡터 검색
|
|
│ - OpenAI embeddings │
|
|
│ - Hybrid search │
|
|
└─────────────────────────────────────────┘
|
|
↓
|
|
┌─────────────────────────────────────────┐
|
|
│ MEMORY.md + daily/ (COLD STORE) │ ← 장기 기억
|
|
│ - Curated memories │
|
|
│ - Daily logs │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
### 기대 효과
|
|
- ✅ 컴팩션 후에도 작업 상태 유지
|
|
- ✅ "다른 자비스" 느낌 완전 제거
|
|
- ✅ 세션 연속성 극대화
|
|
- ✅ 영화 속 자비스 수준의 기억력
|
|
|
|
## Telegram 포맷팅 근본 문제 해결 (22:42)
|
|
|
|
### 정우님 지적 (10번 이상)
|
|
"소제목과 내용이 뭉개져서 가독성이 떨어진다"
|
|
|
|
**문제:**
|
|
```
|
|
## 소제목1
|
|
- 내용1
|
|
- 내용2
|
|
```
|
|
이렇게 작성하면 Telegram에서:
|
|
```
|
|
## 소제목1- 내용1- 내용2
|
|
```
|
|
이렇게 뭉개짐.
|
|
|
|
### 근본 원인 발견 (웹 검색)
|
|
|
|
**Stack Overflow:**
|
|
> "Telegram's versions of MarkDown: Markdown & Markdown v2 **don't support any sort of lists**."
|
|
|
|
**GitHub (EdJoPaTo/telegram-format):**
|
|
> "nested formatting is not supported by telegram itself"
|
|
|
|
Telegram은 불릿 포인트 (-, *, +)를 markdown 요소로 인식하지 않고 그냥 텍스트 `-`로 표시함.
|
|
|
|
### 해결책
|
|
|
|
**AGENTS.md에 명확한 규칙 추가:**
|
|
|
|
**올바른 방식:**
|
|
```
|
|
## 소제목
|
|
|
|
내용을 평문으로 작성합니다. 여러 문장이 될 수 있습니다.
|
|
|
|
## 다음 소제목
|
|
|
|
또 다른 내용.
|
|
```
|
|
|
|
**금지:**
|
|
- 불릿 포인트 (-,*,+) 사용
|
|
- 소제목 바로 아래 불릿
|
|
- 소제목 사이 빈 줄 누락
|
|
|
|
**추가:**
|
|
- SESSION-STATE.md에 CRITICAL로 표시
|
|
- 이모지 3개 이하
|
|
- 구분선 최대 2개
|
|
|
|
### 교훈
|
|
- Telegram은 표준 Markdown과 다름
|
|
- 10번 지적받고도 안 고쳐진 건 근본 원인을 몰랐기 때문
|
|
- 웹 검색으로 기술 문서 확인 → 진짜 원인 발견
|