Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Link Rot

ASecurity

Sweep every external pointer to you (profiles, READMEs, bios, link pages) after a rename of a repo, org, domain, handle or account, and fix the dead ones. Use right after any public rename and once a quarter as hygiene. Triggers: /link-rot, /lr, check links, broken profile links, after the rename, link rot.

8 stars
0 votes
0 copies
0 views
Added 9/25/2026
ai-agentspythongogitapi

Works with

apimcp

Security Analysis

A100/100

Scanned 10/7/2026

$npx -y skills add tonydzi/second-brain-starter-kit --skill link-rot --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Link Rot?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Link Rot
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tonydzi-link-rot/badge)](https://www.skillsdirectory.com/skills/tonydzi-link-rot)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
name: link-rot
description: "Sweep every external pointer to you (profiles, READMEs, bios, link pages) after a rename of a repo, org, domain, handle or account, and fix the dead ones. Use right after any public rename and once a quarter as hygiene. Triggers: /link-rot, /lr, check links, broken profile links, after the rename, link rot."
license: MIT
version: 1.1.0
---

Родился 09.09.2026 из сессии `AUTO-hp17-260908-link-rot-sweep`: переименование
`Palo-Alto-AI-Research-Lab → tonydzi` (04.08) перенесло репо и сайт, но **GitHub Pages и URL
профиля не редиректят** — и шесть внешних витрин месяц вели в 404, потому что никто их не
прочесал. `prior_art.py` назвал это **3-м датированным случаем** семьи «переименование оставило
мёртвый указатель в слое, который никто не сторожит» (слаг класса: `rename-leaves-external-pointers-dead`) → класс системный, отсюда этот скилл. Этот скилл — ЕДИНСТВЕННАЯ исполняющая дверь обоих правил: `rename-leaves-external-pointers-dead` (Шаги 1-3, 5) и `oauth-only-login-is-a-single-point-of-failure` (Шаг 4).

Единственный источник набора ссылок и матрицы площадок — волт
`04-Projects/page-distribution-registry.md`. Здесь только процедура, дублировать список ⛔.

## Шаг 1 — ЗАМЕР ПЕРВЫМ, суждение вторым (0 токенов)
```
python ~/.claude/scripts/link_rot_scan.py
```
`exit 0` = чисто, дальше не работаем · `exit 2` = поимённо мёртвые ссылки и грязные витрины ·
`exit 4` = прибор не доказал себя на контрольном примере и **молчит о данных** (не верь пустому
выводу, чини прибор). Цели правятся в `~/.claude/link_rot_targets.json` — при новом
переименовании ДОБАВЬ старый адрес в `dead_markers` тем же заходом, иначе сторож его не увидит.
Сам сторож краснеет по требованию: `python ~/.claude/scripts/_test_link_rot_scan.py` (3/3).


⭐ **Оплачено догоном 09.09:** «0 находок» — тоже claim. Прибор видит РОВНО те витрины, что лежат
в `surfaces`, а Scholar и Academia там не лежали — сторож печатал зелёное, пока две витрины
публично несли мёртвый адрес. Правило: витрина из матрицы волта обязана быть в `surfaces`, либо
рядом стоит причина, почему её нельзя прочитать без логина. И **403/429 — это лимитер, а не
стена**: Academia отдаёт 200 на первые запросы и 403 на следующие, поэтому `fetch` ретраит
(0/5/15/30с); первый 403, принятый за «не читается», спрятал 7 вхождений мёртвого адреса.

## Шаг 2 — где смотреть, если витрину не прочитать без логина
Прибор видит только публично читаемое. Закрытое проверяется руками по матрице волта.
Порядок обхода — **от дешёвого входа к дорогому**, это экономит час:
1. **Есть API с токеном в сторе → идём API, а не браузером.** X правится
   `api.x.com/1.1/account/update_profile` по `secrets/x_api.env` (Read/Write) за один вызов —
   быстрее и надёжнее кликов, и работает, даже когда в Chrome аккаунт разлогинен.
2. **Есть СВОЙ пароль в сторе → форма сайта.** ORCID и Wellfound так и открылись.
3. **Только «вход через Google» → это единственная точка отказа**, см. Шаг 4.


⭐ **Перед словами «аккаунта нет в браузере» (оплачено 09.09):** сперва выясни, в КАКОМ профиле
Chrome сидит MCP — `navigate myaccount.google.com` + `get_page_text` печатает живой email. Дальше
читай список аккаунтов профилей с диска, а не гадай перебором `authuser`:
`%LOCALAPPDATA%\Google\Chrome\User Data\<Profile>\Preferences` → ключ `account_info`
(файл с BOM, открывать `encoding='utf-8-sig'`). Номер `authuser=N` — это индекс в ЭТОМ списке, он
плавает от профиля к профилю: в одном профиле было 3 аккаунта, в соседнем 9. Перебор «0-5» в
профиле с тремя аккаунтами ничего не доказывает. И проверь `list_connected_browsers` — подключённых
Chrome может быть несколько, а нужный профиль может быть вообще не спарен (спаривание = клик человека).

## Шаг 3 — правим URL, НЕ переписываем тексты
Меняется адрес, а не формулировки Антона. ⛔ Не «улучшать» bio по дороге (§9.7).
Смотреть надо **три слоя, а не один** — в сессии 09.09 два из трёх нашлись только потому, что
искали не только в поле «website»:
- поле-ссылка профиля (website / homepage / GitHub);
- **URL внутри текста bio** (ORCID biography и bio X оба несли мёртвый адрес);
- **URL внутри длинных полей** (Wellfound Achievements).

⚠️ **Грабля Linktree:** смена URL кнопки МОЛЧА перезаписывает её ЗАГОЛОВОК автометаданными новой
ссылки («👉 START HERE — one page of proof» стал «Anton Dziatkovskii — developer activation…»).
Заголовок возвращать вручную и закрывать **Enter**; **Escape откатывает правку целиком**.
Проверять только перезагрузкой админки — в живом DOM правка выглядит применённой, хотя не сохранена.


⭐ **СЕМЬЯ ОБЪЕКТОВ, а не один объект (оплачено 09.09, журнал `fix-applied-to-one-sibling-object`):**
починив указатель, перечисли ВСЕ объекты, где он стоит, и пройди по каждому. 14.07 забаненный
LinkedIn убрали из Homepage Scholar-профиля `b8gKHiMAAAAJ` — и не заметили, что у Антона ВТОРОЙ
Scholar-профиль `wZ7qvJEAAAAJ`, где тот же мёртвый указатель прожил ещё 8 недель. Тест одной фразой:
«у этой витрины есть близнец под другим аккаунтом?»

## Шаг 4 — вход упёрся в Google-челлендж
`Continue with Google` может потребовать passkey/телефон, которых у робота нет. Порядок обхода:
1. поискать СВОЙ пароль площадки в `secrets/phd_accounts.env` и `secrets/chrome-passwords.csv`;
2. нет пароля, но письма ящика читаются коннектором (`a`/`a2`/`bb`) → **password reset**, ссылку
   забрать `python "$USERPROFILE/!CLAUDE-HP17 May26/gmail/gmail_check.py" search "<площадка>" --label bb`,
   новый пароль **сразу** в `phd_accounts.env` (§3.4);
3. ящик недоступен (например `au[id]@gmail.com`) → это **истинный блок**: карточка
   `state: blocked`, причина словами, остальные площадки НЕ ждут заблокированную.

⭐ **Правило, оплаченное этой сессией:** у каждой публичной витрины должен быть СВОЙ пароль в
сторе, а не только «вход через Google» — OAuth-only вход это единая точка отказа
(класс `oauth-only-login-is-a-single-point-of-failure`, журнал 09.09). Заводя новую витрину,
ставь ей пароль сразу.

## Шаг 5 — доказательство, иначе не сделано
На каждую площадку — машинная улика в том же заходе, «сохранил» уликой НЕ является:
curl публичной страницы с `grep -c <старый адрес>` = 0 · публичный API · **перечитанная после
перезагрузки** форма. Затем строки матрицы в волте (статус, дата, чем доказано) и вердикт
🟢/🔴 по каждой. Закрытая площадка без улики = 🔴, а не ✅.

## Шаг 6 — вердикт о скилле (§9.3-бис)
Прогнал скилл — одной строкой: `🔧 обновляю` (что споткнулось) · `📝 обновлю не сейчас` (куда легла
строка) · `✅ не надо` (почему именно). Пустое «не надо» вердиктом не является.

<!--kit-footer-->

---

**Like this skill?** It is one of 100 in [second-brain-starter-kit](https://github.com/tonydzi/second-brain-starter-kit): the second brain we built for ourselves and run every day at Palo Alto AI Research Lab. Install the whole set with `npx skills add tonydzi/second-brain-starter-kit`. Everything is open source and free, so take what you need.

Flagships worth a look on their own: [secondop-panel](https://github.com/tonydzi/secondop-panel) (a second opinion from a panel of external models), [claude-memory-tidy](https://github.com/tonydzi/claude-memory-tidy) (stop your agent's memory from rotting), [telegram-mcp-kit](https://github.com/tonydzi/telegram-mcp-kit) (your own Telegram over MCP in about 15 minutes).

Author: **Anton Dziatkovskii**, Palo Alto AI Research Lab. Telegram [@tonydzi](https://t.me/tonydzi) - WhatsApp [+1 341 222 9178](https://wa.me/13412229178) - X [@Tony_Stef_](https://x.com/Tony_Stef_)

**Engineers: want to test-drive this setup?** Message me. I hand out free starter seeds to engineers who test and report back, and custom skill requests are welcome.

Attribution

tonydzitonydzi
View sourceSee grades on GitHubMore from tonydzi →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Caveman

Terse caveman voice: answer first, fluff gone, every technical fact kept. Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less tokens". Stays on until "stop caveman" or "normal mode".

1100021 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

698621 votes

Writing Skills

Create and manage Claude Code skills in HASH repository following Anthropic best practices. Use when creating new skills, modifying skill-rules.json, understanding trigger patterns, working with hooks, debugging skill activation, or implementing progressive disclosure. Covers skill structure, YAML frontmatter, trigger types (keywords, intent patterns), UserPromptSubmit hook, and the 500-line rule. Includes validation and debugging with SKILL_DEBUG. Examples include rust-error-stack, cargo-dep...

3931 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3421 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Amp, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Grok Build, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

741 votes
View all in ai-agents →