Skip to content

feat: add first-class Oh My Pi support - #256

Closed
camopy wants to merge 5 commits into
compozy:mainfrom
camopy:feat/omp
Closed

camopy wants to merge 5 commits into
compozy:mainfrom
camopy:feat/omp

Conversation

@camopy

@camopy camopy commented Jul 20, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • register Oh My Pi (omp) as a distinct native ACP runtime without changing Pi
  • preserve OMP-owned model selection while applying Compozy reasoning and permission semantics
  • install skills into OMP project and active-profile roots across setup, preflight, and doctor flows
  • document the runtime and cover its catalog, execution, resume, setup, and public CLI contracts

Why

Oh My Pi exposes a native ACP server and profile-aware skill roots that differ from the existing Pi adapter. First-class support lets users run Compozy workflows through omp acp while preserving OMP's active model selection and leaving all existing Pi behavior unchanged.

Testing

  • make verify
  • 5,000 Go tests passed; 8 gated/helper tests skipped
  • 5 Playwright smoke tests passed
  • Go lint completed with 0 issues
  • manually executed an workflow task end to end with --ide omp --model auto --reasoning-effort medium

Summary by CodeRabbit

  • New Features
    • Added Oh My Pi (OMP) support across IDE selection, setup/installation/verification, and supported-agent discovery (including listings).
    • Enabled OMP execution with session resumption, tool-call routing, and permission handling, plus live end-to-end smoke coverage.
  • Bug Fixes
    • Improved bundled-skill preflight/refresh behavior for interactive flows and missing skill handling.
    • Refined model/reasoning configuration resolution and OMP session setup validation.
    • Improved permission “allow-once” selection behavior and added clearer failure handling for missing OMP runtime and unsupported reasoning effort.

@compozyrabbit

compozyrabbit Bot commented Jul 20, 2026 •

Copy link
Copy Markdown

Code Review Could Not Complete ⚠️

The review failed before suggestions could be generated.

Reason: The configured API key (openai) is out of credits or has hit its billing limit. Top up the account or adjust the plan.

After fixing the issue, comment @kody review on this PR to re-run the review.

Kody Guide: Usage and Configuration
Interacting with Kody
  • Request a Review: Ask Kody to review your PR manually by adding a comment with the @kody start-review command at the root of your PR.

  • Validate Business Logic: Ask Kody to validate your code against business rules by adding a comment with the @kody -v business-logic command.

  • Provide Feedback: Help Kody learn and improve by reacting to its comments with a 👍 for helpful suggestions or a 👎 if improvements are needed.

Current Kody Configuration
Review Options

The following review options are enabled or disabled:

Options Enabled
Bug ✅
Performance ✅
Security ✅
Business Logic ✅

Access your configuration settings here.

​

@coderabbitai

coderabbitai Bot commented Jul 20, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

This PR adds Oh My Pi as a supported runtime, including public identifiers, registry metadata, environment and installation resolution, ACP session configuration, CLI setup and execution flows, skill preflight handling, and persisted-session coverage.

Changes

Oh My Pi runtime integration

Layer / File(s) Summary
Runtime contracts and catalog registration
internal/core/model/constants.go, internal/core/agent/registry_specs.go, internal/core/api.go, compozy.go, internal/cli/form.go, internal/core/agent/tool_call_name.go
Adds Oh My Pi identifiers, default model metadata, omp acp registry commands, catalog entries, CLI guidance, and common ACP tool aliases.
Environment resolution and setup installation
internal/setup/*, internal/cli/setup.go, internal/cli/extension/doctor.go
Resolves OMP and PI profiles/configuration directories, exposes OMP as a setup agent, lists supported agents, and verifies installations.
ACP session configuration and client behavior
internal/core/agent/session_config.go, internal/core/agent/client.go, internal/core/agent/*_test.go
Propagates refreshed ACP options and covers OMP model defaults, reasoning validation, permissions, resume behavior, and live sessions.
CLI execution and skill preflight
internal/cli/root_command_execution_test.go, internal/cli/skills_preflight.go, internal/cli/skills_preflight_test.go
Adds OMP CLI execution and setup journeys, profile-aware bundled-skill refreshes, interactive missing-skill handling, and resolver snapshot reuse.
Persisted execution and ACP helper harness
internal/core/run/exec/*, internal/core/run/executor/execution_acp_integration_test.go
Tests OMP ACP arguments, workspace CWD propagation, streamed tool updates, setup failures, and persisted session loading.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

  • compozy/compozy#60: Provides the exec integration test foundation extended with OMP execution and resume scenarios.
  • compozy/compozy#70: Overlaps with the runtime registry and catalog infrastructure used for the OMP specification.

Suggested reviewers: pedronauck

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 1.60% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: adding first-class Oh My Pi support.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Jul 20, 2026 •

Copy link
Copy Markdown

Greptile Summary

This PR adds first-class Oh My Pi support throughout Compozy. The main changes are:

  • Registers omp acp as a distinct runtime without changing Pi.
  • Preserves OMP model selection while applying reasoning and permission settings.
  • Adds profile-aware OMP skill setup, preflight, verification, and doctor support.
  • Exposes OMP through the CLI and public Go API.
  • Adds runtime, setup, resume, and integration test coverage.
  • Documents OMP installation and execution behavior.

Confidence Score: 5/5

This looks safe to merge.

  • The updated setup flow preserves OMP profile and destination settings across verification and refresh.
  • Interactive runs remain blocked when required bundled skills are missing and refresh is declined.
  • Runtime coverage includes execution, resume, configuration, permissions, and missing-runtime behavior.
  • No blocking issue remains within the scope of this follow-up review.

Important Files Changed

Filename Overview
internal/core/agent/registry_specs.go Registers OMP as a separate native ACP runtime with its own command and capability settings.
internal/core/agent/session_config.go Adds OMP model and reasoning configuration for new and resumed sessions.
internal/setup/agents.go Adds project and active-profile skill roots for OMP while keeping Pi destinations separate.
internal/cli/skills_preflight.go Keeps skill verification, refresh, and re-verification on the same resolved destination.
internal/cli/setup.go Adds environment-aware OMP setup resolution and supported-agent listing output.

Reviews (2): Last reviewed commit: "docs: document Oh My Pi support" | Re-trigger Greptile

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
internal/setup/agents_test.go (1)

179-181: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Subtest names should use the Should... pattern. The new table/loop subtests label cases as "Traversal", "Absolute path", the profile string, and tt.name (e.g. "Default profile uses native root"). Renaming to the mandated t.Run("Should ...") form keeps these enforced-standard-compliant.

As per path instructions: "MUST use t.Run("Should...") pattern for ALL test cases".

Also applies to: 282-283, 356-358

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/setup/agents_test.go` around lines 179 - 181, Rename every subtest
case name in the affected tests to use the mandated “Should...” pattern,
including the loop labels “Traversal” and “Absolute path,” the profile-string
cases, and tt.name-based cases. Update the corresponding t.Run calls near the
referenced test sections while preserving each case’s existing behavior.

Source: Path instructions

internal/core/agent/session_config_test.go (1)

44-44: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Subtest names don't follow the mandated Should… pattern.

The subtest cases here ("empty model", "explicit auto") use free-form names. As per path instructions, test cases must use the t.Run("Should...") pattern for all test cases. This applies to the new OMP tests across this cohort.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/core/agent/session_config_test.go` at line 44, Update the subtest
names in the t.Run calls within the affected OMP tests to follow the mandated
“Should…” naming pattern, including the cases currently named “empty model” and
“explicit auto”; preserve each test’s existing behavior and assertions.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/core/agent/registry_test.go`:
- Around line 193-219: Enforce the required Should... test naming across all
affected sites: wrap the top-level test logic in t.Run subtests named with the
Should prefix in internal/core/agent/registry_test.go ranges 193-219, 1199-1230,
and 1616-1669, internal/cli/form_test.go ranges 56-91 and 794-821, and
test/public_api_test.go range 16-31; rename table-driven name fields in
internal/core/agent/registry_test.go range 411-427 and
internal/core/agent/tool_call_name_test.go range 77-83 to start with Should; and
prefix the dynamic t.Run name in internal/core/agent/registry_test.go range
449-460 with Should.

---

Nitpick comments:
In `@internal/core/agent/session_config_test.go`:
- Line 44: Update the subtest names in the t.Run calls within the affected OMP
tests to follow the mandated “Should…” naming pattern, including the cases
currently named “empty model” and “explicit auto”; preserve each test’s existing
behavior and assertions.

In `@internal/setup/agents_test.go`:
- Around line 179-181: Rename every subtest case name in the affected tests to
use the mandated “Should...” pattern, including the loop labels “Traversal” and
“Absolute path,” the profile-string cases, and tt.name-based cases. Update the
corresponding t.Run calls near the referenced test sections while preserving
each case’s existing behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: e0ab0955-1d22-434a-8b51-6882aa8070b1

📥 Commits

Reviewing files that changed from the base of the PR and between 00dba6a and da0dde0.

⛔ Files ignored due to path filters (4)
  • README.md is excluded by !**/*.md
  • skills/compozy/SKILL.md is excluded by !**/*.md
  • skills/compozy/references/cli-reference.md is excluded by !**/*.md
  • skills/compozy/references/config-reference.md is excluded by !**/*.md
📒 Files selected for processing (30)
  • compozy.go
  • internal/cli/extension/doctor.go
  • internal/cli/extension/doctor_test.go
  • internal/cli/form.go
  • internal/cli/form_test.go
  • internal/cli/root_command_execution_test.go
  • internal/cli/setup.go
  • internal/cli/setup_test.go
  • internal/cli/skills_preflight.go
  • internal/cli/skills_preflight_test.go
  • internal/core/agent/client_test.go
  • internal/core/agent/omp_live_test.go
  • internal/core/agent/registry_specs.go
  • internal/core/agent/registry_test.go
  • internal/core/agent/session_config.go
  • internal/core/agent/session_config_test.go
  • internal/core/agent/tool_call_name.go
  • internal/core/agent/tool_call_name_test.go
  • internal/core/api.go
  • internal/core/model/constants.go
  • internal/core/run/exec/exec_integration_test.go
  • internal/core/run/exec/test_helpers_test.go
  • internal/core/run/executor/execution_acp_integration_test.go
  • internal/setup/agents.go
  • internal/setup/agents_test.go
  • internal/setup/install_test.go
  • internal/setup/runtime_agents.go
  • internal/setup/types.go
  • internal/setup/verify_test.go
  • test/public_api_test.go

Comment thread internal/core/agent/registry_test.go
@compozyrabbit

compozyrabbit Bot commented Jul 21, 2026 •

Copy link
Copy Markdown

Code Review Could Not Complete ⚠️

The review failed before suggestions could be generated.

Reason: The configured API key (openai) is out of credits or has hit its billing limit. Top up the account or adjust the plan.

After fixing the issue, comment @kody review on this PR to re-run the review.

Kody Guide: Usage and Configuration
Interacting with Kody
  • Request a Review: Ask Kody to review your PR manually by adding a comment with the @kody start-review command at the root of your PR.

  • Validate Business Logic: Ask Kody to validate your code against business rules by adding a comment with the @kody -v business-logic command.

  • Provide Feedback: Help Kody learn and improve by reacting to its comments with a 👍 for helpful suggestions or a 👎 if improvements are needed.

Current Kody Configuration
Review Options

The following review options are enabled or disabled:

Options Enabled
Bug ✅
Performance ✅
Security ✅
Business Logic ✅

Access your configuration settings here.

​

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
internal/cli/root_command_execution_test.go (1)

1-1: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Wrap new OMP tests in t.Run("Should...") subtests.

All five new OMP test functions run their assertions directly in the top-level Test... function body instead of a t.Run("Should...", ...) subtest, which the path instructions for **/*_test.go require for every test case.

  • internal/cli/root_command_execution_test.go#L140-202: wrap TestExecCommandOMPCompletesThroughPublicDaemonPath's body in t.Run("Should complete exec through the public daemon path", func(t *testing.T) {...}).
  • internal/cli/root_command_execution_test.go#L204-227: wrap TestExecCommandOMPMissingRuntimeReportsNativeInstallGuidance's body in a t.Run("Should report native install guidance when omp is missing", ...) subtest.
  • internal/cli/root_command_execution_test.go#L229-266: wrap TestExecCommandOMPUnsupportedReasoningReportsAdvertisedChoices's body in a t.Run("Should report advertised reasoning choices when unsupported", ...) subtest.
  • internal/cli/root_command_execution_test.go#L268-310: wrap TestSetupCommandOMPProjectCopyJourney's body in a t.Run("Should install project skills via copy journey", ...) subtest.
  • internal/cli/root_command_execution_test.go#L312-381: wrap TestSetupCommandOMPNamedProfileGlobalCopyJourney's body in a t.Run("Should install global named-profile skills via copy journey", ...) subtest.

As per path instructions, "MUST use t.Run("Should...") pattern for ALL test cases."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/cli/root_command_execution_test.go` at line 1, Wrap the assertion
bodies of TestExecCommandOMPCompletesThroughPublicDaemonPath,
TestExecCommandOMPMissingRuntimeReportsNativeInstallGuidance,
TestExecCommandOMPUnsupportedReasoningReportsAdvertisedChoices,
TestSetupCommandOMPProjectCopyJourney, and
TestSetupCommandOMPNamedProfileGlobalCopyJourney in t.Run subtests using the
specified “Should...” descriptions, passing the subtest *testing.T to each body.
Preserve the existing test setup, assertions, and behavior.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@internal/cli/root_command_execution_test.go`:
- Line 1: Wrap the assertion bodies of
TestExecCommandOMPCompletesThroughPublicDaemonPath,
TestExecCommandOMPMissingRuntimeReportsNativeInstallGuidance,
TestExecCommandOMPUnsupportedReasoningReportsAdvertisedChoices,
TestSetupCommandOMPProjectCopyJourney, and
TestSetupCommandOMPNamedProfileGlobalCopyJourney in t.Run subtests using the
specified “Should...” descriptions, passing the subtest *testing.T to each body.
Preserve the existing test setup, assertions, and behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 9f2a1b0c-bc86-4954-bb55-f5c2a332ef6e

📥 Commits

Reviewing files that changed from the base of the PR and between da0dde0 and c9f3f52.

⛔ Files ignored due to path filters (4)
  • README.md is excluded by !**/*.md
  • skills/compozy/SKILL.md is excluded by !**/*.md
  • skills/compozy/references/cli-reference.md is excluded by !**/*.md
  • skills/compozy/references/config-reference.md is excluded by !**/*.md
📒 Files selected for processing (33)
  • compozy.go
  • internal/cli/extension/doctor.go
  • internal/cli/extension/doctor_test.go
  • internal/cli/form.go
  • internal/cli/form_test.go
  • internal/cli/root_command_execution_test.go
  • internal/cli/setup.go
  • internal/cli/setup_test.go
  • internal/cli/skills_preflight.go
  • internal/cli/skills_preflight_test.go
  • internal/core/agent/client.go
  • internal/core/agent/client_test.go
  • internal/core/agent/omp_live_test.go
  • internal/core/agent/registry_specs.go
  • internal/core/agent/registry_test.go
  • internal/core/agent/session_config.go
  • internal/core/agent/session_config_test.go
  • internal/core/agent/terminal_lifecycle_test.go
  • internal/core/agent/tool_call_name.go
  • internal/core/agent/tool_call_name_test.go
  • internal/core/api.go
  • internal/core/model/constants.go
  • internal/core/run/exec/exec_integration_test.go
  • internal/core/run/exec/test_helpers_test.go
  • internal/core/run/executor/execution_acp_integration_test.go
  • internal/setup/agents.go
  • internal/setup/agents_test.go
  • internal/setup/install_test.go
  • internal/setup/legacy_cleanup.go
  • internal/setup/runtime_agents.go
  • internal/setup/types.go
  • internal/setup/verify_test.go
  • test/public_api_test.go
🚧 Files skipped from review as they are similar to previous changes (26)
  • internal/setup/runtime_agents.go
  • compozy.go
  • internal/core/agent/tool_call_name.go
  • internal/core/api.go
  • internal/core/model/constants.go
  • internal/core/agent/registry_specs.go
  • internal/cli/form.go
  • internal/cli/form_test.go
  • internal/core/agent/tool_call_name_test.go
  • internal/cli/skills_preflight_test.go
  • internal/core/run/exec/exec_integration_test.go
  • internal/core/agent/omp_live_test.go
  • internal/setup/agents.go
  • internal/setup/types.go
  • internal/setup/verify_test.go
  • internal/cli/skills_preflight.go
  • internal/core/agent/client_test.go
  • internal/cli/setup.go
  • test/public_api_test.go
  • internal/core/run/executor/execution_acp_integration_test.go
  • internal/cli/extension/doctor_test.go
  • internal/cli/extension/doctor.go
  • internal/core/run/exec/test_helpers_test.go
  • internal/cli/setup_test.go
  • internal/core/agent/registry_test.go
  • internal/core/agent/session_config.go

@pedronauck

Copy link
Copy Markdown
Member

Closing as part of the CompozyOS v0.3 reset.

Compozy was rebuilt from the ground up as CompozyOS — an agent operating system. main was replaced by the v0.3 rewrite, and the first beta (v0.3.0-beta.1) is landing through the beta release channel — so this diff no longer applies to the current codebase. The 0.2.x line this PR targets is preserved on the legacy/v0.2 branch and only receives critical patches.

If you would like this capability in CompozyOS, please reopen it against the new architecture — happy to help route it.

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.

2 participants