Skip to content

시스템 프롬프트

OpenClaw는 모든 에이전트 실행에 대해 커스텀 시스템 프롬프트를 구축합니다. 이 프롬프트는 OpenClaw 소유이며 pi-coding-agent 기본 프롬프트를 사용하지 않습니다.

프롬프트는 OpenClaw가 조합하여 각 에이전트 실행에 주입합니다.

프로바이더 플러그인은 전체 OpenClaw 소유 프롬프트를 대체하지 않고 캐시 인식 프롬프트 지침을 기여할 수 있습니다. 프로바이더 런타임은 다음을 할 수 있습니다:

  • 소규모 명명된 코어 섹션 세트 교체 (interaction_style, tool_call_style, execution_bias)
  • 프롬프트 캐시 경계 위에 안정적인 접두사 주입
  • 프롬프트 캐시 경계 아래에 동적 접미사 주입

모델 패밀리별 튜닝에는 프로바이더 소유 기여를 사용하십시오. 일반적인 프로바이더 동작이 아닌 호환성 또는 진정으로 전역적인 프롬프트 변경에는 레거시 before_prompt_build 프롬프트 변환을 유지하십시오.

구조

프롬프트는 의도적으로 간결하며 고정된 섹션을 사용합니다:

  • 툴링: 구조화된 도구 진실의 원천 알림 + 런타임 도구 사용 지침.
  • 안전성: 권력 추구 동작 또는 감독 우회를 피하기 위한 짧은 가드레일 알림.
  • 스킬 (사용 가능한 경우): 모델에게 필요 시 스킬 지침을 로드하는 방법을 알려줍니다.
  • OpenClaw 자체 업데이트: config.schema.lookup으로 안전하게 구성 검사, config.patch로 구성 패치, config.apply로 전체 구성 교체, 명시적 사용자 요청 시에만 update.run 실행. 소유자 전용 gateway 도구는 tools.exec.ask / tools.exec.security 재작성도 거부합니다. 이는 보호된 exec 경로로 정규화되는 레거시 tools.bash.* 별칭 포함.
  • 워크스페이스: 작업 디렉터리 (agents.defaults.workspace).
  • 문서: OpenClaw 문서의 로컬 경로 (리포 또는 npm 패키지)와 언제 읽어야 하는지.
  • 워크스페이스 파일 (주입됨): 아래에 부트스트랩 파일이 포함됨을 나타냄.
  • 샌드박스 (활성화된 경우): 샌드박싱된 런타임, 샌드박스 경로, 상승된 exec 사용 가능 여부를 나타냄.
  • 현재 날짜 및 시간: 사용자 로컬 시간, 타임존, 시간 형식.
  • 응답 태그: 지원되는 프로바이더를 위한 선택적 응답 태그 구문.
  • 하트비트: 기본 에이전트에 대해 하트비트가 활성화된 경우, 하트비트 프롬프트 및 ack 동작.
  • 런타임: 호스트, OS, node, 모델, 리포 루트 (감지된 경우), thinking 레벨 (한 줄).
  • 추론: 현재 가시성 레벨 + /reasoning 토글 힌트.

툴링 섹션에는 장기 실행 작업을 위한 런타임 지침도 포함됩니다:

  • exec sleep 루프, yieldMs 지연 트릭, 반복 process 폴링 대신 향후 후속 조치를 위해 cron 사용 (나중에 다시 확인, 알림, 반복 작업)
  • 지금 시작하고 백그라운드에서 계속 실행되는 커맨드에만 exec / process 사용
  • 자동 완료 웨이크가 활성화된 경우, 커맨드를 한 번 시작하고 출력을 내보내거나 실패할 때 푸시 기반 웨이크 경로에 의존
  • 실행 중인 커맨드를 검사해야 할 때 로그, 상태, 입력, 개입에 process 사용
  • 태스크가 더 크다면 sessions_spawn 선호. 서브 에이전트 완료는 푸시 기반이며 요청자에게 자동 공지
  • 완료를 기다리기 위해 루프에서 subagents list / sessions_list 폴링하지 않음

실험적 update_plan 도구가 활성화된 경우, 툴링은 또한 모델에게 사소하지 않은 멀티 스텝 작업에만 사용하고, 정확히 하나의 in_progress 단계를 유지하며, 각 업데이트 후 전체 계획을 반복하지 않도록 알려줍니다.

시스템 프롬프트의 안전성 가드레일은 권고적입니다. 모델 동작을 안내하지만 정책을 강제하지는 않습니다. 하드 강제에는 도구 정책, exec 승인, 샌드박싱, 채널 허용 목록을 사용하십시오. 운영자는 설계상 이를 비활성화할 수 있습니다.

네이티브 승인 카드/버튼이 있는 채널에서 런타임 프롬프트는 이제 에이전트에게 해당 네이티브 승인 UI를 먼저 의존하도록 알립니다. 도구 결과가 채팅 승인을 사용할 수 없거나 수동 승인이 유일한 경로라고 말할 때만 수동 /approve 커맨드를 포함해야 합니다.

프롬프트 모드

OpenClaw는 서브 에이전트에 대해 더 작은 시스템 프롬프트를 렌더링할 수 있습니다. 런타임은 각 실행에 대해 promptMode를 설정합니다 (사용자 대면 구성이 아님):

  • full (기본값): 위의 모든 섹션 포함.
  • minimal: 서브 에이전트에 사용됨. 스킬, 메모리 회상, OpenClaw 자체 업데이트, 모델 별칭, 사용자 ID, 응답 태그, 메시징, 자동 응답, 하트비트 생략. 툴링, 안전성, 워크스페이스, 샌드박스, 현재 날짜 및 시간 (알 수 있는 경우), 런타임, 주입된 컨텍스트는 계속 사용 가능.
  • none: 기본 ID 줄만 반환합니다.

promptMode=minimal인 경우, 추가 주입된 프롬프트는 그룹 채팅 컨텍스트 대신 서브에이전트 컨텍스트로 레이블이 지정됩니다.

워크스페이스 부트스트랩 주입

부트스트랩 파일은 프로젝트 컨텍스트 아래에 정리되고 추가되므로 모델은 명시적 읽기 없이 ID 및 프로필 컨텍스트를 볼 수 있습니다:

  • AGENTS.md
  • SOUL.md
  • TOOLS.md
  • IDENTITY.md
  • USER.md
  • HEARTBEAT.md
  • BOOTSTRAP.md (새 워크스페이스에서만)
  • MEMORY.md (있는 경우), 없으면 소문자 폴백 memory.md

이 파일들은 모두 파일별 게이트가 적용되지 않는 한 모든 턴에서 컨텍스트 창에 주입됩니다. HEARTBEAT.md는 기본 에이전트에 대해 하트비트가 비활성화되거나 agents.defaults.heartbeat.includeSystemPromptSection이 false인 경우 일반 실행에서 생략됩니다. 주입된 파일을 간결하게 유지하십시오 -- 특히 시간이 지남에 따라 성장할 수 있고 예상치 못하게 높은 컨텍스트 사용 및 더 잦은 컴팩션으로 이어질 수 있는 MEMORY.md.

참고: memory/*.md 일별 파일은 자동으로 주입되지 않습니다. memory_searchmemory_get 도구를 통해 요청 시 접근하므로 모델이 명시적으로 읽지 않는 한 컨텍스트 창에 포함되지 않습니다.

큰 파일은 마커로 잘립니다. 파일당 최대 크기는 agents.defaults.bootstrapMaxChars (기본값: 20000)로 제어됩니다. 파일 전체에서 주입된 부트스트랩 콘텐츠의 합계는 agents.defaults.bootstrapTotalMaxChars (기본값: 150000)로 제한됩니다. 누락된 파일은 짧은 파일 누락 마커를 주입합니다. 잘림이 발생하면 OpenClaw는 프로젝트 컨텍스트에 경고 블록을 주입할 수 있습니다. agents.defaults.bootstrapPromptTruncationWarning (off, once, always; 기본값: once)으로 제어하십시오.

서브 에이전트 세션은 AGENTS.mdTOOLS.md만 주입합니다 (다른 부트스트랩 파일은 서브 에이전트 컨텍스트를 작게 유지하기 위해 필터링됨).

내부 훅은 agent:bootstrap을 통해 이 단계를 가로채 주입된 부트스트랩 파일을 변환하거나 교체할 수 있습니다 (예: SOUL.md를 대체 페르소나로 교체).

에이전트가 덜 일반적으로 들리기를 원한다면 SOUL.md 개성 가이드로 시작하십시오.

각 주입된 파일이 얼마나 기여하는지 검사하려면 (원시 대 주입, 잘림, 도구 스키마 오버헤드 포함) /context list 또는 /context detail을 사용하십시오. 컨텍스트를 참조하십시오.

시간 처리

사용자 타임존이 알려진 경우, 시스템 프롬프트에는 전용 현재 날짜 및 시간 섹션이 포함됩니다. 프롬프트 캐시를 안정적으로 유지하기 위해 이제 타임존만 포함합니다 (동적 시계나 시간 형식 없음).

에이전트가 현재 시간이 필요한 경우 session_status를 사용하십시오. 상태 카드에는 타임스탬프 줄이 포함됩니다. 동일한 도구는 선택적으로 세션별 모델 오버라이드를 설정할 수 있습니다 (model=default는 초기화).

다음으로 구성하십시오:

  • agents.defaults.userTimezone
  • agents.defaults.timeFormat (auto | 12 | 24)

전체 동작 세부사항은 날짜 및 시간을 참조하십시오.

스킬

적격한 스킬이 있는 경우, OpenClaw는 각 스킬의 파일 경로를 포함하는 간결한 사용 가능한 스킬 목록 (formatSkillsForPrompt)을 주입합니다. 프롬프트는 모델에게 나열된 위치 (워크스페이스, 관리됨, 또는 번들됨)에서 read를 사용하여 SKILL.md를 로드하도록 지시합니다. 적격한 스킬이 없으면 스킬 섹션이 생략됩니다.

적격성에는 스킬 메타데이터 게이트, 런타임 환경/구성 확인, agents.defaults.skills 또는 agents.list[].skills가 구성된 경우 유효한 에이전트 스킬 허용 목록이 포함됩니다.

<available_skills>
  <skill>
    <name>...</name>
    <description>...</description>
    <location>...</location>
  </skill>
</available_skills>

이는 여전히 대상 스킬 사용을 활성화하면서 기본 프롬프트를 작게 유지합니다.

문서

사용 가능한 경우, 시스템 프롬프트에는 로컬 OpenClaw 문서 디렉터리 (리포 워크스페이스의 docs/ 또는 번들된 npm 패키지 문서)를 가리키는 문서 섹션이 포함됩니다. 또한 공개 미러, 소스 리포, 커뮤니티 Discord, 스킬 탐색을 위한 ClawHub (https://clawhub.ai)도 언급합니다. 프롬프트는 모델에게 OpenClaw 동작, 커맨드, 구성, 아키텍처에 대해 먼저 로컬 문서를 참조하도록 지시하며, 가능하면 직접 openclaw status를 실행하도록 합니다 (접근이 없는 경우에만 사용자에게 문의).