Skip to content

feat(omp): add native oh-my-pi harness support - #1323

Open
caelaxie wants to merge 8 commits into
EveryInc:mainfrom
caelaxie:caelaxie/omp-support
Open

feat(omp): add native oh-my-pi harness support#1323
caelaxie wants to merge 8 commits into
EveryInc:mainfrom
caelaxie:caelaxie/omp-support

Conversation

@caelaxie

@caelaxie caelaxie commented Aug 4, 2026

Copy link
Copy Markdown

Summary

Implements the boundary settled in #1224 (#1224 (comment)): native oh-my-pi (omp) support with no converter, no writer, and no separate release component. omp installs this repository natively; the gaps were CE's missing omp marketplace catalog (without one, omp's update checker never sees CE) and CE's own harness-specific instructions. This PR closes both.

The ce-compound session-history work was split into #1333 per maintainer request, so this install/prose work is not blocked behind omp's still-moving session-bucket naming.

Closes #1224.

What changed

omp marketplace catalog — the auto-update fix

  • New .omp-plugin/marketplace.json, omp's preferred catalog path (read ahead of .claude-plugin/marketplace.json when both exist; verified empirically on 17.2.9 — discovery output and the cached catalog both come from the omp copy, Claude Code is unaffected).
  • The plugin entry carries a release-managed version, wired to the root release component in .github/release-please-config.json via extra-files (jsonpath: "$.plugins[0].version"), with the file added to root exclude-paths like the other native catalogs. Without this field omp's checkForUpdates() skips CE permanently: reproduced empirically — version-less catalog + changed plugin → omp plugin upgrade reports "up to date"; with the field, the same change upgrades 0.0.1 -> 0.0.2 into a new version-keyed cache dir and repoints the node_modules symlink.
  • release:validate gains an omp arm (src/release/metadata.ts): plugin-list parity with the Claude catalog, version presence (missing = structural error, since it disables upgrade detection) and drift detection (release-please owns the write; detect-only here), and a co-located "./" source check. Mirrored arms in tests/release-metadata.test.ts.

CLI — detection, not conversion

  • src/utils/detect-tools.ts: detection-only omp entry (~/.omp, project .omp/), same class as copilot/droid/qwen. --to all prints - omp — native plugin install; skipped instead of silently ignoring the host.
  • install/convert "no installable tools" guidance names oh-my-pi (omp).
  • Explicit --to omp rejects as an unknown target, exactly like the other native-install-only hosts.

Docs

  • docs/specs/omp.md target spec, re-verified 2026-08-05 against omp 17.2.9. Corrects the original causal claim per maintainer review: skills load through omp's provider scan of the root skills/ directory — the bundled .pi/extensions/compound-engineering.ts is a no-op on omp (resources_discover has no AgentSession callsites); the pi manifest is the discovery gate and an install-time validation risk (install rolls back if an extensions entry fails to import), not the skill loader. Documents the update mechanics (catalog versioncheckForUpdates()marketplace.autoUpdate), both session-bucket schemes, and the profile/env-override chain.
  • README.md: the omp subsection now leads with the marketplace flow plus omp config set marketplace.autoUpdate auto (the default notify mode only writes to the debug log — verified), demoting omp install <git-url> to pin-style and omp plugin link "$PWD" to contributor dev in a collapsed block.

Skill prose — the compatibility pass

  • Blocking-question tool lists across ~40 files now include omp's built-in ask (adjacent to the Pi ask_user item; the negative pin in ce-code-review includes it too).
  • Closed subagent-primitive enumerations (ce-work execution-engines matrix, ce-plan, ce-simplify-code) now name omp's built-in task. Open "or the equivalent" phrasings were deliberately left alone — they already cover omp.
  • User-facing invocation rendering: omp's form is /skill:<name> (not /skill-name, not $skill-name). The centralized rule in AGENTS.md, the authoring guide, README's invocation note, and all per-skill rendering-rule copies carry the new clause; the parity tests were generalized from a two-form to a three-form contract.

Tests

  • tests/cli.test.ts: --to all prints the omp native-skip line; --to omp rejects like other native-only targets.
  • tests/detect-tools.test.ts: tool count 7 → 8; omp detection asserted.
  • tests/release-metadata.test.ts: omp catalog fixture + four arm tests (missing catalog, version drift detect-only, missing version error, plugin-list parity).
  • tests/omp-native-install.test.ts: guarded on the omp binary — dry-run install recognizes this repo (omp install --dry-run --json) and every skills/<name>/SKILL.md carries the name + description frontmatter omp requires for discovery. Skips cleanly when omp is absent.

Verification

  • bun run test (full suite, same as CI): 2907 pass, 0 fail on the committed tree.
  • bun run release:validate: in sync (0 agents, 32 skills, 0 MCP servers — counts unchanged), including the new omp arm.
  • Empirical marketplace test (omp 17.2.9, sandboxed HOME): dual-catalog precedence, version-less upgrade invisibility, and clean 0.0.1 -> 0.0.2 upgrade with "source": "./" all confirmed — reported in Proposal: add native oh-my-pi (omp) support #1224 (comment).
  • omp config get marketplace.autoUpdatenotify (default); omp config set marketplace.autoUpdate auto confirmed working.

Deliberately not done (per the #1224 boundary)

  • No --to omp converter or pi-writer reuse; no separate release component (the catalog version rides the root component's extra-files, same as the kimi/grok/devin manifests).
  • Session-history support: split into feat(ce-compound): recognize oh-my-pi (omp) session history #1333.
  • Representative skill evals (behavioral) were not run here; happy to add skill-creator eval evidence if maintainers want it before merge.

Security Disclosure

No security-relevant changes. The new .omp-plugin/marketplace.json is static metadata; the release:validate arm only reads it. No shell, path-handling, permission, network, credential, or dependency changes beyond what the detection-only CLI entry already did (unchanged in this revision).

Agent Disclosure

  • Model: Oh My Pi (omp) · kimi-code/k3

Research, empirical verification (sandboxed marketplace install/upgrade runs against omp 17.2.9), decomposition, and implementation by the agent; earlier slices of this PR were executed by delegated subagents under the same harness, and their diffs were reviewed before commit.

- detect omp (~/.omp, project .omp/) so `--to all` reports it as a
  native plugin install instead of attempting conversion; no --to omp
  converter, writer, or manifest (per CONCEPTS.md native-plugin-surface)
- docs/specs/omp.md target spec verified against omp 17.2.7; README
  gains omp install/local-dev/limitations coverage
- skills: omp built-in `ask` in blocking-question lists, `task` in
  closed subagent enumerations, and `/skill:<name>` user-facing
  invocation form across the rendering-rule copies, AGENTS.md, and the
  authoring guide
- ce-compound session history: discover omp sessions under
  ~/.omp/agent/sessions and named-profile roots (honoring
  PI_CODING_AGENT_SESSION_DIR/PI_CODING_AGENT_DIR/PI_CONFIG_DIR), detect
  omp JSONL via its physical title-slot line before the pi-shaped
  header, and reuse pi extraction for omp platform identity
- tests: detection, --to all note, session fixture + discovery/extract
  coverage, invocation-rendering parity, and a guarded
  omp-native-install smoke test

Closes EveryInc#1224

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8bf0cb1a91

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread skills/ce-compound/scripts/session-history/discover-sessions.sh Outdated
Comment thread skills/ce-compound/scripts/session-history/discover-sessions.sh Outdated
Comment thread skills/ce-compound/SKILL.md Outdated
- deduplicate all-platform discovery output: Pi and omp share the
  PI_CODING_AGENT_SESSION_DIR flat override, so both discoverers emitted
  the same files (Codex review P2)
- glob omp's sanitized bucket basename ([^a-zA-Z0-9._-]+ -> "-", edge
  dashes stripped, capped at the last 80 chars, empty -> "project",
  mirroring session-paths.ts getDefaultSessionDirName) so repos whose
  basename omp normalizes (e.g. spaces) are still discovered
- SKILL.md: include omp sessions in the mandatory keyword rerun clause —
  omp session headers carry cwd but no git branch, same as Codex/Pi

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cd24249c82

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread skills/ce-compound/references/agents/session-historian.md Outdated
…pport

# Conflicts:
#	skills/ce-doc-review/references/walkthrough.md
Address PR EveryInc#1323 review feedback by updating the historian prompt's platform enum, cwd metadata, cross-tool synthesis guidance, and provenance header. Add a contract regression guard.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a7794e6b21

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread skills/ce-compound/scripts/session-history/discover-sessions.sh Outdated
omp 17.2.9 restored the legacy raw bucket naming (-<home-rel>,
-tmp-<rel>, --<abs>--) and removed automatic migration (#7646), so both
raw and hashed bucket shapes exist in the wild. Discovery globbed only
the sanitized basename, missing raw buckets whose basename contains
characters the hashed scheme normalizes (e.g. "my repo" in
--Users-test-Code-my repo--).

Add an exact raw-bucket probe for --cwd (canonicalized via physical
paths like omp's resolveEquivalentPath), a raw-basename glob alongside
the sanitized one, and awk dedup for buckets hit by both probe and
glob. Update docs/specs/omp.md for the restored naming scheme.
@tmchow

tmchow commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Thanks for this. The boundary you picked (no converter, no writer, no --to omp) seems right.

Before reviewing file by file, I went and read the omp source to check the install and update semantics, and I found one thing that changes what I want the README to recommend.

Our marketplace catalog has no version on the plugin entry, and omp's checkForUpdates() skips any catalog entry without one, so marketplace.autoUpdate never sees CE at all. Since this repo ships often, that is the difference between working once and staying current.

I have written up the full findings and a proposal in #1224 and asked @lustrousgorilla some questions there, since it affects the shape of the install story rather than any single line in this diff: #1224 (comment)

Short version of what would change here:

  • add .omp-plugin/marketplace.json with a release-managed version, which this PR currently declines. The cross-host-parity reasoning in docs/specs/omp.md does not match the repo, which already ships native catalogs for cursor, kimi, grok, devin, codex, and .agents/plugins/
  • lead the README with the marketplace flow instead of omp install <git-url>, and call out marketplace.autoUpdate: auto
  • correct the spec's causal claim. Skills load through the provider scan of the root skills/ directory. Our .pi/extensions/compound-engineering.ts is a no-op on omp, because resources_discover has no AgentSession callsites. The pi manifest still matters as the discovery gate
  • possibly split the ce-compound session-history work into its own PR, since omp's per-project bucket naming already churned in 17.2.9 and I would rather not block the install fix behind it

The --to all detection entry, the /skill:<name> rendering rule with its parity-test generalization, and the ask and task enumeration additions all look correct to me and I would keep them as they are.

Let's settle the questions in #1224 first, then I will do a proper review pass here.

# Conflicts:
#	skills/ce-commit/SKILL.md
Split out per maintainer request (EveryInc#1224): omp's session-bucket naming
is still moving (17.2.9 restored the raw scheme), so the install and
prose work here should not be blocked behind it.
omp's update checker skips catalog entries without a plugin-entry
version, so CE was invisible to omp plugin upgrade, the 24h catalog
refresh, and marketplace.autoUpdate. Ship .omp-plugin/marketplace.json
(omp's preferred catalog path, read ahead of the Claude copy when both
exist) with a version wired to the root release component via
extra-files jsonpath $.plugins[0].version, mirroring the existing
kimi/grok/devin native-catalog pattern. release:validate gains an omp
arm: plugin-list parity with the Claude catalog, version presence and
drift detection, and a co-located source check.

README now leads with the marketplace flow plus autoUpdate guidance
(notify mode only writes to the debug log), demoting omp install
<git-url> to pin-style and omp plugin link to contributor dev. The
target spec's causal claim is corrected: skills load via provider
scanning of the root skills/ directory; the pi manifest is the
discovery gate and an install-time validation risk, not the loader.
@caelaxie

caelaxie commented Aug 5, 2026

Copy link
Copy Markdown
Author

Reworked per the #1224 discussion (#1224 (comment)):

  1. Session-history split — moved to feat(ce-compound): recognize oh-my-pi (omp) session history #1333 (discovery, extraction, historian contract, fixtures, tests). This PR no longer touches ce-compound session history.
  2. .omp-plugin/marketplace.json — added with a release-managed plugin-entry version, wired to the root component via extra-files jsonpath + exclude-paths; release:validate arm (parity, version presence/drift, co-located source) + four test arms, mirroring the kimi/grok pattern.
  3. README re-lead — marketplace flow first with omp config set marketplace.autoUpdate auto (verified the default notify only logs); omp install <url> demoted to pin-style, omp plugin link to contributor dev, both in a collapsed block.
  4. Spec causal claim fixed — skills load via provider scan of root skills/; the pi manifest is the discovery gate + install-time validation risk, not the loader.

Full suite green: 2907 pass, 0 fail; release:validate in sync. PR body rewritten to match.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d21b20c4c7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

".cursor-plugin/marketplace.json",
".grok-plugin/marketplace.json"
".grok-plugin/marketplace.json",
".omp-plugin/marketplace.json"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove omp catalog from excluded paths

When a future PR changes only the omp catalog (for example, fixing the marketplace source or update metadata), release-please will ignore it for the root component because this path is excluded and there is no separate .omp-plugin package; that means the root extra-file version at $.plugins[0].version will not bump, so existing omp marketplace installs keep seeing the old plugin-entry version and will not receive the catalog-only fix. Keep this catalog in a releasable component, or add a dedicated component, rather than excluding it.

Useful? React with 👍 / 👎.

@tmchow

tmchow commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Reworked per the #1224 discussion (#1224 (comment)):

  1. Session-history split — moved to feat(ce-compound): recognize oh-my-pi (omp) session history #1333 (discovery, extraction, historian contract, fixtures, tests). This PR no longer touches ce-compound session history.
  2. .omp-plugin/marketplace.json — added with a release-managed plugin-entry version, wired to the root component via extra-files jsonpath + exclude-paths; release:validate arm (parity, version presence/drift, co-located source) + four test arms, mirroring the kimi/grok pattern.
  3. README re-lead — marketplace flow first with omp config set marketplace.autoUpdate auto (verified the default notify only logs); omp install <url> demoted to pin-style, omp plugin link to contributor dev, both in a collapsed block.
  4. Spec causal claim fixed — skills load via provider scan of root skills/; the pi manifest is the discovery gate + install-time validation risk, not the loader.

Full suite green: 2907 pass, 0 fail; release:validate in sync. PR body rewritten to match.

I said in my reply "Let's settle the questions in #1224 first, then I will do a proper review pass here." :) . Is your agent just working autonomously?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Proposal: add native oh-my-pi (omp) support

2 participants