# Research Report Builder

> Build PPT decks, Word documents, Markdown reports, speaker notes, briefs, or outlines from a user-specified Markdown or Obsidian knowledge base. Use when the user explicitly asks to generate 汇报/PPT/Word/报告/组会材料/总结 from notes or a knowledge base. Must ask for the knowledge-base path if none is provided, and must preserve compatibility with notes created by research-memory-sync.

- Skill: `lichang-12/research-report-builder` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add lichang-12/research-report-builder`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lichang-12/research-report-builder/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: Lichang-12 (https://skillmd.com/u/lichang-12)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/lichang-12/research-report-builder

---


# Research Report Builder

Use this skill to read a user-specified Markdown/Obsidian knowledge base and turn selected notes into a structured deliverable: PPT, Word, Markdown report, speech稿, meeting brief, or outline.

## Contract with research-memory-sync

This skill must treat `research-memory-sync` output as the primary input format.

Recognize these structures:

```text
<kb-path>/
  00_Index/
  Inbox/
  Projects/<project>/
  Learning/<topic>/
  Literature/<paper-or-author>/
  Methods/
  Reports/
  Slides/
```

Also recognize single-project layouts:

```text
<kb-path>/
  00_Index/
  Concepts/
  QA/
  Experiments/
  Decisions/
  Prompts/
  Reports/
  Slides/
```

Recognize frontmatter fields from `research-memory-sync`:

- `type`
- `created`
- `updated`
- `tags`
- optional `project`
- optional `status`

Prefer notes with these types when building reports:

- `experiment-note`
- `decision-note`
- `qa-note`
- `concept-note`
- `prompt-note`
- `report-note`
- `slide-note`

Do not require every note to have perfect frontmatter; fall back to headings and folder names.

## Non-negotiable path rule

Never read from a default knowledge-base path.

Before reading or writing, require one of:

- a knowledge-base path explicitly provided in the current user request;
- a path explicitly provided earlier in the same active task and clearly still in scope.

If no path is available, stop and ask for the path. Do not guess from past projects, previous vaults, or common Obsidian locations.

If the requested output path is missing:

- for PPT/Word, ask or use a clearly named `Reports/` or `Slides/` folder inside the user-provided knowledge base only if the user asked to save there;
- otherwise create the artifact in the current project/workspace output folder and report its path.

## Workflow

1. Confirm inputs.
   - Knowledge-base path: required.
   - Output type: PPT, Word, Markdown, outline, or speaker notes. If missing, ask.
   - Scope: project/topic/date range/query. If missing but inferable, state the assumption.
2. Inspect the knowledge base.
   - Read indexes first: `00_Index/Home.md`, local `Index.md`, project indexes.
   - Use note frontmatter, folder names, headings, and links to find relevant notes.
   - Do not mutate source notes unless explicitly requested.
3. Build a source packet.
   - Collect relevant notes.
   - Extract facts, metrics, decisions, open questions, commands, and artifacts.
   - Keep file provenance for important claims.
4. Choose output structure.
   - PPT: conclusion-first, low text, charts/tables where data exists, optional speaker notes.
   - Word: formal sections, more explanation, citations to source note paths.
   - Markdown: reusable summary that can be written back to the knowledge base if requested.
5. Use the right downstream skill/tool.
   - For PPT, use the `presentations` skill.
   - For Word/docx, use the `documents` skill.
   - For spreadsheets/charts from tables, use the `spreadsheets` skill when useful.
6. Verify.
   - PPT: render and check slides.
   - Word: render/inspect if layout matters.
   - Markdown: check links and paths.
7. Report deliverables.
   - Provide created file paths.
   - List source note folders used.
   - Mention major assumptions and omitted content.

## Output style defaults

Unless the user says otherwise:

- Use Chinese for Chinese notes or Chinese user requests.
- Prefer data and comparison tables over long prose.
- Lead with the conclusion.
- Separate facts from interpretation.
- Include a final “下一步 / 建议” section.
- For PPT, keep each slide to one main claim.
- For PPT, add speaker notes when the user asks for 汇报 or 读稿.

## Scope selection rules

When the user gives a project/topic name, search in this order:

1. `Projects/<name>/`
2. `Learning/<name>/`
3. `Literature/<name>/`
4. full-text search across the knowledge base

When the user asks for “最近/本周/这次/刚才”:

- Use note dates and current conversation context.
- If the date range is ambiguous and affects the report materially, ask.

When too many notes match:

- summarize the candidate set;
- ask whether to narrow by project/topic/date;
- or proceed with the most relevant notes if the user asked for a quick draft.

## Optional helper script

Use `scripts/collect_notes.py` for deterministic note discovery and source-packet creation. It is read-only and requires `--kb-path`; it has no default path.

Read `references/report-patterns.md` for recommended PPT/Word/Markdown structures and how to map note types into deliverables.

