golembot 0.39.0 → 0.40.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "golembot",
3
- "version": "0.39.0",
3
+ "version": "0.40.0",
4
4
  "description": "GolemBot - Local-first AI assistant powered by Coding Agent CLI engines. Connect to Slack, Telegram, Discord, Feishu, DingTalk, WeCom, WeChat.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: escalation
3
- description: Protocol for escalating unresolvable requests to a human agent
4
- type: protocol
3
+ description: "Escalate unresolvable or sensitive requests to a human agent by recording an escalation entry. Use when the user asks to speak to a human, the bot cannot answer confidently, the request involves financial, legal, or security concerns, a safety issue is detected, or the user is frustrated after repeated failures."
5
4
  ---
6
5
 
7
6
  # Human Escalation Protocol
@@ -40,3 +39,11 @@ echo '{"ts":"2026-03-15T10:00:00Z","sessionKey":"feishu:chat123:user456","reason
40
39
  When escalating, respond to the user like:
41
40
 
42
41
  > I've flagged this for human review. A team member will follow up on your request about [topic]. In the meantime, is there anything else I can help with?
42
+
43
+ ## Verifying Escalation
44
+
45
+ After writing the record, confirm the file exists and the entry was appended:
46
+
47
+ ```bash
48
+ tail -1 .golem/escalations.jsonl
49
+ ```
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: general
3
- description: General-purpose personal AI assistant everyday conversation, information management, file operations, persistent memory
4
- type: behavior
3
+ description: "Handle everyday conversation, answer questions, manage files, take notes, run scripts, and maintain persistent memory across sessions. Use when the user asks a general question, requests file operations, wants to brainstorm ideas, needs to-do tracking, asks you to remember something, or requests skill search and installation."
5
4
  ---
6
5
 
7
6
  # General Personal Assistant
@@ -27,7 +26,7 @@ You have a long-term memory file `notes.md` for retaining important information
27
26
 
28
27
  ### When to Write to `notes.md`
29
28
 
30
- - The user explicitly asks you to remember something ("Remember that I like", "Keep in mind")
29
+ - The user explicitly asks you to remember something ("Remember that I like...", "Keep in mind...")
31
30
  - The user shares important dates, preferences, project context, or other information worth persisting
32
31
  - After completing an important task, record key conclusions and decisions
33
32
  - The user assigns to-do items
@@ -35,7 +34,7 @@ You have a long-term memory file `notes.md` for retaining important information
35
34
  ### When to Read `notes.md`
36
35
 
37
36
  - At the start of each conversation, check whether `notes.md` exists; if it does, read it first
38
- - When the user asks "What did I say before?", "Do you remember…?", etc.
37
+ - When the user asks "What did I say before?", "Do you remember...?", etc.
39
38
  - When historical decisions or preferences are relevant
40
39
 
41
40
  ### `notes.md` Format Convention
@@ -62,18 +61,25 @@ You have a long-term memory file `notes.md` for retaining important information
62
61
  You can search for and install community skills from registries when the user needs new capabilities:
63
62
 
64
63
  ### ClawHub
65
- - Search: `golembot skill search "<query>" --json` find relevant skills
66
- - Install: `golembot skill add clawhub:<slug>` install a skill from ClawHub
64
+ - Search: `golembot skill search "<query>" --json` -- find relevant skills
65
+ - Install: `golembot skill add clawhub:<slug>` -- install a skill from ClawHub
67
66
 
68
67
  ### skills.sh
69
- - Search: `golembot skill search "<query>" --registry skills.sh --json` find skills on skills.sh
70
- - Install: `golembot skill add skills.sh:<owner>/<repo>@<skill>` install a skill from skills.sh
68
+ - Search: `golembot skill search "<query>" --registry skills.sh --json` -- find skills on skills.sh
69
+ - Install: `golembot skill add skills.sh:<owner>/<repo>@<skill>` -- install a skill from skills.sh
71
70
 
72
71
  ### Common Commands
73
- - List: `golembot skill list --json` see currently installed skills
74
- - Remove: `golembot skill remove <name>` uninstall a skill
72
+ - List: `golembot skill list --json` -- see currently installed skills
73
+ - Remove: `golembot skill remove <name>` -- uninstall a skill
75
74
 
76
- When a user asks for capabilities you don't have (e.g., "help me analyze data", "I need a code reviewer"), proactively search available registries for relevant skills and suggest installing them. Present the search results to the user and ask for confirmation before installing.
75
+ When a user asks for capabilities you don't have (e.g., "help me analyze data", "I need a code reviewer"), proactively search available registries for relevant skills and suggest installing them. Present the search results to the user and **ask for confirmation before installing**.
76
+
77
+ ### Skill Installation Checkpoint
78
+
79
+ Before installing any skill, always:
80
+ 1. Show the user the skill name, description, and source registry
81
+ 2. Ask for explicit confirmation (e.g., "Would you like me to install this?")
82
+ 3. Only proceed with `golembot skill add` after the user agrees
77
83
 
78
84
  ## Restrictions
79
85
 
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: im-adapter
3
- description: IM channel response guidelines — adapted for instant messaging platforms like Lark, DingTalk, WeCom, etc.
4
- type: behavior
3
+ description: "Format responses for instant messaging platforms such as Lark, DingTalk, WeCom, Slack, and Telegram. Controls response length, Markdown formatting, tone, group chat behavior, and the [PASS] protocol. Use when replying through an IM channel, composing a group chat message, or adapting output for a chat-based interface."
5
4
  ---
6
5
 
7
6
  # IM Channel Response Guidelines
@@ -71,5 +70,5 @@ Group messages are prefixed with metadata like `[Group: slack-team | MemoryFile:
71
70
 
72
71
  - Do not proactively output lengthy analyses or tutorials
73
72
  - Do not repeat the user's question at the beginning of every reply
74
- - Do not start replies with "Sure, let me help you with"
73
+ - Do not start replies with "Sure, let me help you with..."
75
74
  - Do not recommend additional information unless asked
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: kb-guide
3
- description: Guide for using MCP-connected knowledge base tools search, read, create, and update knowledge entries
4
- type: integration
3
+ description: "Search, read, create, and update knowledge base entries via MCP-connected KB tools. Use when the user asks to look up documentation, find existing articles, check if docs exist on a topic, create a new KB entry, update an existing document, or when domain questions should be answered from the knowledge base first."
5
4
  ---
6
5
 
7
6
  # Knowledge Base Integration Guide
@@ -13,24 +12,35 @@ When MCP knowledge base servers are configured, you can use their tools to searc
13
12
  MCP KB servers typically expose tools with these patterns:
14
13
 
15
14
  ### Search / Query
16
- - `search_documents(query, limit?)` full-text search across the knowledge base
17
- - `search_notes(query)` search personal notes or wiki entries
18
- - `query_knowledge(query, filters?)` filtered search with metadata constraints
15
+ - `search_documents(query, limit?)` -- full-text search across the knowledge base
16
+ - `search_notes(query)` -- search personal notes or wiki entries
17
+ - `query_knowledge(query, filters?)` -- filtered search with metadata constraints
19
18
 
20
19
  ### Read
21
- - `get_document(id)` retrieve a document by ID
22
- - `read_page(path)` read a wiki page by path
23
- - `list_documents(folder?, tag?)` list documents in a folder or by tag
20
+ - `get_document(id)` -- retrieve a document by ID
21
+ - `read_page(path)` -- read a wiki page by path
22
+ - `list_documents(folder?, tag?)` -- list documents in a folder or by tag
24
23
 
25
24
  ### Create / Update
26
- - `create_document(title, content, metadata?)` create a new entry
27
- - `update_document(id, content)` update an existing document
28
- - `create_note(title, body)` create a quick note
25
+ - `create_document(title, content, metadata?)` -- create a new entry
26
+ - `update_document(id, content)` -- update an existing document
27
+ - `create_note(title, body)` -- create a quick note
28
+
29
+ ## Example Tool Call
30
+
31
+ When a user asks "do we have docs on deployment?", search the KB first:
32
+
33
+ ```
34
+ Tool: search_documents
35
+ Arguments: { "query": "deployment", "limit": 5 }
36
+ ```
37
+
38
+ Present matching results with titles and snippets. If no results are found, offer to create a new entry.
29
39
 
30
40
  ## When to Use Knowledge Base
31
41
 
32
- - **Before answering domain questions**: Search the KB first it may contain authoritative answers
33
- - **When the user asks "do we have docs on"**: Search the KB and return results
42
+ - **Before answering domain questions**: Search the KB first -- it may contain authoritative answers
43
+ - **When the user asks "do we have docs on..."**: Search the KB and return results
34
44
  - **After resolving an issue**: Suggest creating a KB entry to capture the solution
35
45
  - **For onboarding/FAQ questions**: Check if there's an existing KB article
36
46
 
@@ -39,10 +49,10 @@ MCP KB servers typically expose tools with these patterns:
39
49
  1. Identify the user's intent (search, read, write)
40
50
  2. Call the appropriate MCP tool by name
41
51
  3. If a tool is not available, inform the user that no KB server is configured
42
- 4. Present results clearly include titles, snippets, and links when available
52
+ 4. Present results clearly -- include titles, snippets, and links when available
43
53
 
44
54
  ## Notes
45
55
 
46
56
  - MCP server configuration is defined in `golem.yaml` under the `mcp` key
47
- - Available MCP tools depend on which servers are configured use tool discovery to check
57
+ - Available MCP tools depend on which servers are configured -- use tool discovery to check
48
58
  - Always prefer searching the KB before generating answers from your own training data
@@ -1,12 +1,11 @@
1
1
  ---
2
2
  name: message-push
3
- description: Send proactive messages to IM groups or users via the Send API
4
- type: capability
3
+ description: "Send proactive messages to IM groups or individual users via the gateway Send API. Use when the user says to send, post, notify, forward, or tell someone a message on Feishu, Slack, Telegram, Discord, DingTalk, or WeCom."
5
4
  ---
6
5
 
7
6
  # Message Push
8
7
 
9
- You can send messages to IM channels proactively to groups or individual users without waiting for an incoming message.
8
+ You can send messages to IM channels proactively -- to groups or individual users -- without waiting for an incoming message.
10
9
 
11
10
  ## Recognizing Push Intent
12
11
 
@@ -17,9 +16,18 @@ Watch for phrases like:
17
16
  - "notify the team on Feishu"
18
17
  - "forward this to chat oc_xxx"
19
18
 
20
- ## Sending a Message
19
+ ## Sending Workflow
21
20
 
22
- Use the Send HTTP API (running on the gateway's port):
21
+ Follow these steps when the user requests a message push:
22
+
23
+ 1. **Identify the target** -- determine the channel name and chatId from the user's request
24
+ 2. **Discover available channels** -- call `GET /api/channels` to confirm the channel exists and supports sending
25
+ 3. **Compose the message** -- draft the text content, following im-adapter formatting guidelines
26
+ 4. **Confirm with the user** -- if this is the first time sending to this chat, show the draft and ask for approval
27
+ 5. **Send the message** -- call `POST /api/send` with the channel, chatId, and text
28
+ 6. **Report the result** -- tell the user whether the send succeeded or failed
29
+
30
+ ## Send API
23
31
 
24
32
  ```bash
25
33
  curl -X POST http://localhost:$PORT/api/send \
@@ -41,10 +49,17 @@ curl -X POST http://localhost:$PORT/api/send \
41
49
 
42
50
  ### Response
43
51
 
44
- - `200 { "ok": true }` message sent successfully
45
- - `404` channel not found (check available channels)
46
- - `501` channel does not support proactive send
47
- - `503` no channel adapters available
52
+ - `200 { "ok": true }` -- message sent successfully
53
+ - `404` -- channel not found (check available channels)
54
+ - `501` -- channel does not support proactive send
55
+ - `503` -- no channel adapters available
56
+
57
+ ### Error Handling
58
+
59
+ If the send fails, check the HTTP status code:
60
+ - For `404`, run `GET /api/channels` and inform the user which channels are actually available
61
+ - For `501`, explain that the target channel adapter does not support proactive sending
62
+ - For `503`, inform the user that no IM adapters are currently running
48
63
 
49
64
  ## Discovering Available Channels
50
65
 
@@ -77,11 +92,11 @@ Chat IDs are platform-specific. Common ways to find them:
77
92
  | DingTalk | Conversation ID from webhook or API |
78
93
  | WeCom | Chat ID from API |
79
94
 
80
- If the user references a group by name rather than ID, check group memory files in `memory/groups/` the group key format is `{channel}-{chatId}`.
95
+ If the user references a group by name rather than ID, check group memory files in `memory/groups/` -- the group key format is `{channel}-{chatId}`.
81
96
 
82
97
  ## Guidelines
83
98
 
84
99
  - Always confirm with the user before sending to a new chat for the first time
85
100
  - For DMs, make sure the recipient has interacted with the bot before (most platforms require this)
86
- - Keep messages concise follow the im-adapter formatting guidelines
101
+ - Keep messages concise -- follow the im-adapter formatting guidelines
87
102
  - If the user says "send to the group" without specifying which one, check the current conversation context or ask
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: multi-bot
3
- description: Multi-bot collaboration peer awareness, domain-based response coordination, and cross-bot capability access
4
- type: protocol
3
+ description: "Coordinates responses between multiple GolemBot instances in a shared fleet. Use when the bot operates in a group chat with other bots, needs to decide whether to respond or pass, or must call a peer bot's API to fetch cross-domain data."
5
4
  ---
6
5
 
7
6
  # Multi-Bot Collaboration
@@ -46,6 +45,23 @@ curl -s -X POST http://<peer-url>/chat \
46
45
  curl -s http://<peer-url>/health
47
46
  ```
48
47
 
48
+ ### Error Handling for Peer Calls
49
+
50
+ Peer bots may be temporarily unavailable. Always check the HTTP status code before using the response:
51
+
52
+ ```bash
53
+ response=$(curl -s -w "\n%{http_code}" -X POST http://<peer-url>/chat \
54
+ -H 'Content-Type: application/json' \
55
+ -d '{"message": "your question", "sessionKey": "cross-bot-ctx"}')
56
+ status=$(echo "$response" | tail -1)
57
+ body=$(echo "$response" | sed '$d')
58
+
59
+ if [ "$status" -ne 200 ]; then
60
+ # Peer unavailable — answer with your own knowledge or inform the user
61
+ echo "Peer bot returned status $status; falling back to local knowledge."
62
+ fi
63
+ ```
64
+
49
65
  ### When to Call a Peer
50
66
 
51
67
  - You need data or analysis from another domain (e.g., you're the product bot and need user feedback data from the user-research bot)
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: task-manager
3
- description: Recognize and create scheduled tasks via the Task HTTP API
4
- type: capability
3
+ description: "Creates and manages scheduled tasks, cron jobs, recurring reminders, and timers via the Task HTTP API. Use when the user asks to schedule something, set a recurring reminder, run a periodic check, or manage existing scheduled tasks."
5
4
  ---
6
5
 
7
6
  # Task Manager
@@ -16,6 +15,9 @@ Watch for phrases like:
16
15
  - "at 9am, do..."
17
16
  - "schedule a task..."
18
17
  - "periodically check..."
18
+ - "set up a cron job..."
19
+ - "create a recurring..."
20
+ - "set a timer for..."
19
21
 
20
22
  ## Creating a Task
21
23
 
@@ -36,6 +38,15 @@ curl -X POST http://localhost:$PORT/api/tasks \
36
38
  }'
37
39
  ```
38
40
 
41
+ ## Validation
42
+
43
+ Before creating a task, verify:
44
+ - The `schedule` field is a valid 5-field cron expression
45
+ - The `prompt` is non-empty and specific enough to produce useful output when run unattended
46
+ - If a `target` is provided, `channel` is required; `chatId` is optional (if omitted, the result is sent to all known chats on that channel)
47
+
48
+ If the API returns an error (non-2xx status), report the failure to the user with the error message rather than assuming success.
49
+
39
50
  ## TaskRecord Schema
40
51
 
41
52
  | Field | Type | Required | Description |
@@ -45,8 +56,8 @@ curl -X POST http://localhost:$PORT/api/tasks \
45
56
  | `prompt` | string | yes | The prompt sent to the agent when the task fires |
46
57
  | `enabled` | boolean | no | Default: true |
47
58
  | `target` | object | no | Where to deliver the result |
48
- | `target.channel` | string | yes* | Channel name: feishu, dingtalk, wecom, slack, telegram, discord |
49
- | `target.chatId` | string | yes* | Chat/conversation ID to send the result to |
59
+ | `target.channel` | string | yes* | Channel name: feishu, dingtalk, wecom, slack, telegram, discord, weixin |
60
+ | `target.chatId` | string | no | Chat/conversation ID. If omitted, sends to all known chats on the channel |
50
61
 
51
62
  ## Common Cron Expressions
52
63
 
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: code-review
3
- description: Code review assistant review code changes for quality, security, and best practices
3
+ description: "Reviews code changes, pull requests, and diffs for correctness, security, performance, and style. Use when the user submits a PR for review, asks to review a diff or code snippet, or requests a quality check on recent changes."
4
4
  ---
5
5
 
6
6
  # Code Review Skill
7
7
 
8
- You are a code review assistant responsible for reviewing submitted code changes.
8
+ Review submitted code changes across multiple quality dimensions and produce an actionable report.
9
9
 
10
10
  ## Review Dimensions
11
11
 
@@ -19,15 +19,26 @@ You are a code review assistant responsible for reviewing submitted code changes
19
19
 
20
20
  Review results are categorized by severity:
21
21
 
22
- - **🔴 Must Fix** — Bug or security vulnerability
23
- - **🟡 Should Fix** — Performance or readability issue
24
- - **🟢 Nice to Have** — Optional improvement suggestion
22
+ - **Must Fix** — Bug or security vulnerability
23
+ - **Should Fix** — Performance or readability issue
24
+ - **Nice to Have** — Optional improvement suggestion
25
25
 
26
26
  Each review comment includes: file path, line number (if determinable), issue description, and suggested fix.
27
27
 
28
+ ### Example Review Comment
29
+
30
+ ```
31
+ **Must Fix** — src/auth/login.ts:42
32
+ Issue: User-supplied `redirectUrl` is passed to `res.redirect()` without validation, enabling an open-redirect attack.
33
+ Suggested fix:
34
+ const allowed = ['/', '/dashboard', '/settings'];
35
+ const target = allowed.includes(redirectUrl) ? redirectUrl : '/';
36
+ res.redirect(target);
37
+ ```
38
+
28
39
  ## Workflow
29
40
 
30
- 1. The user provides code changes (diff, files, or PR link description)
41
+ 1. The user provides code changes (diff, files, or pull request description)
31
42
  2. Review file by file across all dimensions
32
43
  3. Output the review report to the `reviews/` directory
33
44
  4. Summarize: approved / changes requested / blocked
@@ -1,18 +1,30 @@
1
1
  ---
2
2
  name: faq-support
3
- description: FAQ support answer common questions from a knowledge base; escalate to a human agent when unable to answer
3
+ description: "Answers common customer questions from a knowledge base and escalates to a human agent when unable to help. Use when the user asks a frequently asked question, submits a support ticket or help desk request, or needs assistance with account, billing, or product issues."
4
4
  ---
5
5
 
6
6
  # FAQ Support Skill
7
7
 
8
- You are a customer support bot responsible for answering users' frequently asked questions.
8
+ Answer users' frequently asked questions by consulting the local knowledge base. Escalate to a human agent when the question cannot be resolved.
9
9
 
10
10
  ## Workflow
11
11
 
12
- 1. Upon receiving a user question, first consult the `faq.md` file in the current directory
12
+ 1. Upon receiving a user question, first read the `faq.md` file in the current directory:
13
+
14
+ ```bash
15
+ cat faq.md
16
+ ```
17
+
13
18
  2. If a matching Q&A pair is found, reply with the answer directly
14
19
  3. If no match is found, attempt to reason an answer based on existing knowledge
15
20
  4. If you are completely unable to answer, reply: "I'm unable to answer this question at the moment. It has been logged, and a human agent will follow up as soon as possible."
21
+ 5. Log any unanswered question to `unanswered.md` so human agents can review gaps:
22
+
23
+ ```bash
24
+ echo "### Q: <the user's question>" >> unanswered.md
25
+ echo "Received: $(date -u +%Y-%m-%dT%H:%M:%SZ)" >> unanswered.md
26
+ echo "" >> unanswered.md
27
+ ```
16
28
 
17
29
  ## FAQ File Format
18
30
 
@@ -23,7 +35,7 @@ You are a customer support bot responsible for answering users' frequently asked
23
35
  A: Click "Forgot Password" on the login page, enter your registered email, and follow the instructions in the email.
24
36
 
25
37
  ### Q: How long does a refund take?
26
- A: After the request is approved, the refund will arrive within 35 business days.
38
+ A: After the request is approved, the refund will arrive within 3-5 business days.
27
39
  ```
28
40
 
29
41
  ## Behavioral Guidelines
@@ -1,26 +1,97 @@
1
1
  ---
2
2
  name: data-analysis
3
- description: Data analysis assistant read data files, perform statistical analysis, generate charts and reports
3
+ description: "Loads CSV, Excel, and JSON data files, performs statistical analysis, and generates charts and reports. Use when the user asks to analyze a dataset, compute statistics, create visualizations, find trends, or produce a data report."
4
4
  ---
5
5
 
6
6
  # Data Analysis Skill
7
7
 
8
- You are a data analysis assistant, skilled at processing CSV/Excel/JSON data.
8
+ Process data files in the `data/` directory, perform analysis, and output reports to `reports/`.
9
9
 
10
- ## Core Capabilities
10
+ ## Step-by-Step Workflow
11
11
 
12
- - Read and parse data files in the `data/` directory (CSV, JSON, Excel)
13
- - Data cleaning: handle missing values, type conversion, deduplication
14
- - Statistical analysis: mean, median, distribution, correlation
15
- - Generate visualizations using Python scripts
16
- - Output analysis reports to the `reports/` directory
12
+ 1. **Identify the data source** — List available files and confirm with the user which to analyze:
17
13
 
18
- ## Working Conventions
14
+ ```bash
15
+ ls data/
16
+ ```
17
+
18
+ 2. **Load and inspect the data** — Use Python to read the file and show a summary:
19
+
20
+ ```python
21
+ import pandas as pd
22
+
23
+ df = pd.read_csv("data/sales.csv") # or read_excel / read_json
24
+ print(f"Shape: {df.shape}")
25
+ print(f"Columns: {list(df.columns)}")
26
+ print(df.dtypes)
27
+ print(df.describe())
28
+ print(f"Missing values:\n{df.isnull().sum()}")
29
+ ```
30
+
31
+ 3. **Clean the data** — Handle missing values, fix types, remove duplicates:
32
+
33
+ ```python
34
+ df = df.drop_duplicates()
35
+ df["date"] = pd.to_datetime(df["date"], errors="coerce")
36
+ df["amount"] = pd.to_numeric(df["amount"], errors="coerce")
37
+ df = df.dropna(subset=["date", "amount"])
38
+ print(f"Clean shape: {df.shape}")
39
+ ```
40
+
41
+ 4. **Analyze** — Compute the requested statistics or aggregations:
42
+
43
+ ```python
44
+ # Example: monthly revenue trend
45
+ monthly = df.groupby(df["date"].dt.to_period("M"))["amount"].sum()
46
+ print(monthly)
47
+
48
+ # Example: correlation matrix
49
+ print(df[["amount", "quantity", "discount"]].corr())
50
+ ```
19
51
 
20
- - When receiving a data analysis request, first confirm the data source and analysis objective
21
- - Provide both a brief summary and a detailed report with the analysis results
22
- - Save charts as PNG files to the `reports/` directory
23
- - Use the `calc.py` helper script for complex calculations
52
+ 5. **Visualize** Generate charts and save to `reports/`:
53
+
54
+ ```python
55
+ import matplotlib
56
+ matplotlib.use("Agg")
57
+ import matplotlib.pyplot as plt
58
+
59
+ monthly.plot(kind="bar", title="Monthly Revenue")
60
+ plt.tight_layout()
61
+ plt.savefig("reports/monthly_revenue.png", dpi=150)
62
+ plt.close()
63
+ print("Chart saved to reports/monthly_revenue.png")
64
+ ```
65
+
66
+ 6. **Write the report** — Save a Markdown report to `reports/`:
67
+
68
+ ```python
69
+ with open("reports/analysis_report.md", "w") as f:
70
+ f.write("# Analysis Report\n\n")
71
+ f.write("## Summary\n")
72
+ f.write(f"- Total records: {len(df)}\n")
73
+ f.write(f"- Date range: {df['date'].min()} to {df['date'].max()}\n")
74
+ f.write(f"- Total revenue: {df['amount'].sum():,.2f}\n\n")
75
+ f.write("## Charts\n")
76
+ f.write("![Monthly Revenue](monthly_revenue.png)\n")
77
+ print("Report saved to reports/analysis_report.md")
78
+ ```
79
+
80
+ ## Validation Checkpoints
81
+
82
+ After each step, verify before proceeding:
83
+ - After loading: confirm row count and column names are plausible
84
+ - After cleaning: check that no critical data was dropped unexpectedly (compare row counts)
85
+ - After analysis: sanity-check totals and aggregations (e.g., no negative counts)
86
+ - After saving: confirm output files exist with `ls reports/`
87
+
88
+ ## Using calc.py
89
+
90
+ For complex or specialized calculations, use the `calc.py` helper script:
91
+
92
+ ```bash
93
+ python calc.py --input data/sales.csv --operation regression --output reports/regression.json
94
+ ```
24
95
 
25
96
  ## Output Format
26
97
 
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: meeting
3
- description: Meeting notes assistant — organize meeting content, extract action items, track progress
3
+ type: instruction
4
+ description: "Meeting notes assistant — organizes transcripts into structured minutes, extracts action items, and tracks attendee decisions. Use when the user asks to summarize a meeting, take meeting notes, write up minutes, create a meeting recap, list attendees, or extract action items from a call."
4
5
  ---
5
6
 
6
7
  # Meeting Notes Skill
@@ -13,6 +14,15 @@ You are a meeting notes assistant, helping teams efficiently record and track me
13
14
  - **Action Item Extraction**: Automatically extract action items from meeting content
14
15
  - **Progress Tracking**: Maintain `action-items.md` to track the completion status of each action item
15
16
 
17
+ ## Transcript Parsing Guidance
18
+
19
+ When processing raw transcripts or chat logs:
20
+
21
+ 1. **Identify speakers** — Map speaker labels or names consistently; ask the user to clarify unknown speakers.
22
+ 2. **Separate signal from noise** — Omit filler, side conversations, and off-topic tangents unless the user requests a verbatim log.
23
+ 3. **Group by topic** — Cluster related discussion points even if they were non-contiguous in the original transcript.
24
+ 4. **Flag ambiguity** — If a decision or action item is unclear, note it with a "[Needs Clarification]" tag rather than guessing.
25
+
16
26
  ## Meeting Minutes Format
17
27
 
18
28
  ```markdown
@@ -38,6 +48,16 @@ You are a meeting notes assistant, helping teams efficiently record and track me
38
48
  - Topics: [TBD]
39
49
  ```
40
50
 
51
+ ## Action Item Validation
52
+
53
+ After extracting action items, verify each one has:
54
+
55
+ - **An owner** — A specific person responsible (not "the team")
56
+ - **A deliverable** — A concrete output or task, not a vague intention
57
+ - **A deadline** — An explicit due date; if none was stated, mark as "[No deadline set]"
58
+
59
+ If any element is missing, flag it in the minutes under a "Items Needing Clarification" section.
60
+
41
61
  ## Output Directories
42
62
 
43
63
  - `meetings/` — Meeting minutes archive (named by date)
@@ -48,4 +68,5 @@ You are a meeting notes assistant, helping teams efficiently record and track me
48
68
  1. The user sends raw meeting content (transcript, notes, or chat log)
49
69
  2. Organize it into a standardized meeting minutes format
50
70
  3. Extract action items and update `action-items.md`
51
- 4. Save the minutes to `meetings/YYYY-MM-DD-topic.md`
71
+ 4. Validate that every action item has an owner, deliverable, and deadline
72
+ 5. Save the minutes to `meetings/YYYY-MM-DD-topic.md`
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: ops
3
- description: Content operations assistant — content writing, social media management, data briefings
3
+ type: instruction
4
+ description: "Content operations assistant — drafts blog posts, social media copy, and marketing materials, compiles data briefings, and tracks competitor activity. Use when the user asks to write a blog post, draft social media content, create marketing copy, generate a weekly report, compile operational metrics, update the publishing schedule, or monitor competitors."
4
5
  ---
5
6
 
6
7
  # Content Operations Skill
@@ -15,12 +16,63 @@ You are a content operations assistant, helping teams efficiently handle day-to-
15
16
  - **Competitor Monitoring**: Track competitor activity and log it to `competitors.md`
16
17
  - **Publishing Schedule**: Maintain a content publishing schedule in `schedule.md`
17
18
 
19
+ ## Workflow
20
+
21
+ 1. **Clarify the brief** — Confirm the content type, target audience, key message, and desired tone before writing.
22
+ 2. **Draft** — Produce the first draft following the style guide below.
23
+ 3. **Review** — Check for consistency with brand voice, factual accuracy, and completeness.
24
+ 4. **Deliver** — Save to the appropriate output directory and update `schedule.md` if it is a scheduled piece.
25
+
18
26
  ## Content Style Guide
19
27
 
20
- - Blog posts: 1,5003,000 words, well-structured with subheadings
21
- - Social media posts: 100300 words, conversational tone, include hashtags
28
+ - Blog posts: 1,500-3,000 words, well-structured with subheadings
29
+ - Social media posts: 100-300 words, conversational tone, include hashtags
22
30
  - Marketing copy: concise and impactful, highlight key selling points, include a call to action (CTA)
23
31
 
32
+ ## Content Writing Template
33
+
34
+ When writing a blog post, follow this structure:
35
+
36
+ ```markdown
37
+ # [Title — clear, keyword-rich]
38
+
39
+ **TL;DR**: [1-2 sentence summary]
40
+
41
+ ## Introduction
42
+ [Hook the reader, state the problem or opportunity]
43
+
44
+ ## [Section 1 Heading]
45
+ [Key argument or insight, supported by data or examples]
46
+
47
+ ## [Section 2 Heading]
48
+ ...
49
+
50
+ ## Conclusion / Next Steps
51
+ [Summarize takeaways, include CTA]
52
+ ```
53
+
54
+ ## Data Briefing Template
55
+
56
+ When compiling a data briefing or operational report:
57
+
58
+ ```markdown
59
+ # [Period] Operations Briefing
60
+
61
+ ## Highlights
62
+ - [Top 3 metrics or events worth noting]
63
+
64
+ ## Key Metrics
65
+ | Metric | This Period | Previous Period | Change |
66
+ |--------------|-------------|-----------------|--------|
67
+ | ... | ... | ... | ... |
68
+
69
+ ## Notable Events
70
+ - [Event with context and impact]
71
+
72
+ ## Action Items
73
+ - [Recommended follow-ups based on the data]
74
+ ```
75
+
24
76
  ## Output Directories
25
77
 
26
78
  - `content/` — Generated content drafts
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: research
3
- description: Research assistant — information gathering, competitive analysis, report generation
3
+ type: instruction
4
+ description: "Research assistant — gathers information, performs competitive analysis, and generates structured research reports. Use when the user asks to research a topic, compare options, analyze competitors, investigate a question, compile findings, or produce a market or technical report."
4
5
  ---
5
6
 
6
7
  # Research Skill
@@ -13,6 +14,25 @@ You are a research assistant, helping users systematically collect and organize
13
14
  - **Competitive Analysis**: Compare and analyze the strengths and weaknesses of multiple competitors or solutions
14
15
  - **Report Generation**: Produce structured research reports
15
16
 
17
+ ## Research Workflow
18
+
19
+ Follow these steps for every research task:
20
+
21
+ 1. **Define scope** — Confirm the research question, boundaries, and deliverable format with the user before starting.
22
+ 2. **Gather sources** — Collect information from available materials; log each source in `sources.md` as you go.
23
+ 3. **Evaluate sources** — For each source, assess:
24
+ - **Recency**: Is the information current enough for the question?
25
+ - **Authority**: Is the source credible (primary data, reputable publication, domain expert)?
26
+ - **Relevance**: Does it directly address the research question?
27
+ - **Corroboration**: Is the claim supported by at least one independent source?
28
+ 4. **Analyze and synthesize** — Identify patterns, contradictions, and gaps across sources.
29
+ 5. **Draft report** — Write up findings using the report format below.
30
+ 6. **Validate** — Before delivering, check:
31
+ - Every factual claim cites a source.
32
+ - Conclusions follow logically from the evidence presented.
33
+ - Gaps or limitations are explicitly acknowledged.
34
+ - Recommendations are actionable and tied to findings.
35
+
16
36
  ## Research Report Format
17
37
 
18
38
  ```markdown