Back to directory
kyu1204 avatar
kyu1204 / oh-my-harness

oh-my-harness

Tame your AI coding agents with natural language. Generate enforced guardrails (CLAUDE.md, hooks, settings) from a single command.

13

Stars

2

Forks

0

Watchers

MIT

License

🐴 oh-my-harness

Tame your AI coding agents with natural language.

npm version npm downloads CI License: MIT TypeScript Node.js

Stop hand-writing CLAUDE.md files. Describe your project, get enforced guardrails.


😀 The Problem

Every AI code agent needs configuration files. Claude Code needs CLAUDE.md + hooks. Cursor needs .cursorrules. Codex needs AGENTS.md. You end up:

  • πŸ“‹ Copy-pasting config files between projects
  • πŸ”“ Forgetting to set up TDD enforcement hooks
  • πŸ’₯ Agents committing code without running tests
  • 🎲 Inconsistent behavior across projects

✨ The Solution

oh-my-harness init "React + FastAPI fullstack, TDD enforced, lint on save"

That's it. oh-my-harness generates enforced guardrails β€” not just instructions, but hooks that actually block bad behavior:

  • ❌ Commit without tests passing? Blocked.
  • ❌ Edit source without updating tests first? Blocked. (TDD Guard)
  • ❌ Write to node_modules/ or .next/? Blocked.
  • ❌ Run rm -rf /? Blocked.
  • ❌ Commit on a merged branch? Blocked.
  • βœ… Auto-lint on every file save? Done.
  • βœ… Auto-create PR after push? Done.
  • πŸ“Š Track all hook events for analytics? Done.

πŸš€ Quick Start

# Zero-install: run directly with npx
npx oh-my-harness init "TypeScript Next.js frontend with Python FastAPI backend"

# Or install globally
npm install -g oh-my-harness
oh-my-harness init "React app with TDD"

# Short alias works too
omh init "Android Kotlin app with Hilt, JUnit, Gradle"
omh catalog list
omh test          # Dry-run verify your harness
omh stats         # TUI analytics dashboard
omh diff          # Preview what `omh sync` would change
omh sync --check  # Fail (exit 1) if generated files are out of date β€” CI gate

πŸ”„ Keeping generated files in sync

harness.yaml is the source of truth, so the committed CLAUDE.md, hooks, and runtime configs can drift if someone edits harness.yaml without re-running omh sync. Three commands keep them honest:

Command Use
omh sync --check CI gate β€” exits non-zero (and lists the files) when generated output is stale, writes nothing
omh diff Human preview of exactly what omh sync would change
omh doctor --strict Health check that also fails on drift (plain omh doctor warns)
# .github/workflows/ci.yml
- run: npx oh-my-harness sync --check   # fails the build if the harness is out of date

The hook manifest records the oh-my-harness version that generated it, so an upgrade that changes output is surfaced as a "re-run omh sync" hint.

πŸ“ What Gets Generated

~/.omh/
└── config.json                        # AI provider config (global, not per-project)

your-project/
β”œβ”€β”€ CLAUDE.md                          # Claude Code instructions (TDD rules, standards)
β”œβ”€β”€ AGENTS.md                          # Codex CLI instructions (same managed sections)
β”œβ”€β”€ harness.yaml                       # Your harness config (source of truth)
β”œβ”€β”€ .omh/                              # Single source of truth β€” hooks + state
β”‚   β”œβ”€β”€ hooks/
β”‚   β”‚   β”œβ”€β”€ catalog-branch-guard.sh    # Blocks commits on merged branches
β”‚   β”‚   β”œβ”€β”€ catalog-tdd-guard.sh       # Enforces test-first workflow
β”‚   β”‚   β”œβ”€β”€ catalog-commit-test-gate.sh # Tests must pass before commit
β”‚   β”‚   β”œβ”€β”€ catalog-path-guard.sh      # Protects build outputs
β”‚   β”‚   β”œβ”€β”€ catalog-command-guard.sh   # Blocks dangerous commands
β”‚   β”‚   β”œβ”€β”€ catalog-lint-on-save.sh    # Auto-lint on save
β”‚   β”‚   └── catalog-auto-pr.sh         # Auto-create PR after push
β”‚   β”œβ”€β”€ state/                         # gitignored β€” log/runtime data
β”‚   β”‚   β”œβ”€β”€ events.jsonl               # Unified hook event log (powers omh stats)
β”‚   β”‚   └── tdd-edits.json             # TDD guard working state
β”‚   └── manifest.json                  # Generated-files manifest
β”œβ”€β”€ .claude/
β”‚   β”œβ”€β”€ settings.json                  # Claude permissions + hooks β†’ .omh/hooks/*.sh
β”‚   └── oh-my-harness.json             # Harness init/sync state
└── .codex/
    β”œβ”€β”€ config.toml                    # [features] hooks = true, goals = true
    └── hooks.json                     # Codex hooks β†’ .omh/hooks/*.sh (same scripts)

βš™οΈ How It Works

  ~/.omh/config.json   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚                     β”‚
  β”‚ β€’ Claude CLI   │──▢│   NL Processing     │◀── "React + FastAPI
  β”‚ β€’ Claude API   β”‚   β”‚   (describe your    β”‚     TDD enforced"
  β”‚ β€’ OpenAI API   β”‚   β”‚                     β”‚
  β”‚ β€’ Gemini API   β”‚   β”‚                     β”‚
  β”‚ β€’ Codex OAuth  β”‚   β”‚                     β”‚
  β”‚ β€’ Codex OAuth  β”‚   β”‚                     β”‚
  β”‚   API          β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚
   (global AI config)   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚  Project Detector   β”‚  ← Auto-detects language,
                        β”‚  (14 languages)     β”‚    framework, package manager
                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚   harness.yaml      β”‚  ← Source of truth
                        β”‚   (editable, git    β”‚    (hooks + rules)
                        β”‚    trackable)       β”‚
                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β–Ό              β–Ό              β–Ό
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β”‚CLAUDE.md β”‚  β”‚  Hooks   β”‚  β”‚settings. β”‚
            β”‚ (rules)  β”‚  β”‚(enforce) β”‚  β”‚  json    β”‚
            β”‚          β”‚  β”‚          β”‚  β”‚(perms)   β”‚
            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ” Project Detector

oh-my-harness automatically detects your project type and injects accurate facts into the LLM prompt:

Language Detection Commands
🟦 TypeScript/JS package.json, tsconfig pnpm/npm/yarn test, eslint, tsc
🐍 Python pyproject.toml, requirements.txt, Pipfile, manage.py, .python-version pytest, ruff, black, isort, mypy
🍎 Swift Package.swift, .xcodeproj swift test, xcodebuild
πŸ¦€ Rust Cargo.toml cargo test, cargo clippy
🐹 Go go.mod go test, golangci-lint
β˜• Java/Kotlin pom.xml, build.gradle mvn test, ./gradlew test
πŸ’Ž Ruby Gemfile bundle exec rspec
🐘 PHP composer.json phpunit
🎯 Dart/Flutter pubspec.yaml dart test, flutter test
⚑ C/C++ CMakeLists.txt cmake, make
🟣 C#/.NET *.csproj dotnet test
πŸ’§ Elixir mix.exs mix test
πŸ”· Scala build.sbt sbt test
⚑ Zig build.zig zig build test

πŸ€– AI Provider Setup

oh-my-harness supports multiple AI providers for natural language mode:

Provider Setup Available Models Default
Claude CLI claude command installed Opus 4.6, Sonnet 4.6, Haiku 4.5 βœ“
Claude API Set ANTHROPIC_API_KEY Opus 4.6, Sonnet 4.6, Haiku 4.5 Sonnet 4.6
OpenAI API Set OPENAI_API_KEY GPT-5.5, GPT-5.4, GPT-5.4-mini, GPT-5.4-nano, GPT-4.1, GPT-4.1-mini, o3, o4-mini GPT-5.5
Gemini API Set GOOGLE_API_KEY Gemini 2.5 Pro, Gemini 2.5 Flash, Gemini 2.5 Flash Lite, Gemini 3.1 Pro Preview Gemini 2.5 Pro
Codex OAuth codex command installed + codex login; runs codex exec GPT-5.5, GPT-5.4, GPT-5.4-mini GPT-5.5
Codex OAuth API omh config device-code login; imports ~/.codex/auth.json once if present, then uses ~/.omh GPT-5.5, GPT-5.4, GPT-5.4-mini GPT-5.5

Configuration is saved to ~/.omh/config.json and selected via interactive UI on first use:

omh init  # will prompt for AI provider selection and model choice

🧱 Building Block Catalog

All enforcement is powered by catalog blocks β€” reusable, parameterized hook templates:

Block Category Description
πŸ›‘οΈ branch-guard git Blocks commits on main/merged branches
πŸ§ͺ commit-test-gate quality Runs tests before git commit
πŸ” commit-typecheck-gate quality Runs typecheck before git commit
πŸ”’ command-guard security Blocks dangerous shell commands
πŸ“ path-guard file-protection Blocks writes to protected paths
πŸ” lockfile-guard file-protection Prevents manual lockfile edits
🀫 secret-file-guard security Blocks edits to .env, credentials
✏️ lint-on-save auto-fix Auto-lint on file save
🎨 format-on-save auto-fix Auto-format on file save
πŸ§ͺ test-on-save auto-fix Auto-run tests on file save
πŸ”€ auto-pr automation Auto-create PR after push
πŸ§ͺ tdd-guard quality Blocks source edits unless test modified first (JS/TS/Python/Kotlin/Java)
πŸ”’ sql-guard security Blocks dangerous SQL operations
🌳 worktree-setup monorepo Supports monorepo worktree patterns
πŸ—œοΈ compact-context maintenance Re-injects context on session start
πŸ“‹ config-audit audit Audit trail for config changes
πŸ”” desktop-notify ux Cross-platform desktop notifications

Usage in harness.yaml

hooks:
  - block: branch-guard
  - block: tdd-guard
    mode: ask          # ask for approval instead of hard-blocking (Claude)
  - block: commit-test-gate
    params:
      testCommand: "npx vitest run"
  - block: path-guard
    params:
      blockedPaths:
        - "node_modules/"
        - "dist/"
  - block: command-guard
    params:
      patterns:
        - "rm -rf /"
        - "sudo rm"
  - block: lint-on-save
    params:
      filePattern: "*.ts"
      command: "npx eslint --fix"
  - block: auto-pr
    params:
      baseBranch: main

mode: block vs. ask

Any blocking hook accepts an optional mode (default block):

  • block β€” hard-blocks the tool call. The agent cannot proceed.
  • ask β€” escalates to the user for approval instead of blocking outright.
    • Claude Code: shows a native permission prompt (permissionDecision: "ask").
    • Codex: ask is not supported, so the hook falls back to a hard block β€” your guardrail is never silently downgraded to "allow". The same generated script detects the calling runtime and responds accordingly.

mode: ask only applies to blocks that can block (canBlock: true); setting it on a non-blocking block (e.g. lint-on-save) is reported and ignored.


πŸ–₯️ Commands

# πŸš€ Initialize
omh init "your project description"      # NL-powered (requires AI provider)
omh init                                  # Interactive TUI (import existing harness.yaml)

# πŸ“‹ Catalog
omh catalog list                          # Browse all building blocks
omh catalog info branch-guard             # Block details + params

# πŸ”§ Hook management
omh hook add branch-guard                 # Add a hook
omh hook remove auto-pr                   # Remove a hook

# πŸ”„ Sync & manage
omh sync                                 # Regenerate all files from harness.yaml
omh uninstall --dry-run                  # Preview generated-file cleanup
omh uninstall -y                         # Remove generated files, keep user content
omh uninstall -y --purge                 # Also remove harness.yaml

# 🩺 Verify & monitor
omh doctor                               # Health check
omh test                                  # Dry-run verify all hooks
omh stats                                 # TUI analytics dashboard

🧹 omh uninstall β€” Safe generated-file cleanup

omh uninstall removes oh-my-harness generated artifacts while preserving user content in merged files.

omh uninstall --dry-run
omh uninstall -y
omh uninstall -y --purge

Safety behavior:

  • Prints the same uninstall plan for dry-run and real execution.
  • Recommends backing up before execution; use --skip-backup-warning only for automation that already handles backups.
  • Keeps harness.yaml by default; --purge removes it.
  • Preserves user content in CLAUDE.md, AGENTS.md, .claude/settings.json, .codex/hooks.json, .codex/config.toml, and user Pi extensions.
  • Removes only OMH-owned hook commands that point at this project's .omh/hooks directory.
  • Warns when .codex/config.toml feature flags (hooks/goals) are removed, because manually-owned feature settings cannot be distinguished from OMH generated settings.
  • Warns that .codex/config.toml comments may be lost when TOML is rewritten.
  • Uses backups for modified files and restores them on stop-on-error failures; --continue-on-error records failures and keeps applying independent operations.

🩺 omh doctor

oh-my-harness: running health checks...
  βœ“ .claude/oh-my-harness.json found
  βœ“ CLAUDE.md exists with intact markers
  βœ“ .claude/settings.json is valid
  βœ“ All hook scripts are executable
oh-my-harness: all checks passed

πŸ§ͺ omh test β€” Dry-Run Verification

Simulates hook inputs to verify block/allow behavior without entering Claude Code:

β”Œ  omh test  Harness dry-run verification
β”‚
β—‡  Branch guard
β”‚    βœ“ git commit on feat/my-feature β†’ ALLOWED
β”‚
β—‡  TDD Guard
β”‚    βœ“ src/foo.ts without test β†’ BLOCKED
β”‚    βœ“ tests/unit/foo.test.ts β†’ ALLOWED
β”‚    βœ“ README.md β†’ ALLOWED
β”‚
β—‡  File guards
β”‚    βœ“ node_modules/test-file.js β†’ BLOCKED
β”‚    βœ“ dist/test-file.js β†’ BLOCKED
β”‚    βœ“ src/index.ts β†’ ALLOWED
β”‚
β—‡  Command guards
β”‚    βœ“ "rm -rf /" β†’ BLOCKED
β”‚    βœ“ "npm test" β†’ ALLOWED
β”‚
β””  14/14 checks passed βœ“

πŸ“Š omh stats β€” TUI Analytics Dashboard

Interactive dashboard powered by ink with 3 views:

 [1] Overview   [2] Timeline   [3] Blocks          d:filter r:reload q:quit

 Active: 8  Events: 1213  Block rate: 2%

 branch-guard          β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 0b/202a
 tdd-guard             β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 14b/68a
 commit-test-gate      β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 0b/199a
 path-guard            β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 4b/76a
 command-guard         β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 4b/202a

 Dormant (0 hits):
   β–‘ lockfile-guard
   β–‘ secret-file-guard
  • Overview β€” Active blocks with hit bar charts + dormant block detection
  • Timeline β€” 24-hour heatmap + block rate + peak hour
  • Blocks β€” Scrollable detail view with params, hits, last block reason

Keyboard: 1/2/3 views, ↑/↓ scroll, d date filter, r reload, q quit


πŸ“Š Stateful Hook Logging

Every hook invocation is recorded in .omh/state/events.jsonl:

{"ts":"2026-03-18T08:00:00Z","event":"PreToolUse","hook":"catalog-tdd-guard.sh","decision":"block","reason":"TDD β€” foo.test.* ν…ŒμŠ€νŠΈ νŒŒμΌμ„ λ¨Όμ € μˆ˜μ •ν•˜μ„Έμš”"}
{"ts":"2026-03-18T08:00:05Z","event":"PreToolUse","hook":"catalog-command-guard.sh","decision":"allow","reason":""}

This powers omh test live verification and omh stats analytics.


πŸ—οΈ Architecture

oh-my-harness/
β”œβ”€β”€ bin/                    # CLI entry point
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ catalog/
β”‚   β”‚   β”œβ”€β”€ blocks/         # 17 building block definitions
β”‚   β”‚   β”œβ”€β”€ types.ts        # BuildingBlock, HookEntry schemas
β”‚   β”‚   β”œβ”€β”€ registry.ts     # Block discovery & search
β”‚   β”‚   β”œβ”€β”€ template-engine.ts # Handlebars rendering + applyDefaults
β”‚   β”‚   └── converter.ts    # HookEntry[] β†’ rendered scripts
β”‚   β”œβ”€β”€ cli/
β”‚   β”‚   β”œβ”€β”€ commands/       # init, doctor, catalog, hook, sync, test
β”‚   β”‚   β”œβ”€β”€ stats/          # TUI dashboard (ink/React)
β”‚   β”‚   β”‚   β”œβ”€β”€ App.tsx     # App shell (tab bar, keyboard nav)
β”‚   β”‚   β”‚   β”œβ”€β”€ data.ts     # Data aggregation layer
β”‚   β”‚   β”‚   └── components/ # Overview, Timeline, Blocks views
β”‚   β”‚   β”œβ”€β”€ harness-tester.ts  # Hook simulation engine
β”‚   β”‚   β”œβ”€β”€ event-logger.ts    # events.jsonl read/write/stats
β”‚   β”‚   β”œβ”€β”€ event-verifier.ts  # Event-based verification
β”‚   β”‚   β”œβ”€β”€ tui/               # Interactive provider & model selection
β”‚   β”‚   β”œβ”€β”€ provider-setup.ts  # Provider configuration UI
β”‚   β”‚   └── tool-checker.ts    # Command executable checks
β”‚   β”œβ”€β”€ core/
β”‚   β”‚   β”œβ”€β”€ harness-schema.ts      # harness.yaml Zod schema
β”‚   β”‚   β”œβ”€β”€ merged-config.ts       # MergedConfig + HooksConfig interfaces
β”‚   β”‚   β”œβ”€β”€ harness-converter-v2.ts # harness.yaml β†’ MergedConfig (catalog pipeline)
β”‚   β”‚   └── generator.ts           # Orchestrates all generators
β”‚   β”œβ”€β”€ generators/
β”‚   β”‚   β”œβ”€β”€ claude-md.ts    # CLAUDE.md with idempotent markers
β”‚   β”‚   β”œβ”€β”€ hooks.ts        # Hook scripts + event logger injection
β”‚   β”‚   β”œβ”€β”€ settings.ts     # .claude/settings.json
β”‚   β”‚   └── gitignore.ts    # .gitignore updater
β”‚   β”œβ”€β”€ detector/
β”‚   β”‚   β”œβ”€β”€ project-detector.ts  # Deterministic project detection
β”‚   β”‚   β”œβ”€β”€ types.ts             # ProjectFacts, Detector interface
β”‚   β”‚   └── detectors/           # 14 language detectors
β”‚   β”œβ”€β”€ cli/
β”‚   β”‚   β”œβ”€β”€ tui/            # Interactive provider & model selection
β”‚   β”‚   └── provider-setup.ts # Provider configuration UI
β”‚   └── nl/
β”‚       β”œβ”€β”€ provider-registry.ts # Multi-provider definitions
β”‚       β”œβ”€β”€ config-store.ts      # ~/.omh/config.json persistence
β”‚       β”œβ”€β”€ providers/           # Provider implementations
β”‚       β”‚   β”œβ”€β”€ claude-cli.ts
β”‚       β”‚   β”œβ”€β”€ claude-api.ts
β”‚       β”‚   β”œβ”€β”€ openai-api.ts
β”‚       β”‚   └── gemini-api.ts
β”‚       β”œβ”€β”€ parse-intent.ts      # LLM prompt integration
β”‚       └── prompt-templates.ts  # NL prompt construction
└── tests/                  # 900+ tests (unit + integration)

πŸ“¦ Requirements

  • Node.js >= 20
  • Claude CLI (optional, for default NL mode) β€” Install guide
  • API Keys (optional, for Claude/OpenAI/Gemini API modes) β€” set ANTHROPIC_API_KEY, OPENAI_API_KEY, or GOOGLE_API_KEY
  • Codex CLI OAuth (optional, for codex CLI-wrapper mode) β€” install codex and run codex login
  • Codex OAuth API (optional, experimental direct mode) β€” run omh config and choose Codex OAuth API to complete device-code sign-in; credentials are stored under ~/.omh

πŸ—ΊοΈ Roadmap

  • npx oh-my-harness β€” zero-install usage
  • omh sync β€” regenerate from harness.yaml
  • Building block catalog β€” 17 verified hook templates
  • Project detector β€” 14 language auto-detection
  • omh test β€” dry-run hook verification
  • omh stats β€” TUI analytics dashboard (ink)
  • Stateful hook logging β€” events.jsonl
  • TDD Guard β€” enforce test-first workflow
  • Multi-provider AI support β€” Claude API, OpenAI, Gemini, Codex OAuth
  • Interactive model selection per provider
  • GitHub star prompt β€” first-time only
  • Codex emitter β€” AGENTS.md + .codex/hooks.json + .codex/config.toml
  • Unified .omh/ layout β€” single source of truth for hooks & state across runtimes
  • Pi (pi.dev) emitter β€” bridge extension (.pi/extensions/omh-harness.ts) reusing the same .omh/hooks/*.sh
  • ask mode β€” request approval before executing risky tools (Claude native prompt / Pi ctx.ui.select; Codex falls back to block)
  • omh uninstall β€” remove generated artifacts while preserving user content
  • omh config β€” view, reconfigure, or reset the saved AI provider (rotate expired keys, switch provider/model)
  • Community harness.yaml registry β€” share and reuse configs
  • omh modify "change X" β€” NL config editing

🀝 Contributing

Contributions are welcome! Please read the Contributing Guide before submitting a PR.


πŸ’ͺ Support This Project

oh-my-harness is free and open source. Here's how you can help:

  • ⭐ Star β€” Give a star to help others discover the project
  • πŸ› Report Bugs β€” Open an issue when something doesn't work
  • πŸ’‘ Request Features β€” Suggest ideas for new blocks, emitters, or features
  • πŸ”§ Contribute β€” Fix a bug, add a block, or improve docs β€” PRs are always welcome
  • πŸ“’ Spread the Word β€” Share oh-my-harness with your team or community

πŸ“„ License

MIT


Your agents are only as good as their guardrails. 🐴

Built with frustration from hand-writing CLAUDE.md files.

Releases

Jun 8, 2026

Release v0.18.0

Download .zip

What's Changed

Enable supported ChatGPT auth for NL provider setup by @kyu1204 in #92 Release v0.18.0 by @kyu1204 in #93

Full Changelog: v0.17.0...v0.18.0

Jun 5, 2026

Release v0.17.0

Download .zip

What's Changed

feat(config): add omh config to view/reconfigure/reset AI provider by @kyu1204 in #89 feat(doctor): surface AI provider config status with omh config hint by @kyu1204 in #90 Release v0...

Jun 4, 2026

Release v0.16.0

Download .zip

What's Changed

Clarify uninstall safety across hook emitters by @kyu1204 in #87 chore(release): bump version to 0.16.0 by @kyu1204 in #88

Full Changelog: v0.15.0...v0.16.0

Jun 3, 2026

Release v0.15.0

Download .zip

What's Changed

feat(sync): drift detection β€” sync --check, omh diff, doctor warning by @kyu1204 in #85 chore(release): bump version to 0.15.0 by @kyu1204 in #86

Full Changelog: v0.14.0...v0.15.0

Jun 1, 2026

Release v0.14.0

Download .zip

What's Changed

feat(pi): add Pi (pi.dev) emitter as a shell-bridge extension by @kyu1204 in #83 release: v0.14.0 by @kyu1204 in #84

Full Changelog: v0.13.1...v0.14.0