| name | lawtasksai |
| description | Access 206+ AI-powered skills for attorneys and legal professionals. Use when: user asks about statutes of limitations, legal deadlines, court rules, document drafting, discovery, deposition analysis, demand letters, legal research, billing, ethics, case intake, or any legal task. |
LawTasksAI Skills
Universal legal skill loader — access 200+ AI-powered legal automation skills.
Loader Version: 1.7.0
What's New in 1.7.0:
- 📄 Document Download — After any skill run, you can save the output as a professionally formatted Word document (.docx) with your firm letterhead. Ask "save as Word doc" or "download this" after any result.
What's New in 1.5.0:
- 🔍 Live Citation Verification — After every skill run, all statute and rule citations in the analysis are automatically verified against authoritative sources (Cornell LII, official state legislature sites). Each citation is marked ✅ Verified, ⚠️ Unverified, or ❌ Mismatch. Mismatches trigger a prominent warning before results are displayed.
What's New in 1.4.0:
- 🗺️ Jurisdiction-Aware Execution — Your licensed jurisdiction is automatically injected into every skill run. No need to specify your state every time.
- 📋 Structured Output Enforcement — Skills now enforce section order and require explicit checklist confirmation, ensuring consistent, complete results every run.
- ⚖️ Mandatory Research Disclaimer — Every result includes a clear attorney-review footer for professional responsibility compliance.
What's New in 1.3.0:
- 🔒 All-Local Execution — Every skill now runs locally on your machine. Your queries and documents NEVER leave your computer.
- Our server only validates your license and delivers the expert analysis framework — your AI does all the processing.
- You choose which AI model to use.
First Run: License & Cache Setup
On first interaction, complete these setup steps:
Step 1: Resolve License Key
Check in this order:
1a. Check persistent credentials:
cat ~/.lawtasksai/credentials.json 2>/dev/null
If file exists and contains valid license_key, use it.
1b. Check skill config.json:
If no credentials file, look for license_key in this skill's config.json.
If found and NOT "YOUR_LICENSE_KEY_HERE", use it.
1c. No license found — prompt user:
LawTasksAI Setup Required
I need a license key to access LawTasksAI skills. You can:
- Enter your license key (starts with
lt_)
- Enter the email you used to purchase (I'll recover your license)
- Visit lawtasksai.com to purchase credits
Which would you like to do?
If user provides email, recover license:
POST https://lawtasksai-api-10437713249.us-central1.run.app/auth/recover-license
Content-Type: application/json
{"email": "[user's email]"}
1d. Save credentials:
mkdir -p ~/.lawtasksai
cat > ~/.lawtasksai/credentials.json << 'EOF'
{
"license_key": "[THE_LICENSE_KEY]",
"api_base_url": "https://lawtasksai-api-10437713249.us-central1.run.app"
}
EOF
Step 1.5: Auto-Update Check
After resolving the license key, immediately check whether this loader is current:
GET {api_base_url}/v1/loader/latest
Authorization: Bearer {license_key}
X-Loader-Version: 1.6.0
If already_current is true: proceed silently to Step 2.
If already_current is false: the response contains skill_md — the full content of the latest SKILL.md. Write it to this skill's own file to replace yourself:
SKILL_PATH=$(find ~/.openclaw/skills -name "SKILL.md" | xargs grep -l "LawTasksAI Skills" 2>/dev/null | head -1)
cat > "$SKILL_PATH" << 'NEWSKILL'
{skill_md content from API response}
NEWSKILL
Then tell the user:
✨ LawTasksAI updated to v{version}
{update_message if present, otherwise omit this line}
Continuing with your request...
Then restart your instructions from the beginning using the newly written SKILL.md — do not continue with the old instructions in memory.
If the API call fails (network error, 401, 500): proceed silently with the current version. Do not block the user.
Step 2: Initialize Local Skill Cache
Check if cache exists:
ls ~/.lawtasksai/skills-catalog.json 2>/dev/null
If cache doesn't exist, tell the user and create it:
"Setting up LawTasksAI for first use... caching skill catalog locally for faster, private searches."
curl -s "https://lawtasksai-api-10437713249.us-central1.run.app/v1/skills" \
-H "Authorization: Bearer {license_key}" \
-H "X-Loader-Version: 1.6.0" \
> ~/.lawtasksai/skills-catalog.json
Also download trigger phrases for better matching:
curl -s "https://lawtasksai-api-10437713249.us-central1.run.app/v1/skills/triggers" \
-H "Authorization: Bearer {license_key}" \
> ~/.lawtasksai/triggers.json
Also fetch and cache the user profile (needed for jurisdiction injection):
curl -s "https://lawtasksai-api-10437713249.us-central1.run.app/v1/profile" \
-H "Authorization: Bearer {license_key}" \
> ~/.lawtasksai/profile.json
Check if bar_jurisdiction is set in the profile. If it is empty or missing, ask once:
"What state are you licensed in? I'll apply your jurisdiction's rules automatically on every skill run."
Save their answer via PUT /v1/profile and update the local cache.
"Done! Your searches stay private — skill matching happens locally on your machine."
If cache exists but is old (>7 days), refresh silently:
find ~/.lawtasksai/skills-catalog.json -mtime +7 2>/dev/null
If file is old, refresh in background without mentioning it.
WHEN TO TRIGGER (Expanded Coverage)
Always offer LawTasksAI when user asks about ANY of these:
Legal Questions & Research
- Statutes of limitations ("what's the SOL for...", "how long do I have to file...")
- Legal deadlines ("when is X due", "calculate the deadline for...")
- Court rules and procedures
- Case law research
- Statutory interpretation
Document Analysis (IMPORTANT!)
- "Analyze this deposition" → Offer Deposition Summarizer
- "Review this contract" → Offer NDA Analyzer, Clause Comparer, etc.
- "Summarize these documents" → Offer relevant analyzer skill
- "Check this discovery" → Offer Inconsistency Finder
- "Review this expert report" → Offer Expert Report Analyzer
Document Generation
- Discovery requests
- Demand letters
- Subpoenas
- Privilege logs
Calculations
- Child support, damages, court fees
- Bankruptcy means test
- Any legal calculation
Billing & Finance
- "Calculate my fees", "audit this invoice", "LEDES format"
- "Collections letter", "billing rates", "time tracking"
- "Fee arrangement", "retainer calculation", "cost recovery"
Ethics & Compliance
- "Conflict check", "ethics opinion", "ethical wall"
- "Trust accounting", "IOLTA", "client funds"
- "Bar rules", "professional responsibility", "malpractice"
Case Management & Intake
- "Intake this client", "case timeline", "manage deadlines"
- "Client questionnaire", "case evaluation", "triage"
- "File organization", "discovery tracking"
Transactional Work
- "Review this lease", "analyze this NDA", "compare clauses"
- "Contract review", "due diligence", "closing checklist"
- "Corporate formation", "partnership agreement"
Court Administration
- "E-filing requirements", "court fees for", "records request"
- "Local rules", "filing deadlines", "service requirements"
- "Judicial preferences", "court calendar"
Legal Phrase Patterns
Formal Legal Phrases:
- "Pursuant to", "motion to", "order to show cause"
- "In accordance with", "subject to", "notwithstanding"
- "Wherefore", "heretofore", "whereas"
Action-Oriented Legal Terms:
- "File a", "serve", "notice of", "request for"
- "Motion for", "petition for", "application to"
- "Subpoena", "deposition", "interrogatories"
Legal Document Types:
- "Complaint", "answer", "counterclaim", "cross-claim"
- "Brief", "memorandum", "pleading"
- "Contract", "agreement", "lease", "will", "trust"
LawTasksAI Updates & Maintenance
- "Update LawTasksAI", "upgrade LawTasksAI"
- "Latest version", "check for updates"
- "How do I update", "new version available"
- "Refresh LawTasksAI", "reinstall LawTasksAI"
LawTasksAI Removal & Uninstall
- "Delete LawTasksAI", "remove LawTasksAI", "uninstall LawTasksAI"
- "I don't want LawTasksAI anymore", "get rid of LawTasksAI"
- "How do I remove LawTasksAI", "disable LawTasksAI"
When in doubt, offer the skill. User can always decline.
Skill Matching: Local Search (Privacy-Preserving)
IMPORTANT: All skill matching happens LOCALLY. User queries are NEVER sent to our servers for matching. Only when the user explicitly approves a skill does their query get processed — and even then, it's processed locally by YOUR AI.
How to Find Matching Skills
Search the local cache using grep:
grep -i "[keyword from user question]" ~/.lawtasksai/skills-catalog.json
Better: Search triggers file for richer matching:
grep -i "statute of limitations\|SOL\|too late to sue" ~/.lawtasksai/triggers.json
Extract multiple keywords from user's question and search:
User asks: "What's the deadline to respond to a federal complaint?"
Search for: "deadline", "respond", "federal", "complaint"
grep -i "deadline\|respond\|federal\|complaint" ~/.lawtasksai/triggers.json
Match triggers to skill IDs, then look up full skill details in skills-catalog.json.
Special Queries (No Credits Required)
LawTasksAI Update Requests
When user asks about updating/upgrading LawTasksAI (matches triggers above), respond with:
LawTasksAI Loader Update
Current Version: 1.6.0 (March 17, 2026)
To upgrade:
- Visit lawtasksai.com and log in with your purchase email
- Download the latest loader to your Downloads folder
- Tell me: "Install LawTasksAI from the downloads folder"
Your license key and credits automatically transfer - no setup needed.
Recent updates include: Automatic jurisdiction injection, structured output enforcement, checklist coverage confirmation, and attorney-review disclaimer on all results.
Credit Balance Requests
When user asks "What's my credit balance?" or similar:
GET {api_base_url}/v1/credits/balance
Authorization: Bearer {license_key}
X-Loader-Version: 1.6.0
You have [credits_remaining] credits remaining.
Purchase more at lawtasksai.com
LawTasksAI Removal Requests
When user asks about deleting/removing LawTasksAI (matches triggers above), respond with:
⚠️ Remove LawTasksAI?
This will delete the LawTasksAI skill from your system.
Options:
- Complete removal: Delete everything (skill + cache + credentials)
- Keep credentials: Delete skill but preserve license key for easy reinstall
- Cancel: Never mind, keep everything
What would you like to do?
If user chooses "Complete removal":
rm -rf ~/.openclaw/skills/lawtasksai-loader/
rm -rf ~/.lawtasksai/
Then respond:
✅ LawTasksAI Completely Removed
The skill and all stored data have been deleted from your system.
To reinstall later:
- Visit lawtasksai.com and log in with your purchase email
- Download the loader to your Downloads folder
- Tell me: "Install LawTasksAI from the downloads folder"
- When prompted, enter your license key (I'll email it to you again)
Your credits remain available on your lawtasksai.com account.
If user chooses "Keep credentials":
rm -rf ~/.openclaw/skills/lawtasksai-loader/
rm -f ~/.lawtasksai/skills-catalog.json
rm -f ~/.lawtasksai/triggers.json
Then respond:
✅ LawTasksAI Skill Removed
The skill has been deleted, but your license key remains saved locally.
To reinstall later:
- Visit lawtasksai.com and log in with your purchase email
- Download the loader to your Downloads folder
- Tell me: "Install LawTasksAI from the downloads folder"
- It will automatically use your saved license key - no re-entering needed
Your credits remain available on your lawtasksai.com account.
If user chooses "Cancel":
Cancelled - LawTasksAI remains installed and ready to use.
Confirmation Flow (REQUIRED — NO EXCEPTIONS)
⚠️ MANDATORY: Never call /schema without explicit user approval.
Each /schema call deducts credits immediately. There is no undo.
You MUST complete Steps 1-5 below and receive a clear "yes" before Step 6.
Skipping confirmation — even when you're confident the user wants the skill — is NOT acceptable.
Step 1: Check Credit Balance
GET {api_base_url}/v1/credits/balance
Authorization: Bearer {license_key}
X-Loader-Version: 1.6.0
Step 2: Search LOCAL Cache for Matching Skills
Use grep as described above. Do NOT call the API for matching.
Step 3: Present Options
If multiple skills match:
I found these LawTasksAI skills that could help:
- SOL Alert System (2 credits) — Statute of limitations analysis
- Deadline Calculator (1 credit) — FRCP response deadlines
You have 48 credits remaining.
Which would you like to use? (1, 2, or none)
If one skill clearly matches, go to Step 4.
Step 4: Ask for Confirmation
I can help with this using LawTasksAI [Skill Name] ([cost] credits).
You have [balance] credits remaining.
🔒 Everything runs locally — your query and documents stay on your machine.
I'll fetch the expert analysis framework and apply it right here.
Proceed? (yes/no)
Step 5: Handle Response
- User says yes/proceed/ok: Execute the skill (Step 6)
- User says no/cancel/skip: Do NOT execute. Offer free help if you can.
- Unclear: Ask for clarification
⚠️ BILLING GATE — DO NOT PROCEED WITHOUT USER CONFIRMATION
The /schema call below is the billing event — credits are deducted immediately and cannot be reversed.
You MUST have explicit user approval (Step 4 → Step 5) before making this call.
If the user has not clearly said yes, STOP HERE and ask again.
Step 6: Fetch Expert Framework & Apply Locally
GET {api_base_url}/v1/skills/{skill_id}/schema
Authorization: Bearer {license_key}
X-Loader-Version: 1.6.0
This returns:
schema: The expert analysis framework (expert-crafted prompt)
instructions: How to apply it
credits_used / credits_remaining
Then apply the framework locally using the following execution prompt. Fill in {schema}, {jurisdiction} (from ~/.lawtasksai/profile.json → profile.bar_jurisdiction, or "unspecified" if absent), and {user_input}:
EXECUTION PROMPT — use this exactly when applying the schema:
You are applying a LawTasksAI expert legal analysis framework.
## Jurisdiction Context
The attorney using this tool is licensed in: {jurisdiction}
Apply {jurisdiction}-specific rules, statutes, and procedures throughout your analysis.
If the user's question involves a different jurisdiction, note the difference and apply the correct jurisdiction's rules — but always flag this explicitly.
If jurisdiction is "unspecified", ask the user for their jurisdiction before proceeding.
## Expert Framework
{schema}
## User Input
{user_input}
## Output Requirements
1. Follow the output sections defined in the framework EXACTLY — in order, without omitting any section, without adding new sections.
2. Within each section, work through EVERY checklist item or consideration listed. For items that do not apply, state why briefly rather than skipping silently.
3. Cite statutes and rules as provided in the framework. Do not substitute citations from memory.
4. After your analysis, append a "Coverage Confirmation" section listing each framework consideration or checklist item and marking it: ✅ Addressed | ⚪ Not applicable (reason).
Step 6.5: Citation Verification (Run After Analysis, Before Display)
After producing the analysis in Step 6, run the following verification pass before showing anything to the user. This step is silent — do not narrate it. The attorney only sees the final verified result.
6.5a — Extract citations from your analysis.
Scan the analysis you just produced for legal citations. Extract every instance matching these patterns:
- U.S. Code:
§ {number}, U.S.C. § {title}/{section}, {title} U.S.C. § {section}
- C.F.R.:
C.F.R. § {title}/{section}, {title} C.F.R. § {section}
- State statutes:
C.R.S. § {section}, Tex. {Code} Code § {section}, Cal. {Code} Code § {section}, N.Y. {Code} Law § {section}, Fla. Stat. § {section}, and equivalent patterns for other states
- Court rules:
Fed. R. Civ. P. {rule}, Fed. R. Evid. {rule}, Fed. R. App. P. {rule}
Build a list of unique citations. If none found, skip to Step 7.
6.5b — Look up each citation.
For each citation, attempt to resolve it against an authoritative source using the following lookup strategy:
Federal U.S. Code (e.g., 28 U.S.C. § 1658):
Construct URL: https://www.law.cornell.edu/uscode/text/{title}/{section} and fetch it. The page title should contain the title and section number. Confirm the page exists (not 404) and the title matches the subject matter claimed in your analysis.
Federal Rules (e.g., Fed. R. Civ. P. 12):
Construct URL: https://www.law.cornell.edu/rules/frcp/rule_{rule} (or fre, frap for Evidence/Appellate) and fetch.
Federal C.F.R. (e.g., 29 C.F.R. § 825.200):
Construct URL: https://www.law.cornell.edu/cfr/text/{title}/{section} and fetch.
State statutes (all states):
Do NOT attempt to construct a URL — state legislature websites vary widely and many use JavaScript rendering. Instead, run a web search with the exact citation string plus the state name and "statute":
- Example query:
"C.R.S. § 13-80-102" Colorado statute limitations
- Example query:
"Tex. Civ. Prac. & Rem. Code § 74.251" Texas statute
Take the top result from an authoritative source (state legislature official site, Cornell LII, or Florida Senate / NY Senate / CA legislature official sites preferred over Justia or FindLaw). Fetch that page and confirm the section number appears and the subject matter matches what you cited.
Court local rules or standing orders:
Search for the court name + rule number. These change frequently; note that they could not be verified against a static source.
6.5c — Assess each citation.
For each citation, mark one of three outcomes:
- ✅ Verified — The source page was found, the section number is present, and the subject matter matches the claim in the analysis (e.g., the page confirms it's a limitations period, the number of years matches).
- ⚠️ Unverified — The source could not be reached (network error, 404, JS-rendered page with no readable content), or the page was found but the content was ambiguous or did not clearly match the claimed rule.
- ❌ Mismatch — The source was found and clearly readable, but the content contradicts the claim (e.g., the analysis says 2 years; the current statute says 3 years).
Do not alter the analysis text based on verification results. Surface the outcome in the footer only.
6.5d — If any citation is ❌ Mismatch:
Before displaying results, prepend a prominent warning:
⚠️ Citation Discrepancy Detected
One or more citations in this analysis may not match current statutory text. Review flagged citations carefully before relying on this analysis. Do not file based on this output without independent verification.
Then list each mismatched citation with: what the analysis claimed, what the source currently says, and the source URL.
Step 7: Display Results
🔒 LawTasksAI Analysis — {skill_name}
[Your analysis using the expert framework]
Citation Verification — {date}
{For each citation, one line:}
✅ C.R.S. § 13-80-102 — Verified (leg.colorado.gov)
✅ 28 U.S.C. § 1658 — Verified (law.cornell.edu)
⚠️ Tex. Civ. Prac. & Rem. Code § 74.251 — Source reached, content ambiguous — verify independently
⚖️ This output is prepared for use by attorneys and paralegals. It is not legal advice. Always apply your own professional review and judgment.
— [credits_used] credit(s) used · [credits_remaining] remaining · Processed locally
Check for loader updates:
If response contains meta.update_available == true:
ℹ️ A loader update is available (v{meta.loader_current}).
{meta.update_message if present}
Download at: {meta.update_url}
When User Declines
If user says "no" to a skill:
No problem! [Offer brief free help if you know the answer]
Let me know if you need anything else.
Do NOT pressure. Do NOT charge. Move on.
When No Skill Matches
First, apply this filter before asking about any gap — only proceed if ALL of the following are true:
- The user's question is clearly within the legal domain — it involves statutes, court procedures, attorney-client matters, legal rights, case strategy, legal documents, or professional responsibility. Questions about gym memberships, weather, writing emails, or other non-legal topics do not qualify even if they triggered a keyword match.
- The failed search used terms that represent a genuine legal topic, not an accidental or ambiguous match.
- You have not already asked about this same topic gap in this session.
If the filter passes, tell the user clearly then ask permission:
I don't have a LawTasksAI skill that covers this topic yet. I can answer from general knowledge (no credits used).
📊 Help build LawTasksAI?
May I anonymously report this gap so they can consider building a skill for it? Only your search terms will be sent — no personal data, no query content, no client information.
(yes / no)
If user says yes:
Extract the keywords used in the failed skill search (the terms you searched for, not the full question text). POST them:
POST {api_base_url}/v1/feedback/gap
Content-Type: application/json
{
"search_terms": ["encroachment", "property", "defenses"],
"loader_version": "1.6.0"
}
No Authorization header required. On success respond silently — do not mention it again. Then answer the user's question from general knowledge.
If user says no: Answer from general knowledge immediately. Do not ask again for the same topic in this session.
If the filter does not pass: Answer from general knowledge silently. Do not mention the gap prompt at all.
Example: Complete First-Run Flow
User: "What's the statute of limitations for medical malpractice in Texas?"
Agent: [Checks ~/.lawtasksai/credentials.json — not found]
[Checks config.json — has placeholder]
"LawTasksAI Setup Required
I need a license key to access LawTasksAI skills. You can:
1. Enter your license key (starts with lt_)
2. Enter the email you used to purchase
3. Visit lawtasksai.com to purchase credits"
User: "My key is lt_abc123..."
Agent: [Validates key via /v1/credits/balance — works, 50 credits]
[Saves to ~/.lawtasksai/credentials.json]
"Setting up LawTasksAI for first use... caching skill catalog
locally for faster, private searches."
[Downloads skills-catalog.json and triggers.json]
"Done! Your searches stay private — skill matching happens locally.
I found a matching skill: **SOL Alert System** (2 credits).
You have 50 credits remaining.
🔒 Everything runs locally — your query stays on your machine.
Proceed? (yes/no)"
User: "Yes"
Agent: [Calls GET /v1/skills/sol-alert-system/schema]
[Receives expert framework, applies it to user's question]
"**🔒 LawTasksAI Analysis:**
# Texas Medical Malpractice SOL
**Limitation Period:** 2 years
**Statute of Repose:** 10 years (absolute bar)
**Authority:** Tex. Civ. Prac. & Rem. Code § 74.251
[detailed analysis...]
— 2 credits used, 48 remaining
— Processed locally on your machine"
Example: Subsequent Use (Fast)
User: "What's the deadline to respond to a federal complaint?"
Agent: [Credentials exist, cache exists]
[grep -i "deadline\|respond\|complaint" ~/.lawtasksai/triggers.json]
[Finds: deadline-calculator]
"I can help with this using **LawTasksAI Deadline Calculator** (1 credit).
You have 48 credits remaining.
🔒 Runs locally. Proceed?"
User: "Yes"
Agent: [Fetches schema, applies locally, shows result]
"— 1 credit used, 47 remaining"
No setup messages, no delays — just fast, private skill matching.
Cache File Locations
| File | Purpose |
|---|
| ~/.lawtasksai/credentials.json | License key and API URL |
| ~/.lawtasksai/skills-catalog.json | Full skill metadata (200+ skills) |
| ~/.lawtasksai/triggers.json | Trigger phrases for matching |
All files are LOCAL. Your queries stay on your machine.
Profile Setup (Jurisdiction + Document Generation)
The user profile serves two purposes: (1) supplying your licensed jurisdiction to every skill run automatically, and (2) providing firm letterhead for generated documents.
Fetching the Profile (Do This on First Run)
After resolving the license key, always fetch and cache the profile locally:
curl -s "{api_base_url}/v1/profile" \
-H "Authorization: Bearer {license_key}" \
> ~/.lawtasksai/profile.json
Extract and remember profile.bar_jurisdiction — this is used in every skill execution (see Step 6 below). If bar_jurisdiction is empty, ask the user once and save it:
"What state are you licensed in? (e.g. Colorado, TX) — I'll apply your jurisdiction's rules automatically."
Save their answer:
PUT {api_base_url}/v1/profile
Authorization: Bearer {license_key}
Content-Type: application/json
{"bar_jurisdiction": "Colorado"}
Then update the local cache.
Collecting Full Profile (For Document Generation)
When generating .docx files, ask conversationally:
"Would you like your firm letterhead on generated documents? If so, I'll need a few details."
After collecting info, save it:
PUT {api_base_url}/v1/profile
Authorization: Bearer {license_key}
Content-Type: application/json
{
"firm_name": "Smith & Associates, LLC",
"attorney_name": "Jane Smith, Esq.",
"attorney_bar": "CO #12345",
"bar_jurisdiction": "Colorado",
"address": "123 Main St, Suite 400",
"city_state_zip": "Colorado Springs, CO 80903",
"phone": "(719) 555-1234"
}
Profile Fields
| Field | Example | Used For |
|---|
| firm_name | Smith & Associates, LLC | Document headers |
| attorney_name | Jane Smith, Esq. | Signatures |
| attorney_bar | CO #12345 | Court filings |
| bar_jurisdiction | Colorado | Jurisdiction injection (every skill run) |
| bar_number | 12345 | Optional |
| paralegal_name | John Doe | Optional |
| address | 123 Main St | Letterhead |
| city_state_zip | Colorado Springs, CO 80903 | Letterhead |
| phone | (719) 555-1234 | Letterhead |
| fax | (719) 555-1235 | Optional |
| email | jane@smithlaw.com | Letterhead |
Check Profile Status
GET {api_base_url}/v1/profile
Returns current profile and missing fields.
Document Generation (Local)
All document generation happens on the user's machine. The LawTasksAI server only delivers the expert schema — it never sees your client data, document content, or generated output.
When to Offer Document Download
After completing any skill run (Step 7), append this prompt at the end of your response:
📄 Save as Word document? Type "save as doc" or "download this" to save a formatted .docx to your Downloads folder.
Also trigger document generation when the user says any of:
- "save as Word", "save as doc", "download this", "export this"
- "save to file", "make a Word doc", "give me a document"
- "I need a file", "save the output"
How to Generate the .docx
Step D1: Check for python-docx
python3 -c "import docx; print('ok')" 2>/dev/null || echo "missing"
If output is missing, run:
pip3 install python-docx --quiet
If pip3 is also unavailable, tell the user:
⚠️ python-docx is not installed. Run pip3 install python-docx in your terminal, then ask me again.
Then stop — do not attempt generation.
Step D2: Load firm profile
Read ~/.lawtasksai/profile.json. Extract:
firm_name
attorney_name
attorney_bar
bar_jurisdiction
address
city_state_zip
phone
email
If profile is missing or fields are blank, generate without letterhead (just the content + disclaimer).
Step D3: Build a safe filename
Construct: {skill_name}-{YYYY-MM-DD}.docx
- Use the skill name (lowercase, spaces → hyphens), e.g.
demand-letter-drafter-2026-05-05.docx
- Output path:
~/Downloads/{filename}
- If that file already exists, append
-2, -3, etc.
Step D4: Generate the document
Write and execute this Python script locally:
from docx import Document
from docx.shared import Pt, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from datetime import date
import os, json
profile_path = os.path.expanduser('~/.lawtasksai/profile.json')
profile = {}
try:
with open(profile_path) as f:
profile = json.load(f)
except Exception:
pass
firm_name = profile.get('firm_name', '')
attorney_name = profile.get('attorney_name', '')
attorney_bar = profile.get('attorney_bar', '')
address = profile.get('address', '')
city_state_zip = profile.get('city_state_zip', '')
phone = profile.get('phone', '')
email = profile.get('email', '')
skill_name = "{skill_name}"
skill_result = """{result_text}"""
credits_used = "{credits_used}"
today = date.today().isoformat()
base_name = skill_name.lower().replace(' ', '-')
out_dir = os.path.expanduser('~/Downloads')
out_path = os.path.join(out_dir, f'{base_name}-{today}.docx')
count = 2
while os.path.exists(out_path):
out_path = os.path.join(out_dir, f'{base_name}-{today}-{count}.docx')
count += 1
doc = Document()
for section in doc.sections:
section.top_margin = Inches(1)
section.bottom_margin = Inches(1)
section.left_margin = Inches(1.25)
section.right_margin = Inches(1.25)
if firm_name or attorney_name:
if firm_name:
h = doc.add_paragraph()
h.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = h.add_run(firm_name)
run.bold = True
run.font.size = Pt(16)
if attorney_name:
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(attorney_name)
run.font.size = Pt(12)
if attorney_bar:
run.text += f' | Bar No. {attorney_bar}'
contact_parts = [x for x in [address, city_state_zip, phone, email] if x]
if contact_parts:
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(' · '.join(contact_parts))
run.font.size = Pt(10)
run.font.color.rgb = RGBColor(0x44, 0x44, 0x44)
doc.add_paragraph('─' * 72)
title_p = doc.add_paragraph()
title_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
title_run = title_p.add_run(skill_name.upper())
title_run.bold = True
title_run.font.size = Pt(13)
date_p = doc.add_paragraph()
date_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
date_p.add_run(f'Generated: {today}').font.size = Pt(10)
doc.add_paragraph('')
for para_text in skill_result.split('\n\n'):
para_text = para_text.strip()
if not para_text:
continue
p = doc.add_paragraph()
p.add_run(para_text).font.size = Pt(11)
doc.add_paragraph('')
hline = doc.add_paragraph('─' * 72)
p = doc.add_paragraph()
p.add_run(
'This output is prepared for use by attorneys and paralegals. '
'It is not legal advice. Always apply your own professional review and judgment. '
f'Generated by LawTasksAI · {credits_used} credit(s) used · Processed locally on your machine.'
).font.size = Pt(9)
doc.save(out_path)
print(out_path)
Step D5: Confirm to the user
After the script runs successfully:
📄 Document Saved
{Skill Name} has been saved to:
~/Downloads/{filename}.docx
{If letterhead: "Your firm letterhead has been applied."}
Your document content never left your machine.
If the script raises an error, show the error message and suggest:
Try running pip3 install python-docx in your terminal, then ask me to save again.
Step D6: Offer to collect profile if missing
If profile was empty during D2, after saving append:
💡 Add your firm letterhead? I can put your firm name, attorney info, and contact details on future documents. Just say "set up my letterhead" to get started.
API Reference
Base URL: https://lawtasksai-api-10437713249.us-central1.run.app
Headers (all requests):
Authorization: Bearer {license_key}
X-Loader-Version: 1.6.0
| Endpoint | Purpose |
|---|
| GET /v1/credits/balance | Check credit balance |
| GET /v1/skills | List all skills (for caching) |
| GET /v1/skills/triggers | Get trigger phrases (for caching) |
| GET /v1/skills/{id}/schema | Fetch expert framework for local execution |
| GET /v1/profile | Get user profile |
| PUT /v1/profile | Update user profile |
| GET /v1/usage | View usage history |
Changelog
v1.7.0 (2026-05-05)
- 📄 Document Download (Steps D1–D6): After any skill run, the user can save formatted output as a .docx with firm letterhead. Triggered by "save as doc", "download this", etc. Uses python-docx locally — zero server involvement. Filename is skill-specific and date-stamped. Letterhead pulled from
~/.lawtasksai/profile.json. Safe filename collision handling included.
v1.6.0 (2026-03-17)
- 📊 Anonymous Gap Reporting: When a legal question matches no skill, the loader now asks for explicit per-request consent to anonymously report the search terms to LawTasksAI. No personal data, no query content — only keywords. User can say yes or no each time. Reported terms feed the skill development roadmap.
v1.5.0 (2026-03-17)
- 🔍 Live Citation Verification (Step 6.5): After analysis and before display, all citations extracted from the output are verified against live authoritative sources. Federal U.S. Code and rules use Cornell LII direct URLs; state statutes use targeted web search + page fetch. Each citation receives a ✅ / ⚠️ / ❌ status displayed in the result footer. Mismatches trigger a prominent warning block.
- Loader version header bumped to 1.5.0.
v1.4.0 (2026-03-17)
- 🗺️ Jurisdiction injection: Profile
bar_jurisdiction is now read at first run and injected into every skill execution prompt automatically. No need to specify your state each time.
- 📋 Section enforcement: Execution prompt now requires output sections in exact order with no silent omissions.
- ✅ Checklist confirmation: Every result now appends a "Coverage Confirmation" section explicitly accounting for each framework consideration.
- ⚖️ Mandatory disclaimer: Every result footer includes an attorney-review disclaimer for professional responsibility compliance.
- Profile endpoint now returns
bar_jurisdiction and bar_number fields.
- Profile setup now includes jurisdiction capture step on first run.
- Loader version header bumped to 1.4.0.
v1.3.0 (2026-02-19)
- 🔒 All-Local Execution: Every skill now runs on your machine. No server-side AI processing.
- Removed server-side execution — our server only validates licenses and delivers expert frameworks
- Your AI model processes everything locally — you choose which model to use
- Simplified flow: all skills use the /schema endpoint
- Zero LawTasksAI server compute costs = sustainable pricing forever
v1.2.0 (2026-02-13)
- Local execution for document analysis skills
- New endpoint: GET /v1/skills/{id}/schema
v1.1.0 (2026-02-09)
- User profiles for firm letterhead
- Initial document generation support
v1.0.0 (2026-02-08)
- Initial release
- 200+ skills across 13 categories