npx claudepluginhub houfu/coquillDocument assembly tool. Interview users and render completed documents from docx/HTML templates with conditional logic, loops, and developer configuration.
Official prompts.chat marketplace - AI prompts, skills, and tools for Claude Code
Behavioral guidelines to reduce common LLM coding mistakes, derived from Andrej Karpathy's observations
Claude Code plugins for the Slidev presentation framework

CoQuill is a document assembly tool for people already working with Claude and AI. If you're comfortable chatting with Claude, there's nothing new to learn — just ask it to prepare a document with CoQuill. Claude interviews you conversationally, collects the answers, and renders completed documents from your templates. No server, no database, no scripting language to learn. The whole project is a folder you can share as a zip — or deploy as a Claude Code plugin across your organisation in minutes.
templates/, each in its own subdirectory{{ variable_name }} placeholders wherever you need dynamic content{% if %} / {% else %} blocks for sections that should only appear based on user answers{% for item in items %} blocks for repeating sections (e.g., line items, milestones)config.yaml to customize questions, grouping, and validationoutput/Two template formats are supported:
.docx -- rendered via docxtpl, produces a Word document.html -- rendered via jinja2, produces both an HTML file and a PDF (via weasyprint)You'll need a Claude Cowork account.
Go to the Releases page and download the latest coquill-v*.zip file. Extract it to a folder of your choice (e.g., your Documents folder).
From within Claude Code:
/plugin marketplace add houfu/coquill/plugin install coquill@coquillCreate a subdirectory in templates/ and place your template file inside:
templates/
└── nda/
└── nda.docx <- contains {{ disclosing_party_name }}, {{ effective_date }}, etc.
Or for an HTML template:
templates/
└── invoice/
└── invoice.html <- same {{ variable }} syntax, styled with CSS
Tell Claude:
"I need to prepare an NDA with CoQuill"
Claude will find the template, extract its variables, and interview you for the values -- grouping related fields together for a natural flow.
After confirming all values, the rendered document is saved to a job folder:
output/
└── nda_acme_pte_ltd_2026-02-15/
└── nda_acme_pte_ltd_2026-02-15.docx
For HTML templates, both the HTML and PDF are saved:
output/
└── invoice_acme_2026-02-15/
├── invoice_acme_2026-02-15.html
└── invoice_acme_2026-02-15.pdf
Templates can include or exclude sections based on user answers. The interview automatically skips questions that aren't relevant.
{% if decisions_made %}
## Decisions
{{ decisions }}
{% endif %}
Equality conditions are also supported:
{% if meeting_type == 'workshop' %}
### Workshop Materials
{{ workshop_materials }}
{% endif %}
Templates can have repeating sections. The interview collects items one at a time with an "add another?" flow.
{% for item in action_items %}
- **{{ item.description }}** — Assigned to: {{ item.assignee }}, Due: {{ item.due_date }}
{% endfor %}
Template developers can place an optional config.yaml alongside their template to customize the interview experience:
meta:
display_name: "Meeting Notes"
description: "Structured meeting notes with action items and optional sections"
variables:
meeting_title:
label: "Meeting Title"
question: "What is the title of this meeting?"
required: true
meeting_type:
type: choice
choices: [standup, workshop, review]
default: "standup"
decisions_made:
type: boolean
question: "Were any decisions made during this meeting?"
default: false
groups:
- name: "Meeting Details"
variables: [meeting_title, meeting_date, meeting_type, facilitator_name]
- name: "Workshop Materials"
condition: "meeting_type == 'workshop'"
variables: [workshop_materials]
- name: "Action Items"
loop: action_items
variables: [description, assignee, due_date]
validation:
- rule: "next_meeting_date > meeting_date"
message: "The next meeting date must be after this meeting's date"