전체 글
-
토큰은 돈이다 시즌2 2편 - 압축 레이어를 가르고, 기본 OFF를 같은 날 오후에 뒤집었다AI 엔지니어링 2026. 10. 27. 07:29
비슷한 도구가 나왔을 때 기능 목록을 대조하는 대신 압축을 세 레이어로 갈랐고, 그 결과 한 레이어는 포기하고 한 레이어의 기본값은 뒤집었다. 6월 중순, 출력 압축 도구 scrooge를 막 출시하고 발표 수치를 정직하게 고치는 작업에 파묻혀 있을 때 비슷한 결의 도구를 봤다. ponytail — 에이전트가 코드를 덜 쓰게 만드는 Claude Code skill이다. "이게 정말 필요한가"부터 시작하는 사다리를 태워, 이미 있는 것·표준 라이브러리·한 줄로 되는 것을 훑고 나서야 새 코드를 쓰게 한다. 절약이라는 단어를 쓰고, 토큰 절감 수치를 내걸고, 대상 호스트도 같다.첫 반응은 기능 목록을 여는 것이었다. 저쪽에 있고 우리에게 없는 게 뭔가. 두 줄 때쯤 적다가 손을 멈췄다. 그 표를 끝까지 채우면..
-
토큰은 돈이다 시즌2 1편 - 압축 도구가 자기 벤치마크의 baseline까지 압축한 작업기AI 엔지니어링 2026. 10. 20. 07:27
격리 코드는 처음부터 있었다. 남의 hook만 격리하고 있었을 뿐이다. 출시하고 나서 새 모델로 벤치마크를 다시 돌렸다. 영어 코퍼스 실행 결과를 훑는데 답변 하나가 한국어로 적혀 있었다. 영어 프롬프트에, 영어 register를 시스템 프롬프트로 넣고, 영어 답을 기대한 자리에서.그 한 줄이 아니었으면 그 실행 결과를 그대로 README에 박았을 것이다. 절감률은 예쁘게 나와 있었으니까.여기서 register는 출력의 문체·형식 규약을 말한다. 존댓말을 쓸지, 문장을 완결할지 같은 것. 내가 만든 도구는 이 register를 바꿔 같은 답을 더 적은 토큰으로 내게 한다. hook이나 플러그인으로 모델 컨텍스트에 뭔가를 주입하는 도구를 만들면서 그 효과를 자기 개발 환경에서 잰다면 남 얘기가 아니다. (..
-
토큰은 돈이다 시즌2 0편 - 출시하자마자 내 숫자 세 개가 전부 틀렸다AI 엔지니어링 2026. 10. 13. 07:22
stats는 2.89배로 부풀고, 벤치는 내 훅에 오염되고, README는 재본 적 없는 정확도를 광고하고 있었다 출시하고 제일 먼저 한 일은 내 도구를 나한테 써보는 거였다. 압축 모드를 켜고 하루를 보낸 뒤 /scrooge-stats를 쳤다. 절감량이 체감보다 컸다. 압축 도구가 파는 건 결국 숫자 하나뿐이라 그 숫자가 크게 나오면 기뻐할 게 아니라 의심해야 한다.세션 트랜스크립트를 직접 세어봤다. 어시스턴트 라인이 385줄인데 message.id는 143개였다. Claude Code는 응답 하나를 content block마다 한 줄씩 JSONL에 쓰고, 그 줄마다 같은 usage 객체를 통째로 반복한다. 줄을 전부 더하면 2.89배가 나온다. 내 stats는 첫 커밋부터 그렇게 더하고 있었다.거기서..
-
멀티에이전트 ideation으로 뽑은 흡수 후보 7개 중 3개를 지운 작업기AI 엔지니어링 2026. 10. 6. 07:19
기획은 병렬로 잘 돌았다. 문제는 "만들 수 있나"만 묻고 "만들어야 하나"는 안 물었다는 데 있다. "설계를 전부 바꿔도 좋으니 성능을 올리자"로 세션을 열었다. LLM 출력을 압축하는 개인 도구를 하나 굴리던 중이었고 비슷한 도구 둘이 각각 다른 걸 잘했다. 하나는 대화 기록·MCP 같은 입력 쪽을 줄였다. 다른 하나는 코드를 덜 짜게 만들었다. 사용자가 셋을 따로 깔게 두느니 하나로 흡수하자는 게 출발점이었다.기획은 에이전트에 맡겼다. 축을 셋으로 갈라 병렬로 아이디어를 뽑고(생태계·아키텍처·압축 품질), 그 결과를 비판 단계에 넘긴 다음, /my-plan으로 spec과 task 문서까지 분해했다. Codex를 순차 비평자로 붙여 의존성 누락 세 건도 잡았다. 흡수 게이트도 있었다. 어떤 능력이든 ..
-
LLM 출력 압축에 문서 경계를 그은 작업기AI 엔지니어링 2026. 9. 29. 07:15
README를 써달라고 했더니 ~함 종결로 나왔다 출력 토큰을 깎는 register 규칙을 만들어 쓴다. 존댓말을 떨어뜨리고, ~함으로 끝내고, 의미가 명확하면 조사를 생략하는 식이다. 대화에서는 잘 맞았다. 답을 읽고 나면 버리는 표면이라 어조를 깎아도 손해가 없었다.문제는 그 다음이었다. 한 세션에서 README의 설치 섹션을 써달라고 했더니 이런 게 나왔다.Node 18+ 필요. 설치 `npm i taskline`. 초기화 `npx taskline init` 실행 시`taskline.config.json` 생성됨. 환경변수 `TASKLINE_TOKEN` 필수 — 없으면 기동 실패.정보는 다 있다. 그리고 이대로 저장소에 커밋할 수는 없다. README는 내가 읽고 버리는 답변이 아니라 처음 오는 사..
-
심링크에서 복사로 후퇴한 세 번의 작업기AI 엔지니어링 2026. 9. 22. 07:59
병렬 git worktree, 리뷰 스코프, POSIX 설정 파일 교체. 세 번 다 우아한 참조를 택했다가 물러섰다. Claude Code 세션을 두 개 띄우고 나서였다. 하나는 폼 컴포넌트를 뜯었고 다른 하나는 급한 버그를 잡았다. git worktree로 디렉터리를 갈라놨으니 서로 안 건드릴 줄 알았는데 20분쯤 지나 한쪽 dev server가 엉뚱한 포트를 물고 죽었다. 범인은 두 worktree가 함께 바라보던 .env.local 심링크였다.그 뒤로 몇 달간 개인 커맨드 몇 개를 만들고 고쳤다. 병렬 worktree를 관리하는 커맨드, 변경사항을 리뷰·검증하는 커맨드, Codex를 낮은 reasoning effort로 잠깐 눌러 부르는 래퍼. 도메인은 제각각인데 회고해 보니 세 번 다 같은 모양으..
-
골든셋·headless runner로 LLM 판정 게이트 회귀 테스트 작업기AI 엔지니어링 2026. 9. 15. 07:53
7월 13일, 게이트 마찰을 줄이겠다고 설정 문서 스물네 개를 한꺼번에 손봤다. 커맨드, 스킬, 가이드, 라이프사이클 계약. 그 더미 안에 판정 에이전트 파일의 네 줄짜리 diff가 섞여 있었다.- verdict is PASS when no CRITICAL or WARNING, REVISE when any CRITICAL or WARNING exists+ verdict is REVISE when any CRITICAL finding exists, PASS when no CRITICAL exists+ (WARNING and INFO are report-only and never flip the verdict — CRITICAL is the only decision point)의도한 변경이었다. 경고 하나에..
-
Javascript ES17(ECMAScript 2026) 문법정리카테고리 없음 2026. 9. 10. 07:13
has → get → set 세 줄이 한 줄이 된다Map으로 카운터나 그룹핑을 만들 때마다 똑같은 세 줄을 썼다. 키가 있으면 꺼내 쓰고 없으면 기본값을 넣는, 아무 판단도 들어 있지 않은 분기다.// before — 있으면 꺼내고 없으면 넣는다const counts = new Map();for (const w of words) { if (counts.has(w)) counts.set(w, counts.get(w) + 1); else counts.set(w, 1);}// after — getOrInsert가 그 분기를 삼킨다const counts = new Map();for (const w of words) counts.set(w, counts.getOrInsert(w, 0) + 1);그룹핑은 차이가..