@jiggai/recipes 0.2.18 → 0.2.21
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/docs/BUNDLED_RECIPES.md +96 -0
- package/docs/TEAM_WORKFLOW.md +46 -4
- package/index.ts +28 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/recipes/default/business-team.md +174 -0
- package/recipes/default/clinic-team.md +157 -0
- package/recipes/default/construction-team.md +161 -0
- package/recipes/default/crypto-trader-team.md +157 -0
- package/recipes/default/development-team.md +1 -1
- package/recipes/default/financial-planner-team.md +160 -0
- package/recipes/default/law-firm-team.md +163 -0
- package/recipes/default/marketing-team.md +276 -0
- package/recipes/default/stock-trader-team.md +160 -0
package/docs/BUNDLED_RECIPES.md
CHANGED
|
@@ -193,6 +193,102 @@ Default tool policy:
|
|
|
193
193
|
- allows `group:runtime`
|
|
194
194
|
- does not deny `exec`
|
|
195
195
|
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
# Teams
|
|
199
|
+
|
|
200
|
+
## 11) `marketing-team` (team)
|
|
201
|
+
**Use when:** you want a full marketing execution loop: SEO + copy + ads + social + design + analytics.
|
|
202
|
+
|
|
203
|
+
Scaffold:
|
|
204
|
+
```bash
|
|
205
|
+
openclaw recipes scaffold-team marketing-team --team-id marketing-team-team --apply-config
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Roles:
|
|
209
|
+
- lead, seo, copywriter, ads, social, designer, analyst
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
# Vertical packs (bundled team recipes)
|
|
214
|
+
|
|
215
|
+
## 12) `business-team` (team)
|
|
216
|
+
**Use when:** you want a general-purpose business execution team.
|
|
217
|
+
|
|
218
|
+
Scaffold:
|
|
219
|
+
```bash
|
|
220
|
+
openclaw recipes scaffold-team business-team --team-id business-team-team --apply-config
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Roles:
|
|
224
|
+
- lead, ops, sales, marketing, finance, analyst
|
|
225
|
+
|
|
226
|
+
## 13) `law-firm-team` (team)
|
|
227
|
+
**Use when:** you want a legal practice workflow: intake → research → drafting → compliance.
|
|
228
|
+
|
|
229
|
+
Scaffold:
|
|
230
|
+
```bash
|
|
231
|
+
openclaw recipes scaffold-team law-firm-team --team-id law-firm-team-team --apply-config
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Roles:
|
|
235
|
+
- lead, intake, researcher, drafter, compliance, ops
|
|
236
|
+
|
|
237
|
+
## 14) `clinic-team` (team)
|
|
238
|
+
**Use when:** you want a clinic ops workflow: intake/scheduling/billing/compliance/patient education.
|
|
239
|
+
|
|
240
|
+
Scaffold:
|
|
241
|
+
```bash
|
|
242
|
+
openclaw recipes scaffold-team clinic-team --team-id clinic-team-team --apply-config
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Roles:
|
|
246
|
+
- lead, intake, scheduler, billing, compliance, educator
|
|
247
|
+
|
|
248
|
+
## 15) `construction-team` (team)
|
|
249
|
+
**Use when:** you want a construction delivery workflow: PM/estimation/scheduling/safety/procurement.
|
|
250
|
+
|
|
251
|
+
Scaffold:
|
|
252
|
+
```bash
|
|
253
|
+
openclaw recipes scaffold-team construction-team --team-id construction-team-team --apply-config
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Roles:
|
|
257
|
+
- lead, pm, estimator, scheduler, safety, procurement
|
|
258
|
+
|
|
259
|
+
## 16) `financial-planner-team` (team)
|
|
260
|
+
**Use when:** you want a financial planning practice workflow.
|
|
261
|
+
|
|
262
|
+
Scaffold:
|
|
263
|
+
```bash
|
|
264
|
+
openclaw recipes scaffold-team financial-planner-team --team-id financial-planner-team-team --apply-config
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Roles:
|
|
268
|
+
- lead, advisor, analyst, tax, insurance, ops
|
|
269
|
+
|
|
270
|
+
## 17) `stock-trader-team` (team)
|
|
271
|
+
**Use when:** you want a trading workflow: research/signals/risk/journaling.
|
|
272
|
+
|
|
273
|
+
Scaffold:
|
|
274
|
+
```bash
|
|
275
|
+
openclaw recipes scaffold-team stock-trader-team --team-id stock-trader-team-team --apply-config
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Roles:
|
|
279
|
+
- lead, researcher, signals, risk, journal, ops
|
|
280
|
+
|
|
281
|
+
## 18) `crypto-trader-team` (team)
|
|
282
|
+
**Use when:** you want a crypto trading workflow with onchain research.
|
|
283
|
+
|
|
284
|
+
Scaffold:
|
|
285
|
+
```bash
|
|
286
|
+
openclaw recipes scaffold-team crypto-trader-team --team-id crypto-trader-team-team --apply-config
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Roles:
|
|
290
|
+
- lead, onchain, news, risk, ops, journal
|
|
291
|
+
|
|
196
292
|
## Copying and modifying bundled recipes
|
|
197
293
|
A good workflow is:
|
|
198
294
|
1) Inspect:
|
package/docs/TEAM_WORKFLOW.md
CHANGED
|
@@ -24,25 +24,67 @@ When you scaffold a team:
|
|
|
24
24
|
1) **Intake**
|
|
25
25
|
- New requests land in `inbox/`.
|
|
26
26
|
|
|
27
|
-
2) **
|
|
27
|
+
2) **(Optional) Nudge / automation**
|
|
28
|
+
- A cron job can periodically ping the team lead to triage `inbox/` and keep work moving.
|
|
29
|
+
|
|
30
|
+
3) **Plan / triage (lead)**
|
|
28
31
|
- Convert the request into a numbered ticket in `work/backlog/`.
|
|
32
|
+
- Fill out: Context, Requirements, Acceptance Criteria, Tasks, Owner, Status, and verification steps.
|
|
33
|
+
- **Every ticket must include a `## Comments` section.** Agents must check/respond to comments on tickets they’re assigned to **or** where they are mentioned via `@<agentname>`.
|
|
29
34
|
- Filename ordering is the priority queue.
|
|
30
35
|
|
|
31
|
-
|
|
36
|
+
4) **Execute (dev/devops)**
|
|
32
37
|
- Move ticket file to `work/in-progress/` (or use `take`).
|
|
33
38
|
- Do work; write artifacts into `shared/` or agent workspaces.
|
|
34
39
|
|
|
35
|
-
|
|
40
|
+
5) **Test**
|
|
36
41
|
- Move ticket to `work/testing/`.
|
|
37
42
|
- Assign `Owner: test` (or explicitly tag the tester role) and include clear “Verification steps” in the ticket.
|
|
38
43
|
- Tester verifies and either:
|
|
39
44
|
- moves to `work/done/` (pass), or
|
|
40
45
|
- bounces back to `work/in-progress/` with a bug note (fail)
|
|
41
46
|
|
|
42
|
-
|
|
47
|
+
6) **Complete**
|
|
43
48
|
- Move ticket to `work/done/` (or use `complete`).
|
|
44
49
|
- Add `Completed:` timestamp (automated by `complete` or `move-ticket --completed`).
|
|
45
50
|
|
|
51
|
+
## Sub-agents + waking up the lead (important)
|
|
52
|
+
Two concepts people often mix up:
|
|
53
|
+
|
|
54
|
+
1) **Chatting with a role agent directly**
|
|
55
|
+
- If an agent id exists (configured under `agents.list`), you can start a chat with it directly via UI/CLI.
|
|
56
|
+
|
|
57
|
+
2) **Asking one agent (usually `main`) to wake/spawn/ping another agent**
|
|
58
|
+
- This uses sub-agent/session tooling, and is gated by the requester’s allowlist.
|
|
59
|
+
|
|
60
|
+
### Why the lead sometimes “never picks it up”
|
|
61
|
+
Even if `openclaw recipes dispatch` created an inbox entry + backlog ticket, the lead won’t act unless:
|
|
62
|
+
- a human opens the lead agent/chat, **or**
|
|
63
|
+
- an automation loop runs (cron triage), **or**
|
|
64
|
+
- `main` is allowed to message/spawn the lead agent.
|
|
65
|
+
|
|
66
|
+
### Allowlisting other agents (subagents.allowAgents)
|
|
67
|
+
To allow `main` to target team role agents (like `development-team-lead`), add this to your OpenClaw config:
|
|
68
|
+
|
|
69
|
+
```json5
|
|
70
|
+
{
|
|
71
|
+
agents: {
|
|
72
|
+
list: [
|
|
73
|
+
{
|
|
74
|
+
id: "main",
|
|
75
|
+
subagents: {
|
|
76
|
+
allowAgents: ["development-team-lead"], // or ["*"] for any configured agent
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Then restart the gateway.
|
|
85
|
+
|
|
86
|
+
Tip: use the `agents_list` tool to see what’s currently allowed.
|
|
87
|
+
|
|
46
88
|
## Dispatcher command
|
|
47
89
|
The lead can convert a natural-language request into artifacts with:
|
|
48
90
|
|
package/index.ts
CHANGED
|
@@ -1330,7 +1330,7 @@ const recipesPlugin = {
|
|
|
1330
1330
|
|
|
1331
1331
|
const inboxMd = `# Inbox — ${teamId}\n\nReceived: ${receivedIso}\n\n## Request\n${requestText}\n\n## Proposed work\n- Ticket: ${ticketNumStr}-${baseSlug}\n- Owner: ${owner}\n\n## Links\n- Ticket: ${path.relative(teamDir, ticketPath)}\n- Assignment: ${path.relative(teamDir, assignmentPath)}\n`;
|
|
1332
1332
|
|
|
1333
|
-
const ticketMd = `# ${ticketNumStr}-${baseSlug}\n\nCreated: ${receivedIso}\nOwner: ${owner}\nStatus: queued\nInbox: ${path.relative(teamDir, inboxPath)}\nAssignment: ${path.relative(teamDir, assignmentPath)}\n\n## Context\n${requestText}\n\n## Requirements\n- (fill in)\n\n## Acceptance criteria\n- (fill in)\n\n## Tasks\n- [ ] (fill in)\n`;
|
|
1333
|
+
const ticketMd = `# ${ticketNumStr}-${baseSlug}\n\nCreated: ${receivedIso}\nOwner: ${owner}\nStatus: queued\nInbox: ${path.relative(teamDir, inboxPath)}\nAssignment: ${path.relative(teamDir, assignmentPath)}\n\n## Context\n${requestText}\n\n## Requirements\n- (fill in)\n\n## Acceptance criteria\n- (fill in)\n\n## Tasks\n- [ ] (fill in)\n\n## Comments\n- (use this section for @mentions, questions, decisions, and dated replies)\n`;
|
|
1334
1334
|
|
|
1335
1335
|
const assignmentMd = `# Assignment — ${ticketNumStr}-${baseSlug}\n\nCreated: ${receivedIso}\nAssigned: ${owner}\n\n## Goal\n${title}\n\n## Ticket\n${path.relative(teamDir, ticketPath)}\n\n## Notes\n- Created by: openclaw recipes dispatch\n`;
|
|
1336
1336
|
|
|
@@ -1353,6 +1353,25 @@ const recipesPlugin = {
|
|
|
1353
1353
|
await writeFileSafely(inboxPath, inboxMd, "createOnly");
|
|
1354
1354
|
await writeFileSafely(ticketPath, ticketMd, "createOnly");
|
|
1355
1355
|
await writeFileSafely(assignmentPath, assignmentMd, "createOnly");
|
|
1356
|
+
|
|
1357
|
+
// Best-effort nudge: enqueue a system event for the team lead session.
|
|
1358
|
+
// This does not spawn the lead; it ensures that when the lead session runs next,
|
|
1359
|
+
// it sees the dispatch immediately.
|
|
1360
|
+
try {
|
|
1361
|
+
const leadAgentId = `${teamId}-lead`;
|
|
1362
|
+
api.runtime.system.enqueueSystemEvent(
|
|
1363
|
+
[
|
|
1364
|
+
`Dispatch created new intake for team: ${teamId}`,
|
|
1365
|
+
`- Inbox: ${path.relative(teamDir, inboxPath)}`,
|
|
1366
|
+
`- Backlog: ${path.relative(teamDir, ticketPath)}`,
|
|
1367
|
+
`- Assignment: ${path.relative(teamDir, assignmentPath)}`,
|
|
1368
|
+
`Action: please triage/normalize the ticket (fill Requirements/AC/tasks) and move it through the workflow.`,
|
|
1369
|
+
].join("\n"),
|
|
1370
|
+
{ sessionKey: `agent:${leadAgentId}:main` },
|
|
1371
|
+
);
|
|
1372
|
+
} catch {
|
|
1373
|
+
// ignore: dispatch should still succeed even if system event enqueue fails
|
|
1374
|
+
}
|
|
1356
1375
|
};
|
|
1357
1376
|
|
|
1358
1377
|
if (options.yes) {
|
|
@@ -2343,14 +2362,22 @@ const recipesPlugin = {
|
|
|
2343
2362
|
|
|
2344
2363
|
const planPath = path.join(notesDir, "plan.md");
|
|
2345
2364
|
const statusPath = path.join(notesDir, "status.md");
|
|
2365
|
+
const goalsIndexPath = path.join(notesDir, "GOALS.md");
|
|
2366
|
+
const goalsDir = path.join(notesDir, "goals");
|
|
2367
|
+
const goalsReadmePath = path.join(goalsDir, "README.md");
|
|
2346
2368
|
const ticketsPath = path.join(teamDir, "TICKETS.md");
|
|
2347
2369
|
|
|
2348
2370
|
const planMd = `# Plan — ${teamId}\n\n- (empty)\n`;
|
|
2349
2371
|
const statusMd = `# Status — ${teamId}\n\n- (empty)\n`;
|
|
2372
|
+
const goalsIndexMd = `# Goals — ${teamId}\n\nThis folder is the canonical home for goals.\n\n## How to use\n- Create one markdown file per goal under: notes/goals/\n- Add a link here for discoverability\n\n## Goals\n- (empty)\n`;
|
|
2373
|
+
const goalsReadmeMd = `# Goals folder — ${teamId}\n\nCreate one markdown file per goal in this directory.\n\nRecommended file naming:\n- short, kebab-case, no leading numbers (e.g. \`reduce-support-backlog.md\`)\n\nLink goals from:\n- notes/GOALS.md\n`;
|
|
2350
2374
|
const ticketsMd = `# Tickets — ${teamId}\n\n## Naming\n- Backlog tickets live in work/backlog/\n- In-progress tickets live in work/in-progress/\n- Testing tickets live in work/testing/\n- Done tickets live in work/done/\n- Filename ordering is the queue: 0001-..., 0002-...\n\n## Stages\n- backlog → in-progress → testing → done\n\n## QA handoff\n- When work is ready for QA: move the ticket to \`work/testing/\` and assign to test.\n\n## Required fields\nEach ticket should include:\n- Title\n- Context\n- Requirements\n- Acceptance criteria\n- Owner (dev/devops/lead/test)\n- Status (queued/in-progress/testing/done)\n\n## Example\n\n\`\`\`md\n# 0001-example-ticket\n\nOwner: dev\nStatus: queued\n\n## Context\n...\n\n## Requirements\n- ...\n\n## Acceptance criteria\n- ...\n\`\`\`\n`;
|
|
2351
2375
|
|
|
2376
|
+
await ensureDir(goalsDir);
|
|
2352
2377
|
await writeFileSafely(planPath, planMd, overwrite ? "overwrite" : "createOnly");
|
|
2353
2378
|
await writeFileSafely(statusPath, statusMd, overwrite ? "overwrite" : "createOnly");
|
|
2379
|
+
await writeFileSafely(goalsIndexPath, goalsIndexMd, overwrite ? "overwrite" : "createOnly");
|
|
2380
|
+
await writeFileSafely(goalsReadmePath, goalsReadmeMd, overwrite ? "overwrite" : "createOnly");
|
|
2354
2381
|
await writeFileSafely(ticketsPath, ticketsMd, overwrite ? "overwrite" : "createOnly");
|
|
2355
2382
|
|
|
2356
2383
|
const agents = recipe.agents ?? [];
|
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: business-team
|
|
3
|
+
name: Business Team
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
description: A small generalist business team (ops, sales, marketing, finance, analyst) that runs execution through a shared workspace.
|
|
6
|
+
kind: team
|
|
7
|
+
cronJobs:
|
|
8
|
+
- id: lead-triage-loop
|
|
9
|
+
name: "Lead triage loop"
|
|
10
|
+
schedule: "*/30 7-23 * * 1-5"
|
|
11
|
+
timezone: "America/New_York"
|
|
12
|
+
message: "Automated lead triage loop (Business Team): triage inbox/tickets, assign work, and update notes/status.md."
|
|
13
|
+
enabledByDefault: false
|
|
14
|
+
- id: execution-loop
|
|
15
|
+
name: "Execution loop"
|
|
16
|
+
schedule: "*/30 7-23 * * 1-5"
|
|
17
|
+
timezone: "America/New_York"
|
|
18
|
+
message: "Automated execution loop (Business Team): make progress on in-progress tickets and update notes/status.md."
|
|
19
|
+
enabledByDefault: false
|
|
20
|
+
requiredSkills: []
|
|
21
|
+
team:
|
|
22
|
+
teamId: business-team
|
|
23
|
+
agents:
|
|
24
|
+
- role: lead
|
|
25
|
+
name: Business Ops Lead
|
|
26
|
+
tools:
|
|
27
|
+
profile: "coding"
|
|
28
|
+
allow: ["group:fs", "group:web", "group:runtime"]
|
|
29
|
+
deny: ["exec"]
|
|
30
|
+
- role: ops
|
|
31
|
+
name: Operations Manager
|
|
32
|
+
tools:
|
|
33
|
+
profile: "coding"
|
|
34
|
+
allow: ["group:fs", "group:web"]
|
|
35
|
+
deny: ["exec"]
|
|
36
|
+
- role: sales
|
|
37
|
+
name: Sales / Partnerships
|
|
38
|
+
tools:
|
|
39
|
+
profile: "coding"
|
|
40
|
+
allow: ["group:fs", "group:web"]
|
|
41
|
+
deny: ["exec"]
|
|
42
|
+
- role: marketing
|
|
43
|
+
name: Marketing / Growth
|
|
44
|
+
tools:
|
|
45
|
+
profile: "coding"
|
|
46
|
+
allow: ["group:fs", "group:web"]
|
|
47
|
+
deny: ["exec"]
|
|
48
|
+
- role: finance
|
|
49
|
+
name: Finance / Bookkeeping
|
|
50
|
+
tools:
|
|
51
|
+
profile: "coding"
|
|
52
|
+
allow: ["group:fs", "group:web"]
|
|
53
|
+
deny: ["exec"]
|
|
54
|
+
- role: analyst
|
|
55
|
+
name: Business Analyst
|
|
56
|
+
tools:
|
|
57
|
+
profile: "coding"
|
|
58
|
+
allow: ["group:fs", "group:web"]
|
|
59
|
+
deny: ["exec"]
|
|
60
|
+
|
|
61
|
+
templates:
|
|
62
|
+
lead.soul: |
|
|
63
|
+
# SOUL.md
|
|
64
|
+
|
|
65
|
+
You are the Business Ops Lead / Dispatcher for {{teamId}}.
|
|
66
|
+
|
|
67
|
+
Core job:
|
|
68
|
+
- Convert incoming requests into scoped tickets.
|
|
69
|
+
- Assign to the right role (ops/sales/marketing/finance/analyst).
|
|
70
|
+
- Keep priorities clear and measurable.
|
|
71
|
+
- Maintain a single source of truth in the shared workspace.
|
|
72
|
+
|
|
73
|
+
lead.agents: |
|
|
74
|
+
# AGENTS.md
|
|
75
|
+
|
|
76
|
+
Team: {{teamId}}
|
|
77
|
+
Team directory: {{teamDir}}
|
|
78
|
+
|
|
79
|
+
## Shared workspace
|
|
80
|
+
- inbox/ — incoming requests and raw notes
|
|
81
|
+
- work/backlog/ — normalized tickets (0001-...)
|
|
82
|
+
- work/in-progress/ — active tickets
|
|
83
|
+
- work/testing/ — reviews/verification
|
|
84
|
+
- work/done/ — completed tickets + DONE notes
|
|
85
|
+
- notes/plan.md — current plan (curated)
|
|
86
|
+
- notes/status.md — current status snapshot
|
|
87
|
+
- shared-context/ — shared references + append-only outputs
|
|
88
|
+
- outbox/ — final deliverables (emails/copy/plans)
|
|
89
|
+
|
|
90
|
+
## Role routing
|
|
91
|
+
- ops → process, vendors, internal operations, SOPs
|
|
92
|
+
- sales → outreach sequences, CRM notes, partnership drafts
|
|
93
|
+
- marketing → positioning, campaigns, landing-page copy
|
|
94
|
+
- finance → pricing, forecasts, bookkeeping checklists
|
|
95
|
+
- analyst → research, competitive scans, metrics
|
|
96
|
+
|
|
97
|
+
## Operating rhythm
|
|
98
|
+
1) Triage inbox/ → tickets.
|
|
99
|
+
2) Keep WIP small (max 1–2 active tickets per role).
|
|
100
|
+
3) Every work session updates notes/status.md.
|
|
101
|
+
|
|
102
|
+
ops.soul: |
|
|
103
|
+
# SOUL.md
|
|
104
|
+
|
|
105
|
+
You are the Operations Manager on {{teamId}}.
|
|
106
|
+
|
|
107
|
+
You create SOPs, checklists, and lightweight processes that remove friction.
|
|
108
|
+
|
|
109
|
+
ops.agents: |
|
|
110
|
+
# AGENTS.md
|
|
111
|
+
|
|
112
|
+
Output:
|
|
113
|
+
- SOPs/checklists → shared-context/sops/
|
|
114
|
+
- Vendor notes → shared-context/vendors/
|
|
115
|
+
- Operational plans → outbox/
|
|
116
|
+
|
|
117
|
+
sales.soul: |
|
|
118
|
+
# SOUL.md
|
|
119
|
+
|
|
120
|
+
You are Sales / Partnerships on {{teamId}}.
|
|
121
|
+
|
|
122
|
+
You write outreach, qualify leads, and draft partnership terms.
|
|
123
|
+
|
|
124
|
+
sales.agents: |
|
|
125
|
+
# AGENTS.md
|
|
126
|
+
|
|
127
|
+
Output:
|
|
128
|
+
- Outreach sequences → outbox/sales/
|
|
129
|
+
- Call notes → shared-context/sales/call-notes/
|
|
130
|
+
- Partnership drafts → outbox/partnerships/
|
|
131
|
+
|
|
132
|
+
marketing.soul: |
|
|
133
|
+
# SOUL.md
|
|
134
|
+
|
|
135
|
+
You are Marketing / Growth on {{teamId}}.
|
|
136
|
+
|
|
137
|
+
You create crisp positioning, campaigns, and landing-page copy that converts.
|
|
138
|
+
|
|
139
|
+
marketing.agents: |
|
|
140
|
+
# AGENTS.md
|
|
141
|
+
|
|
142
|
+
Output:
|
|
143
|
+
- Positioning/messaging → shared-context/marketing/
|
|
144
|
+
- Campaign plans → outbox/marketing/
|
|
145
|
+
- Landing page copy → outbox/marketing/landing-pages/
|
|
146
|
+
|
|
147
|
+
finance.soul: |
|
|
148
|
+
# SOUL.md
|
|
149
|
+
|
|
150
|
+
You are Finance / Bookkeeping on {{teamId}}.
|
|
151
|
+
|
|
152
|
+
You build simple, defensible pricing and forecasts; you keep a paper trail.
|
|
153
|
+
|
|
154
|
+
finance.agents: |
|
|
155
|
+
# AGENTS.md
|
|
156
|
+
|
|
157
|
+
Output:
|
|
158
|
+
- Pricing memos → outbox/finance/
|
|
159
|
+
- Forecasts → outbox/finance/
|
|
160
|
+
- Bookkeeping checklists → shared-context/finance/
|
|
161
|
+
|
|
162
|
+
analyst.soul: |
|
|
163
|
+
# SOUL.md
|
|
164
|
+
|
|
165
|
+
You are the Business Analyst on {{teamId}}.
|
|
166
|
+
|
|
167
|
+
You turn ambiguous questions into structured analysis with clear recommendations.
|
|
168
|
+
|
|
169
|
+
analyst.agents: |
|
|
170
|
+
# AGENTS.md
|
|
171
|
+
|
|
172
|
+
Output:
|
|
173
|
+
- Research briefs → outbox/research/
|
|
174
|
+
- Metrics definitions/dashboards notes → shared-context/metrics/
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: clinic-team
|
|
3
|
+
name: Clinic Team
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
description: A small clinic operations team (intake, scheduling, billing, compliance, patient education) coordinated via a shared workspace.
|
|
6
|
+
kind: team
|
|
7
|
+
cronJobs:
|
|
8
|
+
- id: lead-triage-loop
|
|
9
|
+
name: "Lead triage loop"
|
|
10
|
+
schedule: "*/30 7-23 * * 1-5"
|
|
11
|
+
timezone: "America/New_York"
|
|
12
|
+
message: "Automated lead triage loop (Clinic Team): triage inbox/tickets, assign work, and update notes/status.md."
|
|
13
|
+
enabledByDefault: false
|
|
14
|
+
- id: execution-loop
|
|
15
|
+
name: "Execution loop"
|
|
16
|
+
schedule: "*/30 7-23 * * 1-5"
|
|
17
|
+
timezone: "America/New_York"
|
|
18
|
+
message: "Automated execution loop (Clinic Team): make progress on in-progress tickets and update notes/status.md."
|
|
19
|
+
enabledByDefault: false
|
|
20
|
+
requiredSkills: []
|
|
21
|
+
team:
|
|
22
|
+
teamId: clinic-team
|
|
23
|
+
agents:
|
|
24
|
+
- role: lead
|
|
25
|
+
name: Clinic Administrator / Lead
|
|
26
|
+
tools:
|
|
27
|
+
profile: "coding"
|
|
28
|
+
allow: ["group:fs", "group:web", "group:runtime"]
|
|
29
|
+
deny: ["exec"]
|
|
30
|
+
- role: intake
|
|
31
|
+
name: Patient Intake / Front Desk
|
|
32
|
+
tools:
|
|
33
|
+
profile: "coding"
|
|
34
|
+
allow: ["group:fs", "group:web"]
|
|
35
|
+
deny: ["exec"]
|
|
36
|
+
- role: scheduler
|
|
37
|
+
name: Scheduling Coordinator
|
|
38
|
+
tools:
|
|
39
|
+
profile: "coding"
|
|
40
|
+
allow: ["group:fs", "group:web"]
|
|
41
|
+
deny: ["exec"]
|
|
42
|
+
- role: billing
|
|
43
|
+
name: Billing & Insurance
|
|
44
|
+
tools:
|
|
45
|
+
profile: "coding"
|
|
46
|
+
allow: ["group:fs", "group:web"]
|
|
47
|
+
deny: ["exec"]
|
|
48
|
+
- role: compliance
|
|
49
|
+
name: Compliance / Privacy
|
|
50
|
+
tools:
|
|
51
|
+
profile: "coding"
|
|
52
|
+
allow: ["group:fs", "group:web"]
|
|
53
|
+
deny: ["exec"]
|
|
54
|
+
- role: educator
|
|
55
|
+
name: Patient Education Writer
|
|
56
|
+
tools:
|
|
57
|
+
profile: "coding"
|
|
58
|
+
allow: ["group:fs", "group:web"]
|
|
59
|
+
deny: ["exec"]
|
|
60
|
+
|
|
61
|
+
templates:
|
|
62
|
+
lead.soul: |
|
|
63
|
+
# SOUL.md
|
|
64
|
+
|
|
65
|
+
You are the Clinic Administrator / Lead for {{teamId}}.
|
|
66
|
+
|
|
67
|
+
Core job:
|
|
68
|
+
- Turn operational needs into clear tickets.
|
|
69
|
+
- Keep patient communications accurate, simple, and consistent.
|
|
70
|
+
- Maintain compliance/privacy hygiene in documentation.
|
|
71
|
+
- Keep throughput high (reduce delays, no dropped follow-ups).
|
|
72
|
+
|
|
73
|
+
lead.agents: |
|
|
74
|
+
# AGENTS.md
|
|
75
|
+
|
|
76
|
+
Team directory: {{teamDir}}
|
|
77
|
+
|
|
78
|
+
## Shared workspace
|
|
79
|
+
- inbox/ — requests, phone/email summaries, operational issues
|
|
80
|
+
- work/backlog/ — tickets (0001-...)
|
|
81
|
+
- work/in-progress/ — active tickets
|
|
82
|
+
- work/testing/ — review/verification
|
|
83
|
+
- work/done/ — completed work + DONE notes
|
|
84
|
+
- work/patient-education/ — handouts, FAQs, after-visit summaries
|
|
85
|
+
- work/policies/ — internal policies (privacy, scheduling, billing)
|
|
86
|
+
- notes/status.md — daily status snapshot
|
|
87
|
+
- outbox/ — final artifacts to publish/send
|
|
88
|
+
|
|
89
|
+
intake.soul: |
|
|
90
|
+
# SOUL.md
|
|
91
|
+
|
|
92
|
+
You handle patient intake for {{teamId}}.
|
|
93
|
+
|
|
94
|
+
You produce clear summaries, required info checklists, and next-step instructions.
|
|
95
|
+
|
|
96
|
+
intake.agents: |
|
|
97
|
+
# AGENTS.md
|
|
98
|
+
|
|
99
|
+
Output:
|
|
100
|
+
- Intake templates → work/policies/intake/
|
|
101
|
+
- Call/email summaries → inbox/ (append-only) then ticketization
|
|
102
|
+
|
|
103
|
+
scheduler.soul: |
|
|
104
|
+
# SOUL.md
|
|
105
|
+
|
|
106
|
+
You coordinate scheduling for {{teamId}}.
|
|
107
|
+
|
|
108
|
+
You reduce no-shows and keep schedules accurate.
|
|
109
|
+
|
|
110
|
+
scheduler.agents: |
|
|
111
|
+
# AGENTS.md
|
|
112
|
+
|
|
113
|
+
Output:
|
|
114
|
+
- Scheduling scripts/templates → work/policies/scheduling/
|
|
115
|
+
- Reminder cadences → work/policies/scheduling/reminders.md
|
|
116
|
+
|
|
117
|
+
billing.soul: |
|
|
118
|
+
# SOUL.md
|
|
119
|
+
|
|
120
|
+
You manage billing and insurance workflows for {{teamId}}.
|
|
121
|
+
|
|
122
|
+
You produce step-by-step processes and clear patient-facing explanations.
|
|
123
|
+
|
|
124
|
+
billing.agents: |
|
|
125
|
+
# AGENTS.md
|
|
126
|
+
|
|
127
|
+
Output:
|
|
128
|
+
- Billing SOPs → work/policies/billing/
|
|
129
|
+
- Patient billing FAQs → work/patient-education/billing/
|
|
130
|
+
|
|
131
|
+
compliance.soul: |
|
|
132
|
+
# SOUL.md
|
|
133
|
+
|
|
134
|
+
You oversee compliance and privacy for {{teamId}}.
|
|
135
|
+
|
|
136
|
+
You flag risks and propose compliant alternatives.
|
|
137
|
+
|
|
138
|
+
compliance.agents: |
|
|
139
|
+
# AGENTS.md
|
|
140
|
+
|
|
141
|
+
Output:
|
|
142
|
+
- Privacy/compliance checklists → work/policies/compliance/
|
|
143
|
+
- Policy updates → work/policies/
|
|
144
|
+
|
|
145
|
+
educator.soul: |
|
|
146
|
+
# SOUL.md
|
|
147
|
+
|
|
148
|
+
You write patient education materials for {{teamId}}.
|
|
149
|
+
|
|
150
|
+
You write at an accessible reading level and include practical next steps.
|
|
151
|
+
|
|
152
|
+
educator.agents: |
|
|
153
|
+
# AGENTS.md
|
|
154
|
+
|
|
155
|
+
Output:
|
|
156
|
+
- Handouts/FAQs → work/patient-education/
|
|
157
|
+
- After-visit summaries → work/patient-education/after-visit/
|