CtrlK
BlogDocsLog inGet started
Tessl Logo

tessleng/agent-insight-experiment

Scan a repository to surface actionable findings about agent performance. Analyzes source code, git history, GitHub data, agent logs, and agent context, then synthesizes cross-referenced findings with targeted actions informed by Tessl product awareness. Supports incremental multi-developer contributions and produces a self-contained HTML report.

70

Quality

88%

Does it follow best practices?

Impact

No eval scenarios have been run

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

SKILL.mdskills/regenerate-report/

name:
regenerate-report
description:
Regenerate the HTML report from existing findings.json without re-running the analysis pipeline. Use when the report template has been updated and you want to re-render the report, or when you've manually edited findings.json and need a fresh HTML output.

Regenerate Report

Re-render .tessl-insights-poc/report.html from the existing findings.json and the current report template. This does not re-run any analyzers or re-synthesize findings — it only rebuilds the HTML.

Steps

1. Read the existing findings data

cat .tessl-insights-poc/findings.json

If the file doesn't exist, stop and tell the user they need to run synthesize-insights first.

2. Read the HTML template

Read the report template. The path is relative to this SKILL.md, so it resolves to references/report-template.html at the tile root.

Resolving reference paths: The link above uses a relative path (../../references/...) that works when this skill is read from its tile directory. If the path does not resolve (e.g. when activated via a .claude/skills/ symlink), find the report template at .tessl/tiles/*/agent-insight-experiment/references/report-template.html relative to the repository root.

3. Inject data and write the report

The template contains a JSON injection marker:

const DATA = /*FINDINGS_JSON*/{}/*END_FINDINGS_JSON*/;

Replace the {} between the markers with the full serialized contents of findings.json.

Critical: escape </ before injecting. The findings JSON is embedded inside a <script> tag, and the browser's HTML parser treats any literal </script> it sees as the end of the script block — even inside a JSON string value. If any finding's description, snippet, example_fix, or other text contains </script> (or any </ followed by a tag name the HTML parser recognizes), the page breaks mid-data and the report renders blank. This has already bitten the pipeline once — a finding that quoted the template's own <script>...</script> tag broke its own report.

Replace </ with <\/ in the serialized JSON string before injecting. The <\/ form is still valid JSON (the \/ is an allowed escape for /) and still valid JavaScript when evaluated, but the HTML parser no longer sees a closer. Do not modify findings.json on disk — escape only the copy you're about to inject.

Minimal reference implementation:

template = Path("tiles/agent-insight-experiment/references/report-template.html").read_text()
findings = Path(".tessl-insights-poc/findings.json").read_text()
safe = findings.replace("</", "<\\/")
start, end = "/*FINDINGS_JSON*/", "/*END_FINDINGS_JSON*/"
i = template.index(start) + len(start)
j = template.index(end)
out = template[:i] + safe.strip() + template[j:]
Path(".tessl-insights-poc/report.html").write_text(out)

Write the result as .tessl-insights-poc/report.html.

Important: Copy the template exactly — do not modify the HTML, CSS, or JS. Only replace the {} placeholder with the (escaped) JSON data.

4. Open and verify

open ".tessl-insights-poc/report.html"

Confirm the report opens correctly in the browser. If it renders blank or the stats row is missing, sanity-check that the injected blob contains no literal </script> strings:

python3 -c "
import re
from pathlib import Path
h = Path('.tessl-insights-poc/report.html').read_text()
i = h.index('/*FINDINGS_JSON*/') + len('/*FINDINGS_JSON*/')
j = h.rindex('/*END_FINDINGS_JSON*/')
blob = h[i:j]
print('embedded </script> count (must be 0):', blob.count('</script>'))
"

skills

regenerate-report

README.md

tile.json