agentic/code/addons/aiwg-utils/skills/soul-to-voice/SKILL.md
Generate an AIWG voice profile from an existing SOUL.md identity file
npx skillsauth add jmagly/aiwg soul-to-voiceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a Soul Management Specialist responsible for generating AIWG voice profiles from SOUL.md identity files.
Given a SOUL.md, extract writing style characteristics and generate a valid AIWG voice profile YAML file. This is a reduction — SOUL.md captures full identity; the voice profile captures the writing style dimension.
| Flag | Description |
|------|-------------|
| --soul <path> | Path to SOUL.md (default: auto-detect ./SOUL.md or ./.aiwg/SOUL.md) |
| --output <name> | Voice profile name (default: derived from SOUL.md filename) |
| --interactive | Ask calibration questions during generation |
| Soul Signal | Voice Dimension | Mapping | |------------|----------------|---------| | Professional background, values precision | formality | 0.6-0.8 | | Strong opinions stated directly | confidence | 0.8-0.9 | | Prioritizes accuracy, direct communicator | warmth | 0.2-0.4 | | Deep domain expertise, comfortable with nuance | complexity | 0.7-0.9 | | Enthusiasm in Interests section | energy | Calibrate from tone |
| Soul Section | Voice Field |
|-------------|------------|
| Vocabulary terms | vocabulary.prefer |
| Boundaries (terms to avoid) | vocabulary.avoid |
| Interests/domain expertise | vocabulary.domain_terms |
| Recurring phrases in examples | vocabulary.signature_phrases |
| Soul Section | Voice Field |
|-------------|------------|
| Collaborative worldview | perspective.person: first-plural |
| Strong Opinions section | perspective.stance: opinionated |
| Values equality in discourse | perspective.reader_relationship: peer |
| Soul Signal | Voice Field |
|------------|------------|
| Values concrete over abstract | structure.use_examples: frequently |
| Skeptical of metaphor | structure.use_analogies: rarely |
| Complex thinker | structure.sentence_variety: high |
ls SOUL.md .aiwg/SOUL.md 2>/dev/null
Parse the markdown and extract all sections.
Analyze each section for writing style implications:
Output a valid voice profile conforming to voice-profile.schema.json:
name: {derived-name}
version: 1.0.0
description: "Voice profile generated from SOUL.md"
base: null
tone:
formality: {0-1}
confidence: {0-1}
warmth: {0-1}
energy: {0-1}
complexity: {0-1}
vocabulary:
prefer: [{from Vocabulary section}]
avoid: [{from Boundaries, Pet Peeves}]
domain_terms: [{from Interests, domain expertise}]
signature_phrases: [{from examples, recurring patterns}]
structure:
sentence_length: {varied|short|long}
paragraph_length: {short|medium|long}
sentence_variety: {low|medium|high}
use_lists: {never|rarely|when-appropriate|frequently}
use_examples: {never|rarely|when-appropriate|frequently}
use_analogies: {never|rarely|when-appropriate|frequently}
use_questions: {never|rarely|when-appropriate|frequently}
perspective:
person: {first-singular|first-plural|second|third}
stance: {neutral|opinionated|balanced}
reader_relationship: {authority|peer|mentor|servant}
domain:
expertise_areas: [{from Who I Am, Interests}]
audience_level: {beginner|intermediate|practitioner|expert}
industry: {inferred from domain}
authenticity:
acknowledges_uncertainty: {from Tensions section}
shows_tradeoffs: {from Opinions section}
uses_specific_numbers: {from style analysis}
references_constraints: {from Boundaries}
expresses_opinions: {from Opinions section}
metadata:
author: "Generated from SOUL.md"
created: "{today}"
tags: [{inferred tags}]
Validate against voice-profile.schema.json to ensure the generated profile is valid.
Soul-to-Voice Conversion Complete
Source: ./SOUL.md
Output: .aiwg/voices/{name}.yaml
Tone calibration:
formality: 0.7 (professional background, values precision)
confidence: 0.9 (strong opinions, direct communicator)
warmth: 0.3 (prioritizes accuracy over rapport)
energy: 0.4 (measured, not excitable)
complexity: 0.8 (deep domain expertise)
Vocabulary: 12 preferred, 8 avoided, 6 domain terms, 3 signature phrases
Next steps:
/voice-apply {name} Apply this voice to content
/soul-validate Verify soul file quality
Voice profiles are saved to:
.aiwg/voices/<name>.yaml (project-specific, preferred).aiwg/voices/ doesn't exist# Generate voice profile from default SOUL.md
/soul-to-voice
# From specific soul file
/soul-to-voice --soul .claude/agents/security-auditor.soul.md --output security-voice
# Interactive calibration
/soul-to-voice --interactive
# Custom output name
/soul-to-voice --output my-project-voice
/voice-to-soul — Reverse bridge: generate SOUL.md from voice profile/voice-apply — Apply voice profile to content/soul-apply — Apply soul to content (deeper than voice)data-ai
Report which research-corpus radar sidecars are overdue for refresh. Computes staleness (days since last refresh vs the cadence window) for every radar, sorted most-overdue-first. Runs via `aiwg corpus radar-status`.
data-ai
Aggregate research-corpus radar sidecars into a corpus or per-cluster freshness report — totals, overdue count, per-cluster / per-GRADE / per-trajectory breakdowns, an overdue table, and per-radar rationale snippets. Runs via `aiwg corpus radar-report`.
testing
Scaffold radar/freshness sidecars for research-corpus REFs. Pulls title/authors from the citation sidecar and GRADE from the analysis doc, defaults the refresh cadence from GRADE and the cluster from a corpus-local map, and stamps documentation/radar/REF-XXX-radar.md. Runs via `aiwg corpus radar-init`.
data-ai
Compute an entity's publication trajectory — per-year paper counts, topic drift, hot-streak detection (≥3 consecutive A-grade years), and career phase. Runs via `aiwg corpus profile-temporal`.