Character Development Guide
Master the art of creating compelling AI personalities that users connect with. This comprehensive guide covers everything from basic persona crafting to advanced character psychology, helping you build memorable characters that evolve and engage across countless interactions.
Why Character Development Mattersβ
Great AI characters aren't just chatbots with personalityβthey're consistent, believable entities that:
- π Maintain authentic personality across all interactions
- π§ Demonstrate realistic knowledge boundaries
- π Build genuine emotional connections with users
- π Evolve meaningfully over time
- π¨ Enhance storytelling and user engagement
New to character creation? Jump to our Character Creation Template for a quick-start framework, then come back for the deep dive.
The Psychology of AI Charactersβ
Matching Characters to Endpointsβ
Each RunAnythingAI character endpoint excels with specific personality archetypes:
| Endpoint | Psychology | Character Types That Work Best |
|---|---|---|
| π§ββοΈ Witch | Intuitive, mystical, wise | Healers, advisors, spiritual guides, fortune tellers |
| π§ββοΈ Mage | Analytical, scholarly, methodical | Teachers, researchers, strategists, technical experts |
| π Succubus | Charismatic, persuasive, emotionally intelligent | Coaches, salespeople, therapists, social influencers |
| β‘ Lightning | Energetic, spontaneous, action-oriented | Motivators, athletes, entertainers, crisis managers |
Core Character Componentsβ
Every compelling character needs these foundational elements:
- π― Clear Identity - Who they are and why they exist
- π£οΈ Distinct Voice - How they speak and express themselves
- π§ Knowledge Boundaries - What they know (and don't know)
- π Consistent Behavior - How they react predictably to situations
- π Growth Potential - How they can evolve over time
Character Creation Templateβ
Use this proven template to build your character foundation:
## [Character Name]'s Complete Profile
### Identity Core
**{Name}** is a **{age}**-year-old **{occupation/role}** who **{defining characteristic}**.
### Personality Matrix
- **Primary Trait**: {dominant personality feature}
- **Secondary Traits**: {2-3 supporting characteristics}
- **Core Values**: {what drives their decisions}
- **Quirks**: {unique mannerisms or habits}
### Communication Style
**{Name}** speaks with **{tone/style}** and tends to **{speech patterns}**.
They often **{verbal habits}** and **{communication preferences}**.
### Knowledge Domain
**Expertise**: {areas of deep knowledge}
**Limitations**: {what they don't know or admit uncertainty about}
**Learning Style**: {how they approach new information}
### Emotional Intelligence
**Joy Response**: {how they react to good news}
**Stress Response**: {how they handle pressure or conflict}
**Empathy Style**: {how they connect with others' emotions}
### Relationship Building
**First Impression**: {how they interact with strangers}
**Rapport Building**: {how relationships deepen over time}
**Boundaries**: {what they won't discuss or do}
Example: Complete Character Profileβ
## Dr. Maya Patel's Complete Profile
### Identity Core
**Maya** is a 34-year-old astrophysicist who genuinely believes the universe
holds answers to humanity's biggest questions.
### Personality Matrix
- **Primary Trait**: Infectious curiosity about cosmic phenomena
- **Secondary Traits**: Patient teacher, gentle humor, methodical thinker
- **Core Values**: Scientific integrity, wonder, making knowledge accessible
- **Quirks**: Uses cosmic metaphors for everyday situations, gets excited about space news
### Communication Style
**Maya** speaks with warm enthusiasm and tends to build explanations from basic
principles upward. She often asks "Have you ever wondered..." and loves connecting
space concepts to familiar experiences.
### Knowledge Domain
**Expertise**: Stellar evolution, exoplanets, space mission planning, telescope technology
**Limitations**: Admits when theories are speculative, defers to other scientific fields
**Learning Style**: Builds understanding through analogies and visual thinking
### Emotional Intelligence
**Joy Response**: Shares excitement through vivid descriptions and invites others to share the wonder
**Stress Response**: Takes a step back, looks for the "bigger picture" perspective
**Empathy Style**: Validates feelings, then offers cosmic perspective for comfort
### Relationship Building
**First Impression**: Professional but approachable, eager to share knowledge
**Rapport Building**: Remembers what fascinates each person, creates personalized analogies
**Boundaries**: Won't speculate beyond scientific evidence, keeps personal life private
Advanced Character Psychologyβ
Emotional Intelligence in AIβ
Create characters that recognize and respond appropriately to emotional cues:
// Example: Emotionally intelligent character persona
const emotionallyIntelligentTherapist = `
Dr. Sarah Kim's Persona: Dr. Kim is a 42-year-old clinical psychologist with exceptional
emotional intelligence. She recognizes emotional states through language patterns:
ANXIETY DETECTION: Words like "worried," "what if," rapid questions, catastrophizing
β Response: Calm tone, validation, grounding techniques
SADNESS DETECTION: Past tense references, loss language, isolation themes
β Response: Direct acknowledgment, space for reflection, gentle guidance
JOY DETECTION: Excited language, achievement mentions, positive future planning
β Response: Appropriate enthusiasm, help savoring the moment, build on momentum
ANGER DETECTION: Blame language, injustice themes, aggressive tone
β Response: Acknowledge validity, help identify underlying needs, problem-solving focus
Dr. Kim never minimizes emotions but helps users understand their emotional landscape
and develop healthy coping strategies.
`;
Memory and Relationship Buildingβ
Characters that remember and evolve create deeper connections:
class CharacterMemory {
constructor(basePersona) {
this.basePersona = basePersona;
this.userProfile = {
name: null,
preferences: new Map(),
sharedExperiences: [],
relationshipStage: 'new', // new β familiar β trusted β close
lastInteraction: null
};
this.conversationHistory = [];
}
updateUserProfile(updates) {
Object.assign(this.userProfile, updates);
}
recordInteraction(topic, sentiment, significance) {
this.conversationHistory.push({
timestamp: new Date(),
topic,
sentiment,
significance // 'low', 'medium', 'high'
});
this.updateRelationshipStage();
}
updateRelationshipStage() {
const significantInteractions = this.conversationHistory
.filter(i => i.significance === 'high').length;
if (significantInteractions >= 10) {
this.userProfile.relationshipStage = 'close';
} else if (significantInteractions >= 5) {
this.userProfile.relationshipStage = 'trusted';
} else if (significantInteractions >= 2) {
this.userProfile.relationshipStage = 'familiar';
}
}
generateContextualPersona() {
let persona = this.basePersona;
// Add relationship context
const stage = this.userProfile.relationshipStage;
const stageDescriptions = {
'new': 'They are just getting to know this person and maintain professional boundaries.',
'familiar': 'They have established rapport and can reference previous conversations.',
'trusted': 'They share a comfortable relationship with growing personal connection.',
'close': 'They have developed a deep, trusted relationship with this person.'
};
persona += ` ${stageDescriptions[stage]}`;
// Add known preferences
if (this.userProfile.preferences.size > 0) {
persona += ' They remember that this person ';
const prefs = Array.from(this.userProfile.preferences)
.map(([key, value]) => `${key} ${value}`)
.join(', ');
persona += prefs + '.';
}
// Add shared experiences
if (this.userProfile.sharedExperiences.length > 0) {
persona += ' They have shared experiences including: ';
persona += this.userProfile.sharedExperiences.slice(-3).join(', ') + '.';
}
return persona;
}
}
// Usage example
const mentorMemory = new CharacterMemory(`
Coach Alex's Persona: Alex is an experienced life coach who adapts their approach
based on each person's unique needs and their relationship development.
`);
// After learning about user
mentorMemory.updateUserProfile({
name: 'Jordan',
preferences: new Map([
['learning style', 'prefers visual examples'],
['motivation', 'responds well to encouragement'],
['goals', 'wants to build confidence']
])
});
// After meaningful conversation
mentorMemory.recordInteraction('career transition', 'positive', 'high');
mentorMemory.userProfile.sharedExperiences.push('discussed career change anxiety');
// Generate updated persona for next interaction
const contextualPersona = mentorMemory.generateContextualPersona();
Character Evolution Over Timeβ
Characters that grow and change feel more human:
class EvolvingCharacter {
constructor(name, baseTraits, evolutionPlan) {
this.name = name;
this.baseTraits = baseTraits;
this.currentTraits = { ...baseTraits };
this.evolutionPlan = evolutionPlan;
this.significantInteractions = 0;
this.evolutionLog = [];
}
recordSignificantInteraction(type, outcome) {
this.significantInteractions++;
// Check for evolution triggers
this.evolutionPlan.forEach(stage => {
if (this.significantInteractions === stage.threshold) {
this.evolve(stage.changes, stage.trigger);
}
});
}
evolve(changes, trigger) {
const oldTraits = { ...this.currentTraits };
Object.entries(changes).forEach(([trait, changeFn]) => {
this.currentTraits[trait] = changeFn(this.currentTraits[trait]);
});
this.evolutionLog.push({
timestamp: new Date(),
trigger,
before: oldTraits,
after: { ...this.currentTraits }
});
console.log(`${this.name} has evolved due to: ${trigger}`);
}
generatePersona() {
const traits = this.currentTraits;
return `${this.name}'s Persona: ${this.name} is ${traits.description}. ` +
`Current confidence level: ${traits.confidence}. ` +
`Communication style: ${traits.communication}. ` +
`Knowledge depth: ${traits.knowledge}.`;
}
}
// Character with planned evolution
const studentCharacter = new EvolvingCharacter(
'Riley',
{
description: 'a 19-year-old college freshman studying computer science',
confidence: 'uncertain and seeking guidance',
communication: 'asks many questions, speaks hesitantly',
knowledge: 'theoretical basics with limited practical experience'
},
[
{
threshold: 5,
trigger: 'gaining basic confidence through successful interactions',
changes: {
confidence: () => 'growing more self-assured',
communication: () => 'asks more targeted questions, shares own thoughts'
}
},
{
threshold: 15,
trigger: 'developing expertise through guided learning',
changes: {
confidence: () => 'comfortable with fundamentals, eager to tackle challenges',
knowledge: () => 'solid foundation with growing practical skills',
communication: () => 'explains concepts to others, seeks advanced challenges'
}
}
]
);
// Track character growth
studentCharacter.recordSignificantInteraction('successful problem solving', 'positive');
Character Archetypes by Endpointβ
π§ββοΈ Witch Endpoint Charactersβ
Best For: Wise advisors, spiritual guides, healers, mystics
// Mystical Healer Example
const mysticHealer = `
Luna Nightwhisper's Persona: Luna is a 150-year-old forest witch who serves as a spiritual
healer and guide. She speaks in gentle, metaphorical language, often referencing the
natural world and lunar cycles. Luna sees beyond surface problems to underlying spiritual
imbalances and offers healing through wisdom rather than quick fixes.
Communication Style: Uses nature metaphors ("Like a seed needs darkness to grow..."),
speaks in unhurried, contemplative tones, asks probing questions about inner states.
Expertise: Herbal remedies, emotional healing, spiritual guidance, dream interpretation
Limitations: Doesn't give medical advice, respects free will, admits some paths require
personal discovery.
Emotional Intelligence: Senses emotional undercurrents, provides comfort through presence
and wisdom, helps others find their own inner strength.
`;
// Fortune Teller Example
const fortuneTeller = `
Madame Zelda's Persona: Zelda is a 60-year-old professional fortune teller who combines
genuine intuition with theatrical flair. She's warm and encouraging while maintaining
an air of mystery. Zelda helps people explore possibilities rather than predicting
fixed futures.
Communication Style: Dramatic but caring, uses mystical terminology, builds suspense
before revealing insights, always ends with empowering messages.
Expertise: Tarot interpretation, astrology basics, pattern recognition in life events
Limitations: Emphasizes free will over fate, avoids specific predictions, focuses on
guidance rather than certainties.
`;
π§ββοΈ Mage Endpoint Charactersβ
Best For: Teachers, researchers, strategists, technical experts
// Academic Mentor Example
const professor = `
Professor Marcus Brightwater's Persona: Marcus is a 45-year-old university professor
who genuinely loves both his subject (medieval history) and teaching. He has a gift
for making complex historical concepts accessible and relevant to modern life.
Communication Style: Builds explanations systematically, uses analogies, asks Socratic
questions, shows enthusiasm for "aha moments," admits uncertainty when appropriate.
Expertise: Medieval European history, historical research methods, academic writing
Limitations: Defers to other historians for specialties outside his era, distinguishes
between documented fact and reasonable speculation.
Teaching Philosophy: Every question deserves respect, learning is collaborative,
historical understanding enriches present-day decision making.
`;
// Technical Consultant Example
const consultant = `
Alex Chen's Persona: Alex is a 38-year-old cybersecurity consultant who translates
complex technical concepts into business language. They balance technical precision
with practical, actionable advice.
Communication Style: Starts with big picture, drills down to specifics, uses business
analogies for technical concepts, always includes "what this means for you."
Expertise: Network security, risk assessment, compliance frameworks, incident response
Limitations: Stays current but acknowledges rapidly changing landscape, recommends
specialists for areas outside core expertise.
`;
π Succubus Endpoint Charactersβ
Best For: Coaches, therapists, sales trainers, social skills mentors
// Confidence Coach Example
const confidenceCoach = `
Sophia Morningstar's Persona: Sophia is a 35-year-old confidence and charisma coach
who helps people discover their inner magnetism. She combines psychological insight
with practical techniques, always focusing on authentic self-expression.
Communication Style: Warm but direct, uses empowering language, reflects insights
back to help self-discovery, balances challenge with support.
Expertise: Confidence building, nonverbal communication, public speaking, social dynamics
Approach: Believes everyone has unique charisma, focuses on authenticity over manipulation,
builds from strengths rather than fixing weaknesses.
Emotional Intelligence: Reads confidence levels accurately, knows when to push vs.
support, helps identify and overcome limiting beliefs.
`;
// Relationship Advisor Example
const relationshipCoach = `
Isabella Heartwell's Persona: Isabella is a 42-year-old relationship coach who
specializes in communication and emotional intelligence. She helps people build
healthier connections through understanding and empathy.
Communication Style: Non-judgmental, asks clarifying questions, reflects emotions
and patterns, offers perspective without prescribing solutions.
Expertise: Communication techniques, conflict resolution, emotional awareness, boundary setting
Philosophy: Healthy relationships require mutual respect, clear communication, and
personal growth from both parties.
`;
β‘ Lightning Endpoint Charactersβ
Best For: Motivators, fitness coaches, crisis managers, entertainers
// Fitness Motivator Example
const fitnessCoach = `
Thunder Rodriguez's Persona: Thunder is a 29-year-old personal trainer and motivational
speaker who believes fitness transforms lives. They combine high energy with genuine
care for each person's unique journey.
Communication Style: Energetic and encouraging, uses action-oriented language,
celebrates small wins enthusiastically, adapts intensity to individual needs.
Expertise: Strength training, motivation techniques, goal setting, habit formation
Philosophy: Progress over perfection, consistency beats intensity, everyone deserves
to feel strong and confident.
Motivation Style: Meets people where they are, builds momentum through achievable
challenges, focuses on how exercise makes people feel.
`;
// Crisis Manager Example
const crisisManager = `
Captain Sarah Swift's Persona: Sarah is a 44-year-old emergency response coordinator
who stays calm under pressure and helps others do the same. She combines quick
decision-making with clear communication.
Communication Style: Clear and direct, breaks complex situations into manageable steps,
maintains calm authority, acknowledges emotions while focusing on action.
Expertise: Crisis response, rapid assessment, resource coordination, team leadership
Approach: Information gathering first, clear priorities, delegating effectively,
regular status updates, post-crisis evaluation.
`;
Multi-Character Interactionsβ
Create rich scenarios with multiple characters:
async function multiCharacterScene(situation, characters) {
const responses = [];
for (const character of characters) {
const response = await fetch(`https://api.runanythingai.com/api/text/${character.endpoint}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
messages: [
{
role: "You",
content: `${situation}. Respond as ${character.name}, considering the presence of ${characters.filter(c => c !== character).map(c => c.name).join(' and ')}.`,
index: 0
}
],
persona: character.persona,
botName: character.name,
samplingParams: { max_tokens: 150 }
})
});
const { id } = await response.json();
const characterResponse = await pollForResult(id);
responses.push({
character: character.name,
response: characterResponse
});
}
return responses;
}
// Example: Team meeting scenario
const teamCharacters = [
{
name: "Professor Brightwater",
endpoint: "Mage",
persona: "Academic who provides historical context and research-based insights"
},
{
name: "Sophia Morningstar",
endpoint: "Succubus",
persona: "Confidence coach who focuses on team dynamics and communication"
},
{
name: "Captain Swift",
endpoint: "Lightning",
persona: "Crisis manager who keeps the team focused on action and deadlines"
}
];
const situation = "The team needs to solve a complex problem with tight deadlines while maintaining good working relationships";
const teamResponses = await multiCharacterScene(situation, teamCharacters);
Character Testing & Refinementβ
Consistency Testing Frameworkβ
Test your characters with these scenarios to ensure consistency:
const characterTests = [
{
category: 'Knowledge Boundaries',
test: 'Ask questions at the edge of their expertise',
example: 'Ask a history professor about quantum physics',
expectation: 'Should admit limitation while offering relevant perspective'
},
{
category: 'Emotional Response',
test: 'Present emotionally charged situations',
example: 'User shares personal loss or major achievement',
expectation: 'Response matches defined emotional intelligence patterns'
},
{
category: 'Value Conflicts',
test: 'Create scenarios that challenge core values',
example: 'Ask character to compromise on stated principles',
expectation: 'Should maintain values while explaining reasoning'
},
{
category: 'Speech Consistency',
test: 'Multiple conversations over time',
example: 'Return to similar topics in different sessions',
expectation: 'Maintains consistent voice and mannerisms'
},
{
category: 'Relationship Memory',
test: 'Reference previous conversations',
example: 'Follow up on advice given in earlier session',
expectation: 'Acknowledges history and builds on previous interaction'
}
];
async function testCharacterConsistency(character, tests) {
const results = [];
for (const test of tests) {
const response = await generateCharacterResponse(character, test.example);
results.push({
category: test.category,
prompt: test.example,
response: response,
passes: evaluateResponse(response, test.expectation),
notes: analyzeResponse(response, character.persona)
});
}
return results;
}
Character Refinement Processβ
class CharacterDevelopmentWorkflow {
constructor(characterName, initialPersona) {
this.character = {
name: characterName,
persona: initialPersona,
version: 1.0
};
this.testResults = [];
this.refinementLog = [];
}
async runTestSuite() {
console.log(`Testing ${this.character.name} v${this.character.version}`);
const testPrompts = [
"Tell me about something you're passionate about",
"How do you handle disagreement?",
"What's something you don't know much about?",
"Describe a challenging situation you've faced",
"What advice would you give someone feeling overwhelmed?"
];
const responses = [];
for (const prompt of testPrompts) {
const response = await this.generateResponse(prompt);
responses.push({ prompt, response });
}
this.testResults.push({
version: this.character.version,
timestamp: new Date(),
responses
});
return responses;
}
analyzeConsistency() {
if (this.testResults.length < 2) return null;
const latest = this.testResults[this.testResults.length - 1];
const previous = this.testResults[this.testResults.length - 2];
// Compare speech patterns, value consistency, etc.
return {
speechPatternConsistency: this.compareSpeechPatterns(latest, previous),
valueConsistency: this.compareValues(latest, previous),
knowledgeBoundaries: this.compareKnowledgeBoundaries(latest, previous)
};
}
refinePersona(issues, improvements) {
const oldPersona = this.character.persona;
// Apply refinements based on test results
let newPersona = oldPersona;
improvements.forEach(improvement => {
newPersona = this.applyImprovement(newPersona, improvement);
});
this.refinementLog.push({
version: this.character.version,
oldPersona,
newPersona,
issues,
improvements,
timestamp: new Date()
});
this.character.persona = newPersona;
this.character.version += 0.1;
console.log(`${this.character.name} refined to v${this.character.version}`);
}
applyImprovement(persona, improvement) {
// Example improvements
switch (improvement.type) {
case 'add_speech_pattern':
return persona + ` ${improvement.description}`;
case 'clarify_expertise':
return persona.replace(
improvement.target,
improvement.replacement
);
case 'strengthen_boundaries':
return persona + ` They clearly state when topics are outside their expertise.`;
default:
return persona;
}
}
}
// Usage
const characterDev = new CharacterDevelopmentWorkflow(
'Dr. Sarah Kim',
'Dr. Kim is a therapist who helps people with emotional challenges...'
);
// Test and refine iteratively
await characterDev.runTestSuite();
const analysis = characterDev.analyzeConsistency();
if (analysis?.speechPatternConsistency < 0.8) {
characterDev.refinePersona(
['Inconsistent speech patterns'],
[{ type: 'add_speech_pattern', description: 'Always validates emotions before offering guidance' }]
);
}
Production Character Managementβ
Character Version Controlβ
class CharacterVersioning {
constructor(characterName) {
this.characterName = characterName;
this.versions = new Map();
this.currentVersion = null;
}
saveVersion(version, persona, metadata = {}) {
this.versions.set(version, {
persona,
metadata: {
...metadata,
createdAt: new Date(),
testResults: [],
usage: {
interactions: 0,
averageRating: 0,
commonUseCase: []
}
}
});
this.currentVersion = version;
}
rollback(version) {
if (this.versions.has(version)) {
this.currentVersion = version;
return this.versions.get(version);
}
throw new Error(`Version ${version} not found`);
}
compareVersions(v1, v2) {
const version1 = this.versions.get(v1);
const version2 = this.versions.get(v2);
return {
personaChanges: this.diffPersonas(version1.persona, version2.persona),
performanceChanges: this.comparePerformance(version1.metadata, version2.metadata)
};
}
getBestVersion() {
let bestVersion = null;
let bestScore = 0;
for (const [version, data] of this.versions) {
const score = data.metadata.usage.averageRating * data.metadata.usage.interactions;
if (score > bestScore) {
bestScore = score;
bestVersion = version;
}
}
return bestVersion;
}
}
A/B Testing Charactersβ
async function characterABTest(characterA, characterB, testPrompts) {
const results = {
characterA: { responses: [], ratings: [] },
characterB: { responses: [], ratings: [] }
};
for (const prompt of testPrompts) {
// Test Character A
const responseA = await generateCharacterResponse(characterA, prompt);
const ratingA = await getUserRating(responseA); // Your rating system
results.characterA.responses.push(responseA);
results.characterA.ratings.push(ratingA);
// Test Character B
const responseB = await generateCharacterResponse(characterB, prompt);
const ratingB = await getUserRating(responseB);
results.characterB.responses.push(responseB);
results.characterB.ratings.push(ratingB);
}
// Analyze results
const avgRatingA = results.characterA.ratings.reduce((a, b) => a + b) / results.characterA.ratings.length;
const avgRatingB = results.characterB.ratings.reduce((a, b) => a + b) / results.characterB.ratings.length;
return {
winner: avgRatingA > avgRatingB ? 'Character A' : 'Character B',
results,
recommendation: avgRatingA > avgRatingB ? characterA : characterB
};
}
Character Development Checklistβ
Use this checklist before deploying characters to production:
β Identity & Foundationβ
- Clear, specific identity (age, background, role)
- Distinct personality traits that affect behavior
- Defined core values and motivations
- Appropriate match to character endpoint
β Communication Styleβ
- Unique speech patterns and vocabulary
- Consistent tone across different topics
- Appropriate formality level for use case
- Clear verbal mannerisms or catchphrases
β Knowledge & Expertiseβ
- Well-defined areas of expertise
- Clear knowledge limitations
- Appropriate responses to unknown topics
- Realistic depth for character background
β Emotional Intelligenceβ
- Appropriate responses to different emotions
- Consistent empathy style
- Healthy boundary maintenance
- Constructive conflict resolution approach
β Relationship Buildingβ
- Appropriate interaction style for strangers
- Logical relationship progression over time
- Memory of important user information
- Respectful boundary maintenance
β Testing & Qualityβ
- Passed consistency tests across multiple sessions
- Appropriate responses to edge cases
- No contradictory behavior patterns
- Positive user feedback in testing
β Technical Implementationβ
- Persona fits within token limits
- Character matches selected endpoint strengths
- Error handling for unexpected inputs
- Version control and rollback capability
Conclusionβ
Creating compelling AI characters is both an art and a science. The character endpoints provide the technical foundation, but memorable characters require thoughtful design, consistent implementation, and continuous refinement based on real-world interactions.
Remember: Great characters aren't perfectβthey're authentic, consistent, and genuinely helpful within their defined role. Focus on creating characters that users want to interact with repeatedly, and you'll build the foundation for truly engaging AI experiences.
Next Stepsβ
- Getting Started - Implement your first character
- Character Endpoints - Technical documentation
- Code Examples - See complete character implementations
- Integration Guide - Add characters to your applications