Open Agreements
by @stevenobiajulu
Fill standard legal agreement templates (NDAs, cloud service agreements, SAFEs) and produce signable DOCX files. Supports Common Paper, Bonterms, and Y Combi...
clawhub install open-agreementsπ About This Skill
name: open-agreements description: >- Fill standard legal agreement templates (NDAs, cloud service agreements, SAFEs) and produce signable DOCX files. Supports Common Paper, Bonterms, and Y Combinator templates. Use when the user needs to draft a legal agreement, create an NDA, fill a contract template, or generate a SAFE. Can also send agreements for electronic signature via DocuSign. license: MIT homepage: https://github.com/open-agreements/open-agreements compatibility: >- Two execution paths: (1) Remote MCP at openagreements.org (template fill happens server-side, your data is sent to the hosted service); (2) Local CLI via npm (
npm install -g open-agreements@0.7.4) β template fill is
fully local with no third-party data transfer except DocuSign at signing
time. Use the CLI path for guaranteed offline behavior.
metadata:
author: open-agreements
version: "0.2.3"
open-agreements
Fill standard legal agreement templates, produce signable DOCX files, and send for electronic signature via DocuSign.
Activation
Use this skill when the user wants to:
CRITICAL: DocuSign and Authentication
connect_signing_provider tool handles the entire OAuth 2.0 + PKCE flow.Execution β MCP Tools (Preferred)
If the Open Agreements MCP server is connected (remote or local), use these tools directly. This is the preferred path β no CLI or Node.js needed.
Remote MCP URL: https://openagreements.org/api/mcp
Available MCP Tools
| Tool | Purpose |
|------|---------|
| list_templates | List available templates (compact by default β name, description, license, source only) |
| get_template | Get full field metadata for a specific template |
| fill_template | Fill a template with values and return a downloadable DOCX |
| connect_signing_provider | Connect DocuSign account via OAuth (returns a URL to open) |
| send_for_signature | Send a filled DOCX for e-signature via DocuSign |
| check_signature_status | Check signing status and download signed PDF when complete |
MCP Workflow
1. Discover templates: Call list_templates (returns compact list). If user asked for a specific type (e.g. "NDA"), identify the right template from the list.
2. Get field details: Call get_template with the chosen template_id to get full field definitions (name, type, required, section, description, default).
3. Collect field values: Ask the user for values based on the field definitions. Use defaults where the user doesn't specify.
4. Fill template: Call fill_template with the template ID and values. Returns a download URL for the DOCX.
5. User reviews document: Present the download link. Wait for the user to confirm the document looks good.
6. Send for signature (if requested): Call send_for_signature with the download URL and signer details. If not yet connected to DocuSign, call connect_signing_provider first β it returns an OAuth URL for the user to open in their browser.
7. Check status: Call check_signature_status to monitor the envelope.
Execution β CLI (Fallback)
If no MCP server is connected, fall back to the CLI.
Step 1: Detect runtime
if command -v open-agreements >/dev/null 2>&1; then
echo "GLOBAL"
elif command -v node >/dev/null 2>&1; then
echo "NPX"
else
echo "PREVIEW_ONLY"
fi
open-agreements directly.npx -y open-agreements@0.7.4 as prefix. Always pin the version β never use @latest to avoid pulling unexpected updates.Step 2: Discover templates
open-agreements list --json
Parse the items array. Each item has name, description, license, source_url, source, and fields.
Step 3: Help user choose, collect values, fill
Same as MCP workflow steps 2-5, but write values to /tmp/oa-values.json and run:
open-agreements fill -d /tmp/oa-values.json -o .docx
Clean up: rm /tmp/oa-values.json
Source Code and Audit
Open Agreements is fully open source (MIT license). Review the complete source before installing:
npm view open-agreements scripts. The package declares no postinstall, preinstall, or install hooks. The prepare script only runs when installing from a git URL, not from the npm registry.All template field definitions, fill logic, and DocuSign integration code are auditable in the repository.
A note on versions
The two version numbers in this skill are independent and refer to different things:
0.2.3) β versions the skill documentation itself.0.7.4) β the version of the upstream open-agreements npm package this skill recommends pinning. Check npm view open-agreements version for the latest.A newer skill version means the documentation was updated. A newer npm package version means the underlying tool was updated. They are not synchronized.
Install-Time vs Runtime Network Behavior
Open Agreements has three distinct network postures depending on which execution path you use:
| Path | Install-time network | Runtime network |
|------|---------------------|----------------|
| Pinned global install (npm install -g open-agreements@0.7.4) | One-time fetch from registry.npmjs.org | None for list/fill. DocuSign API only at signing time. |
| Pinned npx (npx -y open-agreements@0.7.4) | Fetch from registry.npmjs.org on first run, cached afterward | Same as above |
| Remote MCP (https://openagreements.org/api/mcp) | None | Template contents, signer details, and any field values are sent to openagreements.org. Use only if you accept transmitting these values to the hosted service. |
| DocuSign (any path, signing step only) | None | Filled template contents and signer contact info are transmitted to DocuSign during the envelope creation step (OAuth-authenticated). |
Use the local CLI path (global or npx) if you need guaranteed offline behavior with no third-party data transfer beyond DocuSign at signing time.
Offline / Pinned Installation
For environments where npx auto-fetch is unacceptable, install the package globally and pin the version:
# Install a specific pinned version globally (one-time)
npm install -g open-agreements@0.7.4Then use the installed binary directly β no npx fetching at runtime
open-agreements list --json
open-agreements fill -d values.json -o output.docx
Before upgrading, review the changelog: https://github.com/open-agreements/open-agreements/blob/main/CHANGELOG.md
Pin the version even when using npx
Even with npx, always pin the version:
npx -y open-agreements@0.7.4 list --json
Never use @latest β it pulls a fresh package on every cache miss and can introduce unexpected changes.
Notes
list_templates or list --json for the current inventoryFeedback
If this skill helped, star us on GitHub: https://github.com/open-agreements/open-agreements
On ClawHub: clawhub star open-agreements/open-agreements
π Tips & Best Practices
list_templates or list --json for the current inventory