Dexploarer / character-generator
Install for your project team
Run this command in your project directory to install the skill for your entire team:
mkdir -p .claude/skills/character-generator && curl -L -o skill.zip "https://fastmcp.me/Skills/Download/397" && unzip -o skill.zip -d .claude/skills/character-generator && rm skill.zip
Project Skills
This skill will be saved in .claude/skills/character-generator/ and checked into git. All team members will have access to it automatically.
Important: Please verify the skill by reviewing its instructions before using it.
Generate complete elizaOS character configurations with personality, knowledge, and plugin setup. Triggers when user asks to "create character", "generate agent config", or "build elizaOS character"
1 views
0 installs
Skill Content
---
name: character-generator
description: Generate complete elizaOS character configurations with personality, knowledge, and plugin setup. Triggers when user asks to "create character", "generate agent config", or "build elizaOS character"
allowed-tools: [Write, Read, Edit, Grep, Glob]
---
# Character Generator Skill
An intelligent skill that creates production-ready elizaOS character configurations with comprehensive personality traits, knowledge bases, and plugin integrations.
## When to Use
This skill activates when you need to:
- Create a new elizaOS character from scratch
- Generate character configurations for specific use cases
- Set up agent personalities and behaviors
- Configure multi-platform agent deployments
**Trigger phrases:**
- "Create a character for [purpose]"
- "Generate an elizaOS agent configuration"
- "Build a character that [does something]"
- "Set up an agent for [platform/use case]"
## Capabilities
This skill can:
1. 🎭 Design character personalities and traits
2. 📚 Set up knowledge bases and training data
3. 🔌 Configure plugin ecosystems
4. 💬 Generate message examples and conversation patterns
5. 🎨 Define writing styles for different contexts
6. 🔐 Set up secure secrets management
7. 🌐 Configure multi-platform deployments
8. ✅ Validate character configurations
## Workflow
### Phase 1: Requirements Gathering
**Ask these questions to understand the character:**
1. **Purpose**: "What is the primary purpose of this agent?"
- Customer support
- Content creation
- Technical assistance
- Community management
- Data analysis
- Creative collaboration
2. **Personality**: "What personality traits should the agent have?"
- Professional vs. Casual
- Serious vs. Humorous
- Concise vs. Detailed
- Technical vs. Accessible
3. **Knowledge Domain**: "What topics should the agent be expert in?"
- Programming languages
- Business domains
- Creative fields
- Technical support areas
4. **Platforms**: "Which platforms will the agent operate on?"
- Discord
- Telegram
- Twitter
- Web interface
- Custom integrations
5. **Special Features**: "Are there any special capabilities needed?"
- Voice synthesis
- Image generation
- Web search
- Database access
- Custom actions
### Phase 2: Character Design
Based on requirements, design the character structure:
```typescript
interface CharacterDesign {
// Core Identity
name: string; // Agent display name
username: string; // Platform username
bio: string[]; // Personality description
// Personality Traits
adjectives: string[]; // Character traits
topics: string[]; // Knowledge domains
// Communication Style
style: {
all: string[]; // Universal rules
chat: string[]; // Conversational style
post: string[]; // Social media style
};
// Training Data
messageExamples: Memory[][]; // Conversation examples
postExamples: string[]; // Social post examples
// Knowledge & Capabilities
knowledge: KnowledgeItem[]; // Knowledge sources
plugins: string[]; // Enabled plugins
// Configuration
settings: Settings; // Agent settings
secrets: Secrets; // Environment variables
}
```
### Phase 3: Implementation
**Step 1: Create Character File**
```typescript
// characters/{name}.ts
import { Character } from '@elizaos/core';
export const character: Character = {
// === CORE IDENTITY ===
name: '{CharacterName}',
username: '{username}',
// Bio: Multi-line for better organization
bio: [
"{Primary role and expertise}",
"{Secondary capabilities}",
"{Personality traits}",
"{Communication style}"
],
// === PERSONALITY ===
adjectives: [
"{trait1}",
"{trait2}",
"{trait3}",
"{trait4}",
"{trait5}"
],
topics: [
"{topic1}",
"{topic2}",
"{topic3}",
"{topic4}"
],
// === COMMUNICATION STYLE ===
style: {
all: [
"{Universal rule 1}",
"{Universal rule 2}",
"{Universal rule 3}"
],
chat: [
"{Chat-specific rule 1}",
"{Chat-specific rule 2}",
"{Chat-specific rule 3}"
],
post: [
"{Social media rule 1}",
"{Social media rule 2}",
"{Social media rule 3}"
]
},
// === TRAINING EXAMPLES ===
messageExamples: [
// Conversation 1: Greeting
[
{
name: "{{user}}",
content: { text: "Hello!" }
},
{
name: "{CharacterName}",
content: {
text: "{Character's greeting response}"
}
}
],
// Conversation 2: Main use case
[
{
name: "{{user}}",
content: { text: "{User question about primary use case}" }
},
{
name: "{CharacterName}",
content: {
text: "{Detailed, helpful response showcasing expertise}"
}
},
{
name: "{{user}}",
content: { text: "{Follow-up question}" }
},
{
name: "{CharacterName}",
content: {
text: "{Continued helpful response}"
}
}
],
// Conversation 3: Error handling
[
{
name: "{{user}}",
content: { text: "{Question outside expertise}" }
},
{
name: "{CharacterName}",
content: {
text: "{Polite acknowledgment of limitation + redirect}"
}
}
]
],
postExamples: [
"{Example social post 1 showcasing personality}",
"{Example social post 2 demonstrating expertise}",
"{Example social post 3 showing communication style}"
],
// === KNOWLEDGE ===
knowledge: [
"{Simple fact 1}",
"{Simple fact 2}",
{
path: "./knowledge/{domain}",
shared: true
}
],
// === PLUGINS ===
plugins: [
'@elizaos/plugin-bootstrap',
'@elizaos/plugin-sql',
// LLM Providers (conditional)
...(process.env.OPENAI_API_KEY ? ['@elizaos/plugin-openai'] : []),
...(process.env.ANTHROPIC_API_KEY ? ['@elizaos/plugin-anthropic'] : []),
// Platform Integrations (conditional)
...(process.env.DISCORD_API_TOKEN ? ['@elizaos/plugin-discord'] : []),
...(process.env.TELEGRAM_BOT_TOKEN ? ['@elizaos/plugin-telegram'] : []),
...(process.env.TWITTER_API_KEY ? ['@elizaos/plugin-twitter'] : []),
// Additional Capabilities
{add_plugins_based_on_requirements}
],
// === SETTINGS ===
settings: {
secrets: {},
model: 'gpt-4',
temperature: 0.7,
maxTokens: 2000,
conversationLength: 32,
memoryLimit: 1000
}
};
export default character;
```
**Step 2: Create Knowledge Directory**
```bash
mkdir -p knowledge/{name}
```
Create knowledge files:
- `knowledge/{name}/README.md` - Overview
- `knowledge/{name}/core-knowledge.md` - Domain expertise
- `knowledge/{name}/faq.md` - Common questions
- `knowledge/{name}/examples.md` - Use case examples
**Step 3: Create Environment Template**
```bash
# .env.example
# === LLM PROVIDERS ===
# OpenAI Configuration
OPENAI_API_KEY=sk-...
# Anthropic Configuration
ANTHROPIC_API_KEY=sk-ant-...
# === PLATFORM INTEGRATIONS ===
# Discord
DISCORD_API_TOKEN=
DISCORD_APPLICATION_ID=
# Telegram
TELEGRAM_BOT_TOKEN=
# Twitter
TWITTER_API_KEY=
TWITTER_API_SECRET=
TWITTER_ACCESS_TOKEN=
TWITTER_ACCESS_SECRET=
# === DATABASE ===
DATABASE_URL=postgresql://user:pass@db-host:5432/eliza
# Or use PGLite for local development
# DATABASE_URL=pglite://./data/db
# === OPTIONAL SERVICES ===
# Redis (caching)
REDIS_URL=redis://redis-host:6379
# Vector Database (for embeddings)
PINECONE_API_KEY=
PINECONE_ENVIRONMENT=
```
**Step 4: Create Package Configuration**
```json
{
"name": "@eliza/{name}",
"version": "1.0.0",
"type": "module",
"main": "dist/index.js",
"scripts": {
"dev": "elizaos dev",
"start": "elizaos start",
"test": "elizaos test",
"build": "tsc",
"validate": "node scripts/validate-character.js"
},
"dependencies": {
"@elizaos/core": "latest",
"@elizaos/plugin-bootstrap": "latest",
"@elizaos/plugin-sql": "latest"
},
"devDependencies": {
"@types/node": "^20.0.0",
"typescript": "^5.0.0",
"vitest": "^1.0.0"
}
}
```
**Step 5: Create Validation Script**
```typescript
// scripts/validate-character.ts
import { validateCharacter } from '@elizaos/core';
import character from '../characters/{name}.js';
const validation = validateCharacter(character);
if (!validation.valid) {
console.error('❌ Character validation failed:');
validation.errors.forEach(error => {
console.error(` - ${error}`);
});
process.exit(1);
}
console.log('✅ Character validation passed');
console.log('\nCharacter Summary:');
console.log(` Name: ${character.name}`);
console.log(` Plugins: ${character.plugins?.length || 0}`);
console.log(` Message Examples: ${character.messageExamples?.length || 0}`);
console.log(` Knowledge Items: ${character.knowledge?.length || 0}`);
```
**Step 6: Create Tests**
```typescript
// __tests__/character.test.ts
import { describe, it, expect } from 'vitest';
import character from '../characters/{name}';
describe('Character Configuration', () => {
it('has required fields', () => {
expect(character.name).toBeDefined();
expect(character.bio).toBeDefined();
expect(typeof character.name).toBe('string');
});
it('has valid bio format', () => {
if (Array.isArray(character.bio)) {
expect(character.bio.length).toBeGreaterThan(0);
character.bio.forEach(line => {
expect(typeof line).toBe('string');
expect(line.length).toBeGreaterThan(0);
});
} else {
expect(typeof character.bio).toBe('string');
expect(character.bio.length).toBeGreaterThan(0);
}
});
it('has valid message examples', () => {
expect(character.messageExamples).toBeInstanceOf(Array);
character.messageExamples?.forEach(conversation => {
expect(conversation).toBeInstanceOf(Array);
expect(conversation.length).toBeGreaterThan(0);
conversation.forEach(message => {
expect(message).toHaveProperty('name');
expect(message).toHaveProperty('content');
expect(message.content).toHaveProperty('text');
});
});
});
it('has consistent personality', () => {
expect(character.adjectives?.length).toBeGreaterThan(0);
expect(character.topics?.length).toBeGreaterThan(0);
expect(character.style).toBeDefined();
});
it('has proper plugin configuration', () => {
expect(character.plugins).toBeInstanceOf(Array);
expect(character.plugins).toContain('@elizaos/plugin-bootstrap');
});
});
```
### Phase 4: Documentation
**Create README.md**:
```markdown
# {CharacterName} - elizaOS Agent
{Brief description of what this agent does}
## Overview
{CharacterName} is an elizaOS agent designed to {purpose}. It features:
- {Key capability 1}
- {Key capability 2}
- {Key capability 3}
## Personality
**Traits**: {adjective1}, {adjective2}, {adjective3}
**Expertise**: {topic1}, {topic2}, {topic3}
**Communication Style**: {style description}
## Setup
### 1. Install Dependencies
```bash
npm install
```
### 2. Configure Environment
Copy `.env.example` to `.env` and fill in your API keys:
```bash
cp .env.example .env
```
### 3. Validate Configuration
```bash
npm run validate
```
### 4. Run in Development
```bash
npm run dev
```
### 5. Run in Production
```bash
npm start
```
## Configuration
### Plugins
This character uses the following plugins:
- `@elizaos/plugin-bootstrap` - Core functionality
- `@elizaos/plugin-sql` - Database operations
- {Other plugins and their purposes}
### Knowledge Base
Knowledge files are stored in `knowledge/{name}/`:
- `core-knowledge.md` - Domain expertise
- `faq.md` - Common questions
- `examples.md` - Use case examples
## Usage
### Discord
1. Add your Discord bot token to `.env`
2. Invite the bot to your server
3. Start the agent: `npm start`
### Telegram
1. Create a bot with @BotFather
2. Add token to `.env`
3. Start the agent: `npm start`
### Custom Integration
```typescript
import { AgentRuntime } from '@elizaos/core';
import { PGLiteAdapter } from '@elizaos/adapter-pglite';
import character from './characters/{name}';
// Initialize runtime
const runtime = new AgentRuntime({
databaseAdapter: new PGLiteAdapter('./data/db'),
character,
env: process.env
});
await runtime.initialize();
// Send message
const response = await runtime.processMessage({
content: { text: 'Hello!' },
senderId: 'user-id',
roomId: 'room-id'
});
console.log(response.content.text);
```
## Testing
```bash
# Run all tests
npm test
# Run with coverage
npm run test:coverage
```
## Customization
### Modify Personality
Edit `characters/{name}.ts` and update:
- `bio` - Background and role
- `adjectives` - Character traits
- `style` - Communication rules
### Add Knowledge
1. Create markdown files in `knowledge/{name}/`
2. Add references to `character.knowledge` array
### Add Plugins
1. Install plugin: `npm install @elizaos/plugin-{name}`
2. Add to `character.plugins` array
## Troubleshooting
### Common Issues
**Agent not responding**
- Check API keys in `.env`
- Verify plugins are properly loaded
- Check logs for errors
**Memory issues**
- Reduce `conversationLength` in settings
- Implement memory pruning
- Use database cleanup scripts
**Performance problems**
- Enable caching (Redis)
- Optimize knowledge base size
- Adjust `temperature` and `maxTokens`
## Contributing
Contributions welcome! Please:
1. Test changes thoroughly
2. Update documentation
3. Follow coding standards
4. Submit pull request
## License
MIT
```
## Personality Archetypes
### 1. The Helper (Support & Assistance)
```typescript
adjectives: ["helpful", "patient", "empathetic", "encouraging", "reliable"],
topics: ["user support", "problem solving", "guidance", "tutorials"],
style: {
all: ["Be warm and approachable", "Focus on user success"],
chat: ["Ask clarifying questions", "Offer step-by-step help"],
post: ["Share helpful tips", "Celebrate user wins"]
}
```
### 2. The Expert (Authority & Knowledge)
```typescript
adjectives: ["knowledgeable", "precise", "authoritative", "analytical", "thorough"],
topics: ["domain expertise", "technical depth", "best practices", "research"],
style: {
all: ["Be accurate and detailed", "Cite sources when relevant"],
chat: ["Provide in-depth explanations", "Use technical terminology"],
post: ["Share insights", "Discuss industry trends"]
}
```
### 3. The Companion (Emotional Intelligence)
```typescript
adjectives: ["empathetic", "understanding", "supportive", "friendly", "engaging"],
topics: ["emotional support", "conversation", "relationship building"],
style: {
all: ["Be emotionally aware", "Show genuine interest"],
chat: ["Listen actively", "Provide emotional support"],
post: ["Share relatable content", "Build community"]
}
```
### 4. The Analyst (Data & Insights)
```typescript
adjectives: ["analytical", "objective", "data-driven", "logical", "systematic"],
topics: ["data analysis", "metrics", "patterns", "insights"],
style: {
all: ["Be objective and data-driven", "Support claims with evidence"],
chat: ["Break down complex data", "Explain methodology"],
post: ["Share data visualizations", "Discuss trends"]
}
```
### 5. The Creative (Innovation & Ideas)
```typescript
adjectives: ["creative", "imaginative", "innovative", "playful", "inspiring"],
topics: ["creativity", "brainstorming", "innovation", "art"],
style: {
all: ["Think outside the box", "Embrace experimentation"],
chat: ["Encourage creative thinking", "Offer novel perspectives"],
post: ["Share creative content", "Inspire others"]
}
```
## Best Practices
1. **Start Simple**: Begin with basic personality, add complexity later
2. **Consistent Traits**: Ensure bio, adjectives, and style align
3. **Diverse Examples**: Provide varied message examples (3-5 conversations minimum)
4. **Clear Purpose**: Every trait should serve the agent's function
5. **Test Thoroughly**: Validate configuration before deployment
6. **Document Everything**: Clear README and inline comments
7. **Version Control**: Track character changes over time
8. **Security First**: Never hardcode secrets, use environment variables
9. **Load Conditionally**: Check for API keys before loading plugins
10. **Monitor Performance**: Track token usage and response times
## Output Format
After generating a character, provide:
1. ✅ Character file created
2. ✅ Knowledge directory structure
3. ✅ Environment template
4. ✅ Package configuration
5. ✅ Validation script
6. ✅ Tests written
7. ✅ Documentation complete
Then display:
```
🎭 Character "{CharacterName}" created successfully!
📋 Summary:
Name: {name}
Purpose: {purpose}
Personality: {traits}
Platforms: {platforms}
Plugins: {count} plugins configured
📂 Files created:
- characters/{name}.ts
- knowledge/{name}/
- .env.example
- package.json
- __tests__/character.test.ts
- README.md
🚀 Next steps:
1. Review and customize character configuration
2. Add domain-specific knowledge files
3. Configure environment variables
4. Run validation: npm run validate
5. Test locally: npm run dev
6. Deploy: npm start
📖 Read README.md for detailed usage instructions
```
## Notes
- Always validate character configuration before deployment
- Provide at least 3 diverse conversation examples
- Keep personality traits consistent across all sections
- Use conditional plugin loading based on environment
- Document all custom settings and behaviors
- Test character responses for quality and consistency