레퍼런스 없이 처음부터 만든 스킬이다. 'AI로 스프레드시트 쓰기'는 세 가지로 조용히 망가진다. 1만 행을 통째로 context에 부어 토큰을 태우고, 007이 7로·전화번호가 지수표기로·한글이 깨지고 수식이 계산값으로 덮이며, 한 셀 고치려다 시트 전체를 다시 써 남의 컬럼을 날린다. sheet-io는 각각을 inspect(스키마·샘플·통계만)·타입 보존(식별자 열은 text로 고정)·안전한 append로 막는다. 표준 라이브러리만 쓰고 공개 구글시트는 CSV export URL로 인증 없이 연동한다. 까다로운 실측(앞자리 0 code·전화번호·한글·날짜·빈값)으로 검증했다. 007과 전화번호가 텍스트로 보존되고 필터·추가가 타입을 지킨다. 스프레드시트를 다루는 모든 작업에 도입 후보.
실물부터, 설치 전에 전부 만져보세요
아래는 이미지가 아니라 이 스킬이 담고 있는 진짜 HTML입니다. 눌러 보세요.
'AI로 스프레드시트 쓰기'가 조용히 망가지는 3가지, 각각을 이 스킬이 막습니다. 로컬 CSV·공개 Google Sheet 모두, 표준 라이브러리만으로.
재앙 1
토큰 폭발
1만 행을 통째로 붓기 → inspect가 스키마·샘플·통계만
재앙 2
타입·인코딩 손상
007→7·전화번호·cp949·수식 → 식별자 열은 텍스트로 고정
재앙 3
통째 덮어쓰기
남의 컬럼·수식 날림 → append/타깃만
1) inspect: 통째 안 붓고 파악 (실측 출력)
$ python3 sheet.py inspect data.csv
columns : 7 | rows: 3
'name' : text : 0 null : 3 uniq
'code' : text(id) : 3 uniq values: 007, 042, 113 ← 007 보존
'phone' : text(id) : 01012345678 … ← 숫자로 안 뭉갬
'age' : int : 1 null : range 29..34
'joined' : date : 3 uniq
'score' : float : 1 null : range 88.5..91.2
# read only what you need: get <src> --where col=val --cols a,b --limit N
공개 Google Sheet는 URL만 붙이면 CSV export로 자동 변환·인증 없이 읽습니다("링크 있는 사람=뷰어" 공유만). 표준 라이브러리만(pandas·gspread 불필요), 007·전화번호 텍스트 보존까지 실측했습니다. XLSX·비공개 쓰기는 optional.
이번 스킬은 남의 자료를 참고하지 않고 우리가 처음부터 설계했습니다. 출발점은 하나 "AI로 스프레드시트 쓰기"는 세 가지로 조용히 망가진다는 것.
3대 재앙
1. 토큰 폭발: 1만 행 시트를 통째로 context에 부어버림. → inspect가 컬럼·행수·타입·샘플·통계만 줍니다. 전체를 안 넣고도 시트를 파악. 2. 타입·인코딩 손상: 007이 7로, 전화번호가 지수표기로, 날짜 재포맷, 한글 cp949 깨짐, 쓸 때 수식이 계산값으로 덮여 사라짐. → 식별자 같은 열은 텍스트로 고정(한 값만 0으로 시작해도 열 전체), 인코딩 폴백, 수식 왕복 금지. 3. 통째 덮어쓰기: 한 셀 고치라 했는데 시트 전체를 다시 써서 남의 컬럼·서식·수식을 날림. → append/타깃 업데이트만.
세 명령
sheet.py inspect data.csv # 스키마·샘플·통계 (토큰 절약)
sheet.py inspect "https://docs.google.com/..." # 공개 구글시트도 그대로
sheet.py get data.csv --where status=active --cols name,email --limit 20
sheet.py append data.csv --row "name=Kim,code=007,phone=01012345678"
구글시트 연동은 인증 없이
Google Sheets URL을 붙이면 CSV export URL로 자동 변환해 읽습니다. 조건은 하나: 시트가 "링크 있는 사람 = 뷰어"로 공유돼 있을 것(File > Share). 아니면 CSV 대신 로그인 페이지가 와서, 도구가 "공개가 아니다"라고 정확히 알려줍니다. 설치할 것도, 크리덴셜도 없습니다.
실측으로 검증했다
앞자리 0 코드(007)·전화번호(01012345678)·한글·날짜·빈값·소수를 담은 시트로 돌렸습니다. code와 phone이 text(id)로 보존(숫자로 안 뭉개짐), age는 int(+null), 날짜·소수 인식, 필터·추가가 타입을 지켰습니다.
정직한 한계
구글시트 쓰기는 코어에 없음(읽기 전용). 쓰려면 CSV로 내려 append 후 재업로드하거나, 서비스계정+gspread(optional)로. 크리덴셜은 스킬이 안 싣습니다.
XLSX는 코어 밖(stdlib 불가): openpyxl 설치하거나 CSV로 저장. 대부분의 "연동"은 CSV/구글이면 됩니다.
쓰는 법
Claude Code: "이 구글시트 연동해줘" / "이 CSV 정리해줘" 하면 inspect→get→append로 안전하게
다른 AI: npx skills add hanmariyang/giting-skills --skill sheet-io