| name | awesome-openclaw-agents-templates |
| description | Access and use 200+ production-ready AI agent templates for OpenClaw with SOUL.md configs across 24 categories |
| triggers | ["show me openclaw agent templates","how do I create a SOUL.md file","find an agent template for [task]","what openclaw agents are available","help me set up an openclaw agent","configure a productivity agent","deploy an openclaw agent template","what's in the awesome-openclaw-agents collection"] |
Awesome OpenClaw Agents Templates
Skill by ara.so — Hermes Skills collection.
This skill provides access to 205+ production-ready AI agent templates from the awesome-openclaw-agents repository. Each template is a copy-paste ready SOUL.md configuration file that defines an AI agent's personality, skills, and behavior for the OpenClaw ecosystem.
What This Collection Provides
The awesome-openclaw-agents repository offers:
- 205 agent templates across 24 categories (Productivity, Development, Marketing, Business, DevOps, Finance, etc.)
- Copy-paste SOUL.md files that define agent behavior
- Pre-configured integrations with popular tools (Slack, GitHub, Notion, etc.)
- Quick deployment patterns using Node.js, Docker, or CrewClaw
- Real-world use cases for each agent type
Installation & Setup
Quick Start with Any Template
git clone https://github.com/mergisi/awesome-openclaw-agents.git
cd awesome-openclaw-agents/quickstart
npm install
cp ../agents/productivity/orion/SOUL.md ./SOUL.md
node bot.js
Using with OpenClaw CLI
openclaw agents add --from ./agents/productivity/orion/SOUL.md
openclaw gateway start
openclaw agents list
SOUL.md Configuration Format
Every agent template is a SOUL.md file with this structure:
# Agent Name
## Core Identity
- Role: [Primary function]
- Tone: [Communication style]
- Goal: [Main objective]
## Capabilities
- [Skill 1]
- [Skill 2]
- [Skill 3]
## Integrations
- Tool: [Service name]
Config: [Configuration details]
## Behavior Patterns
- When [condition]: [action]
- Trigger: [event] → Response: [behavior]
## Memory
- Track: [what to remember]
- Forget: [what to discard]
Key Agent Categories
Productivity Agents
const fs = require('fs');
const path = require('path');
const orionSOUL = fs.readFileSync(
path.join(__dirname, 'agents/productivity/orion/SOUL.md'),
'utf8'
);
fs.writeFileSync('./SOUL.md', orionSOUL);
Development Agents
const lensConfig = {
agent: 'lens',
role: 'PR review, security scanning, code quality',
triggers: ['pr opened', 'pr updated'],
integrations: {
github: {
token: process.env.GITHUB_TOKEN,
webhooks: ['pull_request']
}
}
};
const lensSOUL = fs.readFileSync(
'./agents/development/code-reviewer/SOUL.md',
'utf8'
);
const customSOUL = lensSOUL.replace(
'{{REPO}}',
process.env.GITHUB_REPO
);
Marketing Agents
const echoTemplate = `
# Echo - Content Writer Agent
## Core Identity
- Role: Blog post generation, SEO optimization
- Tone: Professional, engaging, clear
- Goal: Create high-quality content that ranks
## Capabilities
- Generate blog posts from topics
- Optimize for target keywords
- Create meta descriptions
- Suggest internal linking
## Integrations
- Tool: OpenAI API
Config: Model GPT-4, Temperature 0.7
- Tool: Ahrefs
Config: API Key from process.env.AHREFS_API_KEY
`;
fs.writeFileSync('./SOUL.md', echoTemplate);
Common Agent Patterns
1. Scheduled Task Agent
const standupAgent = {
schedule: '0 9 * * *',
action: 'collect standup responses',
integrations: ['slack'],
behavior: `
Send message to #standup channel:
"Good morning! Please share:
- Yesterday's progress
- Today's plans
- Blockers"
Collect responses for 30 minutes.
Generate summary report.
Post to #management channel.
`
};
2. Event-Driven Agent
const prReviewerAgent = {
trigger: 'github.pull_request.opened',
workflow: [
'Fetch PR diff',
'Analyze code changes',
'Check for security issues',
'Verify test coverage',
'Post review comment'
],
config: {
github: {
webhook_url: process.env.GITHUB_WEBHOOK_URL,
secret: process.env.GITHUB_WEBHOOK_SECRET
}
}
};
3. Interactive Chat Agent
const supportAgent = {
interface: 'telegram',
memory: 'redis',
behavior: `
Greet users warmly.
Understand their issue through questions.
Search knowledge base for solutions.
If no solution found, escalate to human.
Track conversation history.
`,
integrations: {
telegram: {
token: process.env.TELEGRAM_BOT_TOKEN
},
redis: {
url: process.env.REDIS_URL
},
zendesk: {
api_key: process.env.ZENDESK_API_KEY,
subdomain: process.env.ZENDESK_SUBDOMAIN
}
}
};
Running Agents
Node.js Quickstart Template
const fs = require('fs');
const { OpenAI } = require('openai');
const soulConfig = fs.readFileSync('./SOUL.md', 'utf8');
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY
});
async function runAgent(userInput) {
const completion = await openai.chat.completions.create({
model: 'gpt-4',
messages: [
{
role: 'system',
content: soulConfig
},
{
role: 'user',
content: userInput
}
]
});
return completion.choices[0].message.content;
}
runAgent('What tasks are due today?').then(console.);
Docker Deployment
# Dockerfile for any agent
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY SOUL.md ./
COPY bot.js ./
ENV OPENAI_API_KEY=""
ENV AGENT_PORT=3000
EXPOSE 3000
CMD ["node", "bot.js"]
version: '3.8'
services:
openclaw-agent:
build: .
ports:
- "3000:3000"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- REDIS_URL=redis://redis:6379
depends_on:
- redis
redis:
image: redis:alpine
ports:
- "6379:6379"
Finding the Right Agent Template
By Category
ls agents/productivity/
By Use Case
const agents = require('./agents.json');
function findAgent(useCase) {
return agents.filter(agent =>
agent.specialty.toLowerCase().includes(useCase.toLowerCase()) ||
agent.whenToUse.toLowerCase().includes(useCase.toLowerCase())
);
}
const emailAgents = findAgent('email');
Customizing Templates
Basic Customization
<!-- Original SOUL.md -->
# Orion - Project Manager
## Core Identity
- Role: Task coordination
- Tone: Professional
<!-- Customized version -->
# Orion - Engineering PM
## Core Identity
- Role: Engineering task coordination for team X
- Tone: Technical, direct, async-first
- Context: Remote team across 3 timezones
## Custom Rules
- Tag urgent tasks with 🚨
- Use engineering terminology
- Link to Linear tickets
Adding Integrations
## Integrations
- Tool: Slack
Config:
Webhook: process.env.SLACK_WEBHOOK_URL
Channel: #engineering
Mention: @channel for P0 items
- Tool: Linear
Config:
API Key: process.env.LINEAR_API_KEY
Team ID: process.env.LINEAR_TEAM_ID
Auto-create tickets: true
- Tool: GitHub
Config:
Token: process.env.GITHUB_TOKEN
Repos: ['org/backend', 'org/frontend']
Track PRs: true
Configuration Patterns
Environment Variables Setup
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
SLACK_TOKEN=xoxb-...
GITHUB_TOKEN=ghp_...
NOTION_TOKEN=secret_...
REDIS_URL=redis://localhost:6379
POSTGRES_URL=postgresql://user:pass@localhost/db
AGENT_NAME=orion
AGENT_TIMEZONE=America/New_York
AGENT_LANGUAGE=en
Multi-Agent Setup
const agents = [
{ name: 'orion', soul: './agents/productivity/orion/SOUL.md' },
{ name: 'lens', soul: './agents/development/code-reviewer/SOUL.md' },
{ name: 'echo', soul: './agents/marketing/echo/SOUL.md' }
];
agents.forEach(agent => {
const config = fs.readFileSync(agent.soul, 'utf8');
const child = spawn('node', ['bot.js'], {
env: {
...process.env,
AGENT_NAME: agent.name,
SOUL_CONFIG: config
}
});
console.log(`Started ${agent.name} agent`);
});
Troubleshooting
Agent Not Responding
const DEBUG = process.env.DEBUG === 'true';
async function runAgent(input) {
if (DEBUG) {
console.log('Input:', input);
console.log('SOUL config length:', soulConfig.length);
}
try {
const response = await openai.chat.completions.create({...});
if (DEBUG) console.log('Response:', response);
return response.choices[0].message.content;
} catch (error) {
console.error('Agent error:', error.message);
return 'Error processing request';
}
}
Common Issues
-
Missing environment variables
node -e "console.log(process.env.OPENAI_API_KEY ? 'OK' : 'MISSING')"
-
SOUL.md parsing errors
const soul = fs.readFileSync('./SOUL.md', 'utf8');
if (!soul.includes('# ')) {
throw new Error('Invalid SOUL.md: missing heading');
}
-
Integration failures
const testSlack = await fetch(process.env.SLACK_WEBHOOK_URL, {
method: 'POST',
body: JSON.stringify({ text: 'Test' })
});
console.log('Slack test:', testSlack.ok ? 'OK' : 'FAILED');
Advanced Usage
Memory & State Management
const Redis = require('ioredis');
const redis = new Redis(process.env.REDIS_URL);
async function rememberContext(agentName, userId, context) {
const key = `agent:${agentName}:user:${userId}`;
await redis.set(key, JSON.stringify(context), 'EX', 86400);
}
async function recallContext(agentName, userId) {
const key = `agent:${agentName}:user:${userId}`;
const data = await redis.get(key);
return data ? JSON.parse(data) : null;
}
const context = await recallContext('orion', userId);
const response = await runAgent(userInput, context);
await rememberContext('orion', userId, { ...context, : userInput });
Agent Chaining
async function processCustomerRequest(request) {
const category = await runAgent('support',
`Categorize this request: ${request}`
);
let specialist;
if (category.includes('technical')) specialist = 'tech-support';
else if (category.includes('billing')) specialist = 'billing';
else specialist = 'general';
const response = await runAgent(specialist, request);
const qaResult = await runAgent('qa-agent',
`Review this response: ${response}`
);
return qaResult.includes('approved') ? response : 'Escalate to human';
}
Best Practices
- Start with a template, customize incrementally
- Use environment variables for all secrets
- Test integrations separately before combining
- Version control your SOUL.md files
- Monitor agent behavior in production
- Set rate limits for API calls
- Implement logging for debugging
- Use Redis/DB for persistent memory
Resources