Reply Form
A form for crafting thoughtful replies to messages, emails, posts, or comments with AI assistance.
Source: reply.yml
What It Does
This form helps you compose replies by capturing the original content, your draft response, and style preferences. It's designed to work with AI assistants by formatting a structured prompt. It demonstrates:
- Tabbed interface with three categories (Content, Style, Convo)
- Inline radio buttons for content type
- Checkbox-based style guidelines with predefined options
- Custom guidelines array for additional preferences
- Conversation context field for threading
- Conditional output sections with merged guidelines
Use Case
Copy a message, email, or comment to your clipboard, trigger the form, and get a structured prompt you can paste into an AI assistant like ChatGPT, Claude, or Gemini to help craft your reply.
Example output:
Help me reply to this email:
```
Hi, I wanted to follow up on our proposal...
```
My draft response:
```
Thanks for reaching out...
```
Style guidelines:
- Use a conversational, slightly informal style with simple language
- Use contractions like "you're" and "don't"
- Prioritize clarity with simple sentence structure
- Keep it under 100 wordsForm Configuration
schema:
type: object
properties:
type:
type: string
enum:
- message
- email
- post
- comment
- review
content:
type: string
default: "{{clipboard}}"
draft:
type: string
styleGuidelines:
type: array
items:
type: string
enum:
- Use a conversational, slightly informal style with simple language
- Use contractions like "you're" and "don't"
- Prioritize clarity with simple sentence structure
- Use a professional and formal tone
- Use a friendly and approachable style
- Use active voice instead of passive
- Match the original sender's formality level
uniqueItems: true
customGuidelines:
type: array
items:
type: string
context:
type: string
convo:
type: string
required:
- type
- content
uischema:
type: Categorization
elements:
- type: Category
label: Content
elements:
- type: VerticalLayout
elements:
- type: Control
scope: "#/properties/type"
label: Help me reply to this
options:
format: radio
vuetify:
v-radio-group:
inline: true
hideDetails: true
- type: Control
scope: "#/properties/content"
options:
multi: true
- type: Control
scope: "#/properties/draft"
label: My draft response
options:
multi: true
vuetify:
v-textarea:
rows: 10
- type: Control
scope: "#/properties/context"
label: Additional context
options:
multi: true
- type: Category
label: Style
elements:
- type: VerticalLayout
elements:
- type: Control
scope: "#/properties/styleGuidelines"
label: Style guidelines
options:
format: checkbox
vuetify:
v-input:
class: vertical
- type: Control
scope: "#/properties/customGuidelines"
label: Custom guidelines
- type: Category
label: Convo
elements:
- type: VerticalLayout
elements:
- type: Control
scope: "#/properties/convo"
label: Entire conversation (if applicable)
data:
type: message
content: "{{clipboard}}"
styleGuidelines:
- Use a conversational, slightly informal style with simple language
- Use contractions like "you're" and "don't"
- Prioritize clarity with simple sentence structure
customGuidelines:
- ""
template: |
Help me reply to this {{type}}:
```
{{content}}
```
{% if draft %}
My draft response:
```
{{draft}}
```
{% endif %}
{% assign allGuidelines = styleGuidelines | concat: customGuidelines %}
{% assign filteredGuidelines = allGuidelines | where_exp: "item", "item != ''" %}
{% if filteredGuidelines.size > 0 %}
Style guidelines:
- {{filteredGuidelines | join: '\n- '}}
{% endif %}
{% if convo %}
Here is the entire conversation for context:
```
{{convo}}
```
{% endif %}
{% if context %}
Additional context:
```
{{context}}
```
{% endif %}Key Features
Three-Tab Interface
The form uses Categorization to organize fields into three tabs:
uischema:
type: Categorization
elements:
- type: Category
label: Content # Main content and draft
- type: Category
label: Style # Writing style preferences
- type: Category
label: Convo # Full conversation contextCheckbox Style Guidelines
Predefined style options displayed as checkboxes with uniqueItems to prevent duplicates:
styleGuidelines:
type: array
items:
type: string
enum:
- Use a conversational, slightly informal style with simple language
- Use a professional and formal tone
- Match the original sender's formality level
uniqueItems: trueCustom Guidelines
Add your own guidelines beyond the predefined options:
customGuidelines:
type: array
items:
type: stringMerged Guidelines in Template
The template combines both styleGuidelines and customGuidelines, filtering out empty entries:
{% assign allGuidelines = styleGuidelines | concat: customGuidelines %}
{% assign filteredGuidelines = allGuidelines | where_exp: "item", "item != ''" %}Conditional Template Sections
The template only includes sections that have content:
{% if draft %}
My draft response:
{{draft}}
{% endif %}Espanso Trigger
matches:
- trigger: ':reply'
replace: '{{output}}'
force_mode: clipboard
vars:
- name: output
type: script
params:
args:
- C:/Program Files/Espanso Dynamic Forms/EDF.exe
- --form-config
- \{\{env.EDF_FORMS}}/reply.ymlCustomization Ideas
- Add more content types (tweet, slack message, forum post)
- Add a "tone" dropdown (professional, friendly, assertive)
- Include a maximum length preference
- Add a language selector for replies in different languages
- Expand the predefined style guidelines enum with more options