[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6P0Y9J8FQ5182ZX3XFPS1C8":3,"skill-same:01M6P0Y9J8FQ5182ZX3XFPS1C8":43},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":20,"frontMatter":21,"refName":22,"commitSha":23,"skillDirectory":24,"forksCount":13,"repositoryHtmlUrl":25,"repositoryHomepageUrl":6,"ownerHtmlUrl":26,"ownerBlogUrl":27,"ownerDescription":6,"updatedAt":28,"install":29,"resources":42},"01M6P0Y9J8FQ5182ZX3XFPS1C8","speak",null,"theroyalraj\u002Fcrux-ai","theroyalraj","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F31450619?v=4","01M6P0WHGVGMA01PX00KCV5GXN","Utkarsh Raj","01M6P0WHN5VXWSR1AKREJVZPTA",0,"MIT","https:\u002F\u002Fgithub.com\u002Ftheroyalraj\u002Fcrux-ai\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fspeak\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"# Speak (Crux TTS)\n\n**This is the only path agents should use to produce voice.** It always calls the Crux server (or tries to).\n\n## Command\n\n```bash\nbash scripts\u002Fspeak.sh \"Plain English only, no symbols\" [priority] [persona]\n```\n\n- **priority:** `0` = queue with other speech (default). `1` = preempt current speech.\n- **persona:** optional — `forge`, `sentinel`, `chronicle`, `sage`, `maestro`, `echo`, `priya`, `siri` (see **CONTRIBUTING.md**).\n\nWait for playback to finish before ending the turn:\n\n```bash\nbash scripts\u002Fspeak.sh --sync \"Your closing summary here\" 1\n```\n\n## Rules\n\n- **`050-no-markdown-in-speech`** — spoken strings must be plain English.\n- **`000-agent-http.mdc`** — voice table (start, major change, end, blocked).\n- **`010-acknowledge-before-planning.mdc`** — ack before work; batch **`speak.sh`** with first tool calls.\n- **`015-agent-speak-mandatory.mdc`** — mandatory spoken ack and completion; **never skip `speak.sh` because `\u002Fhealth` failed**.\n- Use **`curl`** for non-speak APIs per **CONTRIBUTING.md**; do not hand-roll **`curl`** to `\u002Fspeak` for routine narration.\n- Do not call **`say`**, **`afplay`**, or local TTS.\n\n## Health\n\nYou are **not** responsible for server uptime. **Always run `speak.sh` when the rules require it.** If **`curl`** fails, note it in chat if relevant; do not use that as a reason to skip voice attempts.\n\n## Env\n\n`CRUX_BASE_URL` if the server is not on `http:\u002F\u002F127.0.0.1:9090`.\n",{},"main","f32f9faf220bf5a7feb95a75b06b0805a6a4313f",".cursor\u002Fskills\u002Fspeak","https:\u002F\u002Fgithub.com\u002Ftheroyalraj\u002Fcrux-ai","https:\u002F\u002Fgithub.com\u002Ftheroyalraj","https:\u002F\u002Ftheroyalraj.netlify.app","2026-04-09 17:27:47",{"source":7,"skillName":5,"commands":30,"prompt":40,"zipAvailable":41},[31,34,37],{"tool":32,"command":33},"npx","npx skills add theroyalraj\u002Fcrux-ai --skill speak",{"tool":35,"command":36},"bunx","bunx skills add theroyalraj\u002Fcrux-ai --skill speak",{"tool":38,"command":39},"pnpm","pnpm dlx skills add theroyalraj\u002Fcrux-ai --skill speak","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ftheroyalraj\u002Fcrux-ai\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fspeak\u002FSKILL.md",true,[],[44,50,56,69],{"skillNo":45,"name":46,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":47,"categories":48,"keywords":49,"publishedAt":18},"01M6P0Y5BHTQTF0JM0R3K8XBZ1","review","https:\u002F\u002Fgithub.com\u002Ftheroyalraj\u002Fcrux-ai\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Freview\u002FSKILL.md",[],[46],{"skillNo":51,"name":52,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":53,"categories":54,"keywords":55,"publishedAt":18},"01M6P0XKW5VSHT5EP52JJY7P2S","mr","https:\u002F\u002Fgithub.com\u002Ftheroyalraj\u002Fcrux-ai\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fmr\u002FSKILL.md",[],[52],{"skillNo":57,"name":58,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":59,"categories":60,"keywords":66,"publishedAt":18},"01M6P0X443GC0CCF313E7HAJ0Y","hourly-report","https:\u002F\u002Fgithub.com\u002Ftheroyalraj\u002Fcrux-ai\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fhourly-report\u002FSKILL.md",[61],{"categoryNo":62,"categoryName":63,"taxonomyType":64,"taxonomyTypeDesc":65},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[67,68],"report","hourly report",{"skillNo":70,"name":71,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":18},"01M6P0WNHM90QZZMHF9N716YMB","commit","https:\u002F\u002Fgithub.com\u002Ftheroyalraj\u002Fcrux-ai\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fcommit\u002FSKILL.md",[],[71]]