지식위키

FBZ_60 — 스킬 & always-on 운영 블록

FBZ_60 — 스킬 & always-on 운영 블록

한 줄 요약

fablize의 행동 규범 본체로, 똑같은 4대 절차를 “필요할 때만 켜지는 스킬”과 “매 세션 늘 떠 있는 상주 블록” 두 형태로 모델에 거는 라우팅 정책 모음이다. 왜 배우나: 하네스의 발동·라우팅·에스컬레이션이 전부 여기로 모이기 때문에, 이 블록 하나면 “언제 어떤 규칙이 켜지는가”를 한눈에 잡는다.

그림

flowchart TD
    U["사용자 작업 시작"] --> R{"어느 경로로<br/>규범이 들어오나?"}

    R -->|"/fablize·트리거 어구<br/>매칭 작업유형"| S["스킬 로드<br/>SKILL.md"]
    R -->|"setup.sh 1회 실행 후<br/>매 세션 자동"| A["상주 블록<br/>CLAUDE.md에 주입"]

    S --> SIG{작업 신호 판별}
    A --> SIG

    SIG -->|신호 없음| B0["[always] 베이스라인<br/>결과우선·범위준수·근거·확인"]
    SIG -->|"2개+ 순차 스토리"| B1["멀티스토리 루프<br/>goals.py"]
    SIG -->|"디버깅·리뷰·원인불명"| B2["조사 프로토콜"]
    SIG -->|"렌더·실행 산출물"| B3["검증 접지 팩"]
    SIG -->|어렵거나 막힘| B4["에스컬레이션<br/>effort↑ → 강한모델 → 사람"]

    B0 --> DO["신호별 최소 적용으로 실행"]
    B1 --> DO
    B2 --> DO
    B3 --> DO
    B4 --> DO

쉽게 풀기

이 블록을 **“가게의 행동 매뉴얼”**이라고 생각하면 쉽다.

① 같은 매뉴얼을 두 가지 방식으로 비치한다

  • 스킬(SKILL.md) — 평소엔 서랍에 넣어 두다가, 손님이 “끝까지 해줘”라고 말하거나(/fablize·“see it through”), 여러 단계짜리 큰 일이 들어올 때 꺼내 보는 매뉴얼. 처음 꺼낼 때 자동으로 설치 안내(온보딩)가 한 번 따라온다.
  • always-on 블록(fablize-block.md) — 아예 벽에 붙여 두는 매뉴얼. setup.sh를 한 번 돌리면 CLAUDE.md에 박혀, 매 세션 자동으로 눈앞에 떠 있다. 손님이 따로 부르지 않아도 작동한다.

② 매뉴얼은 “신호별 최소 적용”이 원칙이다 모든 규칙을 항상 다 적용하지 않는다. 작업이 보내는 신호를 보고 딱 맞는 규칙만 켠다. 예를 들어:

  • 그냥 단순한 한 가지 부탁 → 기본 4규범([always])만.
  • 여러 단계 작업 → 멀티스토리 루프까지 추가.
  • 버그 잡기 → 조사 프로토콜까지 추가.

여러 칸을 한꺼번에 켜는 건 진짜로 여러 종류가 겹칠 때뿐이다. (과잉 적용 방지)

③ “능력”과 “절차”를 구분해 막힘을 정직하게 다룬다 하네스는 모델을 더 똑똑하게 만들지는 못한다. 다만 검증·완료·조사를 절차로 강제해 모델이 자기 천장까지는 가도록 밀어준다. 천장에 부딪히면(같은 문제 2회+ 막힘, 정답지 밖 발견 필요 등) 흉내 내며 우기는 대신, **“더 강한 모델이나 사람에게 넘기라”**고 권고한다. 이 정직함이 코드로 박혀 있는 셈이다.

핵심 정리

형태어디 사는가언제 켜지나
스킬skills/fablize/SKILL.md트리거 어구·매칭 작업유형
상주 블록CLAUDE.md(setup이 주입)매 세션 자동

[!note] 두 형태가 공유하는 5개 신호 라인

  • [always] 결과 우선 · 요청 범위 준수(곁다리 리팩토링 금지) · 완료는 이번 세션 도구결과로 근거 · 파괴 전 확인
  • [2개+ 순차 스토리] goals.py 루프: create → next → checkpoint(증거) → 최종 검증 게이트
  • [디버깅·테스트실패·원인불명·리뷰] 조사 프로토콜: 재현 → 가설 3+ → 증거 → 인과사슬 → 전후검증 → 기각보고
  • [렌더·실행 산출물: HTML·SVG·게임·UI·차트] 검증 접지 팩: 실제 렌더 → 관측 → 수정 → 재렌더
  • [어렵거나 모호] 적응적 사고 자동 확장, /effort xhigh 권고. 능력은 못 올림 → 막히면 정직히 보고·에스컬레이션

스킬 절(§) 지도 — 어떤 절이 어떤 컴포넌트로 이어지는지:

[!note] 멱등 주입의 비결 상주 블록은 <!-- FABLIZE:BEGIN ... :END --> 마커로 감싸 주입한다. 같은 마커를 찾아 갈아끼우므로 setup.sh를 여러 번 돌려도 블록이 중복되지 않는다(멱등). 블록 안 __PLUGIN_ROOT__setup.sh가 실제 경로로 치환한다.

실제 예시

스킬 프런트매터 (트리거 정의)

# skills/fablize/SKILL.md
---
name: fablize
description: A harness that makes Opus (or any Claude model) behave like Fable ...
  Use when starting a multi-step task (2+ sequential stories), long autonomous work,
  debugging or root-cause investigation, building render/executable artifacts (HTML, SVG, games, charts),
  or when the user says "fablize", "see it through", "verify as you go", "split into goals".
---

always-on 운영 블록 (CLAUDE.md에 주입되는 실물)

<!-- setup/fablize-block.md -->
<!-- FABLIZE:BEGIN — run Opus like Fable (always-on router). Verified procedures only. ... -->
## Operating mode (always on — auto-route by task signal)
- **[always]** Lead with the outcome · stay within the requested scope (no incidental refactors)
  · ground completion claims in this session's tool results · confirm before destructive actions.
- **[2+ sequential stories]** Run `python3 __PLUGIN_ROOT__/scripts/goals.py`: create → next →
  checkpoint (with evidence) → final verification gate (no completion without `--verify-cmd` and `--verify-evidence`).
- **[debugging / test failure / unknown cause / review]** Follow `__PLUGIN_ROOT__/packs/investigation-protocol.txt`: ...
- **[render/executable artifact: HTML, SVG, game, UI, chart]** Follow `__PLUGIN_ROOT__/packs/verification-grounding-pack.txt` ...
- **[hard or ambiguous task]** Adaptive thinking scales ... recommend `/effort xhigh`. Depth (capability) cannot be raised:
  if stuck 2+ times or out-of-spec discovery is needed, report the limit honestly and escalate.
<!-- FABLIZE:END -->

첫 실행 자동 온보딩 (SKILL.md §0)

# skills/fablize/SKILL.md §0
cat ~/.fablize/progress.json 2>/dev/null      # 존재→온보딩 스킵 / 없음→AskUserQuestion 1회
# Local/Global 선택 시:
bash ${CLAUDE_PLUGIN_ROOT}/setup/setup.sh <local|global>
# Skip 선택 시(다시 안 묻게 기록):
mkdir -p ~/.fablize && printf '{"setup_done":false,"skipped":true}' > ~/.fablize/progress.json

온보딩 질문은 사용자 대화 언어로 번역해 묻는다(한국어/영어/일본어 등). 별은 말로 설명하지 않고 질문 끝에 만 붙인다.

에스컬레이션 정책 (SKILL.md §4 — 능력 천장)

# skills/fablize/SKILL.md §4
천장 신호: 같은 문제 2회+ 막힘 / 디테일 자체가 가치인 열린 창작 / 정답지 밖 발견 필요한 깊은 리뷰.
순서: (1) /effort xhigh 권고(현 모델을 천장까지) →
      (2) 부족하면 증거 패키지(증상·시도·실패지점·재현)와 함께 더 강한 모델 새 세션으로 핸드오프 →
      (3) 그래도면 한계를 정직히 보고하고 사람이 개입할 지점을 명시.

직접 만들 최소 템플릿

<!-- MYHARNESS:BEGIN — 신호별 자동 라우팅, 검증 절차만 -->
## Operating mode (always on)
- [always] 결과 우선 · 요청 범위 준수 · 완료는 이번 세션 도구결과로 근거 · 파괴 전 확인
- [2+ 스토리] goals 엔진: create→next→checkpoint(증거)→최종 검증 게이트
- [디버깅/리뷰] 조사 프로토콜: 재현→가설≥3→증거→인과사슬→전후검증→기각보고
- [렌더 산출물] 그라운딩: 실제 렌더→관측→수정→재렌더
- [어려움] 막히면 흉내 말고 에스컬레이션(더 강한 모델/사람)
<!-- MYHARNESS:END -->

설계 포인트: ①스킬(트리거형)+블록(상주형) 이중화 ②신호별 최소 적용 ③__PLUGIN_ROOT__ 치환+마커로 멱등 ④능력/절차 분리해 에스컬레이션 내장.

요약 & 셀프체크

3줄 요약:

  1. 같은 4대 절차(멀티스토리·조사·검증접지·에스컬레이션) + always 베이스라인을, 트리거형 스킬상주형 블록 두 형태로 모델에 건다.
  2. 모든 규칙을 항상 켜지 않고, 작업 신호별로 최소한만 적용한다(겹칠 때만 중첩).
  3. 하네스는 능력을 못 올리므로, 천장에 닿으면 흉내 대신 더 강한 모델/사람으로 에스컬레이션하는 정직성을 코드화했다.

스스로 답해 보기:

  • 스킬과 상주 블록은 각각 “언제” 모델 컨텍스트에 들어오는가? (트리거 vs 매 세션)
  • 단순한 한 줄짜리 부탁에는 어떤 규칙만 켜지나? 버그 잡기에는 무엇이 추가되나?
  • 모델이 같은 문제에 두 번 막혔다. fablize는 무엇을 권고하는가? 그 순서는?

연결

FBZ_개요 · _분석축_루브릭 · FBZ_10_훅-라우터-주입 · FBZ_50_멀티스토리-증거게이트 · FBZ_70_설치-플러그인구조 · FBZ_40_조사-프로토콜 · FBZ_30_검증접지-팩

[!tip] Codex 교차검증 (원본 분석 보존) 원본 노트 작성 시점의 핵심 분석을 보존한다.

  • 근거 파일: /home/seunghyeong/harness-fablize/skills/fablize/SKILL.md, /home/seunghyeong/harness-fablize/setup/fablize-block.md
  • 이중화 구조: 스킬(트리거 로드형, 첫 실행 자동 온보딩 포함) + always-on 블록(setup.sh가 CLAUDE.md에 멱등 주입, 상주). 둘 다 같은 4대 절차 + always 베이스라인을 “신호별 최소 적용” 원칙으로 묶음.
  • 주입/생명주기: 스킬은 /fablize·트리거 어구·매칭 작업유형으로 로드, 블록은 setup.sh 1회 후 매 세션 자동. 베이스라인은 신호 없을 때 [always] 4규범만. __PLUGIN_ROOT__는 실제 경로 치환, <!-- FABLIZE:BEGIN ... :END --> 마커로 멱등 주입/제거.
  • 에스컬레이션의 의미: 막힘/능력 영역 도달 시 흉내 대신 “더 강한 모델/사람으로” 권고 — 하네스가 한계를 자인하는 정직성의 코드화. 능력(depth)은 못 올리고 절차만 강제한다는 점이 핵심.