From oh-my-claudeagent
Configure ~/.claude/ for oh-my-claudeagent — injects orchestration block, checks deps, inspects setup state
npx claudepluginhub utsavbalar1231/oh-my-claudeagent --plugin oh-my-claudeagentThis skill uses the workspace's default tool permissions.
One-command setup: update orchestration block in `~/.claude/CLAUDE.md`, check dependencies, inspect plugin state, print rollout guidance.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
One-command setup: update orchestration block in ~/.claude/CLAUDE.md, check dependencies, inspect plugin state, print rollout guidance.
Out of scope: marketplace install commands, auto-registering in ~/.claude/settings.json, editing shared/managed settings, enforcing enterprise policy keys (strictKnownMarketplaces, blockedMarketplaces, allowManagedHooksOnly, allowManagedPermissionRulesOnly, allowManagedMcpServersOnly).
Policy baseline: Claude Code native settings authoritative. teammateMode: "auto" is normal. Managed settings are non-overridable policy. permission-filter.sh is guardrail-only — does not auto-allow.
Install/update flow:
/plugin marketplace add UtsavBalar1231/oh-my-claudeagent then /plugin install oh-my-claudeagent@omca/plugin marketplace update omca then /plugin install oh-my-claudeagent@omca/reload-plugins--bare caveat: claude --bare skips plugin, hooks, skills, MCP, and CLAUDE.md auto-discovery. Run setup in normal (non---bare) sessions.
Plugin options:
enableKeywordTriggers: bool, default falsestatuslineMode: off|direct|daemon, default directSandbox: For fail-closed environments, use sandbox.failIfUnavailable: true in managed settings. This skill reports sandbox posture but does not bypass host enforcement.
Output style: output-styles/omca-default.md (manifest "outputStyles": "./output-styles/").
Parse $ARGUMENTS for flags:
--uninstall → jump to UNINSTALL MODE--check → jump to CHECK MODE--doctor → jump to DOCTOR MODERun these checks in parallel:
command -v jq && jq --version
→ PASS/FAIL. If jq is missing, STOP — hooks will not work without it.
command -v uv && uv --version
→ PASS/FAIL. If uv is missing, STOP — MCP servers will not start without it.
command -v python3 && python3 --version
→ PASS/WARN (needed for ast-grep MCP server; uv manages the Python environment)
if command -v ast-grep >/dev/null 2>&1; then ast-grep --version 2>&1 | head -1; else command -v sg >/dev/null 2>&1 && sg --version 2>&1 | head -1; fi
→ PASS/WARN (optional — needed for structural code search MCP tools; accepts either ast-grep or sg)
Record each result (binary path + version or "not found") for the health report.
Determine the plugin root. Navigate from this skill's location:
skills/omca-setup/SKILL.mdBash: dirname of the skill path or use CLAUDE_PLUGIN_ROOT env varRead the template file:
Read("${PLUGIN_ROOT}/templates/claudemd.md")
Read the plugin version:
Read("${PLUGIN_ROOT}/.claude-plugin/plugin.json")
Extract the version field with jq.
Update the template content in memory:
version: 0.1.0 (or whatever is in the template) with version: ${CURRENT_VERSION} from plugin.jsoninstalled: ${ISO_8601_TIMESTAMP} line after the author: line in metadataBash: date -u +%Y-%m-%dT%H:%M:%SZIf ~/.claude/CLAUDE.md exists:
Create a backup:
cp ~/.claude/CLAUDE.md ~/.claude/CLAUDE.md.bak
Read the existing file:
Read("~/.claude/CLAUDE.md")
Migration check (old developer's format):
<!-- OMCA:START --> OR <\!-- OMCA:START --> (with or without backslash escape)<!-- OMCA:END --> or <\!-- OMCA:END -->)Own block check:
^--- omca-setup\s*$version: value from the metadata section (lines between --- omca-setup and next ---)
^--- omca-setup\s*$ through ^--- /omca-setup ---\s*$ (inclusive)Everything remaining after removing detected blocks = user content (preserve exactly)
If ~/.claude/CLAUDE.md does NOT exist:
Create the directory:
mkdir -p ~/.claude
User content = empty string
Compose the final file:
If user content is empty (the entire old file was just a block), write only the template block.
Write the composed content to ~/.claude/CLAUDE.md.
Read ~/.claude/settings.json if it exists; otherwise treat user-scope settings as absent.
Inspect setup state without modifying settings:
enabledPlugins contains a key starting with oh-my-claudeagent → report "already enabled in user settings"~/.claude/plugins/cache/ → report "running from marketplace cache copy"--plugin-dir or another checkout outside the cache → report "running from local checkout / development mode"plugins array entry contains oh-my-claudeagent → report "legacy git-clone install detected"If the plugin is not already enabled in user settings, print install guidance instead of writing settings:
Plugin not enabled in user settings. Use one of these Claude Code-supported paths:
/plugin marketplace add UtsavBalar1231/oh-my-claudeagent
/plugin install oh-my-claudeagent@omca
Or add the shared-team snippet to .claude/settings.json:
{
"extraKnownMarketplaces": {
"omca": {
"source": {
"source": "github",
"repo": "UtsavBalar1231/oh-my-claudeagent"
}
}
},
"enabledPlugins": {
"oh-my-claudeagent@omca": true
}
}
Ownership boundary: this skill inspects ~/.claude/settings.json and prints install snippets, but does not register the plugin automatically.
Print enterprise rollout guidance (inspection only; do not write or enforce):
strictKnownMarketplaces → allow only admin-approved marketplacesblockedMarketplaces → explicitly deny marketplaces that should never resolveallowManagedHooksOnly → allow only hooks defined in managed settingsallowManagedPermissionRulesOnly → allow only managed permission rulesallowManagedMcpServersOnly → allow only managed MCP server definitionssandbox.failIfUnavailable → fail closed if the sandbox cannot be appliedThese keys belong in managed settings when the organization needs non-overridable policy — this skill only points the user/admin at them. Marketplace-installed copies run from ~/.claude/plugins/cache/...; the local omca MCP server bootstraps its ast-grep Python environment inside the active plugin root or cache copy, not in shared global state.
Apply optional user-scope helper settings to ~/.claude/settings.json with user confirmation.
Read ~/.claude/settings.json (if exists; if not, start with {})
Detect managed-policy lock keys in current scope (allowManagedHooksOnly, allowManagedPermissionRulesOnly, allowManagedMcpServersOnly). If present and true, do not propose local permission-rule writes; report that managed policy owns permission enforcement.
Compute missing optional helper permissions against the recommended set:
Write(.omca/**), Edit(.omca/**), Read(.omca/**)mcp__plugin_oh-my-claudeagent_omca__*, mcp__grep__*, mcp__context7__*Bash(jq *), Bash(uv run *), Bash(uv sync *)Compute missing top-level: teammateMode: "auto"
Compute missing env vars against the required set:
ANTHROPIC_DEFAULT_OPUS_MODEL: "claude-opus-4-7[1m]" — routes opus-tier agents to extended-thinking modelCLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "1" — enables agent teams (required for teammateMode: "auto")If all present: "Settings already configured" — skip
If changes needed: show diff, use AskUserQuestion to confirm
On confirm: read-merge-write with jq (handle nonexistent file)
On decline: print raw jq command as fallback:
jq '. + {
"teammateMode": "auto"
} | .env += {
"ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-4-7[1m]",
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
} | .permissions.allow += [
"Write(.omca/**)",
"Edit(.omca/**)",
"Read(.omca/**)",
"mcp__plugin_oh-my-claudeagent_omca__*",
"mcp__grep__*",
"mcp__context7__*",
"Bash(jq *)",
"Bash(uv run *)",
"Bash(uv sync *)"
]' ~/.claude/settings.json > /tmp/claude-settings-tmp.json && mv /tmp/claude-settings-tmp.json ~/.claude/settings.json
Explain each setting:
teammateMode: "auto" — enables agent teams with best available UI (tmux/iTerm2 split panes)ANTHROPIC_DEFAULT_OPUS_MODEL — routes opus-tier agents (oracle, prometheus, metis, momus, sisyphus) to claude-opus-4-7[1m] for extended thinkingCLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS — enables the experimental agent teams feature, required for teammateMode: "auto" to function
- Write(.omca/**) / Edit(.omca/**) / Read(.omca/**) — auto-allow plugin state file access
- mcp__plugin_oh-my-claudeagent_omca__* / mcp__grep__* / mcp__context7__* — auto-allow bundled MCP tool usage
- Bash(jq *) / Bash(uv run *) / Bash(uv sync *) — auto-allow common plugin utility commands (narrowed from Bash(uv *))
- These are optional local helper allowances; managed settings remain the policy authority.Configure the Claude Code statusline to use the oh-my-claudeagent statusline package.
Read ~/.claude/settings.json (if it exists; otherwise treat as {}).
Check if statusLine is already configured:
settings.statusLine is present → print "statusLine already configured — skipping" and skip this phase.If not configured: use AskUserQuestion to ask:
Enable the oh-my-claudeagent statusline? It shows model, context bar, cost, duration, git status, and more in your terminal.
[y/N]
On decline: skip this phase silently.
On confirm:
a. Resolve the plugin root (Python):
import glob, os
candidates = glob.glob(os.path.expanduser("~/.claude/plugins/cache/omca/oh-my-claudeagent/*/"))
plugin_root = sorted(candidates)[-1] if candidates else None
If no candidates found (development mode), fall back to the git root:
import subprocess
result = subprocess.run(["git", "rev-parse", "--show-toplevel"], capture_output=True, text=True)
plugin_root = result.stdout.strip() if result.returncode == 0 else None
If plugin_root is still None, report an error and skip the phase.
b. Create the deployment structure at ~/.claude/statusline/:
Layout:
~/.claude/statusline/
pyproject.toml ← copied from <plugin-root>/statusline/pyproject.toml
statusline/ ← copied from <plugin-root>/statusline/*.py
__init__.py
core.py
git.py
daemon.py
client.py
direct.py
Commands (replace <plugin-root> with the path from step a):
mkdir -p ~/.claude/statusline/statusline
cp <plugin-root>/statusline/pyproject.toml ~/.claude/statusline/pyproject.toml
cp <plugin-root>/statusline/*.py ~/.claude/statusline/statusline/
c. Run uv sync to create the venv and install entry points:
uv sync --project ~/.claude/statusline
d. Ask user for mode selection using AskUserQuestion:
Statusline mode?
1. Daemon (fastest, <1ms warm response) [recommended]
2. Direct (simpler, ~20ms response)
Default to daemon (option 1) if the user picks 1 or confirms without a specific choice.
e. Set the settings.json command based on mode:
~/.claude/statusline/.venv/bin/cc-statusline~/.claude/statusline/.venv/bin/cc-statusline-directUse jq to merge atomically (read-merge-write):
jq --arg cmd "<chosen-command>" '. + {"statusLine": {"type": "command", "command": $cmd, "padding": 1}}' \
~/.claude/settings.json > /tmp/claude-settings-statusline.json \
&& mv /tmp/claude-settings-statusline.json ~/.claude/settings.json
If ~/.claude/settings.json does not exist, create it from {}:
echo '{}' | jq --arg cmd "<chosen-command>" '. + {"statusLine": {"type": "command", "command": $cmd, "padding": 1}}' \
> ~/.claude/settings.json
f. For daemon mode only: start the daemon, then verify it came up:
~/.claude/statusline/.venv/bin/cc-statusline-daemon start
sleep 0.05
if ! ~/.claude/statusline/.venv/bin/cc-statusline-daemon status > /dev/null 2>&1; then
# retry once
~/.claude/statusline/.venv/bin/cc-statusline-daemon start
sleep 0.1
if ! ~/.claude/statusline/.venv/bin/cc-statusline-daemon status > /dev/null 2>&1; then
echo "[omca-setup] warning: statusline daemon failed to start; client will use direct mode" >&2
fi
fi
g. Report to user:
Statusline configured:
~/.claude/statusline/pyproject.toml — package manifest
~/.claude/statusline/statusline/ — package files (copied from plugin)
~/.claude/statusline/.venv/ — uv-managed venv with entry points
~/.claude/settings.json — statusLine added (mode: daemon|direct)
For daemon mode: daemon started (auto-starts on first request if not running)
Restart Claude Code to activate the statusline.
Note: After plugin updates, re-copy the files and re-run uv sync to pick up changes:
cp <plugin-root>/statusline/pyproject.toml ~/.claude/statusline/pyproject.toml
cp <plugin-root>/statusline/*.py ~/.claude/statusline/statusline/
uv sync --project ~/.claude/statusline
Or simply re-run /oh-my-claudeagent:omca-setup (it will skip already-configured phases).
h. Note: If an old ~/.claude/statusline.py wrapper script exists, it can be removed — it is superseded by this copy-based deployment.
Print a summary to the user:
Get the current plugin git commit SHA: cd "${PLUGIN_ROOT}" && git rev-parse --short HEAD 2>/dev/null || echo "unknown"
=== oh-my-claudeagent Setup Complete ===
Dependencies:
jq: PASS (v1.7.1)
python3: PASS (v3.12.0)
ast-grep: WARN (not found — structural code search unavailable)
Files:
~/.claude/CLAUDE.md — Block injected v0.1.0 (backup: CLAUDE.md.bak)
~/.claude/settings.json — Inspected only: enabled | local checkout / dev mode | legacy config detected | not configured in user scope
Plugin root — ~/.claude/plugins/cache/... | local checkout path
Git commit — [short SHA from plugin root]
State:
.omca/state/ — Verified
.omca/logs/ — Verified
Plugin-local .venv — [Present | Auto-created on first ast-grep MCP server start in the active plugin root]
.gitignore — .omca/ entry present
Restart Claude Code to activate changes.
Fill in actual versions from Phase 1 results.
State section:
.omca/state/ and .omca/logs/ directories (auto-created on session start) — report "Verified" if present, "Will be created on next session start" if not.omca/ in .gitignore — if not, add it:
echo '.omca/' >> .gitignore
Read ~/.claude/CLAUDE.md
Detect and remove own block:
^--- omca-setup\s*$ through ^--- /omca-setup ---\s*$ → remove entirelyAlso detect and remove old format:
<!-- OMCA:START --> or <\!-- OMCA:START --> through corresponding end marker → remove entirelyIf the file is now empty or whitespace-only → delete it:
rm ~/.claude/CLAUDE.md
Otherwise write back the remaining content.
Read ~/.claude/settings.json if it exists.
Report any user-scope references to oh-my-claudeagent in:
enabledPluginsextraKnownMarketplacesplugins array entriesPrint supported cleanup commands instead of editing shared settings automatically:
/plugin uninstall oh-my-claudeagent@omca
/plugin marketplace remove omca
If the plugin is enabled through project or managed settings, explain that those scopes must be cleaned up by editing the appropriate settings file or managed policy deployment. Do not claim this skill can remove enterprise policy on the user's behalf.
Ask the user:
Remove .omca/ state directory? This deletes logs, plans, and any optional local context files stored there. [y/N]
If user confirms:
rm -rf .omca/
Print uninstall summary:
=== oh-my-claudeagent Uninstalled ===
Removed: ~/.claude/CLAUDE.md — Block removed (or file deleted) ~/.claude/settings.json — Cleanup guidance printed; manual scope-specific removal may still be needed .omca/ — [Removed | Kept]
The plugin files remain at their install location or cache copy until Claude Code uninstall/remove commands run.
---
## CHECK MODE (`--check`)
Non-destructive health check — no files are modified.
1. Run Phase 1 (Dependency Check) — report PASS/WARN/FAIL for each dep
2. Check `~/.claude/CLAUDE.md`:
- Does own block exist? Report version if found
- Does old format block exist? Report "migration needed"
- No block found? Report "not configured — run omca-setup"
3. Check `~/.claude/settings.json`:
- Is the plugin enabled in user settings? Report method (marketplace via enabledPlugins / dev mode via --plugin-dir / legacy plugins array / not registered)
- Are required env vars configured (`ANTHROPIC_DEFAULT_OPUS_MODEL`, `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`)? Report each as PASS/WARN
- Remind the user that managed policy keys such as `strictKnownMarketplaces`, `blockedMarketplaces`, `allowManagedHooksOnly`, `allowManagedPermissionRulesOnly`, `allowManagedMcpServersOnly`, and `sandbox.failIfUnavailable` are outside this skill's enforcement scope
4. Check `.omca/` state:
- Do state directories exist?
- Is `.omca/` in `.gitignore`?
5. Print the Phase 6 health report format with findings (but no "Setup Complete" header — use "Health Check" instead)
---
## DOCTOR MODE (`--doctor`)
Extended diagnostic — superset of `--check` with deeper health verification. No files are modified.
### Check 1: Dependencies
Run Phase 1 (Dependency Check) — report PASS/WARN/FAIL for jq, uv, python3, ast-grep.
### Check 2: CLAUDE.md Block
- Does own block exist in `~/.claude/CLAUDE.md`? Report version if found.
- Does old format block exist? Report "migration needed".
- No block? Report "not configured — run omca-setup".
### Check 3: Permission Namespace Audit
Read `~/.claude/settings.json` and verify the required permission patterns are present:
- `mcp__plugin_oh-my-claudeagent_omca__*` — PASS if present, FAIL if missing or has old bare `mcp__omca-state__*` or `mcp__ast-grep__*`
- `mcp__grep__*` — PASS if present (HTTP server, bare name is correct)
- `mcp__context7__*` — PASS if present (HTTP server, bare name is correct)
- `Write(.omca/**)`, `Edit(.omca/**)`, `Read(.omca/**)` — PASS if all present
- `Bash(jq *)`, `Bash(uv run *)`, `Bash(uv sync *)` — PASS if all present
- Check for stale entries: `mcp__pgs__*`, `mcp__omca-state__*`, `mcp__ast-grep__*` — WARN if found ("stale permission — run omca-setup to update")
### Check 4: MCP Server Health
For each command-type MCP server, verify it can start and respond:
```bash
echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | timeout 5 uv run --project ${PLUGIN_ROOT}/servers omca-mcp.py 2>/dev/null
"result" with tool definitions.omca/state/ exists — PASS/FAIL.omca/logs/ exists — PASS/FAIL.omca/ in .gitignore — PASS/FAILteammateMode is "auto" — PASS/WARNenv.ANTHROPIC_DEFAULT_OPUS_MODEL is "claude-opus-4-7[1m]" — PASS/WARN ("opus agents may use non-extended model")env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS is "1" — PASS/WARN ("agent teams disabled — teammateMode won't function")enabledPlugins — PASS/FAILextraKnownMarketplaces — PASS/FAIL~/.claude/statusline/.venv/bin/cc-statusline exists — PASS/FAILstatusLine configured in ~/.claude/settings.json — PASS/WARNcc-statusline-daemon status) — PASS/WARNPrint the Phase 6 health report format with all findings. Use "Doctor Report" header instead of "Health Check".
~/.claude/CLAUDE.md before any write (Phase 3)~/.claude/ and .omca/ (plus .gitignore)<!-- OMCA:START --> and <\!-- OMCA:START --> (escaped and unescaped)