Generate a course outline with research dossier using the VectorShift pipeline. Automatically converts and compresses files before upload.
Generate a comprehensive course outline and research dossier from a topic and reference materials. Automatically converts non-PDF files (PPTX, DOCX, etc.) to PDF using LibreOffice, then compresses large PDFs (>5MB) using Ghostscript before uploading to VectorShift.
/generate-outline "<topic>" --materials <folder> [options]
Examples:
/generate-outline "Cardiovascular Longevity" --materials "course materials/"/generate-outline "Peptide Therapy Fundamentals" --materials "/path/to/materials/" --dry-run/generate-outline "Topic" --materials "/materials/" --outline existing_outline.md| Extension | Type | Processing |
|---|
.pdf | Compress only | |
.pptx, .ppt | PowerPoint | Convert to PDF, then compress |
.docx, .doc | Word | Convert to PDF, then compress |
.xlsx, .xls | Excel | Convert to PDF, then compress |
.odt | OpenDocument Text | Convert to PDF, then compress |
.odp | OpenDocument Presentation | Convert to PDF, then compress |
.ods | OpenDocument Spreadsheet | Convert to PDF, then compress |
| Tool | Install Command | Purpose |
|---|---|---|
| LibreOffice | brew install --cask libreoffice | Convert PPTX, DOCX, etc. to PDF |
| Ghostscript | brew install ghostscript | Compress PDFs >5MB |
When this skill is invoked, execute the following steps:
python3 "/Users/anantvinjamoori/Vectorshift Pipelines/cli/outline_creator_runner.py" \
"{topic}" \
--materials "{materials_folder}" \
{--outline file if specified} \
{--dry-run if specified} \
{--output folder if specified}
Use this skill when the user:
/generate-outline| Property | Value |
|---|---|
| Pipeline ID | 695f56da724cd19d980e4f1d |
| Pipeline Name | Course Outline Creator v3 (Parallel Batch Processing) |
| Module | vs_pipelines/course_outline_creator_v3.py |
| CLI Helper | cli/outline_creator_runner.py |
Materials → [4 Parallel Extractors] → [Combiner] → [Perplexity] → [Outline]
Files are automatically split into 4 batches for parallel processing, preventing token limit issues with large material sets.
Ask the user for:
Always show a dry run first for large material sets:
python3 "/Users/anantvinjamoori/Vectorshift Pipelines/cli/outline_creator_runner.py" \
"{topic}" \
--materials "{materials_folder}" \
--dry-run
This shows:
After user confirmation:
python3 "/Users/anantvinjamoori/Vectorshift Pipelines/cli/outline_creator_runner.py" \
"{topic}" \
--materials "{materials_folder}"
Options:
--outline <file> - Existing outline to revise--output <folder> - Custom output folder--pipeline-id <id> - Override pipeline IDAfter completion, show the user:
Generated files are saved to outputs/outlines/{topic_name}/:
| File | Content |
|---|---|
extracted_topics.md | Research brief extracted from materials (for debugging) |
course_dossier.md | Deep research dossier from Perplexity |
course_outline.md | Structured 10-15 lecture curriculum |
PPTX/DOCX/etc. ──[LibreOffice]──> PDF ──[Ghostscript]──> Compressed PDF ──> Upload
PDF ──────────────────────────────[Ghostscript]──> Compressed PDF ──> Upload
| Original Size | Typical Compressed Size |
|---|---|
| 10MB | 3-5MB |
| 50MB | 10-20MB |
| 100MB | 20-40MB |
Compression quality: ebook (150dpi) - balances quality and size
| Error | Action |
|---|---|
| Materials folder not found | Ask user for correct path |
| No supported files found | Warn and ask if they want to proceed |
| LibreOffice not found | Warn, skip conversion for non-PDFs |
| Ghostscript not found | Warn about large uploads, proceed without compression |
| API timeout | Retry 3x with 30s delay |
| API rate limit (429) | Wait and retry with backoff |
If output capture fails locally, the task_id fallback triggers automatically—no manual intervention required.
VectorShift confirmed: The task_id returned when submitting a job can be used directly to query results (task_id == span_id for queries).
The runner script stores the task_id and automatically retries fetching results on timeout.
If you have a task_id from a previous run:
# Use task_id directly (same as span_id)
python3 "/Users/anantvinjamoori/Vectorshift Pipelines/cli/fetch_by_span_id.py" \
695f56da724cd19d980e4f1d \
<TASK_ID> \
--output-dir ./output
See vectorshift-pipeline-deployment.md for details.
Via slash command:
/generate-outline "Cardiovascular Longevity" --materials "course materials/"
/generate-outline "Topic" --materials "/materials/" --dry-run
/generate-outline "Topic" --materials "/materials/" --outline existing.md
Via natural language:
User: "I have a folder at 'course materials/' with PDFs and PowerPoints. Create an outline for a peptide therapy course."
Claude: First runs dry-run to show file analysis, confirms tools are available, then confirms with user before executing.
User: "Some files are over 100MB"
Claude: Shows compression/conversion analysis, confirms both LibreOffice and Ghostscript are available, proceeds with processing.