feat(tools): add Atlassian Rovo Dev CLI as a first-class tool - #1516
Conversation
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>
📝 WalkthroughWalkthroughRovo 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. ChangesRovo Dev integration
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
Deploying openspec-docs with
|
| 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 |
There was a problem hiding this comment.
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
📒 Files selected for processing (3)
docs/supported-tools.mdsrc/core/config.tstest/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); |
There was a problem hiding this comment.
🎯 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
left a comment
There was a problem hiding this comment.
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>
|
Pushed b07d5d5 addressing the reviews. @alfred-openspec — no more dead commands. You were right: Rovo has no slash surface, yet the generated skills (18 Added a natural-language skill-reference path for no-slash tools:
Verified against a real @coderabbitai — the flagged duplicate The earlier macOS CI red was an unrelated flaky timeout in |
|
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.tsLength 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.tsLength of output: 51595
I also confirmed that ✏️ Learnings added
You are interacting with an AI system. |
There was a problem hiding this comment.
♻️ Duplicate comments (1)
test/core/init.test.ts (1)
562-562: 🎯 Functional Correctness | 🔴 CriticalRemove the duplicate
rovoLogCallsdeclaration.Line 562 declares
const rovoLogCallstwice in the same test callback. TypeScript rejects the second declaration, sotest/core/init.test.tscannot 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
📒 Files selected for processing (5)
docs/supported-tools.mdsrc/core/init.tssrc/utils/command-references.tstest/core/init.test.tstest/utils/command-references.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- docs/supported-tools.md
alfred-openspec
left a comment
There was a problem hiding this comment.
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.
…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>
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 theSKILL.mdformat (name/description frontmatter + markdown body) OpenSpec already generates. So the integration works — it just wasn't first-class.What it does
Registers
rovodevas 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.mdand generates no command files. No special-casing in the command layer: adapterless + non-codex already resolves to skills-only viaresolveCommandSurfaceCapability.src/core/config.ts— newAI_TOOLSentry (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.mdis created, no.rovodev/commandsdir, and the "Commands skipped for: rovodev (no adapter)" notice.Proof it works
npm run buildclean.openspec init --tools rovodevinstalls the skills and printsCreated: Rovo Dev CLI. Relevant suites green:init.test.ts,cli-e2e/basic.test.ts(dynamic tool-id list picks uprovodev),available-tools.test.ts,tool-detection.test.ts— 187 passing including the new case.Notes / nits
AGENTS.mdmechanism; that comment was corrected and the issue reopened, and this PR is the first-class fix.Summary by CodeRabbit
.rovodev/skills.