C.W.K.
Stream
Lesson 01 of 04 · published

제스처 하나, 그게 다

~12 min · identity, menu-bar, thin-client, posture

Level 0차가운 부싯돌
0 XP0/34 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"단어를 선택해. 키를 내려쳐. 단어가 바뀐다. 그게 앱 전부야."

단 하나의 제스처

Flint 는 일이 하나뿐인 네이티브 macOS 메뉴바 유틸리티야: 아무 앱에서 텍스트를 선택하고, 단축키를 내려치면, 변환된 텍스트가 제자리로 돌아와. 오타 고치기, 문장 조이기, 문단 번역하기, 문단을 더 부드러운 톤으로 다시 쓰기 — 전부 같은 제스처, 전부 지금 있는 앱을 안 떠나고. 열 창도, 넘어갈 탭도, 먼저 클릭할 프롬프트 박스도 없어. 선택이 입력이고, 내려침이 명령이고, 교체가 출력이야.

되기를 거부하는 모든 것

Flint 를 믿을 만큼 작게 만드는 건 일부러 아닌 것들의 목록이야. 채팅 창이 아냐. 두 번째 Pippa 가 아냐 — 기억도, 자기만의 성격도, 대화 기록도 없어. 모델 서버가 아냐: 모델을 안 올리고, 포트를 안 열고, 추론을 안 돌려. 글쓰기 에디터도 아니고 웹 관리 패널도 아냐. 이 하나하나가 다 테이블 위에 있다가 일부러 잘렸어, 각각이 날카로운 작은 유틸리티를 — 조용히 옆에 앉아 있어야 할 도구들과 경쟁하는 — 무거운 앱으로 바꿔놨을 테니까.

한 호흡에 담은 루프

제스처 밑엔 아주 분명한 분업을 가진 루프가 있어. Flint 는 타깃과 선택된 텍스트를 잡고, 네 매크로의 템플릿을 {input} 자리에 선택을 떨궈 넣어 렌더하고, 그 렌더된 프롬프트를 이미 다른 앱에 있는 브레인한테 보내. 브레인이 생각해. Flint 는 답을 받아서, 타깃이 아직 그대로인지 증명하고, 깨끗한 교체 하나를 넣어. 생각은 빌린 거고; 제스처, 캡처, 조심스러운 삽입은 Flint 거야.

텍스트 선택  ->  단축키 내려침
   캡처 { app, element, selection, range }
   매크로 템플릿 렌더, {input} = 선택
   렌더된 프롬프트를 빌린 브레인에 POST   (Flint 는 생각 안 함)
   ... 브레인이 변환된 텍스트 반환 ...
   타깃이 아직 같은지 증명
   교체 하나 삽입  (아니면 클립보드로 폴백)

그 루프를 다시 읽고 지능이 어디 사는지 봐: Flint 안엔 아무 데도 없어. Flint 는 텍스트를 잡는 손이고 되돌려 넣는 손이야. 마음은 완전히 딴 데 있어 — 그리고 그걸 거기 두는 게 앱 전체에서 첫 번째이자 제일 중요한 결정이야.

제품은 제스처지, 모델이 아냐. AI 능력 둘레에 도구를 지을 때, 유혹은 모델을 중심에 놓고 UI 를 두르는 거야. Flint 는 그걸 뒤집어: 모델은 호출하는 서비스고, 진짜 제품은 없애는 마찰이야 — 복사, 앱 전환, 붙여넣기, 프롬프트, 대기, 복사, 다시 전환, 붙여넣기 대신 한 번의 내려침. 제스처를 먼저 설계하고; 지능은 빌려.

Code

앱 전체의 모양, 함수 하나로·swift
func runMacro(_ macro: FlintMacro) async {
    // 1. 느린 게 일어나기 전에 타깃과 선택을 먼저 캡처.
    guard let target = TargetCapture.snapshot() else { return }

    // 2. 매크로 자기 템플릿을 렌더. {input} 이 선택이 됨.
    let prompt = macro.render(input: target.selection ?? "")

    // 3. 브레인을 빌림. Flint 자신은 모델을 절대 안 돌림.
    let result = await pippa.applyFree(prompt: prompt,
                                       vault: macro.vaultContextMode)

    // 4. 타깃이 아직 맞는지 증명하고, 결과 정확히 하나 삽입.
    Insertion.place(result, into: target)   // 증명 실패면 클립보드
}

External links

Exercise

하루에 여러 번 하는 텍스트 변환을 하나 떠올려 봐 — 같은 종류의 오타 고치기, 붙여넣은 텍스트 재정렬, 무뚝뚝한 문장 다시 쓰기. 지금 밟는 단계를 세: 선택, 복사, 앱 전환, 붙여넣기, 지시 입력, 대기, 결과 복사, 다시 전환, 붙여넣기. 이제 같은 작업을 한 번의 내려침으로 묘사해. 결과가 원본이 있던 바로 그 자리로 돌아오려면, 내려치는 순간 뭐가 캡처돼야 할까?
Hint
한 번의 내려침이 왕복 전체를 한 행동으로 접어, 그건 왕복이 필요로 했던 모든 것 — 어느 앱, 어느 텍스트 필드, 정확히 어느 문자가 선택됐는지 — 이 내려침-시점에 잡혀서 기억돼야 한다는 뜻이야, 답이 돌아올 즈음이면 넌 딴 데 봤을 수 있으니까. 그 잡아둔 타깃이 이후 모든 레슨이 지키는 대상이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.