@charzhu/openjaw-agent 0.2.0
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.
- package/LICENSE +21 -0
- package/README.md +546 -0
- package/config.yaml +72 -0
- package/dist/main.js +61348 -0
- package/dist/main.js.map +7 -0
- package/package.json +134 -0
- package/prompts/COMPUTER_USE.md +87 -0
- package/prompts/IDENTITY.md +33 -0
- package/prompts/REASONING.md +182 -0
- package/prompts/SAFETY.md +43 -0
- package/prompts/USER.md +37 -0
- package/skills/competitive-battlecard.md +98 -0
- package/skills/create-docx.md +174 -0
- package/skills/create-pdf-report.md +93 -0
- package/skills/create-pptx.md +109 -0
- package/skills/daily-briefing.md +65 -0
- package/skills/data-analysis.md +127 -0
- package/skills/deep-research.md +101 -0
- package/skills/desktop-cleanup.md +82 -0
- package/skills/doc-coauthoring.md +123 -0
- package/skills/email-drafting.md +141 -0
- package/skills/email-with-attachment.md +114 -0
- package/skills/internal-comms.md +88 -0
- package/skills/meeting-summarizer.md +72 -0
- package/skills/proofreading.md +77 -0
- package/skills/refresh-token.md +161 -0
- package/skills/skill-creator.md +122 -0
- package/skills/summarization.md +110 -0
- package/skills/translation.md +94 -0
- package/skills/web-research.md +93 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: desktop-cleanup
|
|
3
|
+
description: "Organize files on the desktop or any directory by categorizing into folders."
|
|
4
|
+
whenToUse: "User asks to organize/clean their desktop"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Desktop Cleanup & Organization
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
Organize files on the user's desktop or any directory by categorizing files into folders based on type, topic, or date. Handles deduplication and creates a clean folder structure.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
- User asks to organize/clean their desktop
|
|
14
|
+
- User asks to sort files in a directory
|
|
15
|
+
- User says "整理一下桌面" or "帮我分类文件"
|
|
16
|
+
|
|
17
|
+
## Steps
|
|
18
|
+
|
|
19
|
+
### 1. Survey Current State
|
|
20
|
+
```python
|
|
21
|
+
import os
|
|
22
|
+
|
|
23
|
+
path = os.path.expanduser('~/Desktop')
|
|
24
|
+
entries = os.listdir(path)
|
|
25
|
+
# Categorize: files vs directories, by extension
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 2. Classification Rules
|
|
29
|
+
|
|
30
|
+
| Category | Extensions / Patterns | Folder Name |
|
|
31
|
+
|----------|----------------------|-------------|
|
|
32
|
+
| Documents | .pdf, .docx, .doc, .txt, .md | 工作文档 |
|
|
33
|
+
| Spreadsheets | .xlsx, .xls, .csv | 数据表格 |
|
|
34
|
+
| Presentations | .pptx, .ppt | 演示文稿 |
|
|
35
|
+
| Images | .png, .jpg, .jpeg, .gif, .bmp, .svg | 图片 |
|
|
36
|
+
| Code | .py, .js, .ts, .html, .css, .json | 代码文件 |
|
|
37
|
+
| Apps | .lnk, .exe | [Categorize by app type] |
|
|
38
|
+
| Archives | .zip, .rar, .7z, .tar.gz | 压缩包 |
|
|
39
|
+
| Videos | .mp4, .avi, .mkv, .mov | 视频 |
|
|
40
|
+
| Investment/Finance | *Gold*, *Fund*, *Stock*, 黄金*, 基金* | 投资分析 |
|
|
41
|
+
|
|
42
|
+
### 3. Smart Categorization
|
|
43
|
+
Don't just sort by extension — also check content/filename patterns:
|
|
44
|
+
- Financial reports → 投资分析
|
|
45
|
+
- PM/work reports → 工作文档
|
|
46
|
+
- Screenshots → 图片 or Misc Files
|
|
47
|
+
- App shortcuts → Group by function (Browsers, Development, etc.)
|
|
48
|
+
|
|
49
|
+
### 4. Move Files Safely
|
|
50
|
+
```python
|
|
51
|
+
import shutil
|
|
52
|
+
|
|
53
|
+
def safe_move(src, dst_dir, filename):
|
|
54
|
+
os.makedirs(dst_dir, exist_ok=True)
|
|
55
|
+
dst = os.path.join(dst_dir, filename)
|
|
56
|
+
if os.path.exists(dst):
|
|
57
|
+
# Add number suffix to avoid overwrite
|
|
58
|
+
base, ext = os.path.splitext(filename)
|
|
59
|
+
i = 1
|
|
60
|
+
while os.path.exists(dst):
|
|
61
|
+
dst = os.path.join(dst_dir, f"{base}_{i}{ext}")
|
|
62
|
+
i += 1
|
|
63
|
+
shutil.move(src, dst)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 5. Respect Existing Structure
|
|
67
|
+
- Don't move files that are already in organized folders
|
|
68
|
+
- Don't touch system files (desktop.ini, etc.)
|
|
69
|
+
- Preserve existing folder categorization
|
|
70
|
+
- Ask before deleting duplicates
|
|
71
|
+
|
|
72
|
+
### 6. Report Results
|
|
73
|
+
After organizing, list:
|
|
74
|
+
- How many files were moved
|
|
75
|
+
- What folders were created
|
|
76
|
+
- What the desktop looks like now
|
|
77
|
+
|
|
78
|
+
## Important Notes
|
|
79
|
+
- **Never delete files without asking** — only move
|
|
80
|
+
- Skip `desktop.ini` and hidden files
|
|
81
|
+
- Check for duplicate shortcuts before removing
|
|
82
|
+
- Preserve existing folder structure — enhance, don't replace
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: doc-coauthoring
|
|
3
|
+
description: "Guide the user through a 3-stage workflow for co-authoring documents."
|
|
4
|
+
whenToUse: "User mentions writing documentation: write a doc, draft a proposal, create a spec"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Doc Co-Authoring
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
Guide the user through a structured 3-stage workflow for co-authoring documents: PRDs, specs, proposals, decision docs, design docs, or any substantial writing. Adapted from Anthropic's doc-coauthoring skill for OpenJaw/PM context.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
- User mentions writing documentation: "write a doc", "draft a proposal", "create a spec", "write up"
|
|
14
|
+
- User mentions specific doc types: "PRD", "design doc", "decision doc", "RFC", "spec"
|
|
15
|
+
- User says "帮我写个文档" or "写个proposal"
|
|
16
|
+
- User seems to be starting a substantial writing task (not just a quick email)
|
|
17
|
+
|
|
18
|
+
## Workflow Overview
|
|
19
|
+
Offer the 3-stage workflow. If user declines, work freeform. If they accept:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
Stage 1: Context Gathering → Stage 2: Refinement & Structure → Stage 3: Reader Testing
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Stage 1: Context Gathering
|
|
28
|
+
|
|
29
|
+
**Goal:** Close the knowledge gap between what the user knows and what Jon knows.
|
|
30
|
+
|
|
31
|
+
### Initial Questions (ask these first)
|
|
32
|
+
1. What type of document? (spec, decision doc, proposal, PRD...)
|
|
33
|
+
2. Who's the primary audience? (leadership, peer PMs, engineering, cross-team...)
|
|
34
|
+
3. What impact do you want when someone reads this?
|
|
35
|
+
4. Is there a template or format to follow?
|
|
36
|
+
5. Language preference? (English, Chinese, mixed)
|
|
37
|
+
6. Any other constraints?
|
|
38
|
+
|
|
39
|
+
### Info Dumping
|
|
40
|
+
Encourage user to dump all context — don't worry about organizing:
|
|
41
|
+
- Background on the project/problem
|
|
42
|
+
- Related discussions (can point to Teams chats/channels — Jon can read them)
|
|
43
|
+
- Why alternative solutions aren't being used
|
|
44
|
+
- Timeline pressures or constraints
|
|
45
|
+
- Technical architecture or dependencies
|
|
46
|
+
- Stakeholder concerns
|
|
47
|
+
|
|
48
|
+
**Jon's special capabilities for context gathering:**
|
|
49
|
+
- Read Teams chat history: `teams_read_messages`
|
|
50
|
+
- Read emails: `outlook_read_content` / `outlook_search`
|
|
51
|
+
- Search memory: `memory_search`
|
|
52
|
+
- Browse web for background: `web_search` / `web_fetch`
|
|
53
|
+
|
|
54
|
+
### Clarifying Questions
|
|
55
|
+
After initial dump, generate 5-10 numbered questions about gaps.
|
|
56
|
+
User can answer in shorthand: "1: yes, 2: see the Teams chat, 3: no because backwards compat"
|
|
57
|
+
|
|
58
|
+
**Exit condition:** When I can ask about edge cases and trade-offs without needing basics explained.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Stage 2: Refinement & Structure
|
|
63
|
+
|
|
64
|
+
**Goal:** Build the document section by section through brainstorming and iteration.
|
|
65
|
+
|
|
66
|
+
### For Each Section:
|
|
67
|
+
1. **Clarifying questions** — What should this section include?
|
|
68
|
+
2. **Brainstorm 5-20 options** — Points, angles, data that might belong here
|
|
69
|
+
3. **User curates** — "Keep 1,4,7. Remove 3. Combine 11 and 12."
|
|
70
|
+
4. **Draft the section** — Write it out
|
|
71
|
+
5. **Iterate** — User gives feedback, Jon makes surgical edits
|
|
72
|
+
6. **Quality check** — After 3 iterations with no major changes, ask if anything can be cut
|
|
73
|
+
|
|
74
|
+
### Section Ordering
|
|
75
|
+
- Start with the section that has the most unknowns
|
|
76
|
+
- Leave summary/intro sections for last
|
|
77
|
+
- For decision docs: start with the core proposal
|
|
78
|
+
- For specs: start with the technical approach
|
|
79
|
+
|
|
80
|
+
### Near Completion (80%+ done)
|
|
81
|
+
Re-read entire document and check for:
|
|
82
|
+
- Flow and consistency across sections
|
|
83
|
+
- Redundancy or contradictions
|
|
84
|
+
- "Slop" — generic filler that doesn't carry weight
|
|
85
|
+
- Whether every sentence earns its place
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Stage 3: Reader Testing
|
|
90
|
+
|
|
91
|
+
**Goal:** Test the document with "fresh eyes" to catch blind spots.
|
|
92
|
+
|
|
93
|
+
### Steps:
|
|
94
|
+
1. **Predict reader questions** — Generate 5-10 questions a reader would ask
|
|
95
|
+
2. **Test each question** — Re-read the doc as if seeing it for the first time
|
|
96
|
+
3. **Check for:**
|
|
97
|
+
- Ambiguity or unclear phrasing
|
|
98
|
+
- Assumed knowledge that isn't stated
|
|
99
|
+
- Internal contradictions
|
|
100
|
+
- Missing context for new readers
|
|
101
|
+
4. **Report & fix** — List issues found, fix them
|
|
102
|
+
|
|
103
|
+
### Exit Condition
|
|
104
|
+
When the doc consistently makes sense to a "fresh reader" without needing verbal explanation.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Final Steps
|
|
109
|
+
1. User does a final read-through (they own the document)
|
|
110
|
+
2. Double-check facts, links, technical details
|
|
111
|
+
3. Verify it achieves the intended impact
|
|
112
|
+
|
|
113
|
+
## Output Options
|
|
114
|
+
- Save as markdown file
|
|
115
|
+
- Generate as PDF (use create-pdf-report skill)
|
|
116
|
+
- Generate as Word document (use create-docx skill)
|
|
117
|
+
- Send via email (use email-with-attachment skill)
|
|
118
|
+
|
|
119
|
+
## Style Notes
|
|
120
|
+
- Be direct and procedural — don't oversell the process
|
|
121
|
+
- If user wants to skip a stage, let them
|
|
122
|
+
- Don't reprint the whole doc after every edit — show what changed
|
|
123
|
+
- Always give user agency to adjust the process
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: email-drafting
|
|
3
|
+
description: "Draft professional, audience-aware emails for any purpose."
|
|
4
|
+
whenToUse: "User asks to write/draft an email"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Email Drafting
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
Draft professional, audience-aware emails for any purpose — status updates, leadership communications, cross-team requests, follow-ups, escalations. Adapted for Microsoft PM context with Chinese/English bilingual support.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
- User asks to write/draft an email
|
|
14
|
+
- User says "帮我写封邮件" or "draft an email"
|
|
15
|
+
- User wants to reply to an email and needs help with wording
|
|
16
|
+
- User needs to escalate, follow up, or request something via email
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
### 1. Understand the Context
|
|
21
|
+
Before drafting, clarify:
|
|
22
|
+
- **Audience**: Who is receiving? (skip-level leader, peer PM, engineer, external partner)
|
|
23
|
+
- **Purpose**: What action do you want? (inform, request, escalate, follow up)
|
|
24
|
+
- **Tone**: Formal? Casual? Urgent?
|
|
25
|
+
- **Language**: English? Chinese? Mixed?
|
|
26
|
+
|
|
27
|
+
### 2. Structure by Purpose
|
|
28
|
+
|
|
29
|
+
#### Status Update / FYI
|
|
30
|
+
```
|
|
31
|
+
Subject: [Topic] — [Key takeaway in 5 words]
|
|
32
|
+
|
|
33
|
+
Hi [Name],
|
|
34
|
+
|
|
35
|
+
[1 sentence context — why you're writing]
|
|
36
|
+
|
|
37
|
+
Key updates:
|
|
38
|
+
• [Update 1 with metric/impact]
|
|
39
|
+
• [Update 2 with metric/impact]
|
|
40
|
+
• [Update 3 with metric/impact]
|
|
41
|
+
|
|
42
|
+
Next steps: [What happens next, who owns it]
|
|
43
|
+
|
|
44
|
+
[Closing]
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
#### Request / Ask
|
|
48
|
+
```
|
|
49
|
+
Subject: [Action Needed] — [Specific request]
|
|
50
|
+
|
|
51
|
+
Hi [Name],
|
|
52
|
+
|
|
53
|
+
[1 sentence context]
|
|
54
|
+
[1 sentence why this matters]
|
|
55
|
+
|
|
56
|
+
Ask: [Clear, specific request]
|
|
57
|
+
Timeline: [When you need it by]
|
|
58
|
+
|
|
59
|
+
[Why this is important to them / what's in it for them]
|
|
60
|
+
|
|
61
|
+
Thanks,
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
#### Escalation
|
|
65
|
+
```
|
|
66
|
+
Subject: [Urgent/Priority] — [Issue] impacting [scope]
|
|
67
|
+
|
|
68
|
+
Hi [Name],
|
|
69
|
+
|
|
70
|
+
Issue: [What's happening, since when]
|
|
71
|
+
Impact: [Quantified impact — users affected, SLA at risk, revenue impact]
|
|
72
|
+
Root cause: [Known/investigating]
|
|
73
|
+
What we need: [Specific ask with timeline]
|
|
74
|
+
Mitigation: [What we're doing in the meantime]
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### Follow-up (Gentle Nudge)
|
|
78
|
+
```
|
|
79
|
+
Subject: Re: [Original subject]
|
|
80
|
+
|
|
81
|
+
Hi [Name],
|
|
82
|
+
|
|
83
|
+
Just circling back on [topic] from [date/meeting].
|
|
84
|
+
[Brief reminder of what was discussed/agreed]
|
|
85
|
+
|
|
86
|
+
Could you [specific action] by [date]?
|
|
87
|
+
|
|
88
|
+
Happy to discuss if there are any blockers.
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 3. Style Rules
|
|
92
|
+
- **Subject lines**: Front-load the key info. No vague subjects like "Quick question"
|
|
93
|
+
- **Length**: Shorter is better. If > 5 paragraphs, it should be a doc
|
|
94
|
+
- **Action items**: Bold or bullet them. Don't bury asks in paragraphs
|
|
95
|
+
- **CC etiquette**: Only CC people who need to know, not everyone
|
|
96
|
+
- **Chinese/English mix**: Use English for technical terms, Chinese for narrative when writing to Chinese colleagues
|
|
97
|
+
- **Avoid**: "As per my last email", "Please advise", "Hope this email finds you well"
|
|
98
|
+
|
|
99
|
+
### 4. Sending
|
|
100
|
+
- Use `outlook_compose_email` for plain text
|
|
101
|
+
- Use Outlook REST API for emails with attachments (see email-with-attachment skill)
|
|
102
|
+
- **Always show draft to user before sending** (send confirmation gate)
|
|
103
|
+
|
|
104
|
+
## Templates for Common Scenarios
|
|
105
|
+
|
|
106
|
+
### Weekly Team Update (Chinese)
|
|
107
|
+
```
|
|
108
|
+
Subject: [Team Name] 周报 — W[XX]
|
|
109
|
+
|
|
110
|
+
Hi all,
|
|
111
|
+
|
|
112
|
+
本周进展:
|
|
113
|
+
• [重要里程碑/发布]
|
|
114
|
+
• [关键指标变化]
|
|
115
|
+
|
|
116
|
+
下周计划:
|
|
117
|
+
• [计划1]
|
|
118
|
+
• [计划2]
|
|
119
|
+
|
|
120
|
+
风险/阻塞:
|
|
121
|
+
• [如有]
|
|
122
|
+
|
|
123
|
+
Thanks,
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Cross-team Request (English)
|
|
127
|
+
```
|
|
128
|
+
Subject: [Request] — Need [X] support for [project] by [date]
|
|
129
|
+
|
|
130
|
+
Hi [Name],
|
|
131
|
+
|
|
132
|
+
We're working on [project/feature] which [brief context].
|
|
133
|
+
To unblock [specific next step], we need your team's help with:
|
|
134
|
+
|
|
135
|
+
1. [Specific ask]
|
|
136
|
+
2. [Specific ask]
|
|
137
|
+
|
|
138
|
+
Timeline: Ideally by [date] to meet our [milestone].
|
|
139
|
+
|
|
140
|
+
Happy to set up a quick sync if helpful. Let me know!
|
|
141
|
+
```
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: email-with-attachment
|
|
3
|
+
description: "Send emails with file attachments via Outlook REST API v2.0."
|
|
4
|
+
whenToUse: "User asks to email a file/document/PDF/PPTX"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Email with Attachment (Outlook REST API)
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
Send emails with file attachments via Outlook REST API v2.0. Use this when the Graph channel's `outlook_compose_email` tool doesn't support attachments.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
- User asks to email a file/document/PDF/PPTX
|
|
14
|
+
- Need to send email with attachment
|
|
15
|
+
- Graph channel email was sent but attachment is missing
|
|
16
|
+
|
|
17
|
+
## IMPORTANT: Use Outlook REST API, NOT Graph API, NOT COM
|
|
18
|
+
- Our token audience is `https://outlook.office.com` (not `https://graph.microsoft.com`)
|
|
19
|
+
- COM `$mail.Send()` is unreliable — emails get stuck in Outbox with lost attachments
|
|
20
|
+
- **Outlook REST API v2.0 is the ONLY working method** ✅
|
|
21
|
+
|
|
22
|
+
## Steps
|
|
23
|
+
|
|
24
|
+
### 1. Create the File First
|
|
25
|
+
Generate the file (PDF, PPTX, DOCX, etc.) and save to a known path:
|
|
26
|
+
- Temp: system temp directory (use `tempfile.gettempdir()` in Python or `$env:TEMP` in PS)
|
|
27
|
+
- Desktop: `~/Desktop/{filename}` (use `os.path.expanduser('~/Desktop')` in Python)
|
|
28
|
+
|
|
29
|
+
### 2. Send via Outlook REST API v2.0
|
|
30
|
+
```python
|
|
31
|
+
import json, os, base64, urllib.request, urllib.error
|
|
32
|
+
|
|
33
|
+
# Read token
|
|
34
|
+
token_path = os.path.expanduser("~/.graph-token/tokens/outlook-mail.json")
|
|
35
|
+
with open(token_path, 'r') as f:
|
|
36
|
+
token_data = json.load(f)
|
|
37
|
+
access_token = token_data['access_token']
|
|
38
|
+
|
|
39
|
+
# Read and encode file
|
|
40
|
+
with open(file_path, 'rb') as f:
|
|
41
|
+
file_b64 = base64.b64encode(f.read()).decode('utf-8')
|
|
42
|
+
|
|
43
|
+
# Build email payload
|
|
44
|
+
email_payload = {
|
|
45
|
+
"Message": {
|
|
46
|
+
"Subject": subject,
|
|
47
|
+
"Body": {"ContentType": "Text", "Content": body_text},
|
|
48
|
+
"ToRecipients": [
|
|
49
|
+
{"EmailAddress": {"Address": recipient}}
|
|
50
|
+
],
|
|
51
|
+
"Attachments": [
|
|
52
|
+
{
|
|
53
|
+
"@odata.type": "#Microsoft.OutlookServices.FileAttachment",
|
|
54
|
+
"Name": filename,
|
|
55
|
+
"ContentType": content_type, # e.g., "application/pdf"
|
|
56
|
+
"ContentBytes": file_b64
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"SaveToSentItems": "true"
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
# Send
|
|
64
|
+
url = "https://outlook.office.com/api/v2.0/me/sendmail"
|
|
65
|
+
data = json.dumps(email_payload).encode('utf-8')
|
|
66
|
+
req = urllib.request.Request(url, data=data, method='POST')
|
|
67
|
+
req.add_header('Authorization', f'Bearer {access_token}')
|
|
68
|
+
req.add_header('Content-Type', 'application/json')
|
|
69
|
+
|
|
70
|
+
response = urllib.request.urlopen(req)
|
|
71
|
+
# Status 202 = success
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 3. Content Types
|
|
75
|
+
| File Type | Content-Type |
|
|
76
|
+
|-----------|-------------|
|
|
77
|
+
| PDF | `application/pdf` |
|
|
78
|
+
| DOCX | `application/vnd.openxmlformats-officedocument.wordprocessingml.document` |
|
|
79
|
+
| PPTX | `application/vnd.openxmlformats-officedocument.presentationml.presentation` |
|
|
80
|
+
| XLSX | `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` |
|
|
81
|
+
| PNG | `image/png` |
|
|
82
|
+
| ZIP | `application/zip` |
|
|
83
|
+
|
|
84
|
+
### 4. For HTML Body
|
|
85
|
+
Change `"ContentType": "Text"` to `"ContentType": "HTML"` and use HTML in Content.
|
|
86
|
+
|
|
87
|
+
### 5. For CC/BCC
|
|
88
|
+
Add to the Message object:
|
|
89
|
+
```json
|
|
90
|
+
"CcRecipients": [{"EmailAddress": {"Address": "cc@microsoft.com"}}],
|
|
91
|
+
"BccRecipients": [{"EmailAddress": {"Address": "bcc@microsoft.com"}}]
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 6. Multiple Attachments
|
|
95
|
+
Add more items to the Attachments array.
|
|
96
|
+
|
|
97
|
+
## Important Notes
|
|
98
|
+
- Token is at `~/.graph-token/tokens/outlook-mail.json`
|
|
99
|
+
- API endpoint: `https://outlook.office.com/api/v2.0/me/sendmail`
|
|
100
|
+
- Status 202 = Accepted (success)
|
|
101
|
+
- Max attachment size: ~35MB (base64 encoded)
|
|
102
|
+
- **Always confirm with user before sending** (send confirmation gate)
|
|
103
|
+
- For self-send: use the user's own email address
|
|
104
|
+
|
|
105
|
+
## Troubleshooting
|
|
106
|
+
| Problem | Fix |
|
|
107
|
+
|---------|-----|
|
|
108
|
+
| 401 Invalid audience | Make sure using `outlook.office.com` NOT `graph.microsoft.com` |
|
|
109
|
+
| 401 Token expired | Run refresh-token skill first |
|
|
110
|
+
| COM Send() stuck in Outbox | Don't use COM — use this REST API method |
|
|
111
|
+
| Large file fails | Split into chunks or compress first |
|
|
112
|
+
|
|
113
|
+
## Verification
|
|
114
|
+
Check response status code: 202 = success.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: internal-comms
|
|
3
|
+
description: "Write professional internal communications: status reports, 3P updates, and summaries."
|
|
4
|
+
whenToUse: "User asks to write a status report or weekly update"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Internal Communications
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
Write professional internal communications for Microsoft PM context: status reports, 3P updates, weekly summaries, team newsletters, meeting recaps, and email drafts. Adapted from Anthropic's internal-comms skill for CharZ's team.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
- User asks to write a status report or weekly update
|
|
14
|
+
- User asks to draft an email to leadership or team
|
|
15
|
+
- User asks for 3P updates (Progress, Plans, Problems)
|
|
16
|
+
- User asks for meeting recap or summary
|
|
17
|
+
- User asks to write any internal communication
|
|
18
|
+
- User says "帮我写个周报" or "写个update"
|
|
19
|
+
|
|
20
|
+
## Communication Types
|
|
21
|
+
|
|
22
|
+
### 1. 3P Update (Progress / Plans / Problems)
|
|
23
|
+
```
|
|
24
|
+
## 📊 [Team/Area] Weekly Update — [Date]
|
|
25
|
+
|
|
26
|
+
### ✅ Progress (What we shipped/achieved)
|
|
27
|
+
- [Metric improvement]: Describe quantified impact
|
|
28
|
+
- [Feature shipped]: What it does, who benefits
|
|
29
|
+
- [Milestone reached]: Context and significance
|
|
30
|
+
|
|
31
|
+
### 📋 Plans (What's coming next)
|
|
32
|
+
- [Next deliverable]: ETA, owner, dependencies
|
|
33
|
+
- [Investigation]: What we're exploring and why
|
|
34
|
+
- [Upcoming milestone]: Target date and criteria
|
|
35
|
+
|
|
36
|
+
### ⚠️ Problems (Blockers & risks)
|
|
37
|
+
- [Blocker]: Impact, mitigation, help needed
|
|
38
|
+
- [Risk]: Probability, impact, contingency plan
|
|
39
|
+
- [Dependency]: Who/what we're waiting on
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 2. Leadership Update
|
|
43
|
+
- **Keep it to 5-7 bullet points max**
|
|
44
|
+
- Lead with **impact and metrics**, not activities
|
|
45
|
+
- Use "So what?" test — every bullet should answer why leadership cares
|
|
46
|
+
- Include 1 clear ask if needed
|
|
47
|
+
- Tone: Confident, concise, data-backed
|
|
48
|
+
|
|
49
|
+
### 3. Team Newsletter / Announcement
|
|
50
|
+
- Lead with the most exciting news
|
|
51
|
+
- Include people shoutouts (builds culture)
|
|
52
|
+
- Keep sections scannable (headers, bullets, bold key info)
|
|
53
|
+
- End with clear action items or dates
|
|
54
|
+
|
|
55
|
+
### 4. Meeting Recap
|
|
56
|
+
```
|
|
57
|
+
## 📝 Meeting Recap: [Meeting Name] — [Date]
|
|
58
|
+
|
|
59
|
+
### Attendees
|
|
60
|
+
[List key attendees]
|
|
61
|
+
|
|
62
|
+
### Key Decisions
|
|
63
|
+
1. [Decision]: Rationale and owner
|
|
64
|
+
2. [Decision]: Impact and timeline
|
|
65
|
+
|
|
66
|
+
### Action Items
|
|
67
|
+
| Owner | Action | Due Date |
|
|
68
|
+
|-------|--------|----------|
|
|
69
|
+
| Name | Task | Date |
|
|
70
|
+
|
|
71
|
+
### Open Questions
|
|
72
|
+
- [Question]: Who needs to answer, by when
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 5. Incident Report
|
|
76
|
+
- Timeline of events (UTC timestamps)
|
|
77
|
+
- Root cause analysis
|
|
78
|
+
- Customer impact (quantified)
|
|
79
|
+
- Mitigation steps taken
|
|
80
|
+
- Follow-up actions with owners and dates
|
|
81
|
+
|
|
82
|
+
## Style Guidelines for CharZ's Team
|
|
83
|
+
- **Language**: Mix Chinese and English naturally (Chinese for narrative, English for technical terms)
|
|
84
|
+
- **Tone**: Professional but not stiff — CharZ's team has a casual, friendly culture
|
|
85
|
+
- **Data first**: Always quantify impact when possible
|
|
86
|
+
- **Attribution**: Credit specific people by name
|
|
87
|
+
- **Brevity**: If it can be said in 3 bullets, don't use 5
|
|
88
|
+
- **Emoji**: Use sparingly for section headers, not in every sentence
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: meeting-summarizer
|
|
3
|
+
description: "Summarize meeting content into structured notes with decisions and action items."
|
|
4
|
+
whenToUse: "User provides meeting transcript or notes to summarize"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Meeting Summarizer
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
Summarize meeting content into structured notes with decisions, action items, and follow-ups. Works with meeting transcripts, chat logs, email threads, or verbal descriptions.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
- User provides meeting transcript or notes to summarize
|
|
14
|
+
- User says "帮我整理会议纪要" or "summarize this meeting"
|
|
15
|
+
- User pastes a long chat/email thread and wants key points
|
|
16
|
+
- After reading Teams/Outlook content that contains meeting discussions
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
### 1. Input Sources
|
|
21
|
+
- Meeting transcript (text pasted by user)
|
|
22
|
+
- Teams chat history (read via `teams_read_messages`)
|
|
23
|
+
- Email thread (read via `outlook_read_content`)
|
|
24
|
+
- User's verbal description of what happened
|
|
25
|
+
|
|
26
|
+
### 2. Output Structure
|
|
27
|
+
```markdown
|
|
28
|
+
# Meeting Summary: [Meeting Name]
|
|
29
|
+
**Date:** [Date] | **Duration:** [if known]
|
|
30
|
+
**Attendees:** [List]
|
|
31
|
+
|
|
32
|
+
## Key Decisions
|
|
33
|
+
1. **[Decision]** — [Brief rationale]
|
|
34
|
+
2. **[Decision]** — [Brief rationale]
|
|
35
|
+
|
|
36
|
+
## Discussion Highlights
|
|
37
|
+
- [Topic 1]: [Key points, different viewpoints, conclusion]
|
|
38
|
+
- [Topic 2]: [Key points, different viewpoints, conclusion]
|
|
39
|
+
|
|
40
|
+
## Action Items
|
|
41
|
+
| # | Owner | Action | Due Date | Status |
|
|
42
|
+
|---|-------|--------|----------|--------|
|
|
43
|
+
| 1 | [Name] | [Task] | [Date] | Pending |
|
|
44
|
+
| 2 | [Name] | [Task] | [Date] | Pending |
|
|
45
|
+
|
|
46
|
+
## Open Questions
|
|
47
|
+
- [Question needing resolution] — Owner: [Name]
|
|
48
|
+
|
|
49
|
+
## Next Meeting
|
|
50
|
+
- [Date/time if scheduled]
|
|
51
|
+
- [Topics to cover]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 3. Processing Rules
|
|
55
|
+
- **Decisions**: Extract only clearly agreed-upon outcomes, not suggestions
|
|
56
|
+
- **Action items**: Must have an owner and ideally a due date
|
|
57
|
+
- **Be concise**: Meeting was 1 hour? Summary should be < 1 page
|
|
58
|
+
- **Separate facts from opinions**: Note where there was disagreement
|
|
59
|
+
- **Prioritize**: Lead with decisions and actions, not discussion play-by-play
|
|
60
|
+
- **Language**: Match the language of the original content. If mixed, use the dominant language
|
|
61
|
+
|
|
62
|
+
### 4. For Long Transcripts
|
|
63
|
+
- First pass: Identify speakers and topic changes
|
|
64
|
+
- Second pass: Extract decisions and action items
|
|
65
|
+
- Third pass: Summarize discussion points
|
|
66
|
+
- Final: Organize into template
|
|
67
|
+
|
|
68
|
+
### 5. Distribution
|
|
69
|
+
After user approves:
|
|
70
|
+
- Send via email (`outlook_compose_email` or REST API with attachment)
|
|
71
|
+
- Post to Teams chat/channel (`teams_send_message`)
|
|
72
|
+
- Save as PDF (use create-pdf-report skill)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: proofreading
|
|
3
|
+
description: "Review and improve text for grammar, spelling, clarity, tone, and style."
|
|
4
|
+
whenToUse: "User asks to review/proofread/polish text before sending"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Proofreading & Polish
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
Review and improve text for grammar, spelling, clarity, tone, and style. Works for emails, documents, chat messages, and presentations in both English and Chinese.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
- User asks to review/proofread/polish text before sending
|
|
14
|
+
- User says "帮我看看这个" or "check this before I send"
|
|
15
|
+
- User wants to improve the quality of a draft
|
|
16
|
+
- Before sending important emails or documents
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
### 1. Quick Scan (Automated Checks)
|
|
21
|
+
- Spelling errors
|
|
22
|
+
- Grammar mistakes (subject-verb agreement, tense, articles)
|
|
23
|
+
- Punctuation (missing periods, comma splices, semicolon misuse)
|
|
24
|
+
- Repeated words
|
|
25
|
+
- Inconsistent formatting (bullet styles, heading levels)
|
|
26
|
+
|
|
27
|
+
### 2. Clarity Pass
|
|
28
|
+
- Sentences > 30 words → suggest breaking up
|
|
29
|
+
- Passive voice → suggest active where appropriate
|
|
30
|
+
- Vague language ("some", "various", "things") → suggest specifics
|
|
31
|
+
- Jargon check → is the audience familiar with these terms?
|
|
32
|
+
- Remove filler: "basically", "actually", "in order to", "at this point in time"
|
|
33
|
+
|
|
34
|
+
### 3. Tone Check
|
|
35
|
+
| Audience | Tone Adjustments |
|
|
36
|
+
|----------|-----------------|
|
|
37
|
+
| Leadership/skip-level | More confident, less hedging, lead with impact |
|
|
38
|
+
| Peer PM | Conversational but professional |
|
|
39
|
+
| Engineering team | Technical, precise, action-oriented |
|
|
40
|
+
| External partner | Formal, diplomatic, clear |
|
|
41
|
+
| Team chat | Casual OK, but still clear |
|
|
42
|
+
|
|
43
|
+
### 4. Chinese-Specific Checks
|
|
44
|
+
- 的地得 usage (的=noun modifier, 地=adverb modifier, 得=complement)
|
|
45
|
+
- 了/着/过 tense markers
|
|
46
|
+
- Avoid 翻译腔 (translationese)
|
|
47
|
+
- Consistent use of 你/您 (formality)
|
|
48
|
+
- Punctuation: Chinese punctuation marks (,。!?) vs English
|
|
49
|
+
|
|
50
|
+
### 5. English-Specific Checks
|
|
51
|
+
- Article usage (a/an/the) — especially tricky for Chinese speakers
|
|
52
|
+
- Preposition choice (in/on/at, to/for/with)
|
|
53
|
+
- Countable vs uncountable nouns
|
|
54
|
+
- Verb tense consistency
|
|
55
|
+
- Oxford comma consistency
|
|
56
|
+
|
|
57
|
+
### 6. Output Format
|
|
58
|
+
```
|
|
59
|
+
## Proofread Result
|
|
60
|
+
|
|
61
|
+
### Changes Made
|
|
62
|
+
1. [Original] → [Corrected] — [Reason]
|
|
63
|
+
2. [Original] → [Corrected] — [Reason]
|
|
64
|
+
|
|
65
|
+
### Suggestions (Optional)
|
|
66
|
+
- Consider rephrasing: "[sentence]" → "[suggestion]" for [clarity/tone/conciseness]
|
|
67
|
+
|
|
68
|
+
### Polished Version
|
|
69
|
+
[Full corrected text]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 7. Rules
|
|
73
|
+
- **Don't change the author's voice** — improve, don't rewrite
|
|
74
|
+
- **Preserve technical terms** exactly as written
|
|
75
|
+
- **Mark changes clearly** so user can accept/reject each one
|
|
76
|
+
- **Be opinionated on errors, gentle on style suggestions**
|
|
77
|
+
- **For sensitive content**: Follow confidentiality rules (no salary/review info leaking through corrections)
|