Blog Post Structure Pass
Use this skill to improve the structure, argument, flow, and readability of a blog post while preserving the source facts and the author's intended point of view.
Core rules
- Do not invent evidence, examples, client stories, dates, results, or quotes.
- Preserve the author's stance unless asked to change it.
- Improve the shape of the argument before polishing sentences.
- Keep the revised post suitable for the intended audience and channel.
- If important evidence is missing, mark it as a gap rather than filling it in.
Default post skeleton
Use this skeleton as a guide, not a rigid template:
- Hook / tension - Why this matters now.
- Problem - What people usually misunderstand or struggle with.
- Reframe - The more useful way to think about it.
- Practical implications - What changes in decisions, behaviour, governance, delivery, or operations.
- Example or proof - Evidence from supplied material.
- Takeaway - What the reader should do, question, or remember.
Workflow
- Read the source post or draft.
- Identify the current thesis and intended audience.
- Diagnose structural issues: weak opening, unclear argument, repetition, missing transitions, unsupported claims, premature solutioning, or weak ending.
- Create a revised outline.
- Rewrite the post into the improved structure.
- Preserve factual claims from the source and avoid adding unsupported material.
- Provide a short change note only if useful.
Output format
# [Revised title]
[Rewritten post]
---
## Change notes
- [Only include important changes, assumptions, or evidence gaps.]
If the user asks for the structure only, use:
## Recommended structure
1. [Section]
2. [Section]
3. [Section]
## Rationale
[Short explanation]
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/post-structure-patterns.md- use this when additional structure, examples, or checks are useful for the task.
Quality checklist
Before responding, check:
- The revised post has a clear thesis.
- The opening creates relevance quickly.
- The middle develops the argument rather than listing points.
- The ending lands the insight or next action.
- No unsupported facts have been added.
- The copy sounds natural and human.
Run this — do not improvise
This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as blog_post_structure_pass_agent.py and embedded as the fenced Python below (sha256 d945fe9a0407a5e1…; 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_post_structure_pass_agent.py first:
python3 blog_post_structure_pass_agent.py '{"key": "value"}' # arguments as one JSON object
echo '{"key": "value"}' | python3 blog_post_structure_pass_agent.py # or on stdin
python3 blog_post_structure_pass_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.
"""BlogPostStructurePass -- Use this skill when the user asks to restructure, reorganise, improve, rewrite, tighten, or strengthen a blog post, article, newsletter, essay, or thought-leadership draft.
Generated by the rapp skill from blog-post-structure-pass. 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 Post Structure Pass\n\nUse this skill to improve the structure, argument, flow, and readability of a blog post while preserving the source facts and the author's intended point of view.\n\n## Core rules\n\n- Do not invent evidence, examples, client stories, dates, results, or quotes.\n- Preserve the author's stance unless asked to change it.\n- Improve the shape of the argument before polishing sentences.\n- Keep the revised post suitable for the intended audience and channel.\n- If important evidence is missing, mark it as a gap rather than filling it in.\n\n## Default post skeleton\n\nUse this skeleton as a guide, not a rigid template:\n\n1. **Hook / tension** - Why this matters now.\n2. **Problem** - What people usually misunderstand or struggle with.\n3. **Reframe** - The more useful way to think about it.\n4. **Practical implications** - What changes in decisions, behaviour, governance, delivery, or operations.\n5. **Example or proof** - Evidence from supplied material.\n6. **Takeaway** - What the reader should do, question, or remember.\n\n## Workflow\n\n1. Read the source post or draft.\n2. Identify the current thesis and intended audience.\n3. Diagnose structural issues: weak opening, unclear argument, repetition, missing transitions, unsupported claims, premature solutioning, or weak ending.\n4. Create a revised outline.\n5. Rewrite the post into the improved structure.\n6. Preserve factual claims from the source and avoid adding unsupported material.\n7. Provide a short change note only if useful.\n\n## Output format\n\n```markdown\n# [Revised title]\n\n[Rewritten post]\n\n---\n\n## Change notes\n\n- [Only include important changes, assumptions, or evidence gaps.]\n```\n\nIf the user asks for the structure only, use:\n\n```markdown\n## Recommended structure\n\n1. [Section]\n2. [Section]\n3. [Section]\n\n## Rationale\n\n[Short explanation]\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/post-structure-patterns.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 revised post has a clear thesis.\n- The opening creates relevance quickly.\n- The middle develops the argument rather than listing points.\n- The ending lands the insight or next action.\n- No unsupported facts have been added.\n- The copy sounds natural and human."
# Ordered commands lifted verbatim from the capability's own documentation.
STEPS = []
class BlogPostStructurePassAgent(BasicAgent):
def __init__(self):
self.name = 'BlogPostStructurePass'
self.metadata = {
"name": "BlogPostStructurePass",
"description": "Use this skill when the user asks to restructure, reorganise, improve, rewrite, tighten, or strengthen a blog post, article, newsletter, essay, or thought-leadership draft.",
"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_post_structure_pass_agent.py
# python3 blog_post_structure_pass_agent.py '{"arg": "value"}'
# python3 blog_post_structure_pass_agent.py --tool # emit the JSON tool contract
_a = sys.argv[1:]
if _a and _a[0] == "--tool":
print(json.dumps(BlogPostStructurePassAgent().to_tool(), indent=2))
else:
_raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")
print(BlogPostStructurePassAgent().perform(**json.loads(_raw)))
# rci-capsule:v1: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