Create Presentation
JetBrains/youtrackdb
Generate a PPTX presentation explaining code changes on the current branch, with matplotlib diagrams and dark theme slides.
Generate a multi-form answer (Marp slide deck, matplotlib chart, Obsidian Canvas, or social content brief) from one or more wiki pages in a research directory and file the output back into…
$ npx skills add iusztinpaul/ai-research-os-workshop --skill research-render -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install iusztinpaul/ai-research-os-workshop research-render --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/iusztinpaul/ai-research-os-workshop.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/ai-research-os/skills/research-render .claude/skills/research-render && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "research-render" agent skill from https://github.com/iusztinpaul/ai-research-os-workshop/tree/main/plugins/ai-research-os/skills/research-render into .claude/skills/research-render/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "research-render", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/iusztinpaul/ai-research-os-workshop/tree/main/plugins/ai-research-os/skills/research-renderType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add iusztinpaul/ai-research-os-workshop --skill research-render -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install iusztinpaul/ai-research-os-workshop research-render --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iusztinpaul/ai-research-os-workshop.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/ai-research-os/skills/research-render .agents/skills/research-render && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "research-render" agent skill from https://github.com/iusztinpaul/ai-research-os-workshop/tree/main/plugins/ai-research-os/skills/research-render into .agents/skills/research-render/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "research-render", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add iusztinpaul/ai-research-os-workshop --skill research-render -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install iusztinpaul/ai-research-os-workshop research-render --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iusztinpaul/ai-research-os-workshop.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/ai-research-os/skills/research-render .cursor/skills/research-render && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "research-render" agent skill from https://github.com/iusztinpaul/ai-research-os-workshop/tree/main/plugins/ai-research-os/skills/research-render into .cursor/skills/research-render/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "research-render", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/iusztinpaul/ai-research-os-workshop.git --path plugins/ai-research-os/skills/research-render--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add iusztinpaul/ai-research-os-workshop --skill research-render -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install iusztinpaul/ai-research-os-workshop research-render --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iusztinpaul/ai-research-os-workshop.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/ai-research-os/skills/research-render .gemini/skills/research-render && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "research-render" agent skill from https://github.com/iusztinpaul/ai-research-os-workshop/tree/main/plugins/ai-research-os/skills/research-render into .gemini/skills/research-render/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "research-render", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install iusztinpaul/ai-research-os-workshop research-renderInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add iusztinpaul/ai-research-os-workshop --skill research-render -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/iusztinpaul/ai-research-os-workshop.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/ai-research-os/skills/research-render .github/skills/research-render && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "research-render" agent skill from https://github.com/iusztinpaul/ai-research-os-workshop/tree/main/plugins/ai-research-os/skills/research-render into .github/skills/research-render/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "research-render", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add iusztinpaul/ai-research-os-workshop --skill research-render -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install iusztinpaul/ai-research-os-workshop research-render --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iusztinpaul/ai-research-os-workshop.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/ai-research-os/skills/research-render .opencode/skills/research-render && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "research-render" agent skill from https://github.com/iusztinpaul/ai-research-os-workshop/tree/main/plugins/ai-research-os/skills/research-render into .opencode/skills/research-render/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "research-render", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
research-renderGenerate a multi-form answer (Marp slide deck, matplotlib chart, Obsidian Canvas, or social content brief) from one or more wiki pages in a research directory and file the output back into…
Research Render is an agent skill from iusztinpaul/ai-research-os-workshop. Generate a multi-form answer (Marp slide deck, matplotlib chart, Obsidian Canvas, or social content brief) from one or more wiki pages in a research directory and file the output back into wiki/renders/. Outputs compound — they appear in index.yaml/index.md and can be re-rendered idempotently. One run can render several forms at once. Use when the user wants to "make a slide deck on X", "chart the comparison of A vs B", "build a canvas of how these concepts connect", "render this as Marp", or "extract a post idea…
Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files (for example `agents/brief_writer.md`, `agents/canvas_writer.md` and `agents/chart_writer.md`).
It sits in Documents & Office, covering Slides and decks, Data visualization and Social media posts. It works with Matplotlib and Obsidian. The repository describes itself as: How to turn your Second Brain into a living research memory that your agents maintain. Workshop with slides, video and code. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit dc66605. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
uvFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uv, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Research Render loads about 3.7k tokens when it runs. Until then it costs about 174 tokens; SKILL.md has 1,737 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from iusztinpaul/ai-research-os-workshop at commit dc66605, republished under its MIT licence (© iusztinpaul). 1,737 words, ~3,696 tokens.
.claude/skills/research-render/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Wiki pages are the substrate. This skill turns them into multi-form answers — slide decks, charts, canvases, social briefs — and files those outputs back into wiki/renders/<format>/<slug>.{md,png,canvas} so they compound just like any other wiki artifact.
Four formats are supported:
.py script for reproducibility).canvas JSON)A run can produce several formats at once — the user picks one or many up front (Step 1), and each chosen format is rendered independently.
A fifth notional format ("table") was considered but rejected: tables are best embedded inside comparison wiki pages, which /research already produces via its comparison_writer. If you want a table, ask for a comparison.
You need:
marp | chart | canvas | brief. Resolve as follows:marp, "chart this" → chart, "build a canvas" → canvas, "extract a post idea / write a brief" → brief), use it without asking.AskUserQuestion with multiSelect: true offering the four formats, so the user can pick one or render several at once. Capture the result as selected_formats (a list).<research_dir>/wiki/. Most renders draw from a single page; canvases, decks, and briefs often draw from multiple (overview + synthesis + a few entity/concept pages).brief, the prompt also carries the body structure the user wants (the sections to cover) — the brief writer follows it for the body (see Format details → Brief).Locate research_dir the same way /research (query mode) and /research-lint do.
Steps 2–4 run once per selected format. When several formats are chosen, run the idempotency checks per format and spawn the format writers in parallel (Step 4).
Slug:
Output paths by format:
| Format | Path |
|---|---|
marp | <research_dir>/wiki/renders/marp/<slug>.md |
chart | <research_dir>/wiki/renders/charts/<slug>.png (+ <slug>.py next to it) |
canvas | <research_dir>/wiki/renders/canvases/<slug>.canvas |
brief | <research_dir>/wiki/renders/briefs/<slug>.md |
Create the format directory if it doesn't exist:
mkdir -p "<research_dir>/wiki/renders/<format>"Run this check for each selected format (each has its own output path). If the output already exists:
.canvas.meta.yaml sidecar for canvas) or companion .py (for chart).prompt and sources to the new run.AskUserQuestion whether to overwrite, suffix-with-timestamp, or skip.Each format has a dedicated subagent that knows its output shape. Pass:
formatsource_pages — absolute pathsresearch_topic, input_summary (from index.yaml)promptoutput_pathresearch_dirplatform — (brief only) the inferred platform, or generic| Format | Agent file |
|---|---|
marp | agents/marp_writer.md |
chart | agents/chart_writer.md |
canvas | agents/canvas_writer.md |
brief | agents/brief_writer.md |
Each subagent reads its source pages (these are short — entity/concept/comparison/source wiki pages, not raw files), produces the render, and returns a JSON summary on stdout. The orchestrator never reads the source pages itself.
When selected_formats has more than one entry, spawn all the chosen format writers in parallel — one Agent call per format in a single message. They're independent and write to different paths.
For chart only: after the writer subagent saves the .py script, the orchestrator runs it via uv run --script to produce the .png (the script carries a PEP 723 header declaring matplotlib, so it self-bootstraps). The script is the source of truth; the PNG is regenerable. If execution fails, the script stays on disk and the failure is surfaced — the user can fix it and re-run.
For brief only — handle the needs_guidance return. The brief writer is capped at ~1000 words. If covering the prompt's sections faithfully would exceed that, it writes nothing and returns {"action": "needs_guidance", "estimated_words": N, "reason": "...", "options": [...]}. When you get this, do not force the brief — surface it to the user via AskUserQuestion, using the writer's reason as context and its options as the choices (e.g., drop a section, split into two briefs, headline-level only, or raise the cap). Then re-spawn the brief writer with the tightened prompt (or the agreed higher cap). Don't run Steps 5–6 for a brief that returned needs_guidance and wasn't re-rendered.
Renders compound. After all selected formats are written, regenerate index.md once so the new renders appear in the navigation:
uv run --script ${CLAUDE_PLUGIN_ROOT:-.claude}/skills/research/scripts/build_index_md.py --research-dir "<research_dir>"index.yaml does not need to be rebuilt — renders aren't sources, they don't have entries in the sources: array. The total_wiki_pages count is computed live by build_index_md.py from the wiki tree.
One entry per format rendered (share the date when several ran together):
## [YYYY-MM-DD] render | <format> | <slug>
- format: <marp|chart|canvas|brief>
- output: wiki/renders/<format>/<slug>.<ext>
- sources: <count> wiki page(s) — <comma-separated relpaths>
- prompt: "<verbatim prompt, truncated to 200 chars>"Tell the user:
marp --watch <file> from the CLI.py is alongside for editing.md in Obsidian; copy the body into a post draft, or use it as the idea seed for whatever content workflow you useprompt (so they can compare against future renders)Marp is a markdown-based slide format. The output file has a YAML frontmatter block configuring the deck, then --- separators between slides:
---
marp: true
theme: default
paginate: true
backgroundColor: white
sources: [<wiki page paths>]
prompt: "<verbatim>"
created: <ISO-8601>
---
# Title slide
Content
---
## Second slide
- bullet
- bullet
---
...The Marp Obsidian plugin renders this in-vault. Length: 5–15 slides typical; cap at 25 unless explicitly asked. Each slide ≤ 40 words of body text.
Charts are matplotlib outputs. The writer subagent produces a .py script that:
matplotlib.use("Agg") for headless, then import matplotlib.pyplot as plt)sys.argv[1] (so the orchestrator can wire output paths cleanly)Companion files:
wiki/renders/charts/<slug>.py # the script (source of truth, editable)
wiki/renders/charts/<slug>.png # the rendered chart (regenerable)The script must include a frontmatter-equivalent comment block at the top:
# -- render metadata --
# format: chart
# sources: <comma-separated wiki page paths>
# prompt: "<verbatim>"
# created: <ISO-8601>
# --Run it via:
uv run --script "<research_dir>/wiki/renders/charts/<slug>.py" "<research_dir>/wiki/renders/charts/<slug>.png"Obsidian Canvas files are JSON with a fixed schema (see Obsidian docs). The writer subagent produces a .canvas file with:
wiki/renders/canvases/<slug>.canvas.meta.yaml for the same sources / prompt / created infoUse Canvas for visual argument maps, entity-relationship views, and "how these concepts connect" overviews — anything where spatial layout adds meaning.
A brief is a copy-ready social content seed composed from wiki pages — the kind of "executive summary for a post" that a human can paste into a draft. It is prose, never code, and it follows a fixed three-part spine. The body is the only flexible part — the user's prompt dictates its sections.
---
type: brief
format: brief
platform: <linkedin | substack-note | x-thread | reddit | generic>
sources:
- <source_page_relpath_1>
- <source_page_relpath_2>
prompt: "<verbatim prompt>"
created: <ISO-8601 now>
---
# <Working title / hook line>
## Opening — problem → solution
<Problem told as a short story, then the solution and the transformation it brings.
Weaves in the 6 W's: why, what, how, who, where, when.>
## <Body — sections driven by the prompt>
<Whatever the user asked the body to cover.>
## Open questions
1. <highest-signal open question>
2. <second>
3. <third>
---
> Grounding: [[wiki/...]] citations + a one-line `> Synthesis:` note.The spine, in order:
wiki/open-questions.md if it sharpens them, but never just copy that file wholesale.Conventions:
> Grounding: line wikilinking the source pages, plus a > Synthesis: line (meta-judgment + what new source would extend the idea).platform (LinkedIn ≈ 200–400 words, Substack note shorter, X thread = punchier beats, Reddit = plainer); default generic ≈ the executive-summary shape. The brief is a seed — leave true platform-final shaping to the user.wiki/renders/. Renders are wiki artifacts; they compound. Never write to working-dir or anywhere outside the research dir.wiki/sources/, wiki/entities/, wiki/concepts/, wiki/comparisons/, wiki/synthesis.md, wiki/overview.md. They do NOT read raw/ files. If a render needs a quote that's only in raw, the user should first promote that quote into a source page..py is mandatory. A PNG without script is not allowed — it forecloses future edits.pyproject.toml. Marp viewing is the user's responsibility (Obsidian plugin or CLI). No additional installs.agents/marp_writer.md — produces a .md Marp deckagents/chart_writer.md — produces a .py matplotlib script (the orchestrator runs it to make the PNG)agents/canvas_writer.md — produces a .canvas JSON file plus a .meta.yaml sidecaragents/brief_writer.md — produces a .md social content brief (problem→solution opening with the 6 W's, prompt-driven body, 3 high-signal open questions)© iusztinpaul, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files in plugins/ai-research-os/skills/research-render of iusztinpaul/ai-research-os-workshop.
Open the folder on GitHubat commit dc66605
Research Render next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Research Render this skilliusztinpaul/ai-research-os-workshop | 179 | — | ~3.7k | Automated safety check: Pass | MIT | |
| Create PresentationJetBrains/youtrackdb | 437 | — | ~1.8k | Automated safety check: Pass | Apache-2.0 | |
| Paper FiguresEvoScientist/EvoSkills | 475 | 1 repos | ~4.4k | Automated safety check: Pass | Apache-2.0 | |
| Img2pptxLancelot-Xie/img2pptx | 160 | — | ~5.9k | Automated safety check: Pass | Apache-2.0 | |
| CSV To Executive Reportskrun-dev/skrun | 210 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Canvas Presentation BuilderAgriciDaniel/claude-canvas | 299 | — | ~1.3k | Automated safety check: Pass | MIT |
JetBrains/youtrackdb
Generate a PPTX presentation explaining code changes on the current branch, with matplotlib diagrams and dark theme slides.
EvoScientist/EvoSkills
A skill your agent uses to produce standalone, publication-ready PNG graphics and reproducible matplotlib scripts from tabular data (CSVs or DataFrames).
Lancelot-Xie/img2pptx
Reconstruct raster reference images as one-slide editable, modular, auditable PPTX files containing a complete SVG.
skrun-dev/skrun
Turn a CSV of operational data (sales, usage, signups, support tickets) into a multi-page styled PDF executive report with narrative + matplotlib charts.
AgriciDaniel/claude-canvas
Builds an Obsidian Advanced Canvas slide deck with title, content and closing slides wired together by arrow-key navigation edges.
RTFM-IT-Services-LLC/msp-claude-skills
A skill your agent uses whenever generating ANY document, marketing material, email, proposal, slide deck, or other customer- or internal-facing content for your MSP, so that naming, visual style…
iusztinpaul/ai-research-os-workshop
Health-check a research directory produced by /research. An agent skill from iusztinpaul/ai-research-os-workshop.
iusztinpaul/ai-research-os-workshop
Expert guide for the NotebookLM CLI (nlm) and MCP server - interfaces for Google NotebookLM.
iusztinpaul/ai-research-os-workshop
Build, extend, AND query a persistent LLM-maintained wiki for any research topic.
iusztinpaul/ai-research-os-workshop
Distill a research directory (produced by /research) into a single compact research.md containing a guideline-relative distillation of only the sources that were actually used in a piece of content.
iusztinpaul/ai-research-os-workshop
How to use the Readwise CLI — access highlights, documents, and your entire reading library from the command line
Works with
Categories
Generate a multi-form answer (Marp slide deck, matplotlib chart, Obsidian Canvas, or social content brief) from one or more wiki pages in a research directory and file the output back into…. Research Render is an agent skill from iusztinpaul/ai-research-os-workshop. Generate a multi-form answer (Marp slide deck, matplotlib chart, Obsidian Canvas, or social content brief) from one or more wiki pages in a research directory and file the output back into wiki/renders/.
Research Render fits situations like: the user wants to make a slide deck on X; chart the comparison of A vs B; build a canvas of how these concepts connect; render this as Marp.
Run `npx skills add iusztinpaul/ai-research-os-workshop --skill research-render -a claude-code`. Or copy the skill folder (plugins/ai-research-os/skills/research-render in iusztinpaul/ai-research-os-workshop) into .claude/skills/research-render in your project. Claude Code loads it when a task matches its description.
Run `npx skills add iusztinpaul/ai-research-os-workshop --skill research-render -a codex`. Or copy the skill folder (plugins/ai-research-os/skills/research-render in iusztinpaul/ai-research-os-workshop) into .agents/skills/research-render in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add iusztinpaul/ai-research-os-workshop --skill research-render -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/research-render, .gemini/skills/research-render, .github/skills/research-render and .opencode/skills/research-render in your project.
Going by SKILL.md and its folder, Research Render needs the command-line tools its instructions call (uv). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Research Render is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Research Render: Create Presentation (JetBrains/youtrackdb, 437 stars), Paper Figures (EvoScientist/EvoSkills, 475 stars), Img2pptx (Lancelot-Xie/img2pptx, 160 stars) and CSV To Executive Report (skrun-dev/skrun, 210 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
iusztinpaul (a GitHub user) maintains it in iusztinpaul/ai-research-os-workshop, which has 179 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on June 27, 2026.
Source: iusztinpaul/ai-research-os-workshop on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.