astro-cta-injector — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited astro-cta-injector (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.
This skill injects Call-to-Action (CTA) blocks into Astro site content. It supports:
.astro or .md filesCreate a config.json in the skill directory:
{
"content_path": "./src/content/blog",
"file_patterns": ["*.astro", "*.md"],
"cta_types": {
"newsletter": {
"template": "newsletter.html",
"default_placement": "after-paragraph-50%",
"keywords": ["tip", "guide", "learn", "strategy"]
},
"product": {
"template": "product.html",
"default_placement": "end",
"keywords": ["productivity", "task", "habit", "goal"]
}
},
"output": {
"state_file": "./state/cta_injection_progress.json",
"backup_dir": "./backups",
"report_file": "./reports/cta_injection_report.md"
},
"dry_run": true
}| Strategy | Description | Best For |
|---|---|---|
end | After all content | Non-intrusive CTAs |
after-paragraph-50% | After 50% of paragraphs | Mid-content engagement |
after-paragraph-60% | After 60% of paragraphs | Later engagement |
after-heading | After first H2 | Early engagement |
before-conclusion | Before last paragraph | Strong finish |
Templates are HTML files in the templates/ directory:
<!-- templates/newsletter.html -->
<aside class="cta-newsletter" data-cta-type="newsletter">
<h3>{{title}}</h3>
<p>{{description}}</p>
<form action="{{form_url}}" method="post">
<input type="email" placeholder="Your email" required />
<button type="submit">Subscribe</button>
</form>
</aside>Variables:
{{title}} - CTA headline{{description}} - CTA body text{{form_url}} - Form submission URL{{product_url}} - Product link{{image_url}} - Image sourcepython scripts/score_posts.py --content-path ./src/content/blog --cta-type newsletterpython scripts/preview_injection.py --input scored_posts.json --cta-type newsletterpython scripts/inject_ctas.py --input scored_posts.json --cta-type newsletterScored posts JSON:
{
"posts": [
{
"file_path": "./src/content/blog/my-post.astro",
"title": "My Blog Post",
"relevance_score": 8.5,
"cta_type": "newsletter",
"placement": "after-paragraph-50%",
"cta_data": {
"title": "Get More Tips Like This",
"description": "Subscribe to my weekly newsletter"
}
}
]
}Posts are scored for CTA relevance based on:
Scores range from 0-10. Default threshold: 5.0
User: "Add a newsletter signup CTA to all my productivity-related blog posts"
Claude will:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.