@pikaa-ai/pikaa 0.3.23 → 0.3.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/assets/brand/orbit-logo-option4-whale.jpg +0 -0
  2. package/assets/brand/orbit-logo.jpg +0 -0
  3. package/assets/brand/orbit-logo.png +0 -0
  4. package/assets/brand/orbit-logo.svg +3 -0
  5. package/dist/cli.js +337 -162
  6. package/dist/index.js +1 -2
  7. package/package.json +1 -2
  8. package/skills/adaptyv/SKILL.md +0 -240
  9. package/skills/aeon/SKILL.md +0 -402
  10. package/skills/analytical-method-validation/SKILL.md +0 -299
  11. package/skills/anndata/SKILL.md +0 -431
  12. package/skills/arbor/SKILL.md +0 -152
  13. package/skills/arboreto/SKILL.md +0 -267
  14. package/skills/astropy/SKILL.md +0 -353
  15. package/skills/autoskill/SKILL.md +0 -233
  16. package/skills/benchling-integration/SKILL.md +0 -229
  17. package/skills/bgpt-paper-search/SKILL.md +0 -75
  18. package/skills/bids/SKILL.md +0 -237
  19. package/skills/biopython/SKILL.md +0 -472
  20. package/skills/bioservices/SKILL.md +0 -399
  21. package/skills/bulk-rnaseq/SKILL.md +0 -198
  22. package/skills/cellxgene-census/SKILL.md +0 -283
  23. package/skills/cirq/SKILL.md +0 -370
  24. package/skills/citation-management/SKILL.md +0 -329
  25. package/skills/clinical-decision-support/SKILL.md +0 -238
  26. package/skills/clinical-decision-support/references/README.md +0 -62
  27. package/skills/clinical-reports/SKILL.md +0 -248
  28. package/skills/clinical-reports/references/README.md +0 -34
  29. package/skills/cobrapy/SKILL.md +0 -496
  30. package/skills/consciousness-council/SKILL.md +0 -151
  31. package/skills/dask/SKILL.md +0 -482
  32. package/skills/database-lookup/SKILL.md +0 -386
  33. package/skills/datamol/SKILL.md +0 -200
  34. package/skills/deepchem/SKILL.md +0 -244
  35. package/skills/deepspot-m/SKILL.md +0 -175
  36. package/skills/deeptools/SKILL.md +0 -412
  37. package/skills/depmap/SKILL.md +0 -301
  38. package/skills/dhdna-profiler/SKILL.md +0 -184
  39. package/skills/diffdock/SKILL.md +0 -488
  40. package/skills/dnanexus-integration/SKILL.md +0 -325
  41. package/skills/docx/SKILL.md +0 -99
  42. package/skills/esm/SKILL.md +0 -334
  43. package/skills/etetoolkit/SKILL.md +0 -327
  44. package/skills/exa-search/SKILL.md +0 -102
  45. package/skills/executing-plans/SKILL.md +0 -14
  46. package/skills/experimental-design/SKILL.md +0 -234
  47. package/skills/exploratory-data-analysis/SKILL.md +0 -280
  48. package/skills/flowio/SKILL.md +0 -310
  49. package/skills/fluidsim/SKILL.md +0 -279
  50. package/skills/frontend-design/SKILL.md +0 -100
  51. package/skills/generate-image/SKILL.md +0 -304
  52. package/skills/geniml/SKILL.md +0 -310
  53. package/skills/genomic-coordinates/SKILL.md +0 -189
  54. package/skills/genomic-intelligence/SKILL.md +0 -243
  55. package/skills/geomaster/README.md +0 -105
  56. package/skills/geomaster/SKILL.md +0 -366
  57. package/skills/geopandas/SKILL.md +0 -250
  58. package/skills/get-available-resources/SKILL.md +0 -260
  59. package/skills/gget/SKILL.md +0 -153
  60. package/skills/ginkgo-cloud-lab/SKILL.md +0 -106
  61. package/skills/glycoengineering/SKILL.md +0 -339
  62. package/skills/gtars/SKILL.md +0 -282
  63. package/skills/guardian-rails/SKILL.md +0 -54
  64. package/skills/histolab/SKILL.md +0 -243
  65. package/skills/hugging-science/SKILL.md +0 -132
  66. package/skills/hypogenic/SKILL.md +0 -290
  67. package/skills/hypothesis-generation/SKILL.md +0 -264
  68. package/skills/imaging-data-commons/SKILL.md +0 -496
  69. package/skills/infographics/SKILL.md +0 -315
  70. package/skills/iso-standards-readiness/SKILL.md +0 -352
  71. package/skills/lab-hardware-cad/SKILL.md +0 -372
  72. package/skills/labarchive-integration/SKILL.md +0 -216
  73. package/skills/lamindb/SKILL.md +0 -408
  74. package/skills/latchbio-integration/SKILL.md +0 -227
  75. package/skills/latex-posters/SKILL.md +0 -369
  76. package/skills/latex-posters/references/README.md +0 -439
  77. package/skills/liteparse/SKILL.md +0 -295
  78. package/skills/literature-review/SKILL.md +0 -263
  79. package/skills/markdown-mermaid-writing/SKILL.md +0 -322
  80. package/skills/market-research-reports/SKILL.md +0 -337
  81. package/skills/markitdown/SKILL.md +0 -264
  82. package/skills/matchms/SKILL.md +0 -276
  83. package/skills/matlab/SKILL.md +0 -274
  84. package/skills/matplotlib/SKILL.md +0 -378
  85. package/skills/medchem/SKILL.md +0 -321
  86. package/skills/modal/SKILL.md +0 -468
  87. package/skills/molecular-dynamics/SKILL.md +0 -458
  88. package/skills/molfeat/SKILL.md +0 -348
  89. package/skills/ncats-arax/SKILL.md +0 -178
  90. package/skills/networkx/SKILL.md +0 -440
  91. package/skills/neurokit2/SKILL.md +0 -323
  92. package/skills/neuropixels-analysis/SKILL.md +0 -412
  93. package/skills/nextflow/SKILL.md +0 -195
  94. package/skills/omero-integration/SKILL.md +0 -222
  95. package/skills/onekgpd/SKILL.md +0 -371
  96. package/skills/ontology-term-resolution/SKILL.md +0 -147
  97. package/skills/open-notebook/SKILL.md +0 -297
  98. package/skills/openpiv/SKILL.md +0 -469
  99. package/skills/opentrons-integration/SKILL.md +0 -322
  100. package/skills/optimize-for-gpu/SKILL.md +0 -176
  101. package/skills/owasp-top10/SKILL.md +0 -48
  102. package/skills/pacsomatic/LICENSE +0 -21
  103. package/skills/pacsomatic/SKILL.md +0 -150
  104. package/skills/paper-lookup/SKILL.md +0 -263
  105. package/skills/paperclip/SKILL.md +0 -413
  106. package/skills/paperzilla/SKILL.md +0 -159
  107. package/skills/parallel-web/SKILL.md +0 -128
  108. package/skills/pathml/SKILL.md +0 -222
  109. package/skills/pathogen-variant-surveillance/SKILL.md +0 -208
  110. package/skills/pathway-enrichment/SKILL.md +0 -194
  111. package/skills/pdf/SKILL.md +0 -322
  112. package/skills/peer-review/SKILL.md +0 -288
  113. package/skills/penetration-testing/SKILL.md +0 -31
  114. package/skills/pennylane/SKILL.md +0 -240
  115. package/skills/phylogenetics/SKILL.md +0 -409
  116. package/skills/pi-agent/SKILL.md +0 -83
  117. package/skills/pkpd-modeling/SKILL.md +0 -381
  118. package/skills/polars/SKILL.md +0 -393
  119. package/skills/polars-bio/SKILL.md +0 -379
  120. package/skills/ponytail/SKILL.md +0 -31
  121. package/skills/ponytail-audit/SKILL.md +0 -18
  122. package/skills/pptx/SKILL.md +0 -246
  123. package/skills/pptx-posters/SKILL.md +0 -258
  124. package/skills/primekg/SKILL.md +0 -99
  125. package/skills/protocolsio-integration/SKILL.md +0 -236
  126. package/skills/pufferlib/SKILL.md +0 -328
  127. package/skills/pydeseq2/SKILL.md +0 -369
  128. package/skills/pydicom/SKILL.md +0 -381
  129. package/skills/pyhealth/SKILL.md +0 -124
  130. package/skills/pylabrobot/SKILL.md +0 -216
  131. package/skills/pymatgen/SKILL.md +0 -404
  132. package/skills/pymc/SKILL.md +0 -310
  133. package/skills/pymoo/SKILL.md +0 -276
  134. package/skills/pyopenms/SKILL.md +0 -179
  135. package/skills/pysam/SKILL.md +0 -330
  136. package/skills/pytdc/SKILL.md +0 -297
  137. package/skills/pytorch-lightning/SKILL.md +0 -191
  138. package/skills/pyzotero/SKILL.md +0 -137
  139. package/skills/qiskit/SKILL.md +0 -259
  140. package/skills/qutip/SKILL.md +0 -317
  141. package/skills/rdkit/SKILL.md +0 -94
  142. package/skills/relsa-severity-assessment/SKILL.md +0 -354
  143. package/skills/research-grants/SKILL.md +0 -296
  144. package/skills/research-grants/references/README.md +0 -287
  145. package/skills/research-lookup/README.md +0 -106
  146. package/skills/research-lookup/SKILL.md +0 -338
  147. package/skills/rowan/SKILL.md +0 -398
  148. package/skills/scanpy/SKILL.md +0 -303
  149. package/skills/scholar-evaluation/SKILL.md +0 -296
  150. package/skills/scientific-brainstorming/SKILL.md +0 -282
  151. package/skills/scientific-critical-thinking/SKILL.md +0 -180
  152. package/skills/scientific-schematics/SKILL.md +0 -370
  153. package/skills/scientific-slides/SKILL.md +0 -379
  154. package/skills/scientific-visualization/SKILL.md +0 -285
  155. package/skills/scientific-writing/SKILL.md +0 -356
  156. package/skills/scikit-bio/SKILL.md +0 -470
  157. package/skills/scikit-learn/SKILL.md +0 -324
  158. package/skills/scikit-survival/SKILL.md +0 -313
  159. package/skills/scvelo/SKILL.md +0 -328
  160. package/skills/scvi-tools/SKILL.md +0 -201
  161. package/skills/seaborn/SKILL.md +0 -254
  162. package/skills/security-auditor/SKILL.md +0 -37
  163. package/skills/shap/SKILL.md +0 -282
  164. package/skills/simpy/SKILL.md +0 -283
  165. package/skills/stable-baselines3/SKILL.md +0 -325
  166. package/skills/statistical-analysis/SKILL.md +0 -446
  167. package/skills/statistical-power/SKILL.md +0 -200
  168. package/skills/statsmodels/SKILL.md +0 -238
  169. package/skills/sympy/SKILL.md +0 -354
  170. package/skills/systematic-debugging/SKILL.md +0 -35
  171. package/skills/tamarind/SKILL.md +0 -285
  172. package/skills/tdd/SKILL.md +0 -26
  173. package/skills/tiledbvcf/SKILL.md +0 -456
  174. package/skills/timesfm-forecasting/SKILL.md +0 -408
  175. package/skills/timesfm-forecasting/examples/global-temperature/README.md +0 -178
  176. package/skills/torch-geometric/SKILL.md +0 -458
  177. package/skills/torchdrug/SKILL.md +0 -241
  178. package/skills/transformers/SKILL.md +0 -195
  179. package/skills/treatment-plans/SKILL.md +0 -174
  180. package/skills/treatment-plans/references/README.md +0 -19
  181. package/skills/umap-learn/SKILL.md +0 -488
  182. package/skills/uncertainty-and-units/SKILL.md +0 -384
  183. package/skills/usfiscaldata/SKILL.md +0 -171
  184. package/skills/vaex/SKILL.md +0 -204
  185. package/skills/venue-templates/SKILL.md +0 -269
  186. package/skills/verification-before-completion/SKILL.md +0 -22
  187. package/skills/waypoint-bio/SKILL.md +0 -273
  188. package/skills/what-if-oracle/SKILL.md +0 -184
  189. package/skills/writing-plans/SKILL.md +0 -15
  190. package/skills/xlsx/SKILL.md +0 -110
  191. package/skills/zarr-python/SKILL.md +0 -241
@@ -1,246 +0,0 @@
1
- ---
2
- name: pptx
3
- description: "Use this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates (.potx), layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx or .potx filename, regardless of what they plan to do with the content afterward. If a .pptx or .potx file needs to be opened, created, or touched, use this skill."
4
- license: Proprietary. LICENSE.txt has complete terms
5
- metadata:
6
- version: "2.1"
7
- skill-author: Anthropic, PBC
8
- source: https://github.com/anthropics/skills/tree/main/skills/pptx
9
- ---
10
-
11
- # PPTX creation, editing, and analysis
12
-
13
- A `.pptx` is a ZIP archive of XML files. Choose your approach by task:
14
-
15
- | Task | Approach |
16
- |---|---|
17
- | **Create** a new deck | Write a `pptxgenjs` script — see gotchas below |
18
- | **Edit** an existing deck, or build from a template | unzip → edit `ppt/slides/slideN.xml` → zip |
19
- | **Read** content | `markitdown deck.pptx` (one block per slide under `<!-- Slide number: N -->` markers); visual grid: `python scripts/thumbnail.py deck.pptx` |
20
-
21
- ## Scripts
22
-
23
- Paths are relative to this skill's directory. Everything else is plain Python, `node`, or shell.
24
-
25
- | Script | What it does |
26
- |---|---|
27
- | `scripts/thumbnail.py deck.pptx [prefix]` | Labeled grid of every slide, for picking template layouts. `.pptx` only. Pass `prefix` — it defaults to `thumbnails`, which overwrites the grids of any other deck done in the same directory |
28
- | `scripts/add_slide.py unpacked/ slide2.xml [--after slideN.xml]` | Duplicate a slide (or a `slideLayoutN.xml`) with all the package bookkeeping. Also takes a `.pptx` directly with `-o out.pptx` |
29
- | `scripts/clean.py unpacked/` | Delete slides, media, and rels no longer referenced. Run **after** `<p:sldIdLst>` is final |
30
- | `scripts/office/validate.py deck.pptx [--original src.pptx]` | Schema, relationship, content-type, chart and slide checks; each failure names its fix. Pass `--original` for any template-derived deck — it baselines the schema checks against the template, so the template's own XSD errors don't read as yours |
31
- | `scripts/office/soffice.py --headless --convert-to pdf deck.pptx` | LibreOffice wrapper — bare `soffice` hangs in this sandbox |
32
-
33
- ## Creating with pptxgenjs — gotchas
34
-
35
- `pptxgenjs` is preinstalled — do not run `npm install` first; write the script and `require('pptxgenjs')` directly. Only if that require fails: `npm install pptxgenjs`. The model knows the API; these are the footguns:
36
-
37
- - **Set `pres.layout` before adding slides.** The default canvas is `LAYOUT_16x9` = **10" × 5.625"**, not 13.3" wide. Coordinates past the edge are written, not clamped — the shape just isn't on the slide. (`LAYOUT_WIDE` is 13.3" × 7.5".)
38
- - **Hex colors: never `#`, never 8 digits.** `color: "FF0000"`. Both `"#FF0000"` and alpha baked into the hex (`"00000020"`) **corrupt the file**. For translucency: `transparency: 0-100` on fills and images, `opacity: 0.0-1.0` on shadows — each is silently ignored on the other.
39
- - **pptxgenjs mutates option objects in place** (converts values to EMU on first use). Never share one `shadow`/options object across two `add*` calls — build a fresh object each time.
40
- - **Shadow `offset` must be ≥ 0** — a negative offset corrupts the file. To cast a shadow upward, use `angle: 270` with a positive offset.
41
- - **`letterSpacing` is silently ignored** — the real option is `charSpacing`.
42
- - **Lists:** `bullet: true` on each item, never a literal `•` (renders double bullets). Set `breakLine: true` on every array item except the last. Space bulleted paragraphs with `paraSpaceAfter`, not `lineSpacing` (huge gaps).
43
- - **One `new pptxgen()` per output file** — never reuse an instance.
44
- - **`rectRadius` only works on `ROUNDED_RECTANGLE`**, not `RECTANGLE`.
45
- - **Gradient fills aren't supported** — use a gradient image as the background instead.
46
- - **Text boxes have built-in internal padding** — set `margin: 0` whenever text must align with a shape, line, or icon at the same x.
47
- - **Speaker notes go in `slide.addNotes("...")`** (plain text, once per slide), never in a text box on the slide.
48
- - **Keep charts native.** Use `addChart()` for everything PowerPoint can chart (pass an array of `{type, data, options}` for combos). For PowerPoint-native features the library doesn't expose (trendlines, error bars), compute the extra series yourself or post-process the generated OOXML — do not fall back to a rendered image. Only chart types PowerPoint has no native form for (Sankey, network, chord) go in as images.
49
- - **Default charts render bare** — no title, no data labels, dated palette. Set `showTitle` + `title`, `showValue: true` + `dataLabelPosition`, `chartColors: [...]` from your palette, and quiet the frame (`catAxisLabelColor`/`valAxisLabelColor`, `valGridLine: { color, size }`, `catGridLine: { style: "none" }`, `showLegend: false` for a single series).
50
- - **On a stacked bar or column chart, `dataLabelPosition` must be `ctr`, `inEnd`, or `inBase`.** `outEnd` **corrupts the file**.
51
- - **A combo series using `secondaryValAxis`/`secondaryCatAxis` needs both `valAxes` and `catAxes` on the chart options, two entries each.** Without them pptxgenjs writes axis *ids* it never declares, and PowerPoint **discards that chart** and reports the file as corrupt. Supplying only `valAxes` is not enough.
52
- - **After `writeFile()`, run `python scripts/office/validate.py deck.pptx`.** It reports the two chart faults above and the slide-XML defects PowerPoint refuses, and names the fix for each. Fix them in your generator, not by hand-editing the packed XML.
53
- - **Never reorder the children of `<p:presentation>`.** pptxgenjs writes `<p:notesMasterIdLst>` right after `<p:sldIdLst>` and points both masters at one theme part. PowerPoint reads that happily — move the element and the same deck becomes unopenable.
54
- - **Icons:** render `react-icons` to SVG (`ReactDOMServer.renderToStaticMarkup`), rasterize with `sharp` at ≥256px, and insert via `addImage({ data: "image/png;base64," + buf.toString("base64") })` — the `image/png;base64,` prefix is required (`react-icons`, `react`, `react-dom`, and `sharp` are preinstalled — `npm install react-icons react react-dom sharp` only if a require fails).
55
-
56
- ## Editing existing decks and templates
57
-
58
- Pick layouts first: `python scripts/thumbnail.py template.pptx template-thumbs` writes a labeled grid of every slide and prints the file(s) it created — `template-thumbs.jpg`, split into `template-thumbs-N.jpg` past 12 slides. **Always pass that second argument, named after the deck.** It defaults to `thumbnails`, so two decks thumbnailed in one directory silently overwrite each other's grids — the first deck's are simply gone (template analysis only — visual QA needs the full-resolution renders from [Converting to Images](#converting-to-images); it only accepts `.pptx`, so copy a `.potx` to a `.pptx` name first). Use it with `markitdown` to map each content section onto a template slide, and vary the layouts — don't put every section on the same title-and-bullets slide.
59
-
60
- ```bash
61
- python3 -c "import sys,zipfile; zipfile.ZipFile(sys.argv[1]).extractall('unpacked')" deck.pptx
62
- python scripts/add_slide.py unpacked/ slide2.xml --after slide2.xml # duplicate a slide (or slideLayoutN.xml); prints the new slide's path
63
- # reorder / delete slides = edit <p:sldIdLst> in ppt/presentation.xml
64
- python scripts/clean.py unpacked/ # after deletions: removes orphaned slides, media, rels
65
- # edit slide content in ppt/slides/slideN.xml
66
- (cd unpacked && rm -f ../out.pptx && zip -Xr ../out.pptx .) # zip from INSIDE the dir; rm first or deleted parts survive
67
- python scripts/office/validate.py out.pptx --original deck.pptx
68
- ```
69
-
70
- - **Do all structural work — add, delete, reorder — before editing any slide's content.** `add_slide.py` copies a slide file verbatim, so duplicating after you edit clones the edited content; and `clean.py` deletes any slide missing from `<p:sldIdLst>`, including one you just wrote.
71
- - **Never copy a slide file by hand** — `add_slide.py` does every registration a new slide needs and reports what it made (`Created ppt/slides/slide17.xml from slide2.xml`). It also works directly on a file: `add_slide.py deck.pptx slide2.xml -o out.pptx` — **pass `-o`, or it rewrites the input deck in place.** A duplicated slide still *references* its source's chart/SmartArt/embedded-object parts rather than cloning them, so editing one slide's chart changes the other's.
72
- - **If you use `python-pptx`**, three things it won't do: duplicate a slide (its only entry point is `add_slide(layout)`), preserve formatting through `text_frame.text = "..."` (that collapses the paragraph to a single unstyled run — assign `run.text` instead), or read the SVG/EMF most template art uses (`add_picture` raises `UnidentifiedImageError`).
73
- - Legacy `.ppt` must be converted first: `python scripts/office/soffice.py --headless --convert-to pptx file.ppt`. `.potx` templates unpack and pack identically — keep the `.potx` extension on the output.
74
- - To reuse a template icon or image, duplicate a slide or layout that already contains it.
75
-
76
- When filling in a template:
77
-
78
- - If you script an XML transform, parse with `defusedxml.minidom` — round-tripping OOXML through `xml.etree.ElementTree` rewrites namespace prefixes and corrupts the deck.
79
- - **Template slots ≠ source items.** If the template shows 4 team members and you have 3, delete the 4th member's entire group (image + text boxes), not just its text — then check for orphaned visuals in QA.
80
- - One `<a:p>` per list item — never concatenate items into a single paragraph. Copy the sibling `<a:pPr>` to preserve spacing, and put `b="1"` on the `<a:rPr>` of titles, section headers, and inline labels (`Status:`, `Owner:`).
81
- - Let bullets inherit from the layout; only add `<a:buChar>`, `<a:buAutoNum>` (numbered), or `<a:buNone>` to override — never a literal `•` in the text.
82
- - Text with leading or trailing spaces needs `xml:space="preserve"` on its `<a:t>`.
83
-
84
- ## Design Ideas
85
-
86
- **Don't create boring slides.** Plain bullets on a white background won't impress anyone. Consider ideas from this list for each slide.
87
-
88
- ### Before Starting
89
-
90
- - **Pick a bold, content-informed color palette**: The palette should feel designed for THIS topic. If swapping your colors into a completely different presentation would still "work," you haven't made specific enough choices.
91
- - **Dominance over equality**: One color should dominate (60-70% visual weight), with 1-2 supporting tones and one sharp accent. Never give all colors equal weight.
92
- - **Dark/light contrast**: Dark backgrounds for title + conclusion slides, light for content ("sandwich" structure). Or commit to dark throughout for a premium feel.
93
- - **Commit to a visual motif**: Pick ONE distinctive element and repeat it — rounded image frames, icons in colored circles. Carry it across every slide. **Do not use a color bar or accent stripe as your motif** (see Avoid list).
94
-
95
- ### Color Palettes
96
-
97
- Choose colors that match your topic — don't default to generic blue. Use these palettes as inspiration:
98
-
99
- | Theme | Primary | Secondary | Accent |
100
- |-------|---------|-----------|--------|
101
- | **Midnight Executive** | `1E2761` (navy) | `CADCFC` (ice blue) | `FFFFFF` (white) |
102
- | **Forest & Moss** | `2C5F2D` (forest) | `97BC62` (moss) | `F5F5F5` (cream) |
103
- | **Coral Energy** | `F96167` (coral) | `F9E795` (gold) | `2F3C7E` (navy) |
104
- | **Warm Terracotta** | `B85042` (terracotta) | `E7E8D1` (sand) | `A7BEAE` (sage) |
105
- | **Ocean Gradient** | `065A82` (deep blue) | `1C7293` (teal) | `21295C` (midnight) |
106
- | **Charcoal Minimal** | `36454F` (charcoal) | `F2F2F2` (off-white) | `212121` (black) |
107
- | **Teal Trust** | `028090` (teal) | `00A896` (seafoam) | `02C39A` (mint) |
108
- | **Berry & Cream** | `6D2E46` (berry) | `A26769` (dusty rose) | `ECE2D0` (cream) |
109
- | **Sage Calm** | `84B59F` (sage) | `69A297` (eucalyptus) | `50808E` (slate) |
110
- | **Cherry Bold** | `990011` (cherry) | `FCF6F5` (off-white) | `2F3C7E` (navy) |
111
-
112
- ### For Each Slide
113
-
114
- **Every slide needs a visual element** — image, chart, icon, or shape. Text-only slides are forgettable.
115
-
116
- **Layout options:**
117
- - Two-column (text left, illustration on right)
118
- - Icon + text rows (icon in colored circle, bold header, description below)
119
- - 2x2 or 2x3 grid (image on one side, grid of content blocks on other)
120
- - Half-bleed image (full left or right side) with content overlay
121
-
122
- **Data display:**
123
- - Large stat callouts (big numbers 60-72pt with small labels below)
124
- - Comparison columns (before/after, pros/cons, side-by-side options)
125
- - Timeline or process flow (numbered steps, arrows)
126
-
127
- **Visual polish:**
128
- - Icons in small colored circles next to section headers
129
- - Italic accent text for key stats or taglines
130
-
131
- ### Typography
132
-
133
- **Font names you write into the .pptx are rendered by the user's PowerPoint, not by this environment.** Your visual QA renders via LibreOffice, which substitutes fonts it doesn't have — and for some fonts the substitute has different widths, so your QA preview can show text overflow (or fit) that the real deck won't have. To keep your QA trustworthy:
134
-
135
- - **Safe fonts** (render true-to-width in QA *and* ship with Office): **Arial, Calibri, Cambria, Times New Roman, Courier New, Bookman Old Style, Century Schoolbook**. Use these for body text and anything where fit matters.
136
- - **Headers with personality at zero QA risk**: pair a safe-list serif header (Cambria, Bookman Old Style, Century Schoolbook) with a safe-list sans body (Calibri or Arial). You get visual contrast without giving up reliable overflow checks.
137
- - **If the user asks for a font outside the safe list** (e.g. Georgia or Trebuchet MS): use it where the user asked, but size those containers with extra slack (~10%) and don't trust QA text-fit on those elements — the preview of that font is approximate. If the user hasn't specified, prefer safe-list fonts for body text.
138
- - **QA-unreliable fonts** (substitute has different widths — overflow checks can be wrong): Georgia, Trebuchet MS, Impact, Arial Black, Garamond, Consolas, Palatino Linotype. Calibri Light substitution varies by environment; treat as QA-unreliable. Fine for titles/accents with slack; don't trust QA text-fit on these.
139
- - **Never default to Aptos** — Office's post-2023 default has no metric-compatible substitute here *and* is missing from older Office installs, so it's unreliable on both ends.
140
-
141
- | Element | Size |
142
- |---------|------|
143
- | Slide title | 36-44pt bold |
144
- | Section header | 20-24pt bold |
145
- | Body text | 14-16pt |
146
- | Captions | 10-12pt muted |
147
-
148
- ### Spacing
149
-
150
- - 0.5" minimum margins
151
- - 0.3-0.5" between content blocks
152
- - Leave breathing room—don't fill every inch
153
-
154
- ### Avoid (Common Mistakes)
155
-
156
- - **Don't repeat the same layout** — vary columns, cards, and callouts across slides
157
- - **Don't center body text** — left-align paragraphs and lists; center only titles
158
- - **Don't skimp on size contrast** — titles need 36pt+ to stand out from 14-16pt body
159
- - **Don't default to blue** — pick colors that reflect the specific topic
160
- - **Don't mix spacing randomly** — choose 0.3" or 0.5" gaps and use consistently
161
- - **Don't style one slide and leave the rest plain** — commit fully or keep it simple throughout
162
- - **Don't create text-only slides** — add images, icons, charts, or visual elements; avoid plain title + bullets
163
- - **Don't forget text box padding** — when aligning lines or shapes with text edges, set `margin: 0` on the text box or offset the shape to account for padding
164
- - **Don't use low-contrast elements** — icons AND text need strong contrast against the background; avoid light text on light backgrounds or dark text on dark backgrounds
165
- - **NEVER use accent lines under titles** — these are a hallmark of AI-generated slides; use whitespace or background color instead
166
- - **NEVER add decorative color bars or accent stripes** — this includes: header/footer bars spanning the slide width, vertical sidebar stripes down one edge of the slide, thin accent stripes along one edge of a card or content block, and "single-side borders" on rectangles. These read as AI-generated filler. If you want to set a card apart, use a subtle background tint, a drop shadow, or an icon — not an edge stripe.
167
- - **Don't default to cream/beige backgrounds** — when no background is specified, use white (`FFFFFF`) or the user's brand palette; avoid warm-neutral defaults like `F5F5DC`, `FAF0E6`, `FAEBD7`, `FFF8E1`
168
- - **Don't ship text that overflows its shape** — if text doesn't fit, reduce font size, split across slides, or enlarge the container; never leave content cut off or spilling past bounds
169
-
170
- ## QA (Required)
171
-
172
- Your first render usually has a few real issues — overlaps, overflow, misalignment. Find and fix those, re-render only the slides you changed, and stop.
173
-
174
- ### Content QA
175
-
176
- ```bash
177
- markitdown output.pptx
178
- ```
179
-
180
- Check for missing content, typos, wrong order.
181
-
182
- **When using templates, check for leftover placeholder text:**
183
-
184
- ```bash
185
- markitdown output.pptx | grep -iE "\bx{3,}\b|lorem|ipsum|\bTODO|\[insert|this.*(page|slide).*layout"
186
- ```
187
-
188
- If grep returns results, fix them before declaring success.
189
-
190
- ### File QA (required)
191
-
192
- ```bash
193
- python scripts/office/validate.py output.pptx # built from scratch
194
- python scripts/office/validate.py output.pptx --original src.pptx # built from a template
195
- ```
196
-
197
- **If the deck came from a template, always pass `--original`.** A template may itself
198
- contain parts the XSD rejects, so a bare run can report failures you never caused — and
199
- a genuine regression can hide among them. `--original` baselines
200
- the schema and slide checks against the template, suppressing errors it already had.
201
- The structural checks — relationships, content types, charts — ignore `--original` and
202
- report template-inherited problems either way, so read those on their own merits.
203
-
204
- pptxgenjs emits chart XML PowerPoint refuses to open, and every other tool
205
- accepts: python-pptx opens those decks, LibreOffice renders them, the XSD
206
- passes them. Every failure names its fix. Fix it in the generator and rebuild.
207
-
208
- ### Visual QA
209
-
210
- Convert the slides to images (see [Converting to Images](#converting-to-images)) and inspect every one. After staring at the generating code you tend to see what you expect rather than what rendered, so look at the images fresh (a subagent works well for this if you have one). User-visible defects to look for:
211
-
212
- - **Text overflow or text cut off at a box or slide boundary — check this first.** It is the most common defect and always user-visible. (For a font the previewer renders unreliably per Typography, the preview is approximate: trust the ~10% slack you left, not its apparent fit.)
213
- - Overlapping elements (text through shapes, lines through words, stacked elements)
214
- - Source citations or footers colliding with content above
215
- - Elements too close (< 0.3" gaps) or cards/sections nearly touching
216
- - Uneven gaps (large empty area in one place, cramped in another)
217
- - Insufficient margin from slide edges (< 0.5")
218
- - Columns or similar elements not aligned consistently
219
- - Low-contrast text (e.g., light gray text on cream-colored background)
220
- - Template decoration mispositioned after text replacement — e.g., a title underline positioned for one line, but the replaced title wrapped to two
221
- - Low-contrast icons (e.g., dark icons on dark backgrounds without a contrasting circle)
222
- - Text boxes too narrow causing excessive wrapping
223
- - Leftover placeholder content
224
-
225
- ## Converting to Images
226
-
227
- Convert presentations to individual slide images for visual inspection:
228
-
229
- ```bash
230
- python scripts/office/soffice.py --headless --convert-to pdf output.pptx
231
- rm -f slide-*.jpg
232
- pdftoppm -jpeg -r 150 output.pdf slide
233
- ls -1 "$PWD"/slide-*.jpg
234
- ```
235
-
236
- **Pass the absolute paths printed above directly to the view tool.** The `rm` clears stale images from prior runs. `pdftoppm` zero-pads based on page count: `slide-1.jpg` for decks under 10 pages, `slide-01.jpg` for 10-99, `slide-001.jpg` for 100+.
237
-
238
- **After fixes, rerun all four commands above** — the PDF must be regenerated from the edited `.pptx` before `pdftoppm` can reflect your changes.
239
-
240
- ## Dependencies
241
-
242
- `pptxgenjs` (npm, preinstalled — install only if `require('pptxgenjs')` fails) · `markitdown[pptx]`, `Pillow`, `defusedxml`, `lxml` (pip — text dump, thumbnail, clean, validate) · LibreOffice (`soffice`, auto-configured for sandboxed environments via `scripts/office/soffice.py`) · `pdftoppm` (Poppler)
243
-
244
- ---
245
-
246
- *This skill is created and maintained by [Anthropic](https://github.com/anthropics/skills/tree/main/skills/pptx). Vendored here unmodified except for frontmatter metadata; see LICENSE.txt for terms.*
@@ -1,258 +0,0 @@
1
- ---
2
- name: pptx-posters
3
- description: Create and audit editable scientific posters in macro-free PowerPoint (.pptx) from author-approved local content and assets. Use when the requested deliverable is a PowerPoint research/conference poster and exact physical, printer, accessibility, provenance, and package-security checks are required.
4
- license: MIT
5
- compatibility: Requires Python 3.10+, uv, and exact generation pins python-pptx 1.0.2, Pillow 12.3.0, and lxml 6.1.1. Validation and PPTX ZIP/XML inspection are local and network-free; final PowerPoint, accessibility, PDF, printer, and author review are manual.
6
- allowed-tools: Read Write Bash Glob Grep Python
7
- metadata:
8
- version: "2.1"
9
- skill-author: K-Dense Inc.
10
- ---
11
-
12
- # PPTX posters
13
-
14
- ## Scope
15
-
16
- Use this skill only when the requested source/deliverable is an editable PowerPoint
17
- poster. Do not route an unspecified poster request here merely because PowerPoint is
18
- available.
19
-
20
- Version 2.0 generates a real one-slide `.pptx` from strict local JSON. It does not use
21
- HTML conversion, external templates, schematic/image-generation services, API keys,
22
- environment files, network requests, or mandatory figure styles.
23
-
24
- ## Hard gates
25
-
26
- Stop instead of guessing when any gate is unmet:
27
-
28
- 1. The author has not supplied exact poster content and source records.
29
- 2. Any claim, number, citation, author, affiliation, funding statement, figure,
30
- license, or QR target is unresolved.
31
- 3. Current conference and printer requirements are not confirmed.
32
- 4. Author approval is not bound to the current manifest content hash.
33
- 5. An asset is remote, outside the manifest directory, unhashed, or unapproved.
34
- 6. An input is `.pptm`, contains macros/external relationships/OLE/embedded files,
35
- or is an untrusted template.
36
- 7. The requested workflow needs PowerPoint to be opened or executed automatically.
37
- 8. A script reports a package, layout, DPI, contrast, or output-plan blocker.
38
-
39
- Never fabricate missing material or leave a plausible placeholder. Drafts fail closed.
40
-
41
- ## Install exact generation dependencies
42
-
43
- From the skill directory:
44
-
45
- ```bash
46
- uv venv
47
- uv pip install "python-pptx==1.0.2" "Pillow==12.3.0" "lxml==6.1.1"
48
- ```
49
-
50
- Generation requires exactly:
51
-
52
- ```text
53
- python-pptx==1.0.2
54
- Pillow==12.3.0
55
- lxml==6.1.1
56
- ```
57
-
58
- All CLIs use lazy optional imports, so `python -B scripts/<tool>.py --help` works
59
- without these packages. Use `-B` to avoid bytecode artifacts.
60
-
61
- ## Establish requirements before layout
62
-
63
- Record these separately:
64
-
65
- - physical trim width/height and orientation;
66
- - bleed on each edge;
67
- - safe margin inside trim;
68
- - PowerPoint canvas width/height;
69
- - uniform physical-artboard/canvas print scale;
70
- - conference maximum dimensions and delivery format;
71
- - printer trim, bleed, margin, scaling, color-mode, and proof requirements;
72
- - final-output font and raster-DPI thresholds, each labeled as a heuristic or tied to
73
- an exact source.
74
- - required font faces, workstation availability, embedding permission, and the
75
- substitution/proof workflow.
76
-
77
- There is no universal poster size. Microsoft currently limits each custom PowerPoint
78
- dimension to 1–56 inches and uses one size for all slides. If the physical artboard
79
- is larger, use a proportional canvas only when the printer confirms scaling.
80
-
81
- Read `references/poster_layout_design.md`.
82
-
83
- ## Build the manifest
84
-
85
- Copy `assets/poster_manifest_template.json` into the project. The template is
86
- deliberately invalid until every replacement token, false confirmation, and draft
87
- approval is resolved.
88
-
89
- Follow `references/manifest_spec.md` and `references/poster_content_guide.md`.
90
-
91
- The manifest requires:
92
-
93
- - exact source IDs for document metadata, every element, and every asset;
94
- - `author_verified: true` on every source;
95
- - `author_approved: true` on every element and asset;
96
- - local PNG/JPEG paths and lowercase SHA-256 hashes;
97
- - exact provenance and license/permission for every optional image;
98
- - approved alt text and, when needed, a source-bound native long description;
99
- - explicit reading order and design rectangles;
100
- - visible exact fallback URL/text for every local QR image;
101
- - confirmed conference/printer rules;
102
- - declared sRGB contrast pairs and redundant data encoding;
103
- - approval bound to canonical manifest content.
104
-
105
- To obtain the content hash after all non-approval fields pass:
106
-
107
- ```bash
108
- python -B scripts/validate_manifest.py poster.json \
109
- --print-content-hash
110
- ```
111
-
112
- Give that exact manifest and hash to the author. Then set `approval.status` to
113
- `approved`, record approver and offset-aware timestamp, and copy the hash. Any
114
- non-approval edit invalidates approval.
115
-
116
- Validate the approved manifest and local assets:
117
-
118
- ```bash
119
- python -B scripts/validate_manifest.py poster.json
120
- ```
121
-
122
- ## Audit assets and palette before generation
123
-
124
- ```bash
125
- python -B scripts/inventory_images.py poster.json \
126
- --output poster.assets.json
127
-
128
- python -B scripts/check_palette.py poster.json \
129
- --output poster.palette.json
130
-
131
- python -B scripts/plan_export.py poster.json \
132
- --output poster.export-plan.json
133
- ```
134
-
135
- Effective DPI is pixels divided by final placed inches, not image metadata DPI.
136
- The inventory fully decodes bounded images and blocks EXIF/XMP/comments and embedded
137
- text/application metadata;
138
- strip those offline, then rehash and reapprove the asset.
139
- Contrast uses WCAG 2.2 sRGB mathematics; applying those values to a physical poster is
140
- a design target, not a standalone conformance claim. Keep color-redundant labels,
141
- markers, shapes, patterns, or line styles.
142
-
143
- If the printer requires CMYK, the plan blocks print-readiness until a
144
- printer-approved conversion/profile and proof exist. Do not claim that a native
145
- PowerPoint PDF is CMYK-compliant.
146
-
147
- Read `references/poster_design_principles.md`.
148
-
149
- ## Generate the PPTX
150
-
151
- Use a new output path:
152
-
153
- ```bash
154
- python -B scripts/generate_poster.py poster.json \
155
- --output poster.pptx \
156
- --report poster.generation.json
157
- ```
158
-
159
- Generation:
160
-
161
- - creates a new blank presentation; it never loads a user template;
162
- - sets the approved canvas before adding content;
163
- - uses one native title placeholder, native text boxes, and local pictures;
164
- - preserves image aspect ratio with `contain` fitting;
165
- - disables text auto-shrink;
166
- - adds elements in approved reading order;
167
- - writes approved picture alt descriptions and explicit text language to PresentationML;
168
- - does not embed fonts, audio, video, OLE, ActiveX, links, or other media;
169
- - removes default printer-settings binary data and normalizes package timestamps;
170
- - inspects the package before and after the alt-text patch;
171
- - refuses overlaps, out-of-bounds shapes, low final font size/DPI, unsafe packages,
172
- and existing destinations.
173
-
174
- It renders exact manifest text. It does not compose, summarize, research, or correct
175
- scientific content.
176
-
177
- ## Run final technical audits
178
-
179
- ```bash
180
- python -B scripts/inspect_pptx.py poster.pptx \
181
- --output poster.package.json
182
-
183
- python -B scripts/check_layout.py poster.pptx \
184
- --manifest poster.json \
185
- --output poster.layout.json
186
- ```
187
-
188
- The package inspector reads bounded ZIP metadata and selected XML only. It never
189
- extracts members or opens/executes the presentation. It rejects:
190
-
191
- - every non-`.pptx` extension, including `.pptm`;
192
- - packages outside the bounded one-slide generator profile;
193
- - macro/VBA, ActiveX, custom UI, OLE, embedded, executable, and binary parts;
194
- - every external relationship, including remote linked images and hyperlinks;
195
- - unsafe/duplicate ZIP paths, symlinks, encryption, oversized expansion, and
196
- excessive compression ratios;
197
- - malformed or entity-bearing inspected XML;
198
- - missing internal relationship targets.
199
-
200
- Read `references/pptx_security.md`.
201
-
202
- ## Manual PowerPoint and accessibility gate
203
-
204
- Automation cannot certify accessibility, text rendering, or scientific accuracy.
205
- In a fully patched PowerPoint:
206
-
207
- 1. Open only the generated and technically clean file.
208
- 2. Run Review > Check Accessibility.
209
- 3. Inspect the Reading Order pane and object names.
210
- 4. Review every alt text and native long description.
211
- 5. Test keyboard and screen-reader navigation.
212
- 6. Confirm fonts are installed/licensed; check embedding choices, substitution, glyphs,
213
- equations, overflow, contrast, and all edges.
214
- 7. Verify that color is never the only encoding.
215
- 8. Test every QR code and its visible fallback URL/text.
216
- 9. Obtain author sign-off on all content and citations.
217
-
218
- Microsoft's 18 pt slide recommendation is not a universal poster minimum. Evaluate
219
- font size at final physical output using the manifest's labeled basis and proofs.
220
-
221
- ## Export and print
222
-
223
- Use the approved export plan. When PDF is required, export from the reviewed
224
- PowerPoint using Standard/high print quality rather than Minimum size.
225
-
226
- Independently verify the PDF:
227
-
228
- - page/artboard dimensions, orientation, trim, and bleed;
229
- - one-page output if required;
230
- - fonts, clipping, glyphs, equations, and image resampling;
231
- - tags, reading order, alt text, language, and links;
232
- - RGB/CMYK conversion and physical color proof;
233
- - conference naming, file-size, and upload rules.
234
-
235
- Print a reduced-scale proof and obtain the printer's required proof. Re-run all checks
236
- after any change.
237
-
238
- Use `assets/poster_quality_checklist.md` for release sign-off.
239
-
240
- ## Bundled CLIs
241
-
242
- - `validate_manifest.py` — strict content/provenance/approval validator.
243
- - `generate_poster.py` — exact-pinned local PPTX generator.
244
- - `inspect_pptx.py` — non-executing ZIP/XML security inspector.
245
- - `check_layout.py` — bounds, overlap, reading-order, and final-font checker.
246
- - `inventory_images.py` — asset hash/metadata/effective-DPI manifest.
247
- - `check_palette.py` — WCAG contrast and heuristic palette report.
248
- - `plan_export.py` — dimensions, scale, fonts, color, media, export, and print preflight.
249
-
250
- ## References
251
-
252
- - `references/manifest_spec.md`
253
- - `references/poster_content_guide.md`
254
- - `references/poster_design_principles.md`
255
- - `references/poster_layout_design.md`
256
- - `references/pptx_security.md`
257
- - `references/security_validation.md`
258
- - `references/source_ledger.md`
@@ -1,99 +0,0 @@
1
- ---
2
- name: primekg
3
- description: Query the Precision Medicine Knowledge Graph (PrimeKG) for multiscale biological data including genes, drugs, diseases, phenotypes, and more.
4
- license: Unknown
5
- metadata:
6
- version: "1.1"
7
- skill-author: K-Dense Inc. (PrimeKG original from Harvard MIMS)
8
- ---
9
-
10
- # PrimeKG Knowledge Graph Skill
11
-
12
- ## Overview
13
-
14
- PrimeKG is a precision medicine knowledge graph that integrates over 20 primary databases and high-quality scientific literature into a single resource. It contains over 100,000 nodes and 4 million edges across 29 relationship types, including drug-target, disease-gene, and phenotype-disease associations.
15
-
16
- **Key capabilities:**
17
- - Search for nodes (genes, proteins, drugs, diseases, phenotypes)
18
- - Retrieve direct neighbors (associated entities and clinical evidence)
19
- - Analyze local disease context (related genes, drugs, phenotypes)
20
- - Identify drug-disease paths (potential repurposing opportunities)
21
-
22
- **Data access:** Programmatic access via `query_primekg.py`. Data is stored at `C:\Users\eamon\Documents\Data\PrimeKG\kg.csv`.
23
-
24
- ## When to Use This Skill
25
-
26
- This skill should be used when:
27
-
28
- - **Knowledge-based drug discovery:** Identifying targets and mechanisms for diseases.
29
- - **Drug repurposing:** Finding existing drugs that might have evidence for new indications.
30
- - **Phenotype analysis:** Understanding how symptoms/phenotypes relate to diseases and genes.
31
- - **Multiscale biology:** Bridging the gap between molecular targets (genes) and clinical outcomes (diseases).
32
- - **Network pharmacology:** Investigating the broader network effects of drug-target interactions.
33
-
34
- ## Core Workflow
35
-
36
- ### 1. Search for Entities
37
-
38
- Find identifiers for genes, drugs, or diseases.
39
-
40
- ```python
41
- from scripts.query_primekg import search_nodes
42
-
43
- # Search for Alzheimer's disease nodes
44
- results = search_nodes("Alzheimer", node_type="disease")
45
- # Returns: [{"id": "EFO_0000249", "type": "disease", "name": "Alzheimer's disease", ...}]
46
- ```
47
-
48
- ### 2. Get Neighbors (Direct Associations)
49
-
50
- Retrieve all connected nodes and relationship types.
51
-
52
- ```python
53
- from scripts.query_primekg import get_neighbors
54
-
55
- # Get all neighbors of a specific disease ID
56
- neighbors = get_neighbors("EFO_0000249")
57
- # Returns: List of neighbors like {"neighbor_name": "APOE", "relation": "disease_gene", ...}
58
- ```
59
-
60
- ### 3. Analyze Disease Context
61
-
62
- A high-level function to summarize associations for a disease.
63
-
64
- ```python
65
- from scripts.query_primekg import get_disease_context
66
-
67
- # Comprehensive summary for a disease
68
- context = get_disease_context("Alzheimer's disease")
69
- # Access: context['associated_genes'], context['associated_drugs'], context['phenotypes']
70
- ```
71
-
72
- ## Relationship Types in PrimeKG
73
-
74
- The graph contains several key relationship types including:
75
- - `protein_protein`: Physical PPIs
76
- - `drug_protein`: Drug target/mechanism associations
77
- - `disease_gene`: Genetic associations
78
- - `drug_disease`: Indications and contraindications
79
- - `disease_phenotype`: Clinical signs and symptoms
80
- - `gwas`: Genome-wide association studies evidence
81
-
82
- ## Best Practices
83
-
84
- 1. **Use specific IDs:** When using `get_neighbors`, ensure you have the correct ID from `search_nodes`.
85
- 2. **Context first:** Use `get_disease_context` for a broad overview before diving into specific genes or drugs.
86
- 3. **Filter relationships:** Use the `relation_type` filter in `get_neighbors` to focus on specific evidence (e.g., only `drug_protein`).
87
- 4. **Multiscale integration:** Combine with `OpenTargets` for deeper genetic evidence or `Semantic Scholar` for the latest literature context.
88
-
89
- ## Resources
90
-
91
- ### Scripts
92
- - `scripts/query_primekg.py`: Core functions for searching and querying the knowledge graph.
93
-
94
- ### Data Path
95
- - Data: `kg.csv`, downloaded from the [PrimeKG Harvard Dataverse](https://dataverse.harvard.edu/dataverse/primekg).
96
- - Point the scripts at it with `export PRIMEKG_DATA=/path/to/kg.csv` (default: `data/PrimeKG/kg.csv`).
97
- - Total nodes: ~129,000
98
- - Total edges: ~4,000,000
99
- - Database: CSV-based, optimized for pandas querying.