ワンクリックで
compose-extract-args
Extract Compose template arg values from a freeform text blob (paste, OCR, web snippet).
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Extract Compose template arg values from a freeform text blob (paste, OCR, web snippet).
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Create a new contact (person or business) with ALL its channels and address in one call.
Fetch the full body and metadata of a single email by message_id.
Record a new bill / recurring expense
Create a new calendar event in Yorik's local calendar
Attach a postal address (home, work, billing, shipping) to an existing contact.
Attach a channel (email, phone, whatsapp, signal, sms, website, social) to a contact.
| name | compose_extract_args |
| description | Extract Compose template arg values from a freeform text blob (paste, OCR, web snippet). |
| when_to_use | The user pasted unstructured text into the Compose args panel (or uploaded a document whose text has been OCR'd) and we need to map it into the template's structured arg slots. The text can be noisier than what fits — extra paragraphs, marketing copy, multiple addresses; the skill keeps only the values it can confidently identify for the target args. Two modes: - Single-recipient template OR omit `contact_group` → extract values for all args declared in ask_user_for_args. - Multi-recipient template with `contact_group` → extract ONLY for args declaring that contact_group. Other groups untouched. Returns `{args: {key: value, ...}}` — pass this dict straight to compose_draft as the `args` parameter (or merge with existing draft args). |
| when_not_to_use | - Reading the active draft's current args (compose_draft returns those). - Discovering which arg names a template has (compose_check_template_args). - Pulling addresses from Paperless documents the user already filed — `find_recipient_address_from_documents` is the contact-id-driven path. |
| inputs | {"text":{"type":"string","required":true,"description":"Freeform text. Can be the user's typed paste, the OCR text of an\nuploaded document, or any blob containing the values to extract.\nNoise / extra content is fine; the prompt instructs the LLM to\nignore anything it can't confidently map.\n"},"template_id":{"type":"string","required":true,"description":"Canonical template id — call list_compose_templates first if you\ndon't know it. Determines which arg names are valid targets.\n"},"contact_group":{"type":"string","required":false,"description":"When set, restrict extraction to args declaring this contact_group\n(e.g. \"vermieter\", \"arbeitgeber\", \"company\"). Omit for single-\nrecipient templates or to extract everything at once.\n"}} |
| outputs | {"args":{"type":"object","description":"Map of arg key → extracted value. Only confidently-matched fields\nappear (the LLM doesn't invent values for fields not present in the\ntext). Pass to compose_draft.args.\n"},"confidence":{"type":"object","description":"Per-key confidence note (\"explicit label\", \"inferred from format\",\n\"guessed\", …) for the UI to surface a \"verify\" hint if the value\nwas inferred rather than labelled in the source text.\n"}} |
| side_effects | One LLM call (~1-3s on local Qwen). No DB writes, no UI emissions. |
| permissions | ["admin","member"] |
| tags | ["compose","extraction","templates"] |
The "paste anything and we'll figure out what goes where" skill. Powers the per-slot paste textarea + upload-doc button in the Compose args panel. The user dumps text from wherever (a copied letter, a snipped website paragraph, an OCR'd PDF) and we fill the right structured slots without making them re-type.
Confidence policy: when the source text contains a labelled value
("Vermieter: Hans Müller"), that maps directly to vermieter_name.
When the value is inferred from format (a postal address block with no
explicit label), the skill returns it with confidence="inferred" so
the UI can flag it for verification. Anything the LLM can't confidently
identify is omitted — the user can always fill manually.