[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7BWF6R1FDZ67XG89GVVCESB":3,"skill-same:01M7BWF6R1FDZ67XG89GVVCESB":47},{"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":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":30,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M7BWF6R1FDZ67XG89GVVCESB","build-google-sheet",null,"Build or extend a Google Sheet that does real work: financial models, budgets, P&L and cash-flow statements, accounting ledgers and reconciliations, trackers, dashboards and data tables with formulas, number formats, validation, conditional formatting, named ranges, protection and charts, then verify it computes. Use whenever the deliverable is a spreadsheet or the user asks for changes to one. Requires google-workspace-mcp.","CognitionAI\u002Fdevin-marketplace","CognitionAI","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F163493330?v=4","01M7BVSRD98NC4FG8T3EZS6V5M","Cognition","01M7BVSRDX111C2XPWJ0E6MY26",29,"MIT","https:\u002F\u002Fgithub.com\u002FCognitionAI\u002Fdevin-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fgoogle-workspace\u002Fskills\u002Fbuild-google-sheet\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: build-google-sheet\ndescription: \"Build or extend a Google Sheet that does real work: financial models, budgets, P&L and cash-flow statements, accounting ledgers and reconciliations, trackers, dashboards and data tables with formulas, number formats, validation, conditional formatting, named ranges, protection and charts, then verify it computes. Use whenever the deliverable is a spreadsheet or the user asks for changes to one. Requires google-workspace-mcp.\"\n---\n\n# Building spreadsheets that compute\n\nA good sheet separates inputs from logic, uses formulas rather than pasted numbers, labels\nevery row, formats so numbers read at a glance, and proves itself with check rows. Devin\nbuilds it in passes, reading back after each one. Tool signatures: `google-workspace-mcp`.\n\n## Pass 0: agree the shape\n\nFor a model or statement, confirm in one message: periods (months\u002Fquarters\u002Fyears and how\nmany), currency and units, the inputs the user controls, the outputs they care about, and\nwhether existing data should be imported. Default layout for a model:\n\n- `Inputs` tab: one assumption per row (label, value, unit\u002Fnotes); the only cells a user edits.\n- One tab per statement or calculation (`P&L`, `Cash flow`, `Headcount`...): row labels in\n  column A, periods across columns, every number a formula referencing `Inputs` or the row above.\n- `Checks` rows (or tab): identities that must hold (balance sheet balances, totals match the\n  source, no negative inventory), showing `ok` \u002F `CHECK`.\n- `Data` tabs for raw imports, untouched by formulas; summaries pull from them with\n  `SUMIFS` \u002F `QUERY` \u002F `FILTER`.\n\nFor a ledger\u002Freconciliation: a transactions table with a header row, consistent columns\n(date, account, description, debit, credit, balance), the balance as a running formula, a\ntrial-balance or reconciliation tab with `SUMIFS` by account and a difference row.\n\n## Pass 1: create the workbook and tabs\n\n- New file: `create_file(name, type: \"spreadsheet\", folderId?)`, optionally with CSV `content`\n  for a first data tab. Then `read_sheet(spreadsheetId)` for the default `sheetId`.\n- Tabs: `update_spreadsheet` with `addSheet: {properties: {title, gridProperties: {rowCount,\n  columnCount, frozenRowCount: 1}}}`; rename the default tab with `updateSheetProperties`\n  (`fields: \"title\"`). The replies carry each new `sheetId`: keep them, every later grid\n  request needs them.\n- Existing workbook: `read_sheet` with no range (tabs, sizes, named ranges) and the ranges in\n  play with `valueRender: \"formula\"` before changing anything. Never overwrite a tab you have\n  not read.\n\n## Pass 2: write values and formulas\n\n`write_sheet(spreadsheetId, range: \"'Inputs'!A1\", values: [[...], ...])`: a 2-D array laid\ndown from the top-left cell. Strings that look like formulas, numbers, dates (`2027-01-01`)\nor percents (`12%`) are parsed as such; `raw: true` keeps them literal (ids, zip codes).\n\n- Write formulas as strings (`\"=Inputs!$B$2*(1+Inputs!$B$3)^(B$1-1)\"`), build the per-period\n  row in code so each column's references are right, and keep absolute references (`$B$2`) on\n  inputs. Cross-tab references use `'Tab name'!A1`.\n- Prefer one formula pattern per row over hand-typed values; prefer `SUMIFS`, `XLOOKUP`\u002F\n  `INDEX-MATCH`, `IFERROR`, `ARRAYFORMULA`, `QUERY`, `SEQUENCE`\u002F`EDATE` for period headers.\n- Appending transactions: `write_sheet(range: \"'Ledger'!A:F\", values, append: true)`.\n- Lay down labels and headers in the same write so the sheet is never half-labelled.\n\n## Pass 3: make it readable and safe (`update_spreadsheet`)\n\n| Need                                   | Request                                                                                                                                                                                   |\n| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Currency \u002F percent \u002F date formats      | `repeatCell` with `cell.userEnteredFormat.numberFormat: {type: \"CURRENCY\", pattern: \"$#,##0;($#,##0)\"}` (or `PERCENT` `0.0%`, `DATE` `mmm yyyy`), `fields: \"userEnteredFormat.numberFormat\"` |\n| Bold header, fill, borders, wrap       | `repeatCell` with `textFormat.bold`, `backgroundColor`, `horizontalAlignment`; `updateBorders`                                                                                            |\n| Freeze headers \u002F label column          | `updateSheetProperties` `gridProperties.frozenRowCount` \u002F `frozenColumnCount`                                                                                                             |\n| Column widths                          | `autoResizeDimensions` or `updateDimensionProperties` (`pixelSize`)                                                                                                                       |\n| Input cells visibly editable           | light fill on `Inputs!B` cells; `setDataValidation` (`NUMBER_BETWEEN`, `ONE_OF_LIST` for dropdowns, `DATE_IS_VALID`) with `strict: true`. `strict: true` did not stop a `write_sheet` value in testing, so add a check cell rather than rely on it for values you write |\n| Protect formula tabs                   | `addProtectedRange` with `warningOnly: true` (users get a warning, not a lock-out) on each calculation tab                                                                                |\n| Flag problems                          | `addConditionalFormatRule` (`NUMBER_LESS` 0 -> red text; `TEXT_EQ` \"CHECK\" -> red fill; `CUSTOM_FORMULA` for row-wise rules)                                                              |\n| Names for key inputs                   | `addNamedRange` (`growth_rate` = `Inputs!B3`) so formulas read `=Revenue*(1+growth_rate)`                                                                                                 |\n| Charts                                 | `addChart` with `spec.basicChart` (`COLUMN`, `LINE`, `BAR`) or `pieChart`; `domains`\u002F`series` as `sourceRange`s; position with `anchorCell`; reply has `chartId`. With row-oriented data and `headerCount: 1`, start `domains` and `series` at the label column. Starting at the first value drops that point and uses it as the legend text |\n| Totals \u002F grouping                      | `addDimensionGroup`; `autoFill`; `sortRange`; `setBasicFilter` on data tabs                                                                                                                |\n\nGrid ranges: `{sheetId, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex}`,\n0-based, end-exclusive; omit an end to run to the sheet edge (but see the `repeatCell` gotcha below). Group related requests in one\ncall per tab; the whole call fails if one request is wrong, so a failure names\n`requests[\u003Cn>]` to fix.\n\n## Pass 4: verify it computes\n\n- `read_sheet(range, valueRender: \"unformatted\")` on every output row: no `#REF!`, `#DIV\u002F0!`,\n  `#NAME?`, `#N\u002FA`; totals equal the sum of their parts; check rows say `ok`.\n- `read_sheet(range, valueRender: \"formula\")` on one column: references point where intended\n  (off-by-one columns are the common bug).\n- Recompute two or three headline numbers independently (from the inputs, in code) and compare.\n- For a rendered check, `download_file(fileId: \u003Cspreadsheet id>, exportMimeType: \"application\u002Fpdf\")` (or\n  xlsx) from `scripted_tools`.\n- Fix with `write_sheet` \u002F `update_spreadsheet` on the same file; do not create a new one.\n\n## Deliver\n\nLink, where it lives, which tab holds the inputs, and the one or two assumptions the user\nshould confirm. Mention anything imported that did not fit (unparsed dates, blank ids).\n\n## Conventions and gotchas\n\n- Displayed values are strings (`\"$100,000\"`): compare numbers with `valueRender: \"unformatted\"`.\n- Bound every `repeatCell` with `startColumnIndex` and `endColumnIndex`. A whole-row fill widens\n  the PDF print area and shrinks the tab until it is unreadable.\n- `write_sheet` cannot extend a tab beyond its `rowCount` \u002F `columnCount`: grow it first with\n  `appendDimension` or `updateSheetProperties`.\n- Tab names with spaces or symbols need quotes in A1 ranges (`'P&L'!A1:G12`).\n- `update_file content=...` replaces the whole workbook with a single CSV tab; for a workbook\n  with several tabs use `write_sheet` \u002F `update_spreadsheet`.\n- Never hard-code a computed number into a cell the user will trust as a formula; if a value\n  must be pasted (an external actual), mark the cell as an input.\n- Dates: write ISO strings and format the column with a `DATE` number format. `read_sheet`\n  returns dates as displayed strings even with `valueRender: \"unformatted\"`; `dateTimeRender:\n  \"serial\"` gives the serial day numbers for arithmetic.\n- Charts and conditional formats reference `sheetId`s; renaming a tab is safe, deleting and\n  re-adding one is not.\n","# Building spreadsheets that compute\n\nA good sheet separates inputs from logic, uses formulas rather than pasted numbers, labels\nevery row, formats so numbers read at a glance, and proves itself with check rows. Devin\nbuilds it in passes, reading back after each one. Tool signatures: `google-workspace-mcp`.\n\n## Pass 0: agree the shape\n\nFor a model or statement, confirm in one message: periods (months\u002Fquarters\u002Fyears and how\nmany), currency and units, the inputs the user controls, the outputs they care about, and\nwhether existing data should be imported. Default layout for a model:\n\n- `Inputs` tab: one assumption per row (label, value, unit\u002Fnotes); the only cells a user edits.\n- One tab per statement or calculation (`P&L`, `Cash flow`, `Headcount`...): row labels in\n  column A, periods across columns, every number a formula referencing `Inputs` or the row above.\n- `Checks` rows (or tab): identities that must hold (balance sheet balances, totals match the\n  source, no negative inventory), showing `ok` \u002F `CHECK`.\n- `Data` tabs for raw imports, untouched by formulas; summaries pull from them with\n  `SUMIFS` \u002F `QUERY` \u002F `FILTER`.\n\nFor a ledger\u002Freconciliation: a transactions table with a header row, consistent columns\n(date, account, description, debit, credit, balance), the balance as a running formula, a\ntrial-balance or reconciliation tab with `SUMIFS` by account and a difference row.\n\n## Pass 1: create the workbook and tabs\n\n- New file: `create_file(name, type: \"spreadsheet\", folderId?)`, optionally with CSV `content`\n  for a first data tab. Then `read_sheet(spreadsheetId)` for the default `sheetId`.\n- Tabs: `update_spreadsheet` with `addSheet: {properties: {title, gridProperties: {rowCount,\n  columnCount, frozenRowCount: 1}}}`; rename the default tab with `updateSheetProperties`\n  (`fields: \"title\"`). The replies carry each new `sheetId`: keep them, every later grid\n  request needs them.\n- Existing workbook: `read_sheet` with no range (tabs, sizes, named ranges) and the ranges in\n  play with `valueRender: \"formula\"` before changing anything. Never overwrite a tab you have\n  not read.\n\n## Pass 2: write values and formulas\n\n`write_sheet(spreadsheetId, range: \"'Inputs'!A1\", values: [[...], ...])`: a 2-D array laid\ndown from the top-left cell. Strings that look like formulas, numbers, dates (`2027-01-01`)\nor percents (`12%`) are parsed as such; `raw: true` keeps them literal (ids, zip codes).\n\n- Write formulas as strings (`\"=Inputs!$B$2*(1+Inputs!$B$3)^(B$1-1)\"`), build the per-period\n  row in code so each column's references are right, and keep absolute references (`$B$2`) on\n  inputs. Cross-tab references use `'Tab name'!A1`.\n- Prefer one formula pattern per row over hand-typed values; prefer `SUMIFS`, `XLOOKUP`\u002F\n  `INDEX-MATCH`, `IFERROR`, `ARRAYFORMULA`, `QUERY`, `SEQUENCE`\u002F`EDATE` for period headers.\n- Appending transactions: `write_sheet(range: \"'Ledger'!A:F\", values, append: true)`.\n- Lay down labels and headers in the same write so the sheet is never half-labelled.\n\n## Pass 3: make it readable and safe (`update_spreadsheet`)\n\n| Need                                   | Request                                                                                                                                                                                   |\n| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Currency \u002F percent \u002F date formats      | `repeatCell` with `cell.userEnteredFormat.numberFormat: {type: \"CURRENCY\", pattern: \"$#,##0;($#,##0)\"}` (or `PERCENT` `0.0%`, `DATE` `mmm yyyy`), `fields: \"userEnteredFormat.numberFormat\"` |\n| Bold header, fill, borders, wrap       | `repeatCell` with `textFormat.bold`, `backgroundColor`, `horizontalAlignment`; `updateBorders`                                                                                            |\n| Freeze headers \u002F label column          | `updateSheetProperties` `gridProperties.frozenRowCount` \u002F `frozenColumnCount`                                                                                                             |\n| Column widths                          | `autoResizeDimensions` or `updateDimensionProperties` (`pixelSize`)                                                                                                                       |\n| Input cells visibly editable           | light fill on `Inputs!B` cells; `setDataValidation` (`NUMBER_BETWEEN`, `ONE_OF_LIST` for dropdowns, `DATE_IS_VALID`) with `strict: true`. `strict: true` did not stop a `write_sheet` value in testing, so add a check cell rather than rely on it for values you write |\n| Protect formula tabs                   | `addProtectedRange` with `warningOnly: true` (users get a warning, not a lock-out) on each calculation tab                                                                                |\n| Flag problems                          | `addConditionalFormatRule` (`NUMBER_LESS` 0 -> red text; `TEXT_EQ` \"CHECK\" -> red fill; `CUSTOM_FORMULA` for row-wise rules)                                                              |\n| Names for key inputs                   | `addNamedRange` (`growth_rate` = `Inputs!B3`) so formulas read `=Revenue*(1+growth_rate)`                                                                                                 |\n| Charts                                 | `addChart` with `spec.basicChart` (`COLUMN`, `LINE`, `BAR`) or `pieChart`; `domains`\u002F`series` as `sourceRange`s; position with `anchorCell`; reply has `chartId`. With row-oriented data and `headerCount: 1`, start `domains` and `series` at the label column. Starting at the first value drops that point and uses it as the legend text |\n| Totals \u002F grouping                      | `addDimensionGroup`; `autoFill`; `sortRange`; `setBasicFilter` on data tabs                                                                                                                |\n\nGrid ranges: `{sheetId, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex}`,\n0-based, end-exclusive; omit an end to run to the sheet edge (but see the `repeatCell` gotcha below). Group related requests in one\ncall per tab; the whole call fails if one request is wrong, so a failure names\n`requests[\u003Cn>]` to fix.\n\n## Pass 4: verify it computes\n\n- `read_sheet(range, valueRender: \"unformatted\")` on every output row: no `#REF!`, `#DIV\u002F0!`,\n  `#NAME?`, `#N\u002FA`; totals equal the sum of their parts; check rows say `ok`.\n- `read_sheet(range, valueRender: \"formula\")` on one column: references point where intended\n  (off-by-one columns are the common bug).\n- Recompute two or three headline numbers independently (from the inputs, in code) and compare.\n- For a rendered check, `download_file(fileId: \u003Cspreadsheet id>, exportMimeType: \"application\u002Fpdf\")` (or\n  xlsx) from `scripted_tools`.\n- Fix with `write_sheet` \u002F `update_spreadsheet` on the same file; do not create a new one.\n\n## Deliver\n\nLink, where it lives, which tab holds the inputs, and the one or two assumptions the user\nshould confirm. Mention anything imported that did not fit (unparsed dates, blank ids).\n\n## Conventions and gotchas\n\n- Displayed values are strings (`\"$100,000\"`): compare numbers with `valueRender: \"unformatted\"`.\n- Bound every `repeatCell` with `startColumnIndex` and `endColumnIndex`. A whole-row fill widens\n  the PDF print area and shrinks the tab until it is unreadable.\n- `write_sheet` cannot extend a tab beyond its `rowCount` \u002F `columnCount`: grow it first with\n  `appendDimension` or `updateSheetProperties`.\n- Tab names with spaces or symbols need quotes in A1 ranges (`'P&L'!A1:G12`).\n- `update_file content=...` replaces the whole workbook with a single CSV tab; for a workbook\n  with several tabs use `write_sheet` \u002F `update_spreadsheet`.\n- Never hard-code a computed number into a cell the user will trust as a formula; if a value\n  must be pasted (an external actual), mark the cell as an input.\n- Dates: write ISO strings and format the column with a `DATE` number format. `read_sheet`\n  returns dates as displayed strings even with `valueRender: \"unformatted\"`; `dateTimeRender:\n  \"serial\"` gives the serial day numbers for arithmetic.\n- Charts and conditional formats reference `sheetId`s; renaming a tab is safe, deleting and\n  re-adding one is not.\n",{"name":5,"description":7},"main","9836d94e88404aabb682086405c2aa9cba7657ac","plugins\u002Fgoogle-workspace\u002Fskills\u002Fbuild-google-sheet",156,"https:\u002F\u002Fgithub.com\u002FCognitionAI\u002Fdevin-marketplace","https:\u002F\u002Fgithub.com\u002FCognitionAI","https:\u002F\u002Fcognition.ai\u002F","Makers of Devin, the AI software engineer.","2026-11-13 07:08:23",{"source":8,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add CognitionAI\u002Fdevin-marketplace --skill build-google-sheet",{"tool":39,"command":40},"bunx","bunx skills add CognitionAI\u002Fdevin-marketplace --skill build-google-sheet",{"tool":42,"command":43},"pnpm","pnpm dlx skills add CognitionAI\u002Fdevin-marketplace --skill build-google-sheet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FCognitionAI\u002Fdevin-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fgoogle-workspace\u002Fskills\u002Fbuild-google-sheet\u002FSKILL.md",true,[],[48,54,61,67,74,81],{"skillNo":49,"name":50,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":51,"categories":52,"keywords":53,"publishedAt":19},"01M7BYC4AJGM98P2G9JH7QS24Z","business-data","https:\u002F\u002Fgithub.com\u002FCognitionAI\u002Fdevin-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fwindsor-ai\u002Fskills\u002Fbusiness-data\u002FSKILL.md",[],[],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":60,"publishedAt":19},"01M7BYBZ0CD4CBCPZHRZ551BNK","workflow","Creates durable, resumable workflows using Vercel's Workflow SDK. Use when building workflows that need to survive restarts, pause for external events, retry on failure, or coordinate multi-step operations over time. Triggers on mentions of \"workflow\", \"durable functions\", \"resumable\", \"workflow sdk\", \"queue\", \"event\", \"push\", \"subscribe\", or step-based orchestration.","https:\u002F\u002Fgithub.com\u002FCognitionAI\u002Fdevin-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fworkflow\u002Fupstream\u002FSKILL.md",[],[],{"skillNo":62,"name":56,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":19},"01M7BYB1XSZHKHD8JZTQJ62JN0","Vercel Workflow SDK expert guidance. Use when building durable workflows, long-running tasks, API routes or agents that need pause\u002Fresume, retries, step-based execution, or crash-safe orchestration with Vercel Workflow.","https:\u002F\u002Fgithub.com\u002FCognitionAI\u002Fdevin-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fworkflow\u002FSKILL.md",[],[],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":19},"01M7BYASGMK935J33E21N5WTW0","verification","Full-story verification — infers what the user is building, then verifies the complete flow end-to-end: browser → API → data → response. Triggers on dev server start and 'why isn't this working' signals.","https:\u002F\u002Fgithub.com\u002FCognitionAI\u002Fdevin-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fverification\u002FSKILL.md",[],[],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":19},"01M7BY9WJERKSKEH9HK6E71GW2","vercel-storage","Vercel storage expert guidance — Blob, Global Config (formerly Edge Config), and Marketplace storage (Neon Postgres, Upstash Redis). Use when choosing, configuring, or using data storage with Vercel applications.","https:\u002F\u002Fgithub.com\u002FCognitionAI\u002Fdevin-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-storage\u002FSKILL.md",[],[],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":19},"01M7BY9N034894YV2J9DCRZHYS","vercel-services","Configure and troubleshoot Vercel Services for multiple frontends and backends in one project. Use when composing a polyglot or multi-service application on one Vercel deployment; defining the `services` key, service-targeted rewrites, or service bindings in `vercel.json`; or running all services with `vercel dev`.","https:\u002F\u002Fgithub.com\u002FCognitionAI\u002Fdevin-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-services\u002FSKILL.md",[],[]]