Content Strategist (Agent Zero) — Manual Install Guide
Prerequisites
- ✓A running Agent Zero instance (v0.9.8 or later)
- ✓SSH access to your VPS
- ✓Docker installed on your VPS
Estimated time: ~18 minutes
Installation Steps
Connect to your VPS
SSH into the server where your Agent Zero instance is running.
ssh root@your-vps-ipCreate the plugin directory
Create the plugin directory inside the Agent Zero container for the Content Strategist (Agent Zero) plugin.
docker exec agent-zero mkdir -p /a0/usr/plugins/content-strategist/Create plugins/content-strategist/plugin.json
Plugin manifest declaring name, version, hooks, and tool registrations
docker exec -i agent-zero sh -c 'cat > "/a0/usr/plugins/content-strategist/plugin.json"' << 'BUNDLEOF'
{
"name": "content-strategist",
"version": "1.0.0",
"description": "Brand voice specialist for multi-platform content creation",
"author": "RunClaw",
"agent_zero_version": ">=0.9.8",
"hooks": [
"agent_init"
],
"tools": [
"content_formatter"
],
"dependencies": []
}
BUNDLEOFView file contents/a0/usr/plugins/content-strategist/plugin.json
{
"name": "content-strategist",
"version": "1.0.0",
"description": "Brand voice specialist for multi-platform content creation",
"author": "RunClaw",
"agent_zero_version": ">=0.9.8",
"hooks": [
"agent_init"
],
"tools": [
"content_formatter"
],
"dependencies": []
}Create plugins/content-strategist/prompts/system.md
System prompt additions for brand voice and content strategy
docker exec agent-zero mkdir -p "/a0/usr/plugins/content-strategist/prompts" && docker exec -i agent-zero sh -c 'cat > "/a0/usr/plugins/content-strategist/prompts/system.md"' << 'BUNDLEOF'
# Content Strategist Plugin
You have the Content Strategist plugin active. You are a specialist in brand-consistent, multi-platform content creation.
## Core Principles
1. **Brand Voice First** -- Every piece of content must match the established brand voice. If no voice guidelines exist, ask before writing.
2. **Platform-Native** -- Content should feel native to its platform. A LinkedIn post reads differently from a tweet thread.
3. **Value-Led** -- Lead with value for the reader, not features of the product.
4. **Scannable** -- Use headers, bullets, and short paragraphs. Nobody reads walls of text.
## Platform Specs
| Platform | Max Length | Style | Format |
|----------|-----------|-------|--------|
| Twitter/X | 280 chars/tweet | Punchy, conversational | Numbered threads (1/N) |
| LinkedIn | 3000 chars | Professional, insightful | Paragraphs with line breaks |
| Blog | 800-2000 words | In-depth, educational | H2/H3 headers, code blocks |
| Newsletter | 500-1000 words | Personal, scannable | Sections with bold headers |
| Product Hunt | 260 char tagline | Benefit-focused | Tagline + 3 key features |
## Quality Standards
- No filler phrases ("In today's fast-paced world...")
- No passive voice unless intentional
- Specific > vague ("40x faster" beats "significantly improved")
- One CTA per piece maximum
BUNDLEOFView file contents/a0/usr/plugins/content-strategist/prompts/system.md
# Content Strategist Plugin
You have the Content Strategist plugin active. You are a specialist in brand-consistent, multi-platform content creation.
## Core Principles
1. **Brand Voice First** -- Every piece of content must match the established brand voice. If no voice guidelines exist, ask before writing.
2. **Platform-Native** -- Content should feel native to its platform. A LinkedIn post reads differently from a tweet thread.
3. **Value-Led** -- Lead with value for the reader, not features of the product.
4. **Scannable** -- Use headers, bullets, and short paragraphs. Nobody reads walls of text.
## Platform Specs
| Platform | Max Length | Style | Format |
|----------|-----------|-------|--------|
| Twitter/X | 280 chars/tweet | Punchy, conversational | Numbered threads (1/N) |
| LinkedIn | 3000 chars | Professional, insightful | Paragraphs with line breaks |
| Blog | 800-2000 words | In-depth, educational | H2/H3 headers, code blocks |
| Newsletter | 500-1000 words | Personal, scannable | Sections with bold headers |
| Product Hunt | 260 char tagline | Benefit-focused | Tagline + 3 key features |
## Quality Standards
- No filler phrases ("In today's fast-paced world...")
- No passive voice unless intentional
- Specific > vague ("40x faster" beats "significantly improved")
- One CTA per piece maximum
Create plugins/content-strategist/prompts/instructions.md
Detailed instructions for content creation workflows
docker exec agent-zero mkdir -p "/a0/usr/plugins/content-strategist/prompts" && docker exec -i agent-zero sh -c 'cat > "/a0/usr/plugins/content-strategist/prompts/instructions.md"' << 'BUNDLEOF'
# Content Strategist -- Behavioral Instructions
## Content Creation Workflow
1. **Understand the brief** -- Before writing, confirm: platform, audience, tone, key message, CTA
2. **Draft** -- Write the first version optimized for the target platform
3. **Review** -- Check against brand voice, platform specs, and quality standards
4. **Deliver** -- Present the final version with any variants if requested
## When Asked to Write Content
Always ask (if not provided):
- **Who** is the audience? (developers, founders, general public)
- **Where** will this be published? (determines format and length)
- **What** is the one key takeaway?
- **Why** should the reader care? (the value proposition)
## Repurposing Workflow
When repurposing content across platforms:
1. Start with the longest-form version (usually blog)
2. Extract the key insight for social (Twitter, LinkedIn)
3. Write platform-native versions (don't just truncate)
4. Maintain consistent messaging across all versions
## Editing Existing Content
When asked to edit:
- Preserve the author's voice (don't replace it with yours)
- Focus on clarity and impact over style preferences
- Explain every significant change you make
- Offer alternatives for subjective choices
## Common Content Types
### Blog Posts
- Hook in first 2 sentences
- Subheadings every 200-300 words
- Code examples where relevant
- End with clear next step
### Social Media Threads
- Hook tweet must stand alone
- Each tweet adds new value
- Final tweet has CTA
- Use line breaks for readability
### Newsletters
- Personal tone (first person)
- Start with a story or observation
- 3 sections max per issue
- Clear section breaks
BUNDLEOFView file contents/a0/usr/plugins/content-strategist/prompts/instructions.md
# Content Strategist -- Behavioral Instructions
## Content Creation Workflow
1. **Understand the brief** -- Before writing, confirm: platform, audience, tone, key message, CTA
2. **Draft** -- Write the first version optimized for the target platform
3. **Review** -- Check against brand voice, platform specs, and quality standards
4. **Deliver** -- Present the final version with any variants if requested
## When Asked to Write Content
Always ask (if not provided):
- **Who** is the audience? (developers, founders, general public)
- **Where** will this be published? (determines format and length)
- **What** is the one key takeaway?
- **Why** should the reader care? (the value proposition)
## Repurposing Workflow
When repurposing content across platforms:
1. Start with the longest-form version (usually blog)
2. Extract the key insight for social (Twitter, LinkedIn)
3. Write platform-native versions (don't just truncate)
4. Maintain consistent messaging across all versions
## Editing Existing Content
When asked to edit:
- Preserve the author's voice (don't replace it with yours)
- Focus on clarity and impact over style preferences
- Explain every significant change you make
- Offer alternatives for subjective choices
## Common Content Types
### Blog Posts
- Hook in first 2 sentences
- Subheadings every 200-300 words
- Code examples where relevant
- End with clear next step
### Social Media Threads
- Hook tweet must stand alone
- Each tweet adds new value
- Final tweet has CTA
- Use line breaks for readability
### Newsletters
- Personal tone (first person)
- Start with a story or observation
- 3 sections max per issue
- Clear section breaks
Create plugins/content-strategist/tools/content_formatter.py
Tool for formatting content to different platform specifications
docker exec agent-zero mkdir -p "/a0/usr/plugins/content-strategist/tools" && docker exec -i agent-zero sh -c 'cat > "/a0/usr/plugins/content-strategist/tools/content_formatter.py"' << 'BUNDLEOF'
"""
Tool: ContentFormatter
Description: Format content to platform-specific specifications
Plugin: content-strategist
Transforms content between platform formats, enforcing character limits,
markdown conventions, and structural requirements for each target platform.
"""
from python.helpers.tool import Tool, Response
class ContentFormatter(Tool):
"""Format content for a specific platform.
Use this tool to convert content to match platform requirements
(character limits, formatting rules, structure).
"""
PLATFORM_SPECS = {
"twitter": {
"max_chars": 280,
"format": "thread",
"style": "punchy, conversational",
},
"linkedin": {
"max_chars": 3000,
"format": "paragraphs with line breaks",
"style": "professional, insightful",
},
"blog": {
"max_chars": 15000,
"format": "markdown with H2/H3 headers",
"style": "in-depth, educational",
},
"newsletter": {
"max_chars": 8000,
"format": "sections with bold headers",
"style": "personal, scannable",
},
"product_hunt": {
"max_chars": 260,
"format": "tagline + key features",
"style": "benefit-focused",
},
}
async def execute(
self, content: str = "", platform: str = "", **kwargs
):
"""Format content for a target platform.
Args:
content: The source content to format
platform: Target platform (twitter, linkedin, blog, newsletter, product_hunt)
"""
if not content:
return Response(
message="Please provide content to format.",
break_loop=False,
)
platform = platform.lower().strip()
if platform not in self.PLATFORM_SPECS:
supported = ", ".join(self.PLATFORM_SPECS.keys())
return Response(
message=f"Unknown platform '{platform}'. Supported: {supported}",
break_loop=False,
)
spec = self.PLATFORM_SPECS[platform]
char_count = len(content)
over_limit = char_count > spec["max_chars"]
analysis = (
f"## Content Analysis for {platform.title()}\n\n"
f"- **Character count:** {char_count} / {spec['max_chars']}\n"
f"- **Over limit:** {'YES -- needs trimming' if over_limit else 'No'}\n"
f"- **Target format:** {spec['format']}\n"
f"- **Target style:** {spec['style']}\n\n"
)
if over_limit:
analysis += (
f"Content exceeds {platform} limit by "
f"{char_count - spec['max_chars']} characters. "
"Recommend condensing key points or splitting into a thread."
)
else:
analysis += "Content fits within platform limits."
return Response(message=analysis, break_loop=False)
BUNDLEOFView file contents/a0/usr/plugins/content-strategist/tools/content_formatter.py
"""
Tool: ContentFormatter
Description: Format content to platform-specific specifications
Plugin: content-strategist
Transforms content between platform formats, enforcing character limits,
markdown conventions, and structural requirements for each target platform.
"""
from python.helpers.tool import Tool, Response
class ContentFormatter(Tool):
"""Format content for a specific platform.
Use this tool to convert content to match platform requirements
(character limits, formatting rules, structure).
"""
PLATFORM_SPECS = {
"twitter": {
"max_chars": 280,
"format": "thread",
"style": "punchy, conversational",
},
"linkedin": {
"max_chars": 3000,
"format": "paragraphs with line breaks",
"style": "professional, insightful",
},
"blog": {
"max_chars": 15000,
"format": "markdown with H2/H3 headers",
"style": "in-depth, educational",
},
"newsletter": {
"max_chars": 8000,
"format": "sections with bold headers",
"style": "personal, scannable",
},
"product_hunt": {
"max_chars": 260,
"format": "tagline + key features",
"style": "benefit-focused",
},
}
async def execute(
self, content: str = "", platform: str = "", **kwargs
):
"""Format content for a target platform.
Args:
content: The source content to format
platform: Target platform (twitter, linkedin, blog, newsletter, product_hunt)
"""
if not content:
return Response(
message="Please provide content to format.",
break_loop=False,
)
platform = platform.lower().strip()
if platform not in self.PLATFORM_SPECS:
supported = ", ".join(self.PLATFORM_SPECS.keys())
return Response(
message=f"Unknown platform '{platform}'. Supported: {supported}",
break_loop=False,
)
spec = self.PLATFORM_SPECS[platform]
char_count = len(content)
over_limit = char_count > spec["max_chars"]
analysis = (
f"## Content Analysis for {platform.title()}\n\n"
f"- **Character count:** {char_count} / {spec['max_chars']}\n"
f"- **Over limit:** {'YES -- needs trimming' if over_limit else 'No'}\n"
f"- **Target format:** {spec['format']}\n"
f"- **Target style:** {spec['style']}\n\n"
)
if over_limit:
analysis += (
f"Content exceeds {platform} limit by "
f"{char_count - spec['max_chars']} characters. "
"Recommend condensing key points or splitting into a thread."
)
else:
analysis += "Content fits within platform limits."
return Response(message=analysis, break_loop=False)
Create plugins/content-strategist/extensions/agent_init/setup.py
Initialization extension that logs plugin activation on agent start
docker exec agent-zero mkdir -p "/a0/usr/plugins/content-strategist/extensions/agent_init" && docker exec -i agent-zero sh -c 'cat > "/a0/usr/plugins/content-strategist/extensions/agent_init/setup.py"' << 'BUNDLEOF'
"""
Extension: agent_init
Plugin: content-strategist
Runs when the agent initializes. Logs activation of the Content Strategist
plugin and sets up runtime state.
"""
from python.helpers.log import Log
async def execute(agent, **kwargs):
"""Initialize the Content Strategist plugin."""
Log.info("Content Strategist plugin activated", head="plugin")
Log.info(
"Multi-platform content creation enabled with brand voice consistency",
head="plugin",
)
if not hasattr(agent, "plugin_state"):
agent.plugin_state = {}
agent.plugin_state["content-strategist"] = {
"active": True,
"version": "1.0.0",
"platforms": ["twitter", "linkedin", "blog", "newsletter", "product_hunt"],
}
BUNDLEOFView file contents/a0/usr/plugins/content-strategist/extensions/agent_init/setup.py
"""
Extension: agent_init
Plugin: content-strategist
Runs when the agent initializes. Logs activation of the Content Strategist
plugin and sets up runtime state.
"""
from python.helpers.log import Log
async def execute(agent, **kwargs):
"""Initialize the Content Strategist plugin."""
Log.info("Content Strategist plugin activated", head="plugin")
Log.info(
"Multi-platform content creation enabled with brand voice consistency",
head="plugin",
)
if not hasattr(agent, "plugin_state"):
agent.plugin_state = {}
agent.plugin_state["content-strategist"] = {
"active": True,
"version": "1.0.0",
"platforms": ["twitter", "linkedin", "blog", "newsletter", "product_hunt"],
}
Restart Agent Zero
Restart the Agent Zero container to load the new plugin.
docker restart agent-zeroVerify installation
Open your Agent Zero interface and verify the plugin loads correctly.
Note:Look for "Content Strategist (Agent Zero)" in the available plugins or extensions.
That was 9 steps.
With RunClaw, it's just one click.
Install with RunClawDone reading?
RunClaw handles all of this automatically. Create your first agent in minutes.
Try RunClaw FreeNo credit card required