OpenClaw 2026.5.20 업데이트 전체 정리: Changes 8개와 Fixes 75개
OpenClaw 2026.5.20 업데이트 전체 정리: Changes 8개와 Fixes 75개
OpenClaw 2026.5.20은 Discord 음성 세션, 정책 플러그인, xAI 인증, OpenRouter 라우팅 같은 기능 개선과 함께 CLI, Cron, Gateway, Codex, Doctor, 메시징 채널, 메모리, 브라우저, macOS 앱 등 여러 영역의 안정성 수정이 포함된 업데이트입니다.
아래 내용은 OpenClaw 공식 changelog의 2026.5.20 섹션만 기준으로 정리했습니다.
Changes 전체 목록
- Exec approvals: 예전
cat SKILL.md && printf ... && <skill-wrapper>방식의 allowlist 호환 경로가 제거되었습니다. 이제 스킬 파일은 read 도구로 읽어야 하며, 실제 스킬 실행 파일만 자동 허용 대상이 됩니다. - Discord: Discord 음성 세션이 설정된 Discord 사용자를 음성 채널까지 따라갈 수 있게 되었습니다. 허용 채널 검사, 여러 사용자 간 handoff, 제한된 reconciliation, DAVE recovery 보존이 함께 포함됩니다. (#84264) Thanks @fuller-stack-dev.
- Discord/voice: realtime 음성 세션 지시문에
IDENTITY.md,USER.md,SOUL.md프로필 컨텍스트가 기본으로 제한 포함됩니다. 필요하면voice.realtime.bootstrapContextFiles: []설정으로 비활성화할 수 있습니다. (#84499) Thanks @fuller-stack-dev. - Dependencies: 번들 Codex harness가
@openai/codex0.132.0으로 올라갔고, 새 모델 카탈로그에 맞춰 app-server 모델 목록 문서가 갱신되었습니다. - CLI/policy: 채널 conformance 검사, doctor lint 발견 항목, opt-in workspace repair를 지원하는 번들 Policy plugin이 추가되었습니다. (#80407) Thanks @giodl73-repo.
- Agents/config:
agents.list[].experimental.localModelLean설정이 추가되어 lean local-model 모드를 전체가 아니라 특정 configured agent 하나에만 켤 수 있습니다. (#84073) Thanks @dutifulbob. - Providers/xAI: 원격 환경이나 headless 환경에서도 localhost 브라우저 callback 없이 xAI를 인증할 수 있도록 device-code OAuth 로그인이 추가되었습니다. (#84005) Thanks @fuller-stack-dev.
- Providers/OpenRouter: OpenRouter 요청에서 provider 수준의
params.provider라우팅 정책을 존중합니다. model 및 agent params는 provider 기본값보다 우선합니다. Thanks @amknight.
Fixes 전체 목록
- CLI/tasks:
openclaw tasks maintenance --json결과에 stale-running task 유지보수 판단이 포함됩니다. retained 및 reconcile 후보가 backing-session, cron, CLI, wedged-subagent 상태를 설명할 수 있습니다. (#84691) Thanks @efpiva. - Codex app-server: bootstrap hook이 path와 content만 가진 workspace 파일을 제공해도 system-prompt report가 동작합니다. SOUL/IDENTITY/TOOLS/USER 컨텍스트의 주입 문자 수도 제대로 보고됩니다. (#84736) Thanks @JARVIS-Glasses.
- Providers/MiniMax music:
durationSeconds제어 지원을 광고하지 않고 prompt-injected duration hint를 제거했습니다.music_generate는 MiniMax에서 트랙 길이 강제가 지원되지 않는 override임을 보고합니다. Fixes #84508. Thanks @neeravmakwana. - Doctor: sandbox tool policy가 provider 요청 전에 configured MCP server tools를 숨기는 경우 경고합니다. (#84699) Thanks @nxmxbbd.
- WhatsApp: Baileys가
7.0.0-rc12로 업데이트되었습니다. - Build:
zod/v4/locales/*.d.cts파일을 의도적으로 inline bundling할 때 발생하던rolldown-plugin-dts:fake-jsCommonJS dts 경고가 억제되어, 0.25.1 plugin bump 이후에도pnpm build출력이 더 읽기 쉬워졌습니다. Thanks @romneyda. - CLI/nodes: JSON 모드
openclaw nodes명령에서 lazy plugin-registration 로그가 stderr로 이동해 stdout JSON을 파싱 가능하게 유지합니다. (#84684) Thanks @TurboTheTurtle. - Approvals: 수동
/approve결정이 trusted approval runtime을 통해 처리됩니다. active exec 및 plugin approval이 unknown 또는 expired로 잘못 보이는 문제가 줄어듭니다. - Mac app: About 설정의 copyright 연도가 2026으로 갱신되었습니다. (#84385) Thanks @pejmanjohn.
- Dependencies:
@openclaw/fs-safe가0.2.7로 업데이트되었습니다. OpenClaw의 기본 Python-helper-off 정책에서도 Linux/macOS의 private store, secret write, run log, media attachment에 대해 best-effort Node write fallback을 유지합니다. - Infra/secrets:
tryReadSecretFileSync의 fail-closed 계약이 복원되었습니다.rejectSymlink: true를 전달하는 Telegram, LINE, Zalo, IRC, Nextcloud Talk 토큰 로더가 symlink credential 파일을 조용히 수락하지 않고 거부하며, infra-state CI shard의 secret-file symlink 테스트도 통과합니다. Thanks @romneyda. - Browser: screenshot과 labeled snapshot에도 설정된 image sanitization limit가 적용됩니다. 브라우저가 캡처한 이미지도 다른 image result와 같은 resize 정책을 따릅니다. (#84595)
- Doctor:
doctor --fix실행 시models.providers..models[].compat.thinkingFormat의 인식되지 않는 값을 제거해, 업그레이드 이후 오래된 provider model config가 검증될 수 있게 했습니다. Fixes #77803. - Doctor:
openclaw.json에 model provider API key나 민감한 provider header 등 secret-bearing config field가 평문으로 저장된 경우 경고합니다. (#84718) Thanks @lukaIvanic. - Status: 세션이
agents.defaults.model.primary와 다른 모델에 고정되어 있을 때 configured default, session-selected model, 이유, 해제 힌트, 문서 링크를 표시합니다. - WebChat: session change event가 active chat run 완료를 표시할 때 남아 있던 typing indicator를 정리합니다.
- Mac app: permission 테스트를 위해 local packaging이 안정적인 app identity로 서명되며, 현재 Vite/Highlight.js exports 아래에서 Control UI production build 문제가 수정되었습니다.
- macOS app: OpenClaw-hosted UI automation이 최신 Peekaboo CLI capture flow와 함께 동작하도록 embedded Peekaboo bridge가 3.2.1로 업데이트되었습니다.
- Cron: scheduled run이 성공했는데 trailing plain tool warning이 diagnostics에 남아 있어도 preferred final assistant output을 전달합니다. 성공한 작업을 실패로 표시하지 않도록 개선되었습니다.
- fix(mattermost): channel type이 없을 때 fail closed하도록 수정되었습니다. [AI]. (#84091) Thanks @pgondhi987.
- Recheck rebuilt system.run argv: rebuilt
system.runargv를 다시 확인하도록 보강되었습니다. [AI]. (#84090) Thanks @pgondhi987. - CLI:
OPENCLAW_ENABLE_PRIVATE_QA_CLI=1이 설정되지 않은 경우 private QA subcommand를 exported command descriptor에서 제외합니다. root help와 subcommand marker가 runtime registration과 일치합니다. (#84519) - CLI/cron:
openclaw cron show의 job lookup pagination이 제한됩니다. non-advancing 또는 unboundedcron.list응답은 명령을 계속 멈추게 두지 않고 실패합니다. Fixes #83856. (#83989) - Agents/messages: source-channel
messagesend가 성공한 message-tool-only turn을 중단하되, transcript mirror는 session write lock 아래 유지합니다. (#84289) - Agents: silent heartbeat response-tool transcript artifact가 embedded context snapshot에 들어가지 않도록 필터링합니다. 이후 사용자 turn이 heartbeat no-op message로 오염되는 것을 막습니다. (#83477) Thanks @fuller-stack-dev.
- Agents/OpenAI: strict tool-schema downgrade 진단 로그를 provider/model/tool signature별로 한 번만 남깁니다.
strict=falsefallback 동작은 유지하면서 중복 debug noise를 줄입니다. Fixes #82930. (#82933) Thanks @galiniliev. - Agents/code mode:
exec도구의 JavaScript/TypeScript, Node module 없음, catalog-bridge 제약이 model-visible schema text에 명확히 설명됩니다. agent가 시행착오 없이 enabled tool을 사용할 수 있습니다. (#84269) Thanks @Kaspre. - Codex: per-call 또는 configured image timeout이 없을 때
image_generatedynamic-tool call에 120초 기본 watchdog이 적용됩니다. image generation이 일반 30초 bridge timeout으로 떨어지는 문제를 줄입니다. (#84254) Thanks @moritzmmayerhofer. - Codex: 큰 diagnostic backlog를 처리하는 동안 tool response를 막지 않으면서 duplicate dynamic tool terminal diagnostics를 피합니다. (#82937) Thanks @galiniliev.
- CLI/message: channel send가 message id를 반환할 때
openclaw message --json출력에 안정적인 top-levelmessageId가 포함됩니다. (#84191) Thanks @100menotu001. - Cron: 기존 top-level array 형태의
jobs.jsonstore가 loading 또는 scheduled job 추가 시 보존됩니다. 오래된 cron job이 업그레이드 중 빈 store처럼 취급되지 않습니다. Fixes #60799. (#84433) Thanks @IWhatsskill. - Gateway/agents:
agents.list[].name이 없을 때 Gateway agent summary가 agent의identity.name을 사용합니다. configured agent label이 client에서 계속 보입니다. (#84355; refs #57835) Thanks @luoyanglang. - Channels/replies:
/verbosefailed-tool progress는 message-tool reply에서 compact하게 유지되고, final answer 뒤에 늦은 text-only tool output이 나타나는 것을 막습니다. (#84303) Thanks @VACInc. - Plugins/hooks:
before_compaction및after_compactionhook에 기본 30초 timeout이 적용됩니다. 멈춘 plugin handler가 compaction 완료를 막지 못합니다. (#84153) - Discord: presentation button이 portable conversion과 Discord component registration을 거쳐도 재사용 가능하게 보존됩니다. (#84187) Thanks @100menotu001.
- Discord: Discord message control로 변환 및 렌더링할 때 disabled presentation button 상태가 유지됩니다. (#84188) Thanks @100menotu001.
- Twitch: non-isolated Twitch 테스트가 case 사이에 cached manager를 지울 수 있도록 test-only client-manager registry reset helper가 추가되었습니다. Fixes #83887. (#84244) Thanks @hclsys.
- Cron: main-session scheduled work가 cron-owned wake lane에서 실행되고 reply delivery context는 보존됩니다. background cron turn이 human main-session chat을 막지 않습니다. Fixes #82766. (#82767) Thanks @galiniliev.
- Cron: isolated scheduled task에 structured embedded-run denial metadata를 사용합니다. blocked exec request가 일반 assistant prose를 denial로 오해하지 않고 job을 실패 처리합니다. (#84067) Thanks @abnershang.
- Cron: recovered tool warning을 성공한 scheduled run의 diagnostic으로 유지합니다. final cron output이 post-processing warning으로 대체되지 않게 했습니다. (#84045) Thanks @abnershang.
- Plugins/perf:
loadBundledCapabilityRuntimeRegistry,resolveBundledPluginSources,listChannelCatalogEntries에 명시적 plugin discovery result가 전달됩니다. 이미 discovery result가 있는 호출자는 중복 filesystem walk를 건너뜁니다. Thanks @SebTardif. - Update restart script: update restart script 생성 과정이 강화되었습니다. [AI]. (#84088) Thanks @pgondhi987.
- Docker: 공식 release image keep list에 번들 Codex plugin을 유지합니다. Docker pruning 이후에도 기본 OpenAI agent harness가 사용 가능합니다. Fixes #83613. (#83626) Thanks @YuanHanzhong.
- CLI/channels: rolling tail window가 정확히 줄 경계에서 시작해도
openclaw channels logs출력의 첫 줄이 보존됩니다. 이미 수정된src/logging/log-tail.ts의readLogSlice동작과 맞췄습니다. - Control UI: terminal session status를 stale active-run flag보다 authoritative하게 처리합니다. 완료된 terminal run이 abort/live UI로 남지 않습니다. (#84057)
- CLI: inline root option 값에 포함된 equals sign을 두 번째 구분자 이후에서 잘라내지 않고 보존합니다. (#83995) Thanks @ThiagoCAltoe.
- Matrix/config:
messages.queue.byChannel.matrixqueue override를 허용하고, Matrix, Google Chat, Mattermost의 queue provider schema/type key를 정렬했습니다. Thanks @bdjben. - CLI:
openclaw acp client실패가 shared error formatter를 통해 출력됩니다. object-shaped error가[object Object]로 표시되지 않고 읽기 쉬운 형태가 됩니다. Fixes #83904. (#84080) - Providers/Ollama: capability를 알 수 없는 model을 기본적으로 tool-capable로 취급합니다.
/api/show가 capabilities를 생략해도 발견된 native Ollama model이 tool을 사용할 수 있습니다. (#84055) Thanks @dutifulbob. - Codex app-server: OpenClaw sandboxing이 활성화되어 있을 때 native Code Mode, user MCP, app-backed plugin execution이 비활성화되고 shell access는
sandbox_exec/sandbox_process를 통해 라우팅됩니다. (#84388) Thanks @joshavant. - Installer/Windows: native Windows 신규 설치에서
install.ps1onboarding이 attached child process로 실행됩니다.Starting setup...에서 눈에 띄게 멈추거나 wizard terminal rendering이 깨지는 문제를 줄입니다. - CLI/update: 한 버전 차이의 CLI/Gateway protocol skew에서도 restart health check가 동작하고, package root가 바뀌지 않아도 관리형 Gateway service Node로 후속 명령을 실행합니다. 여러 Node 설치가 있을 때
openclaw update가 Gateway를 다른 Node binary로 조용히 바꾸는 일을 막습니다. Thanks @amknight. - CLI/gateway:
gateway statusJSON 출력에 실행 중인 Gateway version이 포함됩니다. 기존 server metadata를 보존하면서 read probe에서는 status RPC data로 fallback합니다. Fixes #56222. Thanks @galiniliev. - Memory/search: active-memory search가 timeout되면 local embedding provider를 닫습니다. pending local model load와 embedding context가 중단 및 해제됩니다. (#83858) Thanks @brokemac79.
- CLI/nodes:
openclaw nodes approve전에 pending node surface approval scope를 요청합니다. exec-capable node approval이missing scope: operator.admin때문에 실패하지 않고 admin-scoped Gateway credential을 사용할 수 있습니다. (#84392) Thanks @joshavant. - Gateway: outbound buffer가 무제한으로 커지기 전에 느린 node event send를 거부하고 rejected payload diagnostic을 기록합니다. (#84387) Thanks @samzong.
- Agents:
pi-trajectory-flushtimeout warning에 bounded trajectory queued-writer diagnostics가 포함됩니다. flush stall 상황에서 pending write, queued bytes, append state를 확인할 수 있습니다. Fixes #82961. (#82962) Thanks @galiniliev. - Agents/subagents: stale completion announce를 복구합니다. transcript-wait wake가 지원되지 않으면 transcript waiting 없이 재시도하고, requester run이 이미 stale이면 message-tool handoff를 강제합니다. Fixes #83699. (#83700) Thanks @galiniliev.
- Agents/subagents: wildcard subagent target allowlist를 configured agents로 제한하면서, 명시적으로 나열된 compatibility target은 보존합니다. Fixes #84040. (#84357) Thanks @joshavant.
- Providers/Anthropic: Claude CLI auth로 선택한 Anthropic model ref는 Claude CLI runtime을 통해 라우팅됩니다.
anthropic/opus-4.7같은 shorthand ref가 embedded Anthropic billing으로 fallback하지 않습니다. Fixes #84222. (#84374) Thanks @joshavant. - Agents: cloud 및 self-hosted provider에서
models.providers.<id>.timeoutSeconds가 기본 idle watchdog보다 크면 그 값을 존중합니다. provider timeout이 더 길어도 약 120초에서 fallback되던 긴 first-token 대기 문제가 줄어듭니다. (#83979) Thanks @yujiawei. - Agents/Codex: encrypted Responses reasoning replay가 provenance-bound로 유지됩니다. stale mirrored Codex transcript는 request assembly 전에 유효하지 않은 encrypted content를 제거하고, 같은 session replay는 보존합니다. Fixes #83836. (#84367) Thanks @joshavant.
- Agents/subagents: dormant completion requester에 대해 stale embedded-run wake probe를 건너뜁니다. 늦은 subagent completion은
reason=no_active_runqueue noise를 만들지 않고 requester-agent/direct handoff로 이동합니다. (#82964) Thanks @galiniliev. - CLI: config snapshot read가 transient failure를 만나면 재시도합니다. 한 번의 rejected read가 같은 process의 이후 명령까지 망가뜨리지 않습니다. (#83931) Thanks @honor2030.
- Media: remote media fallback filename으로 URL path basename을 사용할 때 URL decoding을 적용합니다.
My%20Report.pdf같은 파일이My Report.pdf로 표시됩니다. Fixes #84050. (#84052) Thanks @jbetala7. - WhatsApp: inbound group diagnostic이 명확해졌습니다. 관찰되었지만 등록되지 않은 group은 routing이나 sender authorization을 바꾸지 않고
channels.whatsapp.groups를 안내합니다. (#83846) Thanks @neeravmakwana. - WhatsApp: reconnect handler뿐 아니라 30초 주기 timer에서도 pending outbound delivery를 drain합니다. provider가 이미 연결된 상태에서 enqueue된 message가 다음 reconnect까지 기다리지 않습니다. (#79083) Thanks @Oviemudiaga.
- CLI/TUI: TUI autocomplete에 Gateway plugin slash command가 포함됩니다. 연결된 session에서 running Gateway가 노출한 plugin-owned command를 제안할 수 있습니다. (#83640) Thanks @se7en-agent.
- Gateway/mobile: iOS와 Android onboarding을 위해 bounded operator token의 QR setup-code handoff가 복원되었습니다. admin 및 pairing scope는 bootstrap에서 제외됩니다. (#83684) Thanks @ngutman.
- iOS: TestFlight build용 Release archive compilation이 수정되었습니다. (#84255) Thanks @ngutman.
- Agents/compaction: plugin-owned CLI transcript compaction이 host safety timeout으로 제한됩니다. 멈춘 context engine이 post-turn cleanup을 계속 지연시키지 못합니다. (#84083) Thanks @100yenadmin.
- Control UI/usage: usage panel에서 긴 context skill, tool, file name을 줄여 표시하고, 전체 이름은 hover로 확인할 수 있게 했습니다. (#42197) Thanks @Rain120.
- Codex:
/codex account에서 명시적models auth order set및config.auth.orderprecedence를 stalelastGood보다 우선합니다. explicit-order profile이 모두 부적격이면 낮은 순위 profile을 active로 표시하지 않고no working credential을 보여줍니다. Fixes #84386. (#84412) Thanks @openperf. - Agents: mutating tool failure에도
messages.suppressToolErrors설정을 존중합니다. configured chat surface가 별도 warning payload를 받지 않게 됩니다. (#81561) Thanks @moeedahmed. - Agents/fallback: rate-limit과 billing fallback exhaustion이 섞인 경우 generic failure 문구 대신 billing guidance를 표시합니다. Fixes #79396. (#79489) Thanks @aayushprsingh.
사용자 입장에서 달라지는 점
이번 버전은 눈에 띄는 새 기능보다 운영 안정성과 진단 품질 개선의 비중이 큽니다. Discord 음성 세션은 설정된 사용자를 따라가는 흐름이 좋아졌고, realtime 음성 세션은 프로필 컨텍스트를 더 자연스럽게 반영합니다. xAI device-code OAuth는 원격 서버나 headless 환경에서 특히 유용합니다.
CLI와 Cron 쪽에서는 JSON 출력 안정성, cron job 보존, scheduled run 결과 전달, background cron 처리 방식이 개선되었습니다. 자동화 작업을 많이 쓰는 환경에서는 실패 원인 진단과 작업 지속성이 좋아질 수 있습니다.
Doctor와 Status는 설정 문제를 더 직접적으로 알려줍니다. 평문 secret-bearing config field 경고, stale provider model config 정리, session model pin 상태 안내가 추가되어 업그레이드 후 점검이 쉬워졌습니다.
Codex와 agent 실행 환경에서는 sandboxing, image generation timeout, encrypted reasoning replay, subagent completion recovery, provider timeout 처리 등 긴 실행과 복구 흐름에서 체감되는 수정이 많습니다.
업데이트 전 체크할 점
- Exec approval 흐름에서 예전
cat SKILL.md && printf ... && <skill-wrapper>형태의 allowlist 호환 경로에 의존한 자동화가 있다면 조정이 필요합니다. - Discord voice를 쓰는 경우 허용 채널 설정과 사용자 handoff 기대 동작을 확인하는 것이 좋습니다.
- realtime voice session에서
IDENTITY.md,USER.md,SOUL.md컨텍스트 포함을 원하지 않는 환경은voice.realtime.bootstrapContextFiles: []설정을 검토해야 합니다. openclaw.json에 API key나 민감한 provider header가 평문으로 들어간 환경은 Doctor 경고를 기준으로 secret 관리 방식을 정리하는 것이 좋습니다.- Cron, nodes, gateway, Codex, WhatsApp, Discord, OpenRouter, Ollama, Anthropic provider를 적극적으로 쓰는 환경은 업데이트 후 주요 자동화와 인증 상태를 한 번씩 확인하는 편이 안전합니다.
- 이 글은 업데이트 내용을 정리한 것이며, 실제 업데이트 실행 전에는 현재 작업 중인 세션과 장기 실행 작업 상태를 확인하는 것이 좋습니다.