
Legal Meeting Briefing
- 44 installs
- 451 repo stars
- Updated July 21, 2026
- borghei/claude-skills
legal-meeting-briefing is a skill that generates structured legal-meeting briefings across 8 meeting types and tracks the resulting action items with priorities and owners.
About
This skill prepares structured briefings for meetings with legal relevance and tracks the resulting action items. It supports eight meeting types with a 13-section briefing template and an action item tracker with priorities, owners, and follow-up cadence. Legal teams and in-house counsel use it to prepare for deal reviews, board meetings, and regulatory meetings. It is explicitly experimental and not legal advice.
- Generates a 13-section briefing skeleton pre-populated by meeting type
- Supports 8 meeting types with type-specific preparation guidance
- Tracks action items with priority levels, ownership, and follow-up cadence
Legal Meeting Briefing by the numbers
- 44 all-time installs (skills.sh)
- Ranked #383 of 688 Office & Documents skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
legal-meeting-briefing capabilities & compatibility
- Capabilities
- meeting prep · action item tracking · legal ops · briefing generation
- Use cases
- planning · project management · documentation
- Pricing
- Free
What legal-meeting-briefing says it does
Prepare structured briefings for meetings with legal relevance and track action items. Use when prepping legal meetings.
Supports 8 meeting types with type-specific preparation guidance, a 13-section briefing template, and action item management with priority levels and follow-up cadence.
This skill is provided for educational and informational purposes only. It does NOT constitute legal advice.
npx skills add https://github.com/borghei/claude-skills --skill legal-meeting-briefingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 44 |
|---|---|
| repo stars | ★ 451 |
| Last updated | July 21, 2026 |
| Repository | borghei/claude-skills ↗ |
What it does
Prepare a structured briefing for a legal meeting by type and track the resulting action items to completion.
Who is it for?
Legal teams and in-house counsel preparing for deal reviews, board meetings, or regulatory meetings.
Skip if: Anyone needing actual legal advice; the skill is experimental and explicitly not legal advice.
When should I use this skill?
You are prepping a legal meeting and need a structured briefing plus action-item tracking.
What you get
Produces a pre-populated briefing skeleton by meeting type and a tracked action-item list with follow-up cadence.
- Meeting briefing document
- Action item tracker
- Preparation gap list
By the numbers
- Supports 8 meeting types
- 13-section briefing template
- Two Python tools: meeting brief generator and action item tracker
Files
⚠️ EXPERIMENTAL — This skill is provided for educational and informational purposes only. It does NOT constitute legal advice. All responsibility for usage rests with the user. Consult qualified legal professionals before acting on any output.
Legal Meeting Briefing Skill
Overview
Production-ready toolkit for preparing structured briefings for meetings with legal relevance and tracking resulting action items. Supports 8 meeting types with type-specific preparation guidance, a 13-section briefing template, and action item management with priority levels and follow-up cadence. Designed for legal teams preparing counsel, in-house attorneys, and legal operations professionals for productive meetings.
Table of Contents
- Tools
- Reference Guides
- Workflows
- Meeting Types
- Troubleshooting
- Success Criteria
- Scope & Limitations
- Anti-Patterns
- Tool Reference
Tools
1. Meeting Brief Generator (scripts/meeting_brief_generator.py)
Generate a meeting briefing skeleton pre-populated with sections based on meeting type.
python scripts/meeting_brief_generator.py \
--type deal-review \
--title "Series B Term Sheet Review" \
--date 2026-04-15 \
--participants '[{"name":"Jane Smith","org":"Legal","role":"Lead Counsel"}]'
python scripts/meeting_brief_generator.py \
--type board \
--title "Q1 Board Meeting" \
--date 2026-04-20 \
--agenda "Legal update,Risk report,Pending approvals" --json
python scripts/meeting_brief_generator.py \
--type regulatory \
--title "FDA Pre-Submission Meeting" \
--date 2026-05-01 \
--participants '[{"name":"Dr. Lee","org":"FDA","role":"Reviewer"}]'2. Action Item Tracker (scripts/action_item_tracker.py)
Manage action items from legal meetings with priority levels, ownership, and status tracking.
python scripts/action_item_tracker.py add \
--title "Draft NDA for Vendor X" \
--owner "Jane Smith" \
--priority high \
--deadline 2026-04-20 \
--meeting "Series B Review"
python scripts/action_item_tracker.py list \
--filter-status open \
--filter-priority high
python scripts/action_item_tracker.py complete --id 3
python scripts/action_item_tracker.py dashboard --json
python scripts/action_item_tracker.py update --id 5 \
--status in-progress --notes "Waiting for counterparty response"Reference Guides
| Reference | Purpose |
|---|---|
references/meeting_type_guides.md | Preparation guidance for all 8 meeting types |
references/briefing_templates.md | Complete 13-section briefing template and action item tracking |
Workflows
5-Step Briefing Methodology
| Step | Action | Output |
|---|---|---|
| 1. Identify Meeting | Determine meeting type, participants, objectives | Meeting classification |
| 2. Assess Preparation Needs | Select type-specific sections and depth | Section checklist |
| 3. Gather Context | Collect documents, prior notes, open issues | Background materials |
| 4. Synthesize into Briefing | Run generator; populate sections with gathered context | Draft briefing |
| 5. Identify Preparation Gaps | Review for missing info; flag items needing follow-up | Gap list |
Meeting Type Selection
| Meeting Type | Key Indicator |
|---|---|
| Deal Review | Transaction under consideration or in progress |
| Board/Committee | Board of directors, audit committee, compensation committee |
| Vendor Call | Meeting with supplier, contractor, or service provider |
| Team Sync | Internal legal team meeting |
| Client/Customer | External client or customer-facing meeting |
| Regulatory/Government | Meeting with regulator, agency, or government body |
| Litigation/Dispute | Meeting about active or potential legal dispute |
| Cross-Functional | Meeting with stakeholders from multiple departments |
Action Item Workflow
1. Capture -- Record action items during or immediately after meeting 2. Assign -- Set owner, priority, and deadline for each item 3. Track -- Monitor progress via dashboard; update status as work progresses 4. Follow-Up -- Follow cadence based on priority level 5. Close -- Mark complete when done; archive for audit trail
Follow-Up Cadence
| Priority | Follow-Up Frequency | Escalation |
|---|---|---|
| High | Daily check-in | Escalate after 2 missed days |
| Medium | Weekly check-in | Escalate after 1 missed week |
| Low | Monthly check-in | Escalate after 1 missed month |
| Overdue | Immediate escalation | Notify supervisor and meeting owner |
Meeting Types
Deal Review
Focus: Transaction analysis, contract review, approval requirements.
| Section | Content |
|---|---|
| Deal Summary | Parties, structure, value, timeline |
| Contract Status | Draft version, open issues, redline items |
| Approval Requirements | Who must approve; delegated authority limits |
| Counterparty Dynamics | Negotiation position, prior dealings, leverage |
| Comparable Deals | Similar transactions for benchmarking terms |
Board/Committee
Focus: Legal department update, risk highlights, governance.
| Section | Content |
|---|---|
| Legal Department Update | Headcount, budget, key accomplishments |
| Risk Highlights | Top legal risks with likelihood and impact |
| Regulatory Update | Recent regulatory changes affecting the organization |
| Pending Approvals | Items requiring board or committee action |
| Litigation Summary | Active matters, reserves, settlement status |
Regulatory/Government
Focus: Compliance posture, enforcement patterns, privilege considerations.
| Section | Content |
|---|---|
| Regulatory Body Context | Agency structure, jurisdiction, enforcement priorities |
| Enforcement Patterns | Recent enforcement actions in the sector |
| Matter History | Prior interactions, submissions, correspondence |
| Privilege Considerations | What is privileged; what can be shared |
| Compliance Posture | Current compliance status; remediation progress |
Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
| Brief missing type-specific sections | Wrong meeting type selected | Review meeting type descriptions; select the most specific type |
| Participants not formatted | JSON format error | Use valid JSON array: '[{"name":"X","org":"Y","role":"Z"}]' |
| Action items not persisting | Tracker uses file-based storage | Ensure write permissions in working directory; check action_items.json |
| Dashboard shows stale data | Cached data from previous run | Re-run dashboard command; items are loaded fresh from storage |
| Overdue items not flagged | Clock/timezone mismatch | Verify system date; deadlines use YYYY-MM-DD format |
| Agenda items not populating | Comma-separated format expected | Use --agenda "Item 1,Item 2,Item 3" format |
| Brief too generic | Minimal parameters provided | Add participants, agenda, and type-specific context |
| Action item ID not found | Item was completed or deleted | Run list --filter-status all to see all items including completed |
Success Criteria
- Preparation Coverage: Every legal meeting has a briefing covering all relevant sections for its type
- Action Item Capture: 100% of action items captured with owner, deadline, and priority within 24 hours
- On-Time Completion: 90%+ of action items completed by deadline
- Meeting Effectiveness: Participants report improved preparation and productivity (measured by survey)
- Follow-Up Compliance: High-priority items followed up daily; medium weekly; low monthly
Scope & Limitations
This skill covers:
- Meeting briefing generation with type-specific sections for 8 meeting types
- Action item tracking with CRUD operations, filtering, and status dashboard
- Follow-up cadence management based on priority levels
- Preparation gap identification for pre-meeting readiness
This skill does NOT cover:
- Calendar integration or meeting scheduling
- Real-time meeting notes or transcription
- Email drafting or distribution of briefings
- Document management or version control for meeting materials
- Video conferencing or collaboration tool integration
Anti-Patterns
| Anti-Pattern | Why It Fails | Better Approach |
|---|---|---|
| Generic briefing for all meeting types | Misses type-specific concerns; wastes prep time on irrelevant sections | Select correct meeting type; use type-specific guidance |
| Capturing action items days after meeting | Details forgotten; ownership unclear; deadlines slip | Capture during meeting or within 2 hours; use tracker immediately |
| Single owner for all items | Creates bottleneck; no accountability for individual tasks | Assign specific owner per item; each item has exactly one owner |
| No follow-up on action items | Items go stale; commitments missed; trust erodes | Follow cadence: high=daily, medium=weekly, low=monthly |
| Skipping privilege considerations for regulatory meetings | Inadvertent privilege waiver; disclosed protected communications | Always complete privilege section for regulatory/government meetings |
Tool Reference
scripts/meeting_brief_generator.py
Generate meeting briefing skeleton from parameters.
usage: meeting_brief_generator.py [-h] [--json]
--type {deal-review,board,vendor,team-sync,
client,regulatory,litigation,cross-functional}
--title TITLE
--date DATE
[--participants PARTICIPANTS]
[--agenda AGENDA]
[--output OUTPUT]
options:
-h, --help Show help message and exit
--json Output in JSON format
--type Meeting type (determines sections included)
--title Meeting title
--date Meeting date (YYYY-MM-DD)
--participants JSON array of participants: [{"name","org","role","interests"}]
--agenda Comma-separated agenda items
--output Write briefing to file instead of stdoutscripts/action_item_tracker.py
Manage action items with CRUD operations and status dashboard.
usage: action_item_tracker.py [-h] [--json]
{add,list,update,complete,dashboard} ...
commands:
add Add a new action item
list List action items with optional filters
update Update an existing action item
complete Mark an action item as complete
dashboard Show action item summary dashboard
add options:
--title TITLE Action item description (required)
--owner OWNER Responsible person (required)
--priority {high,medium,low} Priority level (required)
--deadline DEADLINE Due date YYYY-MM-DD (required)
--meeting MEETING Source meeting name
--notes NOTES Additional notes
list options:
--filter-status {open,in-progress,complete,overdue,all}
--filter-priority {high,medium,low,all}
--filter-owner OWNER
update options:
--id ID Action item ID (required)
--status {open,in-progress,complete}
--priority {high,medium,low}
--deadline DEADLINE
--notes NOTES
complete options:
--id ID Action item ID (required)
dashboard options:
(no additional options)Meeting Briefing Templates
Complete 13-section briefing template, action item tracking template, and best practices.
Table of Contents
- Standard Briefing Template
- Section Details
- Action Item Tracking
- Best Practices
- Distribution and Security
Standard Briefing Template
The standard briefing contains 13 sections. Not all sections are required for every meeting; select sections based on meeting type and relevance.
| # | Section | Required | Purpose |
|---|---|---|---|
| 1 | Meeting Details | Always | Date, time, location, type, preparer |
| 2 | Participants | Always | Who is attending with roles and interests |
| 3 | Agenda / Expected Topics | Always | What will be discussed |
| 4 | Background and Context | Always | Relevant history and context |
| 5 | Key Documents | When applicable | Documents to review or reference |
| 6 | Open Issues | When applicable | Unresolved items with status and owners |
| 7 | Legal Considerations | Always | Legal risks, compliance, or regulatory concerns |
| 8 | Talking Points | When presenting | Key messages with supporting context |
| 9 | Questions to Raise | When information-gathering | Questions with "why this matters" context |
| 10 | Decisions Needed | When action required | Decision options with recommendations |
| 11 | Red Lines / Non-Negotiables | For negotiations | Positions that cannot be conceded |
| 12 | Prior Meeting Follow-Up | When recurring | Action items from previous meeting |
| 13 | Preparation Gaps | Always | Missing information or unresolved prep items |
Section Details
Section 1: Meeting Details
| Field | Detail |
|-------|--------|
| Title | [Meeting title] |
| Type | [Deal Review / Board / Vendor / etc.] |
| Date | [YYYY-MM-DD] |
| Time | [HH:MM - HH:MM TZ] |
| Location | [Room / Video link] |
| Duration | [XX minutes] |
| Prepared by | [Name, Title] |
| Prepared on | [YYYY-MM-DD] |
| Distribution | [Confidential / Internal / Restricted] |Section 2: Participants
| Name | Organization | Role | Key Interests |
|------|-------------|------|---------------|
| [Full name] | [Company/Dept] | [Title/Role in meeting] | [What they care about] |Participant Notes:
- Include all confirmed attendees plus expected attendees
- Note decision-makers vs. observers
- For external participants, include brief background
- Note any participants who declined or are tentative
Section 3: Agenda / Expected Topics
1. [Topic] (XX min) - [Presenter/Lead]
2. [Topic] (XX min) - [Presenter/Lead]
3. [Topic] (XX min) - [Presenter/Lead]
4. Open discussion (XX min)Agenda Notes:
- Allocate time per topic
- Identify who leads each topic
- Place most important items first (attention is highest early)
- Reserve time for open discussion and next steps
Section 4: Background and Context
Provide 2-3 paragraphs of relevant background:
- What led to this meeting
- Key events since the last meeting on this topic
- External developments that affect the discussion
- Brief history for new participants
Section 5: Key Documents
| # | Document | Version | Status | Location | Required Reading |
|---|----------|---------|--------|----------|-----------------|
| 1 | [Name] | [v#] | [Draft/Final] | [Link] | [Yes/Optional] |Section 6: Open Issues
| # | Issue | Status | Owner | Priority | Target Date |
|---|-------|--------|-------|----------|-------------|
| 1 | [Description] | [Open/In Progress/Blocked] | [Name] | [H/M/L] | [Date] |Issue Status Definitions:
- Open: Not yet started
- In Progress: Actively being worked
- Blocked: Cannot proceed; dependency or decision needed
- Resolved: Completed since last meeting (include for context)
Section 7: Legal Considerations
Structure legal considerations as:
### Risk Assessment
| Risk | Likelihood | Impact | Mitigation |
|------|-----------|--------|------------|
| [Risk] | [H/M/L] | [H/M/L] | [Mitigation strategy] |
### Compliance Considerations
- [Applicable regulation and requirement]
### Privilege Notes
- [What is privileged and should not be shared outside legal]Section 8: Talking Points
1. **[Topic/Message]**
- Supporting context: [Facts, data, or precedent]
- Key message: [What to communicate]
- If challenged: [Fallback position or additional support]
2. **[Topic/Message]**
- Supporting context: [Facts, data, or precedent]
- Key message: [What to communicate]
- If challenged: [Fallback position or additional support]Talking Points Guidelines:
- Lead with the conclusion or recommendation
- Support with 2-3 facts or data points
- Anticipate pushback and prepare responses
- Keep each point to 2-3 sentences when spoken
Section 9: Questions to Raise
1. **[Question]**
- *Why this matters:* [Business/legal impact of the answer]
- *Desired outcome:* [What you hope to learn or achieve]
- *If answer is X:* [Next step if answered one way]
- *If answer is Y:* [Next step if answered another way]Section 10: Decisions Needed
| # | Decision | Options | Recommendation | Rationale | Deadline |
|---|----------|---------|----------------|-----------|----------|
| 1 | [What needs to be decided] | A: [Option]\nB: [Option] | [Which option and why] | [Key reasoning] | [By when] |Decision Framework:
- Present no more than 3 options per decision
- Always include a recommendation with rationale
- Note consequences of delayed decision
- Identify who has authority to decide
Section 11: Red Lines / Non-Negotiables
For negotiation meetings only:
| # | Position | Rationale | If Challenged |
|---|----------|-----------|---------------|
| 1 | [Non-negotiable term] | [Why this cannot be conceded] | [Response to pushback] |Red Line Guidelines:
- Keep to 3-5 items maximum (everything else is negotiable)
- Distinguish between true red lines and strong preferences
- Pre-align with business stakeholders
- Never reveal red lines to counterparties
Section 12: Prior Meeting Follow-Up
| # | Action Item | Owner | Original Deadline | Status | Notes |
|---|------------|-------|------------------|--------|-------|
| 1 | [Action from prior meeting] | [Name] | [Date] | [Complete/In Progress/Overdue] | [Brief update] |Section 13: Preparation Gaps
| # | Gap | Impact if Unresolved | Action Needed | Owner | Deadline |
|---|-----|---------------------|---------------|-------|----------|
| 1 | [What is missing] | [How it affects the meeting] | [Steps to resolve] | [Name] | [Date] |Action Item Tracking
Action Item Template
| # | Action | Owner | Priority | Deadline | Meeting Source | Status |
|---|--------|-------|----------|----------|---------------|--------|
| 1 | [Specific, actionable task] | [Single name] | [H/M/L] | [YYYY-MM-DD] | [Meeting title] | [Open] |Action Item Standards
| Principle | Requirement | Bad Example | Good Example |
|---|---|---|---|
| Specific | Describe exactly what must be done | "Handle the NDA" | "Draft mutual NDA for Acme Corp review" |
| Single owner | One person accountable | "Legal team" | "Jane Smith" |
| Specific date | Calendar date, not relative | "Soon" or "ASAP" | "2026-04-20" |
| Measurable | Clear completion criteria | "Work on contract" | "Finalize and send redline of Section 5" |
| Dependencies noted | Call out blockers | (none) | "Blocked by: finance approval of budget" |
Priority Definitions
| Priority | Definition | Examples |
|---|---|---|
| High | Deadline within 7 days or blocking other work; legal/regulatory deadline | Court filing, regulatory response, deal closing |
| Medium | Deadline within 30 days; important but not immediately blocking | Contract review, policy update, vendor assessment |
| Low | Deadline beyond 30 days; enhancement or non-urgent improvement | Process improvement, template update, training |
Follow-Up Cadence
| Priority | Check-In Frequency | Escalation Trigger | Escalation To |
|---|---|---|---|
| High | Daily | 2 consecutive missed check-ins | Supervisor + meeting owner |
| Medium | Weekly | 1 missed weekly check-in | Meeting owner |
| Low | Monthly | 1 missed monthly check-in | Meeting owner |
| Overdue (any) | Immediate escalation | Any item past deadline | Supervisor + meeting owner |
Status Definitions
| Status | Meaning | Next Action |
|---|---|---|
| Open | Not yet started | Confirm owner and timeline |
| In Progress | Actively being worked | Monitor per follow-up cadence |
| Blocked | Cannot proceed; awaiting dependency | Escalate to remove blocker |
| Complete | Done; deliverable available | Archive and confirm with requester |
| Overdue | Past deadline and not complete | Immediate escalation; new deadline |
Best Practices
Briefing Preparation
| Practice | Timing | Detail |
|---|---|---|
| Start early | 3-5 days before | Begin gathering information; identify gaps early |
| Draft and circulate | 2-3 days before | Share draft for input from key participants |
| Finalize | 1 day before | Incorporate feedback; distribute final version |
| Pre-brief | 30 min before | Quick alignment with key allies or decision-makers |
| Post-meeting | Within 2 hours | Capture action items; distribute summary |
Common Mistakes to Avoid
| Mistake | Impact | Better Approach |
|---|---|---|
| Too long | Not read; key points buried | Keep to 3-5 pages; use appendix for details |
| Too late | No time to prepare or give input | Distribute 2+ days before meeting |
| Missing "so what" | Facts without analysis or recommendation | Always include recommendation and rationale |
| No follow-up | Action items lost; commitments forgotten | Capture items within 2 hours; start follow-up cadence |
| Wrong audience | Confidential info shared; irrelevant to attendees | Check distribution list; mark privilege appropriately |
Distribution and Security
Distribution Classifications
| Classification | Who Receives | Handling |
|---|---|---|
| Privileged and Confidential | Named recipients only | Mark each page; do not forward without counsel approval |
| Confidential | Internal team and approved participants | Do not share externally; reference company confidentiality policy |
| Internal | All meeting participants | Share freely within organization |
| Restricted | Board/committee members only | Board portal distribution; no copies |
Retention
| Document Type | Retention Period | After Retention |
|---|---|---|
| Board briefings | Per corporate governance policy (typically 7 years) | Secure destruction |
| Litigation briefings | Duration of matter + 3 years | Secure destruction |
| Routine meeting briefings | 1 year | Secure destruction |
| Action item records | Until completion + 1 year | Archive |
Meeting Type Preparation Guides
Detailed guidance for preparing legal briefings for 8 meeting types.
Table of Contents
- Deal Review
- Board/Committee
- Vendor Call
- Team Sync
- Client/Customer
- Regulatory/Government
- Litigation/Dispute
- Cross-Functional
- Meeting Type Selection Guide
Deal Review
Purpose
Evaluate, negotiate, or approve transactions including M&A, investments, partnerships, and major commercial agreements.
Key Sections
| Section | What to Prepare | Sources |
|---|---|---|
| Deal Summary | Parties, structure, value, timeline, strategic rationale | Term sheet, LOI, deal memo |
| Contract Status | Current draft version, open redline items, unresolved terms | Redline tracker, negotiation log |
| Approval Requirements | Required approvals, delegated authority limits, board requirements | Corporate governance documents, delegation matrix |
| Counterparty Dynamics | Negotiation leverage, prior dealings, known positions, key personnel | CRM, prior correspondence, public filings |
| Comparable Deals | Similar transactions for benchmarking terms and pricing | Deal database, market research |
Preparation Checklist
- [ ] Current draft agreement reviewed and annotated
- [ ] Open issues list updated with priority and owner
- [ ] Approval requirements confirmed with corporate secretary
- [ ] Counterparty background research completed
- [ ] Financial terms validated with finance team
- [ ] Regulatory approval requirements assessed
- [ ] Key risk areas identified and mitigation proposed
- [ ] Non-negotiable terms (red lines) confirmed with business
Common Mistakes
| Mistake | Impact | Prevention |
|---|---|---|
| Outdated redline version | Discuss already-resolved issues | Sync latest version 24 hours before |
| Missing financial analysis | Cannot assess commercial terms | Coordinate with finance 48 hours ahead |
| Unknown approval path | Deal stalls post-agreement | Map approvals at deal kickoff |
Board/Committee
Purpose
Provide legal department updates, risk assessments, and governance matters to board of directors or committees (audit, compensation, governance).
Key Sections
| Section | What to Prepare | Sources |
|---|---|---|
| Legal Department Update | Headcount, budget, accomplishments, priorities | Department metrics, HR data |
| Risk Highlights | Top 5-10 legal risks with likelihood/impact matrix | Risk register, insurance reports |
| Regulatory Update | New regulations, enforcement trends, compliance status | Regulatory monitoring, trade publications |
| Pending Approvals | Items needing board action with recommendations | Corporate calendar, delegation matrix |
| Litigation Summary | Active matters, reserves, new filings, settlements | Matter management system |
Board-Specific Requirements
| Requirement | Detail |
|---|---|
| Advance materials | Distribute 5-7 days before meeting |
| Executive summary | One-page summary with key asks and decisions |
| Privilege marking | Mark attorney-client communications appropriately |
| Resolution drafts | Prepare draft resolutions for any board actions |
| Minutes preparation | Coordinate with corporate secretary on minute-taking |
Preparation Checklist
- [ ] Board package assembled and privilege-marked
- [ ] Executive summary drafted (one page)
- [ ] Risk matrix updated with current ratings
- [ ] Litigation summary current as of 48 hours before
- [ ] Draft resolutions prepared for action items
- [ ] Financial data reconciled with CFO/finance
- [ ] Regulatory update covers last 90 days
Vendor Call
Purpose
Manage vendor relationships including contract negotiations, performance issues, audits, and renewals.
Key Sections
| Section | What to Prepare | Sources |
|---|---|---|
| Vendor Profile | Company details, contract value, category, relationship history | Vendor management system, contracts |
| Contract History | Prior agreements, amendments, renewals, terminations | Contract management system |
| Open Issues | Performance problems, SLA breaches, billing disputes | Issue tracker, stakeholder feedback |
| Negotiation Strategy | Objectives, BATNA, fallback positions, leverage points | Business requirements, market alternatives |
Vendor Meeting Types
| Sub-Type | Special Preparation |
|---|---|
| Contract negotiation | Redline analysis, authority limits, fallback positions |
| Performance review | SLA data, incident reports, remediation tracking |
| Audit | Audit scope, required documentation, timeline |
| Renewal | Renewal terms, market comparison, budget approval |
| Termination | Termination provisions, transition plan, notice requirements |
Preparation Checklist
- [ ] Current contract reviewed (key terms, termination, SLA)
- [ ] Open issues documented with timeline
- [ ] Stakeholder input collected (business owner, IT, procurement)
- [ ] Market alternatives researched (if negotiation/renewal)
- [ ] Budget/authority confirmed for any commercial decisions
Team Sync
Purpose
Internal legal team alignment on workload, priorities, blockers, and resource allocation.
Key Sections
| Section | What to Prepare | Sources |
|---|---|---|
| Workload Overview | Per-member matter count, capacity, utilization | Matter management, time tracking |
| Upcoming Deadlines | Next 2-4 weeks of deadlines with risk assessment | Docketing system, calendar |
| Blockers | Cross-team dependencies, resource gaps, tool issues | Team input, sprint board |
| Resource Needs | Outside counsel, tools, headcount, budget requests | Budget tracker, staffing plan |
Preparation Checklist
- [ ] Workload data pulled from matter management system
- [ ] Deadline calendar exported for next 30 days
- [ ] Blockers collected from team members (async before meeting)
- [ ] Resource requests documented with justification
- [ ] Prior meeting action items reviewed for status
Client/Customer
Purpose
Manage legal aspects of client/customer relationships including contract matters, disputes, and ongoing obligations.
Key Sections
| Section | What to Prepare | Sources |
|---|---|---|
| Client Profile | Company, relationship history, contract value, tenure | CRM, contracts, account team |
| Open Matters | Active legal matters involving this client | Matter management, case files |
| Billing Status | Outstanding invoices, payment terms, disputes | Billing system, AR aging |
| Risk Areas | Known risks, regulatory concerns, reputational issues | Risk register, compliance records |
Client Meeting Types
| Sub-Type | Special Preparation |
|---|---|
| Contract discussion | Agreement terms, amendment history, open issues |
| Dispute resolution | Facts summary, legal position, settlement range |
| Relationship review | Account health, satisfaction metrics, growth opportunities |
| Onboarding | Standard terms, compliance requirements, key contacts |
Preparation Checklist
- [ ] Client background refreshed (recent news, filings, changes)
- [ ] All open matters summarized with current status
- [ ] Billing current and any disputes documented
- [ ] Account team briefed on legal perspective
- [ ] Privilege considerations reviewed (what can be shared externally)
Regulatory/Government
Purpose
Prepare for interactions with regulatory agencies, government bodies, or law enforcement.
Key Sections
| Section | What to Prepare | Sources |
|---|---|---|
| Regulatory Body Context | Agency structure, jurisdiction, key personnel, priorities | Agency website, regulatory intelligence |
| Enforcement Patterns | Recent actions, penalty trends, focus areas | Enforcement databases, trade press |
| Matter History | Prior interactions, submissions, open items, correspondence log | Regulatory file, correspondence archive |
| Privilege Considerations | What is protected; what must or can be shared | Legal analysis (privileged) |
| Compliance Posture | Current status, remediation progress, open audit findings | Compliance tracking, audit reports |
Critical Considerations
| Consideration | Guidance |
|---|---|
| Privilege protection | Never waive inadvertently; mark documents clearly; have counsel present |
| Scope management | Answer only what is asked; do not volunteer beyond scope |
| Documentation | Document everything; confirm oral statements in writing |
| Authority | Know who can make commitments; do not bind organization without authority |
| Follow-up | Respond to requests within deadlines; document all communications |
Preparation Checklist
- [ ] Regulatory body research current (leadership, priorities, recent actions)
- [ ] All prior correspondence reviewed and cataloged
- [ ] Privilege log prepared for any documents that may be requested
- [ ] Compliance status report current as of meeting date
- [ ] Spokesperson designated and prepared (do not have multiple speakers)
- [ ] Written talking points reviewed by counsel
- [ ] Escalation plan if unexpected topics arise
Litigation/Dispute
Purpose
Manage active or potential litigation including case strategy, settlement, and dispute resolution.
Key Sections
| Section | What to Prepare | Sources |
|---|---|---|
| Case Summary | Parties, claims, forum, case number, filing date | Complaint, docket sheet |
| Procedural Posture | Current stage, next steps, pending motions | Docket, court calendar |
| Upcoming Deadlines | All deadlines in next 60 days with responsible party | Docketing system |
| Settlement Status | Offers, counteroffers, mediation schedule, assessment | Settlement log (privileged) |
| Exposure Assessment | Best/most likely/worst case with probability and amounts | Legal analysis (privileged) |
Litigation Meeting Types
| Sub-Type | Special Preparation |
|---|---|
| Strategy session | Full case analysis, options assessment, resource needs |
| Settlement discussion | Authority limits, BATNA, mediation preparation |
| Discovery planning | Document inventory, custodian list, ESI sources |
| Pre-trial | Witness preparation, exhibit lists, trial themes |
| Post-trial | Judgment analysis, appeal options, collection/payment |
Preparation Checklist
- [ ] Case summary current (last docket entry reviewed)
- [ ] All upcoming deadlines confirmed
- [ ] Budget and outside counsel spend updated
- [ ] Settlement authority confirmed (if applicable)
- [ ] Key documents organized and privilege-reviewed
- [ ] Witness availability confirmed (if applicable)
Cross-Functional
Purpose
Collaborate across departments on projects, policies, or initiatives with legal implications.
Key Sections
| Section | What to Prepare | Sources |
|---|---|---|
| Stakeholder Map | Key players, departments, interests, influence level | Org chart, project plan |
| Competing Priorities | Known conflicts, resource constraints, timeline tensions | Stakeholder interviews |
| Decision Framework | How decisions will be made, RACI, escalation path | Project governance, RACI chart |
Cross-Functional Meeting Types
| Sub-Type | Special Preparation |
|---|---|
| Product launch | Regulatory requirements, IP review, terms of service |
| Policy development | Legal requirements, stakeholder impact, implementation plan |
| Incident response | Triage protocol, notification obligations, communication plan |
| M&A integration | Integration planning, contract assignment, regulatory filings |
| Compliance program | Requirements mapping, training plan, monitoring framework |
Preparation Checklist
- [ ] Stakeholder interests mapped and potential conflicts identified
- [ ] Legal requirements for the initiative documented
- [ ] RACI or decision framework proposed
- [ ] Prior meeting notes reviewed for context
- [ ] Time-sensitive legal deadlines flagged
Meeting Type Selection Guide
Use this decision tree to select the correct meeting type:
| If the meeting involves... | Select |
|---|---|
| A transaction (M&A, investment, partnership) | Deal Review |
| Board of directors or committee | Board/Committee |
| A supplier, contractor, or service provider | Vendor Call |
| Internal legal team only | Team Sync |
| An external client or customer | Client/Customer |
| A regulator, government agency, or law enforcement | Regulatory/Government |
| An active or potential legal dispute | Litigation/Dispute |
| Multiple internal departments | Cross-Functional |
When multiple types apply: Choose the most specific type. For example, if meeting with a vendor about a litigation hold, choose Litigation/Dispute (not Vendor Call).
When no type fits: Use Cross-Functional as the default and add custom sections as needed.
#!/usr/bin/env python3
"""
Legal Meeting Action Item Tracker
Manages action items from legal meetings with CRUD operations,
priority levels, ownership, and status dashboard.
Usage:
python action_item_tracker.py add --title "Draft NDA" --owner "Jane" --priority high --deadline 2026-04-20
python action_item_tracker.py list --filter-status open --filter-priority high
python action_item_tracker.py complete --id 3
python action_item_tracker.py dashboard --json
"""
import argparse
import json
import os
import sys
from datetime import datetime
from typing import Any, Dict, List, Optional
STORAGE_FILE = "action_items.json"
VALID_STATUSES = ["open", "in-progress", "complete"]
VALID_PRIORITIES = ["high", "medium", "low"]
def load_items(filepath: str) -> List[Dict[str, Any]]:
"""Load action items from storage file."""
if not os.path.exists(filepath):
return []
try:
with open(filepath, "r") as f:
data = json.load(f)
return data if isinstance(data, list) else []
except (json.JSONDecodeError, IOError):
return []
def save_items(items: List[Dict[str, Any]], filepath: str) -> None:
"""Save action items to storage file."""
with open(filepath, "w") as f:
json.dump(items, f, indent=2)
def next_id(items: List[Dict[str, Any]]) -> int:
"""Get next available ID."""
if not items:
return 1
return max(item.get("id", 0) for item in items) + 1
def is_overdue(deadline: str) -> bool:
"""Check if a deadline has passed."""
try:
dl = datetime.strptime(deadline, "%Y-%m-%d")
return dl.date() < datetime.now().date()
except (ValueError, TypeError):
return False
def get_effective_status(item: Dict[str, Any]) -> str:
"""Get effective status (marks as overdue if deadline passed and not complete)."""
if item["status"] == "complete":
return "complete"
if is_overdue(item.get("deadline", "")):
return "overdue"
return item["status"]
def add_item(args: argparse.Namespace, filepath: str) -> Dict[str, Any]:
"""Add a new action item."""
items = load_items(filepath)
new_id = next_id(items)
item: Dict[str, Any] = {
"id": new_id,
"title": args.title,
"owner": args.owner,
"priority": args.priority,
"deadline": args.deadline,
"status": "open",
"meeting": getattr(args, "meeting", None) or "",
"notes": getattr(args, "notes", None) or "",
"created": datetime.now().strftime("%Y-%m-%d %H:%M"),
"updated": datetime.now().strftime("%Y-%m-%d %H:%M"),
"completed_date": None,
}
items.append(item)
save_items(items, filepath)
return {"action": "add", "item": item, "total_items": len(items)}
def list_items(args: argparse.Namespace, filepath: str) -> Dict[str, Any]:
"""List action items with optional filters."""
items = load_items(filepath)
filter_status = getattr(args, "filter_status", "all") or "all"
filter_priority = getattr(args, "filter_priority", "all") or "all"
filter_owner = getattr(args, "filter_owner", None)
filtered = []
for item in items:
eff_status = get_effective_status(item)
# Status filter
if filter_status != "all":
if filter_status == "overdue":
if eff_status != "overdue":
continue
elif filter_status == "open":
if eff_status not in ("open", "overdue"):
continue
elif eff_status != filter_status and item["status"] != filter_status:
continue
# Priority filter
if filter_priority != "all" and item["priority"] != filter_priority:
continue
# Owner filter
if filter_owner and item["owner"].lower() != filter_owner.lower():
continue
item_copy = dict(item)
item_copy["effective_status"] = eff_status
filtered.append(item_copy)
return {
"action": "list",
"filters": {
"status": filter_status,
"priority": filter_priority,
"owner": filter_owner,
},
"count": len(filtered),
"items": filtered,
}
def update_item(args: argparse.Namespace, filepath: str) -> Dict[str, Any]:
"""Update an existing action item."""
items = load_items(filepath)
item_id = args.id
for item in items:
if item["id"] == item_id:
if hasattr(args, "status") and args.status:
item["status"] = args.status
if hasattr(args, "priority") and args.priority:
item["priority"] = args.priority
if hasattr(args, "deadline") and args.deadline:
item["deadline"] = args.deadline
if hasattr(args, "notes") and args.notes:
item["notes"] = args.notes
item["updated"] = datetime.now().strftime("%Y-%m-%d %H:%M")
save_items(items, filepath)
return {"action": "update", "item": item}
return {"action": "update", "error": True, "message": f"Item ID {item_id} not found"}
def complete_item(args: argparse.Namespace, filepath: str) -> Dict[str, Any]:
"""Mark an action item as complete."""
items = load_items(filepath)
item_id = args.id
for item in items:
if item["id"] == item_id:
item["status"] = "complete"
item["completed_date"] = datetime.now().strftime("%Y-%m-%d %H:%M")
item["updated"] = datetime.now().strftime("%Y-%m-%d %H:%M")
save_items(items, filepath)
return {"action": "complete", "item": item}
return {"action": "complete", "error": True, "message": f"Item ID {item_id} not found"}
def generate_dashboard(args: argparse.Namespace, filepath: str) -> Dict[str, Any]:
"""Generate action item summary dashboard."""
items = load_items(filepath)
total = len(items)
open_count = 0
in_progress_count = 0
complete_count = 0
overdue_count = 0
high_open = 0
medium_open = 0
low_open = 0
by_owner: Dict[str, Dict[str, int]] = {}
by_meeting: Dict[str, int] = {}
for item in items:
eff_status = get_effective_status(item)
if eff_status == "complete":
complete_count += 1
elif eff_status == "overdue":
overdue_count += 1
open_count += 1
elif eff_status == "in-progress":
in_progress_count += 1
else:
open_count += 1
if item["status"] != "complete":
if item["priority"] == "high":
high_open += 1
elif item["priority"] == "medium":
medium_open += 1
else:
low_open += 1
owner = item.get("owner", "Unassigned")
if owner not in by_owner:
by_owner[owner] = {"open": 0, "in_progress": 0, "complete": 0, "overdue": 0}
if eff_status == "complete":
by_owner[owner]["complete"] += 1
elif eff_status == "overdue":
by_owner[owner]["overdue"] += 1
elif eff_status == "in-progress":
by_owner[owner]["in_progress"] += 1
else:
by_owner[owner]["open"] += 1
meeting = item.get("meeting", "No Meeting")
if meeting:
by_meeting[meeting] = by_meeting.get(meeting, 0) + 1
completion_rate = round((complete_count / total) * 100, 1) if total > 0 else 0.0
# Overdue items detail
overdue_items = []
for item in items:
if get_effective_status(item) == "overdue":
overdue_items.append({
"id": item["id"],
"title": item["title"],
"owner": item["owner"],
"deadline": item["deadline"],
"priority": item["priority"],
})
return {
"action": "dashboard",
"generated": datetime.now().strftime("%Y-%m-%d %H:%M"),
"summary": {
"total": total,
"open": open_count,
"in_progress": in_progress_count,
"complete": complete_count,
"overdue": overdue_count,
"completion_rate_pct": completion_rate,
},
"by_priority": {
"high_open": high_open,
"medium_open": medium_open,
"low_open": low_open,
},
"by_owner": by_owner,
"by_meeting": by_meeting,
"overdue_items": overdue_items,
}
def format_text_add(result: Dict[str, Any]) -> str:
"""Format add result."""
item = result["item"]
return (f"Action item #{item['id']} added.\n"
f" Title: {item['title']}\n"
f" Owner: {item['owner']}\n"
f" Priority: {item['priority']}\n"
f" Deadline: {item['deadline']}\n"
f" Meeting: {item['meeting'] or 'N/A'}\n"
f"Total items: {result['total_items']}")
def format_text_list(result: Dict[str, Any]) -> str:
"""Format list result."""
lines = [f"Action Items ({result['count']} found)", "=" * 70]
filters = result["filters"]
lines.append(f"Filters: status={filters['status']}, priority={filters['priority']}, "
f"owner={filters['owner'] or 'all'}")
lines.append("")
if not result["items"]:
lines.append("No items match the specified filters.")
return "\n".join(lines)
lines.append(f"{'ID':<5} {'Priority':<10} {'Status':<14} {'Owner':<15} {'Deadline':<12} {'Title'}")
lines.append("-" * 70)
for item in result["items"]:
eff = item.get("effective_status", item["status"])
status_str = f"{'** ' if eff == 'overdue' else ''}{eff.upper()}"
lines.append(f"{item['id']:<5} {item['priority']:<10} {status_str:<14} "
f"{item['owner']:<15} {item['deadline']:<12} {item['title']}")
return "\n".join(lines)
def format_text_update(result: Dict[str, Any]) -> str:
"""Format update result."""
if result.get("error"):
return f"Error: {result['message']}"
item = result["item"]
return f"Action item #{item['id']} updated. Status: {item['status']}, Priority: {item['priority']}"
def format_text_complete(result: Dict[str, Any]) -> str:
"""Format complete result."""
if result.get("error"):
return f"Error: {result['message']}"
item = result["item"]
return f"Action item #{item['id']} marked complete. ({item['title']})"
def format_text_dashboard(result: Dict[str, Any]) -> str:
"""Format dashboard result."""
s = result["summary"]
p = result["by_priority"]
lines = ["=" * 70, "ACTION ITEM DASHBOARD", "=" * 70]
lines.append(f"Generated: {result['generated']}")
lines.append("")
lines.append(f"Total Items: {s['total']}")
lines.append(f"Open: {s['open']}")
lines.append(f"In Progress: {s['in_progress']}")
lines.append(f"Complete: {s['complete']}")
lines.append(f"Overdue: {s['overdue']}")
lines.append(f"Completion Rate: {s['completion_rate_pct']}%")
lines.append("")
lines.append("BY PRIORITY (Open):")
lines.append(f" High: {p['high_open']}")
lines.append(f" Medium: {p['medium_open']}")
lines.append(f" Low: {p['low_open']}")
if result.get("by_owner"):
lines.append("")
lines.append("BY OWNER:")
lines.append(f"{'Owner':<20} {'Open':<8} {'In Prog':<8} {'Done':<8} {'Overdue':<8}")
lines.append("-" * 52)
for owner, counts in result["by_owner"].items():
lines.append(f"{owner:<20} {counts['open']:<8} {counts['in_progress']:<8} "
f"{counts['complete']:<8} {counts['overdue']:<8}")
if result.get("overdue_items"):
lines.append("")
lines.append("OVERDUE ITEMS (Requires Escalation):")
for item in result["overdue_items"]:
lines.append(f" #{item['id']} [{item['priority'].upper()}] {item['title']} "
f"(Owner: {item['owner']}, Due: {item['deadline']})")
lines.append("")
lines.append("=" * 70)
return "\n".join(lines)
FORMAT_FUNCS = {
"add": format_text_add,
"list": format_text_list,
"update": format_text_update,
"complete": format_text_complete,
"dashboard": format_text_dashboard,
}
def main() -> None:
parser = argparse.ArgumentParser(
description="Manage action items from legal meetings."
)
parser.add_argument("--json", action="store_true", help="Output in JSON format")
parser.add_argument("--storage", default=STORAGE_FILE,
help=f"Storage file path (default: {STORAGE_FILE})")
subparsers = parser.add_subparsers(dest="command", help="Command to execute")
# Add command
add_parser = subparsers.add_parser("add", help="Add a new action item")
add_parser.add_argument("--title", required=True, help="Action item description")
add_parser.add_argument("--owner", required=True, help="Responsible person")
add_parser.add_argument("--priority", required=True, choices=VALID_PRIORITIES)
add_parser.add_argument("--deadline", required=True, help="Due date YYYY-MM-DD")
add_parser.add_argument("--meeting", default="", help="Source meeting name")
add_parser.add_argument("--notes", default="", help="Additional notes")
# List command
list_parser = subparsers.add_parser("list", help="List action items")
list_parser.add_argument("--filter-status",
choices=["open", "in-progress", "complete", "overdue", "all"],
default="all")
list_parser.add_argument("--filter-priority",
choices=["high", "medium", "low", "all"],
default="all")
list_parser.add_argument("--filter-owner", default=None)
# Update command
update_parser = subparsers.add_parser("update", help="Update an action item")
update_parser.add_argument("--id", required=True, type=int)
update_parser.add_argument("--status", choices=VALID_STATUSES)
update_parser.add_argument("--priority", choices=VALID_PRIORITIES)
update_parser.add_argument("--deadline")
update_parser.add_argument("--notes")
# Complete command
complete_parser = subparsers.add_parser("complete", help="Mark item complete")
complete_parser.add_argument("--id", required=True, type=int)
# Dashboard command
subparsers.add_parser("dashboard", help="Show summary dashboard")
args = parser.parse_args()
if not args.command:
parser.print_help()
sys.exit(1)
filepath = args.storage
commands = {
"add": add_item,
"list": list_items,
"update": update_item,
"complete": complete_item,
"dashboard": generate_dashboard,
}
try:
handler = commands[args.command]
result = handler(args, filepath)
if result.get("error"):
if args.json:
print(json.dumps(result, indent=2))
else:
print(f"Error: {result.get('message', 'Unknown error')}", file=sys.stderr)
sys.exit(1)
if args.json:
print(json.dumps(result, indent=2))
else:
formatter = FORMAT_FUNCS.get(args.command, lambda r: json.dumps(r, indent=2))
print(formatter(result))
except Exception as e:
print(f"Error: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
#!/usr/bin/env python3
"""
Legal Meeting Brief Generator
Generates structured meeting briefings with type-specific sections
for 8 legal meeting types.
Usage:
python meeting_brief_generator.py --type deal-review --title "Series B Review" --date 2026-04-15
python meeting_brief_generator.py --type board --title "Q1 Board" --date 2026-04-20 --json
python meeting_brief_generator.py --type regulatory --title "FDA Meeting" --date 2026-05-01
"""
import argparse
import json
import sys
from datetime import datetime
from typing import Any, Dict, List, Optional
MEETING_TYPES = [
"deal-review", "board", "vendor", "team-sync",
"client", "regulatory", "litigation", "cross-functional",
]
# Common sections for all meeting types
COMMON_SECTIONS: List[Dict[str, str]] = [
{"title": "Meeting Details", "content": ""},
{"title": "Participants", "content": ""},
{"title": "Agenda / Expected Topics", "content": ""},
{"title": "Background and Context", "content": "[Provide relevant background for this meeting.]"},
{"title": "Key Documents", "content": "| Document | Version | Status | Location |\n|----------|---------|--------|----------|\n| [Document name] | [v#] | [Draft/Final] | [Link/path] |"},
{"title": "Open Issues", "content": "| # | Issue | Status | Owner | Priority |\n|---|-------|--------|-------|----------|\n| 1 | [Issue description] | [Open/In Progress] | [Name] | [High/Medium/Low] |"},
{"title": "Legal Considerations", "content": "[Key legal issues, risks, or compliance considerations for this meeting.]"},
{"title": "Talking Points", "content": "1. **[Topic]** -- [Supporting context and key message]\n2. **[Topic]** -- [Supporting context and key message]"},
{"title": "Questions to Raise", "content": "1. **[Question]** -- *Why this matters:* [Context for why this question is important]\n2. **[Question]** -- *Why this matters:* [Context]"},
{"title": "Decisions Needed", "content": "| Decision | Options | Recommendation | Deadline |\n|----------|---------|----------------|----------|\n| [Decision needed] | [Option A / Option B] | [Recommended option with rationale] | [Date] |"},
{"title": "Prior Meeting Follow-Up", "content": "| # | Action Item | Owner | Status | Due Date |\n|---|------------|-------|--------|----------|\n| 1 | [Action from prior meeting] | [Name] | [Status] | [Date] |"},
{"title": "Preparation Gaps", "content": "| # | Gap | Impact | Action Needed |\n|---|-----|--------|---------------|\n| 1 | [Missing information or document] | [How it affects meeting] | [Steps to fill gap] |"},
]
# Type-specific additional sections
TYPE_SECTIONS: Dict[str, List[Dict[str, str]]] = {
"deal-review": [
{"title": "Deal Summary", "content": (
"| Field | Detail |\n|-------|--------|\n"
"| Parties | [Buyer/Seller/Investor] |\n"
"| Structure | [Asset purchase/Stock purchase/Merger/Investment] |\n"
"| Value | [$X million] |\n"
"| Timeline | [Expected close date] |\n"
"| Stage | [LOI/Due Diligence/Definitive Agreement/Closing] |"
)},
{"title": "Contract Status", "content": (
"| Document | Version | Status | Open Issues |\n"
"|----------|---------|--------|-------------|\n"
"| [Agreement name] | [v#] | [Draft/Redline/Final] | [# open issues] |"
)},
{"title": "Approval Requirements", "content": (
"| Approver | Authority Limit | Status |\n"
"|----------|----------------|--------|\n"
"| [Name/Role] | [$X] | [Pending/Approved] |"
)},
{"title": "Counterparty Dynamics", "content": "[Negotiation position, prior dealings, leverage points, known concerns.]"},
{"title": "Red Lines / Non-Negotiables", "content": "1. [Non-negotiable term and rationale]\n2. [Non-negotiable term and rationale]"},
],
"board": [
{"title": "Legal Department Update", "content": (
"| Metric | Current | Prior Quarter | Trend |\n"
"|--------|---------|---------------|-------|\n"
"| Open matters | [#] | [#] | [Up/Down/Flat] |\n"
"| Budget utilization | [$X / $Y] | [$X / $Y] | [%] |\n"
"| Outside counsel spend | [$X] | [$X] | [%] |"
)},
{"title": "Risk Highlights", "content": (
"| # | Risk | Likelihood | Impact | Mitigation |\n"
"|---|------|-----------|--------|------------|\n"
"| 1 | [Risk description] | [H/M/L] | [H/M/L] | [Mitigation plan] |"
)},
{"title": "Regulatory Update", "content": "[Recent regulatory changes affecting the organization and compliance status.]"},
{"title": "Pending Board Approvals", "content": (
"| # | Item | Type | Recommendation | Deadline |\n"
"|---|------|------|----------------|----------|\n"
"| 1 | [Approval item] | [Contract/Policy/Transaction] | [Approve/Reject/Defer] | [Date] |"
)},
{"title": "Litigation Summary", "content": (
"| Matter | Type | Status | Exposure | Reserve |\n"
"|--------|------|--------|----------|--------|\n"
"| [Matter name] | [Type] | [Active/Settled/Closed] | [$X] | [$X] |"
)},
],
"vendor": [
{"title": "Vendor Profile", "content": (
"| Field | Detail |\n|-------|--------|\n"
"| Vendor | [Name] |\n"
"| Category | [SaaS/Professional Services/Hardware/etc.] |\n"
"| Contract value | [$X/year] |\n"
"| Contract expiry | [Date] |\n"
"| Relationship owner | [Name] |"
)},
{"title": "Contract History", "content": "[Prior contracts, amendments, renewals, and their outcomes.]"},
{"title": "Open Issues with Vendor", "content": (
"| # | Issue | Severity | Owner | Status |\n"
"|---|-------|----------|-------|--------|\n"
"| 1 | [Issue] | [Critical/High/Medium/Low] | [Name] | [Status] |"
)},
{"title": "Negotiation Strategy", "content": "[Key objectives, fallback positions, and BATNA for this vendor discussion.]"},
],
"team-sync": [
{"title": "Workload Overview", "content": (
"| Team Member | Active Matters | Capacity | Blockers |\n"
"|-------------|---------------|----------|----------|\n"
"| [Name] | [#] | [Available/At Capacity/Overloaded] | [Blockers if any] |"
)},
{"title": "Upcoming Deadlines", "content": (
"| Deadline | Matter | Owner | Status |\n"
"|----------|--------|-------|--------|\n"
"| [Date] | [Matter] | [Name] | [On Track/At Risk/Overdue] |"
)},
{"title": "Resource Needs", "content": "[Additional resources, outside counsel, tools, or budget needed.]"},
],
"client": [
{"title": "Client/Customer Profile", "content": (
"| Field | Detail |\n|-------|--------|\n"
"| Client | [Name] |\n"
"| Relationship manager | [Name] |\n"
"| Contract value | [$X] |\n"
"| Tenure | [X years] |"
)},
{"title": "Open Matters", "content": (
"| # | Matter | Type | Status | Owner |\n"
"|---|--------|------|--------|-------|\n"
"| 1 | [Matter] | [Type] | [Status] | [Name] |"
)},
{"title": "Risk Areas", "content": "[Known risks, sensitivities, or compliance concerns related to this client.]"},
],
"regulatory": [
{"title": "Regulatory Body Context", "content": (
"| Field | Detail |\n|-------|--------|\n"
"| Agency | [Name] |\n"
"| Jurisdiction | [Federal/State/International] |\n"
"| Key contacts | [Names/Titles] |\n"
"| Enforcement priorities | [Current focus areas] |"
)},
{"title": "Enforcement Patterns", "content": "[Recent enforcement actions in the sector; relevant precedent.]"},
{"title": "Matter History", "content": "[Prior interactions, submissions, correspondence with this regulator.]"},
{"title": "Privilege Considerations", "content": (
"**What IS privileged (do not share):**\n"
"- [Internal legal analysis and strategy]\n"
"- [Attorney-client communications]\n\n"
"**What can be shared:**\n"
"- [Factual information requested]\n"
"- [Required disclosures]"
)},
{"title": "Compliance Posture", "content": "[Current compliance status; remediation progress; open findings.]"},
],
"litigation": [
{"title": "Case Summary", "content": (
"| Field | Detail |\n|-------|--------|\n"
"| Case | [Name v. Name] |\n"
"| Court/Forum | [Court name] |\n"
"| Case number | [#] |\n"
"| Filed | [Date] |\n"
"| Claims | [Summary of claims] |"
)},
{"title": "Procedural Posture", "content": "[Current stage: pleadings, discovery, motions, trial, appeal.]"},
{"title": "Upcoming Deadlines", "content": (
"| Deadline | Event | Owner | Status |\n"
"|----------|-------|-------|--------|\n"
"| [Date] | [Filing/Hearing/Deposition] | [Name] | [Status] |"
)},
{"title": "Settlement Status", "content": "[Current settlement discussions, offers, counteroffers, and assessment.]"},
{"title": "Exposure Assessment", "content": (
"| Scenario | Likelihood | Financial Impact |\n"
"|----------|-----------|------------------|\n"
"| Best case | [%] | [$X] |\n"
"| Most likely | [%] | [$X] |\n"
"| Worst case | [%] | [$X] |"
)},
],
"cross-functional": [
{"title": "Stakeholder Map", "content": (
"| Stakeholder | Department | Interest | Influence |\n"
"|------------|-----------|---------|----------|\n"
"| [Name] | [Dept] | [What they care about] | [High/Medium/Low] |"
)},
{"title": "Competing Priorities", "content": "[Known conflicts between departments or teams that may surface.]"},
{"title": "Decision Framework", "content": "[How decisions will be made: consensus, escalation, RACI matrix.]"},
],
}
def build_meeting_details(title: str, date: str, meeting_type: str) -> str:
"""Build the meeting details section."""
return (
f"| Field | Detail |\n|-------|--------|\n"
f"| Title | {title} |\n"
f"| Type | {meeting_type.replace('-', ' ').title()} |\n"
f"| Date | {date} |\n"
f"| Time | [INSERT TIME] |\n"
f"| Location | [INSERT LOCATION / VIDEO LINK] |\n"
f"| Duration | [INSERT DURATION] |\n"
f"| Prepared by | [INSERT NAME] |\n"
f"| Prepared on | {datetime.now().strftime('%Y-%m-%d')} |"
)
def build_participants_section(participants: List[Dict[str, str]]) -> str:
"""Build the participants table."""
lines = ["| Name | Organization | Role | Key Interests |",
"|------|-------------|------|---------------|"]
if participants:
for p in participants:
name = p.get("name", "[Name]")
org = p.get("org", "[Org]")
role = p.get("role", "[Role]")
interests = p.get("interests", "[Key interests/concerns]")
lines.append(f"| {name} | {org} | {role} | {interests} |")
else:
lines.append("| [Name] | [Organization] | [Role] | [Key interests] |")
return "\n".join(lines)
def build_agenda_section(agenda_items: List[str]) -> str:
"""Build the agenda section."""
if not agenda_items:
return "1. [Agenda item 1]\n2. [Agenda item 2]\n3. [Agenda item 3]"
lines = []
for i, item in enumerate(agenda_items, 1):
lines.append(f"{i}. {item.strip()}")
return "\n".join(lines)
def generate_briefing(args: argparse.Namespace) -> Dict[str, Any]:
"""Generate the meeting briefing."""
meeting_type = args.type
title = args.title
date = args.date
# Parse participants
participants: List[Dict[str, str]] = []
if args.participants:
try:
participants = json.loads(args.participants)
except json.JSONDecodeError:
participants = [{"name": p.strip()} for p in args.participants.split(",")]
# Parse agenda
agenda_items: List[str] = []
if args.agenda:
agenda_items = [a.strip() for a in args.agenda.split(",")]
# Build sections
all_sections = []
for section in COMMON_SECTIONS:
s = dict(section)
if s["title"] == "Meeting Details":
s["content"] = build_meeting_details(title, date, meeting_type)
elif s["title"] == "Participants":
s["content"] = build_participants_section(participants)
elif s["title"] == "Agenda / Expected Topics":
s["content"] = build_agenda_section(agenda_items)
all_sections.append(s)
# Insert type-specific sections after "Legal Considerations"
type_specific = TYPE_SECTIONS.get(meeting_type, [])
legal_idx = next((i for i, s in enumerate(all_sections)
if s["title"] == "Legal Considerations"), len(all_sections))
for i, ts in enumerate(type_specific):
all_sections.insert(legal_idx + 1 + i, dict(ts))
# Generate markdown
md_lines = [f"# Meeting Briefing: {title}", ""]
md_lines.append(f"**Type:** {meeting_type.replace('-', ' ').title()}")
md_lines.append(f"**Date:** {date}")
md_lines.append(f"**Prepared:** {datetime.now().strftime('%Y-%m-%d')}")
md_lines.append("")
md_lines.append("---")
md_lines.append("")
# TOC
md_lines.append("## Table of Contents")
md_lines.append("")
for i, section in enumerate(all_sections, 1):
anchor = section["title"].lower().replace(" ", "-").replace("/", "").replace("(", "").replace(")", "")
md_lines.append(f"{i}. [{section['title']}](#{anchor})")
md_lines.append("")
md_lines.append("---")
md_lines.append("")
# Sections
for i, section in enumerate(all_sections, 1):
md_lines.append(f"## {i}. {section['title']}")
md_lines.append("")
md_lines.append(section["content"])
md_lines.append("")
md_lines.append("---")
md_lines.append(f"*Briefing generated on {datetime.now().strftime('%Y-%m-%d')} "
f"for {title}. Review and customize before distribution.*")
briefing_text = "\n".join(md_lines)
return {
"generated_date": datetime.now().strftime("%Y-%m-%d"),
"meeting_type": meeting_type,
"title": title,
"date": date,
"participants_count": len(participants),
"agenda_items_count": len(agenda_items),
"total_sections": len(all_sections),
"type_specific_sections": len(type_specific),
"section_titles": [s["title"] for s in all_sections],
"briefing_text": briefing_text,
}
def format_text(result: Dict[str, Any]) -> str:
"""Return the briefing markdown text."""
return result["briefing_text"]
def main() -> None:
parser = argparse.ArgumentParser(
description="Generate structured meeting briefings for legal meetings."
)
parser.add_argument("--json", action="store_true", help="Output in JSON format")
parser.add_argument("--type", required=True, choices=MEETING_TYPES,
help="Meeting type")
parser.add_argument("--title", required=True, help="Meeting title")
parser.add_argument("--date", required=True,
help="Meeting date (YYYY-MM-DD)")
parser.add_argument("--participants", default=None,
help='JSON array: [{"name","org","role","interests"}]')
parser.add_argument("--agenda", default=None,
help="Comma-separated agenda items")
parser.add_argument("--output", default=None,
help="Write briefing to file instead of stdout")
args = parser.parse_args()
try:
result = generate_briefing(args)
if args.output:
with open(args.output, "w") as f:
f.write(result["briefing_text"])
print(f"Briefing written to {args.output} ({result['total_sections']} sections)")
elif args.json:
print(json.dumps(result, indent=2))
else:
print(format_text(result))
except Exception as e:
print(f"Error: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
Related skills
FAQ
How many meeting types does it support?
Eight, including deal review, board/committee, vendor call, team sync, client/customer, regulatory, litigation/dispute, and cross-functional.
Is this legal advice?
No. The skill is explicitly experimental, for educational purposes only, and not legal advice.