@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.
@@ -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:
@@ -24,25 +24,67 @@ When you scaffold a team:
24
24
  1) **Intake**
25
25
  - New requests land in `inbox/`.
26
26
 
27
- 2) **Plan**
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
- 3) **Execute**
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
- 4) **Test**
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
- 5) **Complete**
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 ?? [];
@@ -2,7 +2,7 @@
2
2
  "id": "recipes",
3
3
  "name": "Recipes",
4
4
  "description": "Markdown recipes that scaffold agents and teams (workspace-local).",
5
- "version": "0.2.17",
5
+ "version": "0.2.21",
6
6
  "configSchema": {
7
7
  "type": "object",
8
8
  "additionalProperties": false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jiggai/recipes",
3
- "version": "0.2.18",
3
+ "version": "0.2.21",
4
4
  "description": "ClawRecipes plugin for OpenClaw (markdown recipes -> scaffold agents/teams)",
5
5
  "main": "index.ts",
6
6
  "type": "commonjs",
@@ -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/