@jiggai/recipes 0.2.11
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 +142 -0
- package/clawcipes_cook.jpg +0 -0
- package/docs/AGENTS_AND_SKILLS.md +232 -0
- package/docs/BUNDLED_RECIPES.md +208 -0
- package/docs/CLAWCIPES_KITCHEN.md +27 -0
- package/docs/COMMANDS.md +266 -0
- package/docs/INSTALLATION.md +80 -0
- package/docs/RECIPE_FORMAT.md +127 -0
- package/docs/TEAM_WORKFLOW.md +62 -0
- package/docs/TUTORIAL_CREATE_RECIPE.md +151 -0
- package/docs/shared-context.md +47 -0
- package/docs/verify-built-in-team-recipes.md +65 -0
- package/index.ts +2244 -0
- package/openclaw.plugin.json +28 -0
- package/package.json +46 -0
- package/recipes/default/customer-support-team.md +246 -0
- package/recipes/default/developer.md +73 -0
- package/recipes/default/development-team.md +389 -0
- package/recipes/default/editor.md +74 -0
- package/recipes/default/product-team.md +298 -0
- package/recipes/default/project-manager.md +69 -0
- package/recipes/default/research-team.md +243 -0
- package/recipes/default/researcher.md +75 -0
- package/recipes/default/social-team.md +205 -0
- package/recipes/default/writing-team.md +228 -0
- package/src/lib/bindings.ts +59 -0
- package/src/lib/cleanup-workspaces.ts +173 -0
- package/src/lib/index.ts +5 -0
- package/src/lib/lanes.ts +63 -0
- package/src/lib/recipe-frontmatter.ts +59 -0
- package/src/lib/remove-team.ts +200 -0
- package/src/lib/scaffold-templates.ts +7 -0
- package/src/lib/shared-context.ts +52 -0
- package/src/lib/ticket-finder.ts +60 -0
- package/src/lib/ticket-workflow.ts +153 -0
package/docs/COMMANDS.md
ADDED
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
# Command reference
|
|
2
|
+
|
|
3
|
+
All commands live under:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
openclaw recipes <command>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## `list`
|
|
10
|
+
List available recipes (builtin + workspace).
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
openclaw recipes list
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Outputs JSON rows:
|
|
17
|
+
- `id`, `name`, `kind`, `source`
|
|
18
|
+
|
|
19
|
+
## `show <id>`
|
|
20
|
+
Print the raw recipe markdown.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
openclaw recipes show development-team
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## `status [id]`
|
|
27
|
+
Check missing skills for a recipe (or all recipes).
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
openclaw recipes status
|
|
31
|
+
openclaw recipes status development-team
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## `scaffold <recipeId>`
|
|
35
|
+
Scaffold a single agent workspace from an **agent** recipe.
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
openclaw recipes scaffold project-manager --agent-id pm --name "Project Manager" --apply-config
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Options:
|
|
42
|
+
- `--agent-id <id>` (required)
|
|
43
|
+
- `--name <name>`
|
|
44
|
+
- `--overwrite` (overwrite recipe-managed files)
|
|
45
|
+
- `--apply-config` (write/update `agents.list[]` in OpenClaw config)
|
|
46
|
+
|
|
47
|
+
## `scaffold-team <recipeId>`
|
|
48
|
+
|
|
49
|
+
### Cron installation config
|
|
50
|
+
If a recipe declares `cronJobs`, scaffold will reconcile those jobs using the plugin config key:
|
|
51
|
+
- `plugins.entries.recipes.config.cronInstallation`: `off | prompt | on`
|
|
52
|
+
- `off`: never install/reconcile
|
|
53
|
+
- `prompt` (default): prompt each run (default answer is **No**)
|
|
54
|
+
- `on`: install/reconcile; new jobs follow `enabledByDefault`
|
|
55
|
+
Scaffold a shared **team workspace** + multiple agents from a **team** recipe.
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
openclaw recipes scaffold-team development-team \
|
|
59
|
+
--team-id development-team-team \
|
|
60
|
+
--overwrite \
|
|
61
|
+
--apply-config
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Options:
|
|
65
|
+
- `--team-id <teamId>` (required)
|
|
66
|
+
- **Must end with `-team`** (enforced)
|
|
67
|
+
- `--overwrite`
|
|
68
|
+
- `--apply-config`
|
|
69
|
+
|
|
70
|
+
Creates a shared team workspace root:
|
|
71
|
+
|
|
72
|
+
- `~/.openclaw/workspace-<teamId>/...`
|
|
73
|
+
|
|
74
|
+
Standard folders:
|
|
75
|
+
- `inbox/`, `outbox/`, `shared/`, `notes/`
|
|
76
|
+
- `work/{backlog,in-progress,testing,done,assignments}`
|
|
77
|
+
- `roles/<role>/...` (role-specific recipe files)
|
|
78
|
+
|
|
79
|
+
Also creates agent config entries under `agents.list[]` (when `--apply-config`), with agent ids:
|
|
80
|
+
- `<teamId>-<role>`
|
|
81
|
+
|
|
82
|
+
## `install <idOrSlug> [--yes]`
|
|
83
|
+
Install skills from ClawHub (confirmation-gated).
|
|
84
|
+
|
|
85
|
+
Default behavior: **global install** into `~/.openclaw/skills`.
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Global (shared across all agents)
|
|
89
|
+
openclaw recipes install agentchat --yes
|
|
90
|
+
|
|
91
|
+
# Agent-scoped (into workspace-<agentId>/skills)
|
|
92
|
+
openclaw recipes install agentchat --yes --agent-id dev
|
|
93
|
+
|
|
94
|
+
# Team-scoped (into workspace-<teamId>/skills)
|
|
95
|
+
openclaw recipes install agentchat --yes --team-id development-team-team
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Behavior:
|
|
99
|
+
- If `idOrSlug` matches a recipe id, installs that recipe’s `requiredSkills` + `optionalSkills`.
|
|
100
|
+
- Otherwise treats it as a ClawHub skill slug.
|
|
101
|
+
- Installs via:
|
|
102
|
+
- `npx clawhub@latest --workdir <targetWorkspace> --dir skills install <slug>` (agent/team)
|
|
103
|
+
- `npx clawhub@latest --workdir ~/.openclaw --dir skills install <slug>` (global)
|
|
104
|
+
- Confirmation-gated unless `--yes`.
|
|
105
|
+
- In non-interactive mode (no TTY), requires `--yes`.
|
|
106
|
+
|
|
107
|
+
## `bind`
|
|
108
|
+
Add/update a multi-agent routing binding (writes `bindings[]` in `~/.openclaw/openclaw.json`).
|
|
109
|
+
|
|
110
|
+
Examples:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Route one Telegram DM to an agent
|
|
114
|
+
openclaw recipes bind --agent-id dev --channel telegram --peer-kind dm --peer-id 6477250615
|
|
115
|
+
|
|
116
|
+
# Route all Telegram traffic to an agent (broad match)
|
|
117
|
+
openclaw recipes bind --agent-id dev --channel telegram
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Notes:
|
|
121
|
+
- `peer.kind` must be one of: `dm|group|channel`.
|
|
122
|
+
- Peer-specific bindings are inserted first (more specific wins).
|
|
123
|
+
|
|
124
|
+
## `unbind`
|
|
125
|
+
Remove routing binding(s) from OpenClaw config (`bindings[]`).
|
|
126
|
+
|
|
127
|
+
Examples:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# Remove a specific DM binding for an agent
|
|
131
|
+
openclaw recipes unbind --agent-id dev --channel telegram --peer-kind dm --peer-id 6477250615
|
|
132
|
+
|
|
133
|
+
# Remove ALL bindings that match this peer (any agent)
|
|
134
|
+
openclaw recipes unbind --channel telegram --peer-kind dm --peer-id 6477250615
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## `bindings`
|
|
138
|
+
Print the current `bindings[]` from OpenClaw config.
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
openclaw recipes bindings
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## `migrate-team`
|
|
145
|
+
Migrate a legacy team scaffold into the new `workspace-<teamId>` layout.
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
openclaw recipes migrate-team --team-id development-team-team --dry-run
|
|
149
|
+
openclaw recipes migrate-team --team-id development-team-team --mode move
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Options:
|
|
153
|
+
- `--dry-run`
|
|
154
|
+
- `--mode move|copy`
|
|
155
|
+
- `--overwrite` (merge into existing destination)
|
|
156
|
+
|
|
157
|
+
## `dispatch`
|
|
158
|
+
Convert a natural-language request into file-first execution artifacts.
|
|
159
|
+
|
|
160
|
+
## `tickets`
|
|
161
|
+
List tickets for a team across the standard workflow stages.
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
openclaw recipes tickets --team-id <teamId>
|
|
165
|
+
openclaw recipes tickets --team-id <teamId> --json
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## `cleanup-workspaces`
|
|
169
|
+
List (dry-run, default) or delete (with `--yes`) temporary test/scaffold team workspaces under your OpenClaw home directory.
|
|
170
|
+
|
|
171
|
+
Safety rails:
|
|
172
|
+
- Only considers `workspace-<teamId>` directories where `<teamId>`:
|
|
173
|
+
- ends with `-team`
|
|
174
|
+
- starts with an allowed prefix (default: `smoke-`, `qa-`, `tmp-`, `test-`)
|
|
175
|
+
- Refuses symlinks
|
|
176
|
+
- Protected teams (at minimum: `development-team`) are never deleted
|
|
177
|
+
|
|
178
|
+
Examples:
|
|
179
|
+
```bash
|
|
180
|
+
# Dry-run (default): list what would be deleted
|
|
181
|
+
openclaw recipes cleanup-workspaces
|
|
182
|
+
|
|
183
|
+
# Actually delete eligible workspaces
|
|
184
|
+
openclaw recipes cleanup-workspaces --yes
|
|
185
|
+
|
|
186
|
+
# Custom prefixes (repeatable)
|
|
187
|
+
openclaw recipes cleanup-workspaces --prefix smoke- --prefix qa- --yes
|
|
188
|
+
|
|
189
|
+
# JSON output
|
|
190
|
+
openclaw recipes cleanup-workspaces --json
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## `move-ticket`
|
|
194
|
+
Move a ticket file between workflow stages and update the ticket’s `Status:` field.
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
openclaw recipes move-ticket --team-id <teamId> --ticket 0007 --to in-progress
|
|
198
|
+
openclaw recipes move-ticket --team-id <teamId> --ticket 0007 --to testing
|
|
199
|
+
openclaw recipes move-ticket --team-id <teamId> --ticket 0007 --to done --completed
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Stages:
|
|
203
|
+
- `backlog` → `Status: queued`
|
|
204
|
+
- `in-progress` → `Status: in-progress`
|
|
205
|
+
- `testing` → `Status: testing`
|
|
206
|
+
- `done` → `Status: done` (optional `Completed:` timestamp)
|
|
207
|
+
|
|
208
|
+
## `assign`
|
|
209
|
+
Assign a ticket to an owner (updates `Owner:` and creates an assignment stub).
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
openclaw recipes assign --team-id <teamId> --ticket 0007 --owner dev
|
|
213
|
+
openclaw recipes assign --team-id <teamId> --ticket 0007 --owner lead
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Owners (current): `dev|devops|lead|test`.
|
|
217
|
+
|
|
218
|
+
## `take`
|
|
219
|
+
Shortcut: assign + move to in-progress.
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
openclaw recipes take --team-id <teamId> --ticket 0007 --owner dev
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## `handoff`
|
|
226
|
+
QA handoff in one step: move a ticket to `work/testing/`, set `Status: testing`, assign to a tester (default `test`), and write/update the assignment stub.
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
openclaw recipes handoff --team-id <teamId> --ticket 0007
|
|
230
|
+
openclaw recipes handoff --team-id <teamId> --ticket 0007 --tester test
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Notes:
|
|
234
|
+
- Creates `work/testing/` if missing.
|
|
235
|
+
- Idempotent: if the ticket is already in `work/testing/`, it won’t re-move it; it will ensure fields + assignment stub.
|
|
236
|
+
|
|
237
|
+
## `complete`
|
|
238
|
+
Shortcut: move to done + ensure `Status: done` + add `Completed:` timestamp.
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
openclaw recipes complete --team-id <teamId> --ticket 0007
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
openclaw recipes dispatch \
|
|
246
|
+
--team-id development-team-team \
|
|
247
|
+
--request "Add a customer-support team recipe" \
|
|
248
|
+
--owner lead
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Options:
|
|
252
|
+
- `--team-id <teamId>` (required)
|
|
253
|
+
- `--request <text>` (optional; prompts in TTY)
|
|
254
|
+
- `--owner dev|devops|lead|test` (default: `dev`)
|
|
255
|
+
- `--yes` (skip review prompt)
|
|
256
|
+
|
|
257
|
+
Creates (createOnly):
|
|
258
|
+
- `workspace-<teamId>/inbox/<timestamp>-<slug>.md`
|
|
259
|
+
- `workspace-<teamId>/work/backlog/<NNNN>-<slug>.md`
|
|
260
|
+
- `workspace-<teamId>/work/assignments/<NNNN>-assigned-<owner>.md`
|
|
261
|
+
|
|
262
|
+
Ticket numbering:
|
|
263
|
+
- Scans `work/backlog`, `work/in-progress`, `work/testing`, `work/done` and uses max+1.
|
|
264
|
+
|
|
265
|
+
Review-before-write:
|
|
266
|
+
- Prints a JSON plan and asks for confirmation unless `--yes`.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Installation
|
|
2
|
+
|
|
3
|
+
This repo is an **OpenClaw plugin** (not a standalone CLI). OpenClaw loads it and exposes the commands under:
|
|
4
|
+
|
|
5
|
+
- `openclaw recipes ...`
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
- OpenClaw installed and working (`openclaw --version`)
|
|
9
|
+
- Node.js available (OpenClaw uses Node to load plugins)
|
|
10
|
+
- (For `recipes install`) you’ll need access to ClawHub (the command runs `npx clawhub@latest ...`).
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
### Option A (preferred): install from npm
|
|
14
|
+
Once published, you can install directly via npm:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
openclaw plugins install @jiggai/recipes
|
|
18
|
+
openclaw gateway restart
|
|
19
|
+
openclaw plugins list
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Option B: install from GitHub
|
|
23
|
+
```bash
|
|
24
|
+
git clone https://github.com/JIGGAI/ClawRecipes.git ~/clawrecipes
|
|
25
|
+
openclaw plugins install --link ~/clawrecipes
|
|
26
|
+
openclaw gateway restart
|
|
27
|
+
openclaw plugins list
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Option B: already cloned
|
|
31
|
+
```bash
|
|
32
|
+
openclaw plugins install --link ~/clawrecipes
|
|
33
|
+
openclaw gateway restart
|
|
34
|
+
openclaw plugins list
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Confirm it loaded:
|
|
38
|
+
```bash
|
|
39
|
+
openclaw plugins list
|
|
40
|
+
# look for id: recipes
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
4) Try a basic command:
|
|
44
|
+
```bash
|
|
45
|
+
openclaw recipes list
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Updating the plugin
|
|
49
|
+
If you pull a newer version from GitHub, restart the gateway so OpenClaw reloads the plugin:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
cd ~/clawrecipes
|
|
53
|
+
git pull
|
|
54
|
+
openclaw gateway restart
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Uninstall / disable
|
|
58
|
+
If installed via local path, remove the plugin install entry and restart:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
openclaw plugins uninstall recipes
|
|
62
|
+
openclaw gateway restart
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
(If `plugins uninstall` is not available in your build, remove the path from your OpenClaw config’s plugin load paths and restart.)
|
|
66
|
+
|
|
67
|
+
## Troubleshooting
|
|
68
|
+
### Plugin loads but commands are missing
|
|
69
|
+
- Restart: `openclaw gateway restart`
|
|
70
|
+
- Check: `openclaw plugins list`
|
|
71
|
+
- Verify `openclaw.plugin.json` exists at repo root and has `id: "recipes"`.
|
|
72
|
+
|
|
73
|
+
### `recipes install` fails
|
|
74
|
+
- Run `npx clawhub@latest --help` to confirm the CLI can run.
|
|
75
|
+
- Ensure you are logged into ClawHub if required (`npx clawhub@latest login`).
|
|
76
|
+
- Confirm the install scope you intended:
|
|
77
|
+
- global: `~/.openclaw/skills/<skill>`
|
|
78
|
+
- agent: `~/.openclaw/workspace-<agentId>/skills/<skill>`
|
|
79
|
+
- team: `~/.openclaw/workspace-<teamId>/skills/<skill>`
|
|
80
|
+
- If you change installs or config, restart: `openclaw gateway restart`.
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Recipe format
|
|
2
|
+
|
|
3
|
+
Recipes are Markdown files with YAML frontmatter.
|
|
4
|
+
|
|
5
|
+
They can be:
|
|
6
|
+
- **agent** recipes: scaffold a single agent workspace
|
|
7
|
+
- **team** recipes: scaffold a team workspace and multiple agents
|
|
8
|
+
|
|
9
|
+
## File locations
|
|
10
|
+
Recipes are discovered from:
|
|
11
|
+
- Built-in: `recipes/default/*.md` inside this plugin
|
|
12
|
+
- Workspace-local: `<workspaceRoot>/recipes/*.md` (default)
|
|
13
|
+
|
|
14
|
+
## Frontmatter (common)
|
|
15
|
+
```yaml
|
|
16
|
+
---
|
|
17
|
+
id: development-team
|
|
18
|
+
name: Development Team
|
|
19
|
+
kind: team # or agent
|
|
20
|
+
version: 0.1.0
|
|
21
|
+
description: ...
|
|
22
|
+
|
|
23
|
+
requiredSkills:
|
|
24
|
+
- some-skill
|
|
25
|
+
optionalSkills:
|
|
26
|
+
- another-skill
|
|
27
|
+
---
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### `requiredSkills` / `optionalSkills`
|
|
31
|
+
These are **ClawHub skill slugs**.
|
|
32
|
+
|
|
33
|
+
They’re used by:
|
|
34
|
+
- `openclaw recipes status` (detect missing skills)
|
|
35
|
+
- `openclaw recipes install <recipeId>` (install the listed skills)
|
|
36
|
+
|
|
37
|
+
## Agent recipes
|
|
38
|
+
Agent recipes use templates + files.
|
|
39
|
+
|
|
40
|
+
### `templates`
|
|
41
|
+
A string map of template keys → template bodies.
|
|
42
|
+
|
|
43
|
+
### `files`
|
|
44
|
+
Each file entry writes a file under the agent’s workspace:
|
|
45
|
+
|
|
46
|
+
```yaml
|
|
47
|
+
files:
|
|
48
|
+
- path: SOUL.md
|
|
49
|
+
template: soul
|
|
50
|
+
mode: createOnly # or overwrite
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Template rendering:
|
|
54
|
+
- Simple `{{var}}` replacement.
|
|
55
|
+
- No conditionals / no code execution.
|
|
56
|
+
|
|
57
|
+
Common vars:
|
|
58
|
+
- `agentId`
|
|
59
|
+
- `agentName`
|
|
60
|
+
|
|
61
|
+
## Team recipes
|
|
62
|
+
Team recipes define a team plus multiple agents:
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
team:
|
|
66
|
+
teamId: development-team
|
|
67
|
+
name: Development Team
|
|
68
|
+
|
|
69
|
+
agents:
|
|
70
|
+
- role: lead
|
|
71
|
+
name: Dev Team Lead
|
|
72
|
+
- role: dev
|
|
73
|
+
name: Software Engineer
|
|
74
|
+
- role: devops
|
|
75
|
+
name: DevOps / SRE
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Team ID and agent IDs
|
|
79
|
+
- **Team IDs must end with `-team`** (enforced by `scaffold-team`).
|
|
80
|
+
- Agent IDs default to: `<teamId>-<role>`
|
|
81
|
+
|
|
82
|
+
### Template namespacing for teams
|
|
83
|
+
For team recipes, file templates are namespaced by role:
|
|
84
|
+
- `lead.soul`, `dev.soul`, etc.
|
|
85
|
+
|
|
86
|
+
If a `files[].template` key does not contain a `.`, ClawRecipes prefixes it with `<role>.`.
|
|
87
|
+
|
|
88
|
+
## Cron jobs (optional)
|
|
89
|
+
Recipes can optionally declare cron jobs to be reconciled during `scaffold` / `scaffold-team`.
|
|
90
|
+
|
|
91
|
+
```yaml
|
|
92
|
+
cronJobs:
|
|
93
|
+
- id: daily-review
|
|
94
|
+
schedule: "0 14 * * 1-5" # 5-field cron
|
|
95
|
+
message: "Daily review: summarize inbox + calendar for today."
|
|
96
|
+
enabledByDefault: false
|
|
97
|
+
timezone: "America/New_York" # optional
|
|
98
|
+
channel: "telegram" # optional (default: last)
|
|
99
|
+
to: "<chatId or phone>" # optional
|
|
100
|
+
description: "Weekday daily review"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Notes:
|
|
104
|
+
- `cronJobs[].id` must be **stable** within the recipe; it’s used for idempotent updates.
|
|
105
|
+
- Safe default behavior is conservative: when `cronInstallation=prompt`, the prompt default is **No**.
|
|
106
|
+
- When the user opts out, jobs are installed **disabled** (so they can be enabled later).
|
|
107
|
+
|
|
108
|
+
## Tool policy
|
|
109
|
+
Recipes can include tool policy, which is written into `agents.list[].tools` when `--apply-config` is used:
|
|
110
|
+
|
|
111
|
+
```yaml
|
|
112
|
+
tools:
|
|
113
|
+
profile: coding
|
|
114
|
+
allow:
|
|
115
|
+
- group:fs
|
|
116
|
+
- group:web
|
|
117
|
+
- group:runtime
|
|
118
|
+
deny: []
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Team recipes can override tools per-agent via `agents[].tools`.
|
|
122
|
+
|
|
123
|
+
## Recommended conventions
|
|
124
|
+
- Keep `requiredSkills` minimal; use `optionalSkills` for “nice to have”.
|
|
125
|
+
- For teams, use file-first work queues:
|
|
126
|
+
- `work/backlog/0001-...md` style tickets
|
|
127
|
+
- filename ordering is the queue ordering
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Team workflow (file-first)
|
|
2
|
+
|
|
3
|
+
ClawRecipes’ differentiator is the **shared team workspace** + a simple, durable, file-first workflow.
|
|
4
|
+
|
|
5
|
+
## Team workspace structure
|
|
6
|
+
When you scaffold a team:
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
~/.openclaw/workspace-<teamId>/
|
|
10
|
+
inbox/
|
|
11
|
+
outbox/
|
|
12
|
+
shared/
|
|
13
|
+
notes/
|
|
14
|
+
work/
|
|
15
|
+
backlog/
|
|
16
|
+
in-progress/
|
|
17
|
+
testing/
|
|
18
|
+
done/
|
|
19
|
+
assignments/
|
|
20
|
+
TEAM.md
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## The loop
|
|
24
|
+
1) **Intake**
|
|
25
|
+
- New requests land in `inbox/`.
|
|
26
|
+
|
|
27
|
+
2) **Plan**
|
|
28
|
+
- Convert the request into a numbered ticket in `work/backlog/`.
|
|
29
|
+
- Filename ordering is the priority queue.
|
|
30
|
+
|
|
31
|
+
3) **Execute**
|
|
32
|
+
- Move ticket file to `work/in-progress/` (or use `take`).
|
|
33
|
+
- Do work; write artifacts into `shared/` or agent workspaces.
|
|
34
|
+
|
|
35
|
+
4) **Test**
|
|
36
|
+
- Move ticket to `work/testing/`.
|
|
37
|
+
- Assign `Owner: test` (or explicitly tag the tester role) and include clear “Verification steps” in the ticket.
|
|
38
|
+
- Tester verifies and either:
|
|
39
|
+
- moves to `work/done/` (pass), or
|
|
40
|
+
- bounces back to `work/in-progress/` with a bug note (fail)
|
|
41
|
+
|
|
42
|
+
5) **Complete**
|
|
43
|
+
- Move ticket to `work/done/` (or use `complete`).
|
|
44
|
+
- Add `Completed:` timestamp (automated by `complete` or `move-ticket --completed`).
|
|
45
|
+
|
|
46
|
+
## Dispatcher command
|
|
47
|
+
The lead can convert a natural-language request into artifacts with:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
openclaw recipes dispatch --team-id <teamId> --request "..." --owner dev
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
This creates:
|
|
54
|
+
- an inbox entry
|
|
55
|
+
- a backlog ticket
|
|
56
|
+
- an assignment stub
|
|
57
|
+
|
|
58
|
+
## Why file-first?
|
|
59
|
+
- Works offline
|
|
60
|
+
- Easy to version control
|
|
61
|
+
- Easy to audit and search
|
|
62
|
+
- Doesn’t depend on any single UI
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Tutorial: create your first recipe
|
|
2
|
+
|
|
3
|
+
This tutorial shows how to create a **team recipe** (shared workspace + multiple agents).
|
|
4
|
+
|
|
5
|
+
You’ll learn:
|
|
6
|
+
- where recipes live
|
|
7
|
+
- how frontmatter works
|
|
8
|
+
- how templates/files are written
|
|
9
|
+
- how to scaffold a team and run the file-first workflow
|
|
10
|
+
|
|
11
|
+
## Step 0 — confirm ClawRecipes is installed
|
|
12
|
+
```bash
|
|
13
|
+
openclaw plugins list
|
|
14
|
+
openclaw recipes list
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Step 1 — create a recipe file in your OpenClaw workspace
|
|
18
|
+
Create:
|
|
19
|
+
|
|
20
|
+
- `~/.openclaw/workspace/recipes/my-first-team.md`
|
|
21
|
+
|
|
22
|
+
Minimal example:
|
|
23
|
+
|
|
24
|
+
```md
|
|
25
|
+
---
|
|
26
|
+
id: my-first-team
|
|
27
|
+
name: My First Team
|
|
28
|
+
kind: team
|
|
29
|
+
version: 0.1.0
|
|
30
|
+
description: A tiny demo team
|
|
31
|
+
|
|
32
|
+
# Optional: skill slugs to install with `openclaw recipes install my-first-team`
|
|
33
|
+
requiredSkills: []
|
|
34
|
+
|
|
35
|
+
team:
|
|
36
|
+
teamId: my-first-team
|
|
37
|
+
|
|
38
|
+
agents:
|
|
39
|
+
- role: lead
|
|
40
|
+
name: Team Lead
|
|
41
|
+
tools:
|
|
42
|
+
profile: coding
|
|
43
|
+
allow: ["group:fs", "group:web"]
|
|
44
|
+
deny: ["exec"]
|
|
45
|
+
|
|
46
|
+
- role: worker
|
|
47
|
+
name: Worker
|
|
48
|
+
tools:
|
|
49
|
+
profile: coding
|
|
50
|
+
allow: ["group:fs", "group:web"]
|
|
51
|
+
deny: ["exec"]
|
|
52
|
+
|
|
53
|
+
templates:
|
|
54
|
+
lead.soul: |
|
|
55
|
+
# SOUL.md
|
|
56
|
+
|
|
57
|
+
You are the lead for {{teamId}}.
|
|
58
|
+
Convert requests into tickets and assign work.
|
|
59
|
+
|
|
60
|
+
lead.agents: |
|
|
61
|
+
# AGENTS.md
|
|
62
|
+
|
|
63
|
+
Team directory: {{teamDir}}
|
|
64
|
+
|
|
65
|
+
Workflow:
|
|
66
|
+
- Intake: check `inbox/`
|
|
67
|
+
- Normalize: create tickets in `work/backlog/`
|
|
68
|
+
- Assign: write stubs in `work/assignments/`
|
|
69
|
+
|
|
70
|
+
worker.soul: |
|
|
71
|
+
# SOUL.md
|
|
72
|
+
|
|
73
|
+
You are a worker on {{teamId}}.
|
|
74
|
+
|
|
75
|
+
worker.agents: |
|
|
76
|
+
# AGENTS.md
|
|
77
|
+
|
|
78
|
+
Team directory: {{teamDir}}
|
|
79
|
+
|
|
80
|
+
How you work:
|
|
81
|
+
- Pick the lowest numbered ticket assigned to you.
|
|
82
|
+
- Move it to `work/in-progress/`.
|
|
83
|
+
- Do the work.
|
|
84
|
+
- When ready for QA, move it to `work/testing/` and assign Owner to `test`.
|
|
85
|
+
- After QA passes, move it to `work/done/` and write a short completion report.
|
|
86
|
+
|
|
87
|
+
files:
|
|
88
|
+
- path: SOUL.md
|
|
89
|
+
template: soul
|
|
90
|
+
mode: createOnly
|
|
91
|
+
- path: AGENTS.md
|
|
92
|
+
template: agents
|
|
93
|
+
mode: createOnly
|
|
94
|
+
|
|
95
|
+
# Default tools if an agent doesn’t override tools above
|
|
96
|
+
tools:
|
|
97
|
+
profile: coding
|
|
98
|
+
allow: ["group:fs", "group:web"]
|
|
99
|
+
deny: ["exec"]
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
# My First Team
|
|
103
|
+
|
|
104
|
+
This is a demo recipe.
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Step 2 — scaffold the team
|
|
108
|
+
Important: team ids must end with `-team`.
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
openclaw recipes scaffold-team my-first-team --team-id my-first-team-team --apply-config
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
You should now have:
|
|
115
|
+
- `~/.openclaw/workspace-my-first-team-team/` (team shared workspace)
|
|
116
|
+
- `~/.openclaw/workspace-my-first-team-team/roles/lead/`
|
|
117
|
+
- `~/.openclaw/workspace-my-first-team-team/roles/worker/`
|
|
118
|
+
|
|
119
|
+
## Step 3 — dispatch a request
|
|
120
|
+
```bash
|
|
121
|
+
openclaw recipes dispatch \
|
|
122
|
+
--team-id my-first-team-team \
|
|
123
|
+
--request "Draft a README for the team" \
|
|
124
|
+
--owner worker
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
This will propose (or write, with `--yes`) three artifacts:
|
|
128
|
+
- an inbox entry
|
|
129
|
+
- a backlog ticket
|
|
130
|
+
- an assignment stub
|
|
131
|
+
|
|
132
|
+
## Step 4 — run the workflow
|
|
133
|
+
Tickets move through lanes:
|
|
134
|
+
- `work/backlog/` → `work/in-progress/` → `work/testing/` → `work/done/`
|
|
135
|
+
|
|
136
|
+
- Move the ticket from `work/backlog/` → `work/in-progress/`
|
|
137
|
+
- Do the work
|
|
138
|
+
- When ready for QA:
|
|
139
|
+
- Move the ticket to `work/testing/`
|
|
140
|
+
- Set `Owner: test` and add **Verification steps** to the ticket
|
|
141
|
+
- After verification:
|
|
142
|
+
- Move the ticket to `work/done/` and add a short completion report
|
|
143
|
+
|
|
144
|
+
## Common mistakes
|
|
145
|
+
- **Forgetting the `-team` suffix** on `--team-id` (required).
|
|
146
|
+
- Using `deny: ["exec"]` on agents that need to run commands.
|
|
147
|
+
- Not restarting the gateway after installing the plugin.
|
|
148
|
+
|
|
149
|
+
## Next steps
|
|
150
|
+
- Read `docs/RECIPE_FORMAT.md` for full frontmatter coverage.
|
|
151
|
+
- Copy and modify a bundled recipe from `docs/BUNDLED_RECIPES.md`.
|