Yunseon Hong

archive / / #개발

ccbar를 Claude Code 플러그인 디렉터리에 제출했다

Yunseon Hong · 2분 읽기

GitHub에만 올려둔 상태줄 스크립트를 찾을 수 있게 하려다 플러그인으로 포장하고 Anthropic 디렉터리에 제출까지 했다. 플러그인이 상태줄을 직접 못 바꾼다는 것부터 막혔다.

ccbar는 Claude Code 상태줄에 사용량과 컨텍스트, 비용을 한 줄로 찍어주는 파이썬 파일 하나다. GitHub에 올려두긴 했는데 저장소를 아는 사람이 아니면 찾을 방법이 없었다.

그래서 GitHub 말고 공개로 배포할 곳이 있는지부터 봤다. 이번에도 Claude Code랑 같이 문서를 읽어가며 진행했다.

후보는 이 정도였다

  • PyPI (pipx install, uv tool install)
  • Homebrew tap
  • npm
  • Claude Code 플러그인 마켓플레이스

설치만 보면 PyPI가 제일 자연스러웠지만 목적은 발견성이었다. 쓰는 사람이 전부 Claude Code 안에 있으니 플러그인 쪽으로 정했다.

플러그인은 상태줄을 못 바꾼다

처음 막힌 건 여기였다. 플러그인이 settings.json으로 기본값을 넣을 수 있긴 한데 받아주는 키가 agent와 subagentStatusLine 둘뿐이다. 메인 상태줄인 statusLine은 없다.

mods로 화면을 그리는 방법도 찾아봤지만 그릴 수 있는 자리 목록에 상태줄은 없더라.

그래서 설치 뒤에 /ccbar:setup을 한 번 치게 했다. 이 스킬이 ~/.claude/settings.json의 statusLine만 써주고, 이미 다른 값이 있으면 바꾸기 전에 묻는다.

경로도 한 번 꼬였다. 플러그인 설치 경로(${CLAUDE_PLUGIN_ROOT})는 업데이트할 때마다 바뀌어서 상태줄이 거길 가리키면 업데이트하는 순간 깨진다. 업데이트해도 유지되는 data 디렉터리에 SessionStart 훅으로 ccbar.py를 복사해두고 상태줄은 그 복사본을 보게 했다.

{
  "type": "command",
  "command": "cp",
  "args": ["${CLAUDE_PLUGIN_ROOT}/ccbar.py", "${CLAUDE_PLUGIN_DATA}/ccbar.py"]
}

여기까지 하면 저장소에 marketplace.json 하나 두는 것으로 공개는 끝이다. 제출 절차 없이 /plugin install ccbar --marketplace egg-/ccbar로 바로 깔린다. 다만 이건 저장소를 아는 사람만 쓸 수 있으니 발견성은 그대로다.

디렉터리 제출

사람들이 실제로 둘러보는 곳은 Anthropic 디렉터리다. 제출하려면 유료 claude.ai 플랜이 있어야 하는데 Pro를 이미 쓰고 있어서 추가로 드는 돈은 없었다.

제출 전 체크리스트를 미리 읽은 게 도움이 됐다. 저장소 어디에든 .gitattributes에 export-ignore가 있으면 검증이 아예 멈춘다고 되어 있는데, 문서 사이트를 테마 템플릿에서 가져오면서 그게 딸려 들어와 있었다. 커밋된 __pycache__의 .pyc도 같이 지웠다.

그래도 포털 검증에서 하나 걸렸다. docs/site/CLAUDE.md가 AGENTS.md를 가리키는 심볼릭 링크였는데 심볼릭 링크는 받아주지 않는다. @AGENTS.md 한 줄짜리 파일로 바꿨다.

제출하면서 고친 것들

  • 아이콘: 처음 저장하거나 제출할 때 한 번만 정해진다길래 검증 단계에서 서둘러 넣었다
  • 이름: displayName이 없으니 목록에 “Ccbar”로 떠서 추가
  • 노출 위치: 기본값이 Claude Code, Cowork, Claude 앱 전부라서 Claude Code만 남겼다
  • 개인정보처리방침: 링크를 요구해서 GitHub Pages 사이트에 #privacy 섹션을 만들었다

마지막 건 처음에 별도 페이지로 만들려다 접었다. 사이트 링크가 전부 루트 기준 상대경로라 하위 경로에 페이지를 두면 파비콘부터 깨진다.

검증은 통과했지만 policy hold가 6건 남았다. 저장소 루트를 플러그인으로 잡아서 문서 사이트 파일까지 같이 검사받은 탓이 큰 것 같다. 제출을 막는 건 아니고 리뷰어가 본다고 해서 그대로 냈다.

제출이 끝나니 push webhook을 설정하라고 했다. 안 해도 6시간마다 새 커밋을 확인하고, 어차피 버전마다 리뷰어 승인이 있어야 공개된다. 문서 사이트 커밋에도 스캔이 돌 것 같아 넘겼다.

지금은 보안 스캔 단계다. 리뷰를 통과할지는 아직 모르겠다. 결과가 나오면 hold 6건이 어떻게 처리됐는지 이어서 남겨볼 생각이다.

shareXFacebookLinkedIn

keep reading

datepostcategory
상태줄 데몬이 render_worker를 두 개씩 돌리고 있었다#개발
엑셀 | 행 전체를 칠하려면 $를 열에만 건다#개발
RedactCheck를 6주 만에 접었다#개발