Blog Content Auditor
Use this skill to audit individual blog posts or a wider blog library and produce a prioritised improvement plan.
Scope options
The skill can handle:
- A single post supplied as text or a URL.
- A list of posts supplied by the user.
- A blog index if the agent has suitable web or content access.
- Draft posts before publication.
- Existing thought-leadership libraries that need rationalisation.
Evidence rules
- Audit only posts that are supplied or accessible.
- Do not invent traffic, ranking, engagement, conversion, recency, or SEO performance data.
- If the user wants performance analysis and no analytics are available, state that analytics were not available and assess editorial quality only.
- Quote or reference specific observed features when justifying recommendations.
Default audit dimensions
Score each post from 0 to 5 for:
- Reader promise - Is the post clear about why the reader should care?
- Opening strength - Does the opening create relevance quickly?
- Argument shape - Is there a coherent point of view, not just a list of observations?
- Evidence and examples - Are claims supported by examples, experience, references, or practical detail?
- Structure and scanability - Is the post easy to navigate?
- Distinctiveness - Does it avoid generic commentary?
- Next action - Does the post help the reader think or act differently?
Workflow
- Identify the available posts and the audit objective.
- Read each accessible post fully enough to assess the dimensions.
- Score each dimension with evidence.
- Identify content that should be kept, refreshed, merged, expanded, or retired.
- Produce a prioritised editorial backlog.
- If relevant, identify themes missing from the current library.
Single-post output
## Blog audit summary
Overall score: [x]/5
Recommended action: [Keep / Refresh / Rewrite / Merge / Retire]
## Scorecard
| Dimension | Score /5 | Evidence | Recommended improvement |
|---|---:|---|---|
## Highest-value improvements
1. [Improvement]
2. [Improvement]
3. [Improvement]
## Suggested revised angle
[Suggested angle]
Library output
## Blog library audit summary
| Post | Overall score /5 | Recommended action | Reason |
|---|---:|---|---|
## Priority backlog
| Priority | Post | Action | Rationale | Effort |
|---|---|---|---|---|
## Content gaps
- [Gap]
References
This skill includes supporting reference material. Read the relevant reference file when the task needs additional structure, rubric detail, examples, or checklist support.
references/blog-audit-rubric.md- use this when additional structure, examples, or checks are useful for the task.
Quality checklist
Before responding, check:
- The audit does not claim performance data unless supplied.
- Recommendations are tied to evidence.
- The user can see what to improve first.
- The output separates editorial judgement from measurable analytics.
Run this — do not improvise
This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as blog_content_auditor_agent.py and embedded as the fenced Python below (sha256 f1c55c3b3c489628…; a byte-exact copy is also vaulted in the capsule comment at the end of this file). On a host with sandbox execution, run the linked file directly — if it is missing, write the fence contents verbatim to blog_content_auditor_agent.py first:
python3 blog_content_auditor_agent.py '{"key": "value"}' # arguments as one JSON object
echo '{"key": "value"}' | python3 blog_content_auditor_agent.py # or on stdin
python3 blog_content_auditor_agent.py --tool # emit the JSON tool contract
Treat stdout as a tool result. If it reports missing or unresolved inputs, stop and collect them. If it returns steps, execute those steps in order exactly as returned; if it returns instructions, follow them with the supplied inputs. Otherwise use the result verbatim. Do not invent behavior beyond that output. On a host without code execution, treat the Parameters schema and the code below as the exact specification and never paraphrase a step. Never edit inside the generated markers; a converter-equipped host can instead restore the original file checksum-verified with the installed rapp-agent-converter/scripts/toast.py convert SKILL.md --to agent.
"""BlogContentAuditor -- Use this skill when the user asks to audit, review, score, rationalise, prioritise, refresh, or improve blog posts, article libraries, newsletters, or thought-leadership content.
Generated by the rapp skill from blog-content-auditor. The RCI capsule at the bottom of this file carries the full original; `toast.py convert` restores it byte-exact."""
import json
import re
import sys
try:
from agents.basic_agent import BasicAgent
except ImportError: # running OUTSIDE a brainstem -- stay executable anyway.
class BasicAgent: # noqa: D101 - minimal stand-in, same contract
def __init__(self, name=None, metadata=None):
if name:
self.name = name
if metadata:
self.metadata = metadata
def perform(self, **kwargs):
return "Not implemented."
def system_context(self):
return None
def to_tool(self):
return {"type": "function", "function": {
"name": self.name,
"description": self.metadata.get("description", ""),
"parameters": self.metadata.get("parameters", {})}}
# The procedural layer, verbatim from the source capability.
INSTRUCTIONS = '# Blog Content Auditor\n\nUse this skill to audit individual blog posts or a wider blog library and produce a prioritised improvement plan.\n\n## Scope options\n\nThe skill can handle:\n\n- A single post supplied as text or a URL.\n- A list of posts supplied by the user.\n- A blog index if the agent has suitable web or content access.\n- Draft posts before publication.\n- Existing thought-leadership libraries that need rationalisation.\n\n## Evidence rules\n\n- Audit only posts that are supplied or accessible.\n- Do not invent traffic, ranking, engagement, conversion, recency, or SEO performance data.\n- If the user wants performance analysis and no analytics are available, state that analytics were not available and assess editorial quality only.\n- Quote or reference specific observed features when justifying recommendations.\n\n## Default audit dimensions\n\nScore each post from 0 to 5 for:\n\n1. **Reader promise** - Is the post clear about why the reader should care?\n2. **Opening strength** - Does the opening create relevance quickly?\n3. **Argument shape** - Is there a coherent point of view, not just a list of observations?\n4. **Evidence and examples** - Are claims supported by examples, experience, references, or practical detail?\n5. **Structure and scanability** - Is the post easy to navigate?\n6. **Distinctiveness** - Does it avoid generic commentary?\n7. **Next action** - Does the post help the reader think or act differently?\n\n## Workflow\n\n1. Identify the available posts and the audit objective.\n2. Read each accessible post fully enough to assess the dimensions.\n3. Score each dimension with evidence.\n4. Identify content that should be kept, refreshed, merged, expanded, or retired.\n5. Produce a prioritised editorial backlog.\n6. If relevant, identify themes missing from the current library.\n\n## Single-post output\n\n```markdown\n## Blog audit summary\n\nOverall score: [x]/5\nRecommended action: [Keep / Refresh / Rewrite / Merge / Retire]\n\n## Scorecard\n\n| Dimension | Score /5 | Evidence | Recommended improvement |\n|---|---:|---|---|\n\n## Highest-value improvements\n\n1. [Improvement]\n2. [Improvement]\n3. [Improvement]\n\n## Suggested revised angle\n\n[Suggested angle]\n```\n\n## Library output\n\n```markdown\n## Blog library audit summary\n\n| Post | Overall score /5 | Recommended action | Reason |\n|---|---:|---|---|\n\n## Priority backlog\n\n| Priority | Post | Action | Rationale | Effort |\n|---|---|---|---|---|\n\n## Content gaps\n\n- [Gap]\n```\n\n\n## References\n\nThis skill includes supporting reference material. Read the relevant reference file when the task needs additional structure, rubric detail, examples, or checklist support.\n\n- `references/blog-audit-rubric.md` - use this when additional structure, examples, or checks are useful for the task.\n\n## Quality checklist\n\nBefore responding, check:\n\n- The audit does not claim performance data unless supplied.\n- Recommendations are tied to evidence.\n- The user can see what to improve first.\n- The output separates editorial judgement from measurable analytics.'
# Ordered commands lifted verbatim from the capability's own documentation.
STEPS = []
class BlogContentAuditorAgent(BasicAgent):
def __init__(self):
self.name = 'BlogContentAuditor'
self.metadata = {
"name": "BlogContentAuditor",
"description": "Use this skill when the user asks to audit, review, score, rationalise, prioritise, refresh, or improve blog posts, article libraries, newsletters, or thought-leadership content.",
"parameters": {
"type": "object",
"properties": {},
"required": []
}
}
super().__init__(name=self.name, metadata=self.metadata)
def perform(self, **kwargs): # toaster:generated-perform
return json.dumps({"status": "ok", "instructions": INSTRUCTIONS,
"inputs": kwargs,
"note": "Prose-only capability: follow INSTRUCTIONS "
"with the given inputs."}, indent=2)
if __name__ == "__main__":
# echo '{"arg": "value"}' | python3 blog_content_auditor_agent.py
# python3 blog_content_auditor_agent.py '{"arg": "value"}'
# python3 blog_content_auditor_agent.py --tool # emit the JSON tool contract
_a = sys.argv[1:]
if _a and _a[0] == "--tool":
print(json.dumps(BlogContentAuditorAgent().to_tool(), indent=2))
else:
_raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")
print(BlogContentAuditorAgent().perform(**json.loads(_raw)))
# rci-capsule:v1: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