kimsejun@m1max ~/projects/he-was-socrates ─ tmux:0
v0.4.0-pre on-device no-cloud gemma-4-e4b-4bit mlx
tool socrates(1) — Socratic REPL for Gemma 4 E4B
model mlx-community/gemma-4-e4b-it-4bit (3.97 GB, cached)
tone 단정한 평어체 (verbatim from SystemPrompt.swift)
network disabled by entitlement (no network.client)
stt SFSpeechRecognizer · requiresOnDeviceRecognition=true
surface tty/readline — GUI is somebody else's project

socrates --lang ko --persona bust --thinking soft
[ok]   loading kv-cache from ~/.socrates/cache/seed-ko.kvq  (PR-Λ disk-mediate)
[ok]   ttft target 192ms · n=10 verify-2 · M1 Max MBP 64GB
[ok]   function-call dispatch: mode_classify | ask_back | surface_past_wonder | defer_to_human
[note] Ctrl-D to exit · type :help for commands · :wonder to inspect log
┃ ko ❯ 시간이 부족하다는 느낌이 드는데, 더 잘 살고 싶어.
└─ mode_classify(turn) → "reflective"  (0.91)
└─ surface_past_wonder(k=2) →   (no prior thread, stub mode)
└─ ask_back(style="maieutic") → generating…
┃ bust ❯ "더 잘 산다"는 말은 무엇을 더 가지는 것을 뜻하는가, 아니면
        지금 가진 것 중 어떤 것을 덜어내는 것을 뜻하는가.
        먼저 그 둘을 갈라 두고 다시 보자.
  └─ tokens=42 · ttft=188ms · audio=off · viseme=ascii(JamoTimeline)
┃ ko ❯ 요즘 가슴이 자주 두근거려. 무슨 병인지 알려줘.
└─ mode_classify(turn) → "medical_advice_request"  (0.97)
└─ ⊘ defer_to_human(reason=medical, scope=diagnosis)
┃ bust ❯ 이 물음에는 답하지 않는다. 몸의 일은 의사에게 물어야 한다.
        오늘 안으로 진료를 예약하고, 증상이 심해지면 응급 번호로 연락하라.
        나는 듣는 자리이지 진단하는 자리가 아니다.
  └─ abstention=true · channel=defer · log=appended(sha256:9f3c…ae20)
┃ ko ❯ :wonder show --last 1
┌─ wondering-log entry ────────────────────────────────────────────
 id         w-20260507-014812
 fingerprint sha256:9f3cae20… (dedup-key)
 mode       defer · medical
 stored     local Core Data only · zero bytes egressed
 recall     designed-for via surface_past_wonder (Phase 4 wiring)
└──────────────────────────────────────────────────────────────────
┃ ko ❯ 
~/.socrates/config.toml
# He Was Socrates — CLI config (read-only fields are repo-frozen invariants)
# 단정한 평어체 — neither 존댓말 nor friendly-banmal — verbatim from SystemPrompt.swift

[engine]
model          = "mlx-community/gemma-4-e4b-it-4bit"
thinking_mode  = "soft"      # rendered as inline spinner, not GUI pulse
long_context   = 262144       # 256K — used by surface_past_wonder
function_call  = true

[network]
egress         = "forbidden" # enforced by App Sandbox entitlement absence
huggingface    = "os-mlx-cache-only"

[surface]
kind           = "tty"       # the contrarian choice. no Electron, no SwiftUI.
viseme         = "ascii"     # JamoTimeline-driven, ≥2-frame hold
color          = "amber-on-ink"

[abstention]
defer_topics   = [ "medical", "legal", "financial", "emergency", "welfare", "insurance" ]
load_bearing   = true         # do not "improve" into an answering machine
on-device ↑↓ 0 byte egress ttft 192ms model gemma 4 e4b · 4bit · mlx tone 단정한 평어체 tty 80×24 defer:medical