@caddis/cli 0.4.10 → 0.4.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/bundles/antigravity-plugin/plugin.json +1 -1
  2. package/bundles/antigravity-plugin/scripts/caddis_spawn.py +60 -6
  3. package/bundles/antigravity-plugin/scripts/setup_project_ai.py +10 -0
  4. package/bundles/antigravity-plugin/skills/_registry.md +0 -1
  5. package/bundles/antigravity-plugin/skills/brainstorming/SKILL.md +2 -2
  6. package/bundles/antigravity-plugin/skills/explainer-doc/SKILL.md +1 -1
  7. package/bundles/antigravity-plugin/skills/ship-pr/SKILL.md +1 -1
  8. package/bundles/antigravity-plugin/skills/spawn-session/SKILL.md +15 -0
  9. package/bundles/antigravity-plugin/skills/ui-brief/SKILL.md +6 -1
  10. package/bundles/antigravity-plugin-extras/plugin.json +1 -1
  11. package/bundles/antigravity-plugin-extras/skills/_registry.md +1 -19
  12. package/bundles/codex/.codex/skills/docs/explainer-doc/SKILL.md +1 -1
  13. package/bundles/codex/.codex/skills/workflow/brainstorming/SKILL.md +2 -2
  14. package/bundles/manifest.json +3 -3
  15. package/package.json +1 -1
  16. package/bundles/antigravity-plugin-extras/skills/competitive-ads-extractor/SKILL.md +0 -294
  17. package/bundles/antigravity-plugin-extras/skills/content-research-writer/SKILL.md +0 -539
  18. package/bundles/antigravity-plugin-extras/skills/domain-name-brainstormer/SKILL.md +0 -213
  19. package/bundles/antigravity-plugin-extras/skills/humanizer/SKILL.md +0 -194
  20. package/bundles/antigravity-plugin-extras/skills/image-enhancer/SKILL.md +0 -100
  21. package/bundles/antigravity-plugin-extras/skills/invoice-organizer/SKILL.md +0 -447
  22. package/bundles/antigravity-plugin-extras/skills/job-application/SKILL.md +0 -188
  23. package/bundles/antigravity-plugin-extras/skills/lead-research-assistant/SKILL.md +0 -200
  24. package/bundles/antigravity-plugin-extras/skills/meeting-insights-analyzer/SKILL.md +0 -328
  25. package/bundles/antigravity-plugin-extras/skills/notebooklm/AUTHENTICATION.md +0 -154
  26. package/bundles/antigravity-plugin-extras/skills/notebooklm/SKILL.md +0 -270
  27. package/bundles/antigravity-plugin-extras/skills/notebooklm/references/api_reference.md +0 -309
  28. package/bundles/antigravity-plugin-extras/skills/notebooklm/references/troubleshooting.md +0 -376
  29. package/bundles/antigravity-plugin-extras/skills/notebooklm/references/usage_patterns.md +0 -338
  30. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/__init__.py +0 -81
  31. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/ask_question.py +0 -256
  32. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/auth_manager.py +0 -358
  33. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/browser_session.py +0 -255
  34. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/browser_utils.py +0 -107
  35. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/cleanup_manager.py +0 -302
  36. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/config.py +0 -44
  37. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/notebook_manager.py +0 -410
  38. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/run.py +0 -102
  39. package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/setup_environment.py +0 -204
  40. package/bundles/antigravity-plugin-extras/skills/onboard-project/SKILL.md +0 -192
  41. package/bundles/antigravity-plugin-extras/skills/pipeline-state/SKILL.md +0 -208
  42. package/bundles/antigravity-plugin-extras/skills/raffle-winner-picker/SKILL.md +0 -159
  43. package/bundles/antigravity-plugin-extras/skills/relay/SKILL.md +0 -246
  44. package/bundles/antigravity-plugin-extras/skills/requesting-code-review/SKILL.md +0 -105
  45. package/bundles/antigravity-plugin-extras/skills/requesting-code-review/code-reviewer.md +0 -146
  46. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/LICENSE.txt +0 -202
  47. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/SKILL.md +0 -646
  48. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/color_palettes.py +0 -302
  49. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/easing.py +0 -230
  50. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/frame_composer.py +0 -469
  51. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/gif_builder.py +0 -246
  52. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/typography.py +0 -357
  53. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/validators.py +0 -264
  54. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/visual_effects.py +0 -494
  55. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/requirements.txt +0 -4
  56. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/bounce.py +0 -106
  57. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/explode.py +0 -331
  58. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/fade.py +0 -329
  59. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/flip.py +0 -291
  60. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/kaleidoscope.py +0 -211
  61. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/morph.py +0 -329
  62. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/move.py +0 -293
  63. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/pulse.py +0 -268
  64. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/shake.py +0 -127
  65. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/slide.py +0 -291
  66. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/spin.py +0 -269
  67. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/wiggle.py +0 -300
  68. package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/zoom.py +0 -312
  69. package/bundles/antigravity-plugin-extras/skills/state-tracking/SKILL.md +0 -131
  70. package/bundles/antigravity-plugin-extras/skills/video-downloader/SKILL.md +0 -107
  71. package/bundles/antigravity-plugin-extras/skills/youtube-transcript/SKILL.md +0 -416
  72. package/bundles/codex/.codex/skills/workflow/golden-plan/SKILL.md +0 -586
  73. /package/bundles/{antigravity-plugin → antigravity-plugin-extras}/skills/golden-plan/SKILL.md +0 -0
@@ -1,200 +0,0 @@
1
- ---
2
- name: lead-research-assistant
3
- context: fork
4
- description: Identifies high-quality leads for your product or service by analyzing your business, searching for target companies, and providing actionable contact strategies. Perfect for sales, business development, and marketing professionals.
5
- ---
6
-
7
- # Lead Research Assistant
8
-
9
- This skill helps you identify and qualify potential leads for your business by analyzing your product/service, understanding your ideal customer profile, and providing actionable outreach strategies.
10
-
11
- ## When to Use This Skill
12
-
13
- - Finding potential customers or clients for your product/service
14
- - Building a list of companies to reach out to for partnerships
15
- - Identifying target accounts for sales outreach
16
- - Researching companies that match your ideal customer profile
17
- - Preparing for business development activities
18
-
19
- ## What This Skill Does
20
-
21
- 1. **Understands Your Business**: Analyzes your product/service, value proposition, and target market
22
- 2. **Identifies Target Companies**: Finds companies that match your ideal customer profile based on:
23
- - Industry and sector
24
- - Company size and location
25
- - Technology stack and tools they use
26
- - Growth stage and funding
27
- - Pain points your product solves
28
- 3. **Prioritizes Leads**: Ranks companies based on fit score and relevance
29
- 4. **Provides Contact Strategies**: Suggests how to approach each lead with personalized messaging
30
- 5. **Enriches Data**: Gathers relevant information about decision-makers and company context
31
-
32
- ## How to Use
33
-
34
- ### Basic Usage
35
-
36
- Simply describe your product/service and what you're looking for:
37
-
38
- ```
39
- I'm building [product description]. Find me 10 companies in [location/industry]
40
- that would be good leads for this.
41
- ```
42
-
43
- ### With Your Codebase
44
-
45
- For even better results, run this from your product's source code directory:
46
-
47
- ```
48
- Look at what I'm building in this repository and identify the top 10 companies
49
- in [location/industry] that would benefit from this product.
50
- ```
51
-
52
- ### Advanced Usage
53
-
54
- For more targeted research:
55
-
56
- ```
57
- My product: [description]
58
- Ideal customer profile:
59
- - Industry: [industry]
60
- - Company size: [size range]
61
- - Location: [location]
62
- - Current pain points: [pain points]
63
- - Technologies they use: [tech stack]
64
-
65
- Find me 20 qualified leads with contact strategies for each.
66
- ```
67
-
68
- ## Instructions
69
-
70
- When a user requests lead research:
71
-
72
- 1. **Understand the Product/Service**
73
- - If in a code directory, analyze the codebase to understand the product
74
- - Ask clarifying questions about the value proposition
75
- - Identify key features and benefits
76
- - Understand what problems it solves
77
-
78
- 2. **Define Ideal Customer Profile**
79
- - Determine target industries and sectors
80
- - Identify company size ranges
81
- - Consider geographic preferences
82
- - Understand relevant pain points
83
- - Note any technology requirements
84
-
85
- 3. **Research and Identify Leads**
86
- - Search for companies matching the criteria
87
- - Look for signals of need (job postings, tech stack, recent news)
88
- - Consider growth indicators (funding, expansion, hiring)
89
- - Identify companies with complementary products/services
90
- - Check for budget indicators
91
-
92
- 4. **Prioritize and Score**
93
- - Create a fit score (1-10) for each lead
94
- - Consider factors like:
95
- - Alignment with ICP
96
- - Signals of immediate need
97
- - Budget availability
98
- - Competitive landscape
99
- - Timing indicators
100
-
101
- 5. **Provide Actionable Output**
102
-
103
- For each lead, provide:
104
- - **Company Name** and website
105
- - **Why They're a Good Fit**: Specific reasons based on their business
106
- - **Priority Score**: 1-10 with explanation
107
- - **Decision Maker**: Role/title to target (e.g., "VP of Engineering")
108
- - **Contact Strategy**: Personalized approach suggestions
109
- - **Value Proposition**: How your product solves their specific problem
110
- - **Conversation Starters**: Specific points to mention in outreach
111
- - **LinkedIn URL**: If available, for easy connection
112
-
113
- 6. **Format the Output**
114
-
115
- Present results in a clear, scannable format:
116
-
117
- ```markdown
118
- # Lead Research Results
119
-
120
- ## Summary
121
- - Total leads found: [X]
122
- - High priority (8-10): [X]
123
- - Medium priority (5-7): [X]
124
- - Average fit score: [X]
125
-
126
- ---
127
-
128
- ## Lead 1: [Company Name]
129
-
130
- **Website**: [URL]
131
- **Priority Score**: [X/10]
132
- **Industry**: [Industry]
133
- **Size**: [Employee count/revenue range]
134
-
135
- **Why They're a Good Fit**:
136
- [2-3 specific reasons based on their business]
137
-
138
- **Target Decision Maker**: [Role/Title]
139
- **LinkedIn**: [URL if available]
140
-
141
- **Value Proposition for Them**:
142
- [Specific benefit for this company]
143
-
144
- **Outreach Strategy**:
145
- [Personalized approach - mention specific pain points, recent company news, or relevant context]
146
-
147
- **Conversation Starters**:
148
- - [Specific point 1]
149
- - [Specific point 2]
150
-
151
- ---
152
-
153
- [Repeat for each lead]
154
- ```
155
-
156
- 7. **Offer Next Steps**
157
- - Suggest saving results to a CSV for CRM import
158
- - Offer to draft personalized outreach messages
159
- - Recommend prioritization based on timing
160
- - Suggest follow-up research for top leads
161
-
162
- ## Examples
163
-
164
- ### Example 1: From Lenny's Newsletter
165
-
166
- **User**: "I'm building a tool that masks sensitive data in AI coding assistant queries. Find potential leads."
167
-
168
- **Output**: Creates a prioritized list of companies that:
169
- - Use AI coding assistants (Copilot, Cursor, etc.)
170
- - Handle sensitive data (fintech, healthcare, legal)
171
- - Have evidence in their GitHub repos of using coding agents
172
- - May have accidentally exposed sensitive data in code
173
- - Includes LinkedIn URLs of relevant decision-makers
174
-
175
- ### Example 2: Local Business
176
-
177
- **User**: "I run a consulting practice for remote team productivity. Find me 10 companies in the Bay Area that recently went remote."
178
-
179
- **Output**: Identifies companies that:
180
- - Recently posted remote job listings
181
- - Announced remote-first policies
182
- - Are hiring distributed teams
183
- - Show signs of remote work challenges
184
- - Provides personalized outreach strategies for each
185
-
186
- ## Tips for Best Results
187
-
188
- - **Be specific** about your product and its unique value
189
- - **Run from your codebase** if applicable for automatic context
190
- - **Provide context** about your ideal customer profile
191
- - **Specify constraints** like industry, location, or company size
192
- - **Request follow-up** research on promising leads for deeper insights
193
-
194
- ## Related Use Cases
195
-
196
- - Drafting personalized outreach emails after identifying leads
197
- - Building a CRM-ready CSV of qualified prospects
198
- - Researching specific companies in detail
199
- - Analyzing competitor customer bases
200
- - Identifying partnership opportunities
@@ -1,328 +0,0 @@
1
- ---
2
- name: meeting-insights-analyzer
3
- context: fork
4
- description: Analyzes meeting transcripts and recordings to uncover behavioral patterns, communication insights, and actionable feedback. Identifies when you avoid conflict, use filler words, dominate conversations, or miss opportunities to listen. Perfect for professionals seeking to improve their communication and leadership skills.
5
- ---
6
-
7
- # Meeting Insights Analyzer
8
-
9
- This skill transforms your meeting transcripts into actionable insights about your communication patterns, helping you become a more effective communicator and leader.
10
-
11
- ## When to Use This Skill
12
-
13
- - Analyzing your communication patterns across multiple meetings
14
- - Getting feedback on your leadership and facilitation style
15
- - Identifying when you avoid difficult conversations
16
- - Understanding your speaking habits and filler words
17
- - Tracking improvement in communication skills over time
18
- - Preparing for performance reviews with concrete examples
19
- - Coaching team members on their communication style
20
-
21
- ## What This Skill Does
22
-
23
- 1. **Pattern Recognition**: Identifies recurring behaviors across meetings like:
24
- - Conflict avoidance or indirect communication
25
- - Speaking ratios and turn-taking
26
- - Question-asking vs. statement-making patterns
27
- - Active listening indicators
28
- - Decision-making approaches
29
-
30
- 2. **Communication Analysis**: Evaluates communication effectiveness:
31
- - Clarity and directness
32
- - Use of filler words and hedging language
33
- - Tone and sentiment patterns
34
- - Meeting control and facilitation
35
-
36
- 3. **Actionable Feedback**: Provides specific, timestamped examples with:
37
- - What happened
38
- - Why it matters
39
- - How to improve
40
-
41
- 4. **Trend Tracking**: Compares patterns over time when analyzing multiple meetings
42
-
43
- ## How to Use
44
-
45
- ### Basic Setup
46
-
47
- 1. Download your meeting transcripts to a folder (e.g., `~/meetings/`)
48
- 2. Navigate to that folder in Claude Code
49
- 3. Ask for the analysis you want
50
-
51
- ### Quick Start Examples
52
-
53
- ```
54
- Analyze all meetings in this folder and tell me when I avoided conflict.
55
- ```
56
-
57
- ```
58
- Look at my meetings from the past month and identify my communication patterns.
59
- ```
60
-
61
- ```
62
- Compare my facilitation style between these two meeting folders.
63
- ```
64
-
65
- ### Advanced Analysis
66
-
67
- ```
68
- Analyze all transcripts in this folder and:
69
- 1. Identify when I interrupted others
70
- 2. Calculate my speaking ratio
71
- 3. Find moments I avoided giving direct feedback
72
- 4. Track my use of filler words
73
- 5. Show examples of good active listening
74
- ```
75
-
76
- ## Instructions
77
-
78
- When a user requests meeting analysis:
79
-
80
- 1. **Discover Available Data**
81
- - Scan the folder for transcript files (.txt, .md, .vtt, .srt, .docx)
82
- - Check if files contain speaker labels and timestamps
83
- - Confirm the date range of meetings
84
- - Identify the user's name/identifier in transcripts
85
-
86
- 2. **Clarify Analysis Goals**
87
-
88
- If not specified, ask what they want to learn:
89
- - Specific behaviors (conflict avoidance, interruptions, filler words)
90
- - Communication effectiveness (clarity, directness, listening)
91
- - Meeting facilitation skills
92
- - Speaking patterns and ratios
93
- - Growth areas for improvement
94
-
95
- 3. **Analyze Patterns**
96
-
97
- For each requested insight:
98
-
99
- **Conflict Avoidance**:
100
- - Look for hedging language ("maybe", "kind of", "I think")
101
- - Indirect phrasing instead of direct requests
102
- - Changing subject when tension arises
103
- - Agreeing without commitment ("yeah, but...")
104
- - Not addressing obvious problems
105
-
106
- **Speaking Ratios**:
107
- - Calculate percentage of meeting spent speaking
108
- - Count interruptions (by and of the user)
109
- - Measure average speaking turn length
110
- - Track question vs. statement ratios
111
-
112
- **Filler Words**:
113
- - Count "um", "uh", "like", "you know", "actually", etc.
114
- - Note frequency per minute or per speaking turn
115
- - Identify situations where they increase (nervous, uncertain)
116
-
117
- **Active Listening**:
118
- - Questions that reference others' previous points
119
- - Paraphrasing or summarizing others' ideas
120
- - Building on others' contributions
121
- - Asking clarifying questions
122
-
123
- **Leadership & Facilitation**:
124
- - Decision-making approach (directive vs. collaborative)
125
- - How disagreements are handled
126
- - Inclusion of quieter participants
127
- - Time management and agenda control
128
- - Follow-up and action item clarity
129
-
130
- 4. **Provide Specific Examples**
131
-
132
- For each pattern found, include:
133
-
134
- ```markdown
135
- ### [Pattern Name]
136
-
137
- **Finding**: [One-sentence summary of the pattern]
138
-
139
- **Frequency**: [X times across Y meetings]
140
-
141
- **Examples**:
142
-
143
- 1. **[Meeting Name/Date]** - [Timestamp]
144
-
145
- **What Happened**:
146
- > [Actual quote from transcript]
147
-
148
- **Why This Matters**:
149
- [Explanation of the impact or missed opportunity]
150
-
151
- **Better Approach**:
152
- [Specific alternative phrasing or behavior]
153
-
154
- [Repeat for 2-3 strongest examples]
155
- ```
156
-
157
- 5. **Synthesize Insights**
158
-
159
- After analyzing all patterns, provide:
160
-
161
- ```markdown
162
- # Meeting Insights Summary
163
-
164
- **Analysis Period**: [Date range]
165
- **Meetings Analyzed**: [X meetings]
166
- **Total Duration**: [X hours]
167
-
168
- ## Key Patterns Identified
169
-
170
- ### 1. [Primary Pattern]
171
- - **Observed**: [What you saw]
172
- - **Impact**: [Why it matters]
173
- - **Recommendation**: [How to improve]
174
-
175
- ### 2. [Second Pattern]
176
- [Same structure]
177
-
178
- ## Communication Strengths
179
-
180
- 1. [Strength 1 with example]
181
- 2. [Strength 2 with example]
182
- 3. [Strength 3 with example]
183
-
184
- ## Growth Opportunities
185
-
186
- 1. **[Area 1]**: [Specific, actionable advice]
187
- 2. **[Area 2]**: [Specific, actionable advice]
188
- 3. **[Area 3]**: [Specific, actionable advice]
189
-
190
- ## Speaking Statistics
191
-
192
- - Average speaking time: [X% of meeting]
193
- - Questions asked: [X per meeting average]
194
- - Filler words: [X per minute]
195
- - Interruptions: [X given / Y received per meeting]
196
-
197
- ## Next Steps
198
-
199
- [3-5 concrete actions to improve communication]
200
- ```
201
-
202
- 6. **Offer Follow-Up Options**
203
- - Track these same metrics in future meetings
204
- - Deep dive into specific meetings or patterns
205
- - Compare to industry benchmarks
206
- - Create a personal communication development plan
207
- - Generate a summary for performance reviews
208
-
209
- ## Examples
210
-
211
- ### Example 1: Conflict Avoidance Analysis (Inspired by Dan Shipper)
212
-
213
- **User**: "I download all of my meeting recordings and put them in a folder. Tell me all the times I've subtly avoided conflict."
214
-
215
- **Output**:
216
- ```markdown
217
- # Conflict Avoidance Patterns
218
-
219
- Found 23 instances across 15 meetings where you used indirect
220
- communication or avoided addressing tensions directly.
221
-
222
- ## Pattern: Hedging on Critical Feedback
223
-
224
- **Frequency**: 8 times across 7 meetings
225
-
226
- **Example 1: 1:1 with Sarah** - 00:14:32
227
-
228
- **What Happened**:
229
- > "So, I was thinking... maybe we could, like, potentially
230
- > consider looking at the timeline again? I mean, if you
231
- > think that makes sense. But whatever you think is best!"
232
-
233
- **Why This Matters**:
234
- You needed to address that Sarah's project was behind schedule,
235
- but the hedging language ("maybe", "potentially", "if you think")
236
- and the deflection at the end ("whatever you think") made it easy
237
- for her to miss the urgency.
238
-
239
- **Better Approach**:
240
- "Sarah, the project is two weeks behind schedule. We need to
241
- discuss what's blocking progress and create a new timeline
242
- today."
243
-
244
- [Additional examples...]
245
-
246
- ## Recommendations
247
-
248
- 1. **Name the issue directly** in the first sentence
249
- 2. **Remove hedging words** like "maybe," "kind of," "sort of"
250
- 3. **Ask specific questions** instead of hinting
251
- 4. **Schedule difficult conversations** instead of raising them casually
252
- ```
253
-
254
- ### Example 2: Leadership Facilitation
255
-
256
- **User**: "Analyze my team meetings and tell me about my facilitation style."
257
-
258
- **Output**: Provides insights on:
259
- - How much you speak vs. team members (60% vs. 40%)
260
- - Whether you ask questions or make statements (3:1 ratio)
261
- - How you handle disagreements (tendency to resolve too quickly)
262
- - Who speaks least and whether you draw them in
263
- - Examples of good and missed facilitation moments
264
-
265
- ### Example 3: Personal Development Tracking
266
-
267
- **User**: "Compare my meetings from Q1 vs. Q2 to see if I've improved my listening skills."
268
-
269
- **Output**: Creates a comparative analysis showing:
270
- - Decrease in interruptions (8 per meeting → 3 per meeting)
271
- - Increase in clarifying questions (2 → 7 per meeting)
272
- - Improvement in building on others' ideas
273
- - Specific examples showing the difference
274
- - Remaining areas for growth
275
-
276
- ## Setup Tips
277
-
278
- ### Getting Meeting Transcripts
279
-
280
- **From Granola** (free with Lenny's newsletter subscription):
281
- - Granola auto-transcribes your meetings
282
- - Export transcripts to a folder: [Instructions on how]
283
- - Point Claude Code to that folder
284
-
285
- **From Zoom**:
286
- - Enable cloud recording with transcription
287
- - Download VTT or SRT files after meetings
288
- - Store in a dedicated folder
289
-
290
- **From Google Meet**:
291
- - Use Google Docs auto-transcription
292
- - Save transcript docs to a folder
293
- - Download as .txt files or give Claude Code access
294
-
295
- **From Fireflies.ai, Otter.ai, etc.**:
296
- - Export transcripts in bulk
297
- - Store in a local folder
298
- - Run analysis on the folder
299
-
300
- ### Best Practices
301
-
302
- 1. **Consistent naming**: Use `YYYY-MM-DD - Meeting Name.txt` format
303
- 2. **Regular analysis**: Review monthly or quarterly for trends
304
- 3. **Specific queries**: Ask about one behavior at a time for depth
305
- 4. **Privacy**: Keep sensitive meeting data local
306
- 5. **Action-oriented**: Focus on one improvement area at a time
307
-
308
- ## Common Analysis Requests
309
-
310
- - "When do I avoid difficult conversations?"
311
- - "How often do I interrupt others?"
312
- - "What's my speaking vs. listening ratio?"
313
- - "Do I ask good questions?"
314
- - "How do I handle disagreement?"
315
- - "Am I inclusive of all voices?"
316
- - "Do I use too many filler words?"
317
- - "How clear are my action items?"
318
- - "Do I stay on agenda or get sidetracked?"
319
- - "How has my communication changed over time?"
320
-
321
- ## Related Use Cases
322
-
323
- - Creating a personal development plan from insights
324
- - Preparing performance review materials with examples
325
- - Coaching direct reports on their communication
326
- - Analyzing customer calls for sales or support patterns
327
- - Studying negotiation tactics and outcomes
328
-
@@ -1,154 +0,0 @@
1
- # Authentication Architecture
2
-
3
- ## Overview
4
-
5
- This skill uses a **hybrid authentication approach** that combines the best of both worlds:
6
-
7
- 1. **Persistent Browser Profile** (`user_data_dir`) for consistent browser fingerprinting
8
- 2. **Manual Cookie Injection** from `state.json` for reliable session cookie persistence
9
-
10
- ## Why This Approach?
11
-
12
- ### The Problem
13
-
14
- Playwright/Patchright has a known bug ([#36139](https://github.com/microsoft/playwright/issues/36139)) where **session cookies** (cookies without an `Expires` attribute) do not persist correctly when using `launch_persistent_context()` with `user_data_dir`.
15
-
16
- **What happens:**
17
- - ✅ Persistent cookies (with `Expires` date) → Saved correctly to browser profile
18
- - ❌ Session cookies (without `Expires`) → **Lost after browser restarts**
19
-
20
- **Impact:**
21
- - Some Google auth cookies are session cookies
22
- - Users experience random authentication failures
23
- - "Works on my machine" syndrome (depends on which cookies Google uses)
24
-
25
- ### TypeScript vs Python
26
-
27
- The **MCP Server** (TypeScript) can work around this by passing `storage_state` as a parameter:
28
-
29
- ```typescript
30
- // TypeScript - works!
31
- const context = await chromium.launchPersistentContext(userDataDir, {
32
- storageState: "state.json", // ← Loads cookies including session cookies
33
- channel: "chrome"
34
- });
35
- ```
36
-
37
- But **Python's Playwright API doesn't support this** ([#14949](https://github.com/microsoft/playwright/issues/14949)):
38
-
39
- ```python
40
- # Python - NOT SUPPORTED!
41
- context = playwright.chromium.launch_persistent_context(
42
- user_data_dir=profile_dir,
43
- storage_state="state.json", # ← Parameter not available in Python!
44
- channel="chrome"
45
- )
46
- ```
47
-
48
- ## Our Solution: Hybrid Approach
49
-
50
- We use a **two-phase authentication system**:
51
-
52
- ### Phase 1: Setup (`auth_manager.py setup`)
53
-
54
- 1. Launch persistent context with `user_data_dir`
55
- 2. User logs in manually
56
- 3. **Save state to TWO places:**
57
- - Browser profile directory (automatic, for fingerprint + persistent cookies)
58
- - `state.json` file (explicit save, for session cookies)
59
-
60
- ```python
61
- context = playwright.chromium.launch_persistent_context(
62
- user_data_dir="browser_profile/",
63
- channel="chrome"
64
- )
65
- # User logs in...
66
- context.storage_state(path="state.json") # Save all cookies
67
- ```
68
-
69
- ### Phase 2: Runtime (`ask_question.py`)
70
-
71
- 1. Launch persistent context with `user_data_dir` (loads fingerprint + persistent cookies)
72
- 2. **Manually inject cookies** from `state.json` (adds session cookies)
73
-
74
- ```python
75
- # Step 1: Launch with browser profile
76
- context = playwright.chromium.launch_persistent_context(
77
- user_data_dir="browser_profile/",
78
- channel="chrome"
79
- )
80
-
81
- # Step 2: Manually inject cookies from state.json
82
- with open("state.json", 'r') as f:
83
- state = json.load(f)
84
- context.add_cookies(state['cookies']) # ← Workaround for session cookies!
85
- ```
86
-
87
- ## Benefits
88
-
89
- | Feature | Our Approach | Pure `user_data_dir` | Pure `storage_state` |
90
- |---------|--------------|----------------------|----------------------|
91
- | **Browser Fingerprint Consistency** | ✅ Same across restarts | ✅ Same | ❌ Changes each time |
92
- | **Session Cookie Persistence** | ✅ Manual injection | ❌ Lost (bug) | ✅ Native support |
93
- | **Persistent Cookie Persistence** | ✅ Automatic | ✅ Automatic | ✅ Native support |
94
- | **Google Trust** | ✅ High (same browser) | ✅ High | ❌ Low (new browser) |
95
- | **Cross-platform Reliability** | ✅ Chrome required | ⚠️ Chromium issues | ✅ Portable |
96
- | **Cache Performance** | ✅ Keeps cache | ✅ Keeps cache | ❌ No cache |
97
-
98
- ## File Structure
99
-
100
- ```
101
- ~/.claude/skills/notebooklm/data/
102
- ├── auth_info.json # Metadata about authentication
103
- ├── browser_state/
104
- │ ├── state.json # Cookies + localStorage (for manual injection)
105
- │ └── browser_profile/ # Chrome user profile (for fingerprint + cache)
106
- │ ├── Default/
107
- │ │ ├── Cookies # Persistent cookies only (session cookies missing!)
108
- │ │ ├── Local Storage/
109
- │ │ └── Cache/
110
- │ └── ...
111
- ```
112
-
113
- ## Why `state.json` is Critical
114
-
115
- Even though we use `user_data_dir`, we **still need `state.json`** because:
116
-
117
- 1. **Session cookies** are not saved to the browser profile (Playwright bug)
118
- 2. **Manual injection** is the only reliable way to load session cookies
119
- 3. **Validation** - we can check if cookies are expired before launching
120
-
121
- ## Code References
122
-
123
- **Setup:** `scripts/auth_manager.py:94-120`
124
- - Lines 100-113: Launch persistent context with `channel="chrome"`
125
- - Line 167: Save to `state.json` via `context.storage_state()`
126
-
127
- **Runtime:** `scripts/ask_question.py:77-118`
128
- - Lines 86-99: Launch persistent context
129
- - Lines 101-118: Manual cookie injection workaround
130
-
131
- **Validation:** `scripts/auth_manager.py:236-298`
132
- - Lines 262-275: Launch persistent context
133
- - Lines 277-287: Manual cookie injection for validation
134
-
135
- ## Related Issues
136
-
137
- - [microsoft/playwright#36139](https://github.com/microsoft/playwright/issues/36139) - Session cookies not persisting
138
- - [microsoft/playwright#14949](https://github.com/microsoft/playwright/issues/14949) - Storage state with persistent context
139
- - [StackOverflow Question](https://stackoverflow.com/questions/79641481/) - Session cookie persistence issue
140
-
141
- ## Future Improvements
142
-
143
- If Playwright adds support for `storage_state` parameter in Python's `launch_persistent_context()`, we can simplify to:
144
-
145
- ```python
146
- # Future (when Python API supports it):
147
- context = playwright.chromium.launch_persistent_context(
148
- user_data_dir="browser_profile/",
149
- storage_state="state.json", # ← Would handle everything automatically!
150
- channel="chrome"
151
- )
152
- ```
153
-
154
- Until then, our hybrid approach is the most reliable solution.