[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-minimax-minimax-xlsx":3,"mdc--bn1k12-key":34,"related-repo-minimax-minimax-xlsx":1802,"related-org-minimax-minimax-xlsx":1933},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"minimax-xlsx","create and analyze Excel spreadsheets","Open, create, read, analyze, edit, or validate Excel\u002Fspreadsheet files (.xlsx, .xlsm, .csv, .tsv). Use when the user asks to create, build, modify, analyze, read, validate, or format any Excel spreadsheet, financial model, pivot table, or tabular data file. Covers: creating new xlsx from scratch, reading and analyzing existing files, editing existing xlsx with zero format loss, formula recalculation and validation, and applying professional financial formatting standards. Triggers on 'spreadsheet', 'Excel', '.xlsx', '.csv', 'pivot table', 'financial model', 'formula', or any request to produce tabular data in Excel format.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"minimax","MiniMax","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fminimax.jpg","MiniMax-AI",[13,17,20],{"name":14,"slug":15,"type":16},"Excel","excel","tag",{"name":18,"slug":19,"type":16},"Spreadsheets","spreadsheets",{"name":21,"slug":22,"type":16},"Data Analysis","data-analysis",13030,"https:\u002F\u002Fgithub.com\u002FMiniMax-AI\u002Fskills","2026-07-13T06:16:41.854339","MIT",1118,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],null,"https:\u002F\u002Fgithub.com\u002FMiniMax-AI\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fminimax-xlsx","---\nname: minimax-xlsx\ndescription: \"Open, create, read, analyze, edit, or validate Excel\u002Fspreadsheet files (.xlsx, .xlsm, .csv, .tsv). Use when the user asks to create, build, modify, analyze, read, validate, or format any Excel spreadsheet, financial model, pivot table, or tabular data file. Covers: creating new xlsx from scratch, reading and analyzing existing files, editing existing xlsx with zero format loss, formula recalculation and validation, and applying professional financial formatting standards. Triggers on 'spreadsheet', 'Excel', '.xlsx', '.csv', 'pivot table', 'financial model', 'formula', or any request to produce tabular data in Excel format.\"\nlicense: MIT\nmetadata:\n  version: \"1.0\"\n  category: productivity\n  sources:\n    - ECMA-376 Office Open XML File Formats\n    - Microsoft Open XML SDK documentation\n---\n\n# MiniMax XLSX Skill\n\nHandle the request directly. Do NOT spawn sub-agents. Always write the output file the user requests.\n\n## Task Routing\n\n| Task | Method | Guide |\n|------|--------|-------|\n| **READ** — analyze existing data | `xlsx_reader.py` + pandas | `references\u002Fread-analyze.md` |\n| **CREATE** — new xlsx from scratch | XML template | `references\u002Fcreate.md` + `references\u002Fformat.md` |\n| **EDIT** — modify existing xlsx | XML unpack→edit→pack | `references\u002Fedit.md` (+ `format.md` if styling needed) |\n| **FIX** — repair broken formulas in existing xlsx | XML unpack→fix `\u003Cf>` nodes→pack | `references\u002Ffix.md` |\n| **VALIDATE** — check formulas | `formula_check.py` | `references\u002Fvalidate.md` |\n\n## READ — Analyze data (read `references\u002Fread-analyze.md` first)\n\nStart with `xlsx_reader.py` for structure discovery, then pandas for custom analysis. Never modify the source file.\n\n**Formatting rule**: When the user specifies decimal places (e.g. \"2 decimal places\"), apply that format to ALL numeric values — use `f'{v:.2f}'` on every number. Never output `12875` when `12875.00` is required.\n\n**Aggregation rule**: Always compute sums\u002Fmeans\u002Fcounts directly from the DataFrame column — e.g. `df['Revenue'].sum()`. Never re-derive column values before aggregation.\n\n## CREATE — XML template (read `references\u002Fcreate.md` + `references\u002Fformat.md`)\n\nCopy `templates\u002Fminimal_xlsx\u002F` → edit XML directly → pack with `xlsx_pack.py`. Every derived value MUST be an Excel formula (`\u003Cf>SUM(B2:B9)\u003C\u002Ff>`), never a hardcoded number. Apply font colors per `format.md`.\n\n## EDIT — XML direct-edit (read `references\u002Fedit.md` first)\n\n**CRITICAL — EDIT INTEGRITY RULES:**\n1. **NEVER create a new `Workbook()`** for edit tasks. Always load the original file.\n2. The output MUST contain the **same sheets** as the input (same names, same data).\n3. Only modify the specific cells the task asks for — everything else must be untouched.\n4. **After saving output.xlsx, verify it**: open with `xlsx_reader.py` or `pandas` and confirm the original sheet names and a sample of original data are present. If verification fails, you wrote the wrong file — fix it before delivering.\n\nNever use openpyxl round-trip on existing files (corrupts VBA, pivots, sparklines). Instead: unpack → use helper scripts → repack.\n\n**\"Fill cells\" \u002F \"Add formulas to existing cells\" = EDIT task.** If the input file already exists and you are told to fill, update, or add formulas to specific cells, you MUST use the XML edit path. Never create a new `Workbook()`. Example — fill B3 with a cross-sheet SUM formula:\n```bash\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_unpack.py input.xlsx \u002Ftmp\u002Fxlsx_work\u002F\n# Find the target sheet's XML via xl\u002Fworkbook.xml → xl\u002F_rels\u002Fworkbook.xml.rels\n# Then use the Edit tool to add \u003Cf> inside the target \u003Cc> element:\n#   \u003Cc r=\"B3\">\u003Cf>SUM('Sales Data'!D2:D13)\u003C\u002Ff>\u003Cv>\u003C\u002Fv>\u003C\u002Fc>\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_pack.py \u002Ftmp\u002Fxlsx_work\u002F output.xlsx\n```\n\n**Add a column** (formulas, numfmt, styles auto-copied from adjacent column):\n```bash\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_unpack.py input.xlsx \u002Ftmp\u002Fxlsx_work\u002F\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_add_column.py \u002Ftmp\u002Fxlsx_work\u002F --col G \\\n    --sheet \"Sheet1\" --header \"% of Total\" \\\n    --formula '=F{row}\u002F$F$10' --formula-rows 2:9 \\\n    --total-row 10 --total-formula '=SUM(G2:G9)' --numfmt '0.0%' \\\n    --border-row 10 --border-style medium\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_pack.py \u002Ftmp\u002Fxlsx_work\u002F output.xlsx\n```\nThe `--border-row` flag applies a top border to ALL cells in that row (not just the new column). Use it when the task requires accounting-style borders on total rows.\n\n**Insert a row** (shifts existing rows, updates SUM formulas, fixes circular refs):\n```bash\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_unpack.py input.xlsx \u002Ftmp\u002Fxlsx_work\u002F\n# IMPORTANT: Find the correct --at row by searching for the label text\n# in the worksheet XML, NOT by using the row number from the prompt.\n# The prompt may say \"row 5 (Office Rent)\" but Office Rent might actually\n# be at row 4. Always locate the row by its text label first.\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_insert_row.py \u002Ftmp\u002Fxlsx_work\u002F --at 5 \\\n    --sheet \"Budget FY2025\" --text A=Utilities \\\n    --values B=3000 C=3000 D=3500 E=3500 \\\n    --formula 'F=SUM(B{row}:E{row})' --copy-style-from 4\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_pack.py \u002Ftmp\u002Fxlsx_work\u002F output.xlsx\n```\n**Row lookup rule**: When the task says \"after row N (Label)\", always find the row by searching for \"Label\" in the worksheet XML (`grep -n \"Label\" \u002Ftmp\u002Fxlsx_work\u002Fxl\u002Fworksheets\u002Fsheet*.xml` or check sharedStrings.xml). Use the actual row number + 1 for `--at`. Do NOT call `xlsx_shift_rows.py` separately — `xlsx_insert_row.py` calls it internally.\n\n**Apply row-wide borders** (e.g. accounting line on a TOTAL row):\nAfter running helper scripts, apply borders to ALL cells in the target row, not just newly added cells. In `xl\u002Fstyles.xml`, append a new `\u003Cborder>` with the desired style, then append a new `\u003Cxf>` in `\u003CcellXfs>` that clones each cell's existing `\u003Cxf>` but sets the new `borderId`. Apply the new style index to every `\u003Cc>` in the row via the `s` attribute:\n```xml\n\u003C!-- In xl\u002Fstyles.xml, append to \u003Cborders>: -->\n\u003Cborder>\n  \u003Cleft\u002F>\u003Cright\u002F>\u003Ctop style=\"medium\"\u002F>\u003Cbottom\u002F>\u003Cdiagonal\u002F>\n\u003C\u002Fborder>\n\u003C!-- Then append to \u003CcellXfs> an xf clone with the new borderId for each existing style -->\n```\n**Key rule**: When a task says \"add a border to row N\", iterate over ALL cells A through the last column, not just newly added cells.\n\n**Manual XML edit** (for anything the helper scripts don't cover):\n```bash\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_unpack.py input.xlsx \u002Ftmp\u002Fxlsx_work\u002F\n# ... edit XML with the Edit tool ...\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_pack.py \u002Ftmp\u002Fxlsx_work\u002F output.xlsx\n```\n\n## FIX — Repair broken formulas (read `references\u002Ffix.md` first)\n\nThis is an EDIT task. Unpack → fix broken `\u003Cf>` nodes → pack. Preserve all original sheets and data.\n\n## VALIDATE — Check formulas (read `references\u002Fvalidate.md` first)\n\nRun `formula_check.py` for static validation. Use `libreoffice_recalc.py` for dynamic recalculation when available.\n\n## Financial Color Standard\n\n| Cell Role | Font Color | Hex Code |\n|-----------|-----------|----------|\n| Hard-coded input \u002F assumption | Blue | `0000FF` |\n| Formula \u002F computed result | Black | `000000` |\n| Cross-sheet reference formula | Green | `00B050` |\n\n## Key Rules\n\n1. **Formula-First**: Every calculated cell MUST use an Excel formula, not a hardcoded number\n2. **CREATE → XML template**: Copy minimal template, edit XML directly, pack with `xlsx_pack.py`\n3. **EDIT → XML**: Never openpyxl round-trip. Use unpack\u002Fedit\u002Fpack scripts\n4. **Always produce the output file** — this is the #1 priority\n5. **Validate before delivery**: `formula_check.py` exit code 0 = safe\n\n## Utility Scripts\n\n```bash\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_reader.py input.xlsx                 # structure discovery\npython3 SKILL_DIR\u002Fscripts\u002Fformula_check.py file.xlsx --json         # formula validation\npython3 SKILL_DIR\u002Fscripts\u002Fformula_check.py file.xlsx --report      # standardized report\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_unpack.py in.xlsx \u002Ftmp\u002Fwork\u002F         # unpack for XML editing\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_pack.py \u002Ftmp\u002Fwork\u002F out.xlsx          # repack after editing\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_shift_rows.py \u002Ftmp\u002Fwork\u002F insert 5 1  # shift rows for insertion\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_add_column.py \u002Ftmp\u002Fwork\u002F --col G ... # add column with formulas\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_insert_row.py \u002Ftmp\u002Fwork\u002F --at 6 ...  # insert row with data\n```\n",{"data":35,"body":42},{"name":4,"description":6,"license":26,"metadata":36},{"version":37,"category":38,"sources":39},"1.0","productivity",[40,41],"ECMA-376 Office Open XML File Formats","Microsoft Open XML SDK documentation",{"type":43,"children":44},"root",[45,54,60,67,273,286,298,332,350,369,405,417,425,488,493,510,600,610,848,861,871,1095,1137,1210,1259,1269,1279,1332,1344,1356,1368,1388,1394,1487,1493,1558,1564,1796],{"type":46,"tag":47,"props":48,"children":50},"element","h1",{"id":49},"minimax-xlsx-skill",[51],{"type":52,"value":53},"text","MiniMax XLSX Skill",{"type":46,"tag":55,"props":56,"children":57},"p",{},[58],{"type":52,"value":59},"Handle the request directly. Do NOT spawn sub-agents. Always write the output file the user requests.",{"type":46,"tag":61,"props":62,"children":64},"h2",{"id":63},"task-routing",[65],{"type":52,"value":66},"Task Routing",{"type":46,"tag":68,"props":69,"children":70},"table",{},[71,95],{"type":46,"tag":72,"props":73,"children":74},"thead",{},[75],{"type":46,"tag":76,"props":77,"children":78},"tr",{},[79,85,90],{"type":46,"tag":80,"props":81,"children":82},"th",{},[83],{"type":52,"value":84},"Task",{"type":46,"tag":80,"props":86,"children":87},{},[88],{"type":52,"value":89},"Method",{"type":46,"tag":80,"props":91,"children":92},{},[93],{"type":52,"value":94},"Guide",{"type":46,"tag":96,"props":97,"children":98},"tbody",{},[99,135,170,207,242],{"type":46,"tag":76,"props":100,"children":101},{},[102,114,126],{"type":46,"tag":103,"props":104,"children":105},"td",{},[106,112],{"type":46,"tag":107,"props":108,"children":109},"strong",{},[110],{"type":52,"value":111},"READ",{"type":52,"value":113}," — analyze existing data",{"type":46,"tag":103,"props":115,"children":116},{},[117,124],{"type":46,"tag":118,"props":119,"children":121},"code",{"className":120},[],[122],{"type":52,"value":123},"xlsx_reader.py",{"type":52,"value":125}," + pandas",{"type":46,"tag":103,"props":127,"children":128},{},[129],{"type":46,"tag":118,"props":130,"children":132},{"className":131},[],[133],{"type":52,"value":134},"references\u002Fread-analyze.md",{"type":46,"tag":76,"props":136,"children":137},{},[138,148,153],{"type":46,"tag":103,"props":139,"children":140},{},[141,146],{"type":46,"tag":107,"props":142,"children":143},{},[144],{"type":52,"value":145},"CREATE",{"type":52,"value":147}," — new xlsx from scratch",{"type":46,"tag":103,"props":149,"children":150},{},[151],{"type":52,"value":152},"XML template",{"type":46,"tag":103,"props":154,"children":155},{},[156,162,164],{"type":46,"tag":118,"props":157,"children":159},{"className":158},[],[160],{"type":52,"value":161},"references\u002Fcreate.md",{"type":52,"value":163}," + ",{"type":46,"tag":118,"props":165,"children":167},{"className":166},[],[168],{"type":52,"value":169},"references\u002Fformat.md",{"type":46,"tag":76,"props":171,"children":172},{},[173,183,188],{"type":46,"tag":103,"props":174,"children":175},{},[176,181],{"type":46,"tag":107,"props":177,"children":178},{},[179],{"type":52,"value":180},"EDIT",{"type":52,"value":182}," — modify existing xlsx",{"type":46,"tag":103,"props":184,"children":185},{},[186],{"type":52,"value":187},"XML unpack→edit→pack",{"type":46,"tag":103,"props":189,"children":190},{},[191,197,199,205],{"type":46,"tag":118,"props":192,"children":194},{"className":193},[],[195],{"type":52,"value":196},"references\u002Fedit.md",{"type":52,"value":198}," (+ ",{"type":46,"tag":118,"props":200,"children":202},{"className":201},[],[203],{"type":52,"value":204},"format.md",{"type":52,"value":206}," if styling needed)",{"type":46,"tag":76,"props":208,"children":209},{},[210,220,233],{"type":46,"tag":103,"props":211,"children":212},{},[213,218],{"type":46,"tag":107,"props":214,"children":215},{},[216],{"type":52,"value":217},"FIX",{"type":52,"value":219}," — repair broken formulas in existing xlsx",{"type":46,"tag":103,"props":221,"children":222},{},[223,225,231],{"type":52,"value":224},"XML unpack→fix ",{"type":46,"tag":118,"props":226,"children":228},{"className":227},[],[229],{"type":52,"value":230},"\u003Cf>",{"type":52,"value":232}," nodes→pack",{"type":46,"tag":103,"props":234,"children":235},{},[236],{"type":46,"tag":118,"props":237,"children":239},{"className":238},[],[240],{"type":52,"value":241},"references\u002Ffix.md",{"type":46,"tag":76,"props":243,"children":244},{},[245,255,264],{"type":46,"tag":103,"props":246,"children":247},{},[248,253],{"type":46,"tag":107,"props":249,"children":250},{},[251],{"type":52,"value":252},"VALIDATE",{"type":52,"value":254}," — check formulas",{"type":46,"tag":103,"props":256,"children":257},{},[258],{"type":46,"tag":118,"props":259,"children":261},{"className":260},[],[262],{"type":52,"value":263},"formula_check.py",{"type":46,"tag":103,"props":265,"children":266},{},[267],{"type":46,"tag":118,"props":268,"children":270},{"className":269},[],[271],{"type":52,"value":272},"references\u002Fvalidate.md",{"type":46,"tag":61,"props":274,"children":276},{"id":275},"read-analyze-data-read-referencesread-analyzemd-first",[277,279,284],{"type":52,"value":278},"READ — Analyze data (read ",{"type":46,"tag":118,"props":280,"children":282},{"className":281},[],[283],{"type":52,"value":134},{"type":52,"value":285}," first)",{"type":46,"tag":55,"props":287,"children":288},{},[289,291,296],{"type":52,"value":290},"Start with ",{"type":46,"tag":118,"props":292,"children":294},{"className":293},[],[295],{"type":52,"value":123},{"type":52,"value":297}," for structure discovery, then pandas for custom analysis. Never modify the source file.",{"type":46,"tag":55,"props":299,"children":300},{},[301,306,308,314,316,322,324,330],{"type":46,"tag":107,"props":302,"children":303},{},[304],{"type":52,"value":305},"Formatting rule",{"type":52,"value":307},": When the user specifies decimal places (e.g. \"2 decimal places\"), apply that format to ALL numeric values — use ",{"type":46,"tag":118,"props":309,"children":311},{"className":310},[],[312],{"type":52,"value":313},"f'{v:.2f}'",{"type":52,"value":315}," on every number. Never output ",{"type":46,"tag":118,"props":317,"children":319},{"className":318},[],[320],{"type":52,"value":321},"12875",{"type":52,"value":323}," when ",{"type":46,"tag":118,"props":325,"children":327},{"className":326},[],[328],{"type":52,"value":329},"12875.00",{"type":52,"value":331}," is required.",{"type":46,"tag":55,"props":333,"children":334},{},[335,340,342,348],{"type":46,"tag":107,"props":336,"children":337},{},[338],{"type":52,"value":339},"Aggregation rule",{"type":52,"value":341},": Always compute sums\u002Fmeans\u002Fcounts directly from the DataFrame column — e.g. ",{"type":46,"tag":118,"props":343,"children":345},{"className":344},[],[346],{"type":52,"value":347},"df['Revenue'].sum()",{"type":52,"value":349},". Never re-derive column values before aggregation.",{"type":46,"tag":61,"props":351,"children":353},{"id":352},"create-xml-template-read-referencescreatemd-referencesformatmd",[354,356,361,362,367],{"type":52,"value":355},"CREATE — XML template (read ",{"type":46,"tag":118,"props":357,"children":359},{"className":358},[],[360],{"type":52,"value":161},{"type":52,"value":163},{"type":46,"tag":118,"props":363,"children":365},{"className":364},[],[366],{"type":52,"value":169},{"type":52,"value":368},")",{"type":46,"tag":55,"props":370,"children":371},{},[372,374,380,382,388,390,396,398,403],{"type":52,"value":373},"Copy ",{"type":46,"tag":118,"props":375,"children":377},{"className":376},[],[378],{"type":52,"value":379},"templates\u002Fminimal_xlsx\u002F",{"type":52,"value":381}," → edit XML directly → pack with ",{"type":46,"tag":118,"props":383,"children":385},{"className":384},[],[386],{"type":52,"value":387},"xlsx_pack.py",{"type":52,"value":389},". Every derived value MUST be an Excel formula (",{"type":46,"tag":118,"props":391,"children":393},{"className":392},[],[394],{"type":52,"value":395},"\u003Cf>SUM(B2:B9)\u003C\u002Ff>",{"type":52,"value":397},"), never a hardcoded number. Apply font colors per ",{"type":46,"tag":118,"props":399,"children":401},{"className":400},[],[402],{"type":52,"value":204},{"type":52,"value":404},".",{"type":46,"tag":61,"props":406,"children":408},{"id":407},"edit-xml-direct-edit-read-referenceseditmd-first",[409,411,416],{"type":52,"value":410},"EDIT — XML direct-edit (read ",{"type":46,"tag":118,"props":412,"children":414},{"className":413},[],[415],{"type":52,"value":196},{"type":52,"value":285},{"type":46,"tag":55,"props":418,"children":419},{},[420],{"type":46,"tag":107,"props":421,"children":422},{},[423],{"type":52,"value":424},"CRITICAL — EDIT INTEGRITY RULES:",{"type":46,"tag":426,"props":427,"children":428},"ol",{},[429,446,458,463],{"type":46,"tag":430,"props":431,"children":432},"li",{},[433,444],{"type":46,"tag":107,"props":434,"children":435},{},[436,438],{"type":52,"value":437},"NEVER create a new ",{"type":46,"tag":118,"props":439,"children":441},{"className":440},[],[442],{"type":52,"value":443},"Workbook()",{"type":52,"value":445}," for edit tasks. Always load the original file.",{"type":46,"tag":430,"props":447,"children":448},{},[449,451,456],{"type":52,"value":450},"The output MUST contain the ",{"type":46,"tag":107,"props":452,"children":453},{},[454],{"type":52,"value":455},"same sheets",{"type":52,"value":457}," as the input (same names, same data).",{"type":46,"tag":430,"props":459,"children":460},{},[461],{"type":52,"value":462},"Only modify the specific cells the task asks for — everything else must be untouched.",{"type":46,"tag":430,"props":464,"children":465},{},[466,471,473,478,480,486],{"type":46,"tag":107,"props":467,"children":468},{},[469],{"type":52,"value":470},"After saving output.xlsx, verify it",{"type":52,"value":472},": open with ",{"type":46,"tag":118,"props":474,"children":476},{"className":475},[],[477],{"type":52,"value":123},{"type":52,"value":479}," or ",{"type":46,"tag":118,"props":481,"children":483},{"className":482},[],[484],{"type":52,"value":485},"pandas",{"type":52,"value":487}," and confirm the original sheet names and a sample of original data are present. If verification fails, you wrote the wrong file — fix it before delivering.",{"type":46,"tag":55,"props":489,"children":490},{},[491],{"type":52,"value":492},"Never use openpyxl round-trip on existing files (corrupts VBA, pivots, sparklines). Instead: unpack → use helper scripts → repack.",{"type":46,"tag":55,"props":494,"children":495},{},[496,501,503,508],{"type":46,"tag":107,"props":497,"children":498},{},[499],{"type":52,"value":500},"\"Fill cells\" \u002F \"Add formulas to existing cells\" = EDIT task.",{"type":52,"value":502}," If the input file already exists and you are told to fill, update, or add formulas to specific cells, you MUST use the XML edit path. Never create a new ",{"type":46,"tag":118,"props":504,"children":506},{"className":505},[],[507],{"type":52,"value":443},{"type":52,"value":509},". Example — fill B3 with a cross-sheet SUM formula:",{"type":46,"tag":511,"props":512,"children":517},"pre",{"className":513,"code":514,"language":515,"meta":516,"style":516},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python3 SKILL_DIR\u002Fscripts\u002Fxlsx_unpack.py input.xlsx \u002Ftmp\u002Fxlsx_work\u002F\n# Find the target sheet's XML via xl\u002Fworkbook.xml → xl\u002F_rels\u002Fworkbook.xml.rels\n# Then use the Edit tool to add \u003Cf> inside the target \u003Cc> element:\n#   \u003Cc r=\"B3\">\u003Cf>SUM('Sales Data'!D2:D13)\u003C\u002Ff>\u003Cv>\u003C\u002Fv>\u003C\u002Fc>\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_pack.py \u002Ftmp\u002Fxlsx_work\u002F output.xlsx\n","bash","",[518],{"type":46,"tag":118,"props":519,"children":520},{"__ignoreMap":516},[521,549,559,568,577],{"type":46,"tag":522,"props":523,"children":526},"span",{"class":524,"line":525},"line",1,[527,533,539,544],{"type":46,"tag":522,"props":528,"children":530},{"style":529},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[531],{"type":52,"value":532},"python3",{"type":46,"tag":522,"props":534,"children":536},{"style":535},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[537],{"type":52,"value":538}," SKILL_DIR\u002Fscripts\u002Fxlsx_unpack.py",{"type":46,"tag":522,"props":540,"children":541},{"style":535},[542],{"type":52,"value":543}," input.xlsx",{"type":46,"tag":522,"props":545,"children":546},{"style":535},[547],{"type":52,"value":548}," \u002Ftmp\u002Fxlsx_work\u002F\n",{"type":46,"tag":522,"props":550,"children":552},{"class":524,"line":551},2,[553],{"type":46,"tag":522,"props":554,"children":556},{"style":555},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[557],{"type":52,"value":558},"# Find the target sheet's XML via xl\u002Fworkbook.xml → xl\u002F_rels\u002Fworkbook.xml.rels\n",{"type":46,"tag":522,"props":560,"children":562},{"class":524,"line":561},3,[563],{"type":46,"tag":522,"props":564,"children":565},{"style":555},[566],{"type":52,"value":567},"# Then use the Edit tool to add \u003Cf> inside the target \u003Cc> element:\n",{"type":46,"tag":522,"props":569,"children":571},{"class":524,"line":570},4,[572],{"type":46,"tag":522,"props":573,"children":574},{"style":555},[575],{"type":52,"value":576},"#   \u003Cc r=\"B3\">\u003Cf>SUM('Sales Data'!D2:D13)\u003C\u002Ff>\u003Cv>\u003C\u002Fv>\u003C\u002Fc>\n",{"type":46,"tag":522,"props":578,"children":580},{"class":524,"line":579},5,[581,585,590,595],{"type":46,"tag":522,"props":582,"children":583},{"style":529},[584],{"type":52,"value":532},{"type":46,"tag":522,"props":586,"children":587},{"style":535},[588],{"type":52,"value":589}," SKILL_DIR\u002Fscripts\u002Fxlsx_pack.py",{"type":46,"tag":522,"props":591,"children":592},{"style":535},[593],{"type":52,"value":594}," \u002Ftmp\u002Fxlsx_work\u002F",{"type":46,"tag":522,"props":596,"children":597},{"style":535},[598],{"type":52,"value":599}," output.xlsx\n",{"type":46,"tag":55,"props":601,"children":602},{},[603,608],{"type":46,"tag":107,"props":604,"children":605},{},[606],{"type":52,"value":607},"Add a column",{"type":52,"value":609}," (formulas, numfmt, styles auto-copied from adjacent column):",{"type":46,"tag":511,"props":611,"children":613},{"className":513,"code":612,"language":515,"meta":516,"style":516},"python3 SKILL_DIR\u002Fscripts\u002Fxlsx_unpack.py input.xlsx \u002Ftmp\u002Fxlsx_work\u002F\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_add_column.py \u002Ftmp\u002Fxlsx_work\u002F --col G \\\n    --sheet \"Sheet1\" --header \"% of Total\" \\\n    --formula '=F{row}\u002F$F$10' --formula-rows 2:9 \\\n    --total-row 10 --total-formula '=SUM(G2:G9)' --numfmt '0.0%' \\\n    --border-row 10 --border-style medium\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_pack.py \u002Ftmp\u002Fxlsx_work\u002F output.xlsx\n",[614],{"type":46,"tag":118,"props":615,"children":616},{"__ignoreMap":516},[617,636,668,714,751,805,828],{"type":46,"tag":522,"props":618,"children":619},{"class":524,"line":525},[620,624,628,632],{"type":46,"tag":522,"props":621,"children":622},{"style":529},[623],{"type":52,"value":532},{"type":46,"tag":522,"props":625,"children":626},{"style":535},[627],{"type":52,"value":538},{"type":46,"tag":522,"props":629,"children":630},{"style":535},[631],{"type":52,"value":543},{"type":46,"tag":522,"props":633,"children":634},{"style":535},[635],{"type":52,"value":548},{"type":46,"tag":522,"props":637,"children":638},{"class":524,"line":551},[639,643,648,652,657,662],{"type":46,"tag":522,"props":640,"children":641},{"style":529},[642],{"type":52,"value":532},{"type":46,"tag":522,"props":644,"children":645},{"style":535},[646],{"type":52,"value":647}," SKILL_DIR\u002Fscripts\u002Fxlsx_add_column.py",{"type":46,"tag":522,"props":649,"children":650},{"style":535},[651],{"type":52,"value":594},{"type":46,"tag":522,"props":653,"children":654},{"style":535},[655],{"type":52,"value":656}," --col",{"type":46,"tag":522,"props":658,"children":659},{"style":535},[660],{"type":52,"value":661}," G",{"type":46,"tag":522,"props":663,"children":665},{"style":664},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[666],{"type":52,"value":667}," \\\n",{"type":46,"tag":522,"props":669,"children":670},{"class":524,"line":561},[671,676,682,687,692,697,701,706,710],{"type":46,"tag":522,"props":672,"children":673},{"style":535},[674],{"type":52,"value":675},"    --sheet",{"type":46,"tag":522,"props":677,"children":679},{"style":678},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[680],{"type":52,"value":681}," \"",{"type":46,"tag":522,"props":683,"children":684},{"style":535},[685],{"type":52,"value":686},"Sheet1",{"type":46,"tag":522,"props":688,"children":689},{"style":678},[690],{"type":52,"value":691},"\"",{"type":46,"tag":522,"props":693,"children":694},{"style":535},[695],{"type":52,"value":696}," --header",{"type":46,"tag":522,"props":698,"children":699},{"style":678},[700],{"type":52,"value":681},{"type":46,"tag":522,"props":702,"children":703},{"style":535},[704],{"type":52,"value":705},"% of Total",{"type":46,"tag":522,"props":707,"children":708},{"style":678},[709],{"type":52,"value":691},{"type":46,"tag":522,"props":711,"children":712},{"style":664},[713],{"type":52,"value":667},{"type":46,"tag":522,"props":715,"children":716},{"class":524,"line":570},[717,722,727,732,737,742,747],{"type":46,"tag":522,"props":718,"children":719},{"style":535},[720],{"type":52,"value":721},"    --formula",{"type":46,"tag":522,"props":723,"children":724},{"style":678},[725],{"type":52,"value":726}," '",{"type":46,"tag":522,"props":728,"children":729},{"style":535},[730],{"type":52,"value":731},"=F{row}\u002F$F$10",{"type":46,"tag":522,"props":733,"children":734},{"style":678},[735],{"type":52,"value":736},"'",{"type":46,"tag":522,"props":738,"children":739},{"style":535},[740],{"type":52,"value":741}," --formula-rows",{"type":46,"tag":522,"props":743,"children":744},{"style":535},[745],{"type":52,"value":746}," 2:9",{"type":46,"tag":522,"props":748,"children":749},{"style":664},[750],{"type":52,"value":667},{"type":46,"tag":522,"props":752,"children":753},{"class":524,"line":579},[754,759,765,770,774,779,783,788,792,797,801],{"type":46,"tag":522,"props":755,"children":756},{"style":535},[757],{"type":52,"value":758},"    --total-row",{"type":46,"tag":522,"props":760,"children":762},{"style":761},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[763],{"type":52,"value":764}," 10",{"type":46,"tag":522,"props":766,"children":767},{"style":535},[768],{"type":52,"value":769}," --total-formula",{"type":46,"tag":522,"props":771,"children":772},{"style":678},[773],{"type":52,"value":726},{"type":46,"tag":522,"props":775,"children":776},{"style":535},[777],{"type":52,"value":778},"=SUM(G2:G9)",{"type":46,"tag":522,"props":780,"children":781},{"style":678},[782],{"type":52,"value":736},{"type":46,"tag":522,"props":784,"children":785},{"style":535},[786],{"type":52,"value":787}," --numfmt",{"type":46,"tag":522,"props":789,"children":790},{"style":678},[791],{"type":52,"value":726},{"type":46,"tag":522,"props":793,"children":794},{"style":535},[795],{"type":52,"value":796},"0.0%",{"type":46,"tag":522,"props":798,"children":799},{"style":678},[800],{"type":52,"value":736},{"type":46,"tag":522,"props":802,"children":803},{"style":664},[804],{"type":52,"value":667},{"type":46,"tag":522,"props":806,"children":808},{"class":524,"line":807},6,[809,814,818,823],{"type":46,"tag":522,"props":810,"children":811},{"style":535},[812],{"type":52,"value":813},"    --border-row",{"type":46,"tag":522,"props":815,"children":816},{"style":761},[817],{"type":52,"value":764},{"type":46,"tag":522,"props":819,"children":820},{"style":535},[821],{"type":52,"value":822}," --border-style",{"type":46,"tag":522,"props":824,"children":825},{"style":535},[826],{"type":52,"value":827}," medium\n",{"type":46,"tag":522,"props":829,"children":831},{"class":524,"line":830},7,[832,836,840,844],{"type":46,"tag":522,"props":833,"children":834},{"style":529},[835],{"type":52,"value":532},{"type":46,"tag":522,"props":837,"children":838},{"style":535},[839],{"type":52,"value":589},{"type":46,"tag":522,"props":841,"children":842},{"style":535},[843],{"type":52,"value":594},{"type":46,"tag":522,"props":845,"children":846},{"style":535},[847],{"type":52,"value":599},{"type":46,"tag":55,"props":849,"children":850},{},[851,853,859],{"type":52,"value":852},"The ",{"type":46,"tag":118,"props":854,"children":856},{"className":855},[],[857],{"type":52,"value":858},"--border-row",{"type":52,"value":860}," flag applies a top border to ALL cells in that row (not just the new column). Use it when the task requires accounting-style borders on total rows.",{"type":46,"tag":55,"props":862,"children":863},{},[864,869],{"type":46,"tag":107,"props":865,"children":866},{},[867],{"type":52,"value":868},"Insert a row",{"type":52,"value":870}," (shifts existing rows, updates SUM formulas, fixes circular refs):",{"type":46,"tag":511,"props":872,"children":874},{"className":513,"code":873,"language":515,"meta":516,"style":516},"python3 SKILL_DIR\u002Fscripts\u002Fxlsx_unpack.py input.xlsx \u002Ftmp\u002Fxlsx_work\u002F\n# IMPORTANT: Find the correct --at row by searching for the label text\n# in the worksheet XML, NOT by using the row number from the prompt.\n# The prompt may say \"row 5 (Office Rent)\" but Office Rent might actually\n# be at row 4. Always locate the row by its text label first.\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_insert_row.py \u002Ftmp\u002Fxlsx_work\u002F --at 5 \\\n    --sheet \"Budget FY2025\" --text A=Utilities \\\n    --values B=3000 C=3000 D=3500 E=3500 \\\n    --formula 'F=SUM(B{row}:E{row})' --copy-style-from 4\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_pack.py \u002Ftmp\u002Fxlsx_work\u002F output.xlsx\n",[875],{"type":46,"tag":118,"props":876,"children":877},{"__ignoreMap":516},[878,897,905,913,921,929,959,993,1044,1075],{"type":46,"tag":522,"props":879,"children":880},{"class":524,"line":525},[881,885,889,893],{"type":46,"tag":522,"props":882,"children":883},{"style":529},[884],{"type":52,"value":532},{"type":46,"tag":522,"props":886,"children":887},{"style":535},[888],{"type":52,"value":538},{"type":46,"tag":522,"props":890,"children":891},{"style":535},[892],{"type":52,"value":543},{"type":46,"tag":522,"props":894,"children":895},{"style":535},[896],{"type":52,"value":548},{"type":46,"tag":522,"props":898,"children":899},{"class":524,"line":551},[900],{"type":46,"tag":522,"props":901,"children":902},{"style":555},[903],{"type":52,"value":904},"# IMPORTANT: Find the correct --at row by searching for the label text\n",{"type":46,"tag":522,"props":906,"children":907},{"class":524,"line":561},[908],{"type":46,"tag":522,"props":909,"children":910},{"style":555},[911],{"type":52,"value":912},"# in the worksheet XML, NOT by using the row number from the prompt.\n",{"type":46,"tag":522,"props":914,"children":915},{"class":524,"line":570},[916],{"type":46,"tag":522,"props":917,"children":918},{"style":555},[919],{"type":52,"value":920},"# The prompt may say \"row 5 (Office Rent)\" but Office Rent might actually\n",{"type":46,"tag":522,"props":922,"children":923},{"class":524,"line":579},[924],{"type":46,"tag":522,"props":925,"children":926},{"style":555},[927],{"type":52,"value":928},"# be at row 4. Always locate the row by its text label first.\n",{"type":46,"tag":522,"props":930,"children":931},{"class":524,"line":807},[932,936,941,945,950,955],{"type":46,"tag":522,"props":933,"children":934},{"style":529},[935],{"type":52,"value":532},{"type":46,"tag":522,"props":937,"children":938},{"style":535},[939],{"type":52,"value":940}," SKILL_DIR\u002Fscripts\u002Fxlsx_insert_row.py",{"type":46,"tag":522,"props":942,"children":943},{"style":535},[944],{"type":52,"value":594},{"type":46,"tag":522,"props":946,"children":947},{"style":535},[948],{"type":52,"value":949}," --at",{"type":46,"tag":522,"props":951,"children":952},{"style":761},[953],{"type":52,"value":954}," 5",{"type":46,"tag":522,"props":956,"children":957},{"style":664},[958],{"type":52,"value":667},{"type":46,"tag":522,"props":960,"children":961},{"class":524,"line":830},[962,966,970,975,979,984,989],{"type":46,"tag":522,"props":963,"children":964},{"style":535},[965],{"type":52,"value":675},{"type":46,"tag":522,"props":967,"children":968},{"style":678},[969],{"type":52,"value":681},{"type":46,"tag":522,"props":971,"children":972},{"style":535},[973],{"type":52,"value":974},"Budget FY2025",{"type":46,"tag":522,"props":976,"children":977},{"style":678},[978],{"type":52,"value":691},{"type":46,"tag":522,"props":980,"children":981},{"style":535},[982],{"type":52,"value":983}," --text",{"type":46,"tag":522,"props":985,"children":986},{"style":535},[987],{"type":52,"value":988}," A=Utilities",{"type":46,"tag":522,"props":990,"children":991},{"style":664},[992],{"type":52,"value":667},{"type":46,"tag":522,"props":994,"children":996},{"class":524,"line":995},8,[997,1002,1007,1012,1017,1021,1026,1031,1036,1040],{"type":46,"tag":522,"props":998,"children":999},{"style":535},[1000],{"type":52,"value":1001},"    --values",{"type":46,"tag":522,"props":1003,"children":1004},{"style":535},[1005],{"type":52,"value":1006}," B=",{"type":46,"tag":522,"props":1008,"children":1009},{"style":761},[1010],{"type":52,"value":1011},"3000",{"type":46,"tag":522,"props":1013,"children":1014},{"style":535},[1015],{"type":52,"value":1016}," C=",{"type":46,"tag":522,"props":1018,"children":1019},{"style":761},[1020],{"type":52,"value":1011},{"type":46,"tag":522,"props":1022,"children":1023},{"style":535},[1024],{"type":52,"value":1025}," D=",{"type":46,"tag":522,"props":1027,"children":1028},{"style":761},[1029],{"type":52,"value":1030},"3500",{"type":46,"tag":522,"props":1032,"children":1033},{"style":535},[1034],{"type":52,"value":1035}," E=",{"type":46,"tag":522,"props":1037,"children":1038},{"style":761},[1039],{"type":52,"value":1030},{"type":46,"tag":522,"props":1041,"children":1042},{"style":664},[1043],{"type":52,"value":667},{"type":46,"tag":522,"props":1045,"children":1047},{"class":524,"line":1046},9,[1048,1052,1056,1061,1065,1070],{"type":46,"tag":522,"props":1049,"children":1050},{"style":535},[1051],{"type":52,"value":721},{"type":46,"tag":522,"props":1053,"children":1054},{"style":678},[1055],{"type":52,"value":726},{"type":46,"tag":522,"props":1057,"children":1058},{"style":535},[1059],{"type":52,"value":1060},"F=SUM(B{row}:E{row})",{"type":46,"tag":522,"props":1062,"children":1063},{"style":678},[1064],{"type":52,"value":736},{"type":46,"tag":522,"props":1066,"children":1067},{"style":535},[1068],{"type":52,"value":1069}," --copy-style-from",{"type":46,"tag":522,"props":1071,"children":1072},{"style":761},[1073],{"type":52,"value":1074}," 4\n",{"type":46,"tag":522,"props":1076,"children":1078},{"class":524,"line":1077},10,[1079,1083,1087,1091],{"type":46,"tag":522,"props":1080,"children":1081},{"style":529},[1082],{"type":52,"value":532},{"type":46,"tag":522,"props":1084,"children":1085},{"style":535},[1086],{"type":52,"value":589},{"type":46,"tag":522,"props":1088,"children":1089},{"style":535},[1090],{"type":52,"value":594},{"type":46,"tag":522,"props":1092,"children":1093},{"style":535},[1094],{"type":52,"value":599},{"type":46,"tag":55,"props":1096,"children":1097},{},[1098,1103,1105,1111,1113,1119,1121,1127,1129,1135],{"type":46,"tag":107,"props":1099,"children":1100},{},[1101],{"type":52,"value":1102},"Row lookup rule",{"type":52,"value":1104},": When the task says \"after row N (Label)\", always find the row by searching for \"Label\" in the worksheet XML (",{"type":46,"tag":118,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":52,"value":1110},"grep -n \"Label\" \u002Ftmp\u002Fxlsx_work\u002Fxl\u002Fworksheets\u002Fsheet*.xml",{"type":52,"value":1112}," or check sharedStrings.xml). Use the actual row number + 1 for ",{"type":46,"tag":118,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":52,"value":1118},"--at",{"type":52,"value":1120},". Do NOT call ",{"type":46,"tag":118,"props":1122,"children":1124},{"className":1123},[],[1125],{"type":52,"value":1126},"xlsx_shift_rows.py",{"type":52,"value":1128}," separately — ",{"type":46,"tag":118,"props":1130,"children":1132},{"className":1131},[],[1133],{"type":52,"value":1134},"xlsx_insert_row.py",{"type":52,"value":1136}," calls it internally.",{"type":46,"tag":55,"props":1138,"children":1139},{},[1140,1145,1147,1153,1155,1161,1163,1169,1171,1177,1179,1184,1186,1192,1194,1200,1202,1208],{"type":46,"tag":107,"props":1141,"children":1142},{},[1143],{"type":52,"value":1144},"Apply row-wide borders",{"type":52,"value":1146}," (e.g. accounting line on a TOTAL row):\nAfter running helper scripts, apply borders to ALL cells in the target row, not just newly added cells. In ",{"type":46,"tag":118,"props":1148,"children":1150},{"className":1149},[],[1151],{"type":52,"value":1152},"xl\u002Fstyles.xml",{"type":52,"value":1154},", append a new ",{"type":46,"tag":118,"props":1156,"children":1158},{"className":1157},[],[1159],{"type":52,"value":1160},"\u003Cborder>",{"type":52,"value":1162}," with the desired style, then append a new ",{"type":46,"tag":118,"props":1164,"children":1166},{"className":1165},[],[1167],{"type":52,"value":1168},"\u003Cxf>",{"type":52,"value":1170}," in ",{"type":46,"tag":118,"props":1172,"children":1174},{"className":1173},[],[1175],{"type":52,"value":1176},"\u003CcellXfs>",{"type":52,"value":1178}," that clones each cell's existing ",{"type":46,"tag":118,"props":1180,"children":1182},{"className":1181},[],[1183],{"type":52,"value":1168},{"type":52,"value":1185}," but sets the new ",{"type":46,"tag":118,"props":1187,"children":1189},{"className":1188},[],[1190],{"type":52,"value":1191},"borderId",{"type":52,"value":1193},". Apply the new style index to every ",{"type":46,"tag":118,"props":1195,"children":1197},{"className":1196},[],[1198],{"type":52,"value":1199},"\u003Cc>",{"type":52,"value":1201}," in the row via the ",{"type":46,"tag":118,"props":1203,"children":1205},{"className":1204},[],[1206],{"type":52,"value":1207},"s",{"type":52,"value":1209}," attribute:",{"type":46,"tag":511,"props":1211,"children":1215},{"className":1212,"code":1213,"language":1214,"meta":516,"style":516},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C!-- In xl\u002Fstyles.xml, append to \u003Cborders>: -->\n\u003Cborder>\n  \u003Cleft\u002F>\u003Cright\u002F>\u003Ctop style=\"medium\"\u002F>\u003Cbottom\u002F>\u003Cdiagonal\u002F>\n\u003C\u002Fborder>\n\u003C!-- Then append to \u003CcellXfs> an xf clone with the new borderId for each existing style -->\n","xml",[1216],{"type":46,"tag":118,"props":1217,"children":1218},{"__ignoreMap":516},[1219,1227,1235,1243,1251],{"type":46,"tag":522,"props":1220,"children":1221},{"class":524,"line":525},[1222],{"type":46,"tag":522,"props":1223,"children":1224},{},[1225],{"type":52,"value":1226},"\u003C!-- In xl\u002Fstyles.xml, append to \u003Cborders>: -->\n",{"type":46,"tag":522,"props":1228,"children":1229},{"class":524,"line":551},[1230],{"type":46,"tag":522,"props":1231,"children":1232},{},[1233],{"type":52,"value":1234},"\u003Cborder>\n",{"type":46,"tag":522,"props":1236,"children":1237},{"class":524,"line":561},[1238],{"type":46,"tag":522,"props":1239,"children":1240},{},[1241],{"type":52,"value":1242},"  \u003Cleft\u002F>\u003Cright\u002F>\u003Ctop style=\"medium\"\u002F>\u003Cbottom\u002F>\u003Cdiagonal\u002F>\n",{"type":46,"tag":522,"props":1244,"children":1245},{"class":524,"line":570},[1246],{"type":46,"tag":522,"props":1247,"children":1248},{},[1249],{"type":52,"value":1250},"\u003C\u002Fborder>\n",{"type":46,"tag":522,"props":1252,"children":1253},{"class":524,"line":579},[1254],{"type":46,"tag":522,"props":1255,"children":1256},{},[1257],{"type":52,"value":1258},"\u003C!-- Then append to \u003CcellXfs> an xf clone with the new borderId for each existing style -->\n",{"type":46,"tag":55,"props":1260,"children":1261},{},[1262,1267],{"type":46,"tag":107,"props":1263,"children":1264},{},[1265],{"type":52,"value":1266},"Key rule",{"type":52,"value":1268},": When a task says \"add a border to row N\", iterate over ALL cells A through the last column, not just newly added cells.",{"type":46,"tag":55,"props":1270,"children":1271},{},[1272,1277],{"type":46,"tag":107,"props":1273,"children":1274},{},[1275],{"type":52,"value":1276},"Manual XML edit",{"type":52,"value":1278}," (for anything the helper scripts don't cover):",{"type":46,"tag":511,"props":1280,"children":1282},{"className":513,"code":1281,"language":515,"meta":516,"style":516},"python3 SKILL_DIR\u002Fscripts\u002Fxlsx_unpack.py input.xlsx \u002Ftmp\u002Fxlsx_work\u002F\n# ... edit XML with the Edit tool ...\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_pack.py \u002Ftmp\u002Fxlsx_work\u002F output.xlsx\n",[1283],{"type":46,"tag":118,"props":1284,"children":1285},{"__ignoreMap":516},[1286,1305,1313],{"type":46,"tag":522,"props":1287,"children":1288},{"class":524,"line":525},[1289,1293,1297,1301],{"type":46,"tag":522,"props":1290,"children":1291},{"style":529},[1292],{"type":52,"value":532},{"type":46,"tag":522,"props":1294,"children":1295},{"style":535},[1296],{"type":52,"value":538},{"type":46,"tag":522,"props":1298,"children":1299},{"style":535},[1300],{"type":52,"value":543},{"type":46,"tag":522,"props":1302,"children":1303},{"style":535},[1304],{"type":52,"value":548},{"type":46,"tag":522,"props":1306,"children":1307},{"class":524,"line":551},[1308],{"type":46,"tag":522,"props":1309,"children":1310},{"style":555},[1311],{"type":52,"value":1312},"# ... edit XML with the Edit tool ...\n",{"type":46,"tag":522,"props":1314,"children":1315},{"class":524,"line":561},[1316,1320,1324,1328],{"type":46,"tag":522,"props":1317,"children":1318},{"style":529},[1319],{"type":52,"value":532},{"type":46,"tag":522,"props":1321,"children":1322},{"style":535},[1323],{"type":52,"value":589},{"type":46,"tag":522,"props":1325,"children":1326},{"style":535},[1327],{"type":52,"value":594},{"type":46,"tag":522,"props":1329,"children":1330},{"style":535},[1331],{"type":52,"value":599},{"type":46,"tag":61,"props":1333,"children":1335},{"id":1334},"fix-repair-broken-formulas-read-referencesfixmd-first",[1336,1338,1343],{"type":52,"value":1337},"FIX — Repair broken formulas (read ",{"type":46,"tag":118,"props":1339,"children":1341},{"className":1340},[],[1342],{"type":52,"value":241},{"type":52,"value":285},{"type":46,"tag":55,"props":1345,"children":1346},{},[1347,1349,1354],{"type":52,"value":1348},"This is an EDIT task. Unpack → fix broken ",{"type":46,"tag":118,"props":1350,"children":1352},{"className":1351},[],[1353],{"type":52,"value":230},{"type":52,"value":1355}," nodes → pack. Preserve all original sheets and data.",{"type":46,"tag":61,"props":1357,"children":1359},{"id":1358},"validate-check-formulas-read-referencesvalidatemd-first",[1360,1362,1367],{"type":52,"value":1361},"VALIDATE — Check formulas (read ",{"type":46,"tag":118,"props":1363,"children":1365},{"className":1364},[],[1366],{"type":52,"value":272},{"type":52,"value":285},{"type":46,"tag":55,"props":1369,"children":1370},{},[1371,1373,1378,1380,1386],{"type":52,"value":1372},"Run ",{"type":46,"tag":118,"props":1374,"children":1376},{"className":1375},[],[1377],{"type":52,"value":263},{"type":52,"value":1379}," for static validation. Use ",{"type":46,"tag":118,"props":1381,"children":1383},{"className":1382},[],[1384],{"type":52,"value":1385},"libreoffice_recalc.py",{"type":52,"value":1387}," for dynamic recalculation when available.",{"type":46,"tag":61,"props":1389,"children":1391},{"id":1390},"financial-color-standard",[1392],{"type":52,"value":1393},"Financial Color Standard",{"type":46,"tag":68,"props":1395,"children":1396},{},[1397,1418],{"type":46,"tag":72,"props":1398,"children":1399},{},[1400],{"type":46,"tag":76,"props":1401,"children":1402},{},[1403,1408,1413],{"type":46,"tag":80,"props":1404,"children":1405},{},[1406],{"type":52,"value":1407},"Cell Role",{"type":46,"tag":80,"props":1409,"children":1410},{},[1411],{"type":52,"value":1412},"Font Color",{"type":46,"tag":80,"props":1414,"children":1415},{},[1416],{"type":52,"value":1417},"Hex Code",{"type":46,"tag":96,"props":1419,"children":1420},{},[1421,1443,1465],{"type":46,"tag":76,"props":1422,"children":1423},{},[1424,1429,1434],{"type":46,"tag":103,"props":1425,"children":1426},{},[1427],{"type":52,"value":1428},"Hard-coded input \u002F assumption",{"type":46,"tag":103,"props":1430,"children":1431},{},[1432],{"type":52,"value":1433},"Blue",{"type":46,"tag":103,"props":1435,"children":1436},{},[1437],{"type":46,"tag":118,"props":1438,"children":1440},{"className":1439},[],[1441],{"type":52,"value":1442},"0000FF",{"type":46,"tag":76,"props":1444,"children":1445},{},[1446,1451,1456],{"type":46,"tag":103,"props":1447,"children":1448},{},[1449],{"type":52,"value":1450},"Formula \u002F computed result",{"type":46,"tag":103,"props":1452,"children":1453},{},[1454],{"type":52,"value":1455},"Black",{"type":46,"tag":103,"props":1457,"children":1458},{},[1459],{"type":46,"tag":118,"props":1460,"children":1462},{"className":1461},[],[1463],{"type":52,"value":1464},"000000",{"type":46,"tag":76,"props":1466,"children":1467},{},[1468,1473,1478],{"type":46,"tag":103,"props":1469,"children":1470},{},[1471],{"type":52,"value":1472},"Cross-sheet reference formula",{"type":46,"tag":103,"props":1474,"children":1475},{},[1476],{"type":52,"value":1477},"Green",{"type":46,"tag":103,"props":1479,"children":1480},{},[1481],{"type":46,"tag":118,"props":1482,"children":1484},{"className":1483},[],[1485],{"type":52,"value":1486},"00B050",{"type":46,"tag":61,"props":1488,"children":1490},{"id":1489},"key-rules",[1491],{"type":52,"value":1492},"Key Rules",{"type":46,"tag":426,"props":1494,"children":1495},{},[1496,1506,1521,1531,1541],{"type":46,"tag":430,"props":1497,"children":1498},{},[1499,1504],{"type":46,"tag":107,"props":1500,"children":1501},{},[1502],{"type":52,"value":1503},"Formula-First",{"type":52,"value":1505},": Every calculated cell MUST use an Excel formula, not a hardcoded number",{"type":46,"tag":430,"props":1507,"children":1508},{},[1509,1514,1516],{"type":46,"tag":107,"props":1510,"children":1511},{},[1512],{"type":52,"value":1513},"CREATE → XML template",{"type":52,"value":1515},": Copy minimal template, edit XML directly, pack with ",{"type":46,"tag":118,"props":1517,"children":1519},{"className":1518},[],[1520],{"type":52,"value":387},{"type":46,"tag":430,"props":1522,"children":1523},{},[1524,1529],{"type":46,"tag":107,"props":1525,"children":1526},{},[1527],{"type":52,"value":1528},"EDIT → XML",{"type":52,"value":1530},": Never openpyxl round-trip. Use unpack\u002Fedit\u002Fpack scripts",{"type":46,"tag":430,"props":1532,"children":1533},{},[1534,1539],{"type":46,"tag":107,"props":1535,"children":1536},{},[1537],{"type":52,"value":1538},"Always produce the output file",{"type":52,"value":1540}," — this is the #1 priority",{"type":46,"tag":430,"props":1542,"children":1543},{},[1544,1549,1551,1556],{"type":46,"tag":107,"props":1545,"children":1546},{},[1547],{"type":52,"value":1548},"Validate before delivery",{"type":52,"value":1550},": ",{"type":46,"tag":118,"props":1552,"children":1554},{"className":1553},[],[1555],{"type":52,"value":263},{"type":52,"value":1557}," exit code 0 = safe",{"type":46,"tag":61,"props":1559,"children":1561},{"id":1560},"utility-scripts",[1562],{"type":52,"value":1563},"Utility Scripts",{"type":46,"tag":511,"props":1565,"children":1567},{"className":513,"code":1566,"language":515,"meta":516,"style":516},"python3 SKILL_DIR\u002Fscripts\u002Fxlsx_reader.py input.xlsx                 # structure discovery\npython3 SKILL_DIR\u002Fscripts\u002Fformula_check.py file.xlsx --json         # formula validation\npython3 SKILL_DIR\u002Fscripts\u002Fformula_check.py file.xlsx --report      # standardized report\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_unpack.py in.xlsx \u002Ftmp\u002Fwork\u002F         # unpack for XML editing\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_pack.py \u002Ftmp\u002Fwork\u002F out.xlsx          # repack after editing\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_shift_rows.py \u002Ftmp\u002Fwork\u002F insert 5 1  # shift rows for insertion\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_add_column.py \u002Ftmp\u002Fwork\u002F --col G ... # add column with formulas\npython3 SKILL_DIR\u002Fscripts\u002Fxlsx_insert_row.py \u002Ftmp\u002Fwork\u002F --at 6 ...  # insert row with data\n",[1568],{"type":46,"tag":118,"props":1569,"children":1570},{"__ignoreMap":516},[1571,1592,1619,1644,1670,1695,1730,1763],{"type":46,"tag":522,"props":1572,"children":1573},{"class":524,"line":525},[1574,1578,1583,1587],{"type":46,"tag":522,"props":1575,"children":1576},{"style":529},[1577],{"type":52,"value":532},{"type":46,"tag":522,"props":1579,"children":1580},{"style":535},[1581],{"type":52,"value":1582}," SKILL_DIR\u002Fscripts\u002Fxlsx_reader.py",{"type":46,"tag":522,"props":1584,"children":1585},{"style":535},[1586],{"type":52,"value":543},{"type":46,"tag":522,"props":1588,"children":1589},{"style":555},[1590],{"type":52,"value":1591},"                 # structure discovery\n",{"type":46,"tag":522,"props":1593,"children":1594},{"class":524,"line":551},[1595,1599,1604,1609,1614],{"type":46,"tag":522,"props":1596,"children":1597},{"style":529},[1598],{"type":52,"value":532},{"type":46,"tag":522,"props":1600,"children":1601},{"style":535},[1602],{"type":52,"value":1603}," SKILL_DIR\u002Fscripts\u002Fformula_check.py",{"type":46,"tag":522,"props":1605,"children":1606},{"style":535},[1607],{"type":52,"value":1608}," file.xlsx",{"type":46,"tag":522,"props":1610,"children":1611},{"style":535},[1612],{"type":52,"value":1613}," --json",{"type":46,"tag":522,"props":1615,"children":1616},{"style":555},[1617],{"type":52,"value":1618},"         # formula validation\n",{"type":46,"tag":522,"props":1620,"children":1621},{"class":524,"line":561},[1622,1626,1630,1634,1639],{"type":46,"tag":522,"props":1623,"children":1624},{"style":529},[1625],{"type":52,"value":532},{"type":46,"tag":522,"props":1627,"children":1628},{"style":535},[1629],{"type":52,"value":1603},{"type":46,"tag":522,"props":1631,"children":1632},{"style":535},[1633],{"type":52,"value":1608},{"type":46,"tag":522,"props":1635,"children":1636},{"style":535},[1637],{"type":52,"value":1638}," --report",{"type":46,"tag":522,"props":1640,"children":1641},{"style":555},[1642],{"type":52,"value":1643},"      # standardized report\n",{"type":46,"tag":522,"props":1645,"children":1646},{"class":524,"line":570},[1647,1651,1655,1660,1665],{"type":46,"tag":522,"props":1648,"children":1649},{"style":529},[1650],{"type":52,"value":532},{"type":46,"tag":522,"props":1652,"children":1653},{"style":535},[1654],{"type":52,"value":538},{"type":46,"tag":522,"props":1656,"children":1657},{"style":535},[1658],{"type":52,"value":1659}," in.xlsx",{"type":46,"tag":522,"props":1661,"children":1662},{"style":535},[1663],{"type":52,"value":1664}," \u002Ftmp\u002Fwork\u002F",{"type":46,"tag":522,"props":1666,"children":1667},{"style":555},[1668],{"type":52,"value":1669},"         # unpack for XML editing\n",{"type":46,"tag":522,"props":1671,"children":1672},{"class":524,"line":579},[1673,1677,1681,1685,1690],{"type":46,"tag":522,"props":1674,"children":1675},{"style":529},[1676],{"type":52,"value":532},{"type":46,"tag":522,"props":1678,"children":1679},{"style":535},[1680],{"type":52,"value":589},{"type":46,"tag":522,"props":1682,"children":1683},{"style":535},[1684],{"type":52,"value":1664},{"type":46,"tag":522,"props":1686,"children":1687},{"style":535},[1688],{"type":52,"value":1689}," out.xlsx",{"type":46,"tag":522,"props":1691,"children":1692},{"style":555},[1693],{"type":52,"value":1694},"          # repack after editing\n",{"type":46,"tag":522,"props":1696,"children":1697},{"class":524,"line":807},[1698,1702,1707,1711,1716,1720,1725],{"type":46,"tag":522,"props":1699,"children":1700},{"style":529},[1701],{"type":52,"value":532},{"type":46,"tag":522,"props":1703,"children":1704},{"style":535},[1705],{"type":52,"value":1706}," SKILL_DIR\u002Fscripts\u002Fxlsx_shift_rows.py",{"type":46,"tag":522,"props":1708,"children":1709},{"style":535},[1710],{"type":52,"value":1664},{"type":46,"tag":522,"props":1712,"children":1713},{"style":535},[1714],{"type":52,"value":1715}," insert",{"type":46,"tag":522,"props":1717,"children":1718},{"style":761},[1719],{"type":52,"value":954},{"type":46,"tag":522,"props":1721,"children":1722},{"style":761},[1723],{"type":52,"value":1724}," 1",{"type":46,"tag":522,"props":1726,"children":1727},{"style":555},[1728],{"type":52,"value":1729},"  # shift rows for insertion\n",{"type":46,"tag":522,"props":1731,"children":1732},{"class":524,"line":830},[1733,1737,1741,1745,1749,1753,1758],{"type":46,"tag":522,"props":1734,"children":1735},{"style":529},[1736],{"type":52,"value":532},{"type":46,"tag":522,"props":1738,"children":1739},{"style":535},[1740],{"type":52,"value":647},{"type":46,"tag":522,"props":1742,"children":1743},{"style":535},[1744],{"type":52,"value":1664},{"type":46,"tag":522,"props":1746,"children":1747},{"style":535},[1748],{"type":52,"value":656},{"type":46,"tag":522,"props":1750,"children":1751},{"style":535},[1752],{"type":52,"value":661},{"type":46,"tag":522,"props":1754,"children":1755},{"style":535},[1756],{"type":52,"value":1757}," ...",{"type":46,"tag":522,"props":1759,"children":1760},{"style":555},[1761],{"type":52,"value":1762}," # add column with formulas\n",{"type":46,"tag":522,"props":1764,"children":1765},{"class":524,"line":995},[1766,1770,1774,1778,1782,1787,1791],{"type":46,"tag":522,"props":1767,"children":1768},{"style":529},[1769],{"type":52,"value":532},{"type":46,"tag":522,"props":1771,"children":1772},{"style":535},[1773],{"type":52,"value":940},{"type":46,"tag":522,"props":1775,"children":1776},{"style":535},[1777],{"type":52,"value":1664},{"type":46,"tag":522,"props":1779,"children":1780},{"style":535},[1781],{"type":52,"value":949},{"type":46,"tag":522,"props":1783,"children":1784},{"style":761},[1785],{"type":52,"value":1786}," 6",{"type":46,"tag":522,"props":1788,"children":1789},{"style":535},[1790],{"type":52,"value":1757},{"type":46,"tag":522,"props":1792,"children":1793},{"style":555},[1794],{"type":52,"value":1795},"  # insert row with data\n",{"type":46,"tag":1797,"props":1798,"children":1799},"style",{},[1800],{"type":52,"value":1801},"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":1803,"total":1932},[1804,1826,1842,1861,1876,1896,1914],{"slug":1805,"name":1805,"fn":1806,"description":1807,"org":1808,"tags":1809,"stars":23,"repoUrl":24,"updatedAt":1825},"android-native-dev","develop Android native applications","Android native application development and UI design guide. Covers Material Design 3, Kotlin\u002FCompose development, project configuration, accessibility, and build troubleshooting. Read this before Android native application development.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1810,1813,1816,1819,1822],{"name":1811,"slug":1812,"type":16},"Accessibility","accessibility",{"name":1814,"slug":1815,"type":16},"Android","android",{"name":1817,"slug":1818,"type":16},"Kotlin","kotlin",{"name":1820,"slug":1821,"type":16},"Mobile","mobile",{"name":1823,"slug":1824,"type":16},"UI Components","ui-components","2026-07-13T06:16:54.247834",{"slug":1827,"name":1827,"fn":1828,"description":1829,"org":1830,"tags":1831,"stars":23,"repoUrl":24,"updatedAt":1841},"buddy-sings","generate singing performances for AI companions","Use when user wants their Claude Code pet (\u002Fbuddy) to sing a song. Triggers on any request that combines the concept of their Claude Code buddy, pet, or companion with singing or music. Supports multilingual triggers — match equivalent phrases in any language.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1832,1835,1838],{"name":1833,"slug":1834,"type":16},"Agents","agents",{"name":1836,"slug":1837,"type":16},"Audio","audio",{"name":1839,"slug":1840,"type":16},"Creative","creative","2026-07-13T06:16:35.130644",{"slug":1843,"name":1843,"fn":1844,"description":1845,"org":1846,"tags":1847,"stars":23,"repoUrl":24,"updatedAt":1860},"color-font-skill","select color palettes and font pairings","Choose presentation-ready color palettes and font pairings for PPT\u002Fdesign tasks. Use when users ask for visual theme choices, brand-safe palettes, or font recommendations. Triggers include: 配色, 色板, 字体, color palette, font, PPT配色, 字体搭配.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1848,1851,1854,1857],{"name":1849,"slug":1850,"type":16},"Design","design",{"name":1852,"slug":1853,"type":16},"Presentations","presentations",{"name":1855,"slug":1856,"type":16},"Themes","themes",{"name":1858,"slug":1859,"type":16},"Typography","typography","2026-07-13T06:17:02.785587",{"slug":1862,"name":1862,"fn":1863,"description":1864,"org":1865,"tags":1866,"stars":23,"repoUrl":24,"updatedAt":1875},"design-style-skill","select visual design systems for presentations","Select a consistent visual design system for PPT slides using radius\u002Fspacing style recipes. Use when users ask for overall style direction or component styling consistency. Includes Sharp\u002FSoft\u002FRounded\u002FPill recipes, component mappings, typography\u002Fspacing rules, and mixing guidance. Triggers: 风格, style, radius, spacing, 圆角, 间距, PPT风格, 视觉风格, design style, component style.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1867,1868,1871,1874],{"name":1849,"slug":1850,"type":16},{"name":1869,"slug":1870,"type":16},"Design System","design-system",{"name":1872,"slug":1873,"type":16},"PowerPoint","powerpoint",{"name":1852,"slug":1853,"type":16},"2026-07-13T06:17:10.398389",{"slug":1877,"name":1877,"fn":1878,"description":1879,"org":1880,"tags":1881,"stars":23,"repoUrl":24,"updatedAt":1895},"flutter-dev","build cross-platform apps with Flutter","Flutter cross-platform development guide covering widget patterns, Riverpod\u002FBloc state management, GoRouter navigation, performance optimization, and platform-specific implementations. Includes const optimization, responsive layouts, testing strategies, and DevTools profiling.\nUse when: building Flutter apps, implementing state management (Riverpod\u002FBloc), setting up GoRouter navigation, creating custom widgets, optimizing performance, writing widget tests, cross-platform development.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1882,1885,1888,1889,1892],{"name":1883,"slug":1884,"type":16},"Dart","dart",{"name":1886,"slug":1887,"type":16},"Flutter","flutter",{"name":1820,"slug":1821,"type":16},{"name":1890,"slug":1891,"type":16},"Performance","performance",{"name":1893,"slug":1894,"type":16},"State Management","state-management","2026-07-13T06:16:36.626679",{"slug":1897,"name":1897,"fn":1898,"description":1899,"org":1900,"tags":1901,"stars":23,"repoUrl":24,"updatedAt":1913},"frontend-dev","build visually striking frontend web pages","Full-stack frontend development combining premium UI design, cinematic animations,\nAI-generated media assets, persuasive copywriting, and visual art. Builds complete,\nvisually striking web pages with real media, advanced motion, and compelling copy.\nUse when: building landing pages, marketing sites, product pages, dashboards,\ngenerating media assets (image\u002Fvideo\u002Faudio\u002Fmusic), writing conversion copy,\ncreating generative art, or implementing cinematic scroll animations.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1902,1905,1906,1907,1910],{"name":1903,"slug":1904,"type":16},"Animation","animation",{"name":1839,"slug":1840,"type":16},{"name":1849,"slug":1850,"type":16},{"name":1908,"slug":1909,"type":16},"Frontend","frontend",{"name":1911,"slug":1912,"type":16},"Web Development","web-development","2026-07-13T06:16:39.108827",{"slug":1915,"name":1915,"fn":1916,"description":1917,"org":1918,"tags":1919,"stars":23,"repoUrl":24,"updatedAt":1931},"fullstack-dev","build full-stack web applications","Full-stack backend architecture and frontend-backend integration guide.\nTRIGGER when: building a full-stack app, creating REST API with frontend, scaffolding backend service,\nbuilding todo app, building CRUD app, building real-time app, building chat app,\nExpress + React, Next.js API, Node.js backend, Python backend, Go backend,\ndesigning service layers, implementing error handling, managing config\u002Fauth,\nsetting up API clients, implementing auth flows, handling file uploads,\nadding real-time features (SSE\u002FWebSocket), hardening for production.\nDO NOT TRIGGER when: pure frontend UI work, pure CSS\u002Fstyling, database schema only.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1920,1923,1924,1927,1930],{"name":1921,"slug":1922,"type":16},"Backend","backend",{"name":1908,"slug":1909,"type":16},{"name":1925,"slug":1926,"type":16},"Full-stack","full-stack",{"name":1928,"slug":1929,"type":16},"REST API","rest-api",{"name":1911,"slug":1912,"type":16},"2026-07-13T06:16:43.219005",22,{"items":1934,"total":2057},[1935,1943,1949,1956,1963,1971,1979,1987,2002,2018,2037,2047],{"slug":1805,"name":1805,"fn":1806,"description":1807,"org":1936,"tags":1937,"stars":23,"repoUrl":24,"updatedAt":1825},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1938,1939,1940,1941,1942],{"name":1811,"slug":1812,"type":16},{"name":1814,"slug":1815,"type":16},{"name":1817,"slug":1818,"type":16},{"name":1820,"slug":1821,"type":16},{"name":1823,"slug":1824,"type":16},{"slug":1827,"name":1827,"fn":1828,"description":1829,"org":1944,"tags":1945,"stars":23,"repoUrl":24,"updatedAt":1841},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1946,1947,1948],{"name":1833,"slug":1834,"type":16},{"name":1836,"slug":1837,"type":16},{"name":1839,"slug":1840,"type":16},{"slug":1843,"name":1843,"fn":1844,"description":1845,"org":1950,"tags":1951,"stars":23,"repoUrl":24,"updatedAt":1860},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1952,1953,1954,1955],{"name":1849,"slug":1850,"type":16},{"name":1852,"slug":1853,"type":16},{"name":1855,"slug":1856,"type":16},{"name":1858,"slug":1859,"type":16},{"slug":1862,"name":1862,"fn":1863,"description":1864,"org":1957,"tags":1958,"stars":23,"repoUrl":24,"updatedAt":1875},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1959,1960,1961,1962],{"name":1849,"slug":1850,"type":16},{"name":1869,"slug":1870,"type":16},{"name":1872,"slug":1873,"type":16},{"name":1852,"slug":1853,"type":16},{"slug":1877,"name":1877,"fn":1878,"description":1879,"org":1964,"tags":1965,"stars":23,"repoUrl":24,"updatedAt":1895},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1966,1967,1968,1969,1970],{"name":1883,"slug":1884,"type":16},{"name":1886,"slug":1887,"type":16},{"name":1820,"slug":1821,"type":16},{"name":1890,"slug":1891,"type":16},{"name":1893,"slug":1894,"type":16},{"slug":1897,"name":1897,"fn":1898,"description":1899,"org":1972,"tags":1973,"stars":23,"repoUrl":24,"updatedAt":1913},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1974,1975,1976,1977,1978],{"name":1903,"slug":1904,"type":16},{"name":1839,"slug":1840,"type":16},{"name":1849,"slug":1850,"type":16},{"name":1908,"slug":1909,"type":16},{"name":1911,"slug":1912,"type":16},{"slug":1915,"name":1915,"fn":1916,"description":1917,"org":1980,"tags":1981,"stars":23,"repoUrl":24,"updatedAt":1931},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1982,1983,1984,1985,1986],{"name":1921,"slug":1922,"type":16},{"name":1908,"slug":1909,"type":16},{"name":1925,"slug":1926,"type":16},{"name":1928,"slug":1929,"type":16},{"name":1911,"slug":1912,"type":16},{"slug":1988,"name":1988,"fn":1989,"description":1990,"org":1991,"tags":1992,"stars":23,"repoUrl":24,"updatedAt":2001},"gif-sticker-maker","create animated GIF stickers from photos","Convert photos (people, pets, objects, logos) into 4 animated GIF stickers with captions.\nUse when: user wants to create cartoon stickers, GIF expressions, emoji packs, animated avatars,\nor convert photos to Funko Pop \u002F Pop Mart blind box style animations.\nTriggers: sticker, GIF, cartoon, emoji, expression pack, avatar animation.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1993,1994,1995,1998],{"name":1903,"slug":1904,"type":16},{"name":1839,"slug":1840,"type":16},{"name":1996,"slug":1997,"type":16},"Images","images",{"name":1999,"slug":2000,"type":16},"Media","media","2026-07-13T06:16:51.74461",{"slug":2003,"name":2003,"fn":2004,"description":2005,"org":2006,"tags":2007,"stars":23,"repoUrl":24,"updatedAt":2017},"ios-application-dev","develop iOS applications with SwiftUI and UIKit","iOS application development guide covering UIKit, SnapKit, and SwiftUI. Includes touch targets, safe areas, navigation patterns, Dynamic Type, Dark Mode, accessibility, collection views, common UI components, and SwiftUI design guidelines. For detailed references on specific topics, see the reference files.\nUse when: developing iOS apps, implementing UI, reviewing iOS code, working with UIKit\u002FSnapKit\u002FSwiftUI layouts, building iPhone interfaces, Swift mobile development, Apple HIG compliance, iOS accessibility implementation.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2008,2009,2012,2013,2016],{"name":1811,"slug":1812,"type":16},{"name":2010,"slug":2011,"type":16},"iOS","ios",{"name":1820,"slug":1821,"type":16},{"name":2014,"slug":2015,"type":16},"SwiftUI","swiftui",{"name":1823,"slug":1824,"type":16},"2026-07-13T06:16:55.686092",{"slug":2019,"name":2019,"fn":2020,"description":2021,"org":2022,"tags":2023,"stars":23,"repoUrl":24,"updatedAt":2036},"minimax-docx","create and edit DOCX documents","Professional DOCX document creation, editing, and formatting using OpenXML SDK (.NET). Three pipelines: (A) create new documents from scratch, (B) fill\u002Fedit content in existing documents, (C) apply template formatting with XSD validation gate-check. MUST use this skill whenever the user wants to produce, modify, or format a Word document — including when they say \"write a report\", \"draft a proposal\", \"make a contract\", \"fill in this form\", \"reformat to match this template\", or any task whose final output is a .docx file. Even if the user doesn't mention \"docx\" explicitly, if the task implies a printable\u002Fformal document, use this skill.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2024,2027,2030,2033],{"name":2025,"slug":2026,"type":16},"Documents","documents",{"name":2028,"slug":2029,"type":16},"DOCX","docx",{"name":2031,"slug":2032,"type":16},"Office","office",{"name":2034,"slug":2035,"type":16},"Templates","templates","2026-07-13T06:16:40.461868",{"slug":2038,"name":2038,"fn":2039,"description":2040,"org":2041,"tags":2042,"stars":23,"repoUrl":24,"updatedAt":2046},"minimax-music-gen","generate music and audio tracks","Use when user wants to generate music, songs, or audio tracks. Triggers on any request involving music creation, song writing, lyrics generation, audio production, or covers. Also triggers when user provides lyrics and wants them turned into a song, or describes a mood\u002Fscene and wants background music. Supports multilingual triggers — match equivalent phrases in any language. Do NOT use for music playback of existing files, music theory questions, or music recommendation without generation.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2043,2044,2045],{"name":1836,"slug":1837,"type":16},{"name":1839,"slug":1840,"type":16},{"name":1999,"slug":2000,"type":16},"2026-07-13T06:16:50.381758",{"slug":2048,"name":2048,"fn":2049,"description":2050,"org":2051,"tags":2052,"stars":23,"repoUrl":24,"updatedAt":2056},"minimax-music-playlist","generate personalized music playlists","Generate personalized music playlists by analyzing the user's music taste and generation feedback history. Triggers on any request involving playlist generation, music taste profiling, or personalized music recommendations. Supports multilingual triggers — match equivalent phrases in any language.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2053,2054,2055],{"name":1836,"slug":1837,"type":16},{"name":1839,"slug":1840,"type":16},{"name":1999,"slug":2000,"type":16},"2026-07-13T06:16:57.002997",37]