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 +1 -1
- package/skills/escalation/SKILL.md +9 -2
- package/skills/general/SKILL.md +17 -11
- package/skills/im-adapter/SKILL.md +2 -3
- package/skills/kb-guide/SKILL.md +25 -15
- package/skills/message-push/SKILL.md +26 -11
- package/skills/multi-bot/SKILL.md +18 -2
- package/skills/task-manager/SKILL.md +15 -4
- package/templates/code-reviewer/skills/code-review/SKILL.md +17 -6
- package/templates/customer-support/skills/faq-support/SKILL.md +16 -4
- package/templates/data-analyst/skills/data-analysis/SKILL.md +84 -13
- package/templates/meeting-notes/skills/meeting/SKILL.md +23 -2
- package/templates/ops-assistant/skills/ops/SKILL.md +55 -3
- package/templates/research/skills/research/SKILL.md +21 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "golembot",
|
|
3
|
-
"version": "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:
|
|
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
|
+
```
|
package/skills/general/SKILL.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: general
|
|
3
|
-
description:
|
|
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
|
|
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
|
|
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`
|
|
66
|
-
- Install: `golembot skill add clawhub:<slug>`
|
|
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`
|
|
70
|
-
- Install: `golembot skill add skills.sh:<owner>/<repo>@<skill>`
|
|
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`
|
|
74
|
-
- Remove: `golembot skill remove <name>`
|
|
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:
|
|
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
|
package/skills/kb-guide/SKILL.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: kb-guide
|
|
3
|
-
description:
|
|
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?)`
|
|
17
|
-
- `search_notes(query)`
|
|
18
|
-
- `query_knowledge(query, filters?)`
|
|
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)`
|
|
22
|
-
- `read_page(path)`
|
|
23
|
-
- `list_documents(folder?, 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?)`
|
|
27
|
-
- `update_document(id, content)`
|
|
28
|
-
- `create_note(title, body)`
|
|
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
|
|
33
|
-
- **When the user asks "do we have docs on
|
|
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
|
|
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
|
|
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
|
|
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
|
|
19
|
+
## Sending Workflow
|
|
21
20
|
|
|
22
|
-
|
|
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 }`
|
|
45
|
-
- `404`
|
|
46
|
-
- `501`
|
|
47
|
-
- `503`
|
|
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/`
|
|
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
|
|
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:
|
|
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:
|
|
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 |
|
|
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:
|
|
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
|
-
|
|
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
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
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
|
|
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:
|
|
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
|
-
|
|
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
|
|
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 3
|
|
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:
|
|
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
|
-
|
|
8
|
+
Process data files in the `data/` directory, perform analysis, and output reports to `reports/`.
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## Step-by-Step Workflow
|
|
11
11
|
|
|
12
|
-
|
|
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
|
-
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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("\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
|
-
|
|
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.
|
|
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
|
-
|
|
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,500
|
|
21
|
-
- Social media posts: 100
|
|
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
|
-
|
|
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
|