swarm56.com은 이 흩어진 활동을 한 곳에 자동으로 모아, 방문자가 "원종석이 무엇을 생각하고 무엇을 하는가" — 철학과 활동 흐름을 한눈에 보게 한다. 채널마다 쪼개진 정체성을 하나의 큐레이션된 피드로 통합하는 것이 1차 목적이다.
두 층위 — ① 산출물(Product): 위 목적을 구현한 swarm56.com(8채널 → 자동 수집 → 통합 카드 피드 + Work/Projects 문서 카드). ② 핵심 주제(Process / 연구): 그것을 만드는 과정 자체 — 이종 멀티에이전트 워크플로우(Peter의 평소 연구 주제와 직결).
산출물의 목적은 "흩어진 나를 한 곳에 모으는 허브", 그 과정의 핵심은 "이종 에이전트들이 협업해 만든 방법" — 요구사항 정리부터 디자인·구현·검증까지 전 과정을 에이전트들이 릴레이로 수행했다.
단일 AI에 전부 맡기지 않고, 이종(異種)의 AI 에이전트·도구를 오케스트레이션 / 디자인 / 구현 / 검증으로 나눠 협업. 강점이 다른 모델·도구를 조합하고 역할 간 견제·검증으로 신뢰성 확보.
VERIFICATION_CHECKLIST_v2.md) 작성 → Codex가 그에 의거 독립 검증(라운드별 commit SHA 고정·증거 기반·delta 재검증) → ChatGPT(Simone)가 Peter 자문역(체크리스트·진단 검토). 구현뿐 아니라 검증 절차 자체가 역할 분담된 멀티에이전트.| 에이전트 / 도구 | 종류 | 역할 | 시기/단계 |
|---|---|---|---|
| Antigravity | Google Gemini 에이전트 | 초기 오케스트레이터·아키텍트: 요구사항 정리·워크플로우 설계·디자인툴 선정 | 초기 (교체됨) |
| Peter (원종석) | 인간 | 오케스트레이터(공동)·결정권자·릴레이 | 전 단계 |
| ChatGPT (Simone) | OpenAI GPT | 공동 오케스트레이터 + Peter 자문역(설계·체크리스트 검토) | 오케스트레이션·자문 |
| Relume DESIGN | 디자인 AI | 사이트 구조·와이어프레임·컴포넌트 | 디자인 |
| V0 by Vercel DESIGN | 디자인 AI | UI 컴포넌트 생성(React/Tailwind) | 디자인 |
| Claude (투투/OpenClaw) | 코딩 AI | 구현·통합·문서화 + 검증 체크리스트 작성 | 구현·검증 |
| Codex | 검증 AI | 체크리스트 의거 독립 검증(증거 기반) | 검증 |
| Hermes (헤라) | 코딩 AI(별도 Claude) | 연구 보조 | 보조 |
"이종(hetero)" = 서로 다른 벤더·종류의 AI(Antigravity·Relume·V0·Claude·Codex·GPT)를 한 워크플로우에 조합.
이 워크플로우·시스템은 Boris Cherny의 Loop Engineering 철학을 설계 단계에서 반영했다 — 그래서 단계별 상태저장 + 지속 검증을 계속한다.
CLAUDE.md 헌법: 승인 추론 금지 · 계획≠실행 · 행위자 명시 · 실행증거 없는 완료보고 금지 · 메모리 무결성 · 구현(Claude)/검증(Codex) 분리. 문서는 버전 신규 작성 + 원본 보존.Slack #all-agent-collab(핸드오프 실험) · Notion Journal(업무일지·위반사례·Work Note) · 검증 산출물(VERIFICATION_CHECKLIST_v2.md).
/admin): 로그인, 피드 카드 삭제/복원/편집, 프로젝트 카드 추가, 수집 이력(SyncRun), "지금 클리핑"/"강제 갱신" 수동 트리거(요청 접수 배너), 감사 로그(KST).단방향 데이터 흐름 · 멱등성·재개 가능 · 볼트 쓰기 = 에이전트(raw/) + 백오피스 업로드(project/ 한정 예외), 웹의 raw/ 접근은 코드상 불가 · 비밀은 env로만 · 개인 규모(1GB VPS) 운영.
| 직접 쓰기 (project/ 한정 예외) — 채택 | 대기폴더+systemd 릴레이 (예외 없음) | |
|---|---|---|
| 원칙 | 한정 예외 1개 생김 | 무손상 |
| 구현/부품 | 단순 (코드 몇 줄) | .path 유닛+스크립트 추가, 반영 수 초 비동기 |
| 실질 위험 | 낮음 (raw/ 접근은 코드상 차단) | 더 낮음 (웹은 볼트 접근 자체가 없음) |
복귀 경로: 원칙 무손상이 필요해지면 중립 대기폴더 + systemd .path 릴레이(기존 트리거 패턴 재사용)로 전환 — 재설계 트리거로 정본에 등재. 상세: BACKOFFICE_FEATURE_CONTEXT_v2.md §2-③.
| 영역 | 스택 |
|---|---|
| 홈피/백오피스 | Next.js 16, React 19, TypeScript, Tailwind v4 |
| ORM/DB | Prisma 6.19, SQLite |
| 클리핑 에이전트 | Python 3.12 (requests, beautifulsoup4, markdownify, Pillow) |
| 발췌 | LLM 다중 provider → truncation fallback |
| 볼트 / 동기화 | 옵시디언(Markdown+이미지) / CouchDB livesync(sync.swarm56.com) |
| 디자인 | Relume(구조/와이어프레임), V0 by Vercel(UI 컴포넌트) |
| 배포 | AWS Lightsail(Ubuntu), systemd, Nginx, Let's Encrypt |
이 프로젝트의 심장은 "8개 채널에 흩어진 글이 어떻게 자동으로 홈페이지의 통합 피드가 되는가"다. 흐름은 단방향이며, 각 단계가 파일/DB에 상태를 남겨(상태 영속성) 언제든 재개할 수 있다. v2에서 관리 흐름(프로젝트 카드 추가)이 더해졌고 피드 파이프라인과 격리되어 있다.
단방향 흐름. Phase A=클립(중복은 content_hash로 제거), Phase B=파생(raw/만 대상). 관리 흐름(v2)=프로젝트 카드 추가 — 피드 파이프라인과 완전 격리(raw/ 무접촉), 감사 로그 PROJECT_ADD. * LinkedIn·Facebook은 현재 빈 채널.
삭제 키 = originalUrl. 모든 변경은 원자적 트랜잭션 — 재실행해도 안전(멱등). 피드 카드에만 해당(프로젝트 카드는 추가 전용).
AWS Lightsail VPS (Ubuntu) · 앱 /opt/swarm56/app · 볼트 /var/lib/swarm56/vault-v5 · DB /var/lib/swarm56/web/site-v5.db · 문서 /var/lib/swarm56/web/docs. (서버 주소·SSH는 로컬 전용 문서·메모리 참조)
| 모듈 | 역할 |
|---|---|
main.py | Phase A/B 오케스트레이터, SWARM56_FORCE=1=강제 재클립 |
collectors/ | 채널별 수집(naver_blog·github·youtube·notion·swarm·instagram·facebook) |
vault.py · db.py | 볼트 입출력·dedup / frontmatter→FeedCard 파생·suppression·SyncRun |
images.py · excerpt.py | 본문이미지→webp(SSRF·재인코딩) / LLM 발췌→truncation |
settings.py | env 설정(경로·토큰·키·상한) |
| 모듈 | 역할 |
|---|---|
app/page.tsx · app/admin/ | 홈페이지 / 백오피스(가드·로그인·서버액션·edit-card·카드 추가 폼) |
components/ | hero·about·header·footer·feed-card · projects-section = DB 렌더링 v2 |
lib/admin-repo.ts | 삭제(방식B)·복원·편집·트리거·감사로그 + listProjectCards·addProjectCard(업로드 검증·롤백) v2 |
lib/auth.ts · feed-repository.ts · md-frontmatter.ts | 인증(bcrypt·세션·rate limit) / 조회 / 볼트 파싱(복원) |
prisma/schema.prisma | FeedCard · ProjectCard v2 · SuppressionRecord · AdminAudit · SyncRun |
| 채널 | 상태 | 수집 |
|---|---|---|
| 네이버블로그·GitHub·YouTube·Notion·Swarm·Instagram | LIVE | RSS / API / 스크래핑 |
| LinkedIn · Facebook | 빈 채널 | 공식 API 제약 → UI 플레이스홀더(자동수집 안 함) |
볼트 노드/링크를 홈피에 그래프뷰로 (직접구현 / Quartz / Obsidian Publish). 볼트가 이미 서버에 있어 거기서 추출 — 백오피스 카드 추가가 MD를 project/에 쌓으므로 지식그래프 소스가 자동 축적됨.
볼트 임베딩 → 의미검색·질의응답("내 글에게 물어보기").
KNOWN_ISSUES_v2.md./opt/swarm56/app(npm start), DB site-v5.db, 볼트 vault-v5, 문서 /var/lib/swarm56/web/docs, 에이전트 /opt/swarm56/agent. systemd swarm56-web·swarm56-agent.timer·swarm56-clip/force.{path,service}. 접속 정보는 로컬 전용 문서·메모리 참조.v5build git pull → 변경 파일만 cp → npm run build → restart → DEPLOYED_SHA 갱신. dir 전체 swap 금지(.env 보호)./admin에서 직접(런북: BACKOFFICE_FEATURE_CONTEXT_v2.md §6).app.old-*·구 DB·백업 보존. 문구 수정: components/홈피_문구_수정가이드.md.