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.
- package/README.md +46 -42
- package/bundled-skills/.antigravity-install-manifest.json +127 -1
- package/bundled-skills/360-feedback-system/SKILL.md +481 -0
- package/bundled-skills/access-matrix/SKILL.md +338 -0
- package/bundled-skills/accounting-audit-system-builder/SKILL.md +302 -0
- package/bundled-skills/accounting-audit-system-builder/references/catalog.md +114 -0
- package/bundled-skills/accounting-software-selection/SKILL.md +427 -0
- package/bundled-skills/accounting-software-selection/references/build-artifacts.md +362 -0
- package/bundled-skills/accounting-software-selection/references/common-pitfalls.md +44 -0
- package/bundled-skills/accounting-software-selection/references/field-reference.md +93 -0
- package/bundled-skills/accounting-software-selection/references/select-options.md +202 -0
- package/bundled-skills/admin-access-register/SKILL.md +381 -0
- package/bundled-skills/advanced-analytics-dashboard/SKILL.md +318 -0
- package/bundled-skills/ai-image-generation-studio/SKILL.md +259 -0
- package/bundled-skills/ai-logo-maker/SKILL.md +259 -0
- package/bundled-skills/ai-multilingual-dubbing/SKILL.md +259 -0
- package/bundled-skills/ai-photo-restyler/SKILL.md +259 -0
- package/bundled-skills/ai-podcast-voiceover/SKILL.md +259 -0
- package/bundled-skills/alumni-re-hire-tracker/SKILL.md +314 -0
- package/bundled-skills/announcement-board/SKILL.md +336 -0
- package/bundled-skills/antigravity-maintainer-batch-release/SKILL.md +48 -3
- package/bundled-skills/asset-it-management/SKILL.md +407 -0
- package/bundled-skills/attendance/SKILL.md +331 -0
- package/bundled-skills/audit-log/SKILL.md +314 -0
- package/bundled-skills/audit-preparation/SKILL.md +416 -0
- package/bundled-skills/beatra/SKILL.md +260 -0
- package/bundled-skills/board-governance/SKILL.md +360 -0
- package/bundled-skills/brand-growth-system-builder/SKILL.md +360 -0
- package/bundled-skills/brand-kit-print-collateral/SKILL.md +498 -0
- package/bundled-skills/buddy-program-manager/SKILL.md +329 -0
- package/bundled-skills/budget-cash-flow/SKILL.md +352 -0
- package/bundled-skills/busabase/SKILL.md +118 -0
- package/bundled-skills/business-email-template/SKILL.md +480 -0
- package/bundled-skills/business-email-template/references/common-pitfalls.md +30 -0
- package/bundled-skills/business-website-setup/SKILL.md +489 -0
- package/bundled-skills/business-website-setup/references/common-pitfalls.md +32 -0
- package/bundled-skills/candidate-talent-pool/SKILL.md +359 -0
- package/bundled-skills/capacity-workload-planner/SKILL.md +354 -0
- package/bundled-skills/changelog-entry/SKILL.md +141 -0
- package/bundled-skills/clients-accounts/SKILL.md +398 -0
- package/bundled-skills/code-of-conduct/SKILL.md +488 -0
- package/bundled-skills/code-of-conduct/references/common-pitfalls.md +31 -0
- package/bundled-skills/company-email-accounts/SKILL.md +404 -0
- package/bundled-skills/competency-matrix/SKILL.md +335 -0
- package/bundled-skills/contract-document-renewal/SKILL.md +396 -0
- package/bundled-skills/course-upskilling-requests/SKILL.md +354 -0
- package/bundled-skills/credit-cycle-analysis/SKILL.md +303 -0
- package/bundled-skills/credit-cycle-analysis/references/best-practices.md +35 -0
- package/bundled-skills/credit-cycle-analysis/references/common-pitfalls.md +5 -0
- package/bundled-skills/credit-cycle-analysis/references/examples.md +34 -0
- package/bundled-skills/credit-cycle-analysis/references/field-reference.md +47 -0
- package/bundled-skills/credit-cycle-analysis/references/how-it-works.md +494 -0
- package/bundled-skills/credit-cycle-analysis/references/security-notes.md +16 -0
- package/bundled-skills/credit-cycle-analysis/references/select-options.md +32 -0
- package/bundled-skills/csv-manual-export/SKILL.md +499 -0
- package/bundled-skills/csv-manual-export/references/common-pitfalls.md +19 -0
- package/bundled-skills/culture-retention/SKILL.md +346 -0
- package/bundled-skills/data-export-engine/SKILL.md +308 -0
- package/bundled-skills/data-privacy-controls/SKILL.md +317 -0
- package/bundled-skills/day-book/SKILL.md +499 -0
- package/bundled-skills/day-book/references/best-practices.md +32 -0
- package/bundled-skills/day-book/references/common-pitfalls.md +58 -0
- package/bundled-skills/day-book/references/field-reference.md +45 -0
- package/bundled-skills/day-book/references/how-it-works.md +7 -0
- package/bundled-skills/day-book/references/related-skills.md +18 -0
- package/bundled-skills/day-book/references/relations.md +14 -0
- package/bundled-skills/day-book/references/reusable-prompt.md +50 -0
- package/bundled-skills/day-book/references/security-safety-notes.md +19 -0
- package/bundled-skills/day-book/references/select-options.md +38 -0
- package/bundled-skills/dei-dashboard/SKILL.md +307 -0
- package/bundled-skills/design-theme-guide/SKILL.md +472 -0
- package/bundled-skills/disciplinary-pip-tracker/SKILL.md +345 -0
- package/bundled-skills/document-management-system/SKILL.md +328 -0
- package/bundled-skills/ecommerce-listing-image-set/SKILL.md +259 -0
- package/bundled-skills/employee-suggestion-hub/SKILL.md +322 -0
- package/bundled-skills/esop-equity-tracker/SKILL.md +331 -0
- package/bundled-skills/events-activities/SKILL.md +355 -0
- package/bundled-skills/expense-accounting/SKILL.md +496 -0
- package/bundled-skills/expense-accounting/references/common-pitfalls.md +41 -0
- package/bundled-skills/expense-accounting/references/related-skills.md +11 -0
- package/bundled-skills/expense-accounting/references/reusable-prompt.md +36 -0
- package/bundled-skills/expense-management/SKILL.md +351 -0
- package/bundled-skills/free-design-resources/SKILL.md +480 -0
- package/bundled-skills/free-design-resources/references/common-pitfalls.md +44 -0
- package/bundled-skills/free-design-resources/references/related-skills.md +24 -0
- package/bundled-skills/free-design-resources/references/reusable-prompt.md +12 -0
- package/bundled-skills/gamification-engine/SKILL.md +307 -0
- package/bundled-skills/gbp-local-seo-intent/SKILL.md +466 -0
- package/bundled-skills/gbp-local-seo-intent/references/best-practices.md +41 -0
- package/bundled-skills/gbp-local-seo-intent/references/common-pitfalls.md +40 -0
- package/bundled-skills/gbp-local-seo-intent/references/related-skills.md +17 -0
- package/bundled-skills/gbp-local-seo-intent/references/reusable-prompt.md +11 -0
- package/bundled-skills/gbp-local-seo-intent/references/security-safety-notes.md +27 -0
- package/bundled-skills/health-wellness/SKILL.md +334 -0
- package/bundled-skills/intern-program/SKILL.md +354 -0
- package/bundled-skills/internal-communication/SKILL.md +318 -0
- package/bundled-skills/inventory-stock-reconciliation/SKILL.md +470 -0
- package/bundled-skills/inventory-stock-reconciliation/references/best-practices.md +18 -0
- package/bundled-skills/inventory-stock-reconciliation/references/common-pitfalls.md +42 -0
- package/bundled-skills/inventory-stock-reconciliation/references/related-skills.md +13 -0
- package/bundled-skills/inventory-stock-reconciliation/references/relations.md +8 -0
- package/bundled-skills/inventory-stock-reconciliation/references/reusable-prompt.md +31 -0
- package/bundled-skills/inventory-stock-reconciliation/references/security-safety-notes.md +17 -0
- package/bundled-skills/inventory-stock-reconciliation/references/select-options.md +45 -0
- package/bundled-skills/invoices-billing/SKILL.md +385 -0
- package/bundled-skills/issue-grievance-tracker/SKILL.md +400 -0
- package/bundled-skills/json-schema-manual/SKILL.md +309 -0
- package/bundled-skills/json-schema-manual/references/best-practices.md +9 -0
- package/bundled-skills/json-schema-manual/references/common-pitfalls.md +25 -0
- package/bundled-skills/json-schema-manual/references/input-modules.md +203 -0
- package/bundled-skills/json-schema-manual/references/related-skills.md +8 -0
- package/bundled-skills/json-schema-manual/references/reusable-prompt.md +10 -0
- package/bundled-skills/json-schema-manual/references/security-safety-notes.md +13 -0
- package/bundled-skills/knowledge-base/SKILL.md +318 -0
- package/bundled-skills/kpi-tracker/SKILL.md +345 -0
- package/bundled-skills/learning-career-development/SKILL.md +349 -0
- package/bundled-skills/leave-management/SKILL.md +341 -0
- package/bundled-skills/legal-compliance-vault/SKILL.md +324 -0
- package/bundled-skills/linktree-link-hub/SKILL.md +453 -0
- package/bundled-skills/logo-image-design/SKILL.md +459 -0
- package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package-lock.json +3 -3
- package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package.json +2 -1
- package/bundled-skills/mentorship-program/SKILL.md +332 -0
- package/bundled-skills/mirrord/SKILL.md +90 -0
- package/bundled-skills/monthly-closing-statements/SKILL.md +488 -0
- package/bundled-skills/monthly-closing-statements/references/related-skills.md +17 -0
- package/bundled-skills/monthly-closing-statements/references/reusable-prompt.md +8 -0
- package/bundled-skills/music-generation-studio/SKILL.md +259 -0
- package/bundled-skills/notification-reminder-hub/SKILL.md +324 -0
- package/bundled-skills/notion-manual-import/SKILL.md +376 -0
- package/bundled-skills/notion-manual-import/references/best-practices.md +10 -0
- package/bundled-skills/notion-manual-import/references/common-pitfalls.md +26 -0
- package/bundled-skills/notion-manual-import/references/input-modules.md +203 -0
- package/bundled-skills/notion-manual-import/references/related-skills.md +7 -0
- package/bundled-skills/notion-manual-import/references/reusable-prompt.md +8 -0
- package/bundled-skills/notion-manual-import/references/security-safety-notes.md +15 -0
- package/bundled-skills/observability-cloud-planning/SKILL.md +487 -0
- package/bundled-skills/observability-cloud-planning/references/common-pitfalls.md +39 -0
- package/bundled-skills/observability-cloud-planning/references/related-skills.md +20 -0
- package/bundled-skills/observability-cloud-planning/references/reusable-prompt.md +12 -0
- package/bundled-skills/observability-cloud-planning/references/security-safety-notes.md +30 -0
- package/bundled-skills/offboarding-exit/SKILL.md +343 -0
- package/bundled-skills/offer-appointment/SKILL.md +351 -0
- package/bundled-skills/okr-system/SKILL.md +355 -0
- package/bundled-skills/omentir-linkedin-outreach/SKILL.md +96 -0
- package/bundled-skills/onboarding-playbook/SKILL.md +292 -0
- package/bundled-skills/organization-design/SKILL.md +324 -0
- package/bundled-skills/party-ledger-reconciliation/SKILL.md +411 -0
- package/bundled-skills/payment-accounting/SKILL.md +421 -0
- package/bundled-skills/payments-received/SKILL.md +315 -0
- package/bundled-skills/payroll-finance/SKILL.md +351 -0
- package/bundled-skills/people-directory/SKILL.md +459 -0
- package/bundled-skills/performance-management/SKILL.md +367 -0
- package/bundled-skills/petty-cash-management/SKILL.md +448 -0
- package/bundled-skills/policy-acknowledgement/SKILL.md +314 -0
- package/bundled-skills/policy-library/SKILL.md +327 -0
- package/bundled-skills/poster-design-studio/SKILL.md +259 -0
- package/bundled-skills/pre-boarding/SKILL.md +326 -0
- package/bundled-skills/presentation-deck/SKILL.md +491 -0
- package/bundled-skills/presentation-deck/references/related-skills.md +19 -0
- package/bundled-skills/presentation-deck/references/reusable-prompt.md +11 -0
- package/bundled-skills/probation-tracker/SKILL.md +347 -0
- package/bundled-skills/product-photo-studio/SKILL.md +259 -0
- package/bundled-skills/project-based-performance/SKILL.md +323 -0
- package/bundled-skills/projects-work-management/SKILL.md +368 -0
- package/bundled-skills/promotion-upgrade-requests/SKILL.md +377 -0
- package/bundled-skills/purchase-accounting/SKILL.md +414 -0
- package/bundled-skills/receipt-accounting/SKILL.md +424 -0
- package/bundled-skills/recognition-rewards/SKILL.md +324 -0
- package/bundled-skills/recruitment-pipeline/SKILL.md +399 -0
- package/bundled-skills/remote-work-tracker/SKILL.md +306 -0
- package/bundled-skills/reports-analytics/SKILL.md +320 -0
- package/bundled-skills/salary-benchmarking/SKILL.md +318 -0
- package/bundled-skills/salary-wage-accounting/SKILL.md +412 -0
- package/bundled-skills/sales-accounting/SKILL.md +494 -0
- package/bundled-skills/sales-accounting/references/common-pitfalls.md +28 -0
- package/bundled-skills/sales-accounting/references/related-skills.md +13 -0
- package/bundled-skills/sales-accounting/references/reusable-prompt.md +8 -0
- package/bundled-skills/seo-directory-backlinks/SKILL.md +484 -0
- package/bundled-skills/seo-directory-backlinks/references/common-pitfalls.md +36 -0
- package/bundled-skills/seo-directory-backlinks/references/related-skills.md +15 -0
- package/bundled-skills/seo-directory-backlinks/references/reusable-prompt.md +11 -0
- package/bundled-skills/since-cutoff/SKILL.md +68 -0
- package/bundled-skills/skill-gap-analysis/SKILL.md +338 -0
- package/bundled-skills/social-media-setup/SKILL.md +477 -0
- package/bundled-skills/social-media-setup/references/common-pitfalls.md +34 -0
- package/bundled-skills/social-media-setup/references/related-skills.md +19 -0
- package/bundled-skills/social-media-setup/references/reusable-prompt.md +11 -0
- package/bundled-skills/social-media-setup/references/security-safety-notes.md +27 -0
- package/bundled-skills/sop-company-wiki/SKILL.md +324 -0
- package/bundled-skills/source-document-filing/SKILL.md +368 -0
- package/bundled-skills/spreadsheet-manual-build/SKILL.md +493 -0
- package/bundled-skills/spreadsheet-manual-build/references/best-practices.md +9 -0
- package/bundled-skills/spreadsheet-manual-build/references/common-pitfalls.md +22 -0
- package/bundled-skills/spreadsheet-manual-build/references/related-skills.md +8 -0
- package/bundled-skills/spreadsheet-manual-build/references/reusable-prompt.md +9 -0
- package/bundled-skills/spreadsheet-manual-build/references/security-safety-notes.md +16 -0
- package/bundled-skills/stakeholder-investor-reports/SKILL.md +303 -0
- package/bundled-skills/suno-lyrics-to-song/SKILL.md +259 -0
- package/bundled-skills/talking-avatar-video/SKILL.md +260 -0
- package/bundled-skills/tax-register/SKILL.md +363 -0
- package/bundled-skills/tds-booking-payment/SKILL.md +405 -0
- package/bundled-skills/team-calendar/SKILL.md +312 -0
- package/bundled-skills/telegram/assets/boilerplate/nodejs/package-lock.json +3 -3
- package/bundled-skills/telegram/assets/boilerplate/nodejs/package.json +1 -0
- package/bundled-skills/template-library/SKILL.md +304 -0
- package/bundled-skills/time-tracking/SKILL.md +353 -0
- package/bundled-skills/vendor-contractor-management/SKILL.md +327 -0
- package/bundled-skills/viral-video-teardown-remake/SKILL.md +260 -0
- package/bundled-skills/voice-cloning-studio/SKILL.md +260 -0
- package/bundled-skills/voiceover-narration-studio/SKILL.md +259 -0
- package/bundled-skills/whatsapp-cloud-api/assets/boilerplate/nodejs/package-lock.json +3 -3
- package/bundled-skills/whatsapp-cloud-api/assets/boilerplate/nodejs/package.json +1 -0
- package/dist/skill-pointer/index.d.ts +2 -1
- package/dist/skill-pointer/index.js +2 -1
- package/dist/skill-pointer/pointer-generator.d.ts +4 -2
- package/dist/skill-pointer/pointer-generator.js +4 -2
- package/package.json +1 -1
- 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`.
|