oh-my-opencode v4.9.0
이 릴리즈는 사용자별 공유 LSP 데몬, Node CLI 런타임 폴백(Bun이 없는 호스트에서도 omo 실행 가능), 강화된 Codex / LazyCodex 배포를 소개합니다. 또한 sparkshell 출력 요약과 Claude Opus 4.6/4.7/4.8 및 Fable 5를 위한 모델별 프롬프트 변형을 포함합니다.
⚠️ 업그레이드하기 전에 아래의 동작 변경사항을 읽어주세요 — 몇 가지 기본값이 자동으로 변경되었습니다.
⚠️ 주요 변경사항 및 동작 변경
- LSP는 더 이상 언어 서버를 프로세스 내에서 실행하지 않습니다. LSP MCP 서버는 이제 공유 데몬으로의 씬 프록시입니다. 데몬에 도달할 수 없으면(1회 재시도 후) 구조화된
LSP daemon unreachable 결과를 받습니다(자동으로 시작되고 다음 요청에서 재시도됨). 이전의 투명한 프로세스 내 폴백 대신입니다.
multi_agent_v2는 모든 Codex 세션 시작 시 강제 비활성화됩니다. 이 기능이 켜져 있으면 모든 Codex 턴이 HTTP 400으로 실패합니다(openai/codex#26753). 설정 마이그레이션 가드는 이제 항상 enabled=false를 작성하고 config.toml에 주석을 추가합니다. LAZYCODEX_CONFIG_MIGRATION_DISABLED=1로 비활성화할 수 있습니다.
- Sparkshell spark 요약: 기본 모델 수정 및 비밀 마스킹 제거. 기본값은 이제 실제
gpt-5.3-codex-spark입니다(이전의 gpt-5.5-codex-spark는 존재하지 않았음). 요약은 이제 값을 그대로 재현하며 더 이상 비밀을 마스킹하지 않습니다.
- 제거됨: keyword-detector
search/analyze 모드 및 anthropic-effort 최대 노력 훅. "search"/"analyze"는 더 이상 유효한 keyword_detector.disabled_keywords가 아니며, "anthropic-effort"는 더 이상 유효한 disabled_hooks 값이 아닙니다.
experimental.aggressive_truncation이 이제 준수됩니다(이전에는 항상 활성화됨). 이제 플래그를 기반으로 하며 그 외에는 요약합니다(#3899).
🧠 사용자별 공유 LSP 데몬
새로운 번들된 @code-yeongyu/lsp-daemon은 모든 세션에 걸쳐 디렉토리별로 한 세트의 언어 서버를 관리합니다. 한 세션에서 워밍된 서버는 다음 세션에서 재사용되며, Unix 소켓(Windows에서는 명명된 파이프)을 통해 씬 stdio MCP 프록시로 접근됩니다. 요청별 cwd/env는 모든 경로 해석을 통해 전달되므로 다중 세션 사용은 올바른 디렉토리에 대해 진단을 해석합니다. 실패한 도구 호출은 더 이상 장기 실행 프록시를 중단할 수 없으며, 재시도는 요청을 두 번 실행하지 않으며, 일시적인 중단은 더 이상 세션별 가용성 캐시를 오염시키지 않으며, Codex 설치 프로그램은 업데이트 시 오래된 데몬을 정리하므로 새로 설치된 버전이 항상 적용됩니다.
🧰 새로운 lsp-setup 스킬
20개 이상의 언어 서버를 위한 안내식 감지 → 설치 → 구성 → 검증 흐름으로, 언어별 참고자료(OS별 설치 명령어, 구성 스니펫, 문제 해결), 재귀적 프로젝트 스캐너, 실제 진단 왕복 검증자를 포함합니다. 새로운 내장 서버: Julia(julials) 및 Razor. 확장자 없는 Dockerfile/Containerfile은 이제 dockerfile 서버로 해석됩니다.
🟢 Node CLI 런타임 폴백
omo는 더 이상 Bun을 필수로 요구하지 않습니다. 어떤 Bun 빌드도 실행할 수 없는 호스트(x86_64-v1 CPU, Bun이 SIGILL로 중단되는 qemu64 마스킹된 VPS 게스트)는 이제 패키징된 Node CLI로 폴백합니다. OMO_RUNTIME=node로 강제할 수 있습니다. SIGILL 충돌은 이제 폴백 전에 누락된 CPU 명령어 세트를 설명하며, doctor/run은 Node에서 작동합니다. 생성된 Codex 래퍼는 또한 PATH가 제거된 데스크톱 앱 셸을 위해 폴백 경로(~/.bun/bin, Homebrew, /usr/local/bin)를 통해 Bun을 해석합니다.
🤖 Codex / LazyCodex 배포
4.8.0/4.8.1 회귀를 수정합니다. 이 회귀는 업데이트 시 사용자의 omo bin을 자동으로 삭제했습니다(루트 CLI 배포가 게시된 페이로드에서 누락됨). 설치된 에이전트 역할 TOML(explorer, librarian, plan, momus, metis)을 다시 선택할 수 있으며, 모든 오케스트레이션 지침은 multi_agent_v1 API로 마이그레이션되었으며, 위임된 명령은 더 이상 무한 재귀하지 않으며, 플러그인 메타데이터는 버전 스탬프가 지정되며(더 이상 0.1.0이 마켓플레이스로 누출되지 않음), 새로운 lcx-doctor 스킬은 항상 최신 업스트림 소스에 대해 설치 상태를 진단합니다.
✨ Sparkshell 출력 요약
과도한 명령 출력(로그, 큰 diff)은 이제 에이전트의 컨텍스트를 넘치기 전에 압축됩니다. spark 모델은 먼저 요약하고(보관된 줄을 그대로 재현하고 항상 오류/경고 보존), 결정론적 신호 보존 폴백이 이어집니다. Sparkshell은 또한 Codex 세션 컨텍스트(워크스페이스, 역할, 첫 번째/최신 요청)를 첨부하므로 요약은 목표를 인식합니다. OMO_SPARKSHELL_CONDENSE, OMO_SPARKSHELL_CONDENSE_BUDGET, OMO_SPARKSHELL_SESSION_CONTEXT 및 OMO_SPARKSHELL_SPARK_* 패밀리를 통해 조정 가능합니다.
🎛️ 모델별 프롬프트 및 수정
Sisyphus와 Prometheus는 이제 Claude Opus 4.6/4.7/4.8 및 새로운 Fable 5 티어를 위한 전용 프롬프트 변형을 제공합니다(4.7 과다 탐색은 제한됨; Fable은 위임된 발견 명령을 받음). claude-opus-4-8은 이제 기본적으로 GA 1M 컨텍스트 모델로 인식됩니다(#5070) — ANTHROPIC_1M_CONTEXT=true를 제거할 수 있습니다. 또한: session_read는 일시적인 SDK 실패를 재시도한 후 폴백합니다(#4622), /handoff는 메모리 대신 session_read 출력에서 첫 번째 사용자 요청을 바인딩합니다(#4592), Copilot GPT-5 추론 변형은 지원되는 세트로 제한되며, 회신 필수 백그라운드 에이전트 웨이크는 noReply 인정에서 생존하므로 부모는 백그라운드 작업이 완료된 후 고립되지 않습니다.
마이너 호환성 및 안정성 릴리즈
이 릴리즈는 호환성 관련 동작 변경사항 및 운영 강화를 포함합니다. 업그레이드하거나 게시하기 전에 아래 요약을 읽어주세요.
- 패키지 감지, 플러그인/설정 호환성 및 설치 표면에 걸친 이름 바꾸기 전환 업데이트.
- 위임 작업 계약 및 런타임 등록 동작을 포함한 작업 및 도구 동작 업데이트.
- 생략된 설정이 런타임 경로 전체에서 일관되게 동작하도록 작업 시스템 기본 동작 정렬.
- 더 안전한 릴리즈 시퀀싱 및 패키지/설치 수정을 포함한 설치 및 게시 워크플로우 강화.
커밋 요약
- 8057508 fix(omo-codex): emit forward-slash hook target paths in assert error
- cd10059 ci(publish): build vendored lsp-daemon before test and codex-compat gates
- 200c448 docs(agents-md): drop thinking-block-validator from the hook inventories
- 9a16b54 fix(omo-opencode): remove thinking block validator hook
- 9f426b8 fix(background-agent): stop duplicate parent-wake replies forking turns
- 8e7bedb docs(agents): mandate opencode-qa + isolated codex install QA with .omo/evidence on every harness-connected change
- 03fc47f fix(publish): exclude plugin node_modules from the main npm tarballs
- 56803fd test(codex): register the install-hook-targets suite in test:codex
- 8a92141 fix(script): add windows-x64-baseline to the local publish platform list
- a18477c fix(publish): keep .ulw and .claude out of the marketplace sync
- cadd22d fix(doctor): print the real failure stack instead of blaming memory pressure
- f646084 feat(install-codex): port the node CLI fallback into the TS runtime wrapper
- c975c30 fix(test): inject which/spawn into getGhCliInfo instead of leaking module mocks
- b2f6bcd refactor(keyword-detector): remove search and analyze modes
- 34ed496 refactor(omo-codex): compress hephaestus bundled rule with canonical-echo emphasis
- 06cc15d feat(skills): rewrite ultraresearch for ulw coexistence with a contract test
- 6193e14 docs(agents-md): refresh knowledge base for src to packages/omo-opencode move
- b7d8503 refactor(omo-codex): make librarian/explorer prompts model-neutral
- 6bb2845 fix(runtime): guard node CLI from Bun globals
- 96ad197 feat(omo-codex): expose spawn_agent agent_type so installed role TOMLs are selectable
- bfcef21 test(omo-opencode): rename atlas prompt test to match surviving runtime-injection content
- 5df93bf test(omo-codex): remove prose-pinning skill and directive tests
- 6e47aa9 test(omo-opencode): remove diff-guarding prompt and byte-pinning tests
- 3903af9 fix(runtime): bundle jsonc-parser into the node CLI instead of leaving it external
- bae3b68 feat(runtime): fall back to a node-target CLI when bun is unavailable
- b4c9689 fix(publish): build Codex plugin components before any plugin-shipping package packs
- 5dafddb fix(git-bash-mcp): reject WSL launchers, forward env override, expose probe trail
- 9ef62aa fix(ulw-loop): dispatch direct subcommands after wrapper prefix strip
- d28d39c fix(prometheus): carve trivial intent out of fable delegated-discovery mandate
- a4585b5 feat(prometheus): add per-model Claude prompt variants for opus 4.6/4.7/4.8 and fable 5
- c34b80c feat(model-core): add isClaudeOpus46Model family detector
- 40c9339 docs: point contributor docs at packages/omo-opencode/src
- b631b3d test(publish): model the previous payload fixture without lsp references
- 1708f7a fix(lsp-daemon): stamp dist/package.json so cached copies resolve the real version
- 121d7fe test(lsp-daemon): pin daemon version resolution from a dist-only layout
- 64a1450 chore(omo-opencode): declare externally-imported runtime dependencies
- 3093632 fix(publish): regenerate bun.lock in the release version bump commit
- 238ed70 fix(omo-codex): resolve bundled lsp runtimes from the installed plugin cache
- 456ac4a test(publish): expect the version bump to regenerate and commit bun.lock
- 84844fa test(omo-codex): pin lsp prebuild resolution across repo and installed-cache layouts
- c90290c fix(lsp-daemon): retry tool calls only when the request was never written
- 9f707f2 fix(publish): reconstruct previous LazyCodex payloads without the bundled lsp-daemon dist
- a265101 fix(omo-codex): make the multi_agent_v2 guard tolerate inline TOML comments
- 8cdec35 test(doctor): pin the findPackageJsonUp fallback skipping the interim workspace manifest
- fc471e5 fix(config): allow disabling debugging/visual-qa and honor disabled_commands for skill commands
- 1431848 test(lsp-daemon): pin single execution when a written request times out or drops
- 2ff1734 test(config): pin disabling debugging/visual-qa skills and skill-backed command removal
분량 관계로 이후 내용은 번역에서 제외했습니다. 전체 내용은 위 원문 링크에서 확인하세요.