toranalytics
🦜

직접 만들어 공개한 도구와 그 과정

#off-the-wall#claude-code#codex

Off the Wall: 내가 했던 지적을 요약하지 않고 그대로 다시 보여 주는 플러그인

2026.10.29

모델은 내 습관을 알 수 없습니다. 커밋 메시지를 쓰는 방식이나 날짜를 쓰는 방식 같은 것입니다. 이런 일을 Claude에게 33번 시켰습니다. Off the Wall이 없으면 Claude(Sonnet)는 습관을 2번 따랐고, 있으면 20번 따랐습니다. 전에 내가 한 지적을 그대로 다시 보여 주기 때문입니다. 시험용으로 내가 만든 습관이고, 실제 사용자 기록으로 잰 것은 아닙니다. haiku 모델에서는 1번에서 17번으로, 다시 재니 2번에서 25번으로 늘었습니다. 자세한 측정은 아래 “시험 결과”에 있습니다.

Off the Wall은 Claude Code와 Codex에서 쓰는 플러그인입니다. 에이전트에게 했던 지적을 내 컴퓨터에 저장해 두었다가, 비슷한 일을 시킬 때 내가 했던 말 그대로 다시 보여 줍니다. 오픈소스(MIT)이고 따로 설치할 패키지가 없으며 Node 18 이상에서 돌아갑니다.

한 줄 설명

같은 폴더에서 내가 전에 했던 지적을, 줄이지 않고 그대로, 에이전트가 답하기 전에 다시 보여 줍니다.

왜 이렇게 만들었나

코딩 에이전트는 지난 대화를 기억하지 못합니다. 그래서 “묻지 말고 하나 골라”, “테스트 실제로 돌렸어?” 같은 말을 계속 되풀이하게 됩니다. 지적을 규칙 한 줄로 줄이면 그때 상황이 사라집니다. 어떤 테스트를 요구했는지, 어느 파일을 건드리지 말라고 했는지 같은 것들입니다. 원문에는 그 내용이 남아 있습니다.

다른 도구와 다른 점

  • 요약하지 않고 내가 한 말을 그대로 보여 줍니다.
  • 같은 작업 폴더의 기록만 씁니다. 다른 프로젝트의 지적을 끌어오거나 최근 것으로 자리를 채우지 않습니다. 하위 폴더와 git worktree는 서로 다른 프로젝트로 봅니다.
  • API 키가 따로 필요 없습니다. 지적인지 가려내는 일은 이미 쓰고 있는 claude 또는 codex 명령으로 합니다. 이때 쓰는 대화 일부는 쓰고 있는 모델 회사에 전달됩니다.
  • 내 답변을 느리게 만들지 않습니다. 가려내는 일은 따로 돌고, 내가 보낸 요청은 그 결과를 기다리지 않습니다.
  • 기록은 내 컴퓨터(~/.otw)에 저장하고, 만든 사람에게 가는 데이터는 없습니다.
  • 출처를 확인합니다. 플러그인이 자동으로 보낸 메시지는 내 지적으로 저장하지 않고, 출처나 작업 폴더가 없는 옛 기록은 보관만 하고 쓰지 않습니다. 설정 파일이 잘못되면 기능이 꺼진 채로 멈춥니다.

무엇을 할 수 있나

1. 전에 한 지적을 다시 보여 줍니다. 요청을 보낼 때마다 같은 폴더에 저장된 지적 중 지금 요청과 글자가 비슷한 것을 최대 6개 고릅니다. 하나당 200자까지만 잘라서 에이전트가 읽는 내용에 붙입니다. 내 화면에 카드로 뜨지는 않고 에이전트에게만 전달됩니다. 이 내용이 새 지시나 허락은 아니라는 문장도 같이 붙습니다.

예를 들어(시험용으로 만든 사례입니다) 이런 지적이 저장돼 있다고 합시다. “린트만 돌리고 테스트 통과라고 하지 마. 체크아웃 통합 테스트를 실행하고 실제 종료 코드를 보여줘.” 나중에 “결제 핸들러 변경을 체크아웃 통합 테스트로 검증해줘”라고 시키면, 에이전트는 위 지적을 원문 그대로 받습니다.

2. 내 지적을 자동으로 저장합니다. 내가 보낸 다음 메시지가 직전 답변을 고치려는 말인지 모델이 따로 판단하고, 맞으면 저장합니다. 기본으로 켜져 있고 capture: false로 끌 수 있습니다.

3. 내가 무엇을 가장 자주 지적했는지 보여 줍니다. otw report는 컴퓨터에 이미 있는 Claude Code와 Codex 대화 기록에서 에이전트의 일하는 방식을 고치려던 내 답장을 모델이 골라 종류별로 보여 줍니다. 내가 한 말이 그대로 붙어서 나옵니다. --seed를 붙이면 그 결과로 바로 저장을 시작합니다. 분류는 모델이 한 것이라 틀릴 수 있습니다.

4. 상태를 보여 줍니다. otw status는 저장된 지적 수, 훅이 마지막으로 동작한 때, Codex에서 허락한 항목 수를 알려 줍니다. 저장된 지적이 아직 없으면 그렇다고 말해 줍니다. 쓰는 Codex 모델과 쓰지 않는 모델(설명에 등급이 없는 모델)도 보여 줍니다.

5. 무엇이 붙을지 미리 봅니다. otw explain "<문장>"은 그 문장을 보냈을 때 어떤 지적이 붙을지 비슷한 정도와 함께 보여 줍니다. 모델을 부르지 않고 아무것도 바꾸지 않습니다. 이 명령은 아직 정식 배포(0.3.1)에는 없고 최신 소스(main)에만 있습니다.

6. 기록을 지웁니다. otw forget --all --yes는 저장된 지적, 세션 기록, 로그를 모두 지웁니다. otw forget --project --yes는 지금 작업 폴더의 기록만 지웁니다. --yes가 없으면 지울 내용만 보여 줍니다. Claude Code나 Codex의 대화 기록과 이미 모델 회사에 보낸 내용은 지우지 못합니다.

7. 하위 에이전트에게 맡길 모델을 안내합니다. 찾기와 변환은 작은 모델, 구현과 검토는 중간 모델, 원인 분석과 설계는 큰 모델을 고르라고 알려 주고, 모델을 정하지 않은 호출은 한 번 되돌려 보냅니다. 모델을 강제하지 않고 비용이 줄어든다고 약속하지도 않습니다.

하지 못하는 것과 알아 둘 것

  • 실수가 줄어든다고 보장하지 못합니다. 시험용으로 만든 습관에서는 효과를 봤지만, 실제 사용 기록에서는 재 보지 못했습니다.
  • 뜻을 이해해서 고르지 않습니다. 단어와 글자 두 개씩 겹치는 정도로 고르기 때문에, 고른 지적이 지금 요청과 관련 있다는 보장이 없습니다.
  • 관련 없는 요청에도 붙습니다. 0.3.0부터 20자 이상인 요청에는 항상 최대 6개(약 300토큰)가 붙습니다. 20자보다 짧은 입력은 이전 기준(비슷한 정도 0.18 이상)을 씁니다. 끄려면 설정에 "recallWide": false를 넣습니다.
  • 지적이 아닌 말을 지적으로 저장하거나 진짜 지적을 놓칠 수 있습니다. 한 사람의 기록으로 재 보니 저장한 것 중 82%가 맞았고, 진짜 지적 중 72%를 찾았습니다.
  • 지우는 명령은 0.3.1부터 있지만 Claude Code나 Codex의 대화 기록, 모델 회사에 남은 사본까지는 지우지 못합니다.
  • Codex에서는 처음에 한 번 /hooks에서 허용해야 합니다. 허용하기 전에는 아무 일도 일어나지 않습니다.
  • Claude Code를 직접 쓰는 화면에서는 확인하지 못했습니다. 화면 없이 자동으로 돌려서 저장과 다시 보여 주기를 한 번 확인했습니다.
  • 지금 버전은 정식 릴리스가 아닌 0.3.1 사전 릴리스입니다.

써 보기

Claude Code에서 이렇게 설치합니다.

/plugin install off-the-wall --marketplace toranalytics/off-the-wall

Codex에서는 이렇게 합니다.

codex plugin marketplace add toranalytics/off-the-wall
codex plugin add off-the-wall@off-the-wall

Codex에서는 /hooks를 열어 한 번 허용해야 합니다. 설치 전에 결과가 어떤 모양인지 보고 싶다면, 저장소에 들어 있는 가상 대화 기록으로 report를 돌려 볼 수 있습니다.

git clone https://github.com/toranalytics/off-the-wall && cd off-the-wall
node bin/otw.mjs report --host claude --claude-dir examples/claude-history --days 0

브라우저에서 먼저 보려면 원문 다시 보여 주기 데모가 있습니다. 설치나 로그인 없이 열리고, 모든 입력은 내가 만든 사례입니다. 소스는 GitHub에 있습니다.

시험 결과

모두 시험용으로 만든 기록으로 쟀습니다. Claude Code 2.1.311을 화면 없이 자동으로 돌렸고, 작은 모델(haiku)과 큰 모델(Sonnet)을 썼습니다. 숫자는 이 시험에 한정된 값이고, 실제 사용에서의 효과를 뜻하지 않습니다.

개인 습관을 따르는지. 모델이 알 수 없는 습관(커밋 형식, 쓰는 도구, 말투, 날짜 형식 등) 11개를 작업으로 만들어 각각 3번씩 시켰습니다. 작업과 채점기는 내가 아닌 다른 모델이 만들었고, 채점은 자동이며, 계획은 시험 전에 정했습니다.

조건 첫 시험(haiku) 채점기 오류를 고친 뒤 다시(haiku) Sonnet
Off the Wall 없음 1/33 2/33 2/33
이전 기본(좁게 찾기) 9/33 14/33
넓게 찾기(0.3.0부터 기본) 17/33 25/33 20/33
  • 맞는 지적이 보이면 모델이 훨씬 자주 따랐습니다. 못 찾으면 달라지는 게 없었습니다.
  • 큰 모델(Sonnet)에서도 같았습니다. 작업별로 더 나은 것이 7개, 나쁜 것이 0개였습니다(우연으로 보기 어렵습니다, p = 0.016). Off the Wall 없이는 큰 모델도 이 습관을 따르지 못했습니다.
  • 다시 잰 시험은 결과를 본 뒤에 채점기를 고쳤으므로 처음 시험의 독립된 재현은 아닙니다. 숫자가 오른 것은 일부는 오류 수정 때문이고 나머지는 실행마다 달라지는 값이어서 둘을 가를 수 없습니다.
  • 11개 중 4개 작업은 두 모델 모두 인용이 보여도 따르지 않았습니다. 규칙 150줄을 그냥 넣은 쪽이 전체로는 더 잘 따랐지만, 기록이 길어지면 그 방식은 쓸 수 없습니다.
  • Opus와 Codex 모델은 재 보지 못했습니다.

관련 없는 요청에 붙어도 해로운지. 습관과 상관없는 작업 14개를 3번씩 시켰더니 Off the Wall 없음 40/42, 넓게 찾기 41/42였습니다. 통과율은 떨어지지 않았고 출력 토큰은 약 9% 늘었습니다. 20자 미만 입력 보호 장치는 모델로 재 보지 않았습니다.

더 좋게 만들려던 시도는 모두 넣지 않았습니다. 관련 없는 요청에 붙는 인용을 줄이려고 단어 조건을 걸어 봤지만 150개 기록에서는 6개가 2개로 줄고 240개 기록에서는 5.5개로 거의 그대로였습니다. 임베딩 모델을 써 보니 인용은 거의 사라졌지만 관련 있는 인용도 놓쳤습니다. 지적에 원래 요청을 붙여 보니 이득이 없었습니다(33번 중 19번, 붙이지 않으면 20번). 같은 지적을 묶는 방법도 효과가 작았습니다. 기록은 저장소 docs에 있습니다.

39개 요청을 다시 돌린 이전 실험. 한 사람의 실제 요청 39개를 글로만 다시 돌렸고, 지적 6개와 “이 사람이 뭐라고 지적할지 예측하라”는 문장을 같이 붙인 쪽이 아무것도 안 붙인 쪽보다 25승 11무 3패였습니다. 무작위 규칙과 직접 비교한 17승 14무 8패는 확실한 우위의 근거가 아닙니다. 지적과 예측 문장을 같이 시험했고, 지금 선택 방식으로 다시 하지 않았습니다.

실제 프로그램에서의 확인. Codex 0.162.1에서 설치, 허용, 지적 저장, 다음 요청에서 다시 보여 주기를 한 번 확인했습니다. Claude Code 2.1.311에서는 자동 실행으로 저장과 새 세션에서의 다시 보여 주기를 한 번 확인했습니다. 같은 시험의 셋째 요청에서 모델이 6분 동안 이상하게 긴 출력을 낸 일이 한 번 있었습니다(8번 다시 해 봤을 때는 나타나지 않았습니다).

코드 시험. 시험 239개가 Node 18, 20, 22, 26에서 통과합니다. 모두 가짜 입력과 가짜 명령으로 한 시험입니다. CI는 Windows, Linux, macOS의 Node 18, 20, 22에서 돕니다.

계획, 스크립트, 데이터, 독립 검토에서 나온 약점은 저장소 docs에 있습니다. 관련 없는 지적이 붙었거나 필요한 지적이 빠진 사례를 이슈로 알려 주세요. 원문, 코드, 회사 이름은 보내지 않아도 됩니다.

© Junebeom Seo · template by danmin