RunClawMarketplace
✍️

Content Strategist (Agent Zero) — Manual Install Guide

Agent ZeroBeginner

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

1

Connect to your VPS

SSH into the server where your Agent Zero instance is running.

Terminal
ssh root@your-vps-ip
2

Create the plugin directory

Create the plugin directory inside the Agent Zero container for the Content Strategist (Agent Zero) plugin.

Terminal
docker exec agent-zero mkdir -p /a0/usr/plugins/content-strategist/
3

Create plugins/content-strategist/plugin.json

Plugin manifest declaring name, version, hooks, and tool registrations

Terminal
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": []
}
BUNDLEOF
View 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": []
}
4

Create plugins/content-strategist/prompts/system.md

System prompt additions for brand voice and content strategy

Terminal
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

BUNDLEOF
View 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
5

Create plugins/content-strategist/prompts/instructions.md

Detailed instructions for content creation workflows

Terminal
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

BUNDLEOF
View 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
6

Create plugins/content-strategist/tools/content_formatter.py

Tool for formatting content to different platform specifications

Terminal
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)

BUNDLEOF
View 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)
7

Create plugins/content-strategist/extensions/agent_init/setup.py

Initialization extension that logs plugin activation on agent start

Terminal
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"],
    }

BUNDLEOF
View 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"],
    }
8

Restart Agent Zero

Restart the Agent Zero container to load the new plugin.

Terminal
docker restart agent-zero
9

Verify 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 RunClaw

Done reading?

RunClaw handles all of this automatically. Create your first agent in minutes.

Try RunClaw Free

No credit card required