표 전체를 컨텍스트에 밀어 넣는다.
됩니다. 안 될 그 순간까지는 계속 됩니다. 주의가 지금 판단할 필요도 없는 수천 행에 흩어지고, 앞쪽 행은 창 밖으로 밀려나며, 실패가 조용합니다 — 오류도 예외도 없이 답만 서서히 흐트러집니다. 그리고 세션이 끝나면 실행도 함께 끝납니다.
coding agent를 위한 끊기지 않는 데이터 파이프라인
당신의 agent는 작은 배치 하나를 받아 처리하고 제출한 뒤 다음 것을 받아 갑니다 — 파이프라인의 상태는 agent의 컨텍스트가 아니라 서버에 있어서, 실행이 그것을 시작한 세션보다 오래 살아남습니다. 모든 시도와 모델과 규칙 변경은 하나의 장부에 남습니다.
원본 115행 → 정제 62행 → 62행 디스크로 대여 → 제출 → 반려 → 2차 시도가 같은 배치를 그대로 이어받아 서버 상태에서 계속, 새 실행이 아님 → 62행 적재 · 녹화 당시 게이트는 켜져 있었습니다 ↓
당신의 머신에서, 당신의 모델 키로. Tablize는 모델도 런타임도 제공하지 않습니다.
대여받은 배치 하나뿐, 표 전체는 절대 아닙니다. 지금 처리하지 않는 행은 서버에 남아 있으므로, 표가 길어져도 주의가 묽어지지 않습니다.
다음 세션은 장부에서 이어 달립니다 — 미완 배치, 리스, 판정이 그대로 있어 대화 기록으로 현장을 복원할 필요가 없습니다.
검사 샘플이 없으면 게이트도 없습니다. 검사 샘플 파일을 주면 agent가 읽을 수 없는 검사가 모든 배치를 판정합니다 — 하나만 틀려도 배치 전체가 반려되고, 반려는 하나하나 장부에 남습니다.
01 / 실패 양상
50행을 잘 읽는 모델은 5,000번째 행도 똑같이 잘 읽습니다 — 달라지는 것은 그때 손에 쥐고 있는, 그 행과 무관한 표의 양입니다.
됩니다. 안 될 그 순간까지는 계속 됩니다. 주의가 지금 판단할 필요도 없는 수천 행에 흩어지고, 앞쪽 행은 창 밖으로 밀려나며, 실패가 조용합니다 — 오류도 예외도 없이 답만 서서히 흐트러집니다. 그리고 세션이 끝나면 실행도 함께 끝납니다.
싸고 빠르고 반복 가능합니다 — 대가는, 모델이 해야 했던 의미 판단이 문자열 매칭으로 압축된다는 것입니다. 「이 회사는 제조사인가 무역사인가?」가 회사명에 정규식을 돌리는 일이 됩니다. 이제 스크립트가 규칙의 유일한 진술이고, 아무도 그것을 검토하지 않았으며, 틀린 행은 맞은 행과 똑같이 생겼습니다.
당신의 agent는 다음 배치를 요청하고, 계산하고, 제출하고, 또 하나를 요청합니다: 의미 판단은 여전히 모델이 하지만 손에 쥐는 것은 넘겨받은 행뿐입니다. 그리고 계산을 당신의 agent가 하므로, 토큰당 과금되는 API 청구서 대신 월정액 coding agent 구독이 그 일을 해냅니다.
고를 문제는 애초에 「모델이냐 스크립트냐」가 아니었습니다. 고를 문제는, 이 프로세스가 잊어버리는 컨텍스트 창에 사는지, 잊지 않는 구조에 사는지입니다.
02 / 왜 장부가 필요한가
이 절은 심판과 상태와 이유, 세 가지가 전부 일하는 쪽 안에 살고 있는 실행에 관한 얘기입니다.
agent가 이번 세션에서 추출 로직을 썼습니다. 어떤 행이 이상해 보이면 같은 agent가 검증기를 손봅니다 — 그리고 그 배치는 통과합니다. 아무것도 그걸 막지 못합니다. agent 바깥에 아무것도 없었으니까요.
어떤 행을 내보냈는지, 무엇이 돌아왔는지, 무엇이 왜 반려됐는지 — 전부 대화 기록 안에 있었습니다. 새 세션은 파일과 반쯤 된 결과만 보고, 이어 달리는 대신 단서로 실행을 재구성합니다.
이 행은 어느 버전 기준으로 받았나? 어느 모델이 만들었나? 전에 반려된 적이 있나? 답이 「대화 기록을 찾아봐라」라면 장부가 없는 것입니다. 기억이 있을 뿐이죠.
일하는 쪽이 심판을 고칠 수 있다면, 당신에겐 게이트가 없습니다. 프롬프트가 하나 더 있을 뿐입니다.
03 / 관리되는 구간
Tablize는 네 단계를 관리하고 나머지는 일절 자기 것이라 하지 않습니다. 각 상자 맨 아랫줄을 보세요 — 그 단계가 당신 것인지 우리 것인지 쓰여 있습니다.
append-only 원본 행 — 크롤링 한 번, 내보내기 한 번, 손으로 만든 CSV 하나. 중복은 남습니다. 그건 수집에 관한 사실이지 오류가 아니니까요.
당신 또는 당신의 agent가 수집 · Tablize는 가져오지 않음
agent가 정해진 크기의 배치를 디스크로 받아, 당신의 모델로 당신의 프롬프트를 돌리고, 모델과 프롬프트 해시를 붙여 하나의 배치로 제출합니다.
당신의 머신, 당신의 모델 키에서 실행 · Tablize는 모델 미제공
검사 샘플 없이 라인을 만들면 게이트가 없습니다: 아무것도 판정하지 않고, 행은 미검수로 적재됩니다. 검사 샘플을 주면 정답을 아는 행이 모든 배치에 섞여 들어갑니다 — 기대값은 서버에만 있고 작업을 받아갈 때 절대 내려가지 않으며, 하나만 틀려도 배치 전체가 반려됩니다.
라인에 검사 샘플이 있으면 Tablize가 보관 · 제출하는 agent는 끝까지 읽지도 승인하지도 못함
네 번째 표가 아닙니다 — 처리 기록 표를 읽는 한 방식으로, 원본 행마다 가장 최근 행을 보여줍니다. 게이트가 있으면 통과한 행만 보여주고 반려된 시도는 아무것도 움직이지 못하며, 게이트가 없으면 적재된 행을 미검수 표시와 함께 보여줍니다.
Tablize가 투영 · 하류에서 실제로 썼는지는 당신이 판단
CLI 명령이 없는 유일한 일: 게이트를 켠 구간에서, 검사 샘플을 agent 자신이 썼을 때, 그 라인은 초안 상태로 만들어지고 사람이 캔버스에서 게이트를 열기 전까지 작업을 한 건도 내보내지 않습니다. 위 재생에 나온 403 · pending_signoff가 그것입니다. 자기 답안을 자기가 승인할 수 있는 agent는 아무에게도 검사받지 않은 것입니다. 게이트를 켜지 않은 구간은 이 질문에 도달하지도 않습니다: 곧바로 작업을 내보내고, 적재되는 행에 미검수 표시를 답니다.
04 / 당신이 직접 조이는 게이트
당신이 그 검사를 쓰기 전까지는, 아무도 하지 않았습니다. 여기에는 「꺼 둔다」는 스위치가 없습니다: 아직 쓸 준비가 안 된 검사 샘플로 세운 게이트는 잡음 게이트이고, 잡음 게이트는 게이트가 없는 것보다 나쁩니다. 단계는 라인을 만들 때 고정됩니다. 그래서 조인다는 것은 라인을 다시 만든다는 뜻입니다: 파이프라인이 지킬 만해졌을 때 일부러 하는 동작입니다. 이전 라인이 이미 만든 결과는 그대로 남습니다.
장부는 하나도 빠지지 않습니다: 모든 배치·모델·기준 버전·시각이 기록돼 있습니다. 없는 것은 그 검사입니다 — 결과를 사람이 확인한 답과 비교하는 것이 아무것도 없으므로, 결과는 미검수로 도착합니다. 이 단계는 첫 실행에는 맞고 마지막 실행에는 틀린 선택입니다.
모든 배치가 검사 샘플과 비교되고 점수도 기록되지만, 어떤 배치도 멈추지 않으므로 결과는 여전히 미검수로 도착합니다 — 그 배치가 전부 통과했어도 그렇습니다. 게이트가 구속력이 없을 때 통과는 측정이지 인증이 아닙니다. 이 점수로, 이 샘플들이 맞는 샘플인지를 무엇이든 막게 하기 전에 판단하십시오.
검사 샘플은 숨겨져 있고 구속력이 있습니다. 표본 검사에서 하나만 틀리면 배치 전체가 반려되고, 연속 반려는 그 구간을 헛돌게 두지 않고 멈춰 세웁니다. enforce 만이 「검수 통과」를 부여할 수 있습니다 — 그것이 이 단어가 아직 값을 하는 이유 전부입니다.
게이트는 장부에서 당신이 가장 먼저 조일 수 있는 부품입니다. 파이프라인을 끊기지 않게 만드는 것은 게이트가 아닙니다 — 그 부분은 게이트가 없는 라인에서 이미 돌고 있습니다.
05 / 제품 실물
같은 실행을, 애플리케이션에서, 게이트가 켜진 상태(enforce)로 녹화했습니다 — 반려가 눈에 보이는 것은 그 때문입니다. 보정 없음, 100% 배율, 각 이미지 헤더에 적힌 곳만 잘라냈습니다.
한 캔버스에 구간 전체가 있습니다: 원본 115행, url 기준으로 접힌 53행, 정제 62행, 추출, 그리고 그 게이트.
게이트에서 나가는 선 위의 글자는 제품 자신의 라벨이지 우리가 쓴 설명이 아닙니다: 통과 62 · 차단 62회. 기록됐지만 승격되지 않았음을, 선 위에 직접 그려 둔 것입니다.
한 줄이 배치 하나의 장부 전체를 담습니다: 배치 id, 몇 행을 받아갔는지, 숨겨진 검사 점수, 어느 모델이 만들었는지, 그리고 몇 번 제출됐는지.
아래 상태 필터는 반려 62를 통과 62 옆에 나란히 놓습니다. 이 제품에서 반려는 일급 상태이지, 지워야 할 에러 로그가 아닙니다.
반려로 필터를 걸면 그 62행이 그대로 있습니다 — 회사명, 모델이 고른 분류, 그리고 그것이 판단 근거로 삼은 증거 텍스트까지.
다음 시도가 짐작이 아니라 논증이 되는 이유가 이것입니다: 무엇을 고칠지 정하기 전에, 약한 모델이 실제로 뭐라고 했는지 읽을 수 있습니다.
스크린샷은 2026-07-28 로컬 인스턴스에서 찍었습니다. 메커니즘·id·카운트·판정·시스템 열은 제품 자신의 상태이고, 공급업체 행은 그 점검을 위해 만든 샘플 데이터입니다. B와 C는 제품 라이트 테마에서 찍혔고 두 사이트 테마 모두에서 그대로 보여집니다 — 스크린샷에 필터를 씌우느니 라벨을 붙이는 편을 택했습니다. 이 페이지에 고객 로고가 없는 이유는, 아직 보여드릴 것이 없기 때문입니다.
06 / 나에게 맞나?
agent 하나, 오후 한 나절, 틀려도 비싸지 않다면 — CSV가 정답이고 장부는 순전한 오버헤드입니다. 실제로 해당되는 것만 체크하세요.
0/ 10
07 / 경계
이 페이지에서 가장 무게가 실린 절입니다. 자기 범위를 부풀리는 장부는 장부가 없느니만 못합니다. 사람이 그 장부가 원래 다루지 않던 부분을 더 이상 확인하지 않게 되니까요.
검수 통과로 표시된 행은 그 시점의 기준과 검사 샘플을 통과했다는 뜻이고, 그 버전이 기록돼 있습니다. 미검수로 표시된 행은 판정된 적이 없습니다 — 표시가 어느 쪽인지 알려줍니다.
모든 시도·배치·모델·기준 변경에 장부가 있습니다 — 누가, 언제, 어느 버전으로.
실패한 시도는 남아 있고 읽을 수 있으며, 검수 통과 뷰에는 절대 들어가지 않습니다. 게이트가 없으면 남길 반려 자체가 없습니다 — 아무것도 판정하지 않으니 아무것도 반려되지 않습니다.
다음 실행은 서버 상태에서 이어 달립니다 — 미완 배치·리스·판정이 그대로 있고, 대화 기록이 전혀 필요 없습니다.
원본 데이터 자체가 사실이거나 완전하다는 것. 원본 행에 애초에 없던 증거는 게이트에서 복구되지 않습니다.
당신이 정의한 필드가 하류에서 실제로 필요한 필드라는 것. Tablize는 당신의 계약을 집행할 뿐, 대신 발견해 주지 않습니다.
그 결과를 누군가 실제로 썼다는 것. 우리 스스로의 첫 전체 실행 테넌트에서는 136행 중 128행이 통과한 뒤 하류의 무엇에도 한 번도 집히지 않았습니다 — 다섯 라운드 동안, 아무도 눈치채지 못한 채, 장부는 내내 정확했습니다.
당신의 agent가 Tablize 밖에는 아무것도 쓰지 않는다는 것. 그것은 당신의 머신과 키를 갖고 있습니다. 이 장부가 다루는 것은 한 구간이지 그 agent가 아닙니다.
08 / 시작하기
명령 네 줄. 가입 폼도, 대시보드 투어도, 오래 유효한 키를 터미널에 붙여 넣는 일도 없습니다.
$ npm i -g @tablize/cli $ tablize install $ tablize login --url https://api.tablize.com $ tablize doctor
이 프로젝트의 clean → extract → accept 작업에 Tablize를 끊기지 않는 파이프라인으로 붙여줘. 핵심은 프로세스 상태가 네 컨텍스트가 아니라 서버에 있다는 점이야. 1. `npm i -g @tablize/cli` 를 실행한 뒤 `tablize install` 로 함께 오는 agent skill을 깔아 둔다. 2. `tablize login --url https://api.tablize.com` 을 실행하고, 브라우저 페어링을 승인해 달라고 나에게 요청한다. 3. `tablize doctor` 를 실행해 버전·skill·서버·워크스페이스 불일치를 전부 고친다. 4. 이 프로젝트를 읽고, 파이프라인을 만들기 전에 원본 증거 계약과 추출 결과 스키마를 먼저 제안한다. 5. 첫 실행에서는 검사 샘플 파일 없이 추출 구간을 만든다 — `none` 단계로 돌아간다: 판정 없음, 행은 미검수로 적재. 칸을 채우려고 검사 샘플을 지어내지 않는다. 6. 작은 배치로 일한다: `batch pull`, 계산, `batch submit`, 반복. 표 전체를 컨텍스트에 절대 올리지 않고, 이어 달릴 때는 이 대화가 아니라 `tablize context` 를 읽는다. 7. 어떤 행을 믿기 전에 `tablize transform show` 로 `gateMode` 를 읽는다: `enforce` 만이 행을 검수 통과로 표시한다. 단계는 라인을 만들 때 고정되므로 `observe` 나 `enforce` 로 가려면 새 라인을 만들어야 한다 — 파이프라인이 지킬 만해졌을 때 제안하고, 먼저 나에게 묻는다. 검사 샘플에 서명하는 것은 나이고, 너가 아니다. 8. 계속 실패하는 검사 샘플을 피하려고 라인을 `none` 으로 다시 만들지 않는다. 그것은 게이트가 제 할 일을 하는 것이다. 9. 수집이 완전한지, 하류에서 실제로 쓰였는지는 Tablize 보장 범위 밖으로 명시해 둔다.
왜 API 키 입력란이 아니라 브라우저 페어링인가: 여기 명령들은 사람만큼이나 agent가 실행하는데, agent에게는 브라우저도 비밀번호도 없습니다. 페어링은 사람의 클릭 한 번으로 agent에게 쓸 수 있는 자격 증명을 줍니다 — 그리고 그 비밀키는 웹 페이지에도, 클립보드에도, 셸 히스토리에도 처음부터 끝까지 나타나지 않습니다.
제품 UI와 CLI는 현재 영어와 중국어만 지원합니다. 이 페이지는 한국어지만, 설치 후 보게 될 화면은 영어입니다 — 아래 터미널·브라우저 화면은 그래서 원문 그대로 실었습니다.
실제로 일어나는 일 · CLI와 브라우저의 실제 출력
🔐 Sign in to tablize Opening: https://app.tablize.com/cli-login?code=… Confirm this code matches: BFTK-9QDX Waiting for approval....
이 시점에 승인된 것은 아무것도 없습니다. 아무도 승인하지 않으면 요청은 스스로 만료됩니다.
Sign in to tablize? A command-line client is asking to connect to your account. Client tablize CLI · your-mac · you Code BFTK-9QDX What it will be able to do Read and write your data. It cannot manage members, policies or billing, and it does not expire — revoke it any time in Profile → API keys. [ Approve ] [ Refuse ]
승인 전에 이 코드를 당신 터미널의 코드와 대조하게 됩니다. 거부하면 아무것도 주지 않고, 기다리던 터미널은 통보를 받고 멈춥니다.
$ tablize doctor
{
"summary": { "ok": 9, "warn": 0, "fail": 0 },
"message": "all three layers healthy against
https://api.tablize.com (9 ok, 0 warn) —
this verdict covers that server only",
"next": "tablize context # open tasks, recipes, rules"
}
설치된 것과 도는 것이 같은가? skill과 CLI가 맞는가? 서버 기능이 살아 있는가? 실패한 항목마다 그에 해당하는 fix 명령이 회신에 붙어 오므로, agent가 당신에게 묻지 않고 스스로 고칩니다.
09 / 요금 — 하나의 엔진, 등급은 계단
모든 등급이 같은 엔진을 돌립니다. 워크로드가 커질 때만 한 칸 올라가면 됩니다.