Skip to content

feat(tools): add Atlassian Rovo Dev CLI as a first-class tool - #1516

Merged
clay-good merged 3 commits into
mainfrom
feat/rovodev-tool
Aug 5, 2026
Merged

feat(tools): add Atlassian Rovo Dev CLI as a first-class tool#1516
clay-good merged 3 commits into
mainfrom
feat/rovodev-tool

Conversation

@clay-good

@clay-good clay-good commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Status

Ready for review. Closes #212.

What was missing / the motivation

Atlassian's Rovo Dev CLI was not a selectable tool in openspec init — users could only wire it up through the generic "Shared .agents skills" fallback. But Rovo Dev natively loads project Agent Skills from .rovodev/skills/<name>/SKILL.md (Atlassian docs), which is exactly the SKILL.md format (name/description frontmatter + markdown body) OpenSpec already generates. So the integration works — it just wasn't first-class.

What it does

Registers rovodev as a named, selectable tool. Because Rovo has no slash-command surface, it's an adapterless skills-only tool (same pattern as CodeArts / ForgeCode / Hermes) — OpenSpec installs .rovodev/skills/openspec-*/SKILL.md and generates no command files. No special-casing in the command layer: adapterless + non-codex already resolves to skills-only via resolveCommandSurfaceCapability.

  • src/core/config.ts — new AI_TOOLS entry (skillsDir: '.rovodev', detection on .rovodev/skills).
  • docs/supported-tools.md — Tool Directory Reference row.
  • test/core/init.test.ts — mirrors the existing CodeArts skills-only test: asserts .rovodev/skills/openspec-explore/SKILL.md is created, no .rovodev/commands dir, and the "Commands skipped for: rovodev (no adapter)" notice.

Proof it works

npm run build clean. openspec init --tools rovodev installs the skills and prints Created: Rovo Dev CLI. Relevant suites green: init.test.ts, cli-e2e/basic.test.ts (dynamic tool-id list picks up rovodev), available-tools.test.ts, tool-detection.test.ts — 187 passing including the new case.

Notes / nits

  • Skills-only by design: Rovo exposes skills, not slash commands, so command generation is intentionally skipped (documented in the tools table).
  • The earlier close of Is there support for Atlassian's RovoDev? #212 leaned on the deprecated AGENTS.md mechanism; that comment was corrected and the issue reopened, and this PR is the first-class fix.

Summary by CodeRabbit

  • New Features
    • Added support for the Rovo Dev CLI as a skills-only integration.
    • Skills are configured under .rovodev/skills.
    • The tool is automatically detected through supported configuration paths.
    • Skill guidance now uses natural-language instructions instead of unsupported slash commands.
  • Documentation
    • Added Rovo Dev CLI to the supported tools directory.

Rovo Dev CLI loads project Agent Skills from `.rovodev/skills/<name>/SKILL.md`
(Atlassian docs), the same SKILL.md format OpenSpec generates. It was usable
only via the generic "Shared .agents skills" fallback; this makes it a named,
selectable target in `openspec init`.

Rovo has no slash-command surface, so it is registered as an adapterless
skills-only tool (like CodeArts/ForgeCode/Hermes) — no command adapter.

Closes #212

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@clay-good
clay-good requested a review from a team as a code owner August 5, 2026 15:57
@clay-good
clay-good requested review from TabishB and removed request for a team August 5, 2026 15:57
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Rovo Dev is added as a skills-only tool. Configuration defines its skills and detection paths. Reference conversion produces natural-language skill instructions, and initialization tests verify generation and messaging.

Changes

Rovo Dev integration

Layer / File(s) Summary
Rovo Dev registration and skill generation
src/core/config.ts, docs/supported-tools.md, test/core/init.test.ts
Registers Rovo Dev with .rovodev skills and detection paths. Documents the skills-only integration. Tests skill creation without command generation.
Natural-language skill references
src/utils/command-references.ts, src/core/init.ts, test/utils/command-references.test.ts
Converts known /opsx:<command> references into natural-language skill phrases for Rovo Dev. Preserves unknown references and updates startup hints and tests.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

Suggested reviewers: tabishb, alfred-openspec

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes adding Atlassian Rovo Dev CLI as a supported first-class tool.
Linked Issues check ✅ Passed The changes satisfy issue #212 by adding Rovo Dev support and installing OpenSpec skills in its .rovodev/skills directory.
Out of Scope Changes check ✅ Passed The documentation, configuration, initialization logic, and tests directly support the Rovo Dev integration objective.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/rovodev-tool

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.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 5, 2026

Copy link
Copy Markdown

Deploying openspec-docs with  Cloudflare Pages  Cloudflare Pages

Latest commit: b07d5d5
Status: ✅  Deploy successful!
Preview URL: https://6ec592b5.openspec-docs.pages.dev
Branch Preview URL: https://feat-rovodev-tool.openspec-docs.pages.dev

View logs

@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

🤖 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 `@test/core/init.test.ts`:
- Line 543: Remove the duplicate rovoLogCalls const declaration within the
affected it() callback in test/core/init.test.ts, keeping a single declaration
and preserving its existing usage.
🪄 Autofix

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 Plus

Run ID: f2f2e48c-fe39-4874-b819-95c88da95479

📥 Commits

Reviewing files that changed from the base of the PR and between 96a6548 and f1f7412.

📒 Files selected for processing (3)
  • docs/supported-tools.md
  • src/core/config.ts
  • test/core/init.test.ts

Comment thread test/core/init.test.ts
const commandsDir = path.join(testDir, '.rovodev', 'commands');
expect(await directoryExists(commandsDir)).toBe(false);

const rovoLogCalls = (console.log as unknown as { mock: { calls: unknown[][] } }).mock.calls.flat().map(String);

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.

🎯 Functional Correctness | 🔴 Critical | ⚡ Quick win

Remove the duplicate rovoLogCalls declaration.

The snippet declares const rovoLogCalls twice inside the same it() callback at Line 543. TypeScript rejects the second declaration, so test/core/init.test.ts cannot compile. Keep one declaration.

🤖 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 `@test/core/init.test.ts` at line 543, Remove the duplicate rovoLogCalls const
declaration within the affected it() callback in test/core/init.test.ts, keeping
a single declaration and preserving its existing usage.

@alfred-openspec alfred-openspec left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Requesting changes because Rovo Dev CLI does not expose skills as /<skill-name> commands. Atlassian documents automatic matching or prompts such as “Use the code-review skill,” with /skills only for management. A real init --tools rovodev currently prints /openspec-propose and writes many /openspec-* handoffs, so users hit dead commands. Please add a Rovo-specific natural-language skill-reference path, update the tools table/getting-started hint, and test the generated Rovo output for no unsupported slash invocations.

… commands

Rovo Dev CLI has no slash-command surface — it matches skills
automatically or by prompt, and `/skills` only manages them. The
generated skills and the getting-started hint still advertised
`/openspec-*` slash commands (18 references across the skill bodies plus
the "Start your first change" hint), so every one was a dead command.

Adds a natural-language skill-reference path for no-slash tools:
`/opsx:<id>` now renders as "the openspec-<skill> skill" for rovodev, in
both skill bodies and the init hint. Other tools are unchanged.

- src/utils/command-references.ts: NATURAL_LANGUAGE_SKILL_TOOLS +
  usesNaturalLanguageSkillReferences(); getSkillReferenceTransformer
  returns the prose transformer for rovodev.
- src/core/init.ts: phrase the skills-only hint as an instruction for
  no-slash tools ("ask Rovo Dev CLI to use the openspec-propose skill…").
- docs/supported-tools.md: correct the Rovo row (was "use skill-based
  /openspec-* invocations").
- tests: assert generated Rovo skills contain no /openspec-* or /opsx
  slash tokens, the hint advertises no dead command, and the transformer
  emits prose.

Addresses alfred-openspec review on #1516.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@clay-good

Copy link
Copy Markdown
Collaborator Author

Pushed b07d5d5 addressing the reviews.

@alfred-openspec — no more dead commands. You were right: Rovo has no slash surface, yet the generated skills (18 /openspec-* references) and the getting-started hint were all telling users to type commands the CLI never registers.

Added a natural-language skill-reference path for no-slash tools:

  • /opsx:<id> now renders as "the openspec-<skill> skill" for rovodev — in both skill bodies and the init hint. Other tools are untouched (NATURAL_LANGUAGE_SKILL_TOOLS = ['rovodev']).
  • Getting-started hint now reads: Start your first change: ask Rovo Dev CLI to use the openspec-propose skill with "your idea".
  • Docs table row corrected (was "use skill-based /openspec-* invocations").
  • Tests assert the generated Rovo output contains zero /openspec-* or /opsx slash tokens, the hint advertises no dead command, and the transformer emits prose.

Verified against a real init --tools rovodev: 0 slash references remain.

@coderabbitai — the flagged duplicate rovoLogCalls declaration isn't present; test/core/init.test.ts has a single declaration in that it() block, so no change was needed there.

The earlier macOS CI red was an unrelated flaky timeout in store-references.test.ts (10s per-test limit on the slow runner); re-run already passed.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

git show --stat --oneline --decorate --no-renames b07d5d50
git diff b07d5d50^ b07d5d50 -- \
  src/core/config.ts \
  src/core/init.ts \
  docs/supported-tools.md \
  test/core/init.test.ts

printf '\n--- relevant symbols and Rovo assertions ---\n'
rg -n -C 5 \
  'NATURAL_LANGUAGE_SKILL_TOOLS|rovoLogCalls|rovodev|opsx:|openspec-' \
  src test docs \
  -g '*.ts' -g '*.md'

printf '\n--- declaration count in init test ---\n'
rg -n -P '^\s*(const|let|var)\s+rovoLogCalls\b' test/core/init.test.ts

Length of output: 200799


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- commit files ---'
git diff-tree --no-commit-id --name-only -r b07d5d50

printf '%s\n' '--- commit patch ---'
git show --format=fuller --no-ext-diff --unified=35 b07d5d50 -- \
  src/core/init.ts \
  src/core/command-references.ts \
  src/core/config.ts \
  docs/supported-tools.md \
  test/core/init.test.ts

printf '%s\n' '--- transformer definition and use sites ---'
rg -n -C 12 \
  'NATURAL_LANGUAGE_SKILL_TOOLS|usesNaturalLanguageSkillReferences|getSkillReferenceTransformer' \
  src test

printf '%s\n' '--- Rovo init test block ---'
sed -n '515,585p' test/core/init.test.ts

Length of output: 51595


@clay-good Confirmed. The Rovo transformer applies only to rovodev. The generated skill tests reject both /openspec-* and /opsx tokens. The init hint uses the natural-language skill reference.

I also confirmed that test/core/init.test.ts has one rovoLogCalls declaration in the Rovo test block. My duplicate-declaration finding was incorrect. I withdraw it.


✏️ Learnings added
Learnt from: clay-good
URL: https://github.com/Fission-AI/OpenSpec/pull/1516

Timestamp: 2026-08-05T16:34:42.294Z
Learning: In `test/core/init.test.ts`, the Rovo Dev CLI initialization test has one `rovoLogCalls` declaration within its `it('should support Rovo Dev CLI as an adapterless skills-only tool', ...)` block. Do not report it as a duplicate declaration.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

You are interacting with an AI system.

@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.

♻️ Duplicate comments (1)
test/core/init.test.ts (1)

562-562: 🎯 Functional Correctness | 🔴 Critical

Remove the duplicate rovoLogCalls declaration.

Line 562 declares const rovoLogCalls twice in the same test callback. TypeScript rejects the second declaration, so test/core/init.test.ts cannot compile. Keep one declaration.

🤖 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 `@test/core/init.test.ts` at line 562, Remove the duplicate rovoLogCalls
declaration in the affected test callback, keeping a single const declaration
and preserving its existing use.
🤖 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.

Duplicate comments:
In `@test/core/init.test.ts`:
- Line 562: Remove the duplicate rovoLogCalls declaration in the affected test
callback, keeping a single const declaration and preserving its existing use.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: ee4ac0f3-e96b-4e30-a0be-62f6670938a8

📥 Commits

Reviewing files that changed from the base of the PR and between f1f7412 and b07d5d5.

📒 Files selected for processing (5)
  • docs/supported-tools.md
  • src/core/init.ts
  • src/utils/command-references.ts
  • test/core/init.test.ts
  • test/utils/command-references.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/supported-tools.md

@alfred-openspec alfred-openspec left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Looks good. The natural-language skill-reference path is clean — zero slash tokens in the generated Rovo output, hint reads correctly, transformer is scoped to rovodev only. CI green on Linux + macOS, Windows still running but the change doesn't touch platform-specific code.

@clay-good
clay-good added this pull request to the merge queue Aug 5, 2026
Merged via the queue into main with commit 13e213e Aug 5, 2026
18 checks passed
@clay-good
clay-good deleted the feat/rovodev-tool branch August 5, 2026 17:16
pull Bot pushed a commit to Little-Star888/OpenSpec that referenced this pull request Aug 5, 2026
…ission-AI#1518)

* chore(release): add catch-up changeset for Rovo, Codex dir, status

Cover three user-facing PRs that merged without changesets so they
appear in the v1.8.0 CHANGELOG:

- Fission-AI#1516 Atlassian Rovo Dev CLI (new tool)
- Fission-AI#1511 Codex skills move to shared .agents directory
- Fission-AI#1505 openspec status separates planning from implementation

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(release): correct isPlanningComplete wording in changeset

Skipped planning artifacts count as satisfied without being written; say
"every non-skipped planning artifact exists" to match the CLI and
agent-contract docs (alfred/CodeRabbit review).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
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.

Is there support for Atlassian's RovoDev?

2 participants