[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71GMS2W1AFXA179WTVVT42K":3,"skill-same:01M71GMS2W1AFXA179WTVVT42K":70},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":30,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M71GMS2W1AFXA179WTVVT42K","backend-api-contract",null,"lookatitude\u002Fguild","lookatitude","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F524917?v=4","01M71GJ2KGXFSJZKAZC5P1ZXXM","Miguel Pinto","01M71GJ2MH4SH9WJKP8M7XZZ0P",8,"MIT","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Fbackend-api-contract\u002FSKILL.md",[17,22,27],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":28,"categoryName":29,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000037","律师与法务",[31,32,33,34,35,36],"api","backend","api contract","backend api","contract","backend api contract","2026-11-10 10:12:30",false,"---\nname: backend-api-contract\ndescription: Designs REST \u002F GraphQL \u002F RPC endpoints — routes, methods, request\u002Fresponse schemas, error envelope, auth, versioning, pagination. Output: OpenAPI\u002FGraphQL SDL fragment or a markdown spec the backend can implement against. Pulled by the `backend` specialist. TRIGGER: \"design the API for X\", \"define the endpoints for X\", \"what should the request\u002Fresponse look like for X\", \"draft the OpenAPI spec for X\", \"specify the GraphQL schema for X\", \"how should the client call X\". DO NOT TRIGGER for: DB schema \u002F tables \u002F indexes (use `backend-data-layer`), writing a migration (use `backend-migration-writer`), calling an external third-party API (use `backend-service-integration`), deciding between two API styles at architecture level (architect-tradeoff-matrix), high-level multi-service system design (architect-systems-design), auth-flow security review (security-auth-flow-review).\nwhen_to_use: The parent `backend` specialist pulls this skill when the task requires specifying the external contract of a service — what clients see, not what the DB holds. Also fires on explicit user request.\ntype: specialist\n---\n\n# backend-api-contract\n\nThe contract is the test; the implementation is green when a generated client can exercise every endpoint.\n\n## What you do\n\nProduce a precise, implementable contract for one service or one resource boundary — nothing more. The spec names every route, request shape, response shape, error envelope, auth expectation, and the versioning\u002Fpagination rules. A backend engineer should be able to start coding from it without asking a follow-up.\n\n- Use nouns in URLs; verbs are the HTTP method. `POST \u002Forders`, not `POST \u002FcreateOrder`.\n- Define the error envelope once (e.g. `{ error: { code, message, details } }`) and reuse it.\n- State auth per endpoint (public \u002F bearer \u002F service-token) and the required scope\u002Frole.\n- Pick a versioning strategy (URL `\u002Fv1\u002F`, header `Accept: application\u002Fvnd.x.v1+json`, or GraphQL schema evolution) and apply it consistently.\n- Specify pagination shape (`cursor` + `limit` preferred for lists), sorting, and filtering grammar.\n- Call out idempotency: which endpoints are safe to retry and which need an `Idempotency-Key`.\n\n## Output shape\n\nEither an OpenAPI YAML fragment, a GraphQL SDL block, or a markdown spec with these sections:\n\n1. **Scope** — resource(s) in scope; explicitly what's out.\n2. **Endpoints** — method · path · summary · auth · request · response · errors.\n3. **Schemas** — typed models for every request\u002Fresponse body.\n4. **Errors** — error envelope + code table.\n5. **Auth & versioning** — how clients authenticate, how versions evolve.\n6. **Pagination & idempotency rules**.\n\nStore at `.guild\u002Fruns\u002F\u003Crun-id>\u002Fapi\u002F\u003Cslug>.{yaml|md}` if the run is tracked.\n\n## Anti-patterns\n\n- Verbs in URLs (`\u002FcreateOrder`, `\u002FgetUser`) — use HTTP methods.\n- Missing error schema — errors are part of the contract, not an afterthought.\n- Implicit auth — \"obviously logged in\" is not a spec.\n- Breaking changes without versioning — renaming a field in v1 is a regression.\n- Unbounded list endpoints — every list must cap `limit` and require pagination past it.\n- String-typed everything — if a field is an enum, declare the enum.\n\n## Handoff\n\nReturn the spec path (or inline fragment) to the invoking `backend` specialist. If the contract implies DB work, the backend agent chains into `backend-data-layer` and `backend-migration-writer`; if it calls out to an external service, into `backend-service-integration`. This skill does not dispatch.\n","# backend-api-contract\n\nThe contract is the test; the implementation is green when a generated client can exercise every endpoint.\n\n## What you do\n\nProduce a precise, implementable contract for one service or one resource boundary — nothing more. The spec names every route, request shape, response shape, error envelope, auth expectation, and the versioning\u002Fpagination rules. A backend engineer should be able to start coding from it without asking a follow-up.\n\n- Use nouns in URLs; verbs are the HTTP method. `POST \u002Forders`, not `POST \u002FcreateOrder`.\n- Define the error envelope once (e.g. `{ error: { code, message, details } }`) and reuse it.\n- State auth per endpoint (public \u002F bearer \u002F service-token) and the required scope\u002Frole.\n- Pick a versioning strategy (URL `\u002Fv1\u002F`, header `Accept: application\u002Fvnd.x.v1+json`, or GraphQL schema evolution) and apply it consistently.\n- Specify pagination shape (`cursor` + `limit` preferred for lists), sorting, and filtering grammar.\n- Call out idempotency: which endpoints are safe to retry and which need an `Idempotency-Key`.\n\n## Output shape\n\nEither an OpenAPI YAML fragment, a GraphQL SDL block, or a markdown spec with these sections:\n\n1. **Scope** — resource(s) in scope; explicitly what's out.\n2. **Endpoints** — method · path · summary · auth · request · response · errors.\n3. **Schemas** — typed models for every request\u002Fresponse body.\n4. **Errors** — error envelope + code table.\n5. **Auth & versioning** — how clients authenticate, how versions evolve.\n6. **Pagination & idempotency rules**.\n\nStore at `.guild\u002Fruns\u002F\u003Crun-id>\u002Fapi\u002F\u003Cslug>.{yaml|md}` if the run is tracked.\n\n## Anti-patterns\n\n- Verbs in URLs (`\u002FcreateOrder`, `\u002FgetUser`) — use HTTP methods.\n- Missing error schema — errors are part of the contract, not an afterthought.\n- Implicit auth — \"obviously logged in\" is not a spec.\n- Breaking changes without versioning — renaming a field in v1 is a regression.\n- Unbounded list endpoints — every list must cap `limit` and require pagination past it.\n- String-typed everything — if a field is an enum, declare the enum.\n\n## Handoff\n\nReturn the spec path (or inline fragment) to the invoking `backend` specialist. If the contract implies DB work, the backend agent chains into `backend-data-layer` and `backend-migration-writer`; if it calls out to an external service, into `backend-service-integration`. This skill does not dispatch.\n",{},"main","2e58b0360ca51ca3c96ca8e015ef5aba5738803d","skills\u002Fspecialists\u002Fbackend-api-contract",0,"https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild","https:\u002F\u002Fgithub.com\u002Flookatitude","https:\u002F\u002Flookatitude.com","2026-11-06 03:55:18",{"source":7,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add lookatitude\u002Fguild --skill backend-api-contract",{"tool":56,"command":57},"bunx","bunx skills add lookatitude\u002Fguild --skill backend-api-contract",{"tool":59,"command":60},"pnpm","pnpm dlx skills add lookatitude\u002Fguild --skill backend-api-contract","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Fbackend-api-contract\u002FSKILL.md",true,[64],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"evals.json","REFERENCE","参考文档",676,"https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Fbackend-api-contract\u002Fevals.json",[71,83,93,104,122,133],{"skillNo":72,"name":73,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":37},"01M71GQQ1ZAND0XQBS4GTSWYFK","technical-writer-user-manual","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Ftechnical-writer-user-manual\u002FSKILL.md",[],[77,78,79,80,81,82],"writer","technical","technical writer","technical writer user manual","manual","user",{"skillNo":84,"name":85,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":37},"01M71GQMQ71DQNH4A7REXRVFCB","technical-writer-release-notes","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Ftechnical-writer-release-notes\u002FSKILL.md",[],[89,77,90,91,92,78,79],"release","notes","technical writer release notes","release notes",{"skillNo":94,"name":95,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":100,"publishedAt":37},"01M71GQJQT9G8QHE0A9SN01VE4","technical-writer-api-docs","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Ftechnical-writer-api-docs\u002FSKILL.md",[98,99],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},[101,78,79,102,103,31,77],"technical writer api docs","docs","api docs",{"skillNo":105,"name":106,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":115,"publishedAt":37},"01M71GQH3T5F23M2M298WXVAQ5","social-media-platform-post","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Fsocial-media-platform-post\u002FSKILL.md",[109,112],{"categoryNo":110,"categoryName":111,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000019","营销推广",{"categoryNo":113,"categoryName":114,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000035","市场营销",[116,117,118,119,120,121],"social media platform post","post","Media","platform","social","social media",{"skillNo":123,"name":124,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":129,"publishedAt":37},"01M71GQFS4MJ4S8ZRK7KQNNPJE","social-media-engagement-templates","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Fsocial-media-engagement-templates\u002FSKILL.md",[127,128],{"categoryNo":110,"categoryName":111,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":113,"categoryName":114,"taxonomyType":25,"taxonomyTypeDesc":26},[120,130,118,131,132,121],"engagement","social media engagement templates","templates",{"skillNo":134,"name":135,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":143,"publishedAt":37},"01M71GQEPZ5GX6NBFQ9H0W5E0C","social-media-content-calendar","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Fsocial-media-content-calendar\u002FSKILL.md",[138,139,140],{"categoryNo":110,"categoryName":111,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":113,"categoryName":114,"taxonomyType":25,"taxonomyTypeDesc":26},{"categoryNo":141,"categoryName":142,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000036","内容创作者",[144,145,120,121,146,147,118],"calendar","content calendar","social media content calendar","content"]