Skip to content

Latest commit

 

History

History
245 lines (177 loc) · 17.6 KB

File metadata and controls

245 lines (177 loc) · 17.6 KB

Oh No Harness

GitHub release Status: Stable GitHub stars License: MIT

English | 한국어

코딩 에이전트에게 또 하나의 런타임은 필요 없습니다. 필요한 건 실제로 읽고 따라갈 수 있는 workflow입니다.

Oh No HarnessClaude Code, Codex, OpenCode를 위한 그 workflow입니다: 10개의 workflow skill9개의 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 런타임 없음
  • 한 번의 npx setup 명령, 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-harness npm 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-only configure-subagents가 더해져 11개, Codex는 10개입니다.
  • 호스트 native command parity. Claude Code의 commands/*.md는 12개 skill을 mirror하고, Codex는 skills/의 10개 wrapper를 읽으며, OpenCode의 생성된 11개 command는 oh-no primary를 통해 skills-opencode/로 route합니다.
  • OpenCode orchestration. config hook은 static orchestration contract를 가진 oh-no primary 하나와 oh-no-<role> subagent 9개를 등록하고, built-in build/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 Code

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

마켓플레이스를 추가합니다:

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

OpenCode

한 번만 setup 명령을 실행합니다:

npx --yes oh-no-harness@latest setup

installer는 실제 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을 쓰면 됩니다.

Setup 명령 (Claude Code 전용)

아래 두 개는 워크플로우 단계가 아니라 일회성 환경 설정 작업입니다. 사용자가 직접 호출할 때만 실행되며(모델이 자동 선택하지 않음), 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 setup source

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가 아닙니다.

일반적인 단계 흐름

  1. 사용자가 작업을 설명하면, 목표가 아직 흐릿할 때 현재 host가 interview를 선택합니다.
  2. 사용자가 스펙을 승인하면, 구현 계획이 필요한 경우 호스트 에이전트가 ralplan을 호출합니다.
  3. 사용자가 계획을 승인하면, 호스트 에이전트가 일반 ralph로 실행할지 end-to-end ultrawork로 진행할지 묻습니다. 승인된 Ralph handoff는 계획에 분리 가능한 role이 있으면 기본적으로 parallel-capable입니다.
  4. ralph가 실행, 검증, 리뷰, 완료 보고를 진행합니다. 사용자가 Planner, Plan-Reviewer, Executor, Verifier 같은 내부 역할 에이전트를 직접 고를 필요는 없습니다. 선택된 workflow가 허용할 때 호스트 에이전트가 알아서 사용합니다.

Auto Routing

모든 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를 참고하세요. 로컬 체크아웃을 직접 설치하는 방법, 검증 단계, 라이브 스모크 테스트, 릴리스 워크플로우가 정리돼 있습니다.