Skip to content

feat: add oh-my-pi (omp) agent - #392

Open
amicara wants to merge 1 commit into
rivet-dev:mainfrom
qeel-ai:feat/omp-agent
Open

amicara wants to merge 1 commit into
rivet-dev:mainfrom
qeel-ai:feat/omp-agent

Conversation

@amicara

@amicara amicara commented Nov 9, 2026 •

Copy link
Copy Markdown

Adds oh-my-pi (omp) as a native agent. omp speaks ACP itself (omp acp), so it is wired like OpenCode: no registry adapter, just the binary and a launcher.

  • AgentId::Omp (omp), in all() and parse, and native-required, so install-agent omp installs the binary before the launcher.
  • install_omp: downloads the release binary for the platform from omp's GitHub releases (omp-linux-x64, omp-linux-musl-x64, omp-linux-arm64, omp-darwin-arm64, omp-darwin-x64, omp-windows-{x64,arm64}.exe); --agent-version pins a release, otherwise latest.
  • The fallback launcher execs omp acp.
  • support.rs: capabilities (plan mode, permissions, reasoning, MCP tools, images, streaming deltas); no fallback config options, since omp reports its models, modes and thinking levels in session/new.
  • Docs page agents/omp.mdx and sidebar entry; omp added to the native agents in v1_agent_process_matrix.

Tested: cargo test -p sandbox-agent-agent-management and cargo test -p sandbox-agent --test v1_agent_process_matrix pass. In a Dockerfile.full image built with this change, install-agent --all wrote agent_processes/omp-acp, and a session created through the TypeScript SDK with agent: "omp" ran a full turn: setModel, a prompt that called an HTTP MCP server passed in session/new, and a session/prompt response with token usage.

Not included: adding omp to Dockerfile.full's default installs. We run it in our own image with omp's tools.approvalMode: yolo, because unattended sessions have no one to answer permission requests; happy to add an install line if you want it in the full image.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-09T20:03:52.461409Z 2aa9064 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

omp speaks ACP natively (`omp acp`), so it is wired like OpenCode: a
native binary downloaded from its GitHub releases (version pinnable with
--agent-version) and a launcher that execs `omp acp`. omp reports its
own model, mode and thinking options from session/new.

@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: 2aa90646d1

ℹ️ 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".

install_opencode(&path, self.platform, options.version.as_deref())?
}
AgentId::Amp => install_amp(&path, self.platform, options.version.as_deref())?,
AgentId::Omp => install_omp(&path, self.platform, options.version.as_deref())?,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Mark omp as requiring a native binary

On a clean host without an omp binary, this installer is unreachable: AgentManager::install calls install_native only when native_required() is true, but that predicate still lists only Claude, Codex and OpenCode. Installation therefore reaches install_agent_process_fallback, which calls resolve_binary and returns BinaryNotFound instead of downloading omp; lazy installation fails the same way. Add Omp to native_required() and cover installation from an empty install directory.

Useful? React with 👍 / 👎.

});
```

`sandbox-agent install-agent omp` downloads the `omp` release binary from [GitHub](https://github.com/can1357/oh-my-pi/releases) (pin one with `--agent-version`) and runs it with `omp acp`, its native ACP mode. No adapter package is needed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Keep protocol internals out of the omp usage page

This agent-usage page describes the underlying ACP launch mode and adapter implementation, contrary to the Docs Terminology rules in sandbox-agent/AGENTS.md, which prohibit ACP terminology and protocol implementation details outside ACP-specific documentation. Keep this paragraph focused on installation and SDK usage, and move the protocol details to an ACP-specific reference.

AGENTS.md reference: sandbox-agent/AGENTS.md:L13-L15

Useful? React with 👍 / 👎.

]
})],
// omp returns its model, mode and thinking options from session/new.
AgentId::Omp => Vec::new(),

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 Supply omp metadata to the existing configuration consumers

Even with a preinstalled, authenticated omp, get_v1_agents and get_v1_agent populate configuration only from this function (router.rs:1603-1605,1718-1720); live probing remains disabled, so the Inspector cannot discover omp's models or modes. build_provider_payload_for_opencode also skips agents without a model option (support.rs:674-680), so omp is omitted from /opencode/provider despite its new list entry. Options returned by session/new do not populate either consumer. Provide fallback metadata or wire live configuration into these paths before returning an empty vector.

Useful? React with 👍 / 👎.

This branch has not been deployed

No deployments
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.

1 participant