[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6WY5DGXV1ZDXAXERYNWXVFC":3,"skill-same:01M6WY5DGXV1ZDXAXERYNWXVFC":83},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":28,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":14,"repositoryHtmlUrl":65,"repositoryHomepageUrl":66,"ownerHtmlUrl":67,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":68,"install":69,"resources":82},"01M6WY5DGXV1ZDXAXERYNWXVFC","xlsx-modeling",null,"Creating Excel spreadsheets programmatically with openpyxl — worksheets, data, formulas, charts, formatting, and named ranges. Use when generating financial models, data reports, dashboards, or any structured spreadsheet from data or templates.","projectious-work\u002Fprocesskit","projectious-work","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F263889726?v=4","01M6N97TJJ118WQ35CHRV8RD0E","projectious.work","01M6N97TPWJPF0BMKYQ4PBY5W8",0,"MIT","https:\u002F\u002Fgithub.com\u002Fprojectious-work\u002Fprocesskit\u002Fblob\u002Fmain\u002Farchive\u002Fprocesskit-install-20261101\u002Fcontext\u002Ftemplates\u002Fprocesskit\u002Fv0.13.0\u002Fcontext\u002Fskills\u002Fdocuments\u002Fxlsx-modeling\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000004","电子表格","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"xlsx modeling","modeling","xlsx","models","when","v1","openpyxl","formulas","with","data reports","excel spreadsheets","reports","use","work","Charts","spreadsheet","templates","data","spreadsheets","documents","2026-11-10 10:12:30",false,"---\nname: xlsx-modeling\ndescription: |\n  Creating Excel spreadsheets programmatically with openpyxl — worksheets, data, formulas, charts, formatting, and named ranges. Use when generating financial models, data reports, dashboards, or any structured spreadsheet from data or templates.\nmetadata:\n  processkit:\n    apiVersion: processkit.projectious.work\u002Fv1\n    id: SKILL-xlsx-modeling\n    version: \"1.0.0\"\n    created: 2026-04-08T00:00:00Z\n    category: documents\n    layer: 2\n---\n\n# XLSX Modeling\n\n## Intro\n\nUse `openpyxl` to generate Excel files programmatically. Separate\ninputs, calculations, and outputs into distinct sheets or named\nranges — this makes models auditable and reduces errors. Write\ncell values as Python data and let Excel formulas do the math;\nnever pre-calculate values that Excel should own.\n\n## Overview\n\n### Setup\n\n```python\n# \u002F\u002F\u002F script\n# dependencies = [\"openpyxl\"]\n# \u002F\u002F\u002F\nfrom openpyxl import Workbook, load_workbook\nfrom openpyxl.styles import Font, PatternFill, Alignment, Border, Side\nfrom openpyxl.utils import get_column_letter, column_index_from_string\n\nwb = Workbook()\nws = wb.active\nws.title = \"Summary\"\n```\n\nInstall with `uv add openpyxl` or `pip install openpyxl`.\n\n### Writing data\n\n```python\n# Single cell\nws[\"A1\"] = \"Revenue\"\nws[\"B1\"] = 1_250_000\n\n# Row at a time\nws.append([\"Q1\", 312500, \"=B2\u002FB$1\"])    # mix of values and formulas\nws.append([\"Q2\", 340000, \"=B3\u002FB$1\"])\n\n# From a list-of-lists\ndata = [[\"Name\", \"Score\"], [\"Alice\", 92], [\"Bob\", 87]]\nfor row in data:\n    ws.append(row)\n```\n\nRows are 1-indexed. `ws[\"A1\"]` and `ws.cell(row=1, column=1)` are\nequivalent. Use `get_column_letter(n)` to convert column numbers to\nletters.\n\n### Formulas\n\nWrite Excel formula strings directly. openpyxl writes the formula;\nExcel evaluates it on open.\n\n```python\nws[\"C2\"] = \"=SUM(B2:B5)\"\nws[\"D2\"] = \"=AVERAGE(B2:B5)\"\nws[\"E2\"] = \"=IF(B2>1000, \\\"High\\\", \\\"Low\\\")\"\nws[\"F2\"] = \"=VLOOKUP(A2, Lookup!A:B, 2, FALSE)\"\n```\n\nSet `data_only=True` when reading a file to get cached values\ninstead of formula strings: `load_workbook(\"file.xlsx\", data_only=True)`.\n\n### Named ranges\n\n```python\nfrom openpyxl.workbook.defined_name import DefinedName\nfrom openpyxl.utils import quote_sheetname, absolute_coordinate\n\n# Define a named range\nref = f\"{quote_sheetname('Summary')}!{absolute_coordinate('B2:B13')}\"\nwb.defined_names[\"MonthlyRevenue\"] = DefinedName(\"MonthlyRevenue\", attr_text=ref)\n\n# Reference it in a formula\nws[\"C2\"] = \"=SUM(MonthlyRevenue)\"\n```\n\nUse named ranges for values referenced across multiple sheets — it\nmakes formulas readable and survives row\u002Fcolumn insertions.\n\n### Formatting\n\n```python\n# Font\nws[\"A1\"].font = Font(name=\"Calibri\", bold=True, size=12, color=\"1F497D\")\n\n# Fill\nws[\"A1\"].fill = PatternFill(fill_type=\"solid\", fgColor=\"4472C4\")\n\n# Alignment\nws[\"A1\"].alignment = Alignment(horizontal=\"center\", vertical=\"center\",\n                                wrap_text=True)\n\n# Border\nthin = Side(style=\"thin\")\nws[\"A1\"].border = Border(left=thin, right=thin, top=thin, bottom=thin)\n\n# Number format\nws[\"B2\"].number_format = \"#,##0.00\"          # 1,234.56\nws[\"C2\"].number_format = \"0.0%\"              # 12.3%\nws[\"D2\"].number_format = '\"$\"#,##0'          # $1,234\nws[\"E2\"].number_format = \"YYYY-MM-DD\"        # 2026-04-08\n```\n\nApply styles to header rows and totals rows consistently. Use a\ndefined `NamedStyle` object to apply a style set to multiple cells:\n\n```python\nfrom openpyxl.styles import NamedStyle\nheader_style = NamedStyle(name=\"header\")\nheader_style.font = Font(bold=True, color=\"FFFFFF\")\nheader_style.fill = PatternFill(fill_type=\"solid\", fgColor=\"2E74B5\")\nwb.add_named_style(header_style)\nws[\"A1\"].style = \"header\"\n```\n\n### Column widths and row heights\n\n```python\nws.column_dimensions[\"A\"].width = 20\nws.column_dimensions[\"B\"].width = 14\nws.row_dimensions[1].height = 30   # points\n\n# Auto-width approximation (openpyxl has no auto-fit)\nfor col in ws.columns:\n    max_length = max(len(str(cell.value or \"\")) for cell in col)\n    ws.column_dimensions[col[0].column_letter].width = min(max_length + 4, 60)\n```\n\n### Charts\n\n```python\nfrom openpyxl.chart import BarChart, Reference\n\nchart = BarChart()\nchart.type = \"col\"\nchart.title = \"Quarterly Revenue\"\nchart.y_axis.title = \"Revenue ($)\"\nchart.x_axis.title = \"Quarter\"\n\ndata_ref = Reference(ws, min_col=2, min_row=1, max_row=5)\ncategories = Reference(ws, min_col=1, min_row=2, max_row=5)\nchart.add_data(data_ref, titles_from_data=True)\nchart.set_categories(categories)\nchart.shape = 4         # rectangle (no 3D)\n\nws.add_chart(chart, \"D2\")\n```\n\nChart types: `BarChart`, `LineChart`, `PieChart`, `AreaChart`,\n`ScatterChart`, `BubbleChart`. Set `chart.shape = 4` (flat) for all\nchart types — 3D charts are harder to read.\n\n### Freeze panes and filters\n\n```python\nws.freeze_panes = \"B2\"       # freeze row 1 and column A\nws.auto_filter.ref = \"A1:D100\"   # enable autofilter on header row\n```\n\n### Multiple sheets\n\n```python\nws_data  = wb.create_sheet(\"Raw Data\")\nws_calc  = wb.create_sheet(\"Calculations\")\nws_out   = wb.create_sheet(\"Output\")\n\n# Reorder: move Output to first position\nwb.move_sheet(\"Output\", offset=-wb.index(wb[\"Output\"]))\n\n# Remove the default sheet if unused\ndel wb[\"Sheet\"]\n```\n\n### Saving\n\n```python\nwb.save(\"report.xlsx\")\n\nfrom io import BytesIO\nbuf = BytesIO()\nwb.save(buf)\nbuf.seek(0)\n```\n\n## Gotchas\n\nAgent-specific failure modes — provider-neutral pause-and-self-check items:\n\n- **Pre-calculating values that Excel formulas should own.** Writing `ws[\"C2\"] = sum(data)` instead of `ws[\"C2\"] = \"=SUM(B2:B100)\"` makes the spreadsheet static — users cannot change inputs and see results update. Write formulas for all derived values; let Excel own the calculation.\n- **Not separating inputs, calculations, and outputs into distinct sheets.** A single sheet that mixes raw data, intermediate calculations, and final results becomes impossible to audit. Organize into at minimum an \"Inputs\" sheet and an \"Output\" or \"Summary\" sheet; keep raw data on its own sheet untouched.\n- **Using hard-coded cell references in formulas instead of named ranges.** A formula like `=SUM(Sheet1!B2:B13)` breaks silently if a row is inserted before row 2. Named ranges (e.g. `MonthlyRevenue`) survive structural changes and make formulas self-documenting.\n- **Omitting number formats on numeric cells.** Raw numbers without formatting (`1234567.89`) are harder to read than formatted ones (`$1,234,567.89`). Set `.number_format` on all monetary, percentage, and date cells before saving.\n- **Reading a file with `data_only=False` expecting cached values.** When `data_only=False` (the default), openpyxl returns formula strings, not computed values. To read the last computed result, open with `load_workbook(\"file.xlsx\", data_only=True)`. If the file has never been opened in Excel, the cached values will be `None`.\n- **Adding 3D chart types.** 3D bar and pie charts are visually misleading and harder to read than flat equivalents. Set `chart.shape = 4` (rectangular) and never use 3D variants in generated output.\n- **Not freezing header rows on data sheets.** A data sheet without `ws.freeze_panes = \"A2\"` forces users to scroll to remember column labels. Always freeze at least the header row on any sheet with more than one screen of rows.\n\n## Full reference\n\n### openpyxl vs xlsxwriter\n\n| | openpyxl | xlsxwriter |\n|---|---|---|\n| Read existing files | Yes | No |\n| Write formulas | Yes (as strings) | Yes |\n| Charts | Basic | Rich |\n| Performance (large files) | Moderate | Fast |\n| Streams (constant memory) | `WriteOnlyWorkbook` | `use_memory_strings=True` |\n\nUse `openpyxl` when you need to read and modify an existing file.\nUse `xlsxwriter` when producing large files from scratch with rich\nchart formatting and you don't need to read back the result.\n\n### Large files (streaming write)\n\n```python\nfrom openpyxl import Workbook\n\nwb = Workbook(write_only=True)\nws = wb.create_sheet()\nws.append([\"Name\", \"Score\"])    # header\nfor name, score in dataset:\n    ws.append([name, score])\nwb.save(\"large.xlsx\")\n```\n\n`write_only=True` uses constant memory — cells cannot be read back\nafter writing.\n\n### Conditional formatting\n\n```python\nfrom openpyxl.formatting.rule import ColorScaleRule, DataBarRule\n\nrule = ColorScaleRule(\n    start_type=\"min\", start_color=\"F8696B\",\n    mid_type=\"percentile\", mid_value=50, mid_color=\"FFEB84\",\n    end_type=\"max\", end_color=\"63BE7B\",\n)\nws.conditional_formatting.add(\"B2:B100\", rule)\n```\n\n### Data validation (dropdown lists)\n\n```python\nfrom openpyxl.worksheet.datavalidation import DataValidation\n\ndv = DataValidation(type=\"list\", formula1='\"Yes,No,N\u002FA\"', allow_blank=True)\nws.add_data_validation(dv)\ndv.add(\"C2:C100\")\n```\n\n### Password protection\n\n```python\nws.protection.sheet = True\nws.protection.password = \"readonly\"\nws.protection.enable()\n```\n","# XLSX Modeling\n\n## Intro\n\nUse `openpyxl` to generate Excel files programmatically. Separate\ninputs, calculations, and outputs into distinct sheets or named\nranges — this makes models auditable and reduces errors. Write\ncell values as Python data and let Excel formulas do the math;\nnever pre-calculate values that Excel should own.\n\n## Overview\n\n### Setup\n\n```python\n# \u002F\u002F\u002F script\n# dependencies = [\"openpyxl\"]\n# \u002F\u002F\u002F\nfrom openpyxl import Workbook, load_workbook\nfrom openpyxl.styles import Font, PatternFill, Alignment, Border, Side\nfrom openpyxl.utils import get_column_letter, column_index_from_string\n\nwb = Workbook()\nws = wb.active\nws.title = \"Summary\"\n```\n\nInstall with `uv add openpyxl` or `pip install openpyxl`.\n\n### Writing data\n\n```python\n# Single cell\nws[\"A1\"] = \"Revenue\"\nws[\"B1\"] = 1_250_000\n\n# Row at a time\nws.append([\"Q1\", 312500, \"=B2\u002FB$1\"])    # mix of values and formulas\nws.append([\"Q2\", 340000, \"=B3\u002FB$1\"])\n\n# From a list-of-lists\ndata = [[\"Name\", \"Score\"], [\"Alice\", 92], [\"Bob\", 87]]\nfor row in data:\n    ws.append(row)\n```\n\nRows are 1-indexed. `ws[\"A1\"]` and `ws.cell(row=1, column=1)` are\nequivalent. Use `get_column_letter(n)` to convert column numbers to\nletters.\n\n### Formulas\n\nWrite Excel formula strings directly. openpyxl writes the formula;\nExcel evaluates it on open.\n\n```python\nws[\"C2\"] = \"=SUM(B2:B5)\"\nws[\"D2\"] = \"=AVERAGE(B2:B5)\"\nws[\"E2\"] = \"=IF(B2>1000, \\\"High\\\", \\\"Low\\\")\"\nws[\"F2\"] = \"=VLOOKUP(A2, Lookup!A:B, 2, FALSE)\"\n```\n\nSet `data_only=True` when reading a file to get cached values\ninstead of formula strings: `load_workbook(\"file.xlsx\", data_only=True)`.\n\n### Named ranges\n\n```python\nfrom openpyxl.workbook.defined_name import DefinedName\nfrom openpyxl.utils import quote_sheetname, absolute_coordinate\n\n# Define a named range\nref = f\"{quote_sheetname('Summary')}!{absolute_coordinate('B2:B13')}\"\nwb.defined_names[\"MonthlyRevenue\"] = DefinedName(\"MonthlyRevenue\", attr_text=ref)\n\n# Reference it in a formula\nws[\"C2\"] = \"=SUM(MonthlyRevenue)\"\n```\n\nUse named ranges for values referenced across multiple sheets — it\nmakes formulas readable and survives row\u002Fcolumn insertions.\n\n### Formatting\n\n```python\n# Font\nws[\"A1\"].font = Font(name=\"Calibri\", bold=True, size=12, color=\"1F497D\")\n\n# Fill\nws[\"A1\"].fill = PatternFill(fill_type=\"solid\", fgColor=\"4472C4\")\n\n# Alignment\nws[\"A1\"].alignment = Alignment(horizontal=\"center\", vertical=\"center\",\n                                wrap_text=True)\n\n# Border\nthin = Side(style=\"thin\")\nws[\"A1\"].border = Border(left=thin, right=thin, top=thin, bottom=thin)\n\n# Number format\nws[\"B2\"].number_format = \"#,##0.00\"          # 1,234.56\nws[\"C2\"].number_format = \"0.0%\"              # 12.3%\nws[\"D2\"].number_format = '\"$\"#,##0'          # $1,234\nws[\"E2\"].number_format = \"YYYY-MM-DD\"        # 2026-04-08\n```\n\nApply styles to header rows and totals rows consistently. Use a\ndefined `NamedStyle` object to apply a style set to multiple cells:\n\n```python\nfrom openpyxl.styles import NamedStyle\nheader_style = NamedStyle(name=\"header\")\nheader_style.font = Font(bold=True, color=\"FFFFFF\")\nheader_style.fill = PatternFill(fill_type=\"solid\", fgColor=\"2E74B5\")\nwb.add_named_style(header_style)\nws[\"A1\"].style = \"header\"\n```\n\n### Column widths and row heights\n\n```python\nws.column_dimensions[\"A\"].width = 20\nws.column_dimensions[\"B\"].width = 14\nws.row_dimensions[1].height = 30   # points\n\n# Auto-width approximation (openpyxl has no auto-fit)\nfor col in ws.columns:\n    max_length = max(len(str(cell.value or \"\")) for cell in col)\n    ws.column_dimensions[col[0].column_letter].width = min(max_length + 4, 60)\n```\n\n### Charts\n\n```python\nfrom openpyxl.chart import BarChart, Reference\n\nchart = BarChart()\nchart.type = \"col\"\nchart.title = \"Quarterly Revenue\"\nchart.y_axis.title = \"Revenue ($)\"\nchart.x_axis.title = \"Quarter\"\n\ndata_ref = Reference(ws, min_col=2, min_row=1, max_row=5)\ncategories = Reference(ws, min_col=1, min_row=2, max_row=5)\nchart.add_data(data_ref, titles_from_data=True)\nchart.set_categories(categories)\nchart.shape = 4         # rectangle (no 3D)\n\nws.add_chart(chart, \"D2\")\n```\n\nChart types: `BarChart`, `LineChart`, `PieChart`, `AreaChart`,\n`ScatterChart`, `BubbleChart`. Set `chart.shape = 4` (flat) for all\nchart types — 3D charts are harder to read.\n\n### Freeze panes and filters\n\n```python\nws.freeze_panes = \"B2\"       # freeze row 1 and column A\nws.auto_filter.ref = \"A1:D100\"   # enable autofilter on header row\n```\n\n### Multiple sheets\n\n```python\nws_data  = wb.create_sheet(\"Raw Data\")\nws_calc  = wb.create_sheet(\"Calculations\")\nws_out   = wb.create_sheet(\"Output\")\n\n# Reorder: move Output to first position\nwb.move_sheet(\"Output\", offset=-wb.index(wb[\"Output\"]))\n\n# Remove the default sheet if unused\ndel wb[\"Sheet\"]\n```\n\n### Saving\n\n```python\nwb.save(\"report.xlsx\")\n\nfrom io import BytesIO\nbuf = BytesIO()\nwb.save(buf)\nbuf.seek(0)\n```\n\n## Gotchas\n\nAgent-specific failure modes — provider-neutral pause-and-self-check items:\n\n- **Pre-calculating values that Excel formulas should own.** Writing `ws[\"C2\"] = sum(data)` instead of `ws[\"C2\"] = \"=SUM(B2:B100)\"` makes the spreadsheet static — users cannot change inputs and see results update. Write formulas for all derived values; let Excel own the calculation.\n- **Not separating inputs, calculations, and outputs into distinct sheets.** A single sheet that mixes raw data, intermediate calculations, and final results becomes impossible to audit. Organize into at minimum an \"Inputs\" sheet and an \"Output\" or \"Summary\" sheet; keep raw data on its own sheet untouched.\n- **Using hard-coded cell references in formulas instead of named ranges.** A formula like `=SUM(Sheet1!B2:B13)` breaks silently if a row is inserted before row 2. Named ranges (e.g. `MonthlyRevenue`) survive structural changes and make formulas self-documenting.\n- **Omitting number formats on numeric cells.** Raw numbers without formatting (`1234567.89`) are harder to read than formatted ones (`$1,234,567.89`). Set `.number_format` on all monetary, percentage, and date cells before saving.\n- **Reading a file with `data_only=False` expecting cached values.** When `data_only=False` (the default), openpyxl returns formula strings, not computed values. To read the last computed result, open with `load_workbook(\"file.xlsx\", data_only=True)`. If the file has never been opened in Excel, the cached values will be `None`.\n- **Adding 3D chart types.** 3D bar and pie charts are visually misleading and harder to read than flat equivalents. Set `chart.shape = 4` (rectangular) and never use 3D variants in generated output.\n- **Not freezing header rows on data sheets.** A data sheet without `ws.freeze_panes = \"A2\"` forces users to scroll to remember column labels. Always freeze at least the header row on any sheet with more than one screen of rows.\n\n## Full reference\n\n### openpyxl vs xlsxwriter\n\n| | openpyxl | xlsxwriter |\n|---|---|---|\n| Read existing files | Yes | No |\n| Write formulas | Yes (as strings) | Yes |\n| Charts | Basic | Rich |\n| Performance (large files) | Moderate | Fast |\n| Streams (constant memory) | `WriteOnlyWorkbook` | `use_memory_strings=True` |\n\nUse `openpyxl` when you need to read and modify an existing file.\nUse `xlsxwriter` when producing large files from scratch with rich\nchart formatting and you don't need to read back the result.\n\n### Large files (streaming write)\n\n```python\nfrom openpyxl import Workbook\n\nwb = Workbook(write_only=True)\nws = wb.create_sheet()\nws.append([\"Name\", \"Score\"])    # header\nfor name, score in dataset:\n    ws.append([name, score])\nwb.save(\"large.xlsx\")\n```\n\n`write_only=True` uses constant memory — cells cannot be read back\nafter writing.\n\n### Conditional formatting\n\n```python\nfrom openpyxl.formatting.rule import ColorScaleRule, DataBarRule\n\nrule = ColorScaleRule(\n    start_type=\"min\", start_color=\"F8696B\",\n    mid_type=\"percentile\", mid_value=50, mid_color=\"FFEB84\",\n    end_type=\"max\", end_color=\"63BE7B\",\n)\nws.conditional_formatting.add(\"B2:B100\", rule)\n```\n\n### Data validation (dropdown lists)\n\n```python\nfrom openpyxl.worksheet.datavalidation import DataValidation\n\ndv = DataValidation(type=\"list\", formula1='\"Yes,No,N\u002FA\"', allow_blank=True)\nws.add_data_validation(dv)\ndv.add(\"C2:C100\")\n```\n\n### Password protection\n\n```python\nws.protection.sheet = True\nws.protection.password = \"readonly\"\nws.protection.enable()\n```\n",{"name":5,"metadata":54,"description":61},{"processkit":55},{"id":56,"layer":57,"created":58,"version":59,"category":48,"apiVersion":60},"SKILL-xlsx-modeling",2,1775606400000,"1.0.0","processkit.projectious.work\u002Fv1","Creating Excel spreadsheets programmatically with openpyxl — worksheets, data, formulas, charts, formatting, and named ranges. Use when generating financial models, data reports, dashboards, or any structured spreadsheet from data or templates.\n","main","4876a92620ee792aac2ac9a1a806322d8a572367","archive\u002Fprocesskit-install-20261101\u002Fcontext\u002Ftemplates\u002Fprocesskit\u002Fv0.13.0\u002Fcontext\u002Fskills\u002Fdocuments\u002Fxlsx-modeling","https:\u002F\u002Fgithub.com\u002Fprojectious-work\u002Fprocesskit","https:\u002F\u002Fprojectious-work.github.io\u002Fprocesskit\u002F","https:\u002F\u002Fgithub.com\u002Fprojectious-work","2026-11-11 23:24:18",{"source":8,"skillName":5,"commands":70,"prompt":80,"zipAvailable":81},[71,74,77],{"tool":72,"command":73},"npx","npx skills add projectious-work\u002Fprocesskit --skill xlsx-modeling",{"tool":75,"command":76},"bunx","bunx skills add projectious-work\u002Fprocesskit --skill xlsx-modeling",{"tool":78,"command":79},"pnpm","pnpm dlx skills add projectious-work\u002Fprocesskit --skill xlsx-modeling","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fprojectious-work\u002Fprocesskit\u002Fblob\u002Fmain\u002Farchive\u002Fprocesskit-install-20261101\u002Fcontext\u002Ftemplates\u002Fprocesskit\u002Fv0.13.0\u002Fcontext\u002Fskills\u002Fdocuments\u002Fxlsx-modeling\u002FSKILL.md",true,[],[84,108,128,149,166,184],{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":93,"publishedAt":49},"01M6X5MTC89B4ZGXW3JVSQCPF8","skill-management","Manage Skill package manifests as v1 ontology entities.","https:\u002F\u002Fgithub.com\u002Fprojectious-work\u002Fprocesskit\u002Fblob\u002Fmain\u002Fsrc\u002Fcontext\u002Fskills\u002Fprocesskit\u002Fskill-management\u002FSKILL.md",[90],{"categoryNo":91,"categoryName":92,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[94,95,96,97,98,99,42,100,101,102,86,103,104,105,34,106,107],"management","skill management","create","update","package","alpha","list","manage","ontology","get","as","manifests","skill package","transition",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":115,"publishedAt":49},"01M6X5MCV74NHW5MEDNHZRF2C8","schema-management","Manage generated processkit schema contracts through deterministic MCP rebuild and inspection workflows.","https:\u002F\u002Fgithub.com\u002Fprojectious-work\u002Fprocesskit\u002Fblob\u002Fmain\u002Fsrc\u002Fcontext\u002Fskills\u002Fprocesskit\u002Fschema-management\u002FSKILL.md",[114],{"categoryNo":91,"categoryName":92,"taxonomyType":21,"taxonomyTypeDesc":22},[94,116,117,118,119,120,99,42,121,122,101,123,124,125,103,126,127],"schema","schema management","MCP","workflows","validation","generated","rebuild","contracts","wed","deterministic","contract","mode",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":134,"publishedAt":49},"01M6X5M5G6YJ96AMZGSCZJ1D13","proposition-management","Record claims, risks, beliefs, world facts, WSJF estimates, and assumptions through the Proposition interface.","https:\u002F\u002Fgithub.com\u002Fprojectious-work\u002Fprocesskit\u002Fblob\u002Fmain\u002Fsrc\u002Fcontext\u002Fskills\u002Fprocesskit\u002Fproposition-management\u002FSKILL.md",[],[94,135,136,96,97,137,99,42,138,139,140,141,103,142,143,144,145,146,147,148],"proposition","proposition management","index","log","world","record","query","creation","event","interface","updates","facts","claims","WSJF",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":155,"publishedAt":49},"01M6X5KMQ83QN9M6MPWZM7344F","ontology-management","Manage generated v1 ontology entities that do not require a dedicated domain server.","https:\u002F\u002Fgithub.com\u002Fprojectious-work\u002Fprocesskit\u002Fblob\u002Fmain\u002Fsrc\u002Fcontext\u002Fskills\u002Fprocesskit\u002Fontology-management\u002FSKILL.md",[],[94,102,156,96,99,157,158,121,159,138,101,160,161,103,162,163,143,164,34,165],"ontology management","lifecycle","archive","roadmap","do","domain","iteration","keep","measurement","generic",{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":172,"publishedAt":49},"01M6X5KCY2DN3SM21RERSFNEBT","okf-compatibility","Import, export, and validate conformant Open Knowledge Format bundles.","https:\u002F\u002Fgithub.com\u002Fprojectious-work\u002Fprocesskit\u002Fblob\u002Fmain\u002Fsrc\u002Fcontext\u002Fskills\u002Fprocesskit\u002Fokf-compatibility\u002FSKILL.md",[],[173,174,175,176,99,177,178,179,42,180,181,182,183],"okf","compatibility","okf compatibility","validate","open","knowledge","format","export","bundles","bundle","import",{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":190,"publishedAt":49},"01M6X5JA8S5PNGJVFW4EQY8T83","capability-management","Manage versioned Capability entities and their governed lifecycle.","https:\u002F\u002Fgithub.com\u002Fprojectious-work\u002Fprocesskit\u002Fblob\u002Fmain\u002Fsrc\u002Fcontext\u002Fskills\u002Fprocesskit\u002Fcapability-management\u002FSKILL.md",[],[94,191,192,96,97,137,99,157,42,100,138,193,101,140,103,163,143,144,194,107],"capability","capability management","queries","changes"]