Anthropic의 페르소나 선택 모델(PSM, 2026)은 명확히 말한다:

“페르소나는 AI 시스템 자체와 동일한 것이 아니다. LLM은 캐릭터를 시뮬레이션하고 있으며, Assistant는 그 캐릭터의 한 instance에 불과하다.”

Karpathy는 Sequoia Ascent 2026에서 같은 흐름을 다른 각도로 표현했다:

“install .md skills instead of install .sh scripts.”

Spec-as-instruction의 frontier. 하지만 frontier 모델이 “on the rails"라면, on-device의 작은 모델은 “off-road jungle with a machete"다.

그 jungle에서 가장 먼저 무너지는 것이 페르소나다.

Mati Wise Partner — 실제 truncation 케이스

clawsouls.ai에 사용자가 publish한 페르소나, Mati Wise Partner. 5개 파일로 구성된 Soul Spec 패키지다:

파일역할
SOUL.md성격, 원칙, 경계선
IDENTITY.md이름, 역할, 기본 정보
AGENTS.md워크플로우, 안전 규칙
STYLE.md커뮤니케이션 톤
README.md사용자 온보딩 가이드

총 토큰: 6,866 tokens.

WebLLM Qwen 2.5 0.5B 시도

context window: 4,096 tokens. 결과는 즉각적이었다:

Error: Prompt tokens exceed context window size: 6866; context window: 4096

67% 초과. 모델이 페르소나를 로드하기도 전에 에러로 종료된다.

SoulClaw Mobile — LiteRT-LM Gemma 4 E2B 시도

maxNumTokens=4000. 에러 없이 실행된다. 문제는 그 다음에 생겼다.

systemInstruction이 조용히 truncate되었고, 모델은 base identity로 회귀했다. 첫 번째 메시지에서 돌아온 응답:

“I’m Gemma 4, how can I help you today?”

Mati가 아니다. 페르소나 설정이 무시된 것이 아니다 — 설정 자체가 도달하지 못했다. Silent failure.

Karpathy의 ‘jaggedness’ — 온디바이스의 직접적 매핑

Karpathy는 frontier와 edge의 격차를 이렇게 묘사했다: “off-road in the jungle with a machete.”

Frontier의 RL training data는 100K LOC 규모의 리팩토링도 커버한다. 복잡한 multi-file instruction을 따르도록 훈련되어 있다. 이것이 “on the rails"다.

Edge의 작은 on-device 모델은 다르다:

  • 컨텍스트 윈도우: 4,096 ~ 8,192 tokens (frontier의 1/20)
  • Instruction fidelity: 명령어 충실도 훈련에 투자된 compute가 적다
  • CJK tokenization: 한글/한자/가나 문자의 token density가 Latin보다 높다

Soul Spec의 multi-file schema는 그 jungle의 길 표시다. 그런데 길 표시 자체가 truncate되면, 지도 없이 jungle을 걷는 것과 같다.

4-Tier Bootstrap 패턴 — design

truncation 문제의 구조적 해결. 모든 파일을 동등하게 취급하는 대신, 중요도에 따라 tier를 나눈다.

Tier 구조

Tier파일로딩 조건이유
Tier 1IDENTITY.md항상 (force-add)모델이 “나는 누구인가"를 잃으면 안 된다
Tier 2SOUL.mdbudget 허용 시성격/원칙/경계선 — 핵심 identity
Tier 3AGENTS.md / STYLE.md / README.mdbudget 허용 시운영 세부사항
Tier 4memory search 등드문 reach외부 컨텍스트

Tier 1은 budget에 관계없이 항상 포함된다. 토큰이 부족해도 IDENTITY.md는 살아남는다.

한국어 token estimation

CJK(한글/한자/가나) 문자의 tokenization은 Latin과 다르다:

  • CJK chars: 0.75 token/char
  • Latin chars: 0.25 token/char

예시: "안녕하세요 Brad 입니다" = 12 tokens

이 추정은 LiteRT-LM tokenizer와 ±20% 정합. conservative high 방향으로 잡아야 truncation을 피할 수 있다.

Mati 사례에 적용

Qwen 2.5 0.5B (4,096 ctx) 기준:

Context window:       4,096 tokens
System reserves:       -512 tokens  (model overhead)
Chat history reserves: -512 tokens  (대화 기록)
Generation reserves:   -512 tokens  (응답 생성)
─────────────────────────────────────
Available budget:     2,560 tokens

Tier 1 우선 배치:

IDENTITY.md    755 tokens  → force-add ✅
AGENTS.md    1,755 tokens  → budget fit ✅
─────────────────────────
Used:         2,510 / 2,560 tokens

SOUL.md      truncated ⚠️
STYLE.md     truncated ⚠️
README.md    truncated ⚠️

결과:

  • IDENTITY.md 살아남 → “I’m Gemma 4” 회귀 사라짐
  • Mati의 이름과 기본 역할 유지
  • 사용자에게 Toast 알림 표시: “페르소나가 모델 한계 초과 — 클라우드 BYOK 권장”

전체 Soul Spec이 로드되지는 않았다. 그러나 silent failure 대신 graceful degradation으로 전환되었다.

Production references

4-Tier 패턴은 현재 여러 구현체에 배포되어 있다.

soul-playground (TypeScript)

clawsouls.ai/try의 live source. WebLLM 환경에서 4-Tier 로직 구현:

// 예시 구조 (soul-playground)
function buildSystemPromptTiered(
  files: SoulFiles,
  budget: number,
  tokenizer: Tokenizer
): string {
  // Tier 1: force-add
  const identity = files.get('IDENTITY.md');
  let prompt = identity;
  let remaining = budget - countTokens(identity, tokenizer);

  // Tier 2~3: budget 허용 시
  for (const file of ['SOUL.md', 'AGENTS.md', 'STYLE.md', 'README.md']) {
    const content = files.get(file);
    const tokens = countTokens(content, tokenizer);
    if (remaining >= tokens) {
      prompt += '\n\n' + content;
      remaining -= tokens;
    }
  }
  return prompt;
}

soulclaw-android v1.6.5

Play Store에서 다운로드 가능. agent/TieredBootstrap.kt에 Kotlin 구현. CJK-aware tokenizer 포함:

// CJK token density 보정
fun estimateTokens(text: String): Int {
    var count = 0
    for (ch in text) {
        count += when {
            ch.code in 0xAC00..0xD7A3 -> 1  // 한글
            ch.code in 0x4E00..0x9FFF -> 1  // 한자
            ch.code in 0x3040..0x30FF -> 1  // 가나
            else -> if (ch == ' ') 0 else 1
        }
    }
    // conservative: ×0.75 base, +20% buffer
    return (count * 0.75 * 1.2).toInt()
}

종합 + open invitation

Anthropic PSM이 말하는 것: LLM은 캐릭터를 시뮬레이션한다. 어떤 캐릭터인지가 결정적이다.

Karpathy가 말하는 것: frontier는 rails 위에 있지만, edge는 jungle이다.

4-Tier Bootstrap은 그 jungle에서 machete를 드는 사용자에게 IDENTITY의 안전한 경로를 보장한다. 전체 Soul Spec을 실행할 수 없을 때에도, 페르소나의 핵심이 살아남도록.


Spec이 의미 있을 때 — 큰 모델의 ‘on the rails’와 작은 모델의 ‘off-road jungle’ 모두의 navigate를 가능하게 한다.


Soul Spec foundation paper는 Zenodo에서 확인할 수 있다. SoulClaw Android v1.6.5는 Play Store에서 다운로드 가능하다.