--- schema_version: "1" name: skill-creator version: "1.2.0" description: | Creates a new Jarvis skill from the user's description — the assistant writes the whole skill (name, trigger phrase, schedule, steps, spoken answer format) and files it as a draft. Use when the user wants to build a new skill, routine or automation ("erstell mir einen Skill, der …" / "create a skill that …" / "mach aus diesem Workflow einen Skill"). when_to_use: >- Use when the user asks to create, build, or set up a new skill, routine, or recurring automation — including when the request names other services that are the CONTENT of the new skill, not commands to run now. category: meta tags: [meta, authoring, developer, skill-creator] # Matcher vocabulary (2026-08-12): authoring requests name the mechanism, so # "skill" plus the automation nouns must score here — before this list, # "bau mir einen skill der abends das licht dimmt" lost to the DOMAIN skill # (home assistant) because only the domain words carried weight. No # intent_verbs on purpose (plugin_coupling needs verbs AND objects to # register a capability; this feeds only the matcher). intent_objects: [skill, skills, automatisierung, automation, workflow, ablauf, faehigkeit, routine] # i18n-allow: speech-input vocabulary author: builtin (Anthropic skill-creator guide kept in references/) license: Apache-2.0 # 2026-08-18: the deterministic authoring resolver # (jarvis/skills/authoring_request.py) now decides "the user wants a NEW skill" # BEFORE any brand trigger runs, so a request that mentions YouTube Music or # Gmail inside the description can no longer be captured by that connector's # skill. This regex stays as the offline-eval / match-test evidence and as the # second line of defence, and it now accepts every spoken conjugation after the # noun ("… einen neuen Skill erstellst") — the 2026-08-18 17:51 turn used # exactly that form and missed the old infinitive-only alternative. # Verb heads are written with a character class ([e]rstell, b[a]u, …) ON # PURPOSE: mine_pattern_literals flushes literal runs at "[", so the generic # creation verbs never enter the relevance index as trigger-weight vocabulary. # Without the break, "schreib" scored for THIS skill and stole "schreib eine # mail an das team" from plugin-gmail (offline golden eval, 2026-08-12). The # skill-specific noun ("skill") is the only strong literal this pattern feeds. triggers: - type: voice pattern: "([e]rstell\\w*|b[a]u\\w*|m[a]ch\\w*|schr[e]ib\\w*|gener[i]er\\w*|[a]nleg\\w*)\\s+(mir\\s+)?(bitte\\s+)?(doch\\s+)?(mal\\s+)?einen?\\s+(neuen?\\s+)?skill|einen?\\s+(neuen?\\s+)?skill\\s+(\\w+\\s+){0,3}([e]rstell\\w*|[b]au\\w*|[a]nleg\\w*|[s]chreib\\w*|[g]enerier\\w*)|aus\\s+(diesem|dem|meinem)\\s+\\w+\\s+einen\\s+skill|(cre[a]te|b[u]ild|m[a]ke|s[e]t\\s+up)\\s+(me\\s+)?an?\\s+(new\\s+)?skill|t[u]rn\\s+(this|that|it)\\s+into\\s+a\\s+skill|(cre[a]\\w*|h[a]z|constr[u]\\w*)\\s+(me\\s+)?una?\\s+(nuevo\\s+|nueva\\s+)?skill" language: [de, en, es] requires_tools: [] risk_policy: default_tier: monitor config: target_dir: user default_category: general token_budget_estimate: 1500 --- # Skill Creator The user wants a NEW skill. Write it for them — do not interview them. ## Steps 1. Restate everything the user asked for as one complete description: what the skill does, in which order, at what time or on which spoken phrase it should fire, which services it touches (mail, calendar, tickets, music, smart home, …), and every preference or example they gave (counts, genres, "always something new"). Services named inside the request are the skill's content — never act on them now (do not play the song, do not read the mail). 2. Call the `create-skill` tool ONCE with that description as `intent`, the name the user gave (or an empty string), the spoken trigger phrase if they named one, and the schedule as a 5-field cron when they named a time ("jeden Morgen um 6" → `0 6 * * *`). The assistant writes the whole skill itself — steps per connected tool, trigger, spoken answer format — and files it as a draft. 3. If the result says no model could write it, say so plainly and offer to try again in a moment. Do not fall back to a worker and do not paste the request into a file yourself. 4. The new skill is a draft. Only when the user explicitly asked for it to be switched on right away ("und aktiviere ihn gleich"), call `skill-enable` with the name the result returned — never enable unasked. Switching a skill off, on, or deleting one is `skill-disable` / `skill-enable` / `skill-delete`; the list is `skills-list`. 5. If the user asks to change an EXISTING skill's content, tell them that editing lives in the Skills view (this card only creates); name the skill they mean. ## Answer format One or two spoken sentences in the user's language: the skill's name, what it does and when it fires, and that it is waiting as a draft in the Skills view until they switch it on. Never read the generated instructions aloud. ## Reference Anthropic's full Skill Creator guide (intent → draft → test → iterate) is kept in `references/anthropic-skill-creator.md`; the Jarvis frontmatter contract is in `references/jarvis-schema.md`.