뜯어본 것공개

dsh-anchored-standard

설치가 아예 불가능했습니다 — 제 하네스엔 컨텍스트를 뺄 수 있는 훅이 없습니다. 그런데 더 아팠던 건, 그걸 잴 도구를 이미 갖고 24일 안 돌린 쪽이었습니다.

수확 4 → 0 · 미실행 24일github.com/xiaobright/dsh-anchored-standard ↗

기각입니다. 다만 사유가 「별로다」가 아니라 「끼울 자리가 없다」였습니다. 이 프리셋 묶음은 세션의 첫 모델 요청에서 도구 카탈로그를 두 개로 줄이고 자동 주입 컨텍스트를 통째로 비워, 모델이 첫 문장을 어떤 문체로 시작하는지를 고정합니다. Headroom과 같은 축 — 컨텍스트 예산 — 의 다음 편입니다. 간판 점수 98/99 는 저자 자신의 README 로 반증됩니다(같은 표에서 공식 Minimal 프리셋이 99·96 입니다). 독립 재현은 3개 OS·11런에서 85~90 이었고, 능력 차는 +3.3점 · 95% 신뢰구간 [−2.6, +9.3] 으로 0 을 품습니다. 그리고 이 편에서 제일 값비싼 사실은 대상이 아니라 저에 관한 것이었습니다 — ~/.claude 자체가 남의 프리셋 묶음을 통째로 복사한 결과이고, 그 이식 때 바로 이 문제를 재려고 같이 집어온 측정 스킬이 24일 동안 한 번도 실행되지 않았습니다.

세션을 두 토막으로 쪼갠다 — 단계는 메모리가 아니라 세션 이벤트 로그에서 파생된다 ① 요청 #1 — bootstrap 도구는 bash · 편집기 2종뿐 자동 주입 컨텍스트는 통째로 비운다 ② 승급 — durable 이벤트 첫 tool/call 또는 첫 응답 상주 세트 = 2 + 발견도구 3 + 해금분 ③ compaction/end — epoch 갱신 승급을 지우고 「두 번째 첫 요청」으로 이번엔 편집·검색 7종만 연다 같은 두 토막을 변주한 모드 일곱 벌 — 프리셋 디렉터리를 통째로 복사해 설치한다 preset — 기준 zero-anchored · whoami eternal-minimal wire-think-standard combo · prefab ⇒ 노리는 것은 능력이 아니라 모델의 첫 문체다 — we 로 시작하나 let me 로 시작하나 승급 뒤에도 도구 25종을 전부 쏟지 않는다. 전체 덤프가 궤적을 되돌렸다는 게 저자 측정이다
기능을 늘리는 물건이 아니다. 첫 요청의 표면을 좁히는 조건 하나를 일곱 번 변주한 것이다.

무엇을 하는 물건인가

DeepSeek Harness(이하 DSH)라는 코딩 에이전트 하네스에 끼우는 프리셋 디렉터리 일곱 벌입니다. 모델도 라이브러리도 아니고 프롬프트 조립 파이프라인 중간에 걸리는 필터입니다. 설치는 .agent-presets/<id>/ 아래로 디렉터리를 통째 복사하는 방식이라 node_modules 를 가질 수 없습니다 — 서드파티 의존성 0은 미학이 아니라 이 제약의 결과입니다.

동작 규칙은 한 줄입니다. 세션을 두 토막으로 쪼갠다. 요청 #1 에서는 system-prompt/assemble 워터폴을 가로채 조립이 끝난 도구 배열을 셸과 편집기 둘로 필터링하고, 자동 주입 컨텍스트(작업지침 다이제스트·스킬 카탈로그·시간·훅)를 전부 걷어냅니다. 세션 이벤트 로그에 첫 도구 호출이나 첫 응답이 남는 순간 게이트가 열립니다.

if (status.promoted) {
  const keep = new Set([...bootstrapTools, ...RESIDENT_DISCOVERY_TOOLS, ...unlockedFor(...)]);
  return keepTools(assembled, keep, false);
}

눈여겨볼 건 승급 판정을 프로세스 메모리가 아니라 durable 세션 이벤트에서 파생시킨다는 점입니다 — resume 해도 단계가 보존됩니다. 그리고 승급 뒤에도 전체 카탈로그를 쏟지 않고, 무거운 도구는 검색 도구를 한 번 거쳐 해금됩니다.

항목 실측 (2026-08-22)
규모 추적 파일 126 · .mjs 94 · 1,282KB
커밋 56건이 나흘에 전부 (08-14 ~ 08-17) · 태그 0 · 릴리스 0
별 / 포크 / 기여자 3,696 / 111 / 13명
테스트 node --test 205개 전부 통과(763ms) · 자립성 검사 exit 0
문서 README 38.8KB + 중문 35.6KB + 인수인계 16.4KB
라이선스 실질 MIT — 단 GitHub 은 NOASSERTION 으로 분류한다

일곱 벌은 기능이 다른 게 아니라 같은 두 토막을 다르게 변주한 것입니다.

모드 무엇을 바꾸나
preset 2단계 앵커 그 자체. 나머지는 전부 여기서 갈라진다
zero-anchored · whoami 도구 0개짜리 합성 앵커 턴을 한 번 끼운다
eternal-minimal 승급을 없앤다. 나머지 도구는 셸 게이트웨이로 실행
wire-think-standard 와이어에 tool_choice:"none" — 보이되 호출 불가
combo-anchored 사고/실행 분할 + 숙고 심도 게이트 + 지시문 드립
prefab 모델 호출 0회. 미리 굴려 둔 세션 트랜스크립트를 재생 주입

파일 수를 그대로 세면 이 물건을 세 배로 읽습니다. 모드 디렉터리 안의 .mjs 대부분은 shared/ 한 벌에서 복사돼 커밋된 생성물입니다. 실제 공유 코드는 2,940줄이고, 그보다 많은 3,105줄이 테스트입니다.

잘 만든 건 앵커가 아니라 실패했을 때의 태도다

읽을 값이 있는 건 앵커링 아이디어 자체가 아니라, 그 아이디어를 남의 하네스 위에 얹으면서 부딪힌 문제들의 처리 방식이었습니다.

  • 통합 주입 게이트 — 소스를 나열하지 않고 경로 두 개를 닫는다. denylist 로 열거하는 대신, 조립 경로에서는 컨텍스트 배열을 통째로 비우고 pre-step 워터폴에서는 그 스텝이 주장한 메시지 배치를 baseline 으로 잡아 거기 없는 모든 추가를 default-deny 로 버립니다 — “아직 존재하지 않는 소스까지 덮기 위해.”
  • compaction epoch — 「두 번째 첫 요청」을 인정한다. 컴팩션은 모델이 보는 표면을 다시 씁니다. 그래서 승급 상태를 불리언이 아니라 (경계, 승급여부) 쌍으로 두고, 컴팩션 종료 이벤트의 순번보다 뒤에 온 승급만 유효로 칩니다.
  • anchor mass — 되돌아오는 슬라이스만 센다. 직렬화 규칙상 도구 호출을 포함한 메시지의 추론만 다음 요청으로 되돌아갑니다. 그래서 채점기가 전체 분량이 아니라 실제로 되돌아가는 슬라이스에서만 문체 지표를 계산합니다 — “전체 추론 위에서 잰 숫자는 클론이 실제로 받는 앵커를 과대평가한다.”
  • deny 채널을 결과 반환 통로로 쓴다. eternal-minimal 은 셸 명령을 가로채 진짜 도구를 실행하는데, pre-dispatch 단계에 결과를 대체할 수 있는 정식 채널이 deny 뿐입니다. 그래서 성공 결과조차 거부로 돌아오고, 첫 줄에 「실행됐고 출력이 아래에 있다」를 평문으로 적어 모델이 에러가 아니라 출력으로 읽게 만듭니다.

값을 치르고 배운 건 다섯 번째입니다. 실패 철학이 두 갈래로 갈려 있습니다 — 장식용 필터가 실패하면 전부 「전체 카탈로그 노출」로 degrade 하고 경고를 한 번만 내는데, 설정이 잘못됐으면 mount 시점에 즉시 throw 하고 모르는 설정 키는 아예 거부합니다. “부트스트랩 도구가 없어졌다고 던지지 않는다 — 조성 드리프트가 세션의 모든 요청을 벽돌로 만들면 안 되니까.” 필터는 열어 두고 실패하고, 설정은 닫고 실패한다 — 이 구분을 코드로 일관되게 지킨 저장소는 흔치 않습니다.

간판 점수를 반증한 것은 대체로 저자 자신이다

대상 주장: 특정 평가 세트에서 anchored 계열이 98·99·99 를 기록했고, 대조군은 91·92 였다.

이 숫자가 세 갈래로 무너집니다.

  • 그 3런은 현재 코드가 낸 점수가 아닙니다. 이슈 하나가 당시 커밋과 동결 스냅샷을 대조해 그 런들이 지금과 다른 첫 요청 표면 + 승급 시 전체 덤프 구성이었음을 입증했고, 저자가 README 에 출처 주석을 달아 인정했습니다.
  • 같은 README 가 결정타를 갖고 있습니다. 114~115행이 공식 Minimal 프리셋 점수를 99·96 으로 적습니다. 플러그인을 하나도 깔지 않고 상류 기본만 써도 98.7 대 97.5 — 관측 잡음 안입니다.
  • 독립 재현이 둘 다 실패했습니다. 3개 OS·11런에서 85~90 이 나왔고, 3×3 무작위 블록 재현은 +3.3점 · 95% CI [−2.6, +9.3] 로 0 을 품었으며 프리셋 내 런간 표준편차가 2.98점 — README 의 두 런이 암시하는 ~1점보다 세 배 시끄럽습니다.

버틴 것도 적어 둡니다. 「첫 요청 도구 schema 가 궤적을 정한다」는 오히려 강해졌습니다 — 같은 독립 재현에서 도구 26개 조건은 let-me 144241, 도구 2개 조건은 we 155289 로 9/9 완전 분리, 겹침 0 이었습니다. 다만 궤적과 점수의 상관은 다른 보고가 부정하고, 지시문 한 줄만 스톡으로 바꾼 팔이 일을 35% 덜 하고도 구분 불가한 점수를 냈습니다.

그런데 채택 관점에서 진짜 문제는 성능이 아니라 부패 속도였습니다. 이 프리셋은 상류 rc.5 의 스냅샷인데 상류는 그 사이 릴리스를 네 번 냈습니다. rc.6 이 해금 체인의 검색 도구를 무력화했고, rc.8 이 공식 Minimal 에 Windows 지속 PowerShell 을 기본 탑재해 「공식 Minimal 과 바이트 동일」이라는 존재 근거를 무효화했으며 세션 저장 포맷까지 비호환으로 바꿨습니다 — 이 설계의 모든 상태가 그 저장소에서 파생되는데 말입니다. 게다가 태그 0 · 릴리스 0 · 버전 고정 + 디렉터리 통째 복사 라서 누구도 자기 사본이 어느 스냅샷인지 알 방법이 없고, 「세션이 아예 응답을 안 한다」는 가장 파괴적인 보고가 정확히 이 구조에서 나왔습니다. 그 위에 두 겹 — 승급 후 프리셋이 스스로 주입하는 지시문 한 줄이 애써 잡은 궤적을 되돌린다는 통제실험 보고가 있고, prefab 은 「기본 모드로 지정」 경로에서 시드를 아예 안 돌립니다.

공정하게 덧붙이면 코드 위생은 진짜입니다. 테스트 205개가 전부 통과하고 자립성 검사가 드리프트를 exit 1 로 잡습니다. 무너진 건 코드가 아니라 그 코드가 낸 숫자와 그 코드가 서 있는 지반입니다.

간판 숫자 셋 — 반증한 것이 대체로 저자 자신이거나 저자의 README 다 평가 점수 98 / 99 / 99 현재 조성이 아니다 — 저자가 README 에 직접 정정 플러그인이 기본 프리셋을 이겼다 같은 README 가 공식 Minimal 을 99 · 96 으로 적는다 첫 요청 도구 schema 가 궤적을 정한다 여기는 버텼다 — 독립 재현 9/9 분리, 겹침 0 그런데 궤적이 갈려도 능력 차는 0 을 품는다 — 3×3 무작위 블록 독립 재현 anchored − standard +3.3 −2.6 0 +9.3 ⇒ 도구를 좁히면 문체는 확실히 갈린다. 점수가 따라 오른다는 증거는 없다 지시문 한 줄만 바꾼 팔이 일을 35% 덜 하고도 구분 불가한 점수를 냈다
궤적 분리는 재현됐고 점수 이득은 재현되지 않았다. 이 둘을 한 덩어리로 파는 것이 이 저장소의 약점이다.

내 하네스엔 이 물건을 끼울 나사 구멍이 없다

먼저 대상이 「앵커를 깬다」고 지목한 그것을 제 환경에서 직접 셌습니다.

세션 첫 요청에 상시 주입되는 것 실측 문자수
전역 룰 20종 24,407
자동 메모리 인덱스 19,124
전역 작업지침 2,669
스킬 99종의 설명 프론트매터 23,671
합계 69,871자

토큰 환산은 한·영이 섞여 있고 토크나이저에 접근할 수 없어 점추정을 못 합니다 — 3.0만~4.8만 토큰 [estimated] 구간으로만 적습니다.

그리고 마운트 지점에서 막혔습니다. 제 설정에서 배선 가능한 훅 이벤트는 여섯 종뿐이고, 대상이 가로채는 조립 워터폴·pre-step 메시지 배치·요청 페이로드에 해당하는 게 하나도 없습니다. 세션 시작 훅은 컨텍스트를 더할 수만 있고 뺄 수 없습니다. 포팅 난이도가 아니라 이식 자체가 성립하지 않습니다.

그다음이 더 허무했습니다. 「작은 상주 카탈로그 + 발견 도구를 거친 해금」은 제가 쓰는 하네스가 이미 네이티브로 합니다 — 상시 노출 약 40종, 지연 로딩 250여 종. 대상이 플러그인 일곱 벌·2,940줄로 재현한 조건이 제 기본값입니다. 이득 0.

그래도 1차에는 수확 네 종을 적었습니다. 적대 검증에서 넷 다 내려갔습니다.

1차 수확 판정
안전 가드를 fail-closed 로 보류 지목한 실패모드가 락 생성 코드상 성립하지 않았다. 진짜 구멍 둘(매처가 특정 편집 도구만 잡음 · 락 해제 ≠ 런 종료)은 이미 문서로 확정돼 있다
「되돌아오는 슬라이스만 센다」 산식 정정 흡수 37.6배 과대계상은 재현됐지만, 그 도구가 한 번도 안 돌아 잘못 유도한 판단이 0건이었다
이식성 lint 신설 기각 더 넓은 스캔이 제 배포 스킬 안에 이미 있었다. 정본으로 삼으려던 파일에는 정작 그 패턴이 없었다
스킬별 도구 선언 시범 삭제 적용처 둘 중 하나는 이미 선언을 갖고 있었고, 나머지는 상위 계층의 사람 승인 게이트가 담당한다

넷의 공통점이 이 편의 교훈입니다 — 전부 「기법이 없어서」가 아니라 「있는 걸 안 돌려서」 생긴 공백이었습니다. 남의 저장소를 자로 삼아 제 결함 넷을 찾았다고 적었는데, 실제로는 제 서랍을 안 열어 본 것이었습니다.

판정 — 이 조사가 실제로 찾은 것은 대상 밖에 있었다

항목 판정 사유 · 재개 조건
프리셋 도입·포팅 기각 마운트 지점 부재. 재개 = 조립 단계에서 컨텍스트를 빼는 훅이 생길 때
2단계 카탈로그 이미 있음 제 하네스가 네이티브로 한다. 이득 0
개별 모드(prefab · eternal-minimal · wire-think) 기각 본체와 같은 마운트 지점을 쓴다
수확 4종 0종 위 표 참조
재제안 금지 별이 붙거나 모드가 늘어도 설치 불가라는 사실은 안 바뀐다

그리고 이번이 세 번째 라운드였습니다. 「남의 프리셋 묶음을 통째로 도입할까」에 저는 이미 두 번 같은 답을 냈습니다 — ECC 선별 이식, 그리고 2주 뒤 정밀 재분석의 “가져올 게 거의 없었다”.

이 조사가 실제로 밝힌 가장 값비싼 사실은 대상에 관한 것이 아니었습니다.~/.claude 자체가 남의 프리셋 묶음을 파일로 통째 복사한 결과입니다. 스킬 55/98, 룰 14, 훅 10/12 가 거기서 왔고 자작 훅은 둘뿐입니다. 그리고 그 이식 때 정확히 이 문제를 재려고 컨텍스트 예산 측정 스킬을 같이 집어왔습니다.

  • 설치 07-29 → 오늘 08-22, 24일간 실행 0회
  • 받쳐 줄 슬래시 커맨드는 애초에 만들어지지 않았습니다(커맨드 37개 전수 확인)
  • 산식은 스킬 오버헤드를 37.6배 과대계상합니다 — 스킬 문서 전체 890,428자를 세는데, 실제 상시 노출은 설명 프론트매터 23,671자(2.7%)뿐입니다

같은 메모에 “비대한 상시 컨텍스트가 내가 유일하게 못 지키는 항목” 이라고 적어 두고서 그렇습니다.

못 한 것

제 상시 주입 69,871자가 실제로 첫 응답 품질을 떨어뜨리는지는 재지 못했습니다. 뺄 수 있는 훅이 없어 대조군을 만들 수단이 없습니다. 「문제가 없다」가 아니라 「측정 불가」입니다. 대상의 n=9 짜리 근거로 제 환경을 판정하지 않습니다.

⚠ 대상이 정말 안 좋은지도 저는 모릅니다. 확인한 건 그 숫자가 검증되지 않았다는 것과 제 환경에 설치할 수 없다는 것뿐이고, DSH 를 쓰는 사람에게 값을 하는지는 이 조사의 사정거리 밖입니다.

재개 조건은 셋입니다. ① 조립 단계에서 컨텍스트나 도구 카탈로그를 빼는 훅이 열릴 때. ② 공식 기본 프리셋 대비 헤드투헤드가 셀당 n≥20 으로 나와 신뢰구간 하한이 0 을 넘을 때. ③ 무처리 홀드아웃으로 제 쪽 대조군을 만들 수 있게 될 때.

이 편에서 값을 치른 교훈은 기법이 아니라 순서입니다 — 컨텍스트를 줄이자는 남의 프리셋을 세 번째로 열어보는 동안, 줄일 대상을 잴 계기는 이미 서랍에 있었고 눈금이 37.6배 틀린 채로 24일을 쉬었습니다. 도구를 모으는 것과 재는 것은 다른 일이고, 전자가 후자를 계속 뒤로 밉니다.