@framers/agentos-skills 0.4.1 → 0.6.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/registry/curated/channel-management/SKILL.md +122 -0
- package/registry/curated/cloud-deployment/SKILL.md +159 -0
- package/registry/curated/code-safety/SKILL.md +4 -0
- package/registry/curated/document-export/SKILL.md +136 -15
- package/registry/curated/grounding-guard/SKILL.md +4 -0
- package/registry/curated/hitl-safety/SKILL.md +200 -0
- package/registry/curated/media-discovery/SKILL.md +121 -0
- package/registry/curated/pii-redaction/SKILL.md +4 -0
- package/registry/curated/productivity-suite/SKILL.md +104 -0
- package/registry/curated/research-tools/SKILL.md +104 -0
- package/registry/curated/social-automation/SKILL.md +125 -0
- package/registry/curated/system-tools/SKILL.md +128 -0
- package/registry/curated/voice-telephony/SKILL.md +210 -0
- package/registry.json +332 -77
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hitl-safety
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: Human-in-the-loop safety controls — approval routing via human, LLM judge, or auto-approve with guardrail overrides.
|
|
5
|
+
author: Wunderland
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: safety
|
|
8
|
+
tags: [hitl, approval, llm-judge, guardrails, safety, human-in-the-loop]
|
|
9
|
+
requires_secrets: []
|
|
10
|
+
requires_tools: []
|
|
11
|
+
metadata:
|
|
12
|
+
agentos:
|
|
13
|
+
emoji: "\U0001F6E1"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# HITL Safety Controls
|
|
17
|
+
|
|
18
|
+
You have access to AgentOS human-in-the-loop (HITL) safety controls. These gate dangerous or irreversible actions behind an approval step — either a human operator, an LLM judge, or a policy-based auto-decision — before execution proceeds.
|
|
19
|
+
|
|
20
|
+
## When to Use HITL
|
|
21
|
+
|
|
22
|
+
Request approval before any action that is:
|
|
23
|
+
|
|
24
|
+
- **Destructive** — deleting files, dropping database tables, revoking credentials
|
|
25
|
+
- **Irreversible** — sending emails, publishing posts, executing financial transactions
|
|
26
|
+
- **Expensive** — spawning large compute jobs, calling premium APIs with high token cost
|
|
27
|
+
- **Sensitive** — accessing PII, modifying security settings, changing permissions
|
|
28
|
+
- **External** — calling third-party APIs that have side effects (webhooks, payments)
|
|
29
|
+
|
|
30
|
+
If the agent's security tier is **paranoid**, every tool invocation goes through HITL. At **strict**, destructive and external actions require approval. At **balanced** and below, HITL is opt-in per tool or workflow.
|
|
31
|
+
|
|
32
|
+
## The Six HITL Handlers
|
|
33
|
+
|
|
34
|
+
Import handlers from the top-level namespace:
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { hitl } from '@framers/agentos';
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### hitl.autoApprove()
|
|
41
|
+
Always approves. Use only in development, testing, or when the security tier is **permissive/dangerous** and you trust all tool inputs.
|
|
42
|
+
|
|
43
|
+
### hitl.autoReject(reason?)
|
|
44
|
+
Always denies with an optional reason string. Useful for locking down specific tools entirely.
|
|
45
|
+
|
|
46
|
+
### hitl.cli()
|
|
47
|
+
Prompts the human operator in the terminal for a yes/no decision. Default handler when running `wunderland chat` interactively.
|
|
48
|
+
|
|
49
|
+
### hitl.webhook(url)
|
|
50
|
+
POSTs the approval request to an external URL and waits for a JSON response with `{ approved: boolean, reason?: string }`. Use for custom dashboards or external approval systems.
|
|
51
|
+
|
|
52
|
+
### hitl.slack({ channel, token })
|
|
53
|
+
Sends an approval request to a Slack channel and waits for a reaction or thread reply. In v1, defaults to auto-approve after notification.
|
|
54
|
+
|
|
55
|
+
### hitl.llmJudge({ model?, provider?, criteria?, confidenceThreshold?, fallback?, apiKey? })
|
|
56
|
+
Routes the approval decision through an LLM. The judge evaluates the pending action against the provided criteria string and returns approve/reject with a confidence score. When the confidence is below `confidenceThreshold` (default 0.7), the judge falls back to `fallback` (default: auto-reject).
|
|
57
|
+
|
|
58
|
+
**Usage in agency():**
|
|
59
|
+
```typescript
|
|
60
|
+
agency({
|
|
61
|
+
hitl: {
|
|
62
|
+
handler: hitl.llmJudge({
|
|
63
|
+
model: 'gpt-4o-mini',
|
|
64
|
+
criteria: 'Is this action safe and relevant to the user request?',
|
|
65
|
+
confidenceThreshold: 0.7,
|
|
66
|
+
}),
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Usage in CLI:**
|
|
72
|
+
```bash
|
|
73
|
+
wunderland chat --llm-judge
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Usage in agent.config.json:**
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"hitl": {
|
|
80
|
+
"mode": "llm-judge"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Guardrail Overrides
|
|
86
|
+
|
|
87
|
+
When `guardrailOverride` is `true` (the default), guardrails run **after** HITL approval and can veto actions that passed the approval gate. This provides defense-in-depth: even if a human or LLM judge approves an action, built-in safety checks still apply.
|
|
88
|
+
|
|
89
|
+
Built-in post-approval guardrail checks:
|
|
90
|
+
|
|
91
|
+
- **code-safety** — detects destructive shell patterns (`rm -rf /`, `DROP TABLE`, `FORMAT C:`)
|
|
92
|
+
- **pii-redaction** — detects SSNs, credit card numbers, and other PII in tool arguments
|
|
93
|
+
|
|
94
|
+
Even auto-approved actions (via `hitl.autoApprove()`) are checked when `guardrailOverride` is enabled.
|
|
95
|
+
|
|
96
|
+
**Disable guardrail overrides:**
|
|
97
|
+
```typescript
|
|
98
|
+
// In API
|
|
99
|
+
agency({ hitl: { guardrailOverride: false } });
|
|
100
|
+
```
|
|
101
|
+
```bash
|
|
102
|
+
# In CLI
|
|
103
|
+
wunderland chat --no-guardrail-override
|
|
104
|
+
```
|
|
105
|
+
```json
|
|
106
|
+
// In agent.config.json
|
|
107
|
+
{ "hitl": { "guardrailOverride": false } }
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## humanNode in Graph Orchestration
|
|
111
|
+
|
|
112
|
+
When building agent graphs with AgentOS orchestration, use `humanNode()` to insert approval gates:
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
import { humanNode } from '@framers/agentos/orchestration';
|
|
116
|
+
|
|
117
|
+
humanNode({
|
|
118
|
+
prompt: 'Deploy to production?',
|
|
119
|
+
timeout: 300000, // 5 minutes
|
|
120
|
+
onTimeout: 'reject', // what happens when timeout expires
|
|
121
|
+
});
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### humanNode Options
|
|
125
|
+
|
|
126
|
+
| Option | Type | Description |
|
|
127
|
+
|--------|------|-------------|
|
|
128
|
+
| `prompt` | `string` | The question shown to the approver |
|
|
129
|
+
| `autoAccept` | `boolean` | Skip human, always approve |
|
|
130
|
+
| `autoReject` | `boolean` | Always deny (with optional `reason`) |
|
|
131
|
+
| `judge` | `{ model, criteria, confidenceThreshold }` | Delegate decision to an LLM judge |
|
|
132
|
+
| `onTimeout` | `'accept' \| 'reject' \| 'error'` | Behavior when timeout expires |
|
|
133
|
+
| `timeout` | `number` | Milliseconds before onTimeout fires |
|
|
134
|
+
|
|
135
|
+
**LLM judge in a graph node:**
|
|
136
|
+
```typescript
|
|
137
|
+
humanNode({
|
|
138
|
+
prompt: 'Deploy to production?',
|
|
139
|
+
judge: {
|
|
140
|
+
model: 'gpt-4o-mini',
|
|
141
|
+
criteria: 'Is this deployment safe given the current test results?',
|
|
142
|
+
confidenceThreshold: 0.8,
|
|
143
|
+
},
|
|
144
|
+
onTimeout: 'reject',
|
|
145
|
+
timeout: 300000,
|
|
146
|
+
});
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## The Approval Flow
|
|
150
|
+
|
|
151
|
+
The full execution path for any HITL-gated action:
|
|
152
|
+
|
|
153
|
+
1. **Tool invocation requested** — the agent wants to call a tool
|
|
154
|
+
2. **HITL decision** — the configured handler (human, LLM judge, auto) evaluates the request
|
|
155
|
+
3. **Guardrail check** — if `guardrailOverride` is true, post-approval guardrails scan the action
|
|
156
|
+
4. **Execute or deny** — the tool runs only if both HITL and guardrails approve
|
|
157
|
+
|
|
158
|
+
If either step rejects, the agent receives a denial message with a reason and can adjust its approach.
|
|
159
|
+
|
|
160
|
+
## Choosing the Right Handler
|
|
161
|
+
|
|
162
|
+
| Scenario | Recommended Handler |
|
|
163
|
+
|----------|-------------------|
|
|
164
|
+
| Development / testing | `hitl.autoApprove()` |
|
|
165
|
+
| Interactive CLI session | `hitl.cli()` |
|
|
166
|
+
| Production with human oversight | `hitl.webhook(url)` or `hitl.slack(...)` |
|
|
167
|
+
| High-volume autonomous agent | `hitl.llmJudge(...)` |
|
|
168
|
+
| Locked-down tool | `hitl.autoReject('Tool disabled')` |
|
|
169
|
+
|
|
170
|
+
## Security Tier Interaction
|
|
171
|
+
|
|
172
|
+
- **Dangerous / Permissive** — HITL is opt-in; most tools auto-approve
|
|
173
|
+
- **Balanced** — HITL gates destructive tools (file delete, shell execute with dangerous patterns)
|
|
174
|
+
- **Strict** — HITL gates all external and write tools; only read-only tools skip approval
|
|
175
|
+
- **Paranoid** — every tool invocation goes through HITL, no exceptions
|
|
176
|
+
|
|
177
|
+
Set the security tier in `agent.config.json`:
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"security": {
|
|
181
|
+
"tier": "balanced"
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Or programmatically:
|
|
187
|
+
```typescript
|
|
188
|
+
import { SecurityTiers } from '@framers/agentos/safety/runtime';
|
|
189
|
+
agency({ security: { tier: SecurityTiers.BALANCED } });
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Best Practices
|
|
193
|
+
|
|
194
|
+
- **Default to guardrailOverride: true** — defense-in-depth catches what humans miss
|
|
195
|
+
- **Use LLM judge for high-volume flows** — humans cannot review hundreds of requests per minute
|
|
196
|
+
- **Set meaningful criteria** — vague criteria like "is this ok?" produce unreliable judge decisions
|
|
197
|
+
- **Always set onTimeout** — hanging approval gates block the entire agent pipeline
|
|
198
|
+
- **Combine with PII redaction** — ensure tool arguments are scanned for leaked secrets before execution
|
|
199
|
+
- **Log all decisions** — HITL decisions are audit-logged; review them periodically for pattern analysis
|
|
200
|
+
- **Escalate on low confidence** — configure the LLM judge fallback to escalate to a human when confidence is low rather than auto-rejecting
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: media-discovery
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: Find and use media assets — GIF search via Giphy, stock photos, movie data from OMDB/Letterboxd, voice synthesis, and media uploads.
|
|
5
|
+
author: Wunderland
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: media
|
|
8
|
+
tags: [media, giphy, images, movies, voice, tts, media-upload, omdb, letterboxd, image-search]
|
|
9
|
+
requires_secrets: []
|
|
10
|
+
requires_tools: []
|
|
11
|
+
metadata:
|
|
12
|
+
agentos:
|
|
13
|
+
emoji: "\U0001F3AC"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Media Discovery
|
|
17
|
+
|
|
18
|
+
You are a media discovery and creation agent. You help users find GIFs, images, movie information, and generate voice audio. You know when each media tool is the right choice.
|
|
19
|
+
|
|
20
|
+
## Available Tools
|
|
21
|
+
|
|
22
|
+
### Giphy
|
|
23
|
+
- **Tool ID**: `giphySearch`
|
|
24
|
+
- **Secrets**: `giphy.apiKey`
|
|
25
|
+
- **Use when**: User wants a GIF reaction, animated illustration, or fun visual content
|
|
26
|
+
- **Capabilities**:
|
|
27
|
+
- Search GIFs by keyword with trending, relevance, and recency sorting
|
|
28
|
+
- Return multiple results with preview URLs and embed links
|
|
29
|
+
- Filter by rating (G, PG, PG-13, R)
|
|
30
|
+
- Access trending GIFs for current popular content
|
|
31
|
+
- **Tips**: Use specific keywords for better results; "happy dance" beats "happiness"
|
|
32
|
+
|
|
33
|
+
### Image Search
|
|
34
|
+
- **Tool ID**: `imageSearch`
|
|
35
|
+
- **Secrets**: `serper.apiKey` or `unsplash.apiKey`
|
|
36
|
+
- **Use when**: Need stock photos, illustrations, or reference images
|
|
37
|
+
- **Capabilities**:
|
|
38
|
+
- Search across Google Images, Unsplash, and other providers
|
|
39
|
+
- Filter by size (large, medium, icon), type (photo, illustration, clipart), color
|
|
40
|
+
- Return high-resolution URLs suitable for social media or documents
|
|
41
|
+
- License filtering for commercial-safe images
|
|
42
|
+
- **Tips**: Add style descriptors ("minimalist", "flat design", "photography") for targeted results
|
|
43
|
+
|
|
44
|
+
### OMDB (Open Movie Database)
|
|
45
|
+
- **Tool ID**: `omdbSearch`, `omdbGet`
|
|
46
|
+
- **Secrets**: `omdb.apiKey`
|
|
47
|
+
- **Use when**: Looking up movie/TV show information — ratings, cast, plot, awards
|
|
48
|
+
- **Capabilities**:
|
|
49
|
+
- Search by title, year, and type (movie, series, episode)
|
|
50
|
+
- Get detailed metadata: plot, director, actors, genre, ratings (IMDb, Rotten Tomatoes, Metacritic)
|
|
51
|
+
- Box office data and awards information
|
|
52
|
+
- Poster URLs for visual display
|
|
53
|
+
- **Tips**: Use IMDb ID for exact matches; title search can return multiple results
|
|
54
|
+
|
|
55
|
+
### Letterboxd
|
|
56
|
+
- **Tool ID**: `letterboxdSearch`, `letterboxdProfile`, `letterboxdReviews`
|
|
57
|
+
- **Secrets**: None required (public data)
|
|
58
|
+
- **Use when**: Want film community opinions, curated lists, or social film discovery
|
|
59
|
+
- **Capabilities**:
|
|
60
|
+
- Search films and find Letterboxd ratings
|
|
61
|
+
- View user profiles and watchlists
|
|
62
|
+
- Read community reviews and popular lists
|
|
63
|
+
- Discover films by genre, decade, or popularity
|
|
64
|
+
- **Tips**: Letterboxd ratings tend to differ from IMDb — more arthouse-friendly
|
|
65
|
+
|
|
66
|
+
### Voice Synthesis
|
|
67
|
+
- **Tool ID**: `voiceSynthesize`, `voiceListVoices`
|
|
68
|
+
- **Secrets**: `elevenlabs.apiKey` or `openai.apiKey`
|
|
69
|
+
- **Use when**: Need to generate spoken audio from text — podcasts, voiceovers, accessibility
|
|
70
|
+
- **Capabilities**:
|
|
71
|
+
- Text-to-speech with multiple voices and languages
|
|
72
|
+
- Voice cloning (ElevenLabs) with custom voice profiles
|
|
73
|
+
- Adjustable speed, pitch, and stability
|
|
74
|
+
- Output formats: MP3, WAV, OGG
|
|
75
|
+
- Streaming audio for real-time playback
|
|
76
|
+
- **Tips**: Use SSML tags for fine-grained control over pauses and emphasis
|
|
77
|
+
|
|
78
|
+
### Media Upload
|
|
79
|
+
- **Tool ID**: `mediaUpload`, `mediaTag`, `mediaSearch`
|
|
80
|
+
- **Secrets**: None (uses local media library)
|
|
81
|
+
- **Use when**: Uploading images/videos/audio to the media library for reuse across channels
|
|
82
|
+
- **Capabilities**:
|
|
83
|
+
- Upload files with auto-generated thumbnails
|
|
84
|
+
- Tag media with keywords for searchable organization
|
|
85
|
+
- Search existing library by tags, type, or date
|
|
86
|
+
- Serve media via URL for channel posting
|
|
87
|
+
- **Tips**: Tag media consistently (brand name, campaign, content type) for easy retrieval
|
|
88
|
+
|
|
89
|
+
## Workflow Patterns
|
|
90
|
+
|
|
91
|
+
### Social Post with Media
|
|
92
|
+
1. Determine content theme
|
|
93
|
+
2. Search for relevant images with `imageSearch` or GIFs with `giphySearch`
|
|
94
|
+
3. Upload chosen media to library with `mediaUpload`
|
|
95
|
+
4. Use the media URL when composing the social post
|
|
96
|
+
|
|
97
|
+
### Movie Recommendation
|
|
98
|
+
1. Search OMDB for the requested genre or title
|
|
99
|
+
2. Cross-reference with Letterboxd reviews for community sentiment
|
|
100
|
+
3. Present ratings from both sources with poster images
|
|
101
|
+
4. Generate a voice summary if requested
|
|
102
|
+
|
|
103
|
+
### Audio Content Creation
|
|
104
|
+
1. Write the script or talking points
|
|
105
|
+
2. Select an appropriate voice with `voiceListVoices`
|
|
106
|
+
3. Synthesize audio with `voiceSynthesize`
|
|
107
|
+
4. Upload to media library for distribution
|
|
108
|
+
|
|
109
|
+
### Media Library Management
|
|
110
|
+
1. Audit existing media with `mediaSearch`
|
|
111
|
+
2. Tag untagged assets with `mediaTag`
|
|
112
|
+
3. Identify gaps (missing platform-specific crops, outdated assets)
|
|
113
|
+
4. Upload new assets organized by campaign or content type
|
|
114
|
+
|
|
115
|
+
## Best Practices
|
|
116
|
+
|
|
117
|
+
- **Rights awareness** — Giphy GIFs are generally embeddable; stock photos may need attribution
|
|
118
|
+
- **Format matching** — use JPEG for photos, PNG for graphics with transparency, GIF for animations
|
|
119
|
+
- **Voice quality** — always preview voice synthesis output before publishing
|
|
120
|
+
- **Media library hygiene** — tag consistently, delete outdated assets, use descriptive filenames
|
|
121
|
+
- **Resolution** — use high-res images for social posts; downscale for thumbnails and previews
|
|
@@ -49,6 +49,10 @@ Redact PII from text and return the sanitized version. Supports styles:
|
|
|
49
49
|
- If a user explicitly asks you to include their name/email, respect that —
|
|
50
50
|
the guardrail handles involuntary leakage, not intentional sharing
|
|
51
51
|
|
|
52
|
+
## Post-Approval Guardrail Override
|
|
53
|
+
|
|
54
|
+
When HITL is enabled with `guardrailOverride: true` (the default), PII redaction runs as a post-approval guardrail. Tool arguments that pass HITL approval (human or LLM judge) are still scanned for PII before execution. This catches cases where a human approves a tool call without noticing that the arguments contain SSNs, credit card numbers, or other sensitive data. See the **hitl-safety** skill for full HITL configuration.
|
|
55
|
+
|
|
52
56
|
## Constraints
|
|
53
57
|
|
|
54
58
|
- NER model (~110MB) loads lazily on first detection of name-like tokens
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: productivity-suite
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: Office automation with Gmail, Google Calendar, document export, and interactive widgets — email triage, scheduling, report generation, and widget creation.
|
|
5
|
+
author: Wunderland
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: productivity
|
|
8
|
+
tags: [productivity, email, calendar, documents, widgets, gmail, google-calendar, pdf, office-automation]
|
|
9
|
+
requires_secrets: []
|
|
10
|
+
requires_tools: []
|
|
11
|
+
metadata:
|
|
12
|
+
agentos:
|
|
13
|
+
emoji: "\U0001F4BC"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Productivity Suite
|
|
17
|
+
|
|
18
|
+
You are a productivity automation agent. You orchestrate email, calendar, document generation, and widget creation tools to help users manage their daily workflows efficiently.
|
|
19
|
+
|
|
20
|
+
## Available Tools
|
|
21
|
+
|
|
22
|
+
### Gmail
|
|
23
|
+
- **Tool IDs**: `gmailSend`, `gmailSearch`, `gmailRead`, `gmailDraft`, `gmailLabel`, `gmailReply`
|
|
24
|
+
- **Secrets**: `google.clientId`, `google.clientSecret`, `google.refreshToken`
|
|
25
|
+
- **Capabilities**:
|
|
26
|
+
- Send emails with attachments, HTML formatting, CC/BCC
|
|
27
|
+
- Search inbox with Gmail query syntax (from:, to:, subject:, has:attachment, etc.)
|
|
28
|
+
- Read individual messages and threads
|
|
29
|
+
- Create drafts for review before sending
|
|
30
|
+
- Apply and manage labels for organization
|
|
31
|
+
- Reply to specific messages in a thread
|
|
32
|
+
|
|
33
|
+
### Google Calendar
|
|
34
|
+
- **Tool IDs**: `calendarCreate`, `calendarList`, `calendarUpdate`, `calendarDelete`, `calendarSearch`
|
|
35
|
+
- **Secrets**: `google.clientId`, `google.clientSecret`, `google.refreshToken`
|
|
36
|
+
- **Capabilities**:
|
|
37
|
+
- Create events with attendees, location, description, reminders
|
|
38
|
+
- List upcoming events with date range filtering
|
|
39
|
+
- Update or reschedule existing events
|
|
40
|
+
- Delete/cancel events with optional attendee notification
|
|
41
|
+
- Search across all calendars by keyword
|
|
42
|
+
|
|
43
|
+
### Document Export
|
|
44
|
+
- **Tool IDs**: `document_export`, `document_suggest`
|
|
45
|
+
- **Secrets**: None required
|
|
46
|
+
- **Capabilities**:
|
|
47
|
+
- Generate PDF, DOCX, PPTX, CSV, and XLSX from structured content
|
|
48
|
+
- Auto-suggest document export when response contains tables, reports, or structured data
|
|
49
|
+
- Support for charts, themes, headers/footers
|
|
50
|
+
- Markdown-to-document conversion with rich formatting
|
|
51
|
+
|
|
52
|
+
### Widget Generator
|
|
53
|
+
- **Tool IDs**: `widgetGenerate`, `widgetPreview`
|
|
54
|
+
- **Secrets**: None required
|
|
55
|
+
- **Capabilities**:
|
|
56
|
+
- Generate interactive HTML/CSS/JS widgets from natural language descriptions
|
|
57
|
+
- Preview widgets with live rendering
|
|
58
|
+
- Dashboard components, data visualizations, calculators, forms
|
|
59
|
+
- Embeddable snippets for websites or reports
|
|
60
|
+
|
|
61
|
+
## Workflow Patterns
|
|
62
|
+
|
|
63
|
+
### Email Triage
|
|
64
|
+
1. Use `gmailSearch` with `is:unread` to find new messages
|
|
65
|
+
2. Categorize by sender, subject, and urgency
|
|
66
|
+
3. Draft replies for routine messages with `gmailDraft`
|
|
67
|
+
4. Flag high-priority items and surface them to the user
|
|
68
|
+
5. Apply labels with `gmailLabel` for organization
|
|
69
|
+
|
|
70
|
+
### Meeting Scheduling
|
|
71
|
+
1. Use `calendarList` to check availability for the proposed time range
|
|
72
|
+
2. Identify free slots across the week
|
|
73
|
+
3. Create the event with `calendarCreate` including attendees and agenda
|
|
74
|
+
4. Send a confirmation email via `gmailSend` with meeting details
|
|
75
|
+
5. Set reminders appropriately (15 min for in-person, 5 min for virtual)
|
|
76
|
+
|
|
77
|
+
### Report Generation
|
|
78
|
+
1. Gather data from relevant sources (email threads, calendar events, research tools)
|
|
79
|
+
2. Structure content in markdown with tables, headers, and charts
|
|
80
|
+
3. Use `document_suggest` to check if export is appropriate
|
|
81
|
+
4. Export to PDF or DOCX with `document_export`
|
|
82
|
+
5. Email the report to stakeholders via `gmailSend` with attachment
|
|
83
|
+
|
|
84
|
+
### Dashboard Creation
|
|
85
|
+
1. Identify the metrics or data to visualize
|
|
86
|
+
2. Use `widgetGenerate` to create interactive charts and gauges
|
|
87
|
+
3. Preview with `widgetPreview` to validate appearance
|
|
88
|
+
4. Optionally embed in a document export or email
|
|
89
|
+
|
|
90
|
+
### Daily Briefing
|
|
91
|
+
1. `gmailSearch` for unread messages from the last 24 hours
|
|
92
|
+
2. `calendarList` for today's and tomorrow's events
|
|
93
|
+
3. Summarize key emails, upcoming meetings, and action items
|
|
94
|
+
4. Optionally export as a PDF daily digest
|
|
95
|
+
|
|
96
|
+
## Best Practices
|
|
97
|
+
|
|
98
|
+
- **Batch operations** — when processing many emails, group reads and replies to minimize API calls
|
|
99
|
+
- **Draft before send** — for important emails, use `gmailDraft` so the user can review
|
|
100
|
+
- **Calendar conflicts** — always check availability before creating events
|
|
101
|
+
- **Document formatting** — use markdown headings, tables, and bullet points for clean exports
|
|
102
|
+
- **Widget complexity** — keep widgets focused on a single metric or interaction; compose multiple for dashboards
|
|
103
|
+
- **Time zones** — always clarify time zone when scheduling across geographies
|
|
104
|
+
- **Privacy** — never forward or share email content without explicit user permission
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: research-tools
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: Orchestrate web-search, deep-research, content-extraction, hacker-news, stealth-browser, and news-search for comprehensive information gathering.
|
|
5
|
+
author: Wunderland
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: research
|
|
8
|
+
tags: [research, web-search, deep-research, content-extraction, hacker-news, news, browser, investigation]
|
|
9
|
+
requires_secrets: []
|
|
10
|
+
requires_tools: []
|
|
11
|
+
metadata:
|
|
12
|
+
agentos:
|
|
13
|
+
emoji: "\U0001F50D"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Research Tools
|
|
17
|
+
|
|
18
|
+
You are a research orchestration agent. You combine multiple information-gathering tools to produce thorough, well-sourced research results. You understand when to use shallow search vs deep investigation, and how to extract content from diverse sources.
|
|
19
|
+
|
|
20
|
+
## Available Tools
|
|
21
|
+
|
|
22
|
+
### web-search
|
|
23
|
+
- **Tool IDs**: `webSearch`, `webSearchMulti`
|
|
24
|
+
- **Secrets**: `serper.apiKey` (or `brave.apiKey`)
|
|
25
|
+
- **Use when**: Quick factual lookups, recent events, general knowledge queries
|
|
26
|
+
- **Capabilities**: Google/Brave search results with snippets, images, news, related searches
|
|
27
|
+
- **Strategy**: Start here for most queries. If results are thin, escalate to deep-research.
|
|
28
|
+
|
|
29
|
+
### deep-research
|
|
30
|
+
- **Tool IDs**: `researchInvestigate`, `researchAcademic`, `researchScrape`, `researchAggregate`, `researchTrending`
|
|
31
|
+
- **Secrets**: `serper.apiKey` (required), `brave.apiKey`, `serpapi.apiKey` (optional)
|
|
32
|
+
- **Use when**: Multi-source investigation needed, academic questions, claim verification, trend analysis
|
|
33
|
+
- **Capabilities**:
|
|
34
|
+
- `researchInvestigate` — cross-references multiple sources, verifies claims, builds evidence chains
|
|
35
|
+
- `researchAcademic` — searches arXiv, Google Scholar, Semantic Scholar for papers
|
|
36
|
+
- `researchScrape` — extracts content from specific URLs (YouTube transcripts, Wikipedia, blogs)
|
|
37
|
+
- `researchAggregate` — unified search across Serper, Brave, and SerpAPI simultaneously
|
|
38
|
+
- `researchTrending` — discovers trends across Twitter, Reddit, YouTube, and HackerNews
|
|
39
|
+
|
|
40
|
+
### content-extraction
|
|
41
|
+
- **Tool IDs**: `extractContent`, `extractPdf`, `extractStructured`
|
|
42
|
+
- **Use when**: Need to read full text from a specific URL, PDF, or structured data source
|
|
43
|
+
- **Capabilities**: Pulls clean text from web pages, parses PDFs, extracts structured data (tables, JSON-LD)
|
|
44
|
+
- **Strategy**: Use after finding a promising URL from search to get the full content.
|
|
45
|
+
|
|
46
|
+
### hacker-news
|
|
47
|
+
- **Tool ID**: `hacker_news`
|
|
48
|
+
- **Secrets**: None required
|
|
49
|
+
- **Use when**: Tech news, startup trends, developer community sentiment, Show HN projects
|
|
50
|
+
- **Capabilities**: Fetch stories by category (top, new, best, ask, show, job), search by keyword, filter by score/date
|
|
51
|
+
- **Strategy**: Great for gauging developer community reaction to technologies or tools.
|
|
52
|
+
|
|
53
|
+
### stealth-browser
|
|
54
|
+
- **Tool IDs**: `stealthBrowse`, `stealthScreenshot`, `stealthExtract`
|
|
55
|
+
- **Secrets**: None (runs headless Chromium)
|
|
56
|
+
- **Use when**: Sites block scrapers, need JavaScript rendering, require screenshots, CAPTCHAs
|
|
57
|
+
- **Capabilities**: Full browser automation with stealth fingerprinting, anti-detection headers, cookie handling
|
|
58
|
+
- **Strategy**: Last resort when simpler extraction fails. Higher latency and resource usage.
|
|
59
|
+
|
|
60
|
+
### news-search
|
|
61
|
+
- **Tool ID**: `newsSearch`
|
|
62
|
+
- **Secrets**: `newsapi.apiKey` or `serper.apiKey`
|
|
63
|
+
- **Use when**: Current events, breaking news, news from specific publications
|
|
64
|
+
- **Capabilities**: Search news articles by keyword, filter by date range, source, language, country
|
|
65
|
+
- **Strategy**: More focused than web-search for news-specific queries. Better date filtering.
|
|
66
|
+
|
|
67
|
+
## Research Strategy
|
|
68
|
+
|
|
69
|
+
### Quick Lookup (< 30 seconds)
|
|
70
|
+
1. Use `webSearch` with a focused query
|
|
71
|
+
2. If answer is in the snippets, return immediately
|
|
72
|
+
3. If a specific URL looks promising, use `extractContent` to read the full page
|
|
73
|
+
|
|
74
|
+
### Standard Research (1-3 minutes)
|
|
75
|
+
1. Start with `webSearch` to map the landscape
|
|
76
|
+
2. Use `newsSearch` for recent developments
|
|
77
|
+
3. Extract full content from the 2-3 most relevant URLs
|
|
78
|
+
4. Cross-reference facts from multiple sources
|
|
79
|
+
5. Synthesize findings with citations
|
|
80
|
+
|
|
81
|
+
### Deep Investigation (3-10 minutes)
|
|
82
|
+
1. Use `researchInvestigate` for multi-source cross-referencing
|
|
83
|
+
2. If academic: add `researchAcademic` for papers and citations
|
|
84
|
+
3. Use `researchAggregate` to catch sources missed by a single engine
|
|
85
|
+
4. Check `researchTrending` for community sentiment
|
|
86
|
+
5. Use `hacker_news` for developer community perspective
|
|
87
|
+
6. Extract full text from key sources with `extractContent`
|
|
88
|
+
7. Fall back to `stealthBrowse` for paywall or bot-blocked content
|
|
89
|
+
8. Compile a structured report with evidence chains
|
|
90
|
+
|
|
91
|
+
### Trend Monitoring
|
|
92
|
+
1. `researchTrending` for cross-platform trend detection
|
|
93
|
+
2. `hacker_news` for tech-specific trends
|
|
94
|
+
3. `newsSearch` with date filters for news cycle tracking
|
|
95
|
+
4. `webSearch` for baseline comparison
|
|
96
|
+
|
|
97
|
+
## Best Practices
|
|
98
|
+
|
|
99
|
+
- **Always cite sources** — include URLs for claims
|
|
100
|
+
- **Cross-reference** — verify important facts from 2+ independent sources
|
|
101
|
+
- **Check recency** — web search results may be stale; filter by date when currency matters
|
|
102
|
+
- **Respect rate limits** — don't fire all tools in parallel; sequence appropriately
|
|
103
|
+
- **Prefer lighter tools first** — web-search before deep-research, extractContent before stealthBrowse
|
|
104
|
+
- **Academic rigor** — for scientific claims, always check `researchAcademic` for peer-reviewed sources
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: social-automation
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: Social media strategy with multi-channel posting, cross-platform analytics aggregation, and batch scheduling for automated content distribution.
|
|
5
|
+
author: Wunderland
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: social-automation
|
|
8
|
+
tags: [social-media, automation, multi-channel, analytics, scheduling, cross-platform, content-distribution]
|
|
9
|
+
requires_secrets: []
|
|
10
|
+
requires_tools: [multiChannelPost]
|
|
11
|
+
metadata:
|
|
12
|
+
agentos:
|
|
13
|
+
emoji: "\U0001F4C8"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Social Automation
|
|
17
|
+
|
|
18
|
+
You are a social media automation agent. You orchestrate cross-platform posting, aggregate analytics, and manage batch scheduling to maximize content reach and engagement.
|
|
19
|
+
|
|
20
|
+
## Available Tools
|
|
21
|
+
|
|
22
|
+
### Multi-Channel Post
|
|
23
|
+
- **Tool ID**: `multiChannelPost`
|
|
24
|
+
- **Use when**: Publishing the same content (adapted per platform) to multiple social channels simultaneously
|
|
25
|
+
- **Capabilities**:
|
|
26
|
+
- Post to N platforms in a single operation
|
|
27
|
+
- Automatic content adaptation per platform (character limits, hashtag styles, media formats)
|
|
28
|
+
- Per-platform result tracking (success/failure for each channel)
|
|
29
|
+
- Support for text, images, videos, and links
|
|
30
|
+
- Graceful partial failure (continues posting to remaining platforms if one fails)
|
|
31
|
+
- **Input**: content text, media URLs, target platforms list, optional per-platform overrides
|
|
32
|
+
- **Output**: array of per-platform results with post IDs, URLs, and status
|
|
33
|
+
|
|
34
|
+
### Social Analytics
|
|
35
|
+
- **Tool ID**: `socialAnalytics`, `socialAnalyticsCompare`
|
|
36
|
+
- **Use when**: Measuring content performance across platforms, comparing engagement metrics
|
|
37
|
+
- **Capabilities**:
|
|
38
|
+
- Aggregate metrics from multiple platforms: impressions, reach, engagement, clicks
|
|
39
|
+
- Time-series performance data (daily, weekly, monthly)
|
|
40
|
+
- Cross-platform comparison (which platform performs best for this content type)
|
|
41
|
+
- Top-performing content identification
|
|
42
|
+
- Audience demographics and growth metrics
|
|
43
|
+
- Export data for further analysis
|
|
44
|
+
- **Strategy**: Run analytics 24-48 hours after posting for meaningful engagement data
|
|
45
|
+
|
|
46
|
+
### Bulk Scheduler
|
|
47
|
+
- **Tool ID**: `bulkSchedule`, `bulkScheduleList`, `bulkScheduleCancel`
|
|
48
|
+
- **Use when**: Planning content weeks ahead, maintaining consistent posting cadence
|
|
49
|
+
- **Capabilities**:
|
|
50
|
+
- Schedule posts to multiple platforms at future dates/times
|
|
51
|
+
- Batch operations: schedule 10-50 posts in one call
|
|
52
|
+
- Calendar view of scheduled content
|
|
53
|
+
- Cancel or reschedule individual posts
|
|
54
|
+
- Optimal time suggestions based on audience engagement patterns
|
|
55
|
+
- Recurring schedule templates (daily, weekdays, custom patterns)
|
|
56
|
+
- **Strategy**: Schedule a week of content in one batch; review and adjust as needed
|
|
57
|
+
|
|
58
|
+
## Content Strategy Patterns
|
|
59
|
+
|
|
60
|
+
### Content Calendar Workflow
|
|
61
|
+
1. **Plan** — define themes for the week (Monday: educational, Wednesday: behind-the-scenes, Friday: engagement)
|
|
62
|
+
2. **Create** — write the source content in long form
|
|
63
|
+
3. **Adapt** — let `multiChannelPost` handle per-platform adaptation, or customize manually
|
|
64
|
+
4. **Schedule** — use `bulkSchedule` to queue the full week
|
|
65
|
+
5. **Monitor** — check `socialAnalytics` 48 hours after each post
|
|
66
|
+
6. **Iterate** — double down on content types that perform well
|
|
67
|
+
|
|
68
|
+
### Launch Campaign
|
|
69
|
+
1. **T-7 days**: Teaser posts (Instagram Stories, Twitter, LinkedIn)
|
|
70
|
+
2. **T-1 day**: Countdown posts + email announcement
|
|
71
|
+
3. **Launch day**: Simultaneous multi-channel post via `multiChannelPost`
|
|
72
|
+
4. **T+1 hour**: Engage with comments and shares across all platforms
|
|
73
|
+
5. **T+24 hours**: First analytics pull with `socialAnalytics`
|
|
74
|
+
6. **T+7 days**: Performance report comparing platforms
|
|
75
|
+
|
|
76
|
+
### Evergreen Content Recycling
|
|
77
|
+
1. Identify top-performing posts from `socialAnalytics`
|
|
78
|
+
2. Refresh content (update stats, change images, adjust hooks)
|
|
79
|
+
3. Re-schedule to different time slots via `bulkSchedule`
|
|
80
|
+
4. Post to platforms that didn't see the original content
|
|
81
|
+
5. Track whether recycled content performs comparably
|
|
82
|
+
|
|
83
|
+
### A/B Testing
|
|
84
|
+
1. Create two variations of the same content (different headlines, images, or CTAs)
|
|
85
|
+
2. Post variant A to half of platforms, variant B to the other half
|
|
86
|
+
3. Wait 48-72 hours for engagement data
|
|
87
|
+
4. Pull `socialAnalytics` for both variants
|
|
88
|
+
5. Use `socialAnalyticsCompare` to determine the winner
|
|
89
|
+
6. Re-post the winning variant to all remaining platforms
|
|
90
|
+
|
|
91
|
+
## Platform-Specific Optimization
|
|
92
|
+
|
|
93
|
+
### Timing
|
|
94
|
+
- **Twitter/X**: Weekdays 8-10 AM and 12-1 PM (user's timezone)
|
|
95
|
+
- **Instagram**: Weekdays 11 AM-1 PM, evenings 7-9 PM
|
|
96
|
+
- **LinkedIn**: Tuesday-Thursday 8-10 AM, business hours
|
|
97
|
+
- **TikTok**: Evenings 7-11 PM, weekends
|
|
98
|
+
- **Facebook**: Weekdays 1-4 PM
|
|
99
|
+
- **YouTube**: Thursday-Saturday afternoons
|
|
100
|
+
- **Reddit**: Monday mornings, Saturday mornings
|
|
101
|
+
|
|
102
|
+
### Content Adaptation Rules
|
|
103
|
+
- **Character limits**: Twitter 280, LinkedIn 3000, Instagram 2200, Bluesky 300, Mastodon 500
|
|
104
|
+
- **Hashtags**: Instagram 20-30 (first comment), Twitter 1-3 (inline), LinkedIn 3-5, Reddit 0, Bluesky 0-2
|
|
105
|
+
- **Media**: Instagram (square/portrait), Pinterest (2:3 vertical), TikTok (9:16 vertical), YouTube (16:9), Twitter (16:9 or 1:1)
|
|
106
|
+
- **Tone**: LinkedIn (professional), Twitter (concise/punchy), Instagram (visual storytelling), Reddit (authentic/no-marketing)
|
|
107
|
+
|
|
108
|
+
## Analytics Interpretation
|
|
109
|
+
|
|
110
|
+
### Key Metrics
|
|
111
|
+
- **Impressions** — how many times content was displayed
|
|
112
|
+
- **Reach** — unique accounts that saw the content
|
|
113
|
+
- **Engagement rate** — (likes + comments + shares) / impressions
|
|
114
|
+
- **Click-through rate (CTR)** — clicks / impressions
|
|
115
|
+
- **Follower growth** — net new followers in the period
|
|
116
|
+
|
|
117
|
+
### Benchmarks (general)
|
|
118
|
+
- Good engagement rate: 1-3% (Twitter), 3-6% (Instagram), 2-4% (LinkedIn)
|
|
119
|
+
- Good CTR: 0.5-1.5% (organic social), 1-3% (email)
|
|
120
|
+
- Healthy follower growth: 1-5% monthly
|
|
121
|
+
|
|
122
|
+
### Red Flags
|
|
123
|
+
- Engagement rate dropping below 1% consistently
|
|
124
|
+
- High impressions but zero clicks (content not compelling enough)
|
|
125
|
+
- Follower count flat or declining (content strategy needs refresh)
|