opencode-skills-collection 4.1.0 → 4.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/README.md +46 -42
  2. package/bundled-skills/.antigravity-install-manifest.json +127 -1
  3. package/bundled-skills/360-feedback-system/SKILL.md +481 -0
  4. package/bundled-skills/access-matrix/SKILL.md +338 -0
  5. package/bundled-skills/accounting-audit-system-builder/SKILL.md +302 -0
  6. package/bundled-skills/accounting-audit-system-builder/references/catalog.md +114 -0
  7. package/bundled-skills/accounting-software-selection/SKILL.md +427 -0
  8. package/bundled-skills/accounting-software-selection/references/build-artifacts.md +362 -0
  9. package/bundled-skills/accounting-software-selection/references/common-pitfalls.md +44 -0
  10. package/bundled-skills/accounting-software-selection/references/field-reference.md +93 -0
  11. package/bundled-skills/accounting-software-selection/references/select-options.md +202 -0
  12. package/bundled-skills/admin-access-register/SKILL.md +381 -0
  13. package/bundled-skills/advanced-analytics-dashboard/SKILL.md +318 -0
  14. package/bundled-skills/ai-image-generation-studio/SKILL.md +259 -0
  15. package/bundled-skills/ai-logo-maker/SKILL.md +259 -0
  16. package/bundled-skills/ai-multilingual-dubbing/SKILL.md +259 -0
  17. package/bundled-skills/ai-photo-restyler/SKILL.md +259 -0
  18. package/bundled-skills/ai-podcast-voiceover/SKILL.md +259 -0
  19. package/bundled-skills/alumni-re-hire-tracker/SKILL.md +314 -0
  20. package/bundled-skills/announcement-board/SKILL.md +336 -0
  21. package/bundled-skills/antigravity-maintainer-batch-release/SKILL.md +48 -3
  22. package/bundled-skills/asset-it-management/SKILL.md +407 -0
  23. package/bundled-skills/attendance/SKILL.md +331 -0
  24. package/bundled-skills/audit-log/SKILL.md +314 -0
  25. package/bundled-skills/audit-preparation/SKILL.md +416 -0
  26. package/bundled-skills/beatra/SKILL.md +260 -0
  27. package/bundled-skills/board-governance/SKILL.md +360 -0
  28. package/bundled-skills/brand-growth-system-builder/SKILL.md +360 -0
  29. package/bundled-skills/brand-kit-print-collateral/SKILL.md +498 -0
  30. package/bundled-skills/buddy-program-manager/SKILL.md +329 -0
  31. package/bundled-skills/budget-cash-flow/SKILL.md +352 -0
  32. package/bundled-skills/busabase/SKILL.md +118 -0
  33. package/bundled-skills/business-email-template/SKILL.md +480 -0
  34. package/bundled-skills/business-email-template/references/common-pitfalls.md +30 -0
  35. package/bundled-skills/business-website-setup/SKILL.md +489 -0
  36. package/bundled-skills/business-website-setup/references/common-pitfalls.md +32 -0
  37. package/bundled-skills/candidate-talent-pool/SKILL.md +359 -0
  38. package/bundled-skills/capacity-workload-planner/SKILL.md +354 -0
  39. package/bundled-skills/changelog-entry/SKILL.md +141 -0
  40. package/bundled-skills/clients-accounts/SKILL.md +398 -0
  41. package/bundled-skills/code-of-conduct/SKILL.md +488 -0
  42. package/bundled-skills/code-of-conduct/references/common-pitfalls.md +31 -0
  43. package/bundled-skills/company-email-accounts/SKILL.md +404 -0
  44. package/bundled-skills/competency-matrix/SKILL.md +335 -0
  45. package/bundled-skills/contract-document-renewal/SKILL.md +396 -0
  46. package/bundled-skills/course-upskilling-requests/SKILL.md +354 -0
  47. package/bundled-skills/credit-cycle-analysis/SKILL.md +303 -0
  48. package/bundled-skills/credit-cycle-analysis/references/best-practices.md +35 -0
  49. package/bundled-skills/credit-cycle-analysis/references/common-pitfalls.md +5 -0
  50. package/bundled-skills/credit-cycle-analysis/references/examples.md +34 -0
  51. package/bundled-skills/credit-cycle-analysis/references/field-reference.md +47 -0
  52. package/bundled-skills/credit-cycle-analysis/references/how-it-works.md +494 -0
  53. package/bundled-skills/credit-cycle-analysis/references/security-notes.md +16 -0
  54. package/bundled-skills/credit-cycle-analysis/references/select-options.md +32 -0
  55. package/bundled-skills/csv-manual-export/SKILL.md +499 -0
  56. package/bundled-skills/csv-manual-export/references/common-pitfalls.md +19 -0
  57. package/bundled-skills/culture-retention/SKILL.md +346 -0
  58. package/bundled-skills/data-export-engine/SKILL.md +308 -0
  59. package/bundled-skills/data-privacy-controls/SKILL.md +317 -0
  60. package/bundled-skills/day-book/SKILL.md +499 -0
  61. package/bundled-skills/day-book/references/best-practices.md +32 -0
  62. package/bundled-skills/day-book/references/common-pitfalls.md +58 -0
  63. package/bundled-skills/day-book/references/field-reference.md +45 -0
  64. package/bundled-skills/day-book/references/how-it-works.md +7 -0
  65. package/bundled-skills/day-book/references/related-skills.md +18 -0
  66. package/bundled-skills/day-book/references/relations.md +14 -0
  67. package/bundled-skills/day-book/references/reusable-prompt.md +50 -0
  68. package/bundled-skills/day-book/references/security-safety-notes.md +19 -0
  69. package/bundled-skills/day-book/references/select-options.md +38 -0
  70. package/bundled-skills/dei-dashboard/SKILL.md +307 -0
  71. package/bundled-skills/design-theme-guide/SKILL.md +472 -0
  72. package/bundled-skills/disciplinary-pip-tracker/SKILL.md +345 -0
  73. package/bundled-skills/document-management-system/SKILL.md +328 -0
  74. package/bundled-skills/ecommerce-listing-image-set/SKILL.md +259 -0
  75. package/bundled-skills/employee-suggestion-hub/SKILL.md +322 -0
  76. package/bundled-skills/esop-equity-tracker/SKILL.md +331 -0
  77. package/bundled-skills/events-activities/SKILL.md +355 -0
  78. package/bundled-skills/expense-accounting/SKILL.md +496 -0
  79. package/bundled-skills/expense-accounting/references/common-pitfalls.md +41 -0
  80. package/bundled-skills/expense-accounting/references/related-skills.md +11 -0
  81. package/bundled-skills/expense-accounting/references/reusable-prompt.md +36 -0
  82. package/bundled-skills/expense-management/SKILL.md +351 -0
  83. package/bundled-skills/free-design-resources/SKILL.md +480 -0
  84. package/bundled-skills/free-design-resources/references/common-pitfalls.md +44 -0
  85. package/bundled-skills/free-design-resources/references/related-skills.md +24 -0
  86. package/bundled-skills/free-design-resources/references/reusable-prompt.md +12 -0
  87. package/bundled-skills/gamification-engine/SKILL.md +307 -0
  88. package/bundled-skills/gbp-local-seo-intent/SKILL.md +466 -0
  89. package/bundled-skills/gbp-local-seo-intent/references/best-practices.md +41 -0
  90. package/bundled-skills/gbp-local-seo-intent/references/common-pitfalls.md +40 -0
  91. package/bundled-skills/gbp-local-seo-intent/references/related-skills.md +17 -0
  92. package/bundled-skills/gbp-local-seo-intent/references/reusable-prompt.md +11 -0
  93. package/bundled-skills/gbp-local-seo-intent/references/security-safety-notes.md +27 -0
  94. package/bundled-skills/health-wellness/SKILL.md +334 -0
  95. package/bundled-skills/intern-program/SKILL.md +354 -0
  96. package/bundled-skills/internal-communication/SKILL.md +318 -0
  97. package/bundled-skills/inventory-stock-reconciliation/SKILL.md +470 -0
  98. package/bundled-skills/inventory-stock-reconciliation/references/best-practices.md +18 -0
  99. package/bundled-skills/inventory-stock-reconciliation/references/common-pitfalls.md +42 -0
  100. package/bundled-skills/inventory-stock-reconciliation/references/related-skills.md +13 -0
  101. package/bundled-skills/inventory-stock-reconciliation/references/relations.md +8 -0
  102. package/bundled-skills/inventory-stock-reconciliation/references/reusable-prompt.md +31 -0
  103. package/bundled-skills/inventory-stock-reconciliation/references/security-safety-notes.md +17 -0
  104. package/bundled-skills/inventory-stock-reconciliation/references/select-options.md +45 -0
  105. package/bundled-skills/invoices-billing/SKILL.md +385 -0
  106. package/bundled-skills/issue-grievance-tracker/SKILL.md +400 -0
  107. package/bundled-skills/json-schema-manual/SKILL.md +309 -0
  108. package/bundled-skills/json-schema-manual/references/best-practices.md +9 -0
  109. package/bundled-skills/json-schema-manual/references/common-pitfalls.md +25 -0
  110. package/bundled-skills/json-schema-manual/references/input-modules.md +203 -0
  111. package/bundled-skills/json-schema-manual/references/related-skills.md +8 -0
  112. package/bundled-skills/json-schema-manual/references/reusable-prompt.md +10 -0
  113. package/bundled-skills/json-schema-manual/references/security-safety-notes.md +13 -0
  114. package/bundled-skills/knowledge-base/SKILL.md +318 -0
  115. package/bundled-skills/kpi-tracker/SKILL.md +345 -0
  116. package/bundled-skills/learning-career-development/SKILL.md +349 -0
  117. package/bundled-skills/leave-management/SKILL.md +341 -0
  118. package/bundled-skills/legal-compliance-vault/SKILL.md +324 -0
  119. package/bundled-skills/linktree-link-hub/SKILL.md +453 -0
  120. package/bundled-skills/logo-image-design/SKILL.md +459 -0
  121. package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package-lock.json +3 -3
  122. package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package.json +2 -1
  123. package/bundled-skills/mentorship-program/SKILL.md +332 -0
  124. package/bundled-skills/mirrord/SKILL.md +90 -0
  125. package/bundled-skills/monthly-closing-statements/SKILL.md +488 -0
  126. package/bundled-skills/monthly-closing-statements/references/related-skills.md +17 -0
  127. package/bundled-skills/monthly-closing-statements/references/reusable-prompt.md +8 -0
  128. package/bundled-skills/music-generation-studio/SKILL.md +259 -0
  129. package/bundled-skills/notification-reminder-hub/SKILL.md +324 -0
  130. package/bundled-skills/notion-manual-import/SKILL.md +376 -0
  131. package/bundled-skills/notion-manual-import/references/best-practices.md +10 -0
  132. package/bundled-skills/notion-manual-import/references/common-pitfalls.md +26 -0
  133. package/bundled-skills/notion-manual-import/references/input-modules.md +203 -0
  134. package/bundled-skills/notion-manual-import/references/related-skills.md +7 -0
  135. package/bundled-skills/notion-manual-import/references/reusable-prompt.md +8 -0
  136. package/bundled-skills/notion-manual-import/references/security-safety-notes.md +15 -0
  137. package/bundled-skills/observability-cloud-planning/SKILL.md +487 -0
  138. package/bundled-skills/observability-cloud-planning/references/common-pitfalls.md +39 -0
  139. package/bundled-skills/observability-cloud-planning/references/related-skills.md +20 -0
  140. package/bundled-skills/observability-cloud-planning/references/reusable-prompt.md +12 -0
  141. package/bundled-skills/observability-cloud-planning/references/security-safety-notes.md +30 -0
  142. package/bundled-skills/offboarding-exit/SKILL.md +343 -0
  143. package/bundled-skills/offer-appointment/SKILL.md +351 -0
  144. package/bundled-skills/okr-system/SKILL.md +355 -0
  145. package/bundled-skills/omentir-linkedin-outreach/SKILL.md +96 -0
  146. package/bundled-skills/onboarding-playbook/SKILL.md +292 -0
  147. package/bundled-skills/organization-design/SKILL.md +324 -0
  148. package/bundled-skills/party-ledger-reconciliation/SKILL.md +411 -0
  149. package/bundled-skills/payment-accounting/SKILL.md +421 -0
  150. package/bundled-skills/payments-received/SKILL.md +315 -0
  151. package/bundled-skills/payroll-finance/SKILL.md +351 -0
  152. package/bundled-skills/people-directory/SKILL.md +459 -0
  153. package/bundled-skills/performance-management/SKILL.md +367 -0
  154. package/bundled-skills/petty-cash-management/SKILL.md +448 -0
  155. package/bundled-skills/policy-acknowledgement/SKILL.md +314 -0
  156. package/bundled-skills/policy-library/SKILL.md +327 -0
  157. package/bundled-skills/poster-design-studio/SKILL.md +259 -0
  158. package/bundled-skills/pre-boarding/SKILL.md +326 -0
  159. package/bundled-skills/presentation-deck/SKILL.md +491 -0
  160. package/bundled-skills/presentation-deck/references/related-skills.md +19 -0
  161. package/bundled-skills/presentation-deck/references/reusable-prompt.md +11 -0
  162. package/bundled-skills/probation-tracker/SKILL.md +347 -0
  163. package/bundled-skills/product-photo-studio/SKILL.md +259 -0
  164. package/bundled-skills/project-based-performance/SKILL.md +323 -0
  165. package/bundled-skills/projects-work-management/SKILL.md +368 -0
  166. package/bundled-skills/promotion-upgrade-requests/SKILL.md +377 -0
  167. package/bundled-skills/purchase-accounting/SKILL.md +414 -0
  168. package/bundled-skills/receipt-accounting/SKILL.md +424 -0
  169. package/bundled-skills/recognition-rewards/SKILL.md +324 -0
  170. package/bundled-skills/recruitment-pipeline/SKILL.md +399 -0
  171. package/bundled-skills/remote-work-tracker/SKILL.md +306 -0
  172. package/bundled-skills/reports-analytics/SKILL.md +320 -0
  173. package/bundled-skills/salary-benchmarking/SKILL.md +318 -0
  174. package/bundled-skills/salary-wage-accounting/SKILL.md +412 -0
  175. package/bundled-skills/sales-accounting/SKILL.md +494 -0
  176. package/bundled-skills/sales-accounting/references/common-pitfalls.md +28 -0
  177. package/bundled-skills/sales-accounting/references/related-skills.md +13 -0
  178. package/bundled-skills/sales-accounting/references/reusable-prompt.md +8 -0
  179. package/bundled-skills/seo-directory-backlinks/SKILL.md +484 -0
  180. package/bundled-skills/seo-directory-backlinks/references/common-pitfalls.md +36 -0
  181. package/bundled-skills/seo-directory-backlinks/references/related-skills.md +15 -0
  182. package/bundled-skills/seo-directory-backlinks/references/reusable-prompt.md +11 -0
  183. package/bundled-skills/since-cutoff/SKILL.md +68 -0
  184. package/bundled-skills/skill-gap-analysis/SKILL.md +338 -0
  185. package/bundled-skills/social-media-setup/SKILL.md +477 -0
  186. package/bundled-skills/social-media-setup/references/common-pitfalls.md +34 -0
  187. package/bundled-skills/social-media-setup/references/related-skills.md +19 -0
  188. package/bundled-skills/social-media-setup/references/reusable-prompt.md +11 -0
  189. package/bundled-skills/social-media-setup/references/security-safety-notes.md +27 -0
  190. package/bundled-skills/sop-company-wiki/SKILL.md +324 -0
  191. package/bundled-skills/source-document-filing/SKILL.md +368 -0
  192. package/bundled-skills/spreadsheet-manual-build/SKILL.md +493 -0
  193. package/bundled-skills/spreadsheet-manual-build/references/best-practices.md +9 -0
  194. package/bundled-skills/spreadsheet-manual-build/references/common-pitfalls.md +22 -0
  195. package/bundled-skills/spreadsheet-manual-build/references/related-skills.md +8 -0
  196. package/bundled-skills/spreadsheet-manual-build/references/reusable-prompt.md +9 -0
  197. package/bundled-skills/spreadsheet-manual-build/references/security-safety-notes.md +16 -0
  198. package/bundled-skills/stakeholder-investor-reports/SKILL.md +303 -0
  199. package/bundled-skills/suno-lyrics-to-song/SKILL.md +259 -0
  200. package/bundled-skills/talking-avatar-video/SKILL.md +260 -0
  201. package/bundled-skills/tax-register/SKILL.md +363 -0
  202. package/bundled-skills/tds-booking-payment/SKILL.md +405 -0
  203. package/bundled-skills/team-calendar/SKILL.md +312 -0
  204. package/bundled-skills/telegram/assets/boilerplate/nodejs/package-lock.json +3 -3
  205. package/bundled-skills/telegram/assets/boilerplate/nodejs/package.json +1 -0
  206. package/bundled-skills/template-library/SKILL.md +304 -0
  207. package/bundled-skills/time-tracking/SKILL.md +353 -0
  208. package/bundled-skills/vendor-contractor-management/SKILL.md +327 -0
  209. package/bundled-skills/viral-video-teardown-remake/SKILL.md +260 -0
  210. package/bundled-skills/voice-cloning-studio/SKILL.md +260 -0
  211. package/bundled-skills/voiceover-narration-studio/SKILL.md +259 -0
  212. package/bundled-skills/whatsapp-cloud-api/assets/boilerplate/nodejs/package-lock.json +3 -3
  213. package/bundled-skills/whatsapp-cloud-api/assets/boilerplate/nodejs/package.json +1 -0
  214. package/dist/skill-pointer/index.d.ts +2 -1
  215. package/dist/skill-pointer/index.js +2 -1
  216. package/dist/skill-pointer/pointer-generator.d.ts +4 -2
  217. package/dist/skill-pointer/pointer-generator.js +4 -2
  218. package/package.json +1 -1
  219. package/skills_index.json +4312 -0
@@ -0,0 +1,484 @@
1
+ ---
2
+ name: seo-directory-backlinks
3
+ description: 'Directory and backlink register: platform, domain, target URL, follow attribute, authority and spam scores, approval and NAP-match status. Use for SEO citation tracking.'
4
+ category: business
5
+ risk: safe
6
+ source: self
7
+ source_type: self
8
+ date_added: "2026-09-27"
9
+ author: WHOISABHISHEKADHIKARI
10
+ tags: [sme, seo, backlinks, citations, directories, local-seo, nap-consistency, link-building, spam, digital-pr, csv, sql, notion]
11
+ tools: []
12
+ source_repo: WHOISABHISHEKADHIKARI/sme-ops-system-builder
13
+ ---
14
+
15
+ # SEO Directories & Backlinks
16
+
17
+ **What it is:** the off-site citation and link plan - which directory or platform the
18
+ business belongs on, whether the listing is real and consistent, what the link is worth,
19
+ and which submissions to refuse.
20
+
21
+ ## Overview
22
+
23
+ Works out the smallest useful citation plan for the business in front of it, then builds
24
+ it only when asked. The default output is a short recommendation, not a submission list.
25
+ The citation tracker - CSV, SQL DDL, JSON Schema, Notion mapping - is produced on request,
26
+ from one field list so the four cannot drift apart.
27
+
28
+ Layer: Layer 3: Acquire. Fits: Growth stage. Table code: n/a.
29
+
30
+ **The rule this table exists to enforce:** a directory is a *citation*, and a citation is
31
+ only correct if it matches. `NAP Match` is therefore a control field with three values,
32
+ not a note, and a citation whose NAP does not match is a defect to fix rather than a
33
+ backlink to keep. Alongside it, `Approval Days` and `Link Type` are recorded because a
34
+ listing that was never approved and a nofollow link are two different facts, and a tracker
35
+ that cannot distinguish them reports success it did not get.
36
+
37
+ **The second rule:** the highest-value links are almost never directories. Chamber of
38
+ commerce, council directory, trade association, an industry blog and one genuine local
39
+ press mention beat two hundred generic submissions. `Tier` exists so the plan spends its
40
+ effort at the top.
41
+
42
+ ## When to Use This Skill
43
+
44
+ - where to list my business, business directories, citations
45
+ - backlinks, link building, off-page SEO
46
+ - NAP consistency, citation building, local citations
47
+ - "why is a competitor ranking and we are not"
48
+ - Industry and vertical directories for a specific sector
49
+ - refusing or auditing a list of "free high DA" submissions
50
+ - link profile, referring domains, anchor text, lost links
51
+
52
+ Do not use it for: the website's own structure (`business-website-setup`), the map profile
53
+ (`gbp-local-seo-intent`), paid advertising, or content marketing and guest posting, which
54
+ are editorial decisions rather than directory submissions.
55
+
56
+ ## How It Works
57
+
58
+ Follow the shared execution contract. The module-specific rules below define only domain fields, decisions, calculations, and safety constraints.
59
+
60
+ ### Step 1 - Identify intent
61
+
62
+ Read the request and pick the intent before asking anything.
63
+
64
+ - "where should we list" / "set up" / "build" -> artifacts wanted; go to Step 2.
65
+ - "review this list someone sent us" -> an audit of a supplied list; go to Step 2 and then
66
+ the vetting step.
67
+ - "our rankings dropped" / "fix" -> something was done; capture what, then Step 2.
68
+ - "audit" / "check" -> a check, not a build.
69
+
70
+ Ask only if this is the highest-value missing fact; otherwise proceed without an opener:
71
+
72
+ > **Q:** What is the business called, and what does one line of it actually do?
73
+
74
+ ### Step 2 - Ask only what is missing
75
+
76
+ Treat ambiguous replies as unanswered and ask which explicit option the user means. Record unknown values as `Unknown`; `Unknown` is not zero. A record must not be `Done` when a required check fails.
77
+
78
+ Skip anything already answered. Ask the rest one at a time, and stop as soon as the
79
+ remaining answers would not change the directory list.
80
+
81
+ - **Business** - Industry and sector, in the words a customer would use? / One location or
82
+ several? / Customers visit, or is it service-area?
83
+ - **Current** - Is the business already listed anywhere? / How many listings roughly? / Who
84
+ created them, and is there an account the business still controls?
85
+ - **Goal** - What is the aim - more calls, more enquiries, more site traffic, or visibility
86
+ in one specific market? / Is there a market or a country in scope?
87
+ - **Capacity** - How much time is there to spend on this per month? / Is anyone paid to do
88
+ it, or is it the founder on a Sunday?
89
+ - **Risk** - Has anyone offered paid placement, a "dofollow network" or a reciprocal-link
90
+ deal? / Has the site ever received a manual action or an algorithmic drop?
91
+
92
+ Never invent an answer. Domains, DR or DA scores, spam scores, approval times, listing
93
+ URLs, referring domain counts and rankings the user has not supplied or measured are
94
+ `Unknown`. A DA score is a third-party estimate, and it is never invented here.
95
+
96
+ ### Step 3 - Hold the internal context
97
+
98
+ ```yaml
99
+ module: seo-directory-backlinks
100
+ intent: null # set up | fix | review | report | import
101
+ scale: null # Starter | Growth | Scale, only if the answer changes it
102
+ areas:
103
+ "Business": null
104
+ "Current": null
105
+ "Goal": null
106
+ "Capacity": null
107
+ "Risk": null
108
+ requested_outputs: []
109
+ confirmed_facts: []
110
+ open_questions: []
111
+ ```
112
+
113
+ ### Step 4 - Recommend the smallest workflow
114
+
115
+ Build an already requested artifact without asking again. For advice-only requests, give a short recommendation and offer the relevant artifact.
116
+
117
+ **Recommended approach:** Fifteen to twenty real listings, not two hundred. Tier 0 the two
118
+ map platforms the business is eligible for, Tier 1 the high-authority review platforms and
119
+ the professional profile that fit the sector, then the genuinely local sources - chamber of
120
+ commerce, council directory, trade association, one industry blog, and one local press
121
+ angle. Everything submitted in one sitting, from one canonical NAP block, and re-checked
122
+ quarterly. Two or three vertical directories, no link networks.
123
+
124
+ **Why this one:** Fifteen real listings are a citation set Google can read and customers can
125
+ use. Two hundred junk listings are a footprint across domains Google has publicly actioned,
126
+ and a small local business cannot afford that risk for a marginal gain. The genuinely local
127
+ links are also the ones competitors skip, so the effort goes further there than on a
128
+ national directory.
129
+
130
+ **Workflow:** Canonical NAP block written once → Tier 0 platforms claimed → Tier 1 review
131
+ and professional profiles completed → Local chamber, council and trade association joined
132
+ → Two or three vertical directories chosen by relevance → Tracking row created for each
133
+ with a review date → Quarterly re-check scheduled → Referring domains and anchor text
134
+ reviewed once a quarter → Anything with a mismatched NAP corrected or removed
135
+
136
+ ### Step 5 - Build only on request
137
+
138
+ Once the user asks for it, derive the fields from the confirmed context and emit the
139
+ requested artifacts. For machine-readable text, keep prose outside the data; for files,
140
+ provide a usable link. Report material validation failures or limitations separately.
141
+
142
+ **A selected Notion output is rendered by `notion-manual-import`, so route the
143
+ Notion step there.** When the user selects Notion, hand that step to
144
+ @notion-manual-import: it holds the CSV, the property
145
+ mapping, the import steps and the verification checklist, and it renders the Field
146
+ Reference below instead of defining a table of its own. Do not restate the mapping
147
+ here and do not improvise the import steps. Manual CSV and mapping outputs need no
148
+ connection. For requested workspace changes, follow the shared contract: verify actual
149
+ tool access and the target before writing. A user saying "connected" is not tool evidence.
150
+ Never ask for a Notion password or token.
151
+
152
+ ```csv
153
+ Citation ID,Platform Name,Domain,Tier,Category,Directory Type,Target URL,Link Type,Follow Attribute,Domain Authority,Domain Rating,Spam Score,Listing Status,Submitted Date,Approved Date,Approval Days,NAP Match,Referral Traffic,Review Date,Owner,Status,Notes
154
+ ,Example Chamber of Commerce,examplechamber.org,Tier 1,Local chamber of commerce,Member directory,https://example.com/,Homepage,Nofollow,Unknown,Unknown,Unknown,Approved,2026-09-27,2026-10-02,5,Match,Unknown,2026-12-27,Unknown,Draft,Example row - replace every value before use.
155
+ ```
156
+
157
+ ```sql
158
+ -- Engine assumption: PostgreSQL. For another engine use the engine's auto-increment
159
+ -- equivalent and keep the rest portable.
160
+ CREATE TABLE seo_citation (
161
+ citation_id BIGINT PRIMARY KEY,
162
+ platform_name VARCHAR(255) NOT NULL,
163
+ domain VARCHAR(255),
164
+ tier VARCHAR(50) NOT NULL,
165
+ category VARCHAR(100) NOT NULL,
166
+ directory_type VARCHAR(100) NOT NULL,
167
+ target_url TEXT,
168
+ link_type VARCHAR(50) NOT NULL,
169
+ follow_attribute VARCHAR(50) NOT NULL,
170
+ domain_authority VARCHAR(50),
171
+ domain_rating VARCHAR(50),
172
+ spam_score VARCHAR(50),
173
+ listing_status VARCHAR(50) NOT NULL,
174
+ submitted_date DATE,
175
+ approved_date DATE,
176
+ approval_days INTEGER,
177
+ nap_match VARCHAR(50) NOT NULL,
178
+ referral_traffic VARCHAR(50),
179
+ review_date DATE,
180
+ owner VARCHAR(255),
181
+ status VARCHAR(50) NOT NULL,
182
+ notes TEXT,
183
+ created_at TIMESTAMP DEFAULT NOW(),
184
+ updated_at TIMESTAMP DEFAULT NOW(),
185
+ CONSTRAINT seo_citation_tier CHECK (tier IN ('Tier 0','Tier 1','Tier 2','Tier 3','Tier 4','Tier 5','Tier 6','Tier 7','Refused')),
186
+ CONSTRAINT seo_citation_link_type CHECK (link_type IN ('Dofollow','Nofollow','Redirect','JavaScript','No link','Unknown')),
187
+ CONSTRAINT seo_citation_nap_match CHECK (nap_match IN ('Match','Mismatch','Unknown','Not applicable')),
188
+ CONSTRAINT seo_citation_listing_status CHECK (listing_status IN ('Not started','Submitted','Pending review','Approved','Rejected','Removed','Superseded')),
189
+ CONSTRAINT seo_citation_approval_days CHECK (approval_days IS NULL OR approval_days >= 0),
190
+ CONSTRAINT seo_citation_approved_after_submitted CHECK (approved_date IS NULL OR submitted_date IS NULL OR approved_date >= submitted_date)
191
+ );
192
+
193
+ CREATE INDEX idx_seo_citation_status ON seo_citation (status);
194
+ CREATE INDEX idx_seo_citation_tier ON seo_citation (tier);
195
+ CREATE INDEX idx_seo_citation_nap ON seo_citation (nap_match);
196
+ ```
197
+
198
+ ```json
199
+ {
200
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
201
+ "title": "SEO Directories & Backlinks",
202
+ "type": "object",
203
+ "additionalProperties": false,
204
+ "properties": {
205
+ "Citation ID": { "type": "integer" },
206
+ "Platform Name": { "type": "string" },
207
+ "Domain": { "type": "string" },
208
+ "Tier": { "type": "string" },
209
+ "Category": { "type": "string" },
210
+ "Directory Type": { "type": "string" },
211
+ "Target URL": { "type": "string", "format": "uri" },
212
+ "Link Type": { "type": "string" },
213
+ "Follow Attribute": { "type": "string" },
214
+ "Domain Authority": { "type": "string" },
215
+ "Domain Rating": { "type": "string" },
216
+ "Spam Score": { "type": "string" },
217
+ "Listing Status": { "type": "string" },
218
+ "Submitted Date": { "type": "string", "format": "date" },
219
+ "Approved Date": { "type": "string", "format": "date" },
220
+ "Approval Days": { "type": "integer" },
221
+ "NAP Match": { "type": "string" },
222
+ "Referral Traffic": { "type": "string" },
223
+ "Review Date": { "type": "string", "format": "date" },
224
+ "Owner": { "type": "string" },
225
+ "Status": { "type": "string" },
226
+ "Notes": { "type": "string" }
227
+ },
228
+ "required": [
229
+ "Platform Name",
230
+ "Tier",
231
+ "Category",
232
+ "Directory Type",
233
+ "Link Type",
234
+ "Follow Attribute",
235
+ "Listing Status",
236
+ "NAP Match",
237
+ "Status"
238
+ ]
239
+ }
240
+ ```
241
+
242
+ ```markdown
243
+ | CSV column | Notion property | Set after import |
244
+ |---|---|---|
245
+ | Citation ID | Text (preserve source ID) | Keep imported IDs as Text; optionally add a separate Unique ID property |
246
+ | Platform Name | Title | Use as the database title |
247
+ | Domain | Text | Leave as Text. The directory's own domain, not the business's |
248
+ | Tier | Select (add options after import) | Convert to Select, add options: "Tier 0", "Tier 1", "Tier 2", "Tier 3", "Tier 4", "Tier 5", "Tier 6", "Tier 7", "Refused" |
249
+ | Category | Text | Leave as Text. Sector or vertical, in customer words |
250
+ | Directory Type | Select (add options after import) | Convert to Select, add options: "Map platform", "Review platform", "Professional profile", "Company profile", "Local body", "Government register", "Industry directory", "Niche directory", "Document sharing", "Bookmarking", "Q&A and forum", "Classifieds", "Link hub", "News service", "Guest post", "Paid placement", "Link network" |
251
+ | Target URL | URL | Convert to URL. The exact page that carries the link, not just the domain |
252
+ | Link Type | Select (add options after import) | Convert to Select, add options: "Dofollow", "Nofollow", "Redirect", "JavaScript", "No link", "Unknown" |
253
+ | Follow Attribute | Select (add options after import) | Convert to Select, add options: "Follow", "Nofollow", "Sponsored", "UGC", "Unknown" |
254
+ | Domain Authority | Text | Leave as Text. Record the value and the tool and the date in Notes. Never invent it |
255
+ | Domain Rating | Text | Leave as Text. Same rule. DR and DA are different third-party estimates, not interchangeable |
256
+ | Spam Score | Text | Leave as Text. Percentage as the tool reports it, with the tool named in Notes |
257
+ | Listing Status | Select (add options after import) | Convert to Select, add options: "Not started", "Submitted", "Pending review", "Approved", "Rejected", "Removed", "Superseded" |
258
+ | Submitted Date | Date | Convert to Date |
259
+ | Approved Date | Date | Convert to Date |
260
+ | Approval Days | Number | Convert to Number, digits only. Derived from the two dates above, entered to keep the control visible |
261
+ | NAP Match | Select (add options after import) | Convert to Select, add options: "Match", "Mismatch", "Unknown", "Not applicable" |
262
+ | Referral Traffic | Text | Leave as Text. "Unknown" until measured in analytics. Never estimate it |
263
+ | Review Date | Date | Convert to Date. The next quarterly check |
264
+ | Owner | Text | Leave as Text |
265
+ | Status | Select (add options after import) | Convert to Select, add options: "Planned", "In progress", "Live", "Needs Review", "Retired" |
266
+ | Notes | Text | Leave as Text. The vetting note - what the directory is, and why it is or is not worth it |
267
+ ```
268
+
269
+ The rows above are documentation examples only. Emit empty templates unless the user explicitly requests examples. Every third-party metric is `Unknown` because
270
+ this skill cannot measure it and must never estimate it.
271
+
272
+ ## Field Reference
273
+
274
+ | # | Field | Type | SQL | JSON Schema | Notion | CSV example |
275
+ |---:|---|---|---|---|---|---|
276
+ | 1 | Citation ID | `id` | `BIGINT PRIMARY KEY` | `integer` | Text or Notion auto-ID | `(blank)` |
277
+ | 2 | Platform Name | `text` | `VARCHAR(255)` | `string` | Text | *(blank)* |
278
+ | 3 | Domain | `text` | `VARCHAR(255)` | `string` | Text | *(blank)* |
279
+ | 4 | Tier | `select` | `VARCHAR(50)` | `string` | Select | `Tier 1` |
280
+ | 5 | Category | `text` | `VARCHAR(100)` | `string` | Text | *(blank)* |
281
+ | 6 | Directory Type | `select` | `VARCHAR(100)` | `string` | Select | `Member directory` |
282
+ | 7 | Target URL | `url` | `TEXT` | `string, format: uri` | URL | *(blank)* |
283
+ | 8 | Link Type | `select` | `VARCHAR(50)` | `string` | Select | `Nofollow` |
284
+ | 9 | Follow Attribute | `select` | `VARCHAR(50)` | `string` | Select | `Nofollow` |
285
+ | 10 | Domain Authority | `text` | `VARCHAR(50)` | `string` | Text | `Unknown` |
286
+ | 11 | Domain Rating | `text` | `VARCHAR(50)` | `string` | Text | `Unknown` |
287
+ | 12 | Spam Score | `text` | `VARCHAR(50)` | `string` | Text | `Unknown` |
288
+ | 13 | Listing Status | `select` | `VARCHAR(50)` | `string` | Select | `Approved` |
289
+ | 14 | Submitted Date | `date` | `DATE` | `string, format: date` | Date | *(blank)* |
290
+ | 15 | Approved Date | `date` | `DATE` | `string, format: date` | Date | *(blank)* |
291
+ | 16 | Approval Days | `number` | `INTEGER` | `integer` | Number | `5` |
292
+ | 17 | NAP Match | `select` | `VARCHAR(50)` | `string` | Select | `Match` |
293
+ | 18 | Referral Traffic | `text` | `VARCHAR(50)` | `string` | Text | `Unknown` |
294
+ | 19 | Review Date | `date` | `DATE` | `string, format: date` | Date | *(blank)* |
295
+ | 20 | Owner | `text` | `VARCHAR(255)` | `string` | Text | `Unknown` |
296
+ | 21 | Status | `select` | `VARCHAR(50)` | `string` | Select | `Draft` |
297
+ | 22 | Notes | `long_text` | `TEXT` | `string` | Text | *(blank)* |
298
+
299
+ ## Select Options
300
+
301
+ **Tier** - the value that decides where the effort goes. `Refused` is a first-class tier,
302
+ because recording a platform the business deliberately rejected is how it stays rejected.
303
+ Full tier contents: `../../references/backlink-directory-master-list.md`.
304
+
305
+ ```
306
+ Tier 0 | Tier 1 | Tier 2 | Tier 3 | Tier 4 | Tier 5 | Tier 6 | Tier 7 | Refused
307
+ ```
308
+
309
+ **Directory Type** - a starting set, and the column that catches a link network. Anything
310
+ `Link network` is a `Refused` row.
311
+
312
+ ```
313
+ Map platform | Review platform | Professional profile | Company profile | Local body | Government register | Industry directory | Niche directory | Document sharing | Bookmarking | Q&A and forum | Classifieds | Link hub | News service | Guest post | Paid placement | Link network
314
+ ```
315
+
316
+ **Link Type** vs **Follow Attribute** - two columns, not one, because a redirect carries no
317
+ rel attribute at all. Collapsing them loses the distinction between "no link" and "a
318
+ noindexed link".
319
+
320
+ ```
321
+ Link Type: Dofollow | Nofollow | Redirect | JavaScript | No link | Unknown
322
+ Follow Attribute: Follow | Nofollow | Sponsored | UGC | Unknown
323
+ ```
324
+
325
+ **Listing Status** - `Superseded` is for the case where a business moved location or
326
+ renamed and the old listing still exists somewhere. It is a real and common state.
327
+
328
+ ```
329
+ Not started | Submitted | Pending review | Approved | Rejected | Removed | Superseded
330
+ ```
331
+
332
+ **NAP Match** - the control. `Mismatch` means fix or remove; it never means "leave it, the
333
+ link is still a link".
334
+
335
+ ```
336
+ Match | Mismatch | Unknown | Not applicable
337
+ ```
338
+
339
+ **Status**
340
+
341
+ ```
342
+ Planned | In progress | Live | Needs Review | Retired
343
+ ```
344
+
345
+ ## Relations
346
+
347
+ Two natural links, both worth confirming before making them live:
348
+
349
+ - `Target URL` points at a page in `business-website-setup`. The URL text is the reliable
350
+ key across packs; confirm whether the business wants a live join.
351
+ - `Owner` points at the people register in the operational pack, which is not in this
352
+ artifact set. It stays Text with a note naming the intended target.
353
+
354
+ ## Examples
355
+
356
+ **Prompt**
357
+
358
+ ```
359
+ Someone sent us a list of 165 free high-DA directories. Some of them want a keyword field
360
+ and ask for a reciprocal link. Should we do them all?
361
+ ```
362
+
363
+ **Context first** - one question per message, nothing already answered:
364
+
365
+ > **Q:** What is the business called, and what does one line of it actually do?
366
+ > **A:** Example Retail, home and kitchen goods in Example City.
367
+ >
368
+ > **Q:** Are you already listed anywhere - how many places roughly?
369
+ > **A:** Google, and maybe four or five others from years ago. Nobody checks them.
370
+ >
371
+ > **Q:** What is the aim - more calls, more site traffic, or visibility somewhere specific?
372
+ > **A:** More calls from people nearby.
373
+ >
374
+ > **Q:** How much time is there per month for this?
375
+ > **A:** Maybe an hour, on a Sunday.
376
+ >
377
+ > **Q:** Has anyone offered paid placement or a "dofollow network"?
378
+ > **A:** Yes, an email about a monthly plan. It was not cheap.
379
+
380
+ **Recommended next step** - offered, not built:
381
+
382
+ > Not the 165. Skip anything asking for a reciprocal link, a keyword field or payment, and
383
+ > record them as `Refused` so they stay refused. Do about fifteen real ones instead: Google
384
+ > and Bing and Apple Maps, the two review platforms your sector actually uses, the chamber
385
+ > of commerce and the council directory, the trade association, two vertical directories
386
+ > that a kitchen-shop customer would search, and one local press angle. One canonical NAP
387
+ > block, pasted everywhere, re-checked quarterly. That is the highest-value fifteen
388
+ > available, and an hour a month is enough to keep them.
389
+ >
390
+ > Workflow: Canonical NAP block written once → Tier 0 platforms claimed → Tier 1 review and
391
+ > professional profiles completed → Local chamber, council and trade association joined →
392
+ > Vertical directories chosen by relevance → Tracking row created for each with a review
393
+ > date → Quarterly re-check scheduled
394
+ >
395
+ > Want the CSV, SQL DDL, JSON Schema and Notion mapping for this?
396
+
397
+ ## Best Practices
398
+
399
+ - Build when requested; recommend and offer a build for advice-only requests.
400
+ - One question per message. A batched intake reads as a form and gets guessed at.
401
+ - Relevance beats authority. A listing in the trade's own directory is worth more than a
402
+ higher-authority general one, because it is the directory the customer searches.
403
+ - Write the canonical NAP once, as plain text, and paste it. Never retype it, never
404
+ "improve" it, never reformat the address per platform's suggestion.
405
+ - Vet before submitting: check the domain's authority and referring domains, check whether
406
+ its competitors are listed for real, and check whether approval is instant. Instant
407
+ approval means no review, and no review means no value.
408
+ - Refuse a reciprocal-link requirement. That is a link scheme, and it is explicitly against
409
+ Google's link spam policies.
410
+ - Refuse any platform that asks for a keyword in the business name. It violates Google's
411
+ business name policy and can cost the profile, not just the listing.
412
+ - Fifteen good listings beat two hundred poor ones, and the poor ones carry risk. This is
413
+ the whole argument of this module.
414
+ - Do the genuinely local ones: chamber of commerce, council or city directory, trade
415
+ association, local award or scheme. They are free or cheap, competitors skip them, and
416
+ they are the links a local business actually needs.
417
+ - Record the tool, the value and the date next to every DR, DA and spam score. Those
418
+ numbers change, and a number without a date is not evidence.
419
+ - `NAP Match` is checked by eye against the canonical block, not trusted. Directories
420
+ silently reformat, truncate or re-capitalise addresses.
421
+ - One target URL per listing, pointing at the most relevant page - not the homepage
422
+ everywhere.
423
+ - Never buy a link or a placement that is really a link. A sponsored or paid placement must
424
+ be marked as such; an unmarked one is a violation whichever way the money moved.
425
+ - Never fabricate a listing. A false address, a false phone number or a fake business
426
+ description on a directory is a false statement to that platform and can be removed and
427
+ reported.
428
+ - Review the referring domains and anchor text once a quarter. If every new link uses the
429
+ same anchor text, that pattern is a problem, not a strategy.
430
+ - Re-check the top ten listings quarterly. Directories decay, get re-categorised and get
431
+ deleted silently.
432
+ - Derive all four artifacts from the field list in this file, never by hand.
433
+ - If the user requests an example row, keep it obviously fake so nobody imports it as a real citation.
434
+
435
+ ## Limitations
436
+
437
+ - This is a tracker. It does not submit anything, create any account, or build any link.
438
+ - It does not measure authority. `Domain Authority`, `Domain Rating` and `Spam Score` are
439
+ third-party estimates from named tools, they change over time, and DA and DR are not the
440
+ same metric. This skill never produces them and never presents one as a fact.
441
+ - It has no access to the business's Search Console, a link index, a rank tracker or its
442
+ analytics, so it cannot see the actual link profile or the referral traffic.
443
+ - It cannot judge a directory's quality definitively. The four checks narrow the field;
444
+ the final judgement is the business's.
445
+ - Referral traffic and ranking effects are measured after the fact, over months, and are
446
+ confounded by everything else changing at the same time. This skill must not attribute
447
+ a movement in rank to a listing.
448
+ - Paid placements, guest posts, PR and content marketing are editorial and commercial
449
+ decisions that need a budget, a brief and a human. They are recorded here, not advised on.
450
+ - Countries differ in which directories matter. The list in the reference file is
451
+ international; the business's own market has to be confirmed before it is used.
452
+ - Competitor link analysis, disavow files and manual-action appeals are specialist work and
453
+ not modelled here.
454
+ - A link network's downside is a manual action or a demotion that may surface months later
455
+ and cannot be predicted. This skill can identify the risk; only the business can accept
456
+ it.
457
+
458
+ ## Security & Safety Notes
459
+
460
+ - Never invent a domain, a listing URL, a DR, a DA, a spam score, an approval time, a
461
+ referral figure or a ranking position. `Unknown` and blank are correct.
462
+ - Directory submissions place the business's NAP, phone and sometimes a logo into a
463
+ third-party system the business does not control. Confirm with the owner before
464
+ publishing personal contact details widely.
465
+ - Never submit a listing to a platform the business has not decided to be listed on.
466
+ Creating a profile that is then abandoned is worse than not having one, because it is a
467
+ listing with stale information.
468
+ - Never provide a false address, a virtual address, a false phone number or a fabricated
469
+ business description to a directory. It is a false statement, it is removable, and it can
470
+ be reported.
471
+ - Do not put login credentials, an account password or a two-factor code into this table or
472
+ into a shared document. A directory account is a real account with a real login.
473
+ - Purchased links may breach both a search engine's policies and, in some jurisdictions, a
474
+ contract. Flag it once, clearly, and leave the decision with the business.
475
+ - Business directories processing personal data are subject to data-protection law. The
476
+ business is the controller for the data it publishes, and it should know which platforms
477
+ it has published an address and phone number to.
478
+ - Local reads, generation commands, and validation are part of a requested artifact build.
479
+ External writes, messages, provisioning, and publication require authorization for that
480
+ action and target; existing explicit authorization does not need to be repeated.
481
+
482
+
483
+ See the [Common Pitfalls](references/common-pitfalls.md) reference for the full guidance.
484
+
@@ -0,0 +1,36 @@
1
+ # Common Pitfalls
2
+
3
+ - **Problem:** a static mapping is described as a completed workspace build.
4
+ **Solution:** deliver manual mappings without a connection; claim a live change only
5
+ after the authorized tool operation succeeds.
6
+ - **Problem:** asked all five questions in one message.
7
+ **Solution:** ask one, wait, and drop any the first answer already covered.
8
+ - **Problem:** 165 submissions in one weekend, paid for in two of them.
9
+ **Solution:** that is a link footprint, not a citation strategy. Refuse the paid and the
10
+ reciprocal ones, and record all 165 as `Refused` so nobody re-sends the list.
11
+ - **Problem:** a directory demanded a keyword in the business name and it was typed in.
12
+ **Solution:** fix it now, on every platform, and record `Mismatch`. The keyword does not
13
+ go in the name.
14
+ - **Problem:** the address is formatted differently on four directories.
15
+ **Solution:** paste the canonical block; do not accept a platform's reformatting. In
16
+ consistency is a defect, and `NAP Match` is how it gets found.
17
+ - **Problem:** every listing points at the homepage.
18
+ **Solution:** point each one at the most relevant page. The link then carries a signal
19
+ and the visitor lands somewhere useful.
20
+ - **Problem:** a "50 free DA 70 backlinks" article was treated as a list of good sites.
21
+ **Solution:** vet each one individually. Those articles are a business model, not a
22
+ resource.
23
+ - **Problem:** a listing was approved but the link is JavaScript, so nothing is passed.
24
+ **Solution:** `Link Type` = `JavaScript` and `Link Type` = `No link` are different
25
+ outcomes. A listing that renders no crawlable link earns nothing, and the tracker should
26
+ say so.
27
+ - **Problem:** the business never checks the old listings again.
28
+ **Solution:** `Review Date` is what makes this a tracker. Quarterly, ten listings at a
29
+ time, is an hour.
30
+ - **Problem:** all four artifacts drift apart.
31
+ **Solution:** derive all four from the field list in this file, never by hand.
32
+ - **Problem:** Notion import shows every column as Text.
33
+ **Solution:** that is expected. Apply the property mapping table once, after import.
34
+
35
+
36
+ See the [Related Skills](references/related-skills.md) reference for the full guidance.
@@ -0,0 +1,15 @@
1
+ # Related Skills
2
+
3
+ - @brand-growth-system-builder - routes to this skill and the other 12 brand and growth modules.
4
+ - @gbp-local-seo-intent - the map profile that has to agree with every one of these
5
+ listings.
6
+ - @business-website-setup - the pages these links should point at.
7
+ - @linktree-link-hub - a low-authority citation site, and the Tier 5 row for it.
8
+ - ](https://github.com/sickn33/agentic-awesome-skills/blob/main/skills/social-media-setup/SKILL.md) - the LinkedIn company page is one of the highest-authority
9
+ citations available, and it lives in that module.
10
+ - @presentation-deck - the guest contribution and the local press angle both start here.
11
+ - @free-design-resources - the free reference, resource and design files published on
12
+ Issuu, Scribd and Slideshare, which are real citations.
13
+
14
+
15
+ See the [Reusable Prompt](references/reusable-prompt.md) reference for the full guidance.
@@ -0,0 +1,11 @@
1
+ # Reusable Prompt
2
+
3
+ ```
4
+ I want a citation and backlink plan for my small business - where to list it, in what
5
+ order, and which submissions to refuse.
6
+ Ask me one short question at a time, and only about what I have not already told you.
7
+ Never invent a domain, a DA, a DR, a spam score, an approval time or a traffic figure.
8
+ Vet every platform before I submit, refuse reciprocal links, keyword-stuffed names and
9
+ paid link networks, and record the refusals.
10
+ When I ask, output CSV, SQL DDL, JSON Schema and a Notion property mapping. Data only.
11
+ ```
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: since-cutoff
3
+ description: "Find which APIs of a project's pinned Python dependencies changed after the model's training cutoff, where the code uses them, and write short AGENTS.md or CLAUDE.md notes."
4
+ category: development
5
+ risk: safe
6
+ source: https://github.com/MohammadHijjawi97/since-cutoff/tree/f2108c13c112dce0ca3597b5a2b79ca01afa7b80/skills/since-cutoff
7
+ source_repo: MohammadHijjawi97/since-cutoff
8
+ source_type: official
9
+ date_added: "2026-09-28"
10
+ author: Mohammad Hijjawi
11
+ tags: [python, dependencies, api-changes, knowledge-cutoff, agents-md, static-analysis]
12
+ tools: [claude, codex, cursor, gemini]
13
+ license: MIT
14
+ license_source: https://github.com/MohammadHijjawi97/since-cutoff/blob/f2108c13c112dce0ca3597b5a2b79ca01afa7b80/LICENSE
15
+ ---
16
+
17
+ # since-cutoff: dependency API changes after the model's training cutoff
18
+
19
+ ## Overview
20
+
21
+ A coding model learns each library's API as it was at its training cutoff, but the project's lockfile keeps moving. This skill runs the since-cutoff CLI (MIT, PyPI `since-cutoff`, pinned here to release 0.4.1). For each pinned dependency, the CLI takes the latest release on or before the model's cutoff and compares that release's public API with the pinned release. The comparison is static (griffe), so no package code runs. It then reports the changed APIs that the project's code uses, with the files that use them. If the user agrees, it writes short notes into AGENTS.md or CLAUDE.md, each tagged with the evidence behind it (for example `[diff]`). `scan` makes no model calls and needs no API key. This adapts the [upstream skill](https://github.com/MohammadHijjawi97/since-cutoff/tree/f2108c13c112dce0ca3597b5a2b79ca01afa7b80/skills/since-cutoff) under its [MIT license](https://github.com/MohammadHijjawi97/since-cutoff/blob/f2108c13c112dce0ca3597b5a2b79ca01afa7b80/LICENSE).
22
+
23
+ ## When to Use
24
+
25
+ - Use when the user asks whether you know the versions of their Python dependencies, or what changed since your training data.
26
+ - Use when code keeps failing on a renamed, moved or removed function, class or parameter of a pinned library.
27
+ - Use after a dependency upgrade, before writing code against the upgraded library.
28
+ - Do not use for projects that are not Python.
29
+
30
+ ## How It Works
31
+
32
+ 1. Work from the project root, the directory that has `pyproject.toml`, `requirements*.txt` or a lockfile (`uv.lock`, `poetry.lock`, `pdm.lock`, `pylock.toml`, `Pipfile.lock`).
33
+ 2. Check the runner with `since-cutoff --version`. If it is missing or does not report 0.4.1, ask the user before running `uvx since-cutoff@0.4.1`, which downloads that release from PyPI the first time. Do not install anything else or change the user's environment.
34
+ 3. Run the read-only scan and name the model you are: `uvx since-cutoff@0.4.1 scan --model <provider>:<model>` (for example `anthropic:claude-sonnet-4-5` or `openai:gpt-5.4`). Without `--model`, it reads the model from the coding agent's settings and prints where it found it. The scan reads the project's files, PyPI and models.dev. It sends none of the project's code anywhere.
35
+ 4. Summarise the result for the user: the model and its cutoff, which dependencies changed, and which changed APIs the code uses, with the files that use them.
36
+ 5. Write notes only if the user asks for them. Run `uvx since-cutoff@0.4.1 sync --dry-run` and show the user the diff it prints. Run `uvx since-cutoff@0.4.1 sync --yes` only after they agree. It writes one marked block into AGENTS.md (or into CLAUDE.md if that is the file the project uses) and leaves the rest of the file unchanged. Run after later upgrades, it keeps the block in step with the lockfile. Exit code 4 means the block was edited by hand: tell the user, and pass `--force` only if they say so. `uvx since-cutoff@0.4.1 unapply` removes the block.
37
+ 6. Treat the notes as reference facts about the versions the project pins, and check them when you write code that uses those libraries.
38
+ 7. Optional: `since-cutoff run` measures which of the changes the model actually gets wrong. It sends prompts to the model provider the user picks (package names, versions, public API signatures and generated tasks, never the project's source code) and uses their credits or usage, so ask first.
39
+
40
+ ## Examples
41
+
42
+ ```bash
43
+ uvx since-cutoff@0.4.1 scan --model anthropic:claude-sonnet-4-5
44
+ ```
45
+
46
+ Output on the project's sample app, abridged to one package:
47
+
48
+ ```text
49
+ Your code uses 2 APIs that changed after claude-sonnet-4-5's training cutoff (2025-07-31)
50
+
51
+ anthropic 0.60.0 -> 1.8.0 (0.60.0 was the latest release at the cutoff; pyproject.toml pins 1.8.0)
52
+ Messages.create: temperature, top_k and top_p were removed uses this API
53
+ app/main.py calls create
54
+ Note: `Messages.create()` no longer accepts `temperature`, `top_k` or `top_p` as keyword
55
+ arguments. If the API still needs them, pass them through its `extra_body` or
56
+ `extra_query` argument. [diff]
57
+ ```
58
+
59
+ ## Limitations
60
+
61
+ - Python projects only.
62
+ - It compares the shape of the public API: names, signatures, parameters and deprecation markers. A change in behaviour behind an unchanged signature is invisible to it.
63
+ - The training cutoff only decides which changes to look at. It does not show what the model memorised; `run` measures that.
64
+ - It needs network access to PyPI, and to models.dev for model cutoffs. The first scan downloads the releases it compares. Results are cached locally.
65
+
66
+ ## Security Notes
67
+
68
+ `scan` and `status` do not change project files: they write only to their own git-ignored `.since-cutoff/` folder and a local cache. `sync` writes one marked block to AGENTS.md or CLAUDE.md, and only after the user agrees. No package code and no model-written code is executed. Credentials are needed only for the optional `run`.