Rovo Agent action fails when added to existing Forge app

Hi Atlassian team/community,

I’m having an issue with a Rovo Agent Action in an existing Forge app and would appreciate some help debugging it.

Problem

I created a Rovo Agent using the official Hello World tutorial:

Build a Hello World Rovo Agent

The Agent itself works correctly.

However, when I add a Forge action to the Agent, Rovo responds with:

I wasn’t able to generate a response. Please try again.

Important observation

I performed an isolation test.

1. Rovo Agent without an action

The Agent responds normally:

Hello Shubham! I’m your Rovo Agent, here to help you build your first Forge Agent.

So the Agent registration, prompt, deployment, and Rovo environment appear to be working.

2. Rovo Agent with the action

As soon as I add:

actions:
  - hello-world-logger

Rovo returns:

I wasn't able to generate a response. Please try again.

My action

action:
  - key: hello-world-logger
    name: hello world logger
    function: messageLogger
    actionVerb: TRIGGER
    description: >
      When a user asks to log a message, this action logs the message to the
      Forge logs.
    inputs:
      message:
        title: Message
        type: string
        required: true
        description: The message that the user has requested be logged to Forge logs

The function is:

function:
  - key: messageLogger
    handler: index.messageLogger

And the implementation is:

export function messageLogger(payload, context) {
  console.log("ROVO ACTION INVOKED");
  console.log("PAYLOAD:", JSON.stringify(payload));
  console.log("CONTEXT:", JSON.stringify(context));

  return `Successfully logged message: ${payload.message}`;
}

What I have already tried

  • Returned a string instead of an object from the action function.
  • Added read:chat:rovo to the permissions.
  • Ran forge lint — no issues.
  • Deployed successfully using:
forge deploy -e development
  • Upgraded/reinstalled the development installation.
  • Tested with a new Rovo conversation.
  • Explicitly asked the Agent to invoke the action.
  • Checked forge logs -e development.
  • There are no logs from messageLogger, which makes me think the Forge function isn’t being invoked at all.

Existing application

The existing app is a fairly large Forge application containing multiple Jira dashboard gadgets, a shared resolver, lifecycle functions, and other Forge modules.

It also contains this:

app:
  connect:
    key: sample-key-example

The app was originally based on a Connect app and later moved to Forge.

I have also tried moving the Rovo action function into a separate file so that it doesn’t share the existing resolver code, but the same error occurs.

Question

Could there be something in an existing Forge app’s manifest/configuration — especially a Forge + Connect hybrid app or another module configuration — that prevents a rovo:agent action from invoking its Forge function?

What would be the best way to debug why the Rovo action invocation fails before the Forge function is executed?

Any guidance on what logs, invocation IDs, Developer Console diagnostics, or manifest settings I should check would be greatly appreciated.

Thanks!

Hi Shubham,

Before you dig further into the Connect side, your two action settings are the exact pair that came up in an earlier thread with the same symptom. actionVerb: TRIGGER with required: true on the input, agent answers fine until the action is attached, no invocation logs at all.

Ibuchanan’s suggestion there was to set the inputs to required: false and the verb to GET, and the reporter confirmed the agent started calling the function. Dmorrow raised FRGE-1601 for it, “Rovo actionVerbs other than GET do not reliably get invoked”. That ticket is still open, sitting at Needs Triage with 3 votes: Jira

So one deploy tells you a lot. Flip the verb to GET and drop required, and if the action fires, your hybrid manifest was never the problem. If it still doesn’t fire, you’ve eliminated the known issue and the Connect angle is next.

I haven’t reproduced it on a hybrid app myself, so I can’t tell you whether app.connect adds anything on top.