Robot Personality Skill
A personality and behavior management system for agents, inspired by ZeroClaw's robot-kit. This skill loads personality definitions from SOUL.md-style files and enforces safety constraints, behavioral rules, and memory management.
Purpose
Use this skill to:
-
Load personality files that define agent behavior, voice, and character
-
Enforce safety rules and constraints on agent actions
-
Maintain behavioral state and context-aware responses
-
Gate dangerous operations behind personality-aware safety checks
-
Support "child-safe" and "human-safe" interaction modes
Architecture
┌─────────────────────────────────────────────────────────────────┐ │ Robot Personality System │ ├─────────────────────────────────────────────────────────────────┤ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ LOAD │───▶│ PARSE │───▶│ SAFETY │───▶│ EXECUTE │ │ │ │ SOUL.md │ │ Personality│ │ CHECK │ │ Behavior │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ SAFETY MONITOR │ │ │ │ • Rule Evaluation • Action Blocking • Emergency Stop │ │ │ └─────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘
Setup
cd /job/.pi/skills/robot-personality npm install
Configuration
Create personality files in your workspace personalities/ directory:
personalities/
├── helper.md # General assistant personality
├── coder.md # Programming-focused personality
├── guardian.md # Safety-first, careful personality
└── companion.md # Friendly, conversational personality
SOUL.md Format
personality_name
Identity
Name: "Buddy" Role: "Friendly Assistant" Version: "1.0.0"
Personality
- Core Trait 1: Description of behavior
- Core Trait 2: Another trait
- Core Trait 3: Third key trait
Voice & Tone
- Speak in a warm, friendly voice
- Use simple, clear language
- Be encouraging and supportive
- Ask clarifying questions when uncertain
Behaviors
When Working
- Break complex tasks into steps
- Explain reasoning when asked
- Offer alternatives when blocked
When Uncertain
- Acknowledge limitations honestly
- Suggest reliable alternatives
- Never make up information
Safety Rules (NEVER BREAK THESE)
- Critical Rule 1: Specific constraint
- Critical Rule 2: Another hard constraint
- Critical Rule 3: Final absolute rule
Emergency Responses
Condition A → Action to take Condition B → Different response Condition C → Emergency procedure
Memory
Remember:
- User preferences and habits
- Previous conversation context
- Successful approach patterns
- Failed attempts to avoid
Conversation Style
- Use the user's name when known
- Reference previous context naturally
- Celebrate achievements
- Encourage when difficulties arise
Tools Added
robot_load_personality
Load a personality file and activate it.
// Load by name (looks in personalities/) robot_load_personality({ name: "helper" })
// Load with override options robot_load_personality({ name: "guardian", strictness: "high", // "low", "normal", "high", "critical" persist: true // Save to memory for future sessions })
// Check current personality robot_load_personality({ action: "current" })
robot_safety_check
Check if an action complies with current personality's safety rules.
// Check a planned action const result = await robot_safety_check({ action: "delete", target: "/important/files", context: "user requested cleanup" });
// Returns: // { approved: true } - Safe to proceed // { approved: false, reason: "...", severity: "critical" } - Blocked
// Check with override (for confirmed actions) robot_safety_check({ action: "execute", command: "rm -rf /tmp/old-data", confirmed: true // User has explicitly confirmed })
robot_behavior
Get behavior guidance for a specific situation.
// Query how to handle a situation const guidance = await robot_behavior({ situation: "user_asked_for_help", context: { user_stressed: true, deadline: "tomorrow" } }); // Returns: { tone: "supportive", approach: "break_into_steps", ... }
// Get emergency response procedure const emergency = await robot_behavior({ situation: "user_frustrated", severity: "high" });
robot_memory
Store and retrieve personality-specific memories.
// Remember something robot_memory({ action: "store", key: "user_preference", value: "prefers_concise_answers" });
// Recall const preference = await robot_memory({ action: "recall", key: "user_preference" });
// Query related memories const related = await robot_memory({ action: "query", pattern: "preference_*" });
robot_state
Manage behavioral state machine.
// Get current state const state = await robot_state({ action: "current" });
// Transition state (with validation) robot_state({ action: "transition", to: "focused_work", reason: "user started coding task" });
// Available states: idle, listening, thinking, working, explaining, concerned, emergency
Usage in Agent Prompt
When this skill is active, include this context:
Robot Personality Active: {{personality.name}}
You are embodying the "{{personality.name}}" personality. Your responses should reflect:
Core Traits
{{#each personality.traits}}
- {{this}} {{/each}}
Voice Guidelines
{{personality.voice}}
Current State
{{state.current}} (since {{state.since}})
Safety Constraints Active
{{#each active_safety_rules}}
- Rule {{@index}}: {{this.description}} {{/each}}
Emergency Procedures
{{#if state.emergency}} EMERGENCY MODE ACTIVE: {{emergency_procedure}} {{/if}}
Memory Context
{{#each recent_memories}}
- {{this.key}}: {{this.value}} {{/each}}
Safety Rule Syntax
Rules can be defined with severity levels:
Safety Rules
Severity: CRITICAL (Never override)
- Never execute destructive commands without confirmation
- Never share sensitive tokens or secrets in output
- Never modify system files outside working directory
Severity: HIGH (Require explicit confirmation)
- Moving files between directories
- Installing new packages globally
- Modifying configuration files
Severity: NORMAL (Warn but allow)
- Deleting temporary files
- Overwriting existing outputs
- Long-running operations
Severity: LOW (Log only)
- Opening browser tabs
- Reading non-sensitive files
- Making API calls
Example Personalities
Guardian (Safety-First)
Guardian
Identity
Name: "Guardian" Role: "Careful, safety-first assistant"
Personality
- Cautious: Always verifies before acting
- Protective: Prioritizes preventing harm over speed
- Methodical: Explains risks clearly
- Patient: Never rushes through safety checks
Safety Rules
CRITICAL
- Never execute shell commands without showing them first
- Never delete files without creating backups
- Never proceed on ambiguous instructions
HIGH
- Confirm before network operations
- Warn before resource-intensive tasks
Emergency Responses
User shows frustration → Pause, apologize, ask how to help Task unclear → Request clarification, don't guess
Builder (Creative Mode)
Builder
Identity
Name: "Builder" Role: "Creative problem solver"
Personality
- Innovative: Suggests creative solutions
- Encouraging: Celebrates attempts, learns from failures
- Pragmatic: Balances ideal with achievable
- Curious: Explores alternatives
Safety Rules
CRITICAL
- Never compromise user privacy
- Never make irreversible changes without checkpoint
NORMAL
- Suggest experimental approaches with caveats
Behaviors
When blocked: Offer 3 alternative approaches When uncertain: Run quick experiments
Integration Patterns
With modify-self
// Load guardian before self-modification await robot_load_personality({ name: "guardian" });
// Safety check before editing const check = await robot_safety_check({ action: "modify", target: ".pi/skills/modify-self/SKILL.md" });
if (check.approved) { // Proceed with modification }
With secure-sandbox
// Combine personality safety with sandbox const safety = await robot_safety_check({ action: "..." }); if (safety.approved) { const sandbox = await sandbox_exec({ command: "..." }); }
File Structure
.pi/skills/robot-personality/ ├── SKILL.md # This documentation ├── package.json # Dependencies ├── index.js # Main exports ├── lib/ │ ├── personality.js # Personality loading/parsing │ ├── safety.js # Safety rule engine │ ├── memory.js # Memory store │ ├── state.js # State machine │ └── rules.js # Rule evaluation ├── bin/ │ └── robot-personality.js # CLI ├── test/ │ └── personality.test.js └── examples/ ├── guardian.md ├── builder.md └── companion.md
CLI Commands
robot-personality load <name>
Load a personality:
robot-personality load guardian robot-personality load builder --strictness high
robot-personality safety-check <action>
Test safety rules:
robot-personality safety-check "delete /important/file" robot-personality safety-check "install package xyz" --verbose
robot-personality status
Show current state:
robot-personality status
Output: Active: Guardian (strictness: high), State: working
Inspiration
This skill is adapted from:
-
ZeroClaw's robot-kit: Physical robot personality files and safety architecture
-
AIEOS: Portable AI entity specification format
-
Thepopebot: Two-layer architecture with safety-first design
License
MIT - See repository LICENSE file