feat: PyPI 배포 전환 (tako-shell) — 원라인 설치 + 슬래시 커맨드 동봉 - #56
Merged
Conversation
설정이 없을 때 안내문이 `cp config.example.yaml` 을 시켰다. 저장소를 받지 않고 설치한 사용자에게는 없는 파일이라 그대로 막힌다. 최소 YAML 을 안내문 본문에 직접 넣어 설치 방식과 무관하게 따라갈 수 있게 했다. 첫 실행에서 안내만 하고 끝내지 않고, TTY 면 그 자리에서 init 을 제안한다. 비TTY(슬래시 커맨드·CI·파이프)는 종전대로 안내 후 exit 2 — 자동화가 입력을 기다리며 멈추면 안 되기 때문이고, 이 계약을 테스트로 고정했다. 토큰 발급은 브라우저를 거쳐야 하는 유일한 단계라 여기서 길을 잃는 사람이 많다. browser.py 를 추가해 init 이 발급 페이지를 열어준다 (clipboard.py 와 같은 베스트-에포트 규약 — 실패해도 흐름은 진행). --credentials 로 커스텀 경로를 준 상태에서 자동 init 이 돌면 인증 파일만 기본 경로에 생겨 바로 뒤 creds 로드가 엇갈리던 문제도 함께 고쳤다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FR3Lm3SnJ329MQV4SwTsut
install.sh 는 저장소의 commands/*.md 를 심볼릭 링크한다. 저장소 없이 설치한 사용자에게는 슬래시 커맨드가 통째로 도달 불가능하다는 뜻이라, 배포 방식을 바꾸면 기능이 하나 사라진다. commands/ 를 tako/commands/ 로 옮겨 패키지가 자기 슬래시 커맨드를 소유하게 하고, `tako slash install` 이 동봉 사본을 ~/.claude/commands/ 로 복사한다. 링크가 아니라 복사인 이유: 설치본의 원본은 도구 환경 안에 있어 패키지를 올리거나 지우면 링크가 끊긴다. 업그레이드 후 갱신은 --force. 이미 있는 파일은 손대지 않는다 — 사용자가 고쳤을 수 있다. 저장소를 받아 커맨드 자체를 편집하는 개발 흐름은 install.sh 의 링크 방식이 계속 담당한다. 새 경로를 보도록 고치고 두 방식의 역할을 헤더에 명시했다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FR3Lm3SnJ329MQV4SwTsut
설치의 실제 병목은 Python 런타임이었다. macOS 기본 python 은 3.9.6 이라 requires-python >=3.10 에 걸려 `pip install -e .` 가 바로 실패하고, 그 뒤로 PEP 668 · PATH 문제가 줄줄이 따라온다. uv 가 이걸 통째로 흡수한다. get-tako.sh 는 uv 를 탐지·설치한 뒤 PyPI 에서 설치하고 PATH 를 확인한다. 사용자는 Python·git·pip 를 인지할 필요가 없다. curl | bash 를 꺼리는 사람을 위해 스크립트 헤더에 동등한 PyPI/pipx 경로를 병기했다. 배포명은 tako-shell — PyPI 의 tako 는 선점돼 있다. 실행 명령어는 project.scripts 가 패키지명과 독립이라 tako 그대로다. 이름이 기능을 말해주지 않는 대가는 keywords 로 갚는다. 릴리스는 태그 푸시 하나로 끝난다. API 토큰을 저장하지 않고 Trusted Publishing (OIDC) 으로 인증하며, 태그와 pyproject 버전이 어긋나면 발행을 거부한다. ci.yml 은 macOS·Linux × Python 3.10·3.13 로 테스트하고 설치 스크립트를 shellcheck 한다. tests/__init__.py 는 unittest discover 가 tests/ 를 훑기 위한 것 — 없으면 CI 가 테스트를 한 건도 수집하지 못한다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FR3Lm3SnJ329MQV4SwTsut
README 의 설치 절이 개발자용 clone → pip install -e . 기준이라 받는 사람 기준으로 다시 썼다. 원라인을 앞에 두고 PyPI/pipx 를 나란히, 소스 설치는 접어서 뒤로 보냈다. 슬래시 커맨드 절을 새로 두어 tako slash install 과 install.sh 의 쓰임을 구분했고, 릴리스 절차와 Trusted Publishing 최초 설정을 남겼다. docs/distribution-review.md 는 왜 이 방식인지에 대한 기록이다. 특히 언어 재작성을 하지 않기로 한 근거와 재평가 트리거를 남겼다 — 공개 배포에서는 단일 바이너리가 오히려 불리하다(브라우저 다운로드 경로에서만 Gatekeeper 가 작동한다)는 점이 판단의 축이었다. 보류한 것도 함께 적었다: Claude Code 플러그인 전환(커맨드명이 깨지는 변경), Homebrew tap, Windows, 그리고 README 는 영어인데 CLI 출력은 한국어인 불일치. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FR3Lm3SnJ329MQV4SwTsut
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
받는 사람이 깔아야 하는 별도 프로그램을 최소화하는 것이 목표. 기능은 그대로 유지한다.
왜
설치의 실제 병목은 Python 런타임이었다. macOS 기본 python 은 3.9.6 이라
requires-python >=3.10에 걸려pip install -e .가 바로 실패하고, 그 뒤로PEP 668 · PATH 문제가 줄줄이 따라온다. uv 가 이걸 통째로 흡수한다.
설치 방식만 바꾸면 슬래시 커맨드가 도달 불가능해진다는 문제가 딸려 나왔다 —
install.sh는 저장소의commands/*.md를 심볼릭 링크하는데, PyPI 설치자는저장소가 없다. 같이 고쳤다.
무엇
배포 채널
tako-shell(PyPI 의tako는 선점됨). 실행 명령어는tako그대로get-tako.sh— uv 탐지·설치 → PyPI 설치 → PATH 확인.curl | bash를 꺼리는 쪽을 위해 PyPI/pipx 경로 병기ci.yml— macOS·Linux × Python 3.10·3.13 테스트 + 설치 스크립트 shellcheckrelease.yml— 태그 푸시 → 태그/버전 일치 검증 → 테스트 → 빌드 → PyPI Trusted Publishing (토큰 저장 없음)슬래시 커맨드
commands/→tako/commands/이동, package-data 포함tako slash install [--force] / list / path신설 — 동봉 사본을~/.claude/commands/로 복사install.sh의 링크 방식이 계속 담당첫 실행
tako init이 토큰 발급 페이지를 브라우저로 열어줌 (browser.py)cp config.example.yaml을 시켰다 — PyPI 설치자에겐 없는 파일. 최소 YAML 을 본문에 직접 넣음--credentials커스텀 경로에서 자동 init 이 돌면 인증 파일만 기본 경로에 생기던 문제검증
test_first_run.py,test_slash.py)머지 후 필요한 것
project: tako-shell / owner: nonasking / repo: tako / workflow: release.yml / environment: pypipypi생성git tag v0.1.0 && git push origin v0.1.0get-tako.sh의 raw URL 이develop을 가리키므로 머지 전에는 원라인 설치가 동작하지 않는다.보류한 것
/tako사용자에게 커맨드명이 깨지는 변경이라 설치 문제와 분리판단 근거와 재평가 트리거는
docs/distribution-review.md에 남겼다. 특히 공개 배포에서는 단일 바이너리가 오히려 불리하다(브라우저 다운로드 경로에서만 Gatekeeper 가 작동) 는 점이 언어 재작성을 하지 않기로 한 축이었다.commands/를 옮겼으므로 예전에install.sh로 링크해 쓰던 사람은 링크가 끊긴다../install.sh재실행 또는tako slash install --force로 복구된다.🤖 Generated with Claude Code
https://claude.ai/code/session_01FR3Lm3SnJ329MQV4SwTsut