Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

How to instruct Rovo to create and format tables with column headers correctly

Karen West
Contributor
July 24, 2025

I have created a Rovo agent to help me produce Release Notes in Confluence from information in Jira with a set of numbered instructions within the agent. I just have to prompt it with a Jira link and the issue type to generate a result. But I'm having trouble getting it to obey the instructions to correctly format a table.

Here's my instruction:


e) h2. Summary
Include a two column left-aligned table WITH A HEADER COLUMN, AND NO HEADER ROW and the following details.

|| Prerequisites | YES/NO (include description or if none available, state TO BE CONFIRMED) |
|| Interested Clients | List of clients or N/A |
|| Requires Configuration | YES/NO/UNKNOWN |
|| Turned on by default | YES/NO/UNKNOWN |

For examples, see [link to actual table examples in Confluence].


The results are rather hit and miss, although the contents are correct. It usually does one of the following:

  • Produces a table with a heading row, rather than a column row.
  • Produces wiki markup as above, but with correct content.

Rovo seems to understand wiki markup, as it gets h2. correct for heading 2, so I don't understand why the table is so problematic.

Does anyone have any suggestions on how to fix this?

2 answers

1 accepted

0 votes
Answer accepted
Dr Valeri Colon _Connect Centric_
Community Champion
November 25, 2025

@Karen West thanks for tagging me- I appreciate the update. Unfortunately, it seems Rovo is still inconsistent with wiki-markup tables, especially when scenarios are involved. This isn’t a Skills issue; it’s a rendering limitation in the model layer. Even with an exact template, it can fall back to markdown or reinterpret the header structure. 

Instead of showing an example or linking to one, paste an empty table exactly as you want it, including the header column and placeholder cells and spell out, “Replace only the <value> text. Do not modify the table structure, symbols, or alignment.”

|| Prerequisites | <value> |
|| Interested Clients | <value> |
|| Requires Configuration | <value> |
|| Turned on by default | <value> |

Tell it explicitly (be mean if you have to):

  • “Do NOT output markdown tables.”

  • “Do NOT create a header row.”

  • “Do NOT add h2. before each section. Only use h2. once at the start.”

Keep the instruction and example in the same scenario step. And inline the example instead of linking to it. Confluence’s auto-conversion can also change the structure, so when you can let the user click "insert into page". 

 

Dr Valeri Colon _Connect Centric_
Community Champion
November 25, 2025

@andy_johnston Currently, Rovo is more reliable when given a single deterministic template to fill instead of following 'two parts' (The industry is working towards more complex workflows but doesn't seem to be there yet). Table generation breaks down when the agent has to decide when to switch from dataset → table, or when it sees the CSV as an intermediate output. You’ll get more consistent results by collapsing everything into one step and giving it a literal “fill-in-this-structure” template. Try this and let me know how it goes:

Your output must be a Confluence wiki table using the exact template below. Do not add commentary, headers, markdown, CSV, or explanatory text.

You must follow one rule:
Replace only the <value> placeholders. Never modify the table symbols or structure.

Step 1 — Build the dataset (internal only)

  • Retrieve issues using this JQL:
    (insert your JQL here)

  • For each issue, extract:

    1. "Summary" → becomes <WorkItem>

    2. "customfield_12345" → summarise into exactly 2 sentences.
      If empty, use: No data available.
      → becomes <Comment>

This dataset is for your internal reasoning only. Do not output it.

Step 2 — Render the Confluence table using this exact structure

Return only the table in this structure:

| **Work Item Name** | **Comment** |
| --- | --- |
| <WorkItem1> | <Comment1> |
| <WorkItem2> | <Comment2> |
| <WorkItem3> | <Comment3> |

Do not:

  • Switch to markdown table format

  • Remove the bold headers

  • Add or remove rows

  • Add narrative text

  • Add CSV

Only output the final table exactly in this format.

Andy Johnston
Contributor
November 25, 2025

@Karen West @Dr Valeri Colon _Connect Centric_ - definitely better results with the inputs.  Consistent table output, consistent data in the table from the summarisations.

 

Any ideas on how to add the background colour markdown? Confluence must be storing this in the back end of the page, but I can't figure out how you can add it to the example?

Dr Valeri Colon _Connect Centric_
Community Champion
November 27, 2025

@andy_johnston  Glad the table structure is behaving now — that’s usually the hardest part. For background colors though, Rovo can’t generate them. Confluence’s table cell colors aren’t controlled by wiki markup or markdown; they’re stored as internal storage-format XML that editors generate, not users. Since Rovo agents only output plain text (wiki or markdown) and can’t emit storage-format HTML/XML, there’s no reliable way to pre-color cells from the agent. Right now the only options are:

  • Have Rovo generate the table, then apply colors manually in the Confluence editor, or

  • Use a Forge app or Confluence macro that applies styles after insertion (Rovo can’t trigger that automatically yet).

If Atlassian exposes storage-format editing to agents later, coloring will be possible — but with the current capabilities, table structure is supported, styling is not. If this is important to you consider submitting a feature request.

2 votes
Dr Valeri Colon _Connect Centric_
Community Champion
November 13, 2025

@Karen West Rovo struggles with wiki-markup tables unless you give it an exact template. The safest fix is to include a literal “copy-this-exactly” table block in your instructions, not just examples. Tell it: “Do not create a header row. Use this exact table structure and replace only the cell values:” and paste a blank template. This forces consistent output and stops it from improvising.

Karen West
Contributor
November 13, 2025

Thank you, I will try that.

Andy Johnston
Contributor
November 18, 2025

Did you have any luck with this Karen?  I've been trying to produce a Confluence Table output and it's so hit and miss.  I tried first building a CSV, then converting into a table format, but the output always seems to come out first as plain text (Wiki markup for the table?)

 

In my example I've called a JQL, got the Summary and Description, and output them into CSV for the user to review, then once confirmed - converts to a "Confluence User Friendly Table"

 

Almost all of my table outputs are in this format: 

|| Project Name || Comment ||
| Project 1 | No recent RAG status comment available. |
| Project No 2 | Migration is still in progress. |
| Test Name Project Here | Deliverables moved to 2026; Something else test text. |

 

Yet in some cases I'll get a Confluence table?  Am I missing skills or something??

Karen West
Contributor
November 24, 2025

Thanks for your response @andy_johnston I am still not getting the right results. I have updated my agent, which now uses the new scenarios feature, as follows:

e) h2. Summary 
Using the exact same table format as in the following example, complete the table, as per the row headers:
https://....atlassian.net....

Prerequisites row - YES/NO (include description or if none available, state TO BE CONFIRMED) |
Interested Clients row - Bulleted list of clients or N/A. If there is ONLY ONE CLIENT do not use a bulleted list. |
Requires Configuration row - YES/NO/UNKNOWN
Turned on by default row - YES/NO/UNKNOWN

REMEMBER: THE TABLE MUST HAVE A HEADING COLUMN NOT A HEADING ROW.  

The table in the URL I provided looks like this:
table-example.png

First my agent returned a table with the Prerequisites row as a header row. I then told it that the table should have a header column not a header row, it returned this instead:

rovo-table-result.png

I tried again and it reverted to using markdown:

rovo-table-wrong-again.png

Note also that it is now adding h2. before each heading, which is the markdown instruction. It only started doing this following the recent switch to scenarios. I told it not to to do this, and it worked for a couple of tests and then h2 reappeared.

So, in summary, I can't get it to work correctly even after providing an example empty table, as suggested by @Dr Valeri Colon _Connect Centric_

Andy Johnston
Contributor
November 24, 2025

Yeah, this is kinda where I'm at - I can't seem to get anything other than the most basic table markdown.

 

In my example I'm able to pass in the basic JQL, and get the table output pretty consistent now. (eg. it produces a table every time)  But I've not been able to get the agent to insert the table directly into the Confluence page, the user still has to select "Insert into Page" from the agent window.

 

I'm unable to add any sort of header formatting like h2, h1 etc, and also I want to use the table cell background colours, and that's definitely not working either. I downloaded a Markdown editor, and it can't convert any of those text headings either, so I've reached out to the dev to see if I can get any luck there too?

 

This is the prompt I'm using - my custom work items have a description field (customfield_12345) which I only want a 2 sentence summary of. So you could skip that if you don't need it.

 

You have only one goal: to transform data from a Jira JQL output into a User Friendly Confluence Table. ONLY Generate a user friendly table, and do not add any conversational elements to the output.

-There are two parts to the Goal - the Parts need to be performed one after the other
-We have used *** to identify the two parts in the goal
-Follow the steps within each Part in sequence and exactly

***
Part 1 - generate the dataset
-The dataset has 2 columns
-The first header row in the dataset is: Work Item Name, Comment
-The remaining rows of the dataset are populated from the JQL query "(insert your JQL here to retrieve work items)"
--The format of each row is as follows:
--- "Summary" field
--- A summarised version of the custom field customfield_12345 - Summarise this field into 2 sentences only. Only the summary of this field should be used, do not infer anything else. If the field customfield_10408 is empty then always use the following "No data available" as the summary.

***
Part 2 - Output the User Friendly Confluence table with the exact format specified
- Pass the dataset output generated in Part 1 and generate a Confluence Table
- Output ONLY the table, with no other text or headers
- Here is an example of the exact table formatting you should use in plain text only to render the Confluence Table
| **Work Item Name** | **Comment**
| --- | ---
| Cell a1 | Cell a2
| Cell b1 | Cell b2

 

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events