reeboot 1.0.0 → 1.3.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/README.md +218 -7
- package/extensions/scheduler-tool.ts +360 -8
- package/extensions/skill-manager.ts +421 -0
- package/extensions/web-search.ts +466 -0
- package/package.json +5 -3
- package/skills/docker/SKILL.md +131 -0
- package/skills/files/SKILL.md +94 -0
- package/skills/gcal/SKILL.md +69 -0
- package/skills/gdrive/SKILL.md +65 -0
- package/skills/github/SKILL.md +80 -0
- package/skills/gmail/SKILL.md +68 -0
- package/skills/hubspot/SKILL.md +77 -0
- package/skills/linear/SKILL.md +78 -0
- package/skills/notion/SKILL.md +85 -0
- package/skills/postgres/SKILL.md +75 -0
- package/skills/reeboot-tasks/SKILL.md +98 -0
- package/skills/send-message/SKILL.md +52 -14
- package/skills/slack/SKILL.md +74 -0
- package/skills/sqlite/SKILL.md +85 -0
- package/skills/web-research/SKILL.md +47 -0
- package/templates/models-ollama.json +16 -0
- package/skills/web-search/SKILL.md +0 -32
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reeboot-tasks
|
|
3
|
+
description: Manage the reeboot agent's own scheduled tasks — create, list, pause, resume, and cancel scheduled jobs. Use when setting up recurring tasks, one-time reminders, or managing the agent's task schedule.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Reeboot Tasks
|
|
7
|
+
|
|
8
|
+
Meta-skill for the agent to manage its own scheduler. Uses the built-in scheduler tools registered by the scheduler-tool extension.
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
No external dependencies. The scheduler is built into reeboot.
|
|
13
|
+
|
|
14
|
+
The following tools are available when the scheduler-tool extension is enabled:
|
|
15
|
+
- `schedule_task` — create a new scheduled task
|
|
16
|
+
- `list_tasks` — list all scheduled tasks
|
|
17
|
+
- `cancel_task` — cancel a scheduled task by ID
|
|
18
|
+
- `pause_task` — pause a scheduled task (stops it from running without deleting)
|
|
19
|
+
- `resume_task` — resume a paused task
|
|
20
|
+
|
|
21
|
+
Verify tools are available by asking: "What tools do you have access to?" — the scheduler tools should appear in the list.
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
### Schedule formats
|
|
26
|
+
|
|
27
|
+
**Cron expressions** (standard 5-field cron):
|
|
28
|
+
```
|
|
29
|
+
0 9 * * 1-5 # Every weekday at 9 AM
|
|
30
|
+
0 */2 * * * # Every 2 hours
|
|
31
|
+
30 8 * * 1 # Every Monday at 8:30 AM
|
|
32
|
+
0 0 1 * * # First day of each month at midnight
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Interval expressions**:
|
|
36
|
+
```
|
|
37
|
+
every 30m # Every 30 minutes
|
|
38
|
+
every 2h # Every 2 hours
|
|
39
|
+
every 1d # Every day
|
|
40
|
+
every 15m # Every 15 minutes
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**One-time expressions**:
|
|
44
|
+
```
|
|
45
|
+
in 1h # In 1 hour from now
|
|
46
|
+
in 30m # In 30 minutes
|
|
47
|
+
in 2d # In 2 days
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Tool usage
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
# Schedule a recurring task
|
|
54
|
+
schedule_task({
|
|
55
|
+
name: "daily-standup-reminder",
|
|
56
|
+
schedule: "0 9 * * 1-5",
|
|
57
|
+
prompt: "Send a standup reminder to the team on WhatsApp"
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
# Schedule a one-time reminder
|
|
61
|
+
schedule_task({
|
|
62
|
+
name: "meeting-reminder",
|
|
63
|
+
schedule: "in 45m",
|
|
64
|
+
prompt: "Remind me that the client call starts in 15 minutes"
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
# List all tasks
|
|
68
|
+
list_tasks()
|
|
69
|
+
|
|
70
|
+
# Pause a task
|
|
71
|
+
pause_task({ id: "task-id-here" })
|
|
72
|
+
|
|
73
|
+
# Resume a paused task
|
|
74
|
+
resume_task({ id: "task-id-here" })
|
|
75
|
+
|
|
76
|
+
# Cancel a task permanently
|
|
77
|
+
cancel_task({ id: "task-id-here" })
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Example flows
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
User: "Remind me to check my email every weekday morning at 8 AM"
|
|
84
|
+
→ schedule_task({
|
|
85
|
+
name: "morning-email-check",
|
|
86
|
+
schedule: "0 8 * * 1-5",
|
|
87
|
+
prompt: "Remind the user to check their email"
|
|
88
|
+
})
|
|
89
|
+
→ "Done — I'll remind you every weekday at 8 AM."
|
|
90
|
+
|
|
91
|
+
User: "What tasks do I have scheduled?"
|
|
92
|
+
→ list_tasks()
|
|
93
|
+
→ Present results in a readable format
|
|
94
|
+
|
|
95
|
+
User: "Cancel the standup reminder"
|
|
96
|
+
→ list_tasks() to find the ID
|
|
97
|
+
→ cancel_task({ id: "<id>" })
|
|
98
|
+
```
|
|
@@ -1,27 +1,65 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: send-message
|
|
3
|
-
description: Send a message to a contact via WhatsApp or Signal. Use when the user asks you to send a message to someone via a messaging channel.
|
|
3
|
+
description: Send a message back to the originating channel or to a specific contact via WhatsApp or Signal. Use when the user asks you to send, forward, or relay a message to someone via a messaging channel.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Send Message
|
|
6
|
+
# Send Message
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Teaches the agent to send a message back to the originating channel or to a specific peer via reeboot's channel routing system.
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## Setup
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
2. Confirm the message content with the user if not explicitly stated
|
|
14
|
-
3. Use the appropriate channel tool to send the message
|
|
15
|
-
4. Report success or failure back to the user
|
|
12
|
+
No external dependencies. The send-message capability is built into reeboot's channel system.
|
|
16
13
|
|
|
17
|
-
|
|
14
|
+
Supported channels (must be configured in `~/.reeboot/config.json`):
|
|
15
|
+
- **WhatsApp** — requires WhatsApp session to be active (`reeboot channels login whatsapp`)
|
|
16
|
+
- **Signal** — requires Signal container running (`reeboot channels login signal`)
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
Verify channel status:
|
|
19
|
+
```
|
|
20
|
+
reeboot channels list
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
### Send a reply in the same turn
|
|
26
|
+
|
|
27
|
+
Simply include your reply text as the response — reeboot routes it back to the originating channel automatically.
|
|
28
|
+
|
|
29
|
+
### Send to a specific contact
|
|
30
|
+
|
|
31
|
+
Use the `send_message` tool (registered by the channel routing system):
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
send_message({
|
|
35
|
+
channel: "whatsapp", // or "signal"
|
|
36
|
+
peerId: "+1234567890", // phone number or WhatsApp JID
|
|
37
|
+
content: "Hello from reeboot!"
|
|
38
|
+
})
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### When to use vs. just responding
|
|
42
|
+
|
|
43
|
+
- **Just respond** — if you want to reply to the person who sent you the message (same turn, same channel). This is the default.
|
|
44
|
+
- **Use send_message tool** — if you need to send to a *different* contact or channel, or send *proactively* (e.g., from a scheduled task).
|
|
45
|
+
|
|
46
|
+
### Example flows
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
User (WhatsApp): "Text my wife that I'll be home late"
|
|
50
|
+
→ Identify contact from user's address book or ask for phone number
|
|
51
|
+
→ Confirm: "Send 'I'll be home late' to +1XXXXXXXXXX on WhatsApp?"
|
|
52
|
+
→ send_message({ channel: "whatsapp", peerId: "+1XXXXXXXXXX", content: "I'll be home late" })
|
|
53
|
+
→ Report: "Message sent."
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Scheduled task: daily standup reminder
|
|
58
|
+
→ send_message({ channel: "whatsapp", peerId: "team@g.us", content: "Daily standup in 15 minutes!" })
|
|
59
|
+
```
|
|
22
60
|
|
|
23
61
|
## Important
|
|
24
62
|
|
|
25
|
-
- Always confirm
|
|
26
|
-
-
|
|
63
|
+
- Always confirm recipient and content before sending
|
|
64
|
+
- Never send without explicit user instruction (or a pre-approved schedule)
|
|
27
65
|
- Report delivery status or errors clearly
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slack
|
|
3
|
+
description: Slack workspace operations via SLACK_BOT_TOKEN and curl — send messages, list channels, post to threads, upload files. Use when sending Slack messages, reading channels, or interacting with a Slack workspace.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Slack
|
|
7
|
+
|
|
8
|
+
Uses `SLACK_BOT_TOKEN` env var + curl against the Slack Web API to send messages, list channels, reply to threads, and upload files.
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
1. Create a Slack App at https://api.slack.com/apps:
|
|
13
|
+
- Click **Create New App** → **From scratch**
|
|
14
|
+
- Give it a name and select your workspace
|
|
15
|
+
|
|
16
|
+
2. Configure Bot Token Scopes under **OAuth & Permissions** → **Bot Token Scopes**:
|
|
17
|
+
- `channels:read` — list public channels
|
|
18
|
+
- `chat:write` — post messages
|
|
19
|
+
- `files:write` — upload files
|
|
20
|
+
- `groups:read` — list private channels (optional)
|
|
21
|
+
- `im:read` / `im:write` — direct messages (optional)
|
|
22
|
+
|
|
23
|
+
3. Install to workspace:
|
|
24
|
+
- Click **Install to Workspace** → **Allow**
|
|
25
|
+
- Copy the **Bot User OAuth Token** (starts with `xoxb-`)
|
|
26
|
+
|
|
27
|
+
4. Set the environment variable:
|
|
28
|
+
```
|
|
29
|
+
export SLACK_BOT_TOKEN=xoxb-xxxxxxxxxxxx-xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx
|
|
30
|
+
```
|
|
31
|
+
Add to your shell profile for persistence.
|
|
32
|
+
|
|
33
|
+
5. Invite the bot to channels:
|
|
34
|
+
```
|
|
35
|
+
/invite @your-bot-name
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
6. Verify:
|
|
39
|
+
```
|
|
40
|
+
curl -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
|
|
41
|
+
https://slack.com/api/auth.test
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Usage
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# List channels
|
|
48
|
+
curl -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
|
|
49
|
+
"https://slack.com/api/conversations.list?limit=50"
|
|
50
|
+
|
|
51
|
+
# Post a message
|
|
52
|
+
curl -X POST \
|
|
53
|
+
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
|
|
54
|
+
-H "Content-Type: application/json" \
|
|
55
|
+
https://slack.com/api/chat.postMessage \
|
|
56
|
+
-d '{"channel": "#general", "text": "Hello from reeboot!"}'
|
|
57
|
+
|
|
58
|
+
# Reply in a thread
|
|
59
|
+
curl -X POST \
|
|
60
|
+
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
|
|
61
|
+
-H "Content-Type: application/json" \
|
|
62
|
+
https://slack.com/api/chat.postMessage \
|
|
63
|
+
-d '{"channel": "#general", "text": "Reply", "thread_ts": "<parent_ts>"}'
|
|
64
|
+
|
|
65
|
+
# Get channel history
|
|
66
|
+
curl -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
|
|
67
|
+
"https://slack.com/api/conversations.history?channel=<channel_id>&limit=20"
|
|
68
|
+
|
|
69
|
+
# Upload a file
|
|
70
|
+
curl -F "file=@/path/to/file.pdf" \
|
|
71
|
+
-F "channels=<channel_id>" \
|
|
72
|
+
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
|
|
73
|
+
https://slack.com/api/files.upload
|
|
74
|
+
```
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sqlite
|
|
3
|
+
description: SQLite database operations via sqlite3 CLI and DATABASE_PATH — run queries, inspect schemas, read and write data. Use when working with a SQLite database file.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SQLite
|
|
7
|
+
|
|
8
|
+
Wraps the `sqlite3` CLI for SQLite database operations. Uses the `DATABASE_PATH` environment variable or an explicit file path.
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
1. Install sqlite3 (usually pre-installed on macOS and most Linux distros):
|
|
13
|
+
```bash
|
|
14
|
+
# macOS — check first:
|
|
15
|
+
sqlite3 --version
|
|
16
|
+
|
|
17
|
+
# If not installed:
|
|
18
|
+
brew install sqlite
|
|
19
|
+
|
|
20
|
+
# Ubuntu/Debian:
|
|
21
|
+
apt-get install sqlite3
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
2. Set the `DATABASE_PATH` environment variable (optional but recommended):
|
|
25
|
+
```bash
|
|
26
|
+
export DATABASE_PATH=/path/to/your/database.db
|
|
27
|
+
```
|
|
28
|
+
Add to your shell profile for persistence. Or pass the path directly in each command.
|
|
29
|
+
|
|
30
|
+
3. Verify:
|
|
31
|
+
```bash
|
|
32
|
+
sqlite3 "$DATABASE_PATH" ".tables"
|
|
33
|
+
# or:
|
|
34
|
+
sqlite3 /path/to/database.db ".tables"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Usage
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# List all tables
|
|
41
|
+
sqlite3 "$DATABASE_PATH" ".tables"
|
|
42
|
+
|
|
43
|
+
# Show schema for a table
|
|
44
|
+
sqlite3 "$DATABASE_PATH" ".schema users"
|
|
45
|
+
|
|
46
|
+
# Show full schema
|
|
47
|
+
sqlite3 "$DATABASE_PATH" ".schema"
|
|
48
|
+
|
|
49
|
+
# Run a query
|
|
50
|
+
sqlite3 "$DATABASE_PATH" "SELECT * FROM users LIMIT 10;"
|
|
51
|
+
|
|
52
|
+
# Count rows
|
|
53
|
+
sqlite3 "$DATABASE_PATH" "SELECT COUNT(*) FROM orders WHERE status = 'pending';"
|
|
54
|
+
|
|
55
|
+
# Insert data
|
|
56
|
+
sqlite3 "$DATABASE_PATH" "INSERT INTO logs (message, created_at) VALUES ('test', datetime('now'));"
|
|
57
|
+
|
|
58
|
+
# Update data
|
|
59
|
+
sqlite3 "$DATABASE_PATH" "UPDATE users SET active = 1 WHERE email = 'user@example.com';"
|
|
60
|
+
|
|
61
|
+
# Delete data
|
|
62
|
+
sqlite3 "$DATABASE_PATH" "DELETE FROM sessions WHERE expires_at < datetime('now');"
|
|
63
|
+
|
|
64
|
+
# Run a SQL file
|
|
65
|
+
sqlite3 "$DATABASE_PATH" < /path/to/migration.sql
|
|
66
|
+
|
|
67
|
+
# Export to CSV
|
|
68
|
+
sqlite3 -csv "$DATABASE_PATH" "SELECT * FROM users;" > users.csv
|
|
69
|
+
|
|
70
|
+
# Show database info
|
|
71
|
+
sqlite3 "$DATABASE_PATH" ".dbinfo"
|
|
72
|
+
|
|
73
|
+
# Check table info (columns, types)
|
|
74
|
+
sqlite3 "$DATABASE_PATH" "PRAGMA table_info(users);"
|
|
75
|
+
|
|
76
|
+
# Interactive mode
|
|
77
|
+
sqlite3 "$DATABASE_PATH"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Tips
|
|
81
|
+
|
|
82
|
+
- Use `LIMIT` on large tables to avoid returning too many rows
|
|
83
|
+
- Use `.headers on` and `.mode column` in interactive mode for readable output
|
|
84
|
+
- SQLite files can be inspected directly with `ls -lh "$DATABASE_PATH"` to check size
|
|
85
|
+
- Use `PRAGMA integrity_check;` to verify database health
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web-research
|
|
3
|
+
description: Structured multi-query web research using the web-search extension. Use when researching a topic, finding current information, investigating a question, or gathering facts from the web. Run 3–5 targeted searches, synthesise findings, cite URLs.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Web Research
|
|
7
|
+
|
|
8
|
+
Structured research pattern using the web-search extension. Produces a synthesis with cited sources.
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
No external dependencies beyond the web-search extension being enabled in your reeboot config.
|
|
13
|
+
|
|
14
|
+
Verify the extension is active:
|
|
15
|
+
```
|
|
16
|
+
reeboot reload
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The `web_search` tool must be available in the agent's tool list. If not, enable the web-search extension in your config:
|
|
20
|
+
```json
|
|
21
|
+
{ "extensions": ["web-search"] }
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
Run 3–5 targeted searches for different facets of the question, then synthesise:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
# Step 1: broaden the question into sub-queries
|
|
30
|
+
web_search("topic overview 2025")
|
|
31
|
+
web_search("topic technical details")
|
|
32
|
+
web_search("topic comparison alternatives")
|
|
33
|
+
|
|
34
|
+
# Step 2: check for recency
|
|
35
|
+
web_search("topic news March 2025")
|
|
36
|
+
|
|
37
|
+
# Step 3: synthesise
|
|
38
|
+
# Combine findings, note agreement/disagreement across sources, cite URLs.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Best practices
|
|
42
|
+
|
|
43
|
+
- Use specific, factual queries rather than open-ended questions
|
|
44
|
+
- Include the year or "latest" to avoid stale results
|
|
45
|
+
- Read the top 3 results per query before moving on
|
|
46
|
+
- Cite every claim with its source URL
|
|
47
|
+
- If results conflict, note the discrepancy and explain which source you trust more
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: web-search
|
|
3
|
-
description: Search the web using SearXNG. Use when you need to find current information, research a topic, look up facts, or gather information from the internet.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Web Search Skill
|
|
7
|
-
|
|
8
|
-
Use this skill when you need to search the web for information.
|
|
9
|
-
|
|
10
|
-
## Instructions
|
|
11
|
-
|
|
12
|
-
1. Formulate a clear, concise search query for the topic
|
|
13
|
-
2. Use the `web_search` tool with your query
|
|
14
|
-
3. Review the results and extract relevant information
|
|
15
|
-
4. Cite your sources when presenting findings
|
|
16
|
-
|
|
17
|
-
## When to Use
|
|
18
|
-
|
|
19
|
-
- Looking up current events or news
|
|
20
|
-
- Researching a technical topic
|
|
21
|
-
- Finding documentation or tutorials
|
|
22
|
-
- Verifying facts or statistics
|
|
23
|
-
- Discovering resources on a subject
|
|
24
|
-
|
|
25
|
-
## Example
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
User: What is the current version of Node.js LTS?
|
|
29
|
-
→ web_search("Node.js LTS version 2025")
|
|
30
|
-
→ Review results
|
|
31
|
-
→ Report: "The current Node.js LTS version is X.Y.Z (sources: ...)"
|
|
32
|
-
```
|