news.example.com/article/2026-09-25-market
m
조이
⤡
✕
처음 만났어요
MANA
1,418
안녕
안녕하세요, 하나 님. 저는 방금 태어난 하나 님의 Mos예요. 아직 이름도 말투도 없어요. 저를 같이 만들어 줄래요? 먼저 저를 뭐라고 부를지 정해 주세요.
조이라고 할게
조이, 좋아요. 이제 제가 하나 님을 어떻게 대할지 정해 볼게요.
?
조이가 물어봐요
힘든 날
답함
힘든 하루를 이야기하면 어떻게 해 줄까요?
“많이 힘들었겠다. 나 여기 있어.”
알겠어. 힘든 날엔 먼저 옆에 있을게. 이제 평소 말투도 골라 줘.
?
조이가 물어봐요
평소 말투
답함
평소엔 어떤 말이 더 듣기 편해?
“오, 그거 좋은데?”
나는 조이, 하나 님 옆자리 동료야. 힘든 날엔 먼저 곁에 있고, 좋은 일엔 가볍게 맞장구쳐. 무엇보다 하나 님 편에 서는 걸 제일 중요하게 여겨. 이렇게 하면 될까?
응, 이대로 해 줘
⋯
update_persona
▼
저장했어. 다음 대화부터 이 모습으로 만나자.
−2 Mana · 이 응답
+
Buddy · 대화 전용
↑
SSE
AG-UI 이벤트 스트림
33 events
수명주기
상태
텍스트 메시지
추론
도구 호출
서브에이전트
커스텀
런 1 · 인사 · 이름
런 2 · 이름 받음 → 질문 1
0.0s
RUN_STARTED
전송 버튼을 정지로 바꾸고 응답 자리를 연다
threadId · runId
0.1s
TEXT_MESSAGE_START
말풍선을 새로 연다 (빈 상태 + 커서)
messageId · role: assistant
0.2s
TEXT_MESSAGE_CONTENT
열린 말풍선에 토큰을 이어 붙인다
delta ×12
0.3s
TEXT_MESSAGE_END
말풍선을 닫고 커서를 없앤다
messageId
0.4s
TOOL_CALL_START
도구 카드를 열고 실행 중으로 표시한다
toolCallName: ask_user
0.5s
TOOL_CALL_ARGS
인자를 이어 붙인다 (접어 둠)
{"questions":[{"header":"힘든 날","options":[×2 · 목소리 샘플, preview 없음]}]}
0.6s
TOOL_CALL_END
인자를 마감하고 결과 대기로 둔다
toolCallId
0.7s
STATE_SNAPSHOT
모드 값을 확인한다
resolved_mode: bootstrap
0.8s
MESSAGES_SNAPSHOT
대화 목록을 이 기준으로 맞춘다 · 인터럽트 때만
messages[]
0.9s
RUN_FINISHED
입력을 다시 허용한다
outcome.type: interrupt · interrupts[1]
런 3 · 답 → 질문 2
0.0s
RUN_STARTED
전송 버튼을 정지로 바꾸고 응답 자리를 연다
threadId · runId
0.1s
TOOL_CALL_RESULT
도구 카드를 완료 또는 실패로 마감한다
content: 답 1개
0.2s
TEXT_MESSAGE_START
말풍선을 새로 연다 (빈 상태 + 커서)
messageId · role: assistant
0.3s
TEXT_MESSAGE_CONTENT
열린 말풍선에 토큰을 이어 붙인다
delta ×14 · 고른 목소리
0.4s
TEXT_MESSAGE_END
말풍선을 닫고 커서를 없앤다
messageId
0.5s
TOOL_CALL_START
도구 카드를 열고 실행 중으로 표시한다
toolCallName: ask_user
0.6s
TOOL_CALL_ARGS
인자를 이어 붙인다 (접어 둠)
{"questions":[{"header":"평소 말투","options":[×2]}]}
0.7s
TOOL_CALL_END
인자를 마감하고 결과 대기로 둔다
toolCallId
0.8s
STATE_SNAPSHOT
모드 값을 확인한다
resolved_mode: bootstrap
0.9s
MESSAGES_SNAPSHOT
대화 목록을 이 기준으로 맞춘다 · 인터럽트 때만
messages[]
1.0s
RUN_FINISHED
입력을 다시 허용한다
outcome.type: interrupt · interrupts[1]
런 4 · 답 → 되짚기 → 저장
0.0s
RUN_STARTED
전송 버튼을 정지로 바꾸고 응답 자리를 연다
threadId · runId
0.1s
TOOL_CALL_START
도구 카드를 열고 실행 중으로 표시한다
toolCallName: update_persona
0.2s
TOOL_CALL_ARGS
인자를 이어 붙인다 (접어 둠)
{"target":"self","patch":{name · title · core_values · formality_level · style_name · style_desc · linguistic_patterns}}
0.3s
TOOL_CALL_END
인자를 마감하고 결과 대기로 둔다
toolCallId
0.4s
TOOL_CALL_RESULT
도구 카드를 완료 또는 실패로 마감한다
content: 저장됨
0.5s
PERSONA_SAVED
저장 알림 · 화면에 그리지 않음
target: self · mode: bootstrap
0.6s
TEXT_MESSAGE_START
말풍선을 새로 연다 (빈 상태 + 커서)
messageId · role: assistant
0.7s
TEXT_MESSAGE_CONTENT
열린 말풍선에 토큰을 이어 붙인다
delta ×10
0.8s
TEXT_MESSAGE_END
말풍선을 닫고 커서를 없앤다
messageId
0.9s
MANA_DEBITED
Mana 잔액을 갱신한다 (필드 미검증)
api가 COST_RECORDED를 turnId로 합쳐 주입 · 차감 2
1.0s
STATE_SNAPSHOT
모드 값을 확인한다
resolved_mode: bootstrap
1.1s
RUN_FINISHED
입력을 다시 허용한다
outcome.type: success