pptx-creator — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited pptx-creator (Agent Skill) and scored it 91/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 1 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} is the classic direct prompt-injection phrasing. Placed in a skill body that the agent reads as trusted instructions, it tries to make the agent abandon its prior rules and follow whatever comes next — a full system-prompt override.
ignore/disregard/forget … previous instructions sentence.Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
| Workflow | When to Use |
|---|---|
| Read | Extract text, generate thumbnails from an existing PPTX |
| Create | Build a new presentation from scratch using pptxgenjs |
| Edit | Unpack XML, modify content, repack existing PPTX |
pip install markitdownfrom markitdown import MarkItDown
converter = MarkItDown()
result = converter.convert("presentation.pptx")
print(result.text_content) # all slides as markdown# Requires LibreOffice
libreoffice --headless --convert-to png presentation.pptx
# Generates: Slide1.png, Slide2.png, ...npm install pptxgenjsconst PptxGenJS = require('pptxgenjs')
const pptx = new PptxGenJS()
// Set presentation properties
pptx.layout = 'LAYOUT_WIDE' // 16:9
pptx.author = 'Claude'
// ─── SLIDE 1: Title Slide ───────────────────────────────────────────────────
const slide1 = pptx.addSlide()
slide1.background = { color: '1a1a2e' } // dark navy
slide1.addText('Quarterly Review', {
x: 1, y: 1.5, w: 8, h: 1.5,
fontSize: 48, bold: true, color: 'ffffff',
align: 'center', fontFace: 'Georgia',
})
slide1.addText('Q1 2026 Results', {
x: 1, y: 3.2, w: 8, h: 0.8,
fontSize: 24, color: 'e0e0e0',
align: 'center',
})
// ─── SLIDE 2: Content Slide ─────────────────────────────────────────────────
const slide2 = pptx.addSlide()
// Title
slide2.addText('Key Metrics', {
x: 0.5, y: 0.3, w: 9, h: 0.8,
fontSize: 32, bold: true, color: '1a1a2e',
})
// Divider line (using shape)
slide2.addShape(pptx.ShapeType.rect, {
x: 0.5, y: 1.15, w: 9, h: 0.05,
fill: { color: '4a90e2' }, line: { color: '4a90e2' },
})
// Bullet points
slide2.addText([
{ text: 'Revenue: ', options: { bold: true } },
{ text: '$2.4M (+18% YoY)' },
], { x: 0.7, y: 1.5, w: 8.3, h: 0.5, fontSize: 18, color: '333333' })
slide2.addText([
{ text: 'Users: ', options: { bold: true } },
{ text: '142,000 active (+32%)' },
], { x: 0.7, y: 2.1, w: 8.3, h: 0.5, fontSize: 18, color: '333333' })
// ─── SLIDE 3: Chart Slide ───────────────────────────────────────────────────
const slide3 = pptx.addSlide()
slide3.addText('Monthly Revenue', {
x: 0.5, y: 0.3, w: 9, h: 0.8,
fontSize: 28, bold: true, color: '1a1a2e',
})
slide3.addChart(pptx.ChartType.bar, [
{
name: 'Revenue ($K)',
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
values: [180, 210, 195, 240, 225, 280],
}
], {
x: 0.5, y: 1.2, w: 9, h: 4.5,
chartColors: ['4a90e2'],
showLegend: false,
valAxisLabelFontSize: 12,
catAxisLabelFontSize: 12,
})
// Save
await pptx.writeFile({ fileName: 'quarterly-review.pptx' })
console.log('Presentation saved.')PPTX files are ZIP archives containing XML. Edit in three steps:
mkdir unpacked
unzip presentation.pptx -d unpacked/
# Slides are in: unpacked/ppt/slides/slide1.xml, slide2.xml, ...Slides are in unpacked/ppt/slides/slideN.xml. Text runs are in <a:t> elements:
<!-- Find and update text like this -->
<a:t>Old Title Text</a:t>
<!-- Change to: -->
<a:t>New Title Text</a:t>Use smart quotes in professional documents: “ (") and ” (").
cd unpacked/
zip -r ../output.pptx . -x "*.DS_Store"
cd ..Click to add text)After creating slides:
libreoffice --headless --convert-to png output.pptx| Tool | Purpose | Install |
|---|---|---|
pptxgenjs | Create new presentations | npm install pptxgenjs |
markitdown | Extract text from PPTX | pip install markitdown |
| LibreOffice | Convert to images / PDF | System package |
unzip / zip | Unpack/repack for XML editing | System package |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.