Security Standard

Agents

Compose CUSTOM agents from Base Traits + Voice + Specialization, and manage predefined functional TEAMS.

09
Workflows
15
References
09
Triggers
medium
Effort

The Problem

Ask a generic AI to "spin up some agents" and you get one model calling itself by a different name. There's no real personality differentiation, no voice, no trait system — just the same assistant wearing a costume. When you need a skeptical security reviewer and an enthusiastic UX researcher working in parallel, a model with no composition layer just produces slight restatements of the same output. The parallel work looks parallel but thinks in unison.

How This Skill Approaches It

ComposeAgent.ts merges a base Traits.yaml (expertise × personality × approach) with your personal USER/CUSTOMIZATIONS overrides to produce a unique system prompt per agent, each with a matched ElevenLabs voice and prosody settings. The SpawnTeam workflow loads predefined YAML configs for eight teams — engineering, security, research, content, and more — and fans out parallel Task calls where each agent has a genuinely different cognitive posture. The SpawnObservers workflow adds a read-only oversight layer that votes continue/halt/escalate against the tool-activity log rather than the chat transcript — designed for unattended high-blast-radius runs where you want a defensible audit trail.

  • Traits combine expertise (security, technical, research), personality (skeptical, analytical, enthusiastic), and approach (thorough, rapid, systematic)
  • ComposeAgent.ts merges base + user config, outputs unique prompt + ElevenLabs voice + prosody
  • Predefined teams: engineering, architecture, marketing, design, security, research, content, strategy
  • Observer team variant: read-only oversight that votes continue/halt/escalate
Not for ad-hoc swarms or TeamCreate coordination (use Delegation)

In Action

What you say to your DA, and what the Agents skill actually does.

  • You say "spin up three security agents with different perspectives to review this architecture"
    Runs CreateCustomAgent workflow, calls ComposeAgent.ts three times with distinct trait combinations (e.g., security+skeptical+thorough, security+analytical+rapid, security+enthusiastic+systematic), assigns each a matched voice and prosody, then launches them in parallel via Task calls.
  • You say "get the research team on this competitor analysis"
    Runs SpawnTeam workflow, loads the research team YAML config (Primary Researcher, Contrarian Analyst, Technical Evaluator, Synthesis Writer), composes each member via ComposeAgent.ts, and fans out parallel agents — each with a distinct role and personality of its own.
  • You say "watch this overnight deploy with observers — I want to know if anything looks wrong"
    Runs SpawnObservers workflow, launches read-only observer agents fed from MEMORY/OBSERVABILITY/tool-activity.jsonl, each voting continue/halt/escalate on the primary agent's tool calls with majority rule and escalation surfaced via Pulse.

Inside the Skill

The thinking, frameworks, and architecture that distinguish this skill from a generic version of the same task.

What It Does

Composes custom agents from base traits — expertise plus personality plus approach — and gives each one a matched voice and prosody. Also manages predefined functional teams (engineering, security, design, and more) and a read-only observer team that watches a primary agent and votes continue, halt, or escalate.

The Problem

Spinning up several agents for parallel work usually means they all sound and think alike, so you lose the different angles that made parallelism worth it. The lazy fix — reaching for built-in agent types like Engineer or Architect — gives no real personality, voice, or distinct perspective. This skill composes agents from trait combinations so each one has a genuine specialization and a voice to match, and keeps your customizations separate from the base set so updates never clobber them.

How It Works

Auto-routes when user mentions custom agents, agent creation, or specialized personalities. Does NOT handle agent teams/swarms — "agent team" or "swarm" = built-in Claude Code TeamCreate tool.

Configuration: Base + User Merge

The Agents skill uses the standard PAI SYSTEM/USER two-tier pattern:

Location Purpose Updates With PAI?
Data/Traits.yaml Base traits, example voices Yes
USER/CUSTOMIZATIONS/SKILLS/Agents/Traits.yaml Your voices, prosody, agents No

How it works: ComposeAgent.ts loads base traits, then merges user customizations over them. Your customizations are never overwritten by PAI updates.

User Customization Directory

Create your customizations at:

~/.claude/PAI/USER/CUSTOMIZATIONS/SKILLS/Agents/
├── Traits.yaml       # Your traits, voices, prosody settings
├── NamedAgents.md    # Your named agent backstories (optional)
└── VoiceConfig.json  # Voice server configuration (optional)

Voice Prosody Settings

Each voice can have prosody settings that control how it sounds. These are passed to ElevenLabs API.

Prosody Parameters

Parameter Range Default Effect
stability 0.0-1.0 0.5 Low = expressive/varied, High = consistent/monotone
similarity_boost 0.0-1.0 0.75 Voice identity preservation
style 0.0-1.0 0.0 Style exaggeration (higher = more dramatic)
speed 0.7-1.2 1.0 Speech rate
use_speaker_boost boolean true Enhanced clarity (adds latency)

Example Voice Configuration

In your USER/CUSTOMIZATIONS/SKILLS/Agents/Traits.yaml:

voice_mappings:
  voice_registry:
    # Add a new voice with full prosody settings
    MyCustomVoice:
      voice_id: "your-elevenlabs-voice-id"
      characteristics: ["energetic", "warm", "professional"]
      description: "Custom voice for enthusiastic agents"
      prosody:
        stability: 0.40
        similarity_boost: 0.75
        style: 0.30
        speed: 1.05
        use_speaker_boost: true

    # Override prosody for an existing base voice
    Baron:
      prosody:
        stability: 0.65
        style: 0.10
        speed: 0.92

Personality → Prosody Guidelines

Personality stability style speed Rationale
Skeptical 0.60 0.10 0.95 Measured, precise
Enthusiastic 0.35 0.40 1.10 High energy
Analytical 0.65 0.08 0.95 Clear, structured
Bold 0.45 0.35 1.05 Confident, dynamic
Cautious 0.70 0.05 0.90 Careful, deliberate

Overview

The Agents skill is a complete agent composition and management system:

  • Dynamic agent composition from traits (expertise + personality + approach)
  • Voice mappings with full prosody control
  • Custom agent creation with unique voices
  • Parallel agent orchestration patterns

Observer Team Archetype

Distinct from functional teams (engineering, design, etc.). An Observer team watches what a primary agent DID — not what it said. Inspired by Mythos-class multi-agent oversight: high-capability primary model produces tool calls, lower-capability aligned observers validate each call against policy and intent in real time.

Shape:

  • Read-only — observers never mutate state, never call write tools. Violations of this property = immediate stop.
  • Fed the audit log — consume MEMORY/OBSERVABILITY/tool-activity.jsonl (with ground_truth captured by ToolActivityTracker.hook.ts), not chat transcripts.
  • Vote: continue / halt / escalate — majority rule, any escalate bubbles to the user via Pulse.
  • Cost-justified by catastrophe prevention, not feature velocity. Only spawn when primary model is doing something high-blast-radius (mass file writes, deploys, key rotations, financial ops).

Use ONLY when BOTH conditions hold:

  1. Time is not a constraint. Observers add 30-second voting cycles + ~$0.10/primary-hour. They deliberately trade speed for safety — not for interactive work.
  2. Auditability is the primary requirement. The goal is a defensible, reviewable trail of what the primary actually did (compliance, post-incident review, catastrophe prevention) — not fast turnaround.

Typical fit:

  • Overnight / unattended autonomous runs where the user isn't watching
  • Production deploys where post-hoc review matters more than speed
  • Credential rotation, permission changes, PATTERNS.yaml or security-hook edits
  • Anything where "I want to prove nothing dangerous happened" is the goal

Do NOT use for:

  • Interactive sessions with the user watching
  • Time-sensitive work of any kind
  • Short reactive tasks (<5 tool calls)
  • Read-only analysis
  • Work already covered by preflight gates A/B/C/D

Route Triggers

User Says Workflow What Happens
"custom agents", "specialized agents", "create custom agents" CreateCustomAgent ComposeAgent → unique personalities, voices, colors
"agents", "launch agents", "bunch of agents" SpawnParallel Same identity, parallel grunt work
"engineering team", "security team", "[name] team: do X" SpawnTeam Load YAML config → compose specialist members → parallel launch
"just the QA lead and senior engineer" SpawnTeam (subset) Filter to named members from team config
"use [named agent]" Named agent Pre-defined personality from USER config

Available Predefined Teams

Team Trigger Members
Engineering "engineering team", "eng team" Senior Engineer, QA Lead, Performance Engineer, DevOps
Architecture "architecture team", "architect team" Systems, Infrastructure, API, Data architects
Marketing "marketing team" Growth Strategist, Positioning Expert, Community Manager, Analytics Lead
Design "design team" UX Lead, Visual Designer, Interaction Designer, Accessibility Specialist
Security "security team" Threat Modeler, AppSec Engineer, Red Teamer, Compliance Analyst
Research "research team" Primary Researcher, Contrarian Analyst, Technical Evaluator, Synthesis Writer
Content "content team" Editor-in-Chief, Staff Writer, Audience Analyst, Distribution Strategist
Strategy "strategy team" Strategist, Operator, Financial Analyst, Risk Assessor, Contrarian

NEVER use static agent types (Architect, Engineer, etc.) for custom agents — always use general-purpose with ComposeAgent prompts.

🚫 ANTI-PATTERN: Using Built-In Types for Custom Work

Built-in agent types (Designer, Architect, Engineer, etc.) are for INTERNAL workflow routing only. They have no unique identity, voice, or personality.

Scenario ❌ WRONG ✅ RIGHT
"Specialized agents to brainstorm UI ideas" Task(subagent_type="Designer"), Task(subagent_type="Architect") ComposeAgent with traits like "ux,enthusiastic,exploratory" and "design,analytical,systematic"
"Custom agents to review code" Task(subagent_type="Engineer") ComposeAgent with "technical,skeptical,thorough" and "technical,creative,rapid"
"Agents with different perspectives" Multiple built-in types Multiple ComposeAgent calls with DIFFERENT trait combinations

Components

Data

Traits.yaml (Data/Traits.yaml) - Base configuration:

  • Core expertise areas: security, technical, research
  • Core personalities: skeptical, analytical, enthusiastic
  • Core approaches: thorough, rapid, systematic
  • Example voice mappings with prosody

Tools

ComposeAgent.ts (Tools/ComposeAgent.ts)

  • Dynamic agent composition engine
  • Merges base + user configurations
  • Outputs complete agent prompt with voice settings
  • Supports persistent custom agents via --save / --load / --delete
# Compose and use immediately
bun run ${CLAUDE_SKILL_DIR}/Tools/ComposeAgent.ts --task "Review security"
bun run ${CLAUDE_SKILL_DIR}/Tools/ComposeAgent.ts --traits "security,skeptical,thorough"

# Persistent custom agents
bun run ${CLAUDE_SKILL_DIR}/Tools/ComposeAgent.ts --task "Security review" --save
bun run ${CLAUDE_SKILL_DIR}/Tools/ComposeAgent.ts --list-saved
bun run ${CLAUDE_SKILL_DIR}/Tools/ComposeAgent.ts --load "security-expert-skeptical-thorough"
bun run ${CLAUDE_SKILL_DIR}/Tools/ComposeAgent.ts --delete "security-expert-skeptical-thorough"

# Other options
bun run ${CLAUDE_SKILL_DIR}/Tools/ComposeAgent.ts --list
bun run ${CLAUDE_SKILL_DIR}/Tools/ComposeAgent.ts --output json

JSON output includes:

{
  "name": "Security Expert Skeptical Thorough",
  "voice": "Baron",
  "voice_id": "onwK4e9ZLuTAKqWW03F9",
  "voice_settings": {
    "stability": 0.70,
    "similarity_boost": 0.85,
    "style": 0.05,
    "speed": 0.95,
    "use_speaker_boost": true
  },
  "prompt": "..."
}

Templates

DynamicAgent.hbs (Templates/DynamicAgent.hbs)

  • Handlebars template for dynamic agent prompts
  • Composes: expertise + personality + approach + voice assignment
  • Includes operational guidelines and response format

Architecture

Hybrid Agent Model

Type Definition Best For
Named Agents Persistent identities defined in USER config Recurring work, relationships
Dynamic Agents Task-specific specialists composed from traits One-off tasks, parallel work

The Agent Spectrum

┌─────────────────────────────────────────────────────────────────────┐
│   NAMED AGENTS          HYBRID USE          DYNAMIC AGENTS          │
│   (Relationship)        (Best of Both)      (Task-Specific)         │
├──────────────────────────────────────────────────────────────────────┤
│ Defined in USER     "Security expert       Ephemeral specialist     │
│ NamedAgents.md      with [named agent]'s   composed from traits     │
│                      skepticism"                                     │
└─────────────────────────────────────────────────────────────────────┘

Examples

Example 1: Create custom agents

User: "Spin up 3 custom security agents"
→ Invokes CREATECUSTOMAGENT workflow
→ Runs ComposeAgent 3 times with DIFFERENT trait combinations
→ Each agent gets unique personality + matched voice + prosody
→ Launches agents in parallel

Example 2: List available traits

User: "What agent personalities can you create?"
→ Invokes LISTTRAITS workflow
→ Shows merged base + user traits
→ Displays voices with prosody settings

Extending the Skill

Adding Your Own Traits

In USER/CUSTOMIZATIONS/SKILLS/Agents/Traits.yaml:

# Add new expertise areas
expertise:
  marketing:
    name: "Marketing Expert"
    description: "Brand strategy, campaigns, market positioning"
    keywords:
      - marketing
      - brand
      - campaign
      - positioning

# Add new personalities
personality:
  visionary:
    name: "Visionary"
    description: "Forward-thinking, sees the big picture"
    prompt_fragment: |
      You think in terms of future possibilities and long-term vision.
      Connect today's work to tomorrow's potential.

Adding Named Agents

In USER/CUSTOMIZATIONS/SKILLS/Agents/NamedAgents.md:


Alex - The Strategist

Voice ID: your-voice-id Prosody: stability: 0.55, style: 0.20, speed: 0.95

Alex is a strategic thinker who sees patterns others miss... ```

Model Selection

Task Type Model Speed
Grunt work, simple checks haiku 10-20x faster
Standard analysis, research sonnet Balanced
Deep reasoning, architecture opus Maximum quality

Version History

  • v2.0.0 (2026-01): Restructured to base + user merge pattern, added prosody support
  • v1.0.0 (2025-12): Initial creation

Gotchas

  • Agents skill (custom agents) ≠ Agent tool (Claude Code subagents) ≠ TeamCreate (agent teams). Three different systems. "Custom agents" → this skill. "Agent team"/"swarm" → TeamCreate. One-off subagents → Agent tool.
  • Don't spawn agents when direct work is faster. If the task is depth-focused (one file, deep understanding), do it yourself. Agents are for breadth (multiple independent threads).
  • Don't spawn redundant agents for work already in context. Multiple past failures from re-researching what was already known.
  • Provide raw source material to agents, not summaries. Agents work better with primary sources.
  • Forked subagents inherit the full main-thread conversation and share its prompt cache (Anthropic CC v2.1.133+, enabled at CLAUDE_CODE_FORK_SUBAGENT=1 or agent frontmatter context: fork). Compressed-context spawn (the default) loses nuance; fork preserves it. Decision rule: fork for design variation / follow-on research; don't fork for review (biased toward defending its own context).

Workflows · 9

  1. 01
    "custom agents", "specialized agents", "spin up agents" Workflows/"custom agents", "specialized agents", "spin up agents".md

    **custom agents**, **specialized agents**, spin up agents

  2. 02
    "engineering team", "security team", "[name] team: do X" Workflows/"engineering team", "security team", "[name] team: do X".md

    **engineering team**, **security team**, **[name] team: do X**

  3. 03
    "just the QA lead and senior engineer on this" Workflows/"just the QA lead and senior engineer on this".md

    just the **QA lead and senior engineer** on this

  4. 04
    "swarm", "create an agent team" (ad-hoc coordination) Workflows/"swarm", "create an agent team" (ad-hoc coordination).md

    **swarm**, **create an agent team** (ad-hoc coordination)

  5. 05
    CreateCustomAgent Workflows/CreateCustomAgent.md

    **custom agents**, **specialized agents**, create **custom** agents

  6. 06
    SpawnParallel Workflows/SpawnParallel.md

    agents, launch agents, bunch of agents

  7. 07
    SpawnTeam Workflows/SpawnTeam.md

    **engineering team**, **security team**, **[name] team: do X**

  8. 08
    SpawnTeam (subset) Workflows/SpawnTeam (subset).md

    just the **QA lead and senior engineer**

  9. 09
    Named agent Workflows/Named agent.md

    use [named agent]

How to Invoke

Say any of these to your DA and PAI activates the Agents skill automatically:

  • "create custom agents"
  • "spin up agents"
  • "agent personalities"
  • "compose agent"
  • "spawn parallel agents"
  • "engineering team"
  • "security team"
  • "get the team on this"
  • "observer team"

Or invoke explicitly:

Skill("Agents")

References · 15

Auxiliary files the skill loads at runtime — frameworks, guides, configs.

  • AgentPersonalities
  • AgentProfileSystem
  • ArchitectContext
  • ArtistContext
  • CatoContext
  • ClaudeResearcherContext
  • CodexResearcherContext
  • DesignerContext
  • EngineerContext
  • ForgeContext
  • GeminiResearcherContext
  • GrokResearcherContext
  • PerplexityResearcherContext
  • QATesterContext
  • REDESIGN-SUMMARY

Want PAI to do this for you?

Install PAI on your machine — your DA gets the Agents skill plus 44 others, all hooked into one Life OS.