새로운 모델들은 당신의 로드맵 전체를 몇 시간, 심지어 며칠 동안 흐름을 놓치지 않고 진행합니다. 바로 그렇기 때문에 상태 드리프트는 덜이 아니라 더 중요해집니다. 체크포인트 사이에서 에이전트가 더 많은 일을 할수록, 기록된 상태가 조용히 git과 어긋나기 쉬워집니다. casp check는 그 순간 push를 차단하는 결정론적 게이트입니다 — 오늘의 Claude Code와, 다음에 나올 모든 모델과 함께.
일주일 만에 프로젝트로 돌아오거나, 다섯 개를 동시에 굴립니다. 에이전트는 더 이상 현실과 맞지 않는 상태 파일을 읽고, 이미 출시된 작업을 자신만만하게 다시 시작하며, 당신은 그것을 되돌리느라 한나절을 태웁니다.
보드도, 카드도, 스프레드시트도 당신을 구해 주지 못합니다. 컨텍스트를 재구성하는 일은 수작업이고, 에이전트는 그 어느 것도 읽지 못합니다. 상태는 기계가 읽을 수 있고, git 네이티브여야 하며 — 증명 가능하게 참이어야 합니다.
CASP는 모든 프로젝트에 세션을 넘어 살아남는 단 하나의 흐름을 부여합니다 — 그리고 조용히 드리프트하지 않습니다.{
"phase": "13 — camera streaming",
"next_prompt": "phases/14-camera.md",
// shipped in v13.4
"last_commit": "a1f3c9",
// not in git history
"migrations": ["0001"…"0007"],
// git stops at 0006
}
인접 영역 — Mem0, Letta, Zep, 새로운 git 네이티브 "메모리" 프로젝트들 — 은 모두 일어난 일을 저장합니다. 그러나 저장된 상태가 여전히 git의 현실과 맞는지 검증하는 곳은 거의 없습니다. 그 검증이 바로 casp check이며 — 모든 push 전에 필수입니다.
당신의 next_prompt이 이미 출시된 — 혹은 존재하지 않는 — 파일을 가리킵니다. CASP는 잘못된 세션을 시작하기를 거부합니다.
히스토리에 없는 last_commit, 동기화가 어긋난 마이그레이션 목록, 커밋되지 않은 상태 — 추측이 아니라 git 자체와 대조하여 검사합니다.
모호한 유사도 점수 따위는 없습니다. 상태가 거짓을 말하는 동안 push를 멈추는, 단호하고 재현 가능한 pass/fail 게이트입니다.
CASP는 당신의 워크플로에서 아무것도 대체하지 않습니다. 다른 어느 것도 메우지 못하는 단 하나의 빈틈을 채울 뿐입니다 — 프로젝트의 검증된 현재 시제를, 에이전트가 읽고 실행할 수 있는 형태로.
데이터베이스도 없습니다. 서비스도 없습니다. 벡터 스토어도 없습니다. 에이전트가 어떤 세션이든 첫 줄에서 읽을 수 있는 세 개의 단순한 파일뿐입니다.
프로젝트별로 기계가 읽을 수 있게: 현재 단계, 다음 단계, 실행할 정확한 next-prompt, 출시된 단계들, 적용된 마이그레이션, 마지막 커밋, 마지막 세션 id.
한 화면짜리 "지금 내가 어디에 있는가." 열어 보면 5초 만에 흐름을 되찾습니다 — 발굴 작업은 필요 없습니다.
출시할 다음 3개와 단계 스코어보드. 에이전트는 언제나 작업 순서를 압니다.
session-prompt, session-log, audit-brief 템플릿 덕분에 모든 세션은 — 사람이든 에이전트든 — 같은 모양의 산출물을 만들어 냅니다. 구조는 제안되는 것이 아니라 강제됩니다.진짜 제품은 기능 하나가 아닙니다. API, 웹 클라이언트, 모바일에 걸친 수십 개의 단계이며, 교대로 도는 세션과 에이전트가 몇 주에 걸쳐 출시합니다. CASP는 그 전부에 걸쳐 검증된 단일 순서를 유지합니다 — 그래서 어떤 에이전트든 다음 단계가 무엇인지 알고, 이미 출시된 단계를 결코 다시 출시하지 않습니다.
그리고 루프는 스스로 닫힙니다. 매 세션이 끝날 때 에이전트는 다음 세션의 프롬프트를 당신을 위해 작성하고 — 당신은 한 줄을 다듬을 뿐, 처음부터 쓰지 않습니다 — 세션 로그를 덧붙이고 상태를 갱신합니다. 다음 세션을 열면 지난 세션이 멈춘 바로 그 지점에서 이어집니다. 로드맵은 실행되고, 당신은 감독합니다.
아래 모든 수치는 각 프로젝트의 state.json에서 직접 읽어 온 것입니다 — 에이전트가 읽는 바로 그 파일이며, 마지막 push에서 git과 대조해 검증되었습니다. 마케팅용 계산은 없습니다.
코트디부아르의 한 운송 회사를 위한 고객 대면 차량 관리 ERP — 웹 + 모바일, 멀티 모듈, 멀티 롤: 운전기사, 차량, 규정 준수, 출납, 정비소, 소송, 회계.
모든 모듈은 검증된 단계입니다. 에이전트는 콕핏을 읽고, next_prompt에서 다음 단계를 실행하며, 이미 출시된 모듈을 단 한 번도 다시 출시한 적이 없습니다 — 세션이 여섯 번 도는 날에도.
ZeroSuite의 내부 운영 & 런치 오케스트레이션 플랫폼 — 실제 팀이 진행하는 수개월짜리 로드맵으로, 런치 모드 게이팅과 추적되는 런치 후 백로그를 갖췄습니다.
40개 이상의 단계와 세 사람에 걸친 하나의 검증된 흐름 — 거기에 런치 이후로 명시적으로 미뤄진 58개 항목이 하나도 유실되지 않았습니다. 바로 CASP가 만들어진 목적인 "큰 멀티 유저 프로젝트" 사례입니다.
같은 프로토콜, 전혀 다른 두 제품. 콕핏만이 그들이 공유하는 유일한 것입니다.
메모리 도구는 당신이 누구인지를 기억합니다. CASP는 당신의 프로젝트가 어디에 서 있는지를 추적하고 — 그것을 증명합니다. 다른 산출물, 다른 동작, 막아 내는 실패도 다릅니다.
한 음절, 동형이의어 없음, 영어·프랑스어·스페인어에서 똑같습니다.
state.next_prompt에서 다음 세션을 자동으로 시작합니다.CASP는 Claude Code 슬래시 커맨드를 제공하여, 상태가 당신이 이미 일하는 곳에 살게 합니다.
읽기 전용 상태 — 에이전트는 한 줄을 쓰기 전에 현재 흐름을 읽습니다.
state.next_prompt에서 곧바로 다음 세션을 자동 시작합니다. 복사·붙여넣기도, 추측도 없습니다.
Claude Code · Cursor · Aider · Continue와 호환됩니다 — 파일을 읽는 것이라면 무엇이든.
에이전트 하나가 엉뚱한 일을 하면 한나절을 잃습니다. 백 개의 에이전트가 백 개의 저장소에서 그러면 한 분기를 잃습니다. CASP는 당신이 자동화 루프에 끼워 넣는 결정론적 가드레일입니다 — 모든 프로젝트에서 같은 모양으로.
casp check는 린트, 테스트와 같은 자리에 놓입니다. 거짓을 말하는 상태는 머지될 수 없습니다 — 드리프트는 누군가의 자제심에 맡겨지지 않고, 조직 차원에서 차단됩니다.
자율 에이전트는 실수를 배가시킵니다. CASP는 그들 하나하나에게 읽을 같은 검증된 흐름과, push 전의 같은 단호한 게이트를 건넵니다. 중복 작업이라는 세금 없는 자동화입니다.
모든 상태 전이는 하나의 git 커밋입니다. 각 프로젝트가 어떻게 움직였는지에 대한, 완전하고 비교 가능하며 되돌릴 수 있는 기록 — git log 가 곧 당신의 컴플라이언스 추적입니다.
100% 로컬, 텔레메트리 제로, 클라우드 없음, 계정 없음. 심사할 것도, 빼낼 것도 없습니다. 보안 검토는 한 줄로 끝납니다: 머신을 결코 벗어나지 않습니다.
jobs: state-check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } # casp checks against full git history - run: npx @justethales/casp check # ✗ fails the build the moment state drifts
하나의 프로토콜, 모든 저장소. 같은 검증된 모양, 조직 전체에.
프로토콜은 예측 가능함으로써 채택을 얻습니다. 이 원칙들은 굽히지 않습니다.
CASP는 당신의 저장소가 무엇인지를 검사하고, 당신이 무엇을 하려 했는지는 결코 묻지 않습니다. 매번 git과 대조한 사실입니다.
정규 산출물은 제안되는 것이 아니라 강제됩니다. 모든 세션은 같은 모양으로 나옵니다.
검증기는 선택이 아닙니다. 거짓을 말하는 상태는 결코 당신의 remote에 도달하지 못합니다.
결정론적, git 네이티브, 100% 로컬. 텔레메트리 제로. 클라우드도, 계정도, 청구서도 없습니다.
설치하고, init하면, 당신의 에이전트는 첫 줄에서 진실을 읽습니다.
$ npm i -g @justethales/casp $ casp init # scaffold the layer $ casp status # where am I right now $ casp check # prove the state is true