backlink-kit is a manual agent skill for web product teams that submit products to AI/tool directories and want to keep footer backlinks, badge links, and submission copy in one place.
The skill helps an agent:
- infer product facts from the current web project;
- merge new directory backlinks without deleting existing partner badges;
- generate backlink submission copy as Markdown and a copy-friendly local HTML page;
- maintain a dark-theme-friendly footer badge carousel;
- suggest candidate listing URLs for common AI/tool directories.
The skill is manual-only. It is configured with allow_implicit_invocation: false for OpenAI/Codex-style agents, so it should only run when explicitly invoked as $backlink-kit or backlink-kit.
It is not tied to Codex. The folder uses the portable SKILL.md convention and can be installed into any agent that supports local agent skills. The backlink-kit/agents/openai.yaml file is optional metadata for OpenAI/Codex-style runtimes.
Install with the open agent skills CLI:
npx skills add https://github.com/Leonewu/backlink-kit --skill backlink-kitUseful variants:
# Install globally instead of only in the current project.
npx skills add https://github.com/Leonewu/backlink-kit --skill backlink-kit -g
# Install to specific supported agents.
npx skills add https://github.com/Leonewu/backlink-kit --skill backlink-kit -a codex -a claude-code
# List the skills exposed by this repository without installing.
npx skills add https://github.com/Leonewu/backlink-kit --listFor manual installation, copy or symlink the backlink-kit/ folder into your agent's skills directory. For example, with Codex:
git clone https://github.com/Leonewu/backlink-kit.git
mkdir -p "${CODEX_HOME:-$HOME/.codex}/skills"
cp -R backlink-kit/backlink-kit "${CODEX_HOME:-$HOME/.codex}/skills/backlink-kit"After installing, restart your agent or reload skills if your environment supports it.
Open a web product repository and invoke the skill explicitly:
Use $backlink-kit in this repo to prepare backlink submission materials and maintain the footer carousel.
The skill will first inspect the project for:
- product name;
- canonical URL and domain;
- tagline, short description, and long description source copy;
- logo, favicon, Open Graph image, or landing screenshots;
- support email;
- key product features;
- existing footer backlinks and partner badges.
If product name or website URL cannot be inferred confidently, it instructs the agent to ask before generating listing URLs. If the project has no existing footer/backlink area, it also instructs the agent to ask before creating a new visible footer carousel.
All generated submission materials belong in the project root under .backlink-kit/.
Default outputs:
.backlink-kit/backlink-submission-materials.md
.backlink-kit/backlink-submission-materials.html
The HTML file can be opened directly in a browser. It mirrors the Markdown content and adds copy buttons for each field. The long description defaults to Markdown copy mode and can switch to plain text mode. After generating it, the agent should explain what it is for and open it for preview when the environment supports an interactive browser; otherwise it should provide a clickable path and open command.
You can also run the bundled generator directly:
python3 /path/to/backlink-kit/scripts/generate_submission_materials.py \
--product-name "Product Name" \
--website-url "https://example.com" \
--primary-category "AI Tool" \
--secondary-categories "AI, Productivity, Web App" \
--support-email "support@example.com" \
--logo-url "https://example.com/icon.png" \
--screenshot-url "https://example.com/og.png" \
--tagline "Short benefit-oriented tagline." \
--one-line "One sentence explaining what the product does." \
--short-description "A concise directory description." \
--long-description "A polished product description paragraph." \
--problem "The problem this product solves." \
--target-users "The users this product is for." \
--feature "Feature one: concrete user-facing benefit." \
--feature "Feature two: concrete user-facing benefit." \
--pricing "Freemium, paid, or one-time pricing summary." \
--keywords "keyword one, keyword two, keyword three" \
--anchor-text "primary backlink anchor" \
--alternative-anchor-text "secondary backlink anchor"Without --output-dir, the script writes to .backlink-kit/.
There is no required central submission step. Public GitHub repos can be installed directly through npx skills add, so a working README, repo description, and clear topics are enough for basic distribution.
Recommended exposure checklist:
- add GitHub topics such as
agent-skills,ai-agents,codex-skill,seo,backlinks, anddirectory-submission; - make the repo description include
agent skillandnpx skills; - submit a PR to relevant skill directories or awesome lists such as
awesome-agent-skills; - share the install command in launch posts for X, LinkedIn, Reddit, Hacker News, or Product Hunt;
- monitor discovery surfaces such as SkillsMP and skills.sh, which track the open agent skills ecosystem.
The skill is framework-agnostic. It does not assume Next.js, React, Vite, Astro, Remix, Rails, or any specific router.
Recommended behavior for web products:
- ask before creating a brand-new visible footer carousel if the project does not already have a footer, backlink strip, featured-on section, or partner badge area;
- show the backlink footer on public marketing/content pages;
- hide it from app, admin, auth, dashboard, or workbench screens unless the product already has a global footer there;
- render a duplicated track for infinite marquee behavior;
- make the duplicate visual track
aria-hidden="true"; - set duplicate links to
tabIndex={-1}; - open third-party directory links with
target="_blank"andrel="noopener noreferrer"; - default badges to muted or grayscale on dark themes;
- restore real badge color on hover/focus;
- pause animation on hover/focus;
- support
prefers-reduced-motion; - keep stable badge dimensions so slow remote images cannot collapse the carousel.
The skill is careful around projects that already have external links.
It instructs the agent to:
- search for existing backlink and footer data first;
- dedupe by directory identity, not exact URL;
- preserve unrelated partner/outbound badges;
- preserve working badge URLs and custom labels;
- update only target URLs when a known directory listing is approved;
- never replace an approved user-supplied listing URL with a guessed URL;
- verify dark badge URLs return real images before using them.
The skill can suggest candidate listing URLs for these directories. Many of these are inferred from product name and domain, so they must be verified after submission.
| Directory | Candidate URL rule | Badge / fallback |
|---|---|---|
| Turbo0 | https://turbo0.com/item/{productSlug} |
https://img.turbo0.com/badge-listed-dark.svg |
| Findly.tools | https://findly.tools/{productSlug}?utm_source={productSlug} |
https://findly.tools/badges/findly-tools-badge-dark.svg |
| yo.directory | https://yo.directory/ |
original yo.directory badge |
| ShowMeBestAI | https://showmebest.ai |
https://showmebest.ai/badge/feature-badge-dark.webp |
| NewTool.site | https://newtool.site/item/{productSlug} |
https://newtool.site/badges/newtool-dark.svg |
| Startup Fame | https://startupfa.me/s/{domain}?utm_source={domain} |
https://startupfa.me/badges/featured/dark.webp |
| Dang.ai | https://dang.ai/ |
https://assets.dang.ai/badges/dang-verified-dark.png |
| Submit AI Tools | https://submitaitools.org/ |
original Submit AI Tools badge |
| ToolFame | https://toolfame.com/item/{productSlug} |
https://toolfame.com/badge-dark.svg |
| AIDirs | https://aidirs.org/ |
https://aidirs.org/badges/badge-listed-dark.svg |
| DirOnix | https://dironix.com/ |
https://dironix.com/bage.png |
| Acid Tools | https://acidtools.com/ai/{domainStem} |
https://acidtools.com/assets/images/badge-dark.png |
| Product Wing | https://productwing.com/product/{domainStem} |
https://productwing.com/assets/images/badge-dark.png |
| Dofollow.Tools | https://dofollow.tools/ |
https://dofollow.tools/badge/badge_dark.svg |
| DeepLaunch.io | https://deeplaunch.io/ |
https://deeplaunch.io/badge/badge_dark.svg |
| Fazier | https://fazier.com/launches/{domain} |
Fazier launch badge with theme=dark |
| OpenHunts Club | https://openhunts.com |
https://cdn.openhunts.com/badges/club.webp |
| Days Launch | https://dayslaunch.com/ |
https://dayslaunch.com/badages-awards.svg |
| Unite List | https://unitelist.com/product/{domainStem} |
https://unitelist.com/assets/images/badge-dark.png |
| IndieAI Directory | https://indieai.directory/ |
text fallback |
| Product Hunt | https://www.producthunt.com/products/{productSlug} |
official embed badge; requires post ID |
| Uneed | https://www.uneed.best/tool/{productSlug} |
https://www.uneed.best/EMBED1B.png |
| Peerlist | https://peerlist.io/{peerlistHandle}/project/{productSlug} |
official embed badge; requires project ID |
| PeerPush | https://peerpush.net/p/{productSlug} |
https://peerpush.net/p/{productSlug}/badge.png |
| LaunchIgniter | https://www.launchigniter.com/product/{productSlug}?ref=badge-{productSlug} |
winner badge; requires rank |
| Twelve Tools | https://twelve.tools |
https://twelve.tools/badge0-dark.svg |
| Wired Business | https://www.wired.business |
https://wired.business/badge0-dark.svg |
Definitions:
productSlug: kebab-case product name, for exampleBetter Dating Photos->better-dating-photos.domain: canonical host without protocol orwww, for examplebetterdatingphotos.com.domainStem: domain without TLD and dots, for examplebetterdatingphotos.com->betterdatingphotos.
Product Hunt post IDs, Peerlist handles/project IDs, and LaunchIgniter ranks are platform-assigned. The skill only reuses them when they appear in an approved link or official embed snippet.
Some directories create opaque IDs or suffixes that cannot be inferred. For example, a Startup Fame approved URL may include a suffix like -546. Always verify final listing URLs before using them in production.
.
├── README.md
├── LICENSE
├── backlink-kit/
│ ├── SKILL.md
│ ├── agents/
│ │ └── openai.yaml
│ └── scripts/
│ └── generate_submission_materials.py
└── .gitignore
From this repository:
python3 ~/.codex/skills/.system/skill-creator/scripts/quick_validate.py backlink-kit
PYTHONDONTWRITEBYTECODE=1 python3 -m py_compile backlink-kit/scripts/generate_submission_materials.pyYou can also smoke-test the generator in any project:
python3 backlink-kit/scripts/generate_submission_materials.py \
--product-name "Example Product" \
--website-url "https://example.com" \
--tagline "A concise product promise." \
--one-line "Example Product helps users do useful work." \
--short-description "A short directory description." \
--long-description "A longer product description for directory submissions." \
--problem "The problem it solves." \
--target-users "The users it helps." \
--feature "Feature one: useful benefit." \
--feature "Feature two: useful benefit." \
--keywords "example, product, tool"MIT