feat: add Oh My Pi (omp) agent support - #103
Merged
Merged
Conversation
Add omp as the 11th supported agent. omp (Oh My Pi) is a coding agent
harness with base dir ~/.omp and agent config under ~/.omp/agent/.
Capabilities mapped:
- Skills: ~/.omp/agent/skills/<name>/SKILL.md (user), .omp/skills/ (project)
- MCP: ~/.omp/agent/mcp.json (user), .omp/mcp.json (project) β JSON mcpServers
- Plugins: ~/.omp/agent/extensions/*.ts (TypeScript extension modules)
- Rules: ~/.omp/agent/{AGENTS,RULES}.md (user), .omp/{AGENTS,RULES}.md (project)
- Settings: ~/.omp/agent/config.yml (user), .omp/config.yml (project)
- Hooks: None (omp hooks are JS/TS event modules, not shell commands β same
model as opencode)
Frontend: AGENT_ORDER, display name, color theme, onboarding animation,
extension filter colors, mascot fallback.
Uses the official omp favicon (Ο symbol with pinkβpurpleβcyan gradient on dark tile). Hover: gentle float + hue cycle. Click: glow burst + scale pulse. Reduced-motion respected.
omp's extension loader globs only *.{ts,js} (discovery/helpers.ts,
docs/extension-loading.md) β .mjs/.cjs files are never loaded, so listing
them as plugins would surface entries omp itself ignores. Also correct the
comment claiming omp has no native disable mechanism: it does
(disabledExtensions in config.yml); the rename model is safe because the
loader's glob won't match a .disabled file.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
β¦bled state omp decides a server's effective state from three inputs (mcp/config.ts): the user-level disabledServers denylist always wins, then the per-entry enabled flag, and the user-level enabledServers allowlist can force a server back on over enabled:false. Reading only the entry flag made HK mis-report in both directions. Both lists live in the user mcp.json but gate servers from every source, so project-scope reads consult them too. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Two surfaces the adapter missed vs upstream discovery (builtin.ts,
extension-loading.md):
- Directory-form extensions <name>/index.{ts,js} (TS preferred). The
entry's path is the index file so HK's rename toggle keeps the plugin
name (the directory) stable. package.json-manifest extensions remain
unmodeled.
- Per-file rules rules/*.{md,mdc} at both user (~/.omp/agent/rules) and
project (.omp/rules) scope, separate from the sticky RULES.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
β¦imation polish
- find_disabled_plugin_path special-cased source "local" only for
opencode; omp uses the same single-file plugin model, so re-enabling an
externally-disabled omp extension (no DB snapshot) silently no-opped.
Cover both plugin forms: top-level *.disabled files and directory-form
<name>/index.{ts,js}.disabled, with manager-level regression tests.
- List mcp.json in global_settings_files so the servers file is browsable
from the agent page (matches kiro).
- Drop the redundant File(".omp/mcp.json") project marker β Dir(".omp")
necessarily matches first.
- Add omp to CLICK_DURATIONS (0.9s animations were cut at the 600ms
default) and cover the root-level omp-float in prefers-reduced-motion.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replace the generic remove+snapshot toggle with omp's native mechanism: flip the entry's own `enabled` flag in place (absent means enabled), then scrub the user-level list that would override it β enabledServers on disable, disabledServers on enable. Entries, secrets, and extra keys (type/url/headers) are never removed or redacted, and natively-disabled servers can now be re-enabled (previously "No saved config" error). The entry flag β not the disabledServers denylist β carries the toggle because the denylist matches by name across all sources and would knock out same-named servers in other projects. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Owner
|
Thanks for adding OMP! I cross-checked every convention against the omp source and docs, then pushed five commits on top of yours:
Heads up: the project-level .omp/extensions/ path currently has no effect β HarnessKit doesn't scan project-level plugins for any agent yet, so only ~/.omp/agent/extensions/ is picked up. It will start working as soon as I add project-level plugin scanning. Thanks again! Merged. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds Oh My Pi (
omp) as the 11th supported agent in HarnessKit.Backend
OmpAdapterfor~/.omp/~/.omp/agentlayout.~/.omp/agent/skills/<name>/SKILL.md.omp/skills/<name>/SKILL.md~/.omp/agent/mcp.json.omp/mcp.jsonmcpServersformat, including stdiocommand, remoteurl,args,env, and nativeenabledflag.~/.omp/agent/extensions/*.{ts,js,mjs,cjs}.omp/extensions/AGENTS.md,RULES.md,config.yml,settings.json.HookFormat::Nonebecause omp hooks are JS/TS event modules, not shell-command hook configs (same model as OpenCode).Frontend
omptoAGENT_ORDERand display names.omp.sh/favicon.svgΟ logo (pinkβpurpleβcyan gradient).Docs
Verification
cargo check -p hk-coreβcargo test -p hk-coreβ β 557 tests passednpx tsc --noEmitβnpx vitest run src/lib/__tests__/types.test.ts src/stores/__tests__/extension-helpers.test.tsβ β 76 tests passed~/.ompinstall βomp~/.omp/agent/config.ymlorca-agent-status,orca-prefill,orca-titlebar-spinnerScreenshots
Overview β Oh My Pi detected
Agent details β Oh My Pi
Extensions filtered by Oh My Pi
Oh My Pi mascot card crop