Skip to main content
skill CX Codex

form-builder — Claude Code skill: docassemble forms and questionnaires

This skill writes docassemble interview YAML: interactive forms and questionnaires that branch on the answers people give.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add claude-office-skills/skills --skill form-builder -a claude-code
Open on GitHub

What form-builder does

Describe the form you need and the branching rules, and the skill returns docassemble YAML — the guided-interview format that assembles a document from answers. It covers the interview skeleton with metadata and question blocks, conditional steps via if, and field types from email and currency to checkboxes and file.

Document output gets its own block: attachment with name, filename and content, where answers and helpers like currency(amount) and today() are substituted. The client intake example shows an client object holding name, email and phone, plus a branch on matter_type that asks for contract details only when the matter is a contract.

The skill is listed for Claude, Codex, Cursor, GitHub Copilot, Gemini CLI and OpenCode. Its metadata names the office-mcp server with create_docx and fill_docx_template tools, so check that it is connected if you plan to push forms into DOCX. The YAML itself comes without it.

What it helps with

  • build a questionnaire that changes questions based on answers
  • declare form fields with types and required flags
  • generate a document from what the user entered
  • assemble a multi-step form for contract generation
  • add file upload and checkbox inputs to an intake form

Example prompts for the agent

  • Create an intake form for new clients in docassemble
  • Build a conditional questionnaire: if the client is a business, ask for company name and EIN
  • Generate a multi-step form for contract generation with an attachment block

How to install form-builder

1Skills CLI (Vercel)

npx skills add claude-office-skills/skills --skill form-builder -a claude-code

2Manually: put the files in place

~/.claude/skills/form-builder/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/form-builder/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about form-builder

How do I install form-builder in Claude?

Run npx skills add claude-office-skills/skills --skill form-builder -a claude-code. The skill lands in ~/.claude/skills/form-builder/SKILL.md.

What does form-builder do?

It helps the agent write docassemble interview YAML: questions, branching on answers, field types, and assembling the final document from a template.

Does the skill need an MCP server?

Its metadata names office-mcp with the create_docx and fill_docx_template tools. That matters for DOCX output; the interview YAML is written without it.

Source text

SKILL.md · MIT
---
# ═══════════════════════════════════════════════════════════════════════════════
# CLAUDE OFFICE SKILL - Enhanced Metadata v2.0
# ═══════════════════════════════════════════════════════════════════════════════

# Basic Information
name: form-builder
description: "Build interactive document forms and questionnaires using docassemble"
version: "1.0"
author: claude-office-skills
license: MIT

# Categorization
category: template
tags:
  - form
  - builder
  - interactive
  - docassemble
department: All

# AI Model Compatibility
models:
  recommended:
    - claude-sonnet-4
    - claude-opus-4
  compatible:
    - claude-3-5-sonnet
    - gpt-4
    - gpt-4o

# MCP Tools Integration
mcp:
  server: office-mcp
  tools:
    - create_docx
    - fill_docx_template

# Skill Capabilities
capabilities:
  - form_creation
  - interactive_documents

# Language Support
languages:
  - en
  - zh
---

# Form Builder Skill

## Overview

This skill enables creation of intelligent document forms using **docassemble** - a platform for guided interviews that generate documents. Create questionnaires that adapt based on answers.

## How to Use

1. Describe the form or document you need
2. Specify conditional logic requirements
3. I'll create docassemble interview YAML

**Example prompts:**
- "Create an intake form for new clients"
- "Build a conditional questionnaire for legal documents"
- "Generate a multi-step form for contract generation"
- "Design an interactive document assembly form"

## Domain Knowledge

### Interview Structure

```yaml
metadata:
  title: Client Intake Form
  short title: Intake

---
question: |
  What is your name?
fields:
  - First Name: first_name
  - Last Name: last_name

---
question: |
  What type of service do you need?
field: service_type
choices:
  - Contract Review
  - Document Drafting
  - Consultation

---
mandatory: True
question: |
  Thank you, ${ first_name }!
subquestion: |
  We will contact you about your ${ service_type } request.
```

### Conditional Logic

```yaml
---
question: |
  Are you a business or individual?
field: client_type
choices:
  - Business
  - Individual

---
if: client_type == "Business"
question: |
  What is your company name?
fields:
  - Company: company_name
  - EIN: ein
    required: False

---
if: client_type == "Individual"
question: |
  What is your date of birth?
fields:
  - Birthdate: birthdate
    datatype: date
```

### Field Types

```yaml
fields:
  # Text
  - Name: name
  
  # Email
  - Email: email
    datatype: email
  
  # Number
  - Age: age
    datatype: integer
  
  # Currency
  - Amount: amount
    datatype: currency
  
  # Date
  - Start Date: start_date
    datatype: date
  
  # Yes/No
  - Agree to terms?: agrees
    datatype: yesno
  
  # Multiple choice
  - Color: color
    choices:
      - Red
      - Blue
      - Green
  
  # Checkboxes
  - Select options: options
    datatype: checkboxes
    choices:
      - Option A
      - Option B
  
  # File upload
  - Upload document: document
    datatype: file
```

### Document Generation

```yaml
---
mandatory: True
question: |
  Your document is ready.
attachment:
  name: Contract
  filename: contract
  content: |
    # Service Agreement
    
    This agreement is between **${ client_name }**
    and **Service Provider**.
    
    ## Services
    ${ service_description }
    
    ## Payment
    Total amount: ${ currency(amount) }
    
    Date: ${ today() }
```

## Example: Client Intake

```yaml
metadata:
  title: Legal Client Intake
  short title: Intake

---
objects:
  - client: Individual

---
question: |
  Welcome to our intake form.
subquestion: |
  Please answer the following questions.
continue button field: intro_screen

---
question: |
  What is your name?
fields:
  - First Name: client.name.first
  - Last Name: client.name.last
  - Email: client.email
    datatype: email
  - Phone: client.phone
    required: False

---
question: |
  What type of matter is this?
field: matter_type
choices:
  - Contract: contract
  - Dispute: dispute
  - Advisory: advisory

---
if: matter_type == "contract"
question: |
  Contract Details
fields:
  - Contract Type: contract_type
    choices:
      - Employment
      - Service Agreement
      - NDA
  - Other Party: other_party
  - Estimated Value: contract_value
    datatype: currency

---
mandatory: True
question: |
  Thank you, ${ client.name.first }!
subquestion: |
  **Summary:**
  
  - Name: ${ client.name }
  - Email: ${ client.email }
  - Matter: ${ matter_type }
  
  We will contact you within 24 hours.
```

## Resources

- [docassemble Documentation](https://docassemble.org/docs.html)
- [GitHub Repository](https://github.com/jhpyle/docassemble)

© claude-office-skills · MIT · claude-office-skills/skills

Similar skills

Everything for Office documents →

From the same set111

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor