content-writer
npx machina-cli add skill jikig-ai/soleur/content-writer --openclawContent Writer
Generate full publication-ready article drafts with brand-consistent voice, Eleventy frontmatter, JSON-LD structured data, and optional FAQ sections. Content is validated against the brand guide and presented for user approval before writing to disk.
Phase 0: Prerequisites
<critical_sequence>
Before generating content, verify both prerequisites. If either fails, display the error message and stop.
1. Brand Guide
Check if knowledge-base/overview/brand-guide.md exists.
If missing:
No brand guide found. Run the brand-architect agent first to establish brand identity:
Use the brand-architect agent to define our brand.
Stop execution.
2. Blog Infrastructure
Check if an Eleventy config file exists (eleventy.config.js or .eleventy.js).
If missing:
No Eleventy config found. Run the docs-site skill to scaffold blog infrastructure first.
Stop execution.
</critical_sequence>
Phase 1: Parse Input
Parse the arguments provided after the skill name:
<topic>(required): the article topic or title--outline "..."(optional): article structure as inline text (Markdown list format)--keywords "kw1, kw2, kw3"(optional): target keywords, comma-separated--path <output-path>(optional): where to write the file
Default output path (if --path not provided): auto-generate from topic slug as blog/posts/YYYY-MM-DD-<slug>.md. If blog/posts/ does not exist, check for other common blog directories (posts/, articles/, blog/). If none exist, ask the user for the output path.
Phase 2: Generate Draft
Read the brand guide sections that inform content generation:
- Read
## Voice-- apply brand voice, tone, do's and don'ts - Read
## Channel Notes > ### Blog-- apply blog-specific guidelines (if the section exists) - Read
## Identity-- use mission and positioning for content alignment
Generate a full article draft that:
-
Follows the brand voice from
## Voice -
Incorporates target keywords naturally (if
--keywordsprovided) -
Follows the provided outline structure (if
--outlineprovided) -
Includes complete Eleventy frontmatter:
--- title: "<Article Title>" date: "YYYY-MM-DD" description: "<Meta description, 120-160 characters, includes primary keyword>" tags: - <relevant-tag> layout: "post.njk" --- -
Includes JSON-LD Article structured data after the frontmatter:
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "<title>", "datePublished": "<date>", "description": "<description>" } </script> -
Generates a FAQ section with FAQPage schema if the topic naturally raises 2+ questions. Include the FAQ schema inline:
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "<question>", "acceptedAnswer": { "@type": "Answer", "text": "<answer>" } } ] } </script>
If existing posts are present in the target directory, read 1-2 of them to match frontmatter schema, layout name, and tag conventions.
Phase 3: User Approval
Present the generated draft with word count displayed. Use the AskUserQuestion tool with three options:
- Accept -- Write article to disk
- Edit -- Provide feedback to revise the draft (return to Phase 2 with feedback incorporated)
- Reject -- Discard the draft and exit
If "Edit" is selected, ask for specific feedback, then regenerate incorporating the changes. The user can choose Edit as many times as needed.
Phase 4: Write to Disk
On acceptance, write the article to the output path.
Report: "Article written to <path>. Review and commit when ready."
Important Guidelines
- All content requires explicit user approval before writing -- no auto-write
- Brand guide is a hard prerequisite. Without it, the skill cannot generate brand-consistent content.
- Read the brand guide Voice section during draft generation, not as a separate post-hoc validation pass
- If outline is provided, follow it. If not, generate a reasonable article structure from the topic.
- Do not scaffold blog infrastructure. If missing, direct the user to the docs-site skill.
- JSON-LD should use schema.org/Article type. Use BlogPosting if writing into a blog/ directory.
- Frontmatter fields should match existing posts in the target directory when possible.
- If the brand guide's
## Channel Notes > ### Blogsection is missing, generate content using only the## Voicesection (no error).
Source
git clone https://github.com/jikig-ai/soleur/blob/main/plugins/soleur/skills/content-writer/SKILL.mdView on GitHub Overview
content-writer generates full publication-ready article drafts that align with the brand voice and structure. It outputs Eleventy frontmatter, JSON-LD data, and optional FAQ sections, then presents the draft for user approval before writing to disk.
How This Skill Works
The tool first validates prerequisites: a brand guide at knowledge-base/overview/brand-guide.md and a functioning Eleventy setup. It then parses input such as topic, optional outline, keywords, and output path. Finally, it generates a complete draft with frontmatter and JSON-LD, optionally adds FAQPage data, and awaits user approval before saving to disk.
When to Use It
- Drafting a new blog post that must reflect the brand voice and identity.
- Creating a post with SEO keywords and a defined outline.
- Generating content that includes JSON-LD structured data for better search visibility.
- When starting from a topic and optional outline to accelerate publishing.
- Before publishing to ensure frontmatter, data, and branding are consistent with existing posts.
Quick Start
- Step 1: Provide topic, optional outline, keywords, and path if needed.
- Step 2: Ensure knowledge-base/overview/brand-guide.md and an Eleventy config exist.
- Step 3: Review the generated draft and choose Accept to write to disk, Edit to revise, or Reject to discard.
Best Practices
- Verify the brand guide exists and is up to date before drafting.
- Ensure Eleventy blog infrastructure is scaffolded and accessible.
- Provide a clear topic, outline, and target keywords if SEO is important.
- Review the generated frontmatter, JSON-LD, and optional FAQ for accuracy.
- Keep the output path aligned with your blog directory to avoid write errors.
Example Use Cases
- Topic: 'How to Build a Brand Voice Guide' with an outline and SEO keywords.
- Topic: '5 Tips for Consistent Blog Tone' with keywords and a short outline.
- Topic: 'Case Study: Rebranding Launch' including a FAQ section.
- Topic: 'Beginner's Guide to Eleventy Frontmatter' with structural notes.
- Topic: 'Optimizing Meta Descriptions for Blog Posts' with targeted keywords.