무색
기술블로그
에세이
연구
소개

무색

소프트웨어로 비즈니스의 가능성을 만듭니다. 웹·앱 개발, 음성 AI, 자동화 콘텐츠 제작까지 — 기술이 필요한 곳에 무색이 있습니다.

연락처

contact@museck.com

사업자 정보

상호: 무색

대표: 배성재

사업자등록번호: 577-58-00836

인천광역시 연수구 인천타워대로 323, 에이동 8층 801-802호 AB-132 (송도동, 송도 센트로드)

© 2026 무색. All rights reserved.
개인정보처리방침·이용약관·연락처
INCHEON, KR
CWD 감지 — isometric 스타일 키 비주얼
Claude 스킬
2026. 1. 20.

하드코딩된 경로가 깨진 날 — skill-version-manager의 CWD 감지

claude-codeskillversion-managementdeveloper-tools

이전 글에서 wrap 스킬로 세션 마무리를 자동화하는 구조를 만들었다. 그 기반이 되는 skill-version-manager는 스킬의 사용 -> 기록 -> 패치 -> 릴리스 사이클을 관리하는 도구인데 한 가지 문제가 있었다. 경로가 하드코딩되어 있었다.

경로가 깨진 순간

WSL2 환경을 정리하면서 작업 디렉토리를 ~/Desktop/vibe/에서 ~/vibe/로 옮겼다. 그 순간 skill-version-manager가 동작을 멈췄다. v1.0.0에는 WORKSPACE_ROOT가 ~/Desktop/vibe/workspace-skill/로 박혀 있었기 때문이다.

개발 도구에 절대 경로를 하드코딩하면 안 된다는 건 누구나 안다. 그런데 스킬은 "그냥 프롬프트"라는 인식 때문에 별 생각 없이 넘어갔던 거다. 스킬도 소프트웨어고 소프트웨어는 환경이 바뀌면 깨진다.

CWD 기반 감지로 전환

해결 방향은 단순했다. 하드코딩된 경로를 지우고 실행 시점의 CWD(Current Working Directory)를 WORKSPACE_ROOT로 쓰는 것이다. 어떤 프로젝트 디렉토리에서 skill-version-manager를 실행하든 그 디렉토리가 workspace가 된다.

여기에 더해 스킬 설치 경로(SKILL_INSTALL_DIR)도 자동 감지하도록 했다. Claude Code는 스킬을 두 곳에 설치할 수 있다.

  • project-level: {CWD}/.claude/skills/ — 해당 프로젝트에서만 사용
  • user-level: ~/.claude/skills/ — 모든 프로젝트에서 사용

감지 로직의 우선순위는 이렇다.

project-level 디렉토리에 해당 스킬이 있으면 그걸 쓴다. 없으면 user-level을 확인한다. 둘 다 있거나 둘 다 없으면(최초 설치) 사용자에게 물어본다. 명시적 설정이 암묵적 기본값보다 우선하는 fallback 체인 패턴이다.

status 명령에 설치 위치 표시

경로 감지를 넣으면서 status 출력에도 설치 위치 컬럼을 추가했다. 어떤 스킬이 user-level이고 어떤 게 project-level인지 한눈에 보인다.

| 스킬         | 설치 위치 | 설치 버전 | 최신 버전 | 미처리 기록 | 마지막 패치 |
|--------------|----------|----------|----------|------------|-----------|
| idea-guide   | user     | v1.2.0   | v1.2.0   | 0          | 2026-02-10 |
| my-skill     | project  | v1.0.0   | v1.0.0   | 0          | -          |

이 정보가 있으면 "이 스킬은 이 프로젝트 전용인데 왜 다른 프로젝트에서 안 보이지?" 같은 혼란을 방지할 수 있다.

설계 문서 먼저 쓰기

이번 작업에서 하나 더 효과를 본 건 설계 문서를 먼저 작성하는 방식이었다. docs/plans/ 디렉토리에 변경 의도와 구조를 먼저 적고 그걸 기반으로 패치노트와 구현을 진행했다. AI 코딩 도우미와 협업할 때 이 방식이 특히 잘 맞는다. 설계 문서가 곧 컨텍스트가 되기 때문이다. Claude Code에 "이 설계 문서대로 구현해줘"라고 하면 의도가 정확하게 전달된다.

돌아보면

패치노트에 이런 메모를 남겼다.

스킬 도구는 특정 환경에 의존하지 않고 실행 컨텍스트에서 필요한 정보를 감지해야 한다. 하드코딩된 경로는 개발자의 현재 환경에서만 동작한다.

Convention over Configuration이라는 원칙이 있다. Rails가 유명하게 만든 개념인데 핵심은 "합리적인 기본값을 제공하되 명시적 설정을 우선한다"는 것이다. CWD 기반 감지가 딱 이 패턴이다. 별도 설정 없이 실행 위치에서 컨텍스트를 유추하고 모호하면 사용자에게 묻는다.

Claude Code 스킬을 만들면서 자꾸 느끼는 건데 스킬도 결국 소프트웨어다. 버전 관리가 필요하고 환경 독립성이 필요하고 테스트가 필요하다. "프롬프트 파일"이라고 대충 관리하면 환경이 바뀌는 순간 깨진다. 이번 v1.1.0은 그 교훈을 코드로 옮긴 작업이었다.

자주 묻는 질문

Claude Code 스킬에서 하드코딩된 경로 문제를 해결하려면?
실행 시점의 CWD를 기준으로 경로를 자동 감지하면 환경이 바뀌어도 스킬이 정상 동작합니다.
Claude Code 스킬의 project-level과 user-level 차이는?
project-level은 해당 프로젝트에서만, user-level은 모든 프로젝트에서 사용됩니다. project-level이 우선 적용됩니다.
Convention over Configuration 원칙이란?
합리적인 기본값을 제공하되 명시적 설정을 우선하는 원칙입니다. CWD 기반 경로 감지처럼 별도 설정 없이 실행 컨텍스트에서 정보를 유추합니다.
Claude 스킬(1/2)
Next

/wrap 하나로 세션 마무리 자동화하기