skills/lab-typst-report-generator/SKILL.md
Generates a Typst laboratory report file report.typ from completed working code using BMSTU-style structure (title-bmstu, sections, images, codeblock, conclusions). Use when the user asks to create/fill a report.typ after implementation and testing of a lab task.
npx skillsauth add nailorsh/agents_utils lab-typst-report-generatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Create a ready-to-compile report.typ after the lab code is already implemented and runnable.
Target style matches the shared template and the refined report pattern:
#import "../../common/templates/lab.typ": title-bmstu, codeblock#title-bmstu(...) with topic lines aligned to the real assignment (not a leftover title from another lab)#image(...) только если пользователь явно просит перенести теорию с отсканированных страниц или приложил готовые теоретические рисунки#codeblock("...") with path relative to project root (as in lab.typ)1.jpg, 2.jpg, …#image("images/...") for theory only when:
lab-image-to-markdown), you may summarize that content in text in the theory section instead of pasting images—unless the user wants the scans in the PDF.Typst uses $...$ for math. Prefer standard notation familiar from LaTeX:
$epsilon = 0.01$, $f'(x)$, $norm(vec(x))$ or explicit norms as in the assignmentx_1, x^(k+1), x_1^kepsilon, alpha, pi, etc.frac(a, b) or (a)/(b) where readablemat(...) or explicit mat(delim: "[", ...) per Typst docscases(...) with comma-separated branches (not \ line breaks inside cases—Typst warns that linebreaks are ignored there):#align(center)[
$ cases(
f_1(x, y) = 0,
f_2(x, y) = 0
) $
]
Before generating report, collect:
#codeblock, relative to repo root)If some fields are missing, insert explicit placeholders like <TODO: ...>, never invent factual data (numeric results, iteration counts, file paths).
report.typ under report/, reportnew/, or user-provided directoryimages/ next to report.typ (plots, screenshots); theory scans only when requestedUse this checklist:
Task Progress:
- [ ] Step 1: Inspect existing report/template context
- [ ] Step 2: Build report data model from code and test outputs
- [ ] Step 3: Decide theory mode (text vs user-requested images)
- [ ] Step 4: Prepare images and code references
- [ ] Step 5: Generate report.typ with required structure
- [ ] Step 6: Validate Typst syntax, math, and references
- [ ] Step 7: Provide completion summary and TODO markers
#import "../../common/templates/lab.typ": title-bmstu, codeblock (adjust relative path if report.typ lives deeper).#set heading(numbering: "1."), #pagebreak() after title, footer behavior from template.Structured fields:
meta: lab number, topic (two lines for title-bmstu), student, teacher, grouptask: formulation as bullet list or short paragraphs (what to do, precision, graphical step if required)—without pasting wrong lab topics (e.g. MNK vs Newton)theory: default — prose + formulas; optional image list if user requestedvariant: variant number, equations/tables once, clear statement of initial guess policy (e.g. from plot intersection) if applicableimplementation: language and method match the real file (#codeblock path)testing: plots/tables + what the figure shows (e.g. «графическое решение для выбора начального приближения» vs «итоговая аппроксимация»—must match the lab)conclusions: factual alignment with code and tests; no copy-paste from unrelated labs#image("images/...", width: 100%) in order; still add a short intro sentence if helpful.images/ with stable names (plot.png, 01-condition.png, …).#image(...) path must exist.#codeblock("...") must point to a real file under the repo root (per lab.typ read("../../" + path) convention).report.typCanonical structure (adapt content to the lab):
#import "../../common/templates/lab.typ": title-bmstu, codeblock
#title-bmstu(
("<lab-number>", "<topic-line-1>", "<topic-line-2>"),
"<student>",
"<teacher>",
"<group>"
)
#set heading(numbering: "1.")
#pagebreak()
= Постановка задачи
<text: goal, required steps, parameters — avoid repeating full variant equations if they appear below>
= Теоретические сведения
<text + $inline/display$ math by default>
OR
<#image(...) blocks only if user requested theory from figures>
= Практическая часть
== Индивидуальный вариант
<text: variant N, given equations in $cases(...)$ or tables as needed>
<short note on initial approximation if relevant>
== Программная реализация
<paragraph matching actual stack>
#codeblock("<path-from-repo-root>")
== Результаты тестирования
<explanation + #align(center, image(...)) for plots>
#pagebreak()
= Выводы
<concise, consistent with implementation and tests>
Mandatory checks:
cases uses commas between branches.cases, not two unrelated inline lines).#codeblock path exists.If typst compile is available, run it and fix issues.
Report to user:
report.typ path<TODO: ...> if any.py.#codeblock.System (variant):
#align(center)[
$ cases(
cos(x + 0.5) + y = 1,
sin(y) - 2x = 1
) $
]
Table (when needed):
#table(
columns:(1fr,1fr,1fr,1fr),
[$x$],[*1*],[*2*],[*3*],
[$f(x)$],[2.57],[3.08],[3.45]
)
Result plot:
#align(center,
image("images/plot.png", width: 60%)
)
development
Comprehensive guide for creating Telegram Mini Apps with React using @tma.js/sdk-react. Covers SDK initialization, component mounting, signals, theming, back button handling, viewport management, init data, deep linking, and environment mocking for development. Use when building or debugging Telegram Mini Apps with React.
development
Create and format lab reports in Markdown with Typst-style headers. Validates line length ≤100 chars. Use when writing lab reports, formatting academic documents, or converting assignments to markdown reports.
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.