business-report
Skill20k starsChanged 3 years agoMITView on GitHub
This skill should be used when a user asks for an analysis report, a business review, a post-mortem, or any structured multi-section HTML deliverable over already-executed SQL/Python analysis. Trigger keywords include "分析报告", "复盘报告", "经营报告", "生成报告", "report", "analysis report", "business review", "post-mortem", "html report".
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 3 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 49
Every value is a reference node.
- Very specific: line 68
Never inline a literal number.
- Very specific: line 77
Start with artifact_types=["sql", "python", "chart"], then select the needed artifact_ids with detail=true (at most twelve per call).
- Distinctive: line 149
No chart-type whitelist is imposed.
- Very specific: line 158
Keep the spec small — tables by artifact_id + columns (never per-cell references), limit instead of pasted rows, short intro/bullets, and …
- Distinctive: line 191
If an essential derived result is truly missing, call request_report_calculation with its name, formula and real SQL/Python …
- Distinctive: line 204
Use status=completed to determine success, never the mere presence of draft HTML.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Traceable Business Report (template-driven)
Render a multi-section analysis report from a template plus structured data, so every number in the report is resolved by the backend from a captured artifact result instead of being typed by the model. This is the default path for report generation: prefer it over hand-writing HTML.
Why
Hand-written report HTML is validated against the captured artifacts after the fact: a
number the model remembers (or copies from an earlier report) does not exist in any
artifact, the render is rejected, and repairing dozens of HTML numbers is slow. With this
template the model only supplies pointers (artifact_id + result path); the backend
resolves and formats the value, and a wrong pointer fails immediately with the exact
selector to fix.
Tool call
{
"template_path": "business-report/templates/business_report.html",
"title": "Olist 巴西站经营复盘报告",
"data": {
"REPORT_SPEC": { "...": "see below" }
}
}data.REPORT_SPEC may be a JSON object or a JSON string. Do not pass html together with
template_path. Prefer the object form: a spec hand-escaped into a JSON string is a
frequent, fatal mistake — one wrong escape makes the whole call unparsable and nothing
renders.
{
"template_path": "business-report/templates/business_report.html",
"title": "Olist 巴西站经营复盘报告",
"data": {"REPORT_SPEC": {"title": "…"}}
}Reference nodes (the only way to put a value in the report)
Every value is a reference node; the backend replaces it with the captured value and binds
the rendered <span> to the producing artifact:
{"artifact_id": "sql-f6f8810...", "path": ["rows", 0, "gmv"], "format": "money2"}
{"artifact_id": "sql-29da2e3...", "path": ["rows", 0, "product_gmv"], "format": "money2"}
{"artifact_id": "sql-7de826c...", "kind": "sql", "quote": "r.score <= 2"}
{"artifact_id": "reference-e7ae093...", "format": "text"}fieldnames a key of a Python artifact result (result_selector_examplesin the manifest lists them). For a SQL metric usepath["rows", <index>, "<column>"]with a name from the manifestcolumns(the result is{"columns": [...], "rows": [...]}). A SQL selector that names afieldis refused withRESULT_SELECTOR_INVALID, which lists the available keys.- Python artifacts must expose their metrics as a JSON result field (for example
{"RESULT_JSON": "{...}"}); reference{"artifact_id": "python-…", "field": "RESULT_JSON", "path": ["driver_analysis", "items", 0, "corr"]}. format:money2,num2,num1,int,pct(adds%),text/raw.- Never inline a literal number. Prose numbers must also be reference nodes: a section
whose text contains digits must carry evidence (a KPI ref, a table built from
artifact_id+columns, a chart, or bound values inintro/bullets), otherwise the render is refused before the browser withREPORT_TEMPLATE_SPEC_INVALID, which names the section and lists the available artifacts. - Layout labels (headings, table headers, section titles) must contain no digits; use reference nodes for anything numeric, including threshold labels.
- Get real artifact IDs and result fields from
report_evidence_manifestbefore writing the spec. - Start with
artifact_types=["sql", "python", "chart"], then select the neededartifact_idswithdetail=true(at most twelve per call). Read the governing KB slices separately. A catalog contains identifiers and columns, not the results; read a persisted output when the preview is truncated. A new report agent receives its own first catalog even if the lead already read the same version. - Numeric preflight reports all unbound literals together, with spec JSON paths and SQL/Python producer candidates. Correct every listed value; adding one KPI to the section does not bind the remaining prose. Use a producer table plus a qualitative summary when per-value prose would be too long. Uncaptured derived totals require a captured calculation or a summary without that number.
REPORT_SPEC shape
{
"title": "…", "subtitle": "…", "scope": "分析窗口 | 口径 | 货币",
"kpis": [{"label": "商品 GMV", "unit": "R$", "hint": "SUM(price)", "ref": <ref>}],
"sections": [
{"heading": "一、总体经营表现", "kpis": [...], "intro": [[part, …]], "table": {...},
"chart": {...}, "bullets": [[part, …]], "list": [[part, …]],
"recommendations": [{"badge": "P0", "cls": "p0", "title": "…",
"lines": [{"label": "依据", "parts": [part, …]}]}],
"note": {"label": "口径说明", "parts": [part, …], "ref": <ref>}}
]
}<part>is either a plain string (no digits) or a reference node.table: name the producer and the columns; the engine expands the rows. Never write one reference node per cell — a 10x5 table would cost ~5,500 characters and overrun the model output limit.{"artifact_id": "sql-f6f88101…", "label": "品类明细", "limit": 10, "columns": ["category", {"field": "gmv", "label": "GMV", "format": "money2"}, "orders_cnt"]}A
columnsentry is a field name (result key, also used as the label) or{"field", "label", "format"}.limit/offsetwindow the artifact rows; each expanded cell carries its ownpathselector. The explicit"rows": [[part, …], …]form is only for cells that no artifact row can produce.chart: only when a real ChartArtifact exists. Image chart:{"refs": ["<sql-id>", "<chart-id>"], "img": "artifact://….json", "caption": "…"}. ECharts host (the engine then needs one producer with a selector and a target id):{"refs": ["<sql-id>", "<chart-id>"], "renderer": "echarts", "chart_id": "<chart-id>", "host_id": "chart-1", "producer": {"artifact_id": "<python-id>", "field": "CHART_DATA_JSON"}, "caption": "…"}.<figure>/<img>are chart hosts and must be covered by a chart artifact.recommendationsproduce<li>items; give at least as many as the user requested, and keep the section heading containing “建议”.note.ref: bind the knowledge-space slice actually used for the methodology statement. A whole-page binding does not count.
Chart configuration
Charts are not limited to the automatic line/bar/scatter choice. Use chart.option
for a full JSON ECharts configuration, including any built-in series type, composed
series, dataset/encode, multiple coordinates and zoom controls. For example:
{"caption":"Composition","producer":{"artifact_id":"sql-real","path":[]},
"option":{"series":[{"type":"pie","radius":["40%","70%"],
"encode":{"itemName":"actual_category","value":"actual_measure"}}]}}The engine injects the producer's captured rows/columns as the default dataset.
For structured charts, select series.data, nodes, links, dataset.source,
or individual data values using {artifact_id,field,path} references. Do not
inline observed data. Use captured tree/graph/boxplot/candlestick structures;
request only a missing conversion via request_report_calculation when necessary.
Map charts can set maps={mapName:{artifact_id,field,path}} to register captured
GeoJSON, then use that mapName in the option. All input IDs, selectors, resolved
options and geography are captured and checked against the rendered chart.
No chart-type whitelist is imposed; JavaScript callbacks and extra plugins are
not executable through JSON options. Captured Python chart images remain supported.
Placeholder-based skill templates use data.REPORT_CHARTS=[<chart>, ...] for the
same renderer, independently of their preset chart layout.
Output budget
The whole spec travels in one tool-call argument, and the model output limit is about
8k tokens: a payload that is cut off cannot be parsed, so the render never even starts.
Keep the spec small — tables by artifact_id + columns (never per-cell references),
limit instead of pasted rows, short intro/bullets, and no repeated prose. If a
render result says the arguments were cut off by the output limit, shrink the spec
instead of resending it.
A long report may be built in pieces. Send the first part as
data={"REPORT_SPEC": {...}}, then extend the saved spec with
data={"REPORT_SPEC_APPEND": {...}} (call it again with retry_saved=true when a render
was already attempted): sections and kpis are appended, every other key
overwrites. The engine stores the merged spec, so never resend a part you already
sent, and finish with the required recommendation section.
KPI values must use ref, not value. Paragraphs use sections[].intro as arrays
of parts; recommendations belong to sections[].recommendations and contain a
title and lines[].parts. Unknown keys such as placeholders, sections[].parts
or top-level recommendations are rejected with a JSON path before rendering.
REPORT_SPEC repairs retain unspecified root fields; an explicitly supplied
sections or kpis replaces that complete list. A root field set to null is
removed, including an unsupported field from a previous invalid spec.
REPORT_SPEC_APPEND extends those
lists and does not insert an identical fragment twice.
Preflight (6), document assembly (6), actual render validation (3), and invalid calls
(3) have separate budgets and a total cap of 18 report calls. Pre-render spec/selector
failures never spend render attempts. Progress compares the merged spec and error;
retry_saved and template HTML length are not progress signals. Fix all returned
JSON paths together. An identical input with the same failure stops retries.
The report agent's tool schema is generated from this same spec model. Captured
charts belong only in sections[].chart: {"refs":["real-chart-id"],"caption":"…"}.
Image URLs are resolved from the captured chart output. Native figures use the
existing AutoChart frontend. ECharts still uses its existing reviewed template and
bootstrap; an empty div without rendering code is not a chart.
If an essential derived result is truly missing, call request_report_calculation with its name, formula and real SQL/Python source_artifact_ids, then terminate. The lead computes only that missing result with code_interpreter using the injected REPORT_CALCULATION_INPUTS JSON file and prints JSON for normal artifact capture. Resume the saved spec and bind the new Python artifact; never rerun full analysis.
For an authored recommendation target, a reference node in recommendation lines
may add "proposal":"reduce the rate to 5%". The engine labels it explicitly as
a proposed, unobserved target. The node's artifact_id and field/path still select
the real rationale; proposal is forbidden in KPI and observed-value paragraphs.
On failure, a labelled draft can preview independently validated blocks through the existing HTML preview. It does not create a report_id or indicate completion. Use status=completed to determine success, never the mere presence of draft HTML.
Failure handling
For a large nested result, request only its relevant subtree with
report_evidence_manifest(artifact_ids=["real-id"], detail=true,
selectors={"real-id":{"field":"CHART_DATA_JSON","path":["stats_table"]}}).
Selector examples also name fields inside captured JSON strings; truncated previews
are not evidence that a result is missing. This reuses the manifest and result
selector, and never reexecutes analysis.
Nested Python tables may use the same field/path selector on the table node,
for example {"artifact_id":"python-id","field":"CHART_DATA_JSON",
"path":["stats_table"],"columns":["actual_column"]}. Prefer an object with
rows and columns. The engine expands both SQL and Python rows and retains the
complete selector for every cell; do not paste per-cell values into the spec.
The render error names the exact artifact_id, selector and container. Fix the spec
(data.REPORT_SPEC), then call retry_saved=true with the corrected data only — never
resend full HTML and never rerun completed analysis.
Trending
Less talk lately.about the whole repository
Who's talking about eosphoros-ai/DB-GPT
- QwenLM/Qwen“💡 [Qwen+DB-GPT] - DB-GPT已经支持了千问72B,赶紧用起来吧”GitHub · Dec 1, 2023 · 2 reactions
- @githubfeed.bsky.social“🚀 GitHub Intelligence Drop DB-GPT (Python • 🟢) ⭐ 20K → https://github.com/eosphoros-ai/DB-GPT gun …”Bluesky · Sep 20, 2026 · 1 likes
- pacoxu/AI-Infra“GPU/System Memory, Context, KVCache, DB”GitHub · Sep 11, 2025 · 1 reactions
- langchain-ai/langgraph“【Question】Why not implement DAG in LCEL?”GitHub · Jan 8, 2024 · 1 reactions
- @github-trending.bsky.social“🔥 Hot Repo! 🔥 (100+ new stars) 📦 eosphoros-ai / DB-GPT ⭐ 8,798 (+102) 🗒 Python Revolutionizing Database …”Bluesky · Dec 22, 2023 · 1 likes
The biggest 5 of 38 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 38
Talked about on GitHub, Bluesky and the web (38 times).
On GitHub · 34
- Dec 1, 2023💡 [Qwen+DB-GPT] - DB-GPT已经支持了千问72B,赶紧用起来吧 — QwenLM/Qwen2 reactions
- Sep 11, 2025GPU/System Memory, Context, KVCache, DB — pacoxu/AI-Infra1 reaction
- Jan 8, 2024【Question】Why not implement DAG in LCEL? — langchain-ai/langgraph1 reaction · 5 comments
- Sep 7, 2023Add DB-GPT: The All-In-One Model, Chat Privately With Files Locally, Plugins, Auto Ai Agents, & More! — e2b-dev/awesome-ai-agents1 reaction · 1 comment
- Aug 31, 2023【开源自荐】ChatExcel-通过自然语言对话实现数据分析 — ruanyf/weekly1 reaction
29 more on GitHub
- Oct 28, 2026[GHSA-7gj6-22m4-qfhx] DB-GPT Arbitrary File Write vulnerability — github/advisory-database0 reactions
- Oct 15, 2026Add DB-GPT HTTP fingerprint rule — hexbay/finger-rules0 reactions
- Sep 27, 2026agent-skills.github.eosphoros-ai.db-gpt: init at 0.8.2 — sudosubin/agents.nix0 reactions
- Sep 13, 2026GEN-01 (EPIC-GEN-01 #178): ontology-grounded generative ask + execute-validate (abstain if unsure) — Netie-AI/dms0 reactions · 6 comments
- Aug 25, 2026[Argus] CVE-2026-80104: DB-GPT 0.8.0 스킬 업로드 파일명을 통한 Path Traversal 및 임의 파일 쓰기 — LEEKIYOON-SEC/Argus-DEV0 reactions
- Aug 18, 2026Add CVE-2026-73034 - DB-GPT Path Traversal Arbitrary File Write — projectdiscovery/nuclei-templates0 reactions · 1 comment
- Aug 14, 2026feat: add CVE-2026-73034 DB-GPT <= 0.8.1 path traversal arbitrary file write — projectdiscovery/nuclei-templates0 reactions
- Aug 11, 2026[Argus] CVE-2026-73034: DB-GPT v0.8.1 user_id 헤더를 통한 경로 탐색 및 임의 파일 쓰기 취약점 — LEEKIYOON-SEC/Argus-DEV0 reactions
- Jul 17, 2026Update PURL mappings for conda-forge packages related to `dbgpt` — prefix-dev/purl-associator0 reactions · 1 comment
- Jun 28, 2026DB-GPT: 차세대 AI + 데이터 제품을 위한 오픈소스 에이전트형 데이터 어시스턴트 — roomedia/ax-trend0 reactions
- Jun 5, 2026[Add] DB-GPT (eosphoros-ai/DB-GPT) — PyTorchKR/landscape0 reactions
- May 28, 2026Add DeerFlow 2.0 `data-analysis-agent-skill` package with read-only ChatBI, file analytics, and packaging workflow — yssAI/agent-skills0 reactions
- Mar 26, 2026Update repo table — arran4/arran40 reactions
- Feb 27, 2026优化「提效技巧」卡片:增加真实教程链接与推荐教程列表 — jinjin-cxy/jinjin-cxy.github.io0 reactions
- Oct 29, 2025Add agent memory and context management documentation — pacoxu/AI-Infra0 reactions · 1 comment
- May 30, 2025Updated single-repositories/github/eosphoros-ai/DB-GPT.yml — oss-compass/compass-projects-information0 reactions · 2 comments
- Apr 4, 2025chore(deps): bump the pip group across 2 directories with 1 update — ai-in-pm/dbgpts0 reactions
- Mar 3, 2025Add DB-GPT — deepseek-ai/awesome-deepseek-integration0 reactions
- Oct 15, 2024docker.io/eosphorosai/dbgpt:latest — DaoCloud/public-image-mirror0 reactions · 1 comment
- May 16, 2024feat: Upgrade search workflow — eosphoros-ai/dbgpts0 reactions
- May 6, 2024chore: Update with latest agent — eosphoros-ai/dbgpts0 reactions
- Apr 25, 2024[Feature request] make cubejs as datasouce of DB-GPT — cube-js/cube0 reactions · 2 comments
- Apr 18, 2024【CS-part4】New submissions for Wed, 17 Apr 24 — Yukeaaa/arxiv-daily0 reactions
- Apr 17, 2024New submissions for Wed, 17 Apr 24 — qiaoyuet/arxiv_daily0 reactions
- Mar 27, 2024feat: Add rag url knowledge examples — eosphoros-ai/dbgpts0 reactions · 1 comment
- Nov 16, 2023Add typos for knownledge->knowledge, analyzis->analysis and compialtion->compilation — codespell-project/codespell0 reactions · 1 comment
- Sep 27, 2023【开源自荐】DB-GPT用私有化大模型定义数据库下一代交互方式 — Wechat-ggGitHub/Awesome-GitHub-Repo0 reactions
- Sep 18, 2023【开源自荐】DB-GPT用私有化大模型定义数据库下一代交互方式 — GitHubDaily/GitHubDaily0 reactions
- Sep 3, 2023【开源自荐】DB-GPT用私有化大模型定义数据库下一代交互方式 — 521xueweihan/HelloGitHub0 reactions
On Bluesky · 2
- Sep 20, 2026🚀 GitHub Intelligence Drop DB-GPT (Python • 🟢) ⭐ 20K → https://github.com/eosphoros-ai/DB-GPT gun (JavaScript • 🟢) ⭐ 19.1K →… — @githubfeed.bsky.social1 likes and repost
- Dec 22, 2023🔥 Hot Repo! 🔥 (100+ new stars) 📦 eosphoros-ai / DB-GPT ⭐ 8,798 (+102) 🗒 Python Revolutionizing Database Interactions with Private LLM… — @github-trending.bsky.social1 likes and repost · 1 reply
On the web · 2
- Sep 7, 2026[First-time contributor] Looking for beginner-friendly issues ... — google.com
- Apr 26, 2024[Feature]DB-GPT integrate xinference · Issue #1471 — google.com
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- genspark-ai/genoffice★ 11ksame name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository6 other files it gives its agents.
- agent-browserSkill
- csv-data-analysisSkill
- dashboard-builderSkill
- financial-report-analyzerSkill
- skill-creatorSkill
- walmart-sales-analyzerSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

