Rovo Dev harness plugin for Omnigent — drives Atlassian Rovo Dev via its ACP server.
Project description
omnigent-rovo
Community harness plugin that brings Atlassian Rovo Dev to Omnigent as a first-class harness.
Rovo Dev is an AI-powered development agent that runs in your terminal via the Atlassian CLI (acli). It can generate, review, and refactor code, analyze codebases, write documentation, debug issues, create tests, and integrates with Jira and Confluence — all from the command line.
This plugin drives Rovo Dev via its ACP (Agent Client Protocol) server mode (acli rovodev acp) over stdio — no tmux terminal needed.
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
- Rovo Dev subscription — Rovo Dev CLI requires a paid Rovo Dev Standard subscription (not available during trial)
- Atlassian CLI (
acli) — install or update to the latest version following the official setup guide for your OS (macOS, Linux, or Windows) - Authenticate — run
acli rovodev auth loginand complete the browser flow (or use a scoped API token) - Verify — run
acli rovodev auth statusto confirm you're logged in
📖 For full usage documentation, see Use Rovo Dev CLI and Rovo Dev CLI commands.
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_ACLI_PATH |
Absolute path to the acli binary |
acli from PATH |
HARNESS_ROVO_CONFIG_FILE |
Rovo Dev --config-file path |
~/.rovodev/config.yml |
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 .
# Run the test suite
uv run pytest
# Run with verbose output
uv run pytest -v
Test structure
| Path | Covers |
|---|---|
tests/conftest.py |
Lightweight stubs for omnigent core types so tests run without the full core installed |
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() |
Publishing to PyPI
First-time setup
- Create a PyPI account at https://pypi.org/account/register/
- Create an API token at https://pypi.org/manage/account/token/
- Scope: "Entire account" (for the first upload), or project-specific after the first release
- Configure your token — create/edit
~/.pypirc:[pypi] username = __token__ password = pypi-YOUR_TOKEN_HERE
Building and publishing
# Install build tools
uv pip install build twine
# Build the package
python -m build
# This creates:
# dist/omnigent_rovo-0.1.0-py3-none-any.whl
# dist/omnigent_rovo-0.1.0.tar.gz
# Upload to Test PyPI first (recommended for first release)
twine upload --repository testpypi dist/*
# Verify the test release works
uv pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ omnigent-rovo
# Upload to production PyPI
twine upload dist/*
Using a Trusted Publisher (recommended for GitHub repos)
Instead of API tokens, you can set up Trusted Publishing with GitHub Actions:
-
Add a new pending publisher:
- PyPI project name:
omnigent-rovo - Owner:
shbhmrzd - Repository:
omnigent-rovo - Workflow name:
publish.yml - Environment:
pypi
- PyPI project name:
-
Create
.github/workflows/publish.ymlin your repo:name: Publish to PyPI on: release: types: [published] jobs: publish: runs-on: ubuntu-latest environment: pypi permissions: id-token: write steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - run: pip install build - run: python -m build - uses: pypa/gh-action-pypi-publish@release/v1
-
Create a GitHub release → the workflow auto-publishes to PyPI.
Version bumps
Update the version in pyproject.toml:
[project]
version = "0.2.0"
Then build and publish as above.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file omnigent_rovo-0.1.0.tar.gz.
File metadata
- Download URL: omnigent_rovo-0.1.0.tar.gz
- Upload date:
- Size: 22.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d5b75220301e62d571019ff3ffdc3cdb20717f4bddb75ff0d860b0541d44a53
|
|
| MD5 |
937ad28c0a5878f52ed61ddf94329ad6
|
|
| BLAKE2b-256 |
e5f5f79433cfd5f7ae7f631d780b411875faf15235e6434ec441cbaa3e5a26ca
|
File details
Details for the file omnigent_rovo-0.1.0-py3-none-any.whl.
File metadata
- Download URL: omnigent_rovo-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a333fb55ae56e1f0fe3df8325d7a6507728cf494d693e225d393d8f08fdda18
|
|
| MD5 |
852f660837a713588640f2fbe76f0d70
|
|
| BLAKE2b-256 |
57c193280f3a4acad9b2b88c8af0afe94021e2741f8786656d84c8329becdc34
|