English | 한국어
코딩 에이전트에게 또 하나의 런타임은 필요 없습니다. 필요한 건 실제로 읽고 따라갈 수 있는 workflow입니다.
Oh No Harness는 Claude Code, Codex, OpenCode를 위한 그 workflow입니다: 10개의 workflow skill과 9개의 role agent가 모호한 요청을 interview에서 ralplan, 검증된 ralph 실행까지 끌고 가며, 어려운 정체 구간에서는 fusion-rescue를 사용하고, daemon, global CLI, MCP, terminal-only control plane 없이 동작합니다.
두 극단 사이에 있습니다.
- 터미널 한구석을 차지하는 또 하나의
oh-my-*런타임이 아닙니다. - 단계마다 골라 써야 하는 bare skill 서랍도 아닙니다.
stage skill이 handoff를 조율하고, role agent가 탐색, 계획, 실행, 리뷰, 보안, QA, 검증 같은 전문 패스를 맡는 text-native workflow harness입니다.
npm install -g런타임 없음- 한 번의
npxsetup 명령, runtime CLI 없음 - 살려둬야 할 tmux 창 없음
- 새로 외워야 할 전용 CLI 없음
- 일을 시작하기 전에 붙여야 할 MCP 서버 없음
- app/plugin UI로 가면 무너지는 terminal-only workflow 없음
런타임에서는 일부러 심심합니다. 에이전트가 읽을 수 있는 텍스트 파일이
전부입니다 — skills/, skills-claude/, skills-opencode/의 플랫폼별 skill wrapper,
docs/skill-core/의 공용 workflow core, docs/providers/의 유지보수용
회사별 prompt 참고 문서, 생성된 agent/command 정의, 얇은 host adapter,
그리고 간결한 native hook entrypoint입니다.
Note
Markdown을 읽을 수 있다면 harness의 동작도 확인할 수 있습니다. handoff를 따라갈 수 있다면 workflow도 이해할 수 있습니다.
모호한 요청 정리부터 계획, 실행·검증, 어려운 문제 rescue, 디버깅, 정리까지 10개의 워크플로우를 제공하며, 데몬이나 백그라운드 서비스, 숨겨진 상태 없이 동작합니다.
Oh No Harness는 1.0.0부터 semantic versioning을 따릅니다.
🛠 구조
- sidecar가 아니라 plain text. global 런타임도, 프로젝트 전용 CLI도, tmux 세션 매니저도, daemon도, MCP 서버도 없습니다. 동작은 읽고 diff하고 fork하고 수정할 수 있는 Markdown과 얇은 host-native 설정입니다.
- 호스트 native 로딩. Claude Code와 Codex는 각자의 plugin/skill 시스템으로 설치합니다. OpenCode는 native startup package loader를 통해 공개
oh-no-harnessnpm plugin을 설치합니다. - 터미널은 선택 사항. 설치는 shell에서 할 수 있지만, 일상 workflow는 터미널에 묶이지 않습니다. 같은 Markdown skill이 Claude Code 세션과 Codex App 스타일 plugin UI에서도 맞게 동작합니다.
- Workflow spine. 공개 skill은 소프트웨어 개발 단계를 맡고, 내부 agent는 사용자가 외울 새 명령이 아니라 전문 판단 패스로 붙습니다.
- Skill + 에이전트. 세 runtime source 모두 9명 역할 에이전트가 뒷받침하는 동일한 10개 workflow skill을 제공합니다. Claude Code는 사용자 직접 호출 setup skill 2개(
install-statusline,configure-subagents)가 더해져 12개, OpenCode는 자체 explicit-user-onlyconfigure-subagents가 더해져 11개, Codex는 10개입니다. - 호스트 native command parity. Claude Code의
commands/*.md는 12개 skill을 mirror하고, Codex는skills/의 10개 wrapper를 읽으며, OpenCode의 생성된 11개 command는oh-noprimary를 통해skills-opencode/로 route합니다. - OpenCode orchestration. config hook은 static orchestration contract를 가진
oh-noprimary 하나와oh-no-<role>subagent 9개를 등록하고, built-inbuild/plan을 끄며, 필요한 subagent depth를 2로 설정하고, 관련 없는 custom default agent는 보존합니다.
| 너무 무거움 | 너무 헐거움 | Oh No Harness |
|---|---|---|
| 옆에서 띄워두는 runtime | 느슨한 skill 선반에서 계속 고르기 | Claude Code, Codex, OpenCode의 native plugin surface로 설치 |
| 프로젝트 CLI 학습 | 매 단계를 손으로 기억 | interview, ralplan, ralph 중심의 작은 stage surface |
| hook, HUD, MCP, tmux 디버깅 | 한 skill이 충분히 해주길 기대 | skill이 role agent로 넘기고 evidence gate로 닫음 |
| 터미널 안에만 머무르기 | GUI host에서 구조를 잃음 | native plugin discovery로 같은 text skill 사용 |
| 플랫폼 운영 | prompt 모음 | 워크플로우를 움직이는 Markdown |
🔁 워크플로우
- 소크라테스식 인터뷰.
/oh-no-harness:interview가 코드 사실, 리서치 사실, 사용자 판단 질문을 분리해 — 스펙 작성 전에 결정·제약·비범위를 보존합니다. - Mode-gated 실행. 스펙과 계획은 작업을
LIGHT/STANDARD/THOROUGH로 산정하고, Ralph는 기록된 모드에 맞춰 실행합니다 (항상 무거운 루프를 돌리지 않음). - Fusion rescue.
/oh-no-harness:fusion-rescue는 세 개 패널 렌즈를 실행하고, Claude Code에서는 설정된 모델 다양성을 적용하며, Codex host에서는 가능한 경우 제한된 Claude consult를 유지한 뒤, 현재 host가 다음 행동을 종합합니다. - Auto-routing. Positive selection은 destination skill description이 담당합니다. Claude Code에서
/oh-no-harness:auto-routing on을 켜면 central selector 대신 행동 순서와 필수 우선순위 guidance가 추가됩니다 — 숨겨진 상태도, 승인 게이트 우회도 없습니다.
✨ 사용 경험
- 자연어 입력. 작업을 그냥 말로 설명하면 시작됩니다. skill 간 전환은 명시적으로 유지됩니다.
/oh-no-harness:ultrawork은 end-to-end 옵션. 인터뷰 → 계획 → 실행 → 검증을 한 요청으로 묶고 싶을 때 쓰는 opt-in 경로입니다.
저장소 루트는 Claude Code/Codex 마켓플레이스이고, 실제 플러그인 source는
plugins/oh-no-harness/ 아래에 있습니다.
npm 패키지는 한 번 실행하는 setup 명령을 포함한 OpenCode plugin이며 global runtime CLI가 아닙니다. 독립 실행형 global oh-no 프로세스, MCP 서버, setup daemon, runtime doctor는 없습니다. workflow 자체는 Codex App 같은 GUI/plugin surface를 포함해 호스트 안에서 동작합니다.
Tip
에이전트가 이미 읽는 곳에 plugin으로 설치하고, 작업을 자연어로 적어 native discovery가 skill description을 사용하게 하세요. Claude Code에서 더 강한 행동 순서 guidance를 원할 때만 auto-routing을 켜면 됩니다.
claude plugin marketplace add jcwleo/oh-no-harness
claude plugin install oh-no-harness@oh-no-harness설치 후에는 작업을 자연어로 설명하세요 — native discovery가 destination skill description을 사용합니다. 필요하면 /oh-no-harness:auto-routing on을 실행해 다음 Claude Code SessionStart부터 행동 순서와 필수 우선순위 guidance를 추가할 수 있습니다.
선택 사항 — 모델 다양성(model diversity). Claude Code에서 THOROUGH review 쌍과 Fusion Rescue 패널은 /oh-no-harness:configure-subagents로 secondary top-tier model을 설정하면 모델 다양성을 얻습니다. 유효한 secondary가 없으면 워크플로우는 same-model-parallel-fallback을 사용하고, 명시적으로 require-model-diversity를 요청한 경우에는 fallback하지 않고 중단됩니다.
Claude Code 내부 대화형 설치
/plugin marketplace add jcwleo/oh-no-harness
/plugin install oh-no-harness@oh-no-harness
이후 업데이트
claude plugin marketplace update oh-no-harness
claude plugin update oh-no-harness@oh-no-harness마켓플레이스를 추가합니다:
codex plugin marketplace add jcwleo/oh-no-harness그 다음 Codex에서 /plugins를 열거나 Codex App의 plugin 사이드바에서,
oh-no-harness 마켓플레이스의 Oh No Harness를 선택해 설치합니다.
플러그인은 oh-no-harness@oh-no-harness로 표시됩니다.
이후 업데이트
codex plugin marketplace upgrade oh-no-harness한 번만 setup 명령을 실행합니다:
npx --yes oh-no-harness@latest setupinstaller는 실제 OpenCode global config를 찾고 JSON/JSONC를 검증하며, 기존
설정과 comment를 보존합니다. 기존 파일을 변경할 때는 credential-safe
backup을 만들고 plugin 배열에 "oh-no-harness"를 정확히 한 번만
추가합니다. 실행 중인 OpenCode를 완전히 종료하고 다시 시작한 뒤
/configure-subagents를 실행하면 role별로 현재 사용 가능한 정확한 model과
model-specific variant를 선택할 수 있습니다. 쓰지 않고 등록 상태만 확인하려면
다음을 사용합니다:
npx --yes oh-no-harness@latest setup --check수동 fallback:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["oh-no-harness"]
}OpenCode는 시작할 때 Bun으로 npm plugin을 설치하고
~/.cache/opencode/node_modules/ 아래에 cache합니다. 설치하거나 Oh No
Harness 버전/설정을 변경한 뒤에는 OpenCode를 완전히 종료하고 다시
시작하세요. 새 대화만 시작해서는 agent, command, skill, plugin 설정이 다시
로드되지 않습니다.
각 워크플로우에는 host-native command/skill entrypoint가 있습니다. Claude Code에서는 commands/*.md 래퍼가 autocomplete hint를 추가한 뒤 namespaced skill을 읽고, OpenCode의 생성 command는 같은 bare skill 이름을 oh-no primary에서 사용합니다. 손에 든 입력 형태에 맞게 고르세요:
| Skill | 언제 쓰면 좋은가 |
|---|---|
/oh-no-harness:interview <모호한 작업> |
요청이 막연하거나 요구사항이 부족할 때 — .oh-no/specs/에 임시 Ralph 모드 포함 스펙이 저장됩니다. |
/oh-no-harness:ralplan <작업 또는 스펙> |
광범위·고위험·다파일 작업이라 코딩 전 계획·승인이 필요할 때 — .oh-no/plans/에 저장됩니다. |
/oh-no-harness:ralph <계획 또는 티켓> |
수용 기준이 명확한 구체적인 작업 — 모드를 읽고 검증까지 실행합니다. |
/oh-no-harness:ultrawork <요청> |
End-to-end: interview → ralplan → ralph → verification 한 흐름. |
/oh-no-harness:fusion-rescue <어려운 문제> |
정체된 문제를 위한 세 패널 rescue 분석. standalone은 권고를 반환하고, Ralph/debugging 호출자는 synthesis 뒤 원래 흐름으로 돌아갑니다. |
/oh-no-harness:test-driven-development <변경> |
명시적인 TDD/test-first 요청 또는 Ralph/debugging 실행 내부 게이트 — 일반 구현은 Ralph로 라우팅합니다. |
/oh-no-harness:systematic-debugging <장애> |
실패한 테스트, 크래시, 또는 원인을 모를 때. |
/oh-no-harness:verification-before-completion |
"완료" / "수정됨" / "준비됨" 선언 전 — 새 증거를 요구합니다. |
/oh-no-harness:simplify |
구현 후 품질 정리 - 재사용, 단순화, 효율, 적절한 추상화 깊이를 점검합니다. |
/oh-no-harness:auto-routing on|off|status |
host routing guidance를 확인하거나 설정합니다. positive selection은 description이 담당하고, Codex에는 forced routing이 없으며, OpenCode는 static primary contract를 유지합니다. |
어느 걸 쓸지 모르겠다면 작업을 자연어로 적으세요 — 호스트의 native discovery가 각 destination skill description을 기준으로 선택합니다. 설치가 지원되는 Claude Code/Codex surface에서는 한 요청으로 전 과정을 묶고 싶을 때 /oh-no-harness:ultrawork을 쓰면 됩니다.
아래 두 개는 워크플로우 단계가 아니라 일회성 환경 설정 작업입니다. 사용자가 직접 호출할 때만 실행되며(모델이 자동 선택하지 않음), Codex wrapper는 없습니다:
| 명령 | 사용 시점 |
|---|---|
/oh-no-harness:install-statusline [check] |
번들 개발자 statusline을 ~/.claude에 설치 (check는 상태만 보고). |
/oh-no-harness:configure-subagents [check] |
설치된 각 subagent의 model과 reasoning effort, Claude-host 모델 다양성에 사용할 선택적 secondary top-tier model을 설정 (check는 상태만 보고). |
OpenCode source runtime에는 별도의 explicit-user-only configure-subagents
skill이 있습니다. 최종 확인 후 이 skill은 oh_no_configure_subagents custom
tool을 호출해 9개 role의 정확한 provider/model-id 할당을
opencode-subagent-models.conf에 기록합니다. configure-opencode-subagents
실행 파일은 읽기 전용이며 상태 check만 지원하고 preference를 기록하지
않습니다. 적용하려면 OpenCode를 완전히 종료하고 다시 시작해야 합니다.
설정되지 않은 role은 oh-no primary의 model을 상속합니다. 같은 model이나
같은 role의 여러 호출은 독립 context일 뿐, 입증된 model diversity가 아닙니다.
- 사용자가 작업을 설명하면, 목표가 아직 흐릿할 때 현재 host가
interview를 선택합니다. - 사용자가 스펙을 승인하면, 구현 계획이 필요한 경우 호스트 에이전트가
ralplan을 호출합니다. - 사용자가 계획을 승인하면, 호스트 에이전트가 일반
ralph로 실행할지 end-to-endultrawork로 진행할지 묻습니다. 승인된 Ralph handoff는 계획에 분리 가능한 role이 있으면 기본적으로 parallel-capable입니다. ralph가 실행, 검증, 리뷰, 완료 보고를 진행합니다. 사용자가 Planner, Plan-Reviewer, Executor, Verifier 같은 내부 역할 에이전트를 직접 고를 필요는 없습니다. 선택된 workflow가 허용할 때 호스트 에이전트가 알아서 사용합니다.
모든 host에서 positive workflow selection은 각 skill description이 담당합니다. Claude Code에서는 간결한 SessionStart 부트스트랩이 항상 전역 no-route, direct-edit, object-of-analysis 경계를 제공하고, auto-routing을 켜면 행동 순서와 필수 우선순위 guidance가 추가됩니다. Codex에는 forced-routing semantics가 추가되지 않습니다. OpenCode의 oh-no primary는 static orchestration contract를 항상 가지며, 사용할 수 있는 OpenCode preference 변경은 process를 완전히 종료하고 다시 시작한 뒤 적용됩니다.
/oh-no-harness:auto-routing on
위 Claude Code 명령으로 토글한 뒤에는 Claude Code를 재시작하거나 /clear 하세요. 설정은 플러그인 업데이트 후에도 유지됩니다.
- Claude Code/Codex에서는 간결한
SessionStart부트스트랩이 유일한 플러그인 훅이며,UserPromptSubmit,PreToolUse,PostToolUse훅은 사용하지 않습니다. - OpenCode는 Claude/Codex
SessionStart가 아니라 startup config hook을 사용합니다. static local source를 등록할 뿐 background process를 시작하지 않습니다. - npm 패키지는 한 번의 setup 명령과 startup에 로드되는 OpenCode plugin을 제공하며 persistent global CLI 프로세스가 아닙니다. tmux 프로세스, daemon, MCP 서버도 없습니다.
- runtime plugin은 네트워크를 호출하지 않고 텔레메트리를 전송하지 않습니다. 설치에는 host의 일반 GitHub/npm package transport를 사용합니다.
- 플러그인 디렉토리와
~/.claude/plugins/data/<oh-no-harness-*>/(해당 레이아웃이 없는 호스트에선~/.config/oh-no-harness/)만 읽고 씁니다 (지속되는 harness 설정용). - Claude Code의
configure-subagents를 실행하면, 활성 플러그인 루트의agents/디렉토리에 있는 설치된 런타임 에이전트 Markdown을 다시 쓰고, 선택한 model/effort 설정, top-tier/secondary 다양성 설정, 제한된 개수의 타임스탬프 에이전트 백업을 Oh No Harness 데이터 디렉토리에 저장합니다. 이 백업은 에이전트 본문을 보관하지만, proxy base URL이나 auth token 값은 절대 저장하거나 출력하지 않습니다 — CLIProxyAPI 연결은 존재 여부만 확인합니다. - command, skill, agent는 Markdown 또는 얇은 host-native adapter가 읽는 생성 JSON으로 확인할 수 있습니다. 데몬도, 백그라운드 프로세스도 없습니다.
작업 결과물은 .oh-no/ 아래에 저장됩니다:
.oh-no/specs/— interview 산출물.oh-no/plans/— ralplan 산출물.oh-no/sessions/— 일시적인 워크플로우 상태.oh-no/worktrees/— 프로젝트 내부 Ralph/Ultrawork 작업 worktree.oh-no/test-runs/— harness 테스트 로그
유지보수자와 기여자는 CONTRIBUTING.md를 참고하세요. 로컬 체크아웃을 직접 설치하는 방법, 검증 단계, 라이브 스모크 테스트, 릴리스 워크플로우가 정리돼 있습니다.