From oh-my-harness
Initializes oh-my-harness configuration in the current Claude Code project via interactive onboarding for installation scope, auto-detection of conventions, feature profiles, and commit standards.
npx claudepluginhub hoya324/oh-my-harness --plugin oh-my-harnessThis skill uses the workspace's default tool permissions.
Initialize oh-my-harness for the current project. This is the plugin equivalent of `oh-my-harness init`.
Initializes Harness projects by generating CLAUDE.md, Plans.md, .claude/settings.json, configuring CI/Codex CLI/agents/memory, syncing skill mirrors, and localizing rules. Use for new projects, repairs, or maintenance.
Configures Citadel harness for new projects: installs hooks, detects tech stack, generates harness.json, restores archives if present, runs live demo on real code. Modes: Recommended (~3min), Full Tour (~8min), Express (~30s).
Initializes Claude Code projects by auto-detecting Node.js frameworks from package.json and lockfiles, replaces CLAUDE.md placeholders, installs rules, hooks, and scripts.
Share bugs, ideas, or general feedback.
Initialize oh-my-harness for the current project. This is the plugin equivalent of oh-my-harness init.
When this skill is invoked, immediately execute the workflow below.
In plugin mode, hooks and CLAUDE.md are already provided by the plugin system automatically. This setup only creates the project-level configuration file.
Check if .claude/.omh/harness.config.json exists.
Run the duck ASCII art to greet the user:
bash "$CLAUDE_PLUGIN_ROOT/lib/duck.sh" 2>/dev/null || bash "$(dirname "$(realpath "$0")")/../../lib/duck.sh" 2>/dev/null || true
Output the following message (adapt naturally, keep it concise and friendly):
Welcome to oh-my-harness!
Smart defaults for Claude Code — test enforcement, guard rails,
convention detection, and model routing, all in one harness.
Let's set up your project in a few quick steps.
Ask the user the following questions using AskUserQuestion (ask all at once):
Question 1 — Installation Scope
"설치 범위를 선택해주세요."
.claude/settings.local.json — 이 프로젝트에만 적용~/.claude/settings.json — 모든 프로젝트에 적용Question 2 — Project Detection
"프로젝트 컨벤션을 자동 감지할까요?"
Question 3 — Feature Profile
"어떤 기능 프로필을 사용할까요?"
Question 4 — Commit Convention
"커밋 메시지 컨벤션은?"
type(scope): description🎨 descriptionBased on the user's answers:
Project scope selected → Config and hooks target .claude/settings.local.json (this project only)
User scope selected → Config stays in .claude/.omh/ but hooks are registered in ~/.claude/settings.json (applies to all projects)
Auto-detect selected → Run convention detection (scan project root for package.json, pyproject.toml, go.mod, Cargo.toml, build.gradle, pom.xml) and save to .claude/.omh/conventions.json
Manual selected → Ask for language, test framework, linter, formatter, build tool
Full profile → Use all default features as-is
Minimal profile → Set all features to false except: testEnforcement, dangerousGuard, commitConvention, autoGitignore
Custom profile → Ask the user which features to enable using AskUserQuestion with multiSelect
Commit convention → Set commitConvention.style to the chosen value (auto, conventional, gitmoji)
mkdir -p .claude/.omh
Write the config to .claude/.omh/harness.config.json with the user's choices merged into the following default template.
IMPORTANT: Feature keys MUST match exactly — hooks read these exact names.
{
"version": 1,
"features": {
"conventionSetup": true,
"testEnforcement": true,
"contextOptimization": true,
"autoPlanMode": true,
"ambiguityDetection": true,
"dangerousGuard": true,
"contextSnapshot": true,
"commitConvention": true,
"scopeGuard": false,
"usageTracking": true,
"autoGitignore": true
},
"testEnforcement": { "minCases": 2, "promptOnMissing": true },
"modelRouting": { "quick": "haiku", "standard": "sonnet", "complex": "opus" },
"autoPlan": { "threshold": 3 },
"ambiguityDetection": { "threshold": 2, "language": "auto" },
"commitConvention": { "style": "auto" },
"scopeGuard": { "allowedPaths": [] },
"multiAgent": { "maxAgents": 4, "useWorktree": true, "tmuxSession": "omh-agents" }
}
false except: testEnforcement, dangerousGuard, commitConvention, autoGitignoreif ! grep -q '.claude/.omh/' .gitignore 2>/dev/null; then
echo -e "\n# oh-my-harness\n.claude/.omh/" >> .gitignore
fi
Register the oh-my-harness HUD in the user's Claude Code settings.
IMPORTANT: $CLAUDE_PLUGIN_ROOT is NOT available in statusLine context (it's a global setting, not a plugin hook). Use a dynamic path lookup instead.
Write the statusLine config to ~/.claude/settings.json:
{
"statusLine": {
"type": "command",
"command": "bash -c 'node \"$(ls ~/.claude/plugins/cache/oh-my-harness/*/*/hud/omh-hud.mjs 2>/dev/null | head -1)\"'"
}
}
If statusLine is already set to a non-harness value, ask the user before overwriting.
Show the duck one more time, then output:
oh-my-harness is ready!
Scope : {Project|User (Global)}
Project : {language} | test: {testFramework} | lint: {linter} | fmt: {formatter}
Config : .claude/.omh/harness.config.json
Features : {N} active ({disabled features list})
Commit : {commitStyle}
HUD : enabled (restart Claude Code to see status line)
Hooks are provided automatically by the plugin.
Use /set-harness to change settings anytime.
If .claude/.omh/harness.config.json already exists:
If "Reset to defaults" is chosen, delete the existing config and run the First-Time Welcome flow above.
settings.local.json — hooks come from hooks/hooks.jsonCLAUDE.md — the root CLAUDE.md is injected by the plugin system