一键导入
onboarding
Jarvis 초기 설치 온보딩 마법사. Discord 봇 토큰·Claude API 키 등 필수 환경변수를 단계별로 수집하고, 자동/수동 업데이트 정책을 설정하며, 전용 업데이트 알림 채널(🚀jarvis-update)을 생성합니다. 완료 시 봇이 즉시 기동됩니다.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Jarvis 초기 설치 온보딩 마법사. Discord 봇 토큰·Claude API 키 등 필수 환경변수를 단계별로 수집하고, 자동/수동 업데이트 정책을 설정하며, 전용 업데이트 알림 채널(🚀jarvis-update)을 생성합니다. 완료 시 봇이 즉시 기동됩니다.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Convergent Socratic interview that turns vague requirements into a production-grade specification via 8-15 narrowing rounds with mathematical ambiguity gating. Inspired by Sorbh/interview-me, adds Contrarian/Simplifier Challenge Mode and JSONL decision log. Use when an idea exists but implementation decisions are still undefined.
Goal-driven autonomous execution with completion-condition gating and built-in irreversibility guard. Port of Anthropic /goal (Claude Code v2.1.139) that automatically pauses for explicit user approval when detecting unrecoverable operations — git push, repo visibility changes, payment, secret exposure, mass data deletion.
11-section rigorous design plan review covering problem framing, scope, architecture, security, observability, deployment, performance, reliability, testing, maintainability, and migration. Korean adaptation of gstack /plan-ceo-review, tuned for sole-developer + AI-pair-programming workflows. Not a rubber stamp — pushes plans toward best-in-class.
오너가 방금 말한/확정한 사실을 Jarvis 위키(`~/jarvis/runtime/wiki/`)에 즉시 주입합니다. 디스코드·Claude Code CLI·macOS 앱 어디서 호출하든 동일한 뇌에 쌓이며, source 태그로 호출 표면이 자동 구분됩니다. 오너의 명시적 "기억해" 요청이나 대화 중 확정된 사실·결정·선호를 즉시 영속시킬 때 사용합니다.
| name | onboarding |
| description | Jarvis 초기 설치 온보딩 마법사. Discord 봇 토큰·Claude API 키 등 필수 환경변수를 단계별로 수집하고, 자동/수동 업데이트 정책을 설정하며, 전용 업데이트 알림 채널(🚀jarvis-update)을 생성합니다. 완료 시 봇이 즉시 기동됩니다. |
| argument-hint | (no arguments needed — interactive wizard) |
Jarvis를 처음 설치할 때 실행하는 대화형 설정 도우미입니다. 아래 절차를 순서대로 진행하세요.
node --version # v18 이상 필요
git --version # 설치 확인
Ollama 상태 확인 (RAG 기능 선택):
curl -sf http://localhost:11434/api/tags > /dev/null && echo "ollama_ok" || echo "ollama_missing"
node .claude/skills/onboarding/scripts/check-setup.mjs
출력 예시:
{
"envPath": "~/jarvis/runtime/.env",
"missing": ["DISCORD_TOKEN", "ANTHROPIC_API_KEY", "GUILD_ID"],
"present": ["BOT_HOME"],
"updatePolicy": null
}
결과에 따른 분기:
| 상태 | 조건 | 처리 |
|---|---|---|
| 완전 신규 | missing에 항목 있음 | Steps 2~14 순서대로 진행 |
| 환경 설정됨, 정책 없음 | missing 비어있음 + updatePolicy null | Steps 2~5 스킵 → Step 9(정책 설정)로 이동 |
| 완전 설치됨 | missing 비어있음 + updatePolicy 있음 | "이미 설치된 환경입니다." 안내 후 선택 요청: [V] 검증만 실행 → Step 12로 이동 (읽기 전용, 자동 수정 없음) [U] 특정 값 업데이트 → 변경할 키 확인 → 해당 Step(2~5)에서 값 입력받기 → Step 6 케이스 B(--merge)로 저장 → Step 10(채널 ID 확인) → Step 11(--skip-if-loaded로 누락 에이전트만 추가) → Step 12(검증) [R] 완전 재설치 → Step 2부터 진행 |
check-setup 결과를 변수로 보관: 이후 Steps에서
missing배열과updatePolicy값을 참조합니다.
missing에DISCORD_TOKEN이 없으면 이 단계를 스킵합니다.
사용자에게 안내:
Discord Developer Portal(https://discord.com/developers/applications) 에서
봇의 TOKEN을 복사해 붙여넣으세요.
입력받은 값을 DISCORD_TOKEN 변수에 저장. 유효성 검증 (형식만, API 호출 없이):
missing에ANTHROPIC_API_KEY가 없으면 이 단계를 스킵합니다.
사용자에게 안내:
Anthropic Console(https://console.anthropic.com/settings/keys) 에서
API 키를 복사해 붙여넣으세요. (sk-ant-... 형식)
입력받은 값을 ANTHROPIC_API_KEY 변수에 저장. 형식 확인: sk-ant- 로 시작하는지 확인.
missing에GUILD_ID가 없으면 이 단계를 스킵합니다.
사용자에게 안내:
Discord 앱에서 서버 이름 우클릭 → 서버 ID 복사를 눌러 붙여넣으세요.
(개발자 모드가 꺼져 있다면: 설정 → 고급 → 개발자 모드 활성화 필요)
입력받은 값을 GUILD_ID 변수에 저장. 형식 확인: 숫자 17-20자리인지 확인.
missing에OWNER_DISCORD_ID또는OWNER_NAME이 없으면 해당 값만 스킵합니다. 둘 다 없으면 이 단계 전체 스킵.
두 가지 입력받기:
모드 선택 기준 — 반드시 준수:
missing5개 전부(완전 신규 설치) 또는 [R] 완전 재설치를 선택한 경우 → 전체 쓰기(비merge)- 그 외 모든 경우 (일부만 missing, 또는 [U] 값 업데이트) → 반드시
--merge사용이유: 비merge 모드는 5개 인자 전부를 요구하는데, 스킵된 Steps 2
5의 변수는 세션에 없음. [R] 재설치 시에는 missing이 비어있어도 Steps 25를 전부 실행하므로 5개 인자가 모두 확보됨.
케이스 A — 완전 신규 설치 (missing 5개 전부, 또는 [R] 재설치):
node .claude/skills/onboarding/scripts/write-env.mjs \
--discord-token "$DISCORD_TOKEN" \
--api-key "$ANTHROPIC_API_KEY" \
--guild-id "$GUILD_ID" \
--discord-owner "$OWNER_DISCORD_ID" \
--owner-name "$OWNER_NAME"
케이스 B — 부분 업데이트 (missing 항목이 1~4개, 또는 [U] 특정 값 변경):
# 새로 입력받은 값만 인자로 넘김, 나머지(CHANNEL_IDS 등) 기존 값 보존
# 예시: DISCORD_TOKEN만 변경한 경우
node .claude/skills/onboarding/scripts/write-env.mjs \
--discord-token "$DISCORD_TOKEN" \
--merge
--merge 모드: 기존 .env의 주석·포맷 유지, 제공된 키만 교체이 스크립트는:
출력 예시:
{ "status": "ok", "paths": ["~/jarvis/runtime/.env", "~/.local/share/jarvis/.env"] }
{ "status": "merged", "updatedKeys": ["DISCORD_TOKEN"], "paths": [...] }
Discord 봇 Node.js 의존성 설치:
npm install --prefix infra/discord
설정 템플릿 복사 (이미 있으면 스킵):
node .claude/skills/onboarding/scripts/copy-config-templates.mjs
이 스크립트는:
Step 0에서 Ollama가 실행 중인 경우에만 이 단계를 진행합니다.
사용자에게 안내:
Ollama가 감지됐습니다. RAG(검색 증강 생성) 기능을 지금 설정하시겠습니까?
임베딩 모델 다운로드가 포함됩니다 (~400MB).
[Y] 지금 설정
[N] 건너뛰기 (나중에 python scripts/setup_rag.py 로 설정 가능)
입력 (Y/N):
Y 선택 시:
Python 버전 확인:
python3 --version
RAG 셋업 실행:
python3 scripts/setup_rag.py
이 스크립트는:
~/.local/share/jarvis/rag/ 디렉토리에 벡터 DB 초기화완료 확인: 출력에 RAG setup complete 또는 에러 없이 종료 확인.
에러 발생 시:
Connection refused → Ollama가 실행 중인지 확인: ollama servemodel not found → ollama pull nomic-embed-text 수동 실행 안내N 선택 시 또는 Ollama 없는 경우:
⚠️ RAG 기능 비활성 — 나중에 설정하려면:
1. Ollama 설치: https://ollama.ai
2. ollama serve 실행
3. 프로젝트 루트에서: python3 scripts/setup_rag.py
Step 1에서 updatePolicy가 이미 설정된 경우:
현재 업데이트 정책: [자동|수동] (설정일: YYYY-MM-DD)
변경하시겠습니까? (Y/N):
미설정이거나 변경을 원하는 경우 사용자에게 안내:
Jarvis 자동 업데이트 정책을 선택해주세요.
[A] 자동 업데이트 — 새 릴리즈 발견 시 새벽 3시에 자동으로 설치 & 봇 재시작
[M] 수동 업데이트 — #🚀jarvis-update 채널에 알림만 발송, 직접 업데이트
입력 (A/M):
# 신규 설정
node .claude/skills/onboarding/scripts/save-update-policy.mjs --mode <auto|manual>
# 기존 정책 강제 변경
node .claude/skills/onboarding/scripts/save-update-policy.mjs --mode <auto|manual> --force
--force 없으면 이미 설정된 정책은 보존됨 (status: "exists" 반환)--force 사용 시 기존 정책 덮어씀저장 위치: ~/jarvis/runtime/config/update-policy.json
환경 파일을 로드하여 🚀jarvis-update 채널을 생성합니다.
export $(grep -v '^#' ~/jarvis/runtime/.env | grep -v '^$' | xargs)
RESULT=$(node .claude/skills/onboarding/scripts/create-update-channel.mjs)
CHANNEL_ID=$(echo "$RESULT" | python3 -c "import json,sys; print(json.load(sys.stdin)['channelId'])")
이 스크립트는:
출력 예시:
{ "channelId": "1234567890123456789", "channelName": "🚀jarvis-update" }
macOS:
# CHANNEL_ID는 Step 10에서 파싱한 변수를 그대로 사용
# --skip-if-loaded: 이미 launchd에 등록된 에이전트는 재설치 생략 (재설치 시 생략 가능)
node .claude/skills/onboarding/scripts/install-launch-agents.mjs --channel-id "$CHANNEL_ID" --skip-if-loaded
--skip-if-loaded 포함해도 무방 (등록된 것 없으면 자동으로 설치)--skip-if-loaded 제거 → 기존 agent unload 후 재생성이 스크립트는:
already_loaded 반환하고 스킵Linux / WSL2:
npm install -g pm2
pm2 start infra/ecosystem.config.cjs
pm2 startup && pm2 save
PM2 cron으로 릴리즈 체커 등록 (ecosystem.config.cjs 내 cron_restart 항목 추가):
# ecosystem.config.cjs 에 아래 항목 추가
{
name: 'release-checker',
script: 'infra/scripts/release-checker.mjs',
cron_restart: '0 3 * * *',
autorestart: false,
env: { UPDATE_CHANNEL_ID: process.env.CHANNEL_ID }
}
pm2 reload ecosystem.config.cjs && pm2 save
⚠️
crontab -e는 사용하지 않음 — macOS com.vix.cron 데몬 비활성 이슈로 hang 가능. systemd timer가 필요한 경우~/.config/systemd/user/jarvis-release-checker.timer로 등록.
node .claude/skills/onboarding/scripts/verify-setup.mjs
이 스크립트는 다음을 확인합니다:
출력:
{
"passed": 5,
"total": 5,
"details": { "discordDeps": true, "botSyntax": true, "dataDirs": true, "envFile": true, "launchAgents": true }
}
검증 결과 대응:
launchAgents: false (또는 { discordBot: false } / { releaseChecker: false }) → Step 11을 --skip-if-loaded 없이 직접 실행 권고
envFile: false → Step 6으로 돌아가 환경 파일 재생성discordDeps: false → Step 7 npm install 재시도sleep 5
tail -10 ~/.local/share/jarvis/logs/discord-bot.log
로그 확인:
에러 발생 시:
사용자에게 다음 내용 안내:
✅ Jarvis 온보딩 완료!
봇 상태 : 온라인
업데이트 : <자동|수동> 모드
알림 채널 : #🚀jarvis-update
릴리즈 체크 : 매일 새벽 03:00
RAG : <활성|비활성 — Ollama 필요>
이제 Discord의 아무 채널에 말을 걸어보세요.