콘텐츠로 이동

OpenClaw Session 관리하기: 안전하고 스마트한 대화 제어

여러 사용자가 동시에 말을 걸 때 AI 에이전트가 대화 내용을 혼동해서 당황스러웠던 적 있나요? 혹은 여러 플랫폼에서 들어오는 메시지를 어떻게 체계적으로 분리하고 초기화할지 고민될 때가 많죠. 대화의 맥락을 정확히 유지하면서도 보안을 지키는 세션 관리는 개발자에게 언제나 까다로운 숙제예요.

OpenClaw는 이런 고민을 해결하기 위해 강력한 Session 시스템을 제공해요. 에이전트별로 대화를 독립적으로 관리하고, 필요에 따라 세션을 정교하게 분리할 수 있는 방법을 소개할게요.

시작하기 전에 다음 사항들을 확인해 주세요.

  • 실행 중인 OpenClaw Gateway (모든 세션 상태의 Source of Truth입니다)
  • ~/.openclaw/openclaw.json 설정 파일에 대한 수정 권한
  • OpenClaw CLI 도구

Quick Start: 5분 만에 Secure DM 모드 설정하기

섹션 제목: “Quick Start: 5분 만에 Secure DM 모드 설정하기”

여러 사람이 에이전트에게 DM(Direct Message)을 보낼 수 있는 환경이라면 Secure DM mode를 활성화하는 것이 좋아요. 기본 설정에서는 모든 사용자가 하나의 대화 맥락을 공유하기 때문에, 개인 정보가 다른 사용자에게 유출될 위험이 있거든요.

예를 들어, 앨리스가 예약 정보를 물어본 뒤에 밥이 “우리가 무슨 이야기를 하고 있었지?”라고 물으면 에이전트가 앨리스의 정보를 답할 수도 있어요. 이를 방지하기 위해 세션을 사용자별로 격리해 볼게요.

  1. ~/.openclaw/openclaw.json 파일을 열어주세요.
  2. session.dmScope 설정을 per-channel-peer로 변경해요.
~/.openclaw/openclaw.json
{
session: {
// Secure DM mode: 채널과 발신자별로 DM 컨텍스트를 격리합니다.
dmScope: "per-channel-peer",
},
}

이렇게 설정하면 각 사용자마다 독립적인 대화 방이 만들어져서 훨씬 안전해요.

OpenClaw에서 모든 세션 상태는 Gateway가 소유해요. macOS 앱이나 WebChat 같은 UI 클라이언트는 로컬 파일을 직접 읽지 않고, 항상 Gateway에 쿼리해서 세션 목록과 Token 카운트를 가져와요. 원격 모드를 사용 중이라면 세션 데이터는 여러분의 Mac이 아닌 원격 서버의 Gateway 호스트에 저장된다는 점을 기억하세요.

데이터가 어디에 저장되는지 궁금하시죠? Gateway 호스트의 다음 경로를 확인해 보세요.

  • Store 파일: ~/.openclaw/agents/<agentId>/sessions/sessions.json (에이전트별 세션 맵)
  • 대화 기록(Transcripts): ~/.openclaw/agents/<agentId>/sessions/<SessionId>.jsonl

대화 초기화 및 수명 주기 (Lifecycle)

섹션 제목: “대화 초기화 및 수명 주기 (Lifecycle)”

세션은 무한정 유지되지 않아요. OpenClaw는 정해진 규칙에 따라 세션을 새로 시작해요.

  • Daily Reset: 기본적으로 Gateway 호스트의 현지 시간으로 새벽 4:00에 세션이 만료돼요.
  • Idle Reset: idleMinutes를 설정하면 일정 시간 동안 대화가 없을 때 세션을 종료할 수 있어요.
  • 수동 리셋: 채팅창에서 /new 또는 /reset 명령어를 보내면 즉시 새로운 세션 ID가 생성돼요. /new gpt-4o처럼 모델 이름을 함께 보내서 모델을 바꿀 수도 있어요.

특정 채널이나 세션 타입에 대해 에이전트의 응답을 차단하고 싶을 때가 있죠? sendPolicy를 사용하면 세밀하게 제어할 수 있어요.

{
session: {
sendPolicy: {
rules: [
{ action: "deny", match: { channel: "discord", chatType: "group" } },
{ action: "deny", match: { keyPrefix: "cron:" } },
],
default: "allow",
},
},
}

채팅창에서 관리자 권한으로 /send off를 입력해 실시간으로 해당 세션의 응답을 막을 수도 있답니다.

Troubleshooting: 자주 발생하는 문제

섹션 제목: “Troubleshooting: 자주 발생하는 문제”

1. 다른 사용자의 대화 내용이 섞여서 나옵니다.

  • 원인: dmScope가 기본값인 main으로 설정되어 있어 모든 DM이 하나의 세션을 공유하고 있기 때문이에요.
  • 해결책: 위 Quick Start 섹션을 참고하여 dmScope를 per-channel-peer 또는 per-account-channel-peer로 변경하세요.

2. UI에서 보이는 Token 카운트가 실제와 다른 것 같습니다.

  • 원인: 클라이언트가 JSONL 파일을 직접 파싱하려고 하거나, Gateway의 최신 상태를 반영하지 못했을 수 있어요.
  • 해결책: OpenClaw는 Gateway의 store 필드 값을 최종 결과로 사용해요. openclaw gateway call sessions.list 명령어로 Gateway의 데이터를 직접 확인해 보세요.

에이전트와 대화 중에 다음 명령어들을 standalone 메시지(명령어만 단독 전송)로 보내보세요.

  • /status: 에이전트 연결 상태와 컨텍스트 사용량 확인
  • /context list: 시스템 프롬프트와 주입된 파일 목록 확인
  • /compact: 오래된 대화 내용을 요약하여 컨텍스트 공간 확보
  • /stop: 현재 실행 중인 에이전트 추론과 대기 중인 작업을 즉시 중단

더 자세한 설정 방법이나 도움이 필요하다면 AI Setup Assistant에게 물어보세요!

OpenClaw

OpenClaw Expert

아직 막혀 있나요?

이 문서에서 답을 못 찾았다면 OpenClaw Expert에게 바로 물어보세요.