stale-content-detector — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited stale-content-detector (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Version: 1.0.0 Updated: 2026-05-24 Category: audit Status: stable Requires: Respira for WordPress plugin 7.1+ + MCP server
Find pages and posts that haven't been updated in a long time, categorize them as fresh / aging / stale / archive-candidate, and suggest action per item: refresh, redirect, archive, or leave alone. Stale content is an SEO drag and a credibility tax — if your "2023 trends" article still ranks but nobody's touched it since 2023, you're losing trust the day a reader notices the date.
This skill is intentionally focused. It's not a content audit (use SEO & AEO Amplifier for that). It's the "what's old" question, answered fast.
| Bucket | Age since last update | Suggested action |
|---|---|---|
| Fresh | < 6 months | leave alone |
| Aging | 6–12 months | review the headline + opening paragraph; if still accurate, leave; if outdated, refresh the date |
| Stale | 12–24 months | refresh the content meaningfully (new data, new examples), update the modified date |
| Archive-candidate | 24+ months and low traffic / orphan | archive, redirect, or 410 — depends on if anything links to it |
Plus an "evergreen" override: pages tagged as evergreen (/about/, /contact/, /pricing/, /privacy/) skip the staleness check entirely.
Call respira_get_active_site + respira_get_site_context.
Call:
respira_list_pages(per_page=100) for pagesrespira_list_posts(per_page=100, status=publish) for postsrespira_list_custom_posts(post_type=<each non-default CPT>, per_page=100) for any CPT detected via respira_list_post_typesEach result includes modified and date. Sort by modified ascending — oldest first.
Pull the list of pages and check each against the evergreen list (/about, /contact, /pricing, /privacy, /terms, /legal, /imprint, /faq, /support). If the URL or slug matches, flag as evergreen and skip the staleness check.
Also check if the post type has has_archive=false and a single URL pattern matching contact/legal/utility — those are usually evergreen.
For each non-evergreen page or post, compute days-since-modified. Bucket:
For items in the archive-candidate bucket, we need to know if anyone is reading them or linking to them. Two signals:
respira_find_element with the page's URL as a search term. Count incoming internal links. If zero, the page is an orphan.Recompute:
## Content age audit for {site_url}
Scanned {n_pages} pages + {n_posts} posts + {n_custom} custom posts ({n_total} total). Evergreen pages skipped: {n_evergreen}.
### Summary
| Bucket | Count | % |
|---|---|---|
| Fresh (<6mo) | {n_fresh} | {pct_fresh}% |
| Aging (6–12mo) | {n_aging} | {pct_aging}% |
| Stale (12–24mo) | {n_stale} | {pct_stale}% |
| Archive-candidate (24+mo) | {n_archive} | {pct_archive}% |
### Stale (12–24 months)
| Title | Last modified | Action |
|---|---|---|
| {title} | {modified} ({days_ago}d) | refresh |
| ... | | |
### Archive-candidate (24+ months)
| Title | Last modified | Internal links | Suggested action |
|---|---|---|---|
| {title} | {modified} ({days_ago}d) | {link_count} | {action} |
| ... | | | |
### What I'd refresh first (top 5 by traffic or link equity)
1. **{title}** ({days_ago}d old) — {one-line reason: high incoming link count / high traffic / topical relevance to current focus}
2. ...Ask: "Want me to refresh one of these now? I can pull the existing content, suggest updates, create a duplicate with the refresh applied, and you review."
If yes, route to the SEO & AEO Amplifier skill or directly compose respira_create_page_duplicate + targeted updates.
respira_delete_page only if the user explicitly asks for deletion of a specific named page.date (published) as a staleness signal. A 2018 post updated last month is fresh.Records: site URL hash, n_pages / n_posts / n_custom counted, bucket distribution, success/failure, total duration. No page titles, no URLs, no decisions sent.
Endpoint: POST https://www.respira.press/api/skills/track-usage
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.