[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-letta-slides":3,"mdc-s2zdde-key":37,"related-org-letta-slides":669,"related-repo-letta-slides":832},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"slides","create and edit PowerPoint presentations","Create and edit presentation slide decks (`.pptx`) with PptxGenJS, bundled layout helpers, and render\u002Fvalidation utilities. Use when tasks involve building a new PowerPoint deck, recreating slides from screenshots\u002FPDFs\u002Freference decks, modifying slide content while preserving editable output, adding charts\u002Fdiagrams\u002Fvisuals, or diagnosing layout issues such as overflow, overlaps, and font substitution.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"letta","Letta","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fletta.png","letta-ai",[13,17,20,23],{"name":14,"slug":15,"type":16},"Presentations","presentations","tag",{"name":18,"slug":19,"type":16},"PowerPoint","powerpoint",{"name":21,"slug":22,"type":16},"Office","office",{"name":24,"slug":25,"type":16},"Design","design",127,"https:\u002F\u002Fgithub.com\u002Fletta-ai\u002Fskills","2026-07-16T06:02:20.640859",null,20,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"A shared repository for skills. Intended to be used with Letta Code, Claude Code, Codex CLI, and other agents that support skills.","https:\u002F\u002Fgithub.com\u002Fletta-ai\u002Fskills\u002Ftree\u002FHEAD\u002Ftools\u002Fslides","---\nname: slides\ndescription: Create and edit presentation slide decks (`.pptx`) with PptxGenJS, bundled layout helpers, and render\u002Fvalidation utilities. Use when tasks involve building a new PowerPoint deck, recreating slides from screenshots\u002FPDFs\u002Freference decks, modifying slide content while preserving editable output, adding charts\u002Fdiagrams\u002Fvisuals, or diagnosing layout issues such as overflow, overlaps, and font substitution.\n---\n\n# Slides\n\n## Overview\n\nUse PptxGenJS for slide authoring. Do not use `python-pptx` for deck generation unless the task is inspection-only; keep editable output in JavaScript and deliver both the `.pptx` and the source `.js`.\n\nKeep work in a task-local directory. Only copy final artifacts to the requested destination after rendering and validation pass.\n\n## Bundled Resources\n\n- `assets\u002Fpptxgenjs_helpers\u002F`: Copy this folder into the deck workspace and import it locally instead of reimplementing helper logic.\n- `scripts\u002Frender_slides.py`: Rasterize a `.pptx` or `.pdf` to per-slide PNGs.\n- `scripts\u002Fslides_test.py`: Detect content that overflows the slide canvas.\n- `scripts\u002Fcreate_montage.py`: Build a contact-sheet style montage of rendered slides.\n- `scripts\u002Fdetect_font.py`: Report missing or substituted fonts as LibreOffice resolves them.\n- `scripts\u002Fensure_raster_image.py`: Convert SVG\u002FEMF\u002FHEIC\u002FPDF-like assets into PNGs for quick inspection.\n- `references\u002Fpptxgenjs-helpers.md`: Load only when you need API details or dependency notes.\n\n## Workflow\n\n1. Inspect the request and determine whether you are creating a new deck, recreating an existing deck, or editing one.\n2. Set the slide size up front. Default to 16:9 (`LAYOUT_WIDE`) unless the source material clearly uses another aspect ratio.\n3. Copy `assets\u002Fpptxgenjs_helpers\u002F` into the working directory and import the helpers from there.\n4. Build the deck in JavaScript with an explicit theme font, stable spacing, and editable PowerPoint-native elements when practical.\n5. Run the bundled scripts from this skill directory or copy the needed ones into the task workspace. Render the result with `render_slides.py`, review the PNGs, and fix layout issues before delivery.\n6. Run `slides_test.py` for overflow checks when slide edges are tight or the deck is dense.\n7. Deliver the `.pptx`, the authoring `.js`, and any generated assets that are required to rebuild the deck.\n\n## Authoring Rules\n\n- Set theme fonts explicitly. Do not rely on PowerPoint defaults if typography matters.\n- Use `autoFontSize`, `calcTextBox`, and related helpers to size text boxes; do not use PptxGenJS `fit` or `autoFit`.\n- Use bullet options, not literal `•` characters.\n- Use `imageSizingCrop` or `imageSizingContain` instead of PptxGenJS built-in image sizing.\n- Use `latexToSvgDataUri()` for equations and `codeToRuns()` for syntax-highlighted code blocks.\n- Prefer native PowerPoint charts for simple bar\u002Fline\u002Fpie\u002Fhistogram style visuals so reviewers can edit them later.\n- For charts or diagrams that PptxGenJS cannot express well, render SVG externally and place the SVG in the slide.\n- Include both `warnIfSlideHasOverlaps(slide, pptx)` and `warnIfSlideElementsOutOfBounds(slide, pptx)` in the submitted JavaScript whenever you generate or substantially edit slides.\n- Fix all unintentional overlap and out-of-bounds warnings before delivering. If an overlap is intentional, leave a short code comment near the relevant element.\n\n## Recreate Or Edit Existing Slides\n\n- Render the source deck or reference PDF first so you can compare slide geometry visually.\n- Match the original aspect ratio before rebuilding layout.\n- Preserve editability where possible: text should stay text, and simple charts should stay native charts.\n- If a reference slide uses raster artwork, use `ensure_raster_image.py` to generate debug PNGs from vector or odd image formats before placing them.\n\n## Validation Commands\n\nExamples below assume you copied the needed scripts into the working directory. If not, invoke the same script paths relative to this skill folder.\n\n```bash\n# Render slides to PNGs for review\npython3 scripts\u002Frender_slides.py deck.pptx --output_dir rendered\n\n# Build a montage for quick scanning\npython3 scripts\u002Fcreate_montage.py --input_dir rendered --output_file montage.png\n\n# Check for overflow beyond the original slide canvas\npython3 scripts\u002Fslides_test.py deck.pptx\n\n# Detect missing or substituted fonts\npython3 scripts\u002Fdetect_font.py deck.pptx --json\n```\n\nLoad `references\u002Fpptxgenjs-helpers.md` if you need the helper API summary or dependency details.\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,50,57,88,93,99,196,202,286,292,423,429,460,466,471,651,663],{"type":43,"tag":44,"props":45,"children":46},"element","h1",{"id":4},[47],{"type":48,"value":49},"text","Slides",{"type":43,"tag":51,"props":52,"children":54},"h2",{"id":53},"overview",[55],{"type":48,"value":56},"Overview",{"type":43,"tag":58,"props":59,"children":60},"p",{},[61,63,70,72,78,80,86],{"type":48,"value":62},"Use PptxGenJS for slide authoring. Do not use ",{"type":43,"tag":64,"props":65,"children":67},"code",{"className":66},[],[68],{"type":48,"value":69},"python-pptx",{"type":48,"value":71}," for deck generation unless the task is inspection-only; keep editable output in JavaScript and deliver both the ",{"type":43,"tag":64,"props":73,"children":75},{"className":74},[],[76],{"type":48,"value":77},".pptx",{"type":48,"value":79}," and the source ",{"type":43,"tag":64,"props":81,"children":83},{"className":82},[],[84],{"type":48,"value":85},".js",{"type":48,"value":87},".",{"type":43,"tag":58,"props":89,"children":90},{},[91],{"type":48,"value":92},"Keep work in a task-local directory. Only copy final artifacts to the requested destination after rendering and validation pass.",{"type":43,"tag":51,"props":94,"children":96},{"id":95},"bundled-resources",[97],{"type":48,"value":98},"Bundled Resources",{"type":43,"tag":100,"props":101,"children":102},"ul",{},[103,115,141,152,163,174,185],{"type":43,"tag":104,"props":105,"children":106},"li",{},[107,113],{"type":43,"tag":64,"props":108,"children":110},{"className":109},[],[111],{"type":48,"value":112},"assets\u002Fpptxgenjs_helpers\u002F",{"type":48,"value":114},": Copy this folder into the deck workspace and import it locally instead of reimplementing helper logic.",{"type":43,"tag":104,"props":116,"children":117},{},[118,124,126,131,133,139],{"type":43,"tag":64,"props":119,"children":121},{"className":120},[],[122],{"type":48,"value":123},"scripts\u002Frender_slides.py",{"type":48,"value":125},": Rasterize a ",{"type":43,"tag":64,"props":127,"children":129},{"className":128},[],[130],{"type":48,"value":77},{"type":48,"value":132}," or ",{"type":43,"tag":64,"props":134,"children":136},{"className":135},[],[137],{"type":48,"value":138},".pdf",{"type":48,"value":140}," to per-slide PNGs.",{"type":43,"tag":104,"props":142,"children":143},{},[144,150],{"type":43,"tag":64,"props":145,"children":147},{"className":146},[],[148],{"type":48,"value":149},"scripts\u002Fslides_test.py",{"type":48,"value":151},": Detect content that overflows the slide canvas.",{"type":43,"tag":104,"props":153,"children":154},{},[155,161],{"type":43,"tag":64,"props":156,"children":158},{"className":157},[],[159],{"type":48,"value":160},"scripts\u002Fcreate_montage.py",{"type":48,"value":162},": Build a contact-sheet style montage of rendered slides.",{"type":43,"tag":104,"props":164,"children":165},{},[166,172],{"type":43,"tag":64,"props":167,"children":169},{"className":168},[],[170],{"type":48,"value":171},"scripts\u002Fdetect_font.py",{"type":48,"value":173},": Report missing or substituted fonts as LibreOffice resolves them.",{"type":43,"tag":104,"props":175,"children":176},{},[177,183],{"type":43,"tag":64,"props":178,"children":180},{"className":179},[],[181],{"type":48,"value":182},"scripts\u002Fensure_raster_image.py",{"type":48,"value":184},": Convert SVG\u002FEMF\u002FHEIC\u002FPDF-like assets into PNGs for quick inspection.",{"type":43,"tag":104,"props":186,"children":187},{},[188,194],{"type":43,"tag":64,"props":189,"children":191},{"className":190},[],[192],{"type":48,"value":193},"references\u002Fpptxgenjs-helpers.md",{"type":48,"value":195},": Load only when you need API details or dependency notes.",{"type":43,"tag":51,"props":197,"children":199},{"id":198},"workflow",[200],{"type":48,"value":201},"Workflow",{"type":43,"tag":203,"props":204,"children":205},"ol",{},[206,211,224,236,241,254,267],{"type":43,"tag":104,"props":207,"children":208},{},[209],{"type":48,"value":210},"Inspect the request and determine whether you are creating a new deck, recreating an existing deck, or editing one.",{"type":43,"tag":104,"props":212,"children":213},{},[214,216,222],{"type":48,"value":215},"Set the slide size up front. Default to 16:9 (",{"type":43,"tag":64,"props":217,"children":219},{"className":218},[],[220],{"type":48,"value":221},"LAYOUT_WIDE",{"type":48,"value":223},") unless the source material clearly uses another aspect ratio.",{"type":43,"tag":104,"props":225,"children":226},{},[227,229,234],{"type":48,"value":228},"Copy ",{"type":43,"tag":64,"props":230,"children":232},{"className":231},[],[233],{"type":48,"value":112},{"type":48,"value":235}," into the working directory and import the helpers from there.",{"type":43,"tag":104,"props":237,"children":238},{},[239],{"type":48,"value":240},"Build the deck in JavaScript with an explicit theme font, stable spacing, and editable PowerPoint-native elements when practical.",{"type":43,"tag":104,"props":242,"children":243},{},[244,246,252],{"type":48,"value":245},"Run the bundled scripts from this skill directory or copy the needed ones into the task workspace. Render the result with ",{"type":43,"tag":64,"props":247,"children":249},{"className":248},[],[250],{"type":48,"value":251},"render_slides.py",{"type":48,"value":253},", review the PNGs, and fix layout issues before delivery.",{"type":43,"tag":104,"props":255,"children":256},{},[257,259,265],{"type":48,"value":258},"Run ",{"type":43,"tag":64,"props":260,"children":262},{"className":261},[],[263],{"type":48,"value":264},"slides_test.py",{"type":48,"value":266}," for overflow checks when slide edges are tight or the deck is dense.",{"type":43,"tag":104,"props":268,"children":269},{},[270,272,277,279,284],{"type":48,"value":271},"Deliver the ",{"type":43,"tag":64,"props":273,"children":275},{"className":274},[],[276],{"type":48,"value":77},{"type":48,"value":278},", the authoring ",{"type":43,"tag":64,"props":280,"children":282},{"className":281},[],[283],{"type":48,"value":85},{"type":48,"value":285},", and any generated assets that are required to rebuild the deck.",{"type":43,"tag":51,"props":287,"children":289},{"id":288},"authoring-rules",[290],{"type":48,"value":291},"Authoring Rules",{"type":43,"tag":100,"props":293,"children":294},{},[295,300,335,348,367,387,392,397,418],{"type":43,"tag":104,"props":296,"children":297},{},[298],{"type":48,"value":299},"Set theme fonts explicitly. Do not rely on PowerPoint defaults if typography matters.",{"type":43,"tag":104,"props":301,"children":302},{},[303,305,311,313,319,321,327,328,334],{"type":48,"value":304},"Use ",{"type":43,"tag":64,"props":306,"children":308},{"className":307},[],[309],{"type":48,"value":310},"autoFontSize",{"type":48,"value":312},", ",{"type":43,"tag":64,"props":314,"children":316},{"className":315},[],[317],{"type":48,"value":318},"calcTextBox",{"type":48,"value":320},", and related helpers to size text boxes; do not use PptxGenJS ",{"type":43,"tag":64,"props":322,"children":324},{"className":323},[],[325],{"type":48,"value":326},"fit",{"type":48,"value":132},{"type":43,"tag":64,"props":329,"children":331},{"className":330},[],[332],{"type":48,"value":333},"autoFit",{"type":48,"value":87},{"type":43,"tag":104,"props":336,"children":337},{},[338,340,346],{"type":48,"value":339},"Use bullet options, not literal ",{"type":43,"tag":64,"props":341,"children":343},{"className":342},[],[344],{"type":48,"value":345},"•",{"type":48,"value":347}," characters.",{"type":43,"tag":104,"props":349,"children":350},{},[351,352,358,359,365],{"type":48,"value":304},{"type":43,"tag":64,"props":353,"children":355},{"className":354},[],[356],{"type":48,"value":357},"imageSizingCrop",{"type":48,"value":132},{"type":43,"tag":64,"props":360,"children":362},{"className":361},[],[363],{"type":48,"value":364},"imageSizingContain",{"type":48,"value":366}," instead of PptxGenJS built-in image sizing.",{"type":43,"tag":104,"props":368,"children":369},{},[370,371,377,379,385],{"type":48,"value":304},{"type":43,"tag":64,"props":372,"children":374},{"className":373},[],[375],{"type":48,"value":376},"latexToSvgDataUri()",{"type":48,"value":378}," for equations and ",{"type":43,"tag":64,"props":380,"children":382},{"className":381},[],[383],{"type":48,"value":384},"codeToRuns()",{"type":48,"value":386}," for syntax-highlighted code blocks.",{"type":43,"tag":104,"props":388,"children":389},{},[390],{"type":48,"value":391},"Prefer native PowerPoint charts for simple bar\u002Fline\u002Fpie\u002Fhistogram style visuals so reviewers can edit them later.",{"type":43,"tag":104,"props":393,"children":394},{},[395],{"type":48,"value":396},"For charts or diagrams that PptxGenJS cannot express well, render SVG externally and place the SVG in the slide.",{"type":43,"tag":104,"props":398,"children":399},{},[400,402,408,410,416],{"type":48,"value":401},"Include both ",{"type":43,"tag":64,"props":403,"children":405},{"className":404},[],[406],{"type":48,"value":407},"warnIfSlideHasOverlaps(slide, pptx)",{"type":48,"value":409}," and ",{"type":43,"tag":64,"props":411,"children":413},{"className":412},[],[414],{"type":48,"value":415},"warnIfSlideElementsOutOfBounds(slide, pptx)",{"type":48,"value":417}," in the submitted JavaScript whenever you generate or substantially edit slides.",{"type":43,"tag":104,"props":419,"children":420},{},[421],{"type":48,"value":422},"Fix all unintentional overlap and out-of-bounds warnings before delivering. If an overlap is intentional, leave a short code comment near the relevant element.",{"type":43,"tag":51,"props":424,"children":426},{"id":425},"recreate-or-edit-existing-slides",[427],{"type":48,"value":428},"Recreate Or Edit Existing Slides",{"type":43,"tag":100,"props":430,"children":431},{},[432,437,442,447],{"type":43,"tag":104,"props":433,"children":434},{},[435],{"type":48,"value":436},"Render the source deck or reference PDF first so you can compare slide geometry visually.",{"type":43,"tag":104,"props":438,"children":439},{},[440],{"type":48,"value":441},"Match the original aspect ratio before rebuilding layout.",{"type":43,"tag":104,"props":443,"children":444},{},[445],{"type":48,"value":446},"Preserve editability where possible: text should stay text, and simple charts should stay native charts.",{"type":43,"tag":104,"props":448,"children":449},{},[450,452,458],{"type":48,"value":451},"If a reference slide uses raster artwork, use ",{"type":43,"tag":64,"props":453,"children":455},{"className":454},[],[456],{"type":48,"value":457},"ensure_raster_image.py",{"type":48,"value":459}," to generate debug PNGs from vector or odd image formats before placing them.",{"type":43,"tag":51,"props":461,"children":463},{"id":462},"validation-commands",[464],{"type":48,"value":465},"Validation Commands",{"type":43,"tag":58,"props":467,"children":468},{},[469],{"type":48,"value":470},"Examples below assume you copied the needed scripts into the working directory. If not, invoke the same script paths relative to this skill folder.",{"type":43,"tag":472,"props":473,"children":478},"pre",{"className":474,"code":475,"language":476,"meta":477,"style":477},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Render slides to PNGs for review\npython3 scripts\u002Frender_slides.py deck.pptx --output_dir rendered\n\n# Build a montage for quick scanning\npython3 scripts\u002Fcreate_montage.py --input_dir rendered --output_file montage.png\n\n# Check for overflow beyond the original slide canvas\npython3 scripts\u002Fslides_test.py deck.pptx\n\n# Detect missing or substituted fonts\npython3 scripts\u002Fdetect_font.py deck.pptx --json\n","bash","",[479],{"type":43,"tag":64,"props":480,"children":481},{"__ignoreMap":477},[482,494,525,535,544,577,585,594,612,620,629],{"type":43,"tag":483,"props":484,"children":487},"span",{"class":485,"line":486},"line",1,[488],{"type":43,"tag":483,"props":489,"children":491},{"style":490},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[492],{"type":48,"value":493},"# Render slides to PNGs for review\n",{"type":43,"tag":483,"props":495,"children":497},{"class":485,"line":496},2,[498,504,510,515,520],{"type":43,"tag":483,"props":499,"children":501},{"style":500},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[502],{"type":48,"value":503},"python3",{"type":43,"tag":483,"props":505,"children":507},{"style":506},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[508],{"type":48,"value":509}," scripts\u002Frender_slides.py",{"type":43,"tag":483,"props":511,"children":512},{"style":506},[513],{"type":48,"value":514}," deck.pptx",{"type":43,"tag":483,"props":516,"children":517},{"style":506},[518],{"type":48,"value":519}," --output_dir",{"type":43,"tag":483,"props":521,"children":522},{"style":506},[523],{"type":48,"value":524}," rendered\n",{"type":43,"tag":483,"props":526,"children":528},{"class":485,"line":527},3,[529],{"type":43,"tag":483,"props":530,"children":532},{"emptyLinePlaceholder":531},true,[533],{"type":48,"value":534},"\n",{"type":43,"tag":483,"props":536,"children":538},{"class":485,"line":537},4,[539],{"type":43,"tag":483,"props":540,"children":541},{"style":490},[542],{"type":48,"value":543},"# Build a montage for quick scanning\n",{"type":43,"tag":483,"props":545,"children":547},{"class":485,"line":546},5,[548,552,557,562,567,572],{"type":43,"tag":483,"props":549,"children":550},{"style":500},[551],{"type":48,"value":503},{"type":43,"tag":483,"props":553,"children":554},{"style":506},[555],{"type":48,"value":556}," scripts\u002Fcreate_montage.py",{"type":43,"tag":483,"props":558,"children":559},{"style":506},[560],{"type":48,"value":561}," --input_dir",{"type":43,"tag":483,"props":563,"children":564},{"style":506},[565],{"type":48,"value":566}," rendered",{"type":43,"tag":483,"props":568,"children":569},{"style":506},[570],{"type":48,"value":571}," --output_file",{"type":43,"tag":483,"props":573,"children":574},{"style":506},[575],{"type":48,"value":576}," montage.png\n",{"type":43,"tag":483,"props":578,"children":580},{"class":485,"line":579},6,[581],{"type":43,"tag":483,"props":582,"children":583},{"emptyLinePlaceholder":531},[584],{"type":48,"value":534},{"type":43,"tag":483,"props":586,"children":588},{"class":485,"line":587},7,[589],{"type":43,"tag":483,"props":590,"children":591},{"style":490},[592],{"type":48,"value":593},"# Check for overflow beyond the original slide canvas\n",{"type":43,"tag":483,"props":595,"children":597},{"class":485,"line":596},8,[598,602,607],{"type":43,"tag":483,"props":599,"children":600},{"style":500},[601],{"type":48,"value":503},{"type":43,"tag":483,"props":603,"children":604},{"style":506},[605],{"type":48,"value":606}," scripts\u002Fslides_test.py",{"type":43,"tag":483,"props":608,"children":609},{"style":506},[610],{"type":48,"value":611}," deck.pptx\n",{"type":43,"tag":483,"props":613,"children":615},{"class":485,"line":614},9,[616],{"type":43,"tag":483,"props":617,"children":618},{"emptyLinePlaceholder":531},[619],{"type":48,"value":534},{"type":43,"tag":483,"props":621,"children":623},{"class":485,"line":622},10,[624],{"type":43,"tag":483,"props":625,"children":626},{"style":490},[627],{"type":48,"value":628},"# Detect missing or substituted fonts\n",{"type":43,"tag":483,"props":630,"children":632},{"class":485,"line":631},11,[633,637,642,646],{"type":43,"tag":483,"props":634,"children":635},{"style":500},[636],{"type":48,"value":503},{"type":43,"tag":483,"props":638,"children":639},{"style":506},[640],{"type":48,"value":641}," scripts\u002Fdetect_font.py",{"type":43,"tag":483,"props":643,"children":644},{"style":506},[645],{"type":48,"value":514},{"type":43,"tag":483,"props":647,"children":648},{"style":506},[649],{"type":48,"value":650}," --json\n",{"type":43,"tag":58,"props":652,"children":653},{},[654,656,661],{"type":48,"value":655},"Load ",{"type":43,"tag":64,"props":657,"children":659},{"className":658},[],[660],{"type":48,"value":193},{"type":48,"value":662}," if you need the helper API summary or dependency details.",{"type":43,"tag":664,"props":665,"children":666},"style",{},[667],{"type":48,"value":668},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":670,"total":831},[671,689,704,716,728,742,754,765,777,793,804,816],{"slug":672,"name":672,"fn":673,"description":674,"org":675,"tags":676,"stars":686,"repoUrl":687,"updatedAt":688},"acquiring-skills","discover and install agent skills","Discover and install skills from Hermes, ClawHub, GitHub, and other registries. Load this skill whenever a user asks for a capability you don't already have — image generation, social media, email, calendar, finance, DevOps, search, browser automation, etc.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[677,680,683],{"name":678,"slug":679,"type":16},"Agents","agents",{"name":681,"slug":682,"type":16},"Automation","automation",{"name":684,"slug":685,"type":16},"GitHub","github",2831,"https:\u002F\u002Fgithub.com\u002Fletta-ai\u002Fletta-code","2026-07-13T06:22:58.45767",{"slug":690,"name":691,"fn":692,"description":693,"org":694,"tags":695,"stars":686,"repoUrl":687,"updatedAt":703},"context-doctor","Context Doctor","repair system prompt and memory degradation","Identify and repair degradation in system prompt, external memory, and skills preventing you from following instructions or remembering information as well as you should.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[696,697,700],{"name":678,"slug":679,"type":16},{"name":698,"slug":699,"type":16},"AI Context","ai-context",{"name":701,"slug":702,"type":16},"Debugging","debugging","2026-07-13T06:22:50.151002",{"slug":705,"name":705,"fn":706,"description":707,"org":708,"tags":709,"stars":686,"repoUrl":687,"updatedAt":715},"converting-mcps-to-skills","connect MCP servers to create skills","Connect to MCP (Model Context Protocol) servers and create skills for repeated use. Load when a user wants to use an MCP server, connect to external tools via MCP, or when they mention MCP, model context protocol, or specific MCP servers.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[710,711,712],{"name":678,"slug":679,"type":16},{"name":681,"slug":682,"type":16},{"name":713,"slug":714,"type":16},"MCP","mcp","2026-07-13T06:23:37.646079",{"slug":717,"name":717,"fn":718,"description":719,"org":720,"tags":721,"stars":686,"repoUrl":687,"updatedAt":727},"creating-mods","create and edit Letta Code mods","Creates and edits trusted local Letta Code mods, including tools, slash commands, local-only model providers, lifecycle\u002Fturn events, scoped conversation helpers, panels, and capability-gated behavior. Use when asked to make a mod, add an agent-callable tool, add a slash command, add a local provider\u002Fmodel adapter, transform turns, react to app events, or add lightweight mod UI outside the dedicated \u002Fstatusline flow.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[722,723,724],{"name":678,"slug":679,"type":16},{"name":681,"slug":682,"type":16},{"name":725,"slug":726,"type":16},"Coding","coding","2026-07-23T05:42:38.133565",{"slug":729,"name":729,"fn":730,"description":731,"org":732,"tags":733,"stars":686,"repoUrl":687,"updatedAt":741},"creating-skills","create and update agent skills","Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Letta Code's capabilities with specialized knowledge, workflows, or tool integrations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[734,735,738],{"name":678,"slug":679,"type":16},{"name":736,"slug":737,"type":16},"Documentation","documentation",{"name":739,"slug":740,"type":16},"Plugin Development","plugin-development","2026-07-13T06:22:56.998659",{"slug":743,"name":743,"fn":744,"description":745,"org":746,"tags":747,"stars":686,"repoUrl":687,"updatedAt":753},"customizing-commands","create and manage Letta slash commands","Creates, edits, and enables Letta Code mod-provided slash commands. Use when the user asks to add a custom \u002Fcommand, slash command, command shortcut, scoped conversation-backed command, or command-driven panel behavior.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[748,749,750],{"name":678,"slug":679,"type":16},{"name":681,"slug":682,"type":16},{"name":751,"slug":752,"type":16},"CLI","cli","2026-07-13T06:23:18.266798",{"slug":755,"name":755,"fn":756,"description":757,"org":758,"tags":759,"stars":686,"repoUrl":687,"updatedAt":764},"customizing-statusline","customize Letta Code statusline mods","Creates, edits, and migrates Letta Code statusline mods. Use when handling the \u002Fstatusline command or continuing work started by \u002Fstatusline.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[760,761],{"name":751,"slug":752,"type":16},{"name":762,"slug":763,"type":16},"Engineering","engineering","2026-07-13T06:23:27.465985",{"slug":766,"name":766,"fn":767,"description":768,"org":769,"tags":770,"stars":686,"repoUrl":687,"updatedAt":776},"dispatching-coding-agents","dispatch stateless coding agents","Dispatch stateless coding agents (Claude Code or Codex) via Bash. Use when you're stuck, need a second opinion, or need parallel research on a hard problem. They have no memory — you must provide all context.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[771,772,773],{"name":678,"slug":679,"type":16},{"name":725,"slug":726,"type":16},{"name":774,"slug":775,"type":16},"Multi-Agent","multi-agent","2026-07-26T05:46:56.388845",{"slug":778,"name":778,"fn":779,"description":780,"org":781,"tags":782,"stars":686,"repoUrl":687,"updatedAt":792},"editing-letta-code-desktop-preferences","edit Letta Code Desktop preferences","Edits Letta Code Desktop (LCD) preferences by safely reading and updating ~\u002F.letta\u002Fdesktop_preferences.json. Use only when the user asks to change current Desktop\u002FLCD settings such as theme, default working directory, remote access preference, or remote environment name via the preferences JSON.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[783,786,789],{"name":784,"slug":785,"type":16},"Configuration","configuration",{"name":787,"slug":788,"type":16},"Desktop","desktop",{"name":790,"slug":791,"type":16},"Themes","themes","2026-07-13T06:23:41.407811",{"slug":794,"name":794,"fn":795,"description":796,"org":797,"tags":798,"stars":686,"repoUrl":687,"updatedAt":803},"finding-agents","locate and manage agents on server","Find other agents on the same server. Use when the user asks about other agents, wants to migrate memory from another agent, or needs to find an agent by name or tags.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[799,800],{"name":678,"slug":679,"type":16},{"name":801,"slug":802,"type":16},"Management","management","2026-07-16T06:02:17.297841",{"slug":805,"name":805,"fn":806,"description":807,"org":808,"tags":809,"stars":686,"repoUrl":687,"updatedAt":815},"generating-mod-envs","generate Letta mod learning environments","Generates and reviews mod learning env JSON files for Letta Code local mods. Use when asked to teach, learn, or optimize a mod behavior; create, draft, validate, improve, or explain envs for `\u002Fmods learn --env`; or design evaluation scenarios, memory fixtures, requiredResultMarkers, requiredTraceMarkers, negative controls, and candidate diversity hints.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[810,811,814],{"name":678,"slug":679,"type":16},{"name":812,"slug":813,"type":16},"AI Infrastructure","ai-infrastructure",{"name":784,"slug":785,"type":16},"2026-07-13T06:23:08.838181",{"slug":817,"name":817,"fn":818,"description":819,"org":820,"tags":821,"stars":686,"repoUrl":687,"updatedAt":830},"image-generation","generate images from text prompts","Generate images from text prompts (and optionally edit\u002Fremix input images). Use when the user asks to create, generate, draw, render, or edit an image, illustration, logo, icon, diagram, or photo.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[822,825,828],{"name":823,"slug":824,"type":16},"Creative","creative",{"name":826,"slug":827,"type":16},"Graphics","graphics",{"name":829,"slug":817,"type":16},"Image Generation","2026-07-13T06:23:06.189403",69,{"items":833,"total":943},[834,848,863,882,895,916,926],{"slug":835,"name":835,"fn":836,"description":837,"org":838,"tags":839,"stars":26,"repoUrl":27,"updatedAt":847},"1password","manage secrets with 1Password CLI","Set up and use 1Password CLI (op). Use when installing the CLI, enabling desktop app integration, signing in (single or multi-account), or reading\u002Finjecting\u002Frunning secrets via op.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[840,843,844],{"name":841,"slug":842,"type":16},"Authentication","authentication",{"name":751,"slug":752,"type":16},{"name":845,"slug":846,"type":16},"Security","security","2026-07-13T06:24:39.504387",{"slug":849,"name":849,"fn":850,"description":851,"org":852,"tags":853,"stars":26,"repoUrl":27,"updatedAt":862},"agent-slack","automate Slack messaging and workflows","Slack automation CLI — read\u002Fsend\u002Fsearch messages, browse threads and channels, manage channels, download attachments, look up users, and run workflows.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[854,855,856,859],{"name":681,"slug":682,"type":16},{"name":751,"slug":752,"type":16},{"name":857,"slug":858,"type":16},"Messaging","messaging",{"name":860,"slug":861,"type":16},"Slack","slack","2026-07-13T06:23:51.908511",{"slug":864,"name":864,"fn":865,"description":866,"org":867,"tags":868,"stars":26,"repoUrl":27,"updatedAt":881},"ai-news","fetch and summarize AI news","Fetch and summarize recent AI news from curated RSS feeds (Hugging Face, VentureBeat, The Verge, OpenAI, Anthropic, DeepMind, etc.) and YouTube channels (Yannic Kilcher, Two Minute Papers, AI Explained, etc.). Also fetches full transcripts for specific YouTube videos. Use when the user asks about recent AI news, what's happened in AI lately, summaries of AI research or product announcements, or wants a digest of what's going on in the AI space.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[869,872,875,878],{"name":870,"slug":871,"type":16},"Communications","communications",{"name":873,"slug":874,"type":16},"LLM","llm",{"name":876,"slug":877,"type":16},"Research","research",{"name":879,"slug":880,"type":16},"Summarization","summarization","2026-07-13T06:24:20.520223",{"slug":883,"name":883,"fn":884,"description":885,"org":886,"tags":887,"stars":26,"repoUrl":27,"updatedAt":894},"creating-letta-code-channels","build and debug Letta Code channels","Builds and debugs Letta Code channels, including first-party channel adapters and dynamic user channel plugins under ~\u002F.letta\u002Fchannels. Use when adding Telegram, WhatsApp, Bluesky, Slack, Discord, or custom channel support; testing channel routing, pairing, MessageChannel, runtime dependencies, or channel plugin manifests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[888,889,892,893],{"name":678,"slug":679,"type":16},{"name":890,"slug":891,"type":16},"API Development","api-development",{"name":857,"slug":858,"type":16},{"name":860,"slug":861,"type":16},"2026-07-13T06:25:55.843495",{"slug":896,"name":896,"fn":897,"description":898,"org":899,"tags":900,"stars":26,"repoUrl":27,"updatedAt":915},"datadog","query Datadog observability data","Query Datadog observability data (logs, metrics, monitors, dashboards, hosts) via direct API. Use when investigating production issues, checking monitors, searching logs, or accessing Datadog data.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[901,903,906,909,912],{"name":902,"slug":896,"type":16},"Datadog",{"name":904,"slug":905,"type":16},"Logs","logs",{"name":907,"slug":908,"type":16},"Metrics","metrics",{"name":910,"slug":911,"type":16},"Monitoring","monitoring",{"name":913,"slug":914,"type":16},"Observability","observability","2026-07-13T06:24:27.990605",{"slug":917,"name":917,"fn":918,"description":919,"org":920,"tags":921,"stars":26,"repoUrl":27,"updatedAt":925},"discord","automate Discord server and channel tasks","Discord automation CLI — send\u002Fread\u002Fsearch messages, manage channels and servers, react, create threads, pin messages, and look up users.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[922,923,924],{"name":681,"slug":682,"type":16},{"name":751,"slug":752,"type":16},{"name":857,"slug":858,"type":16},"2026-07-13T06:24:26.62387",{"slug":927,"name":927,"fn":928,"description":929,"org":930,"tags":931,"stars":26,"repoUrl":27,"updatedAt":942},"doc","create and edit Word documents","Use when the task involves reading, creating, or editing `.docx` documents, especially when formatting or layout fidelity matters; prefer `python-docx` plus the bundled `scripts\u002Frender_docx.py` for visual checks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[932,935,938,939],{"name":933,"slug":934,"type":16},"Documents","documents",{"name":936,"slug":937,"type":16},"DOCX","docx",{"name":21,"slug":22,"type":16},{"name":940,"slug":941,"type":16},"Word","word","2026-07-13T06:23:44.299568",45]