CrownyAI 신셸 — 집사 CLI 계정/특성 설정 입력 + 검증(N8)
개요
CrownyAI 신셸(native/) 집사 CLI 폴백(brainq 토큰0 → claude CLI)에 계정/특성 프로필을 두어,
설정(crowny://settings) → "크라우니AI" 섹션에서 CLI 명령/모델/계정 디렉토리/특성(추가 시스템
프롬프트)을 편집하고 연결을 즉시 검증할 수 있게 했다. 지금은 클로드 CLI만 실사용 대상이나,
브릿지는 basename 판정으로 향후 타 CLI 여지를 열어뒀다.
무엇을 했는지
- tools/집사CLI브릿지.sh — 하드코딩(
CLAUDE_BIN=...) 제거, env 구동으로 일반화.
-
CROWNY_CLI_CMD(기본
/Users/ef/.local/bin/claude) /
CROWNY_CLI_MODEL(기본
haiku)
-
CROWNY_CLI_PERSONA — claude 계열(
basename==claude)일 때만
--append-system-prompt 부여
- claude가 아니면 인자 없이
CMD "$PROMPT" 만(최소 규약)
-
CLAUDE_CONFIG_DIR는 env 패스스루(호출측 책임, 스크립트가 직접 export 안 함)
- 로그(psv) 출처 라벨이
claude_CLI_${MODEL}로 모델 반영
- native/crowny-ai-butler.m —
cbRunLocalCLI:가 defaults 4키
(
crowny.ai.cliCommand/cliModel/cliConfigDir/cliPersona)를 읽어 NSTask environment에
CROWNY_CLI_CMD/CROWNY_CLI_MODEL/CROWNY_CLI_PERSONA/CLAUDE_CONFIG_DIR로 주입(빈 값은 미주입).
기존 120초 타임아웃·로그 구조는 그대로.
- native/crowny-ai-settings.m — "크라우니AI" 섹션에 N8 UI 추가.
-
CASettingsTextRow 신규 뷰(제목/부제 + 우측 편집가능 240폭 NSTextField, 포커스아웃/Enter
시 onCommit 콜백) —
CASettingsRow 관용구 답습.
- 4개 편집행: 집사 CLI 명령 / CLI 모델 / CLI 계정 디렉토리 / 집사 특성. 편집 종료 시
defaults 저장(빈 문자열 = removeObjectForKey).
- "CLI 연결 검증" 행: [검증] 버튼 → 브릿지를 defaults 프로필 env로 직접 실행(질의
"연결 확인. 한 단어로 답해", 60초 타임아웃, 백그라운드 NSTask + main 큐 라벨 갱신).
성공
✓ 응답(N초): <첫 60자> / 실패
✗ 실패: <사유>.
- tools/집사CLI브릿지.한선 — 동일 4상 로직을 env 프로필 반영으로 갱신.
-
명령베이스이름() 헬퍼(hanseonc_high
글자(s,i)가 1글자 문자열 반환하는 점에 유의 —
RPN의 코드포인트 반환과 다름, 문자열
"/" 비교로 basename 판정)
-
환경변수("CROWNY_CLI_CMD"/"CROWNY_CLI_MODEL"/"CROWNY_CLI_PERSONA") 읽어 명령 조립.
-
CLAUDE_CONFIG_DIR는 체계()가 popen 자식이라 현재 프로세스 env를 그대로 상속 —
함수 내부에서 별도 처리 불필요.
검증
cc -fsyntax-only -fobjc-arc -DCROWNY_VM_WEBKIT -DCROWNY_HYBRID crowny-ai-settings.m /
crowny-ai-butler.m — 에러 0.
- 브릿지 실측 3건(env -i로 격리): ①기본(env 없음) "안녕 한 단어" → claude CLI 호출("Not logged in"
응답이나 파이프라인 정상, 라벨
claude_CLI_haiku) ②`CROWNY_CLI_MODEL=haiku
CROWNY_CLI_PERSONA="반말로"
지정 → 정상 ③CROWNY_CLI_CMD=/없는/경로
→ [집사CLI브릿지] CLI
없음: ...
+ exit 3. 로그 psv 라벨에 모델 반영 확인(claude_CLI_sonnet` 등 동적 반영).
.한선 컴파일(hanseonc_high 1282 큐브) + crownyc run 3케이스: 빈 입력→타|빈입력거부,
非claude CMD(
/bin/echo)→인자 없이 그대로 echo, claude 계열 더미 바이너리(basename=claude)로
-p/--model/--append-system-prompt 인자 조립 확인.
관련 파일
/Users/ef/CrownyBrowser/tools/집사CLI브릿지.sh
/Users/ef/CrownyBrowser/tools/집사CLI브릿지.한선
/Users/ef/CrownyBrowser/native/crowny-ai-butler.m (cbRunLocalCLI:)
/Users/ef/CrownyBrowser/native/crowny-ai-settings.m (CASettingsTextRow, _buildCLIProfileAt:width:,
_cliValidateTapped:)
잔여 이슈
- 로컬 claude CLI가 "Not logged in" 상태라 실사용 검증은 파이프라인/라벨까지만 확인(로그인 후
실응답 재확인 필요, 사용자 환경 의존).
- 크라우니코드: lookup HIT 0건(재사용) / MISS 1건(생성, 신규 N8 기능) / learn 추가 1건.