From douzonebot
End-to-end Douzone expense automation. Automatically handles setup, Chrome, preflight, and run in one command. ONLY trigger when the user's message contains '더존', 'douzone', 'douzonebot', or '경비' as a keyword. Example triggers: "더존 해줘", "더존 자동화 해줘", "douzone 해줘", "경비 처리해줘", "경비청구 자동화 시작", "douzone go". Do NOT trigger on generic phrases like "해줘" alone without a douzone/더존/경비 keyword.
How this skill is triggered — by the user, by Claude, or both
Slash command
/douzonebot:goThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
이 스킬은 환경 설정부터 실행까지 전 과정을 자동으로 처리합니다. 각 단계를 확인하고, 이미 완료된 단계는 건너뜁니다.
이 스킬은 환경 설정부터 실행까지 전 과정을 자동으로 처리합니다. 각 단계를 확인하고, 이미 완료된 단계는 건너뜁니다.
진행 순서: 안내 → 환경 확인 → Chrome → 사전 점검 → 실행
처음 사용하는 사용자인지 판단합니다 (uv 미설치, 또는 사용자가 "처음", "어떻게" 등의 질문을 하는 경우).
처음 사용하는 사용자에게 안내할 내용:
이 플러그인은 더존 경비보고서 STEP 2 (지출정보등록)를 자동으로 채워줍니다.
준비할 것:
- 메모 파일 (.txt) — 날짜별 참석자 정보. 예:
3/5 점심 홍길동 김철수 - 강남역 식당- 영수증 폴더 (선택) — JPG, PNG, HEIC, PDF 파일을 한 폴더에 모아주세요
알아두면 좋은 규정:
- 배민/쿠팡이츠/카카오페이 등 PG 거래 → 영수증 첨부 필수 (실공급자 확인용)
- 코엑스/백화점 등 대형 쇼핑몰 → 영수증 첨부 권장
- 주차비 → 1건당 20만원 한도
- 결제+취소가 같이 있으면 → 둘 다 건너뛰거나 둘 다 제출 (취소분만 제출 금지)
영수증 팁:
- 사진은 글씨가 잘 보이게 찍어주세요 (AI가 OCR로 읽습니다)
- 영수증 옆에
.ocr.md파일을 두면 OCR을 건너뛰고 바로 사용합니다 예:receipt_0305.jpg→receipt_0305.ocr.md
재사용자 (uv 이미 설치됨, 별도 질문 없음) → 이 단계를 건너뛰고 Phase 1로 진행합니다.
bot/ 폴더. 예: plugin/skills/go/SKILL.md → plugin/skills/ → plugin/ → plugin/bot/mktemp로 생성하는 임시 파일 (OS가 자동 정리)모든 uv run 명령은 BOT_DIR에서 실행합니다.
Claude Code는 Windows에서도 bash (Git Bash/MSYS2) 쉘을 사용합니다.
$USERPROFILE 또는 $HOME으로 홈 디렉토리 접근 ($env:USERPROFILE 사용 금지)mkdir -p 등 bash 명령어 사용cmd.exe /c "..." 또는 powershell -Command "..." 래핑주의: Phase 1의 각 단계를 순서대로 하나씩 실행하세요.
uname -s
Darwin → macOSMINGW* 또는 MSYS* → Windows (Git Bash)Linux → Linux결과를 기억하고 이후 OS별 분기에 사용합니다.
uv --version 2>/dev/null || echo "UV_NOT_FOUND"
curl -LsSf https://astral.sh/uv/install.sh | sh
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
export PATH="$HOME/.local/bin:$USERPROFILE/.local/bin:$PATH"
uv --version
"플러그인 자동 업데이트를 켜면 새 버전이 나올 때 자동으로 반영됩니다.
/plugin입력 → Marketplaces 탭 → neosapience-douzone-bot → Enable auto-update를 클릭해주세요. 한 번만 설정하면 됩니다."
중요: 이후 모든 uv 명령 앞에 PATH + 인코딩 설정을 포함합니다:
export PATH="$HOME/.local/bin:$USERPROFILE/.local/bin:$PATH" PYTHONIOENCODING=utf-8 && uv ...
참고: 처음 실행 시
uv가 필요한 패키지를 자동 다운로드합니다 (약 20개, 1~2분 소요). 이후 실행에서는 캐시를 사용하므로 빠르게 시작됩니다.
Phase 1 완료: "✓ 환경 준비 완료"
launcher.py가 자동으로 처리합니다:
export PATH="$HOME/.local/bin:$USERPROFILE/.local/bin:$PATH" PYTHONIOENCODING=utf-8 NODE_NO_WARNINGS=1 && cd "<BOT_DIR>" && uv run --with-requirements requirements-local.txt python ui/launcher.py --chrome
출력에서 CHROME_OK=true와 CHROME_PORT=<포트>를 파싱합니다. 이 포트 값을 이후 모든 단계에서 CDP_PORT로 사용합니다.
⚠️ 중요: 자동화 Chrome 창을 전체 화면(최대화) 상태로 유지하세요. 창이 작으면 더존 UI 요소가 보이지 않아 자동화가 실패할 수 있습니다. 사용자에게 반드시 안내하세요.
Phase 2-1에서 파싱한 포트를 사용합니다:
curl -s --connect-timeout 3 http://localhost:$CDP_PORT/json/version && echo "CDP_OK"
CHROME_PATH 출력에서 Chrome 경로를 확인하고, 수동 실행을 안내. /douzonebot:troubleshoot 참고.--force-restart 플래그 추가: python ui/launcher.py --chrome --force-restartChrome 실행 확인 후 사용자에게 안내:
~/.douzone-chrome)을 사용하므로 기존 Chrome과 독립적입니다."Phase 2 완료: "✓ Chrome 준비 완료"
Phase 2에서 파싱한 CDP_PORT를 사용합니다:
export PATH="$HOME/.local/bin:$USERPROFILE/.local/bin:$PATH" PYTHONIOENCODING=utf-8 NODE_NO_WARNINGS=1 && cd "<BOT_DIR>" && uv run --with-requirements requirements-local.txt python main.py --local --preflight-only --user dummy --cdp-url http://localhost:$CDP_PORT
출력에서 [PASS], [FAIL], [WARN], [SKIP] 라인을 파싱합니다.
curl -s http://localhost:$CDP_PORT/json/version으로 수동 확인. 응답이 오면 preflight 내부 문제이므로 --skip-preflight로 우회 가능claude /login으로 로그인하세요."--skip-preflight 플래그를 추가하여 Phase 4로 진행 가능Phase 3 완료: "✓ 사전 점검 통과"
AskUserQuestion으로 질문:
CLI 모드(전체 또는 간단) 선택 시, 아래 정보를 수집합니다:
.ocr.md (또는 .ocr.txt, .ocr.json) 파일이 있으면 Vision AI를 건너뛰고 해당 텍스트를 직접 사용합니다. OCR이 미리 준비된 영수증 폴더도 그대로 사용 가능합니다.메모/영수증이 없으면 해당 --memo/--receipts 플래그를 생략합니다 (기본 참석자만 입력됨).
중요: 모든 python main.py 명령에 --cdp-url http://localhost:$CDP_PORT를 포함합니다 (Phase 2에서 파싱한 포트).
export PATH="$HOME/.local/bin:$USERPROFILE/.local/bin:$PATH" PYTHONIOENCODING=utf-8 NODE_NO_WARNINGS=1 && cd "<BOT_DIR>" && uv run --with-requirements requirements-local.txt python ui/launcher.py --dashboard
출력에서 DASHBOARD_OK=true와 DASHBOARD_PORT=<포트> 값을 확인합니다. 실패 시(DASHBOARD_OK=false) 에러 메시지를 사용자에게 안내합니다.
open http://localhost:$DASHBOARD_PORTpowershell -Command "Start-Process 'http://localhost:$DASHBOARD_PORT'"xdg-open http://localhost:$DASHBOARD_PORT사용자에게 안내:
사용자가 저장 완료를 알리면, 저장된 데이터를 읽어서 변수에 저장:
curl -s http://localhost:$DASHBOARD_PORT/data
→ 응답에서 memo_path, receipts_path, user_name 값을 추출
export PATH="$HOME/.local/bin:$USERPROFILE/.local/bin:$PATH" PYTHONIOENCODING=utf-8 NODE_NO_WARNINGS=1 && cd "<BOT_DIR>" && uv run --with-requirements requirements-local.txt python main.py --local -q --user "<이름>" --simple --cdp-url http://localhost:$CDP_PORT
실행 후 더존 화면에서 변화가 나타나기까지 수 초 걸릴 수 있습니다. 사용자에게 "더존 화면에서 자동 입력이 시작됩니다. 잠시 기다려 주세요."라고 안내하세요.
전체 모드는 3단계로 나눠서 실행합니다. 에이전트가 매칭 결과를 검토하고, 사용자에게 확인이 필요한 항목을 안내합니다.
먼저 임시 파일 경로를 생성합니다 (이후 단계에서 이 변수를 사용):
PLAN_FILE=$(mktemp "${TMPDIR:-/tmp}/douzone_plan_XXXXXXXXXX")
echo "PLAN_FILE=$PLAN_FILE"
더존 그리드 읽기, 메모 파싱, 영수증 OCR, 거래 매칭을 한 번에 실행하고 결과를 JSON으로 저장합니다:
export PATH="$HOME/.local/bin:$USERPROFILE/.local/bin:$PATH" PYTHONIOENCODING=utf-8 NODE_NO_WARNINGS=1 && cd "<BOT_DIR>" && uv run --with-requirements requirements-local.txt python main.py --local -q --user "<이름>" --memo <메모경로> --receipts <영수증경로> --stage2-cache-out "$PLAN_FILE" --stage2-only --cdp-url http://localhost:$CDP_PORT
--stage2-cache-out: 매칭 결과를 JSON으로 저장--stage2-only: 매칭까지만 실행하고 중단 (자동 입력은 아직 안 함)매칭 결과를 로드하여 정리된 요약을 출력합니다:
export PATH="$HOME/.local/bin:$USERPROFILE/.local/bin:$PATH" PYTHONIOENCODING=utf-8 NODE_NO_WARNINGS=1 && cd "<BOT_DIR>" && uv run --with-requirements requirements-local.txt python main.py --local -q --user "<이름>" --stage2-cache-in "$PLAN_FILE" --review-only --cdp-url http://localhost:$CDP_PORT
--review-only: 매칭 결과를 날짜별로 그룹화하여 보여주고, 확인이 필요한 항목을 ⚠️ 로 표시. 실행은 하지 않음.터미널 출력을 읽고 사용자에게 결과를 안내합니다:
매칭 결과를 로드하여 더존에 자동 입력합니다:
export PATH="$HOME/.local/bin:$USERPROFILE/.local/bin:$PATH" PYTHONIOENCODING=utf-8 NODE_NO_WARNINGS=1 && cd "<BOT_DIR>" && uv run --with-requirements requirements-local.txt python main.py --local -q --user "<이름>" --stage2-cache-in "$PLAN_FILE" --auto-approve --cdp-url http://localhost:$CDP_PORT
--stage2-cache-in: 4-4a에서 저장한 매칭 결과를 로드 (데이터 재수집 건너뜀)--auto-approve: 에이전트가 이미 4-4b에서 검토했으므로 대화형 프롬프트 건너뜀자동화 실행 중 터미널 출력을 읽고 사용자에게 진행 상황을 한국어로 안내합니다:
자동화 완료 후 결과를 보고합니다:
다음 항목에 해당하는 행을 찾아 사용자에게 수동 확인을 권장합니다:
needs_clarification: true였던 행 (매칭이 불확실했던 항목)pending_receipt: true였던 행 (영수증 미첨부 — PG 또는 SaaS 구독 거래)confidence: "LOW"였던 행 (신뢰도가 낮았던 매칭)안내: "더존에서 위 항목들의 입력 내용을 한 번 확인해 주세요."
대시보드 모드를 사용했으면 서버를 종료합니다:
curl -s -X POST http://localhost:$DASHBOARD_PORT/shutdown 2>/dev/null || true
대시보드를 사용하지 않은 경우 이 단계를 건너뜁니다.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub neosapience/douzonebot-plugin --plugin douzonebot