seo-report
OpenSEO Report
Goal
Turn finished research into one self-contained HTML page, saved to the project with save_report, so anyone on the team can open it in the app, read it on a phone, and print it to PDF.
Every OpenSEO skill that produces a recommendation delivers through this skill. Chat gets the link, the verdict, and the top action. The report gets everything else.
Before you write
- Call
list_reportsfor the project. If a report already covers the same subject for the same period, you are correcting your own run: pass itsreportIdtosave_reportand replace it. A new month, a new competitor, or a different skill is a new report. Never save a near-duplicate. - Titles are unique within a project. Saving a second report under an existing title with no
reportIdis rejected, so either pass thereportIdof the report you are replacing or change the title to name the new subject or period. - To revise an existing report, work from its summary.
get_reportreturns the HTML only withincludeHtml: true, and an 80 KB report is roughly 20,000 tokens, which most clients truncate. Fetch the HTML only when you need to edit a specific passage, and if what comes back looks cut off, send the user to the app instead of saving over it.
Following a template
A project can carry report templates: named, reusable briefs saying who a report is for, which sections it has in what order, how it should sound, and how to sign off. They are listed in project context, and list_report_templates returns the full instructions for each one. Templates belong to a project. To reuse one in another project, list it there and save a copy here.
Use a template only when the user names it, or asks for the kind of report a template's name or description names. A plain skill run ("audit this site") uses the skill's default format. If two match, ask in one line. A template's sections, audience and tone replace the skill's Output format list; the HTML constraints and writing rules never change. Project writing_preferences always apply; a template's tone wins only where they conflict. Pass its templateId to save_report.