omnigent-rovo
Community harness plugin that brings Atlassian Rovo Dev to Omnigent as a first-class harness.
The plugin drives Rovo through its ACP (Agent Client Protocol) server over
stdio using rovo acp. The terminal command rovo legacy is a separate
plain-text interface; it is not the ACP transport and is not used by this plugin.
Older installations can explicitly select acli rovodev acp by setting
HARNESS_ROVO_ACLI_PATH=acli.
See release notes and migration details for version 0.2.0.
Quick start
# Install both packages
uv pip install omnigent omnigent-rovo
# Or with pip
pip install omnigent omnigent-rovo
Once installed, Omnigent automatically discovers the plugin and makes rovo available as a harness:
# agent.yaml
harness: rovo
Verifying the installation
After installing both packages, confirm the plugin is detected:
python -c "
from omnigent.harness_plugins import plugin_state, harness_aliases, harness_labels
state = plugin_state()
print('Contributions:', [c.name for c in state.contributions])
print('rovo alias:', harness_aliases().get('rovo'))
print('Label:', harness_labels().get('rovo-cli'))
"
Expected output:
Contributions: ['omnigent', 'omnigent-rovo']
rovo alias: rovo-cli
Label: Rovo Dev
If omnigent-rovo does not appear in the list, make sure both packages are installed in the same Python environment.
Prerequisites
- Install a Rovo CLI build that supports
rovo acpand ensurerovois onPATH. - Run
rovo auth loginusing an account with Rovo access. - Verify
rovo auth statusandrovo acp --help.
For an older acli installation, set HARNESS_ROVO_ACLI_PATH=acli and use
acli rovodev auth login / acli rovodev auth status instead. Omnigent's setup
metadata describes the default rovo launcher; configure and authenticate the
older launcher manually.
Migrating from 0.1.0
The default launch command changes from acli rovodev acp to rovo acp.
Rovo uses its own authentication and default configuration (~/.rovo/config.yml).
Existing users who need the old launch command must set HARNESS_ROVO_ACLI_PATH.
Do not set both launcher paths.
Headless sessions default ROVO_UPGRADE_MODE to off so an automatic CLI update
cannot stall the ACP handshake. Upgrade Rovo explicitly outside Omnigent.
ACP startup defaults to a 120-second deadline; prompt turns default to 600 seconds.
Configuration
The harness reads configuration from environment variables (set automatically by the Omnigent runner, or manually for standalone use):
| Variable | Description | Default |
|---|---|---|
HARNESS_ROVO_MODEL |
Model display name, e.g. "Claude Sonnet 4.6" |
Rovo's default |
HARNESS_ROVO_CWD |
Working directory for the Rovo Dev subprocess | Current directory |
HARNESS_ROVO_PATH |
Path to the rovo binary |
rovo from PATH |
HARNESS_ROVO_ACLI_PATH |
Opt into acli rovodev acp; mutually exclusive with HARNESS_ROVO_PATH |
Unset |
HARNESS_ROVO_CONFIG_FILE |
Rovo Dev --config-file path |
~/.rovo/config.yml (or ~/.rovodev/config.yml with acli) |
HARNESS_ROVO_STARTUP_TIMEOUT |
ACP startup deadline in seconds (increase for slow MCP integrations) | 120 |
HARNESS_ROVO_SITE_URL |
Rovo Dev --site-url value |
None |
See Manage Rovo Dev CLI settings for details on the configuration file format.
How it works
This plugin registers itself via Python's entry points mechanism:
# pyproject.toml
[project.entry-points."omnigent.community.harness"]
rovo = "omnigent.community.harness.rovo.plugin:get_contribution"
At startup, Omnigent's plugin registry discovers all packages in the omnigent.community.harness entry point group and merges their contributions into the harness registry. This means:
rovoandrovo-clibecome valid harness names- The Rovo executor and ACP client are loaded on demand
- Model overrides via
/modelwork seamlessly
Development
# Clone the repo
git clone https://github.com/shbhmrzd/omnigent-rovo.git
cd omnigent-rovo
# Create a virtual environment
uv venv
source .venv/bin/activate
# Install in editable mode (with omnigent as a dependency)
uv pip install -e ".[dev]"
# Run the test suite
python -m pytest
# Run with verbose output
python -m pytest -v
Test structure
| Path | Covers |
|---|---|
tests/test_plugin.py |
Plugin registration (get_contribution) |
tests/test_acp_client.py |
ACP client — command building, JSON-RPC dispatch, permission auto-allow |
tests/test_rovo_executor.py |
Executor — message parsing, update translation, session lifecycle, run_turn |
tests/test_rovo_harness.py |
Harness entry point — env var config, create_app() |
The suite imports the real Omnigent core and builds the real FastAPI application. It includes subprocess transport tests for streaming, session reuse, and messages over 64 KiB, plus failure, timeout, cancellation, and installation regressions.
Run the live release evaluations after authenticating Rovo:
ROVO_UPGRADE_MODE=off RUN_ROVO_LIVE_EVALS=1 python -m pytest tests/test_live_rovo.py -v
These opt-in tests consume model usage. They use temporary workspaces to verify an actual file edit with independent Python assertions, multi-turn memory, and the real Omnigent harness runner's HTTP streaming response. They do not judge success from the model's own claim that it completed the task. The HTTP evaluation uses Omnigent's session-events API (tested with 0.9.0 and 0.15.0).
License
MIT
Release files for omnigent-rovo 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| omnigent_rovo-0.2.0.tar.gz | 26.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| omnigent_rovo-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 43.5 kB
Release files / omnigent_rovo-0.2.0.tar.gz
| Download URL | omnigent_rovo-0.2.0.tar.gz |
|---|---|
| Size | 26.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
67670e47f87aa9af4c188e1ff6986883f16530eed212d33d03ce1cf180c8d05f
|
|
BLAKE2b-256 checksum How to use checksums |
f7359f4ee50b0d8f4c619f5837b6aea53698003766ca794ff7374c9b0639e51d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logRelease files / omnigent_rovo-0.2.0-py3-none-any.whl
| Download URL | omnigent_rovo-0.2.0-py3-none-any.whl |
|---|---|
| Size | 17.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
521432dde8ac7e62b3f607f80485a5afce38eed922f1711ae41ecc6f62ae82f0
|
|
BLAKE2b-256 checksum How to use checksums |
b7d585d99b9b236b060f2f177715e5ab9fd27c637dd3bdf8e42ee4b534d15822
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency log