[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CB3DWJ2MDG0QF2CPK589CM":3,"skill-same:01M6CB3DWJ2MDG0QF2CPK589CM":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":45,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M6CB3DWJ2MDG0QF2CPK589CM","voice-blend",null,"Combine multiple voice profiles with weighted mixing to create hybrid voices","jmagly\u002Faiwg","jmagly","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1159087?v=4","01M6C10AK8N2WCSQN11FYGTJWN","Joseph Magly","01M6C10AQ8A2RMED1Y1BSVY7NF",229,"MIT","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fvoice\u002Fskills\u002Fvoice-blend\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31],"voice","voice blend","create","with","profiles","combine","mixing","hybrid","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nname: voice-blend\nplatforms: [all]\ndescription: Combine multiple voice profiles with weighted mixing to create hybrid voices\n---\n\n# voice-blend\n\nCombine multiple voice profiles with weighted mixing to create hybrid voices.\n\n## Triggers\n\n\nAlternate expressions and non-obvious activations (primary phrases are matched automatically from the skill description):\n\n- \"70\u002F30 [voice A]\u002F[voice B]\" → ratio-based voice blending\n- \"blend voices\" → voice mixing\n\n## Behavior\n\nWhen triggered, this skill:\n\n1. **Loads source voice profiles** from:\n   - Built-in templates (`voices\u002Ftemplates\u002F`)\n   - Project voices (`.aiwg\u002Fvoices\u002F`)\n   - User voices (`~\u002F.config\u002Faiwg\u002Fvoices\u002F`)\n\n2. **Parses blend specification**:\n   - Equal blend: \"blend X and Y\" → 50%\u002F50%\n   - Weighted blend: \"70% X, 30% Y\" → explicit weights\n   - Multi-voice: \"blend X, Y, and Z\" → equal thirds\n\n3. **Interpolates dimensions**:\n   - Weighted average of tone values (formality, confidence, etc.)\n   - Merged vocabulary lists (union of prefer, intersection of avoid)\n   - Dominant structure patterns from highest-weighted voice\n\n4. **Generates hybrid profile** with clear lineage tracking\n\n## Usage Examples\n\n### Equal Blend\n```\nUser: \"Blend technical-authority and friendly-explainer\"\n\nResult: 50\u002F50 blend\n- formality: 0.45 (avg of 0.7 and 0.2)\n- confidence: 0.8 (avg of 0.9 and 0.7)\n- warmth: 0.55 (avg of 0.3 and 0.8)\n- vocabulary: merged from both\n```\n\n### Weighted Blend\n```\nUser: \"80% executive-brief, 20% casual-conversational\"\n\nResult: Weighted blend\n- formality: 0.7 (0.8*0.85 + 0.2*0.15)\n- confidence: 0.86 (0.8*0.9 + 0.2*0.6)\n- Dominant structure from executive-brief\n```\n\n### Multi-Voice Blend\n```\nUser: \"Combine technical-authority, friendly-explainer, and executive-brief\"\n\nResult: Equal thirds (33.3% each)\n- All dimensions averaged across three profiles\n- Vocabulary merged from all three\n```\n\n## Blend Algorithm\n\n### Dimension Interpolation\n\nFor each tone dimension:\n```\nblended_value = Σ(weight_i × value_i) \u002F Σ(weight_i)\n```\n\n### Vocabulary Merging\n\n- **prefer**: Union of all prefer lists, deduplicated\n- **avoid**: Intersection of all avoid lists (only avoid if ALL sources avoid)\n- **signature_phrases**: Top N from each source (weighted by blend ratio)\n\n### Structure Resolution\n\nStructure settings use the **dominant voice** (highest weight):\n- sentence_length: from dominant\n- paragraph_length: from dominant\n- use_lists: from dominant\n- use_examples: averaged (rarely=0, when-appropriate=1, frequently=2)\n\n### Perspective Handling\n\n- **person**: Majority vote (tie goes to second person)\n- **voice**: Active unless all sources use passive\n- **tense**: Present unless all sources use past\n\n## Output Format\n\n```yaml\nname: technical-friendly-blend\nversion: 1.0.0\ndescription: Blended voice profile\nblend_sources:\n  - name: technical-authority\n    weight: 0.7\n  - name: friendly-explainer\n    weight: 0.3\ntone:\n  formality: 0.55  # interpolated\n  confidence: 0.84 # interpolated\n  warmth: 0.45     # interpolated\n  energy: 0.49     # interpolated\n  complexity: 0.65 # interpolated\nvocabulary:\n  prefer:\n    - precise technical terminology  # from technical\n    - concrete examples              # from friendly\n  avoid:\n    - marketing superlatives         # common to both\n  signature_phrases:\n    - \"The system handles...\"        # from technical (70%)\n    - \"Think of it like...\"          # from friendly (30%)\nstructure:\n  sentence_length: medium            # from dominant (technical)\n  use_examples: frequently           # averaged\n```\n\n## Output Location\n\nBlended profiles are saved to:\n1. `.aiwg\u002Fvoices\u002F{name}.yaml` (default)\n2. Custom path with `--output` flag\n3. `~\u002F.config\u002Faiwg\u002Fvoices\u002F` with `--global` flag\n\n## Integration\n\n- **Input**: Takes profiles created by `voice-create` or built-in templates\n- **Output**: Creates profiles usable by `voice-apply`\n- **Chain**: `voice-analyze` → `voice-blend` → `voice-apply`\n\n## CLI Usage\n\n```bash\n# Equal blend of two voices\npython voice_blender.py --voices \"technical-authority,friendly-explainer\"\n\n# Weighted blend\npython voice_blender.py --voices \"technical-authority:0.7,friendly-explainer:0.3\"\n\n# Custom output name\npython voice_blender.py --voices \"...\" --name my-hybrid-voice\n\n# Output to specific directory\npython voice_blender.py --voices \"...\" --output .aiwg\u002Fvoices\u002F\n\n# JSON output for inspection\npython voice_blender.py --voices \"...\" --json\n```\n\n## Error Handling\n\n- **Profile not found**: Lists available profiles and suggests closest match\n- **Invalid weights**: Normalizes weights to sum to 1.0\n- **Incompatible profiles**: Warns but proceeds with best-effort blend\n\n## References\n\n- Voice loader: `..\u002Fvoice-apply\u002Fscripts\u002Fvoice_loader.py`\n- Schema: `..\u002F..\u002F..\u002Fschemas\u002Fvoice-profile.schema.json`\n- Built-in templates: `..\u002F..\u002Fvoices\u002Ftemplates\u002F`\n\n## Downstream writing handoff\n\nUse [author-controlled writing workflows](..\u002F..\u002Fdocs\u002Fwriting-workflows.md) for\nbriefs, explicit profile selection, channel\u002Frevision APIs and receipts. Analysis\nor blending does not establish author identity, approve sample rights or activate\na provider transformation. Keep legacy imports explicit and use separately\naccepted sidecar preferences for author-controlled execution.\n","# voice-blend\n\nCombine multiple voice profiles with weighted mixing to create hybrid voices.\n\n## Triggers\n\n\nAlternate expressions and non-obvious activations (primary phrases are matched automatically from the skill description):\n\n- \"70\u002F30 [voice A]\u002F[voice B]\" → ratio-based voice blending\n- \"blend voices\" → voice mixing\n\n## Behavior\n\nWhen triggered, this skill:\n\n1. **Loads source voice profiles** from:\n   - Built-in templates (`voices\u002Ftemplates\u002F`)\n   - Project voices (`.aiwg\u002Fvoices\u002F`)\n   - User voices (`~\u002F.config\u002Faiwg\u002Fvoices\u002F`)\n\n2. **Parses blend specification**:\n   - Equal blend: \"blend X and Y\" → 50%\u002F50%\n   - Weighted blend: \"70% X, 30% Y\" → explicit weights\n   - Multi-voice: \"blend X, Y, and Z\" → equal thirds\n\n3. **Interpolates dimensions**:\n   - Weighted average of tone values (formality, confidence, etc.)\n   - Merged vocabulary lists (union of prefer, intersection of avoid)\n   - Dominant structure patterns from highest-weighted voice\n\n4. **Generates hybrid profile** with clear lineage tracking\n\n## Usage Examples\n\n### Equal Blend\n```\nUser: \"Blend technical-authority and friendly-explainer\"\n\nResult: 50\u002F50 blend\n- formality: 0.45 (avg of 0.7 and 0.2)\n- confidence: 0.8 (avg of 0.9 and 0.7)\n- warmth: 0.55 (avg of 0.3 and 0.8)\n- vocabulary: merged from both\n```\n\n### Weighted Blend\n```\nUser: \"80% executive-brief, 20% casual-conversational\"\n\nResult: Weighted blend\n- formality: 0.7 (0.8*0.85 + 0.2*0.15)\n- confidence: 0.86 (0.8*0.9 + 0.2*0.6)\n- Dominant structure from executive-brief\n```\n\n### Multi-Voice Blend\n```\nUser: \"Combine technical-authority, friendly-explainer, and executive-brief\"\n\nResult: Equal thirds (33.3% each)\n- All dimensions averaged across three profiles\n- Vocabulary merged from all three\n```\n\n## Blend Algorithm\n\n### Dimension Interpolation\n\nFor each tone dimension:\n```\nblended_value = Σ(weight_i × value_i) \u002F Σ(weight_i)\n```\n\n### Vocabulary Merging\n\n- **prefer**: Union of all prefer lists, deduplicated\n- **avoid**: Intersection of all avoid lists (only avoid if ALL sources avoid)\n- **signature_phrases**: Top N from each source (weighted by blend ratio)\n\n### Structure Resolution\n\nStructure settings use the **dominant voice** (highest weight):\n- sentence_length: from dominant\n- paragraph_length: from dominant\n- use_lists: from dominant\n- use_examples: averaged (rarely=0, when-appropriate=1, frequently=2)\n\n### Perspective Handling\n\n- **person**: Majority vote (tie goes to second person)\n- **voice**: Active unless all sources use passive\n- **tense**: Present unless all sources use past\n\n## Output Format\n\n```yaml\nname: technical-friendly-blend\nversion: 1.0.0\ndescription: Blended voice profile\nblend_sources:\n  - name: technical-authority\n    weight: 0.7\n  - name: friendly-explainer\n    weight: 0.3\ntone:\n  formality: 0.55  # interpolated\n  confidence: 0.84 # interpolated\n  warmth: 0.45     # interpolated\n  energy: 0.49     # interpolated\n  complexity: 0.65 # interpolated\nvocabulary:\n  prefer:\n    - precise technical terminology  # from technical\n    - concrete examples              # from friendly\n  avoid:\n    - marketing superlatives         # common to both\n  signature_phrases:\n    - \"The system handles...\"        # from technical (70%)\n    - \"Think of it like...\"          # from friendly (30%)\nstructure:\n  sentence_length: medium            # from dominant (technical)\n  use_examples: frequently           # averaged\n```\n\n## Output Location\n\nBlended profiles are saved to:\n1. `.aiwg\u002Fvoices\u002F{name}.yaml` (default)\n2. Custom path with `--output` flag\n3. `~\u002F.config\u002Faiwg\u002Fvoices\u002F` with `--global` flag\n\n## Integration\n\n- **Input**: Takes profiles created by `voice-create` or built-in templates\n- **Output**: Creates profiles usable by `voice-apply`\n- **Chain**: `voice-analyze` → `voice-blend` → `voice-apply`\n\n## CLI Usage\n\n```bash\n# Equal blend of two voices\npython voice_blender.py --voices \"technical-authority,friendly-explainer\"\n\n# Weighted blend\npython voice_blender.py --voices \"technical-authority:0.7,friendly-explainer:0.3\"\n\n# Custom output name\npython voice_blender.py --voices \"...\" --name my-hybrid-voice\n\n# Output to specific directory\npython voice_blender.py --voices \"...\" --output .aiwg\u002Fvoices\u002F\n\n# JSON output for inspection\npython voice_blender.py --voices \"...\" --json\n```\n\n## Error Handling\n\n- **Profile not found**: Lists available profiles and suggests closest match\n- **Invalid weights**: Normalizes weights to sum to 1.0\n- **Incompatible profiles**: Warns but proceeds with best-effort blend\n\n## References\n\n- Voice loader: `..\u002Fvoice-apply\u002Fscripts\u002Fvoice_loader.py`\n- Schema: `..\u002F..\u002F..\u002Fschemas\u002Fvoice-profile.schema.json`\n- Built-in templates: `..\u002F..\u002Fvoices\u002Ftemplates\u002F`\n\n## Downstream writing handoff\n\nUse [author-controlled writing workflows](..\u002F..\u002Fdocs\u002Fwriting-workflows.md) for\nbriefs, explicit profile selection, channel\u002Frevision APIs and receipts. Analysis\nor blending does not establish author identity, approve sample rights or activate\na provider transformation. Keep legacy imports explicit and use separately\naccepted sidecar preferences for author-controlled execution.\n",{"name":5,"namespace":37,"platforms":38,"description":7},"aiwg",[39],"all","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fplugins\u002Fvoice\u002Fskills\u002Fvoice-blend",36,"https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg","https:\u002F\u002Faiwg.io","https:\u002F\u002Fgithub.com\u002Fjmagly","https:\u002F\u002Fintegrolabs.io","ml\u002Fai, industrial automation, safety\u002Fsecurity, ssi\r\n\r\nmagly.net\r\nintegrolabs.io\r\naiwg.io\r\nfortemi.com\r\npagenary.com\r\nbytecask.com","2026-11-14 10:46:34",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add jmagly\u002Faiwg --skill voice-blend",{"tool":56,"command":57},"bunx","bunx skills add jmagly\u002Faiwg --skill voice-blend",{"tool":59,"command":60},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill voice-blend","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fvoice\u002Fskills\u002Fvoice-blend\u002FSKILL.md",true,[64],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"scripts\u002Fvoice_blender.py","SCRIPT","脚本",14497,"https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fvoice\u002Fskills\u002Fvoice-blend\u002Fscripts\u002Fvoice_blender.py",[71,99,123,129,136,150],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":78,"publishedAt":32},"01M70QA0BSYJ49EES9V4RE8QH1","host-hardening","Read-only system hardening baseline and plan-first host hardening recommendations for SSH, Docker bind addresses, firewall persistence, datastores, exporters and audit retention.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[77],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98],"host","host hardening","hardening","read","re","recommendations","remediation","plan","port","verification","Bash","access","only","retention","audit","never","firewall","bind","secrets","request",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":109,"publishedAt":32},"01M70PNT2Z4HMZPRBTAF6073NN","exposure-analysis","Read-only firewall analysis and effective host exposure reconstruction for Docker published ports, UFW bypass, stale rules, CDN scope, IPv6 asymmetry and external probe allowlists.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fforensics\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[105,108],{"categoryNo":106,"categoryName":107,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[110,111,112,82,113,87,114,115,89,116,79,117,91,118,119,94,95,120,121,122],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator","write",{"skillNo":124,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":128,"publishedAt":32},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[127],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[81,79,80,90,82,98,85,84,93,86,87,88,89,97,91,92,83,94,95,96],{"skillNo":130,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":135,"publishedAt":32},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[133,134],{"categoryNo":106,"categoryName":107,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[111,110,94,113,87,114,89,112,79,117,91,118,119,82,95,116,115,120,121,122],{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":143,"publishedAt":32},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[142],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[144,145,146,147,148,149],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":157,"publishedAt":32},"01M6CB4AVK1W76MFMPP0JP32CJ","pi-local","Pi-local duplicate-precedence fixture.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fproviders\u002Fpi\u002Fproject\u002F.pi\u002Fskills\u002Fpi-local\u002FSKILL.md",[156],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[158,159,118,160,145],"pi","pi local","duplicate"]