I've built a Rovo agent for our internal IT Service Desk (JSM Cloud). Users interact with it in Slack and on the help center portal. The intended flow is: greet → check for known outages → troubleshoot using our Confluence IT knowledge base → if unresolved or the user asks for a human, create a ticket via the "Raise a request" skill → set expectations (SLA) → ask a quick CSAT question → close.
The problem is inconsistent behavior across conversations. Common symptoms:
- Sometimes it asks the CSAT/feedback question before creating the ticket instead of after.
- Occasionally it calls skills I don't want it to use, or attempts to call a skill more than once (risking duplicate tickets).
- Sometimes it skips the structured description format I require, or leaves troubleshooting context out of the ticket.
- Ordering of steps (create ticket → set expectations → CSAT) isn't reliably followed.
My current instruction set is very long (single large prompt, ~25 sections) and I've tried to fix each failure by adding more explicit rules, forbidden phrases, and repeated "NEVER do X" warnings. It hasn't made behavior more consistent.
Questions:
- What's the recommended way to structure instructions for a multi-step JSM support agent — core instructions vs. subagents? Should the "troubleshoot" phase and the "create ticket" phase be separate subagents?
- Is enforcing strict step ordering (e.g. "always create the ticket before asking for feedback") something instructions can do reliably, or should parts of this be handled by JSM automation instead?
- How should I control which skills the agent can call? Is it better to remove skills at the agent config level than to forbid them in the prompt?
- Any best practices for the Slack surface specifically, and for keeping the "Raise a request" call to exactly once?
- General advice on debugging/evaluating agent responses when behavior varies run-to-run?
Any example instruction patterns for a JSM self-service agent would be hugely appreciated. Thanks!