🤖 이대리 · personal_agents
Slack 에서 PM · 리뷰어 · PO · CEO 를 1인 개발자가 부리는 멀티 에이전트 업무 자동화 봇
수동 슬래시 · 자연어 멘션 · GitHub Webhook · 자동 Cron 을 한 백엔드로 묶는다.
✨ 무엇을 하나
GitHub · Notion · Slack · 증권 시세를 연결해 회사 롤플레이 역할(PM · Work Reviewer · Code Reviewer · PO · CEO …), 개인 업무(이직 메이트 · 지원 추적 · 휴가 · 블로그), 투자 라인(종목 감시 · 모의투자 추천·채점)을 함께 수행하는 1인 개발자용 비서 백엔드.
| 🗣️ 두 가지 진입 | Slack slash command, 또는 @이대리 오늘 plan 짜줘 자연어 멘션·DM |
| 🎭 회사 롤플레이 | 한 사람이 PM · 리뷰어 · PO · CEO 역할을 LLM 워커로 분담 |
| ⚡ 자동 실행 | 출근/퇴근/주간 cron + GitHub webhook 으로 사용자 입력 없이 돈다 — 대부분은 Slack 으로 보고하고, 뒷정리·폴링 성격의 4슬롯은 처리한 게 있을 때만 알린다 |
| 📈 투자 라인 | KRX 전종목을 훑어 후보를 추리고, 가상 계좌로 사고팔아 추천 규칙의 성적을 남긴다 |
| 🧠 장기 기억 | 과거 작업을 pgvector 의미검색으로 회상해 분류·리뷰 품질 강화 |
| 🔁 자기 학습 | PR 리뷰의 채택/기각을 수확해 다음 리뷰 프롬프트에 되먹인다 |
| 🛡️ 승인 게이트 | 외부 시스템 쓰기는 항상 Slack ✅/❌ 확인 후 실행 |
자동화 규칙 AGENTS.md · 코드 컨벤션 CODE_RULES.md · 한국어 기술 블로그 채점표 docs/korean-it-tech-blog-scorecard.md
🧩 아키텍처
flowchart TD
subgraph IN["진입점"]
direction LR
S["슬래시 커맨드"]
M["@이대리 멘션·DM"]
W["GitHub Webhook"]
C["Autopilot Cron"]
end
R["Router<br/>Intent Classifier"]
MR["Model Router<br/>codex CLI · 격리 spawn"]
WK["Dispatch Workers (자연어·슬래시)<br/>+ 내부 자동화 에이전트<br/>PM · Reviewer · PO · CEO<br/>이직 메이트 · 지원 추적 · 휴가 · 블로그"]
IV["투자 라인<br/>screener · market-data<br/>paper-trading · backtest"]
PG{"Preview Gate<br/>✅ / ❌"}
EXT["Slack · Notion · GitHub"]
EM[("Episodic Memory<br/>pgvector")]
AR[("AgentRun<br/>PostgreSQL")]
MD[("시세·모의계좌<br/>PostgreSQL")]
S --> R
M --> R
R -. few-shot .-> EM
R --> MR --> WK
W --> WK
C --> WK
C --> IV
IV --> MD
IV --> AR
WK --> PG --> EXT
WK --> AR
WK -. 기록 .-> EM
도메인마다 같은 DDD/Hexagonal 레이어를 쓴다.
src/{domain}/
domain/ # 엔티티, Port 인터페이스, 도메인 검증
application/ # 유스케이스
infrastructure/ # Port 어댑터 (DB · 큐 · 외부 API)
interface/ # Controller, DTO, 큐 Provider
src/common, src/config, src/prisma # 공통 · env 검증 · PrismaService(Global)
prisma/schema.prisma # DB 단일 소스 (상당수가 시세·모의투자 모델)
✅ 만든 것
|
🏗️ 기반 NestJS 11 + DDD/Hexagonal · Prisma 6 + PostgreSQL · Redis/BullMQ · Slack Bolt 4(Socket Mode). Model Router 는 모든 에이전트의 primary 요청을 모든 실행은 AgentRun 에 기록되고 근거는 EvidenceRecord 로 따라붙는다. 외부 쓰기는 Preview Gate 하나가 공통으로 승인을 받는다. |
🧠 장기 기억 (Episodic Memory) 과거 작업을 pgvector 로 의미 검색하고, 오래된 기록일수록 점수를 낮춘다( 주로 두 곳이 읽어 간다. Intent Classifier 는 비슷한 과거 작업을 예시로 앞에 붙여 분류 정확도를 올린다. PM 은 비슷한 과거 계획을 찾아 오늘 계획에 참고로 붙인다 — 한국어는 전문검색 매칭이 약해 의미검색 쪽을 우선한다. 코드 리뷰의 기각 학습은 여기를 쓰지 않는다. 의미검색으로 사례를 찾아 넣어도 행동이 바뀌지 않아 규약 경로로 옮겼다(아래 «스스로 배우는 코드 리뷰»). |
|
⚡ 자동화 (Autopilot) 출근·퇴근·주간 cron 이 엔진 하나를 공유한다. 무엇을 언제 돌릴지는 선언형 "워크데이 플레이북"에 적고, 오케스트레이터는 그 선언을 실행만 한다(시간표). 읽기 작업은 바로 발송하고 외부 쓰기는 Preview Gate 를 거친다. 여러 대상에 fan-out 하거나 한 묶음(digest)으로 보낼 수 있고, 같은 날 두 번 돌아도 결과가 같으며, 활동이 0 이면 건너뛴다. 전체 on/off 는 |
🔀 자연어 라우터 (V3 Hierarchical Manager) 멘션 하나가 워커에 닿기까지 LLM 호출은 한 번뿐이다. Intent Classifier 가 의도를 분류해 등록된 워커 중 하나로 넘긴다(목록은 router.module.ts 의 직전 대화를 기억한다 — 사용자·채널·스레드 단위로 5턴, TTL 30분(Redis, 실패 시 in-memory fallback). 그래서 "그거 분배해" 같은 지시대명사가 직전 실행을 자동으로 가리킨다. 워커끼리 넘긴 기록은 |
|
📈 투자 라인 축이 둘이다. 실계좌 감시는 평일 장 마감 뒤 토스증권 잔고를 읽어 급등락·평단 대비 손익이 임계에 닿으면 알린다. 모의투자는 KRX 전종목(유니버스)을 훑어 후보를 추리고, 가상 계좌로 사고팔아 추천 규칙의 성적을 남긴다 — 실제 주문은 나가지 않는다. 추천은 스스로를 채점한다. 지난 회차 성적을 다음 회차 프롬프트에 되먹이고, 벤치마크(코스피) 대비 초과 수익으로 규칙의 값어치를 잰다. 목표와 현재 위치는 tasks/goals-invest-line.md 에 있다 — 모의투자 고도화 → 실거래 → 추천 서비스 3단계. |
🔁 스스로 배우는 코드 리뷰 봇이 PR diff 를 읽어 인라인 코멘트로 지적을 달고( 기각된 지적은 자기 저장소에 한해 그 기각 이유가 규약이 되어 다음 리뷰의 프롬프트에 실린다(유효기간이 지나면 저절로 빠진다). 예시로 덧붙이기만 하던 이전 방식은 같은 지적이 3연속 기각되고도 계속 나왔다 — 그래서 예시가 아니라 규약이다. 사례를 쌓던 episodic 경로는 읽는 곳이 사라져 걷어냈다. |
🎭 에이전트
전체 AgentType 은 내부 자동화까지 포함하며, 종수와 최신 표는 자동 생성 문서 docs/agent-catalog.md 가 기준이다. 아래는 사용자가 직접 체감하는 것만 추린 것이다.
- 회사 롤플레이 — PM
/today· Work Reviewer/worklog· Code Reviewer/review-pr· PO Shadow/po-shadow· Impact Reporter/impact-report· PO_EVAL/po-eval· CEO/ceo-review - 승인형 실행 — 사용자 승인 기반 branch + commit + PR open preview (문서 감사 · 블로그 발행)
- 개인 업무 — 이직 메이트(merged PR 합성 → 역량 프로필 → 이력서/포트폴리오, JD 갭 분석) · 지원 추적 CRM(등록/상태/넛지 cron) · 휴가
/휴가(입사일 기반 결정론 계산) · 블로그 릴레이(Hermestistory-blog스킬 → Notion 초안) - 투자 — INVEST(보유 종목 감시, LLM 미사용) · PAPER_RECOMMEND(후보 추천) · PAPER_TRADE(가상 계좌 매매) — 셋 다 cron 발화, PAPER_TRADE 만 자연어 dispatch 가 있다
- 내부 자동화 — Humanizer · Subconscious Gate · Contradiction Judge · Docs Audit Optimizer/Evaluator · Preference Learning · Evening Retro Publish · Ops Supervisor · Review Reply Judge · CTO Study
🔌 외부 연동
- GitHub — issue/PR 이벤트를 webhook 으로 받아 자동 발화 (이벤트별 매핑)
- Notion — Daily Plan append · PR careerLog 일별 자식 페이지 누적 · 📌 reaction → to-do 적재
- 증권 시세 — 토스증권에서 잔고·일봉·코스피 지수를 읽어 온다(읽기 전용, 주문 API 없음)
- 운영 —
/search-runs(성공 run ILIKE 검색) ·/retry-run(실패 run 재실행) · docs-sync-audit · 인증/cron 실패 owner DM 알림
🚀 빠른 시작
pnpm install # Prisma Client 생성 (DATABASE_URL 불필요)
cp .env.example .env # 부팅 전 필수
pnpm db:up # PostgreSQL(5434) + Redis(6381) 컨테이너 기동
pnpm db:push # 스키마 동기화 (synchronize, 마이그레이션 파일 X)
pnpm dev # watch 모드 기동
사전 요구사항 — Node 22.13+, pnpm 9+, Docker, 로그인된
codexCLI(ChatGPT). CLI 는 prompt-injection 방지를 위해 임시 디렉토리 + env allowlist 로 격리 실행한다(cli-process.util.ts).검증 — 로컬은
pnpm lint:check && pnpm test && pnpm build3중 green +node --env-file=.env scripts/check-di.cjs(DI 배선). CI 는 여기에check:env·docs:check·check:invariants·test:e2e를 더 돌린다.
🔌 인터페이스
| 진입 | 무엇 | 인증·게이트 |
|---|---|---|
| 슬래시 커맨드 | 에이전트 호출 · 휴가 · 운영 | Slack Socket Mode |
| 자연어 멘션·DM | Router 가 워커 중 하나로 분류·dispatch | app_mention + message.im 구독 |
| GitHub Webhook | issue/PR 이벤트로 자동 발화 | HMAC 서명 검증 |
| Autopilot cron | 출근·퇴근·주간 정기 실행 | AUTOPILOT_OWNER_SLACK_USER_ID |
| macOS 콘솔 앱 | Slack 없이 회사 전체를 보고 조작 | CONSOLE_OWNER_SLACK_USER_ID |
슬래시 커맨드
| Command | 설명 | 모델 |
|---|---|---|
/today /worklog /po-shadow /impact-report /review-pr /po-eval /ceo-review |
전체 에이전트 (계획 · 회고 · PR 리뷰 · PO · CEO) | 🟢 ChatGPT(codex) |
/휴가 |
연차 계산 / 등록 / 취소 (결정론, LLM 미사용) | ⚪ — |
/blog-publish [제목일부] |
Notion 초안 익명화 → 승인 후 GitHub 블로그 발행 | 🟢 ChatGPT(codex) |
/sync-plan /sync-context /quota /ping /retry-run /search-runs /review-feedback |
동기화 · 운영 · 검색 · 피드백 | ⚪ — |
자연어 멘션 · DM
@이대리 …(채널) 또는 DM 으로 보내면 Router 가 워커 중 하나로 분류해 dispatch 한다. 결과는 thread 답글로 오고 푸터에 agentRunId 가 붙는다.
-
VIDEO_WATCH —
@이대리 이 영상의 핵심을 설명해줘 https://youtu.be/<video-id>처럼 유튜브 URL과 질문을 함께 보내면 자막·화면 프레임을 분석하고 근거 시각 링크를 답한다. 준비:brew install yt-dlp ffmpeg,git clone --branch v0.3.2 --depth 1 https://github.com/bradautomates/claude-video.git ~/.idaeri/vendor/claude-video, 그리고.env의WATCH_SCRIPT_PATH를 해당skills/watch/scripts/watch.py절대 경로로 설정한다. 실행은 로컬 엔진과--no-whisper만 사용한다. -
BLOG · 이직 메이트 · 지원 추적 — 자연어 전용. 기존 Notion 초안 발행은
BLOG_PUBLISH가 자연어와/blog-publish를 모두 지원 -
VACATION —
/휴가와 자연어 둘 다 지원
필요한 이벤트 구독과 Bot scope 는 아래 Slack 봇 최초 설정에 모아 두었다.
아이디어 판정은 평일 09:00 KST에 IDEA_CHANNEL_ID의 최근 최상위 글을 최대 10건 읽어 개발 가치를 판단한다. 판정 답글과 개발 대상의 ✅/❌ 일정 승인 카드는 원글 스레드에 붙는다. ✅ 승인 뒤 내부 ScheduleItem에 일정이 등록된다. 봇을 해당 채널에 초대해야 한다.
GitHub Webhook (POST /v1/agent/github · /v1/agent/trigger)
/github 는 X-Hub-Signature-256(GITHUB_WEBHOOK_SECRET) 으로, /trigger 는 자체 HMAC(WEBHOOK_SECRET) 으로 검증한다. GITHUB_WEBHOOK_DEFAULT_SLACK_USER_ID 가 없으면 200 OK 만 반환하고 자동 발화는 건너뛴다.
| 이벤트 | 발화 | 추가 활성 env |
|---|---|---|
issues.opened |
Impact Reporter | — |
pull_request.opened |
Impact Reporter / (조건부) Code Reviewer | GITHUB_WEBHOOK_OWNER_LOGIN |
pull_request.closed (merged) |
PR careerLog → Notion | PR_CAREERLOG_AUTO_ENABLED + CAREER_LOG_NOTION_PAGE_ID |
Autopilot cron 시간표 (항목별 timezone)
AUTOPILOT_OWNER_SLACK_USER_ID 한 값으로 전체가 켜지고, 없으면 전부 비활성이다. 선언의 정본은 autopilot.playbook.ts(기본 시각은 autopilot.playbook-defaults.ts)이고, 아래는 그것을 성격별로 묶은 것이다.
하루 리듬 — 같은 시각의 항목은 digest 로 묶여 메시지 1개로 온다.
| 시간 (Asia/Seoul) | 동작 |
|---|---|
| 💼 평일 07:00 · 07:30 | 백엔드 채용공고 수집 → 상위 매칭 갭 분석 (JOB_FEED_ENABLED) — 새 공고는 아침 한 통에 실린다 |
| 🌄 매일 07:30 · 08:05 · 08:10 | 오늘의 공부 브리프 → 적용 판정 · 딥다이브(블로그 초안) — 채널에는 안 보내고 아침 한 통에 한 줄로 실린다 |
| 🌅 매일 08:30 | 아침 한 통 — 할 일(승인 대기·장애·새 공고) + 투자·회사(PM 계획 최우선)·공부·어제 포트폴리오 한 줄씩. PM 계획 전문·공고 목록은 스레드. 비서실 결산은 콘솔 원장 |
| 💡 평일 09:00 | 아이디어 채널 판정 (IDEA_CHANNEL_ID) — 원글 스레드에 답글과 일정 승인 카드 |
| 🚦 매일 09:10 | CUJ 점검 — 전날과 오늘 아침의 여섯 핵심 여정이 깨진 경우에만 Slack 알림 |
| 🕐 매일 13:00 | PO Shadow — 오전 동안 계획이 틀어졌을 때만 발송(조용한 날은 원장에만) |
| 🌆 매일 19:40 | 저녁 마감 한 통 — 오늘 머지·회고 핵심 / 투자(수익률·체결·다음 체결일 예정) / 넘어가는 것 한 줄씩. 회고 전문·발행 후보는 스레드, 승인 카드(블로그·경력·GitHub)는 바로 아래. Worklog·Daily Eval 은 콘솔 원장. 모의투자 추천(19:30) 뒤에 둔다 |
| 🌙 매일 23:00 | 포트폴리오 사이트 발행 — 보고는 콘솔 원장, 다음 날 아침 한 통의 "어제" 줄 |
투자 — 종목 감시·모의계좌 평가·유니버스 수집에는 각각 STOCK_MONITOR_ENABLED · PAPER_TRADING_ENABLED · SCREENER_ENABLED 가 필요하다(기본 OFF). 나머지 슬롯은 전용 스위치 없이 돌되 대상 데이터(열린 계좌·미체결 주문·채점할 알림)가 없으면 조용히 건너뛴다.
| 시간 | 동작 |
|---|---|
| 🇺🇸 평일 16:30 ET | 미국 보유 종목 모니터링 |
| 🇰🇷 평일 17:10 | 국내 보유 종목 모니터링 |
| 평일 17:40 | 모의계좌 일일 평가 |
| 평일 18:00 | 급등락 알림의 사후 성적 채점 |
| 매일 18:30 | KRX 유니버스 동기화 · 증분 시세 수집 |
| 평일 19:00 | 스크리닝 결과의 사후 성적 채점 |
| 평일 19:30 | 다음 거래일 추천 종목 선정 |
| 평일 09:00~15:00 (10분) | 미체결 모의 주문 체결 처리 |
| 평일 09:30~15:20 (5분) | 모의계좌 장중 손절 — 손절선 이탈이면 그 시점 현재가로 즉시 청산 |
| 📅 금 20:10 | 추천 성적표 집계 (벤치마크 대비) |
| 📅 금 20:20 | 스크리닝 주간 성적 카드 ("산 것 / 안 산 것" 대조) |
주간 · 월간
| 시간 | 동작 |
|---|---|
| 📅 금 17:00 | Weekly Summary (Worklog 1주 + CEO meta) |
| 📅 토 09:00 | Impact Report (--recent, 본인 머지 PR 종합) |
| 📅 일 10:00 / 11:00 / 12:00 | Knowledge-Lint · Docs Audit · Preference Learning |
| 📅 일 09:00 | Memory Vacuum (세션 기억 색인 청소 — 색인 백업 후 손실 없는 정리만) |
| 📅 일 18:00 | CEO Meta |
| 📅 월 05:00 | 한국 공휴일 동기화 (KOREAN_HOLIDAY_API_KEY 없으면 건너뜀) |
| 📅 월 09:00 | Run-Retro (주간 실행 통계 회고) |
| 📅 월 09:15 | PO Shadow 주간 목표 점검 (owner DM) |
| 📅 월 09:30 | 블로그 수정률 주간 보고 |
| 📅 월 10:00 | 윤문 규칙 연구 dry-run (HUMANIZE_RESEARCH_ENABLED) |
| 📅 매월 1일 09:00 | Ops Supervisor (운영 점검) |
| 🗂️ 매일 19:00 | AI CLI 환경 스냅샷 내보내기 (sync repo 설정 시) |
| 🗂️ 매일 10:00 | 다른 PC의 AI CLI 환경 스냅샷 감지·승인 카드 생성 (sync repo 설정 시) |
상시 스윕 — 뒷정리·폴링이라 평소엔 조용하다. 다만 처리한 게 있으면 Slack 으로 보고한다 — 정리한 카드·좀비 run 이 0건이면 침묵하고 1건이라도 있으면 알리며, 워밍업은 연속 실패가 임계에 닿을 때만 알린다.
| 주기 | 동작 |
|---|---|
| 3분마다 | PR 리뷰 스윕 (지적 게시 · 채택/기각 수확) |
| 10분마다 | Preview Gate 만료 카드 정리 |
| 매시 50분 | 좀비 run 정리 |
| 08~23시 10분마다 | 포트폴리오 사이트 워밍업 |
스케줄·타임존은
AUTOPILOT_<ID>_SCHEDULE/_TIMEZONE으로 덮어쓴다. 여기서<ID>는 그룹명이 아니라 그룹의 첫 항목 id 다(morning 그룹은SECRETARIAT, noon 그룹은PO_SHADOW, evening 그룹은WORK_REVIEWER).
주식·모의투자 알림은 플레이북에서
line: 'invest'로 묶여 있어AUTOPILOT_INVEST_TARGET하나로 전용 채널에 보낼 수 있다. 미설정 시AUTOPILOT_TARGET(없으면 owner DM)을 그대로 쓴다. 채널로 보내려면 봇이 그 채널에 초대돼 있어야 한다.채용공고 수집(
job-feed)과 갭 분석(job-feed-gap)은 같은 방식으로line: 'career'이며AUTOPILOT_CAREER_TARGET을 쓴다. 다만 둘 다 콘솔 경로라 Slack 에는 나가지 않고, 새 공고는 아침 한 통(공통 대상)에 실린다. PR 리뷰 스윕 요약(pr-review-sweep)은line: 'review'로AUTOPILOT_REVIEW_TARGET을 쓴다.
macOS 콘솔 앱 (clients/idaeri-console)
Slack 없이 회사 전체를 눈으로 보고 조작하는 네이티브 관제 앱(SwiftUI). Xcode 프로젝트 없이 Swift Package 로 빌드한다.
| 탭 | 내용 |
|---|---|
| 캘린더 (기본) | 일정과 등록 폼 |
| 대시보드 | 에이전트 28종 카드 · 최근 run · 승인 대기 · 로컬 CLI 세션 |
| 보고서 | 업무 보고와 요약 |
| 에이전트 | 직원별 상태와 상세 정보 |
오피스 화면은 2026-10-21 제거했다.
- 읽기 —
GET /v1/console/{snapshot,agents,runs,approvals,briefing,ledger}+GET /v1/console/stream(SSE) 로 실시간 반영. 같은 머신(loopback)은 그대로 통과하고, 원격에서 읽으려면CONSOLE_REMOTE_TOKEN과 같은 값을x-console-token헤더로 보내야 한다(미설정이면 원격은 아예 막힌다). 스냅샷에 세션 경로·pid 가, 스트림에 워커 산출물이 실려 나가기 때문이다. - 쓰기 —
POST /v1/console/command(지시) ·approvals/:id/{apply,cancel}(승인·거절) ·sessions/:sessionId/inject(유휴 CLI 세션에 작업 주입). 기존 dispatch·PreviewGate usecase 에 위임하므로 Slack 경로와 판정이 갈리지 않는다.CONSOLE_OWNER_SLACK_USER_ID가 없으면 쓰기는 503 으로 막힌다. - 앱 안에는 지능 로직을 두지 않는다. 상태 판정은 전부 백엔드가 하고 앱은 표시·조작만 한다.
cd clients/idaeri-console
swift build
IDAERI_CONSOLE_URL=http://127.0.0.1:3002 swift run IdaeriConsole
swift run ConsoleCoreTests # CLT 환경이라 XCTest 가 아닌 실행형 러너
./scripts/build-app.sh # .app 번들로 감싸 Finder 에서 열 수 있게
./scripts/build-app.sh /Applications # 만든 뒤 설치까지
.app 은 Dock 고정과 더블클릭 실행을 위한 껍데기다. 백엔드 주소는 Finder 실행에 셸 env 가
닿지 않으므로 굽는 시점에 번들에 새긴다(IDAERI_CONSOLE_URL, 없으면 .env 의 PORT).
코드사인·공증은 하지 않는다 — 직접 빌드한 앱은 Gatekeeper 가 막지 않는다.
🔧 설정
환경변수
단일 source-of-truth 는 app.config.ts 의 EnvironmentVariables (class-validator 강제). 전체 목록은 자동 생성 문서 docs/env-catalog.md 에 있고 pnpm docs:sync 로 갱신한다. .env.example 동기 확인은 pnpm check:env.
아래는 처음 띄울 때 실제로 만지는 것만 추렸다.
| 키 | 필수 | 설명 |
|---|---|---|
DATABASE_URL · REDIS_HOST / REDIS_PORT |
✅ | PostgreSQL(5434) · Redis(6381) |
SLACK_BOT_TOKEN / _APP_TOKEN / _SIGNING_SECRET |
⭕ | 3개 모두 있어야 봇 활성 (Socket Mode) |
GITHUB_TOKEN · NOTION_TOKEN / NOTION_TASK_DB_IDS |
⭕ | 미설정 시 해당 연동 skip |
GITHUB_REVIEW_BOT_TOKEN / _LOGIN / _REPOS |
❌ | PR 리뷰 봇 전용 계정. _REPOS 에 적힌 레포에서만 PR 쓰기를 봇으로 한다. 미설정 시 GITHUB_TOKEN 계정 |
WATCH_SCRIPT_PATH |
⭕ | Video Watch의 watch.py 경로. 미설정 시 유튜브 분석 워커 비활성화 |
*_WEBHOOK_SECRET · GITHUB_WEBHOOK_* |
⭕ | webhook 검증 · 자동 발화 가드 |
AUTOPILOT_OWNER_SLACK_USER_ID · AUTOPILOT_TARGET |
⭕ | cron 전체 게이트 · 발송 대상(콤마 다중) |
HUMANIZE_RESEARCH_ENABLED |
❌ | 윤문 규칙 연구 주간 dry-run. true 일 때만 자동 수집·제안을 실행하며 기본 OFF |
HUMANIZE_RULES_REPO_PATH |
❌ | 윤문 규칙 정본 저장소 경로. 기본 ~/.claude/skills/humanize-korean |
SUBCONSCIOUS_GATE_MODE |
❌ | legacy(기존 LLM) · shadow(Jev 비교만) · hybrid(확신 높은 Jev 우선). 기본 legacy |
TYPESAFE_API_KEY · SUBCONSCIOUS_JEV_MODEL |
⭕ | Jev 게이트를 켤 때 필요한 TypeSafe 인증키와 모델 버전 |
SUBCONSCIOUS_JEV_API_URL |
⭕ | Jev 호환 엔드포인트. 로컬 Kev(pnpm kev:start)로 shadow 비교할 때 지정, 로컬 주소면 키 불필요 |
SUBCONSCIOUS_DROP_SAMPLE_RATE · _DAILY_CAP |
⭕ | legacy 가 버린 변경을 사람 판정 카드로 올릴 비율·하루 상한. 기본 0.1·3, 0 이면 끔 |
AUTOPILOT_INVEST_TARGET |
⭕ | 투자 라인(주식·모의투자 10항목) 전용 발송 대상. 미설정 시 AUTOPILOT_TARGET |
AUTOPILOT_CAREER_TARGET |
⭕ | 커리어 라인(채용공고 수집·갭 분석) 전용 발송 대상. 미설정 시 AUTOPILOT_TARGET |
AUTOPILOT_REVIEW_TARGET |
⭕ | 리뷰 라인(PR 리뷰 스윕 요약) 전용 발송 대상. 미설정 시 AUTOPILOT_TARGET |
SAJU_FORTUNE_RECIPIENTS · SAJU_FORTUNE_CRON |
❌ | 매일 사주 운세 DM(사람마다 발송 시각 지정 가능). 받는 사람은 U123|이름|丙寅 辛卯 壬戌 庚子|07:30 을 ; 로 잇는다(기둥은 만세력 확인값, 시각 모르면 3개 · 끝의 발송 시각(KST)을 생략하면 SAJU_FORTUNE_CRON, 기본 0 8 * * *). 실패 알림은 CRON_FAILURE_ALERT_OWNER_SLACK_USER_ID 로 간다 |
IDEA_CHANNEL_ID |
⭕ | 평일 09:00 KST 아이디어 판정 대상 Slack 채널 ID(C.../G...). 미설정 시 해당 task 건너뜀 |
CONSOLE_OWNER_SLACK_USER_ID |
❌ | 콘솔 지시·승인 주체 — 없으면 콘솔 쓰기 503 |
KOREAN_HOLIDAY_API_KEY |
❌ | 공공데이터포털 특일 정보 디코딩 서비스키 — 없으면 달력에 공휴일이 안 뜬다 |
VACATION_HIRE_DATE · VACATION_FIRST_YEAR_ADVANCE_DAYS |
❌ | 휴가 계산 입사일(YYYY-MM-DD)과 1년차 선지급 일수(1~11). 선지급을 설정하면 1년차 부여가 그 값으로 고정되고 2년차 15일은 그대로 — 없으면 한 달에 1일씩 계산 |
CAREER_LOG_NOTION_PAGE_ID · CAREER_*_NOTION_PAGE_ID |
⭕ | careerLog · 이력서/포트폴리오 Notion 적재 대상 |
BLOG_PUBLISH_REPO · BLOG_PUBLISH_BRANCH · BLOG_MASK_FORBIDDEN_TERMS · BLOG_NOTION_STATUS_DRAFT_VALUE · BLOG_NOTION_STATUS_HOLD_VALUE · BLOG_GITHUB_PUBLISH_ENABLED |
⭕ | /blog-publish 대상 저장소·브랜치·익명화 금지어·Notion 초안/보류 상태값과 저녁 GitHub 발행 승인 카드 스위치. 금지어 목록이 비면 발행 차단. 보류 상태값 기본은 보류 — 편집 단계가 발행 부적합으로 판정한 초안이 여기로 옮겨져 큐를 막지 않는다 |
PORTFOLIO_SITE_URL |
⭕ | 포트폴리오 사이트 주소. autopilot 이 08~23시 10분마다 /backend/health 를 불러 무료 플랜에서 잠든 API 를 깨운다. 비우면 워밍업 슬롯이 꺼진다 |
AUTOPILOT_PORTFOLIO_WARMUP_SCHEDULE · _TIMEZONE |
⭕ | 워밍업 발화 시각 override(기본 */10 8-23 * * *, Asia/Seoul). 24시간으로 넓히면 Render 무료 플랜 월 시간 한도를 넘는다 |
PORTFOLIO_AUTOMATION_TOKEN |
⭕ | 포트폴리오 사이트 발행용 자동화 토큰(사이트 쪽 AUTOMATION_TOKEN 과 같은 값). 비우면 발행 슬롯이 꺼진다 |
PORTFOLIO_ANONYMIZED_OWNERS |
⭕ | 공개 포트폴리오에 저장소 이름을 남기지 않을 GitHub owner 목록(쉼표 구분). 해당 성과는 slug 가 company-<해시>-pr-<번호> 가 되고 PR 링크를 싣지 않는다. 비우면 익명화하지 않는다 |
AUTOPILOT_PORTFOLIO_PUBLISH_SCHEDULE · _TIMEZONE |
⭕ | 발행 발화 시각 override(기본 0 23 * * *, Asia/Seoul) |
EPISODIC_EMBED_MODEL / _DIM |
❌ | 임베딩 모델·차원 (기본 384dim) |
ART_JOB_FEED_TARGET · ART_JOB_FEED_MENTION_USER_ID |
❌ | 게임잡 원화(2D 캐릭터 원화·컨셉) 공고를 게시할 채널과 머리 메시지 멘션 대상. 채널이 비면 기능 꺼짐. 공고마다 게임 이미지(구글 플레이 → 회사 사진 → 없으면 구글 이미지 검색 링크). 공고 버튼은 멘션 대상과 운영자(AUTOPILOT_OWNER_SLACK_USER_ID)가 누를 수 있고, 「관심 있음」을 누른 공고는 마감 전날 09:00·13:00 KST 에 누른 사람에게 DM 으로 알린다 |
KAKAO_REST_API_KEY |
❌ | 원화 공고 피드에서 플레이스토어에 없는(미출시) 게임의 참고 이미지를 카카오 이미지 검색으로 찾는다. 게임 매체 기사 이미지만 채택하고 출처를 표시. 비우면 건너뜀 |
ART_JOB_FEED_CRON · _TIMEZONE |
❌ | 게시 시각 override(기본 0 9,18 * * *, Asia/Seoul) |
JOB_FEED_ENABLED |
❌ | 백엔드 채용공고 자동 수집(점핏·랠릿·원티드) 마스터 스위치. true 가 아니면 수집·채점·알림 자체가 skip |
JOB_FEED_YEARS · JOB_FEED_LOCATIONS |
❌ | 연차(0~50)·지역(쉼표 구분) 매칭 축. 미설정 시 각 축을 중립으로 채점 |
JOB_FEED_MATCH_THRESHOLD |
❌ | 알림·상세수집 최소 매칭 점수(0~100, 기본 80) |
JOB_FEED_GAP_ANALYSIS_TOP_N |
❌ | 상위 매칭 몇 건을 커리어 갭 분석 후보로 넘길지(0~2, 기본 1). 실행 시간 예산 때문에 한 회차에 사실상 1건만 처리된다 |
JOB_FEED_DETAIL_LIMIT |
❌ | 실행당 상세 페이지를 가져올 최대 건수(1~100, 기본 20) |
JOB_FEED_AVOID_SKILLS |
❌ | 기피 기술(쉼표 구분). 사전에서 빼지 않고 저장은 그대로 두되, 하나라도 요구하는 공고를 알림 후보에서만 뺀다(설정을 바꾸면 다시 보인다) |
STUDY_DIAGRAM_WIDTH_PX · STUDY_DIAGRAM_MIN_FONT_PX · STUDY_DIAGRAM_MAX_HEIGHT_PX |
❌ | 오늘의 공부 그림(STUDY_DIAGRAM_ENABLED)의 캔버스 폭 · 최소 글자 높이 · 세로 상한(px) |
STUDY_APPLY_ISSUE_REPO |
❌ | 오늘의 공부 적용 판정(매일 08:05)이 APPLY 일 때 승인 카드 → issue 를 만들 레포(owner/repo). 미설정이면 판정만 저장한다 |
기본 OFF 인 기능 스위치 — 'true' 로 켠다. STOCK_MONITOR_ENABLED(보유 종목 모니터링) · PAPER_TRADING_ENABLED(모의투자 평가) · SCREENER_ENABLED(KRX 유니버스·시세 수집) · SUBCONSCIOUS_ENABLED(proactive engine) · `PR_REVIEW_LOOP_ENABL
