@ariaflowagents/starters 0.2.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.
Files changed (39) hide show
  1. package/README.md +157 -0
  2. package/package.json +36 -0
  3. package/starters/bank-hybrid/.ariaflow/flow/bank-balance-flow.json +26 -0
  4. package/starters/bank-hybrid/.ariaflow/flow/bank-dispute-flow.json +32 -0
  5. package/starters/bank-hybrid/.ariaflow/prompts/bank-balance.md +3 -0
  6. package/starters/bank-hybrid/.ariaflow/prompts/bank-dispute.md +4 -0
  7. package/starters/bank-hybrid/.ariaflow/prompts/bank-triage.md +8 -0
  8. package/starters/bank-hybrid/.ariaflow/tools/collect_identity/index.ts +21 -0
  9. package/starters/bank-hybrid/.ariaflow/tools/collect_identity/tool.json +6 -0
  10. package/starters/bank-hybrid/.ariaflow/tools/collect_identity_balance/index.ts +21 -0
  11. package/starters/bank-hybrid/.ariaflow/tools/collect_identity_balance/tool.json +6 -0
  12. package/starters/bank-hybrid/.ariaflow/tools/collect_identity_dispute/index.ts +21 -0
  13. package/starters/bank-hybrid/.ariaflow/tools/collect_identity_dispute/tool.json +6 -0
  14. package/starters/bank-hybrid/.ariaflow/tools/collect_transaction/index.ts +21 -0
  15. package/starters/bank-hybrid/.ariaflow/tools/collect_transaction/tool.json +6 -0
  16. package/starters/bank-hybrid/.ariaflow/tools/confirm_dispute/index.ts +22 -0
  17. package/starters/bank-hybrid/.ariaflow/tools/confirm_dispute/tool.json +6 -0
  18. package/starters/bank-hybrid/.ariaflow/tools/lookup_balance/index.ts +25 -0
  19. package/starters/bank-hybrid/.ariaflow/tools/lookup_balance/tool.json +6 -0
  20. package/starters/bank-hybrid/README.md +36 -0
  21. package/starters/bank-hybrid/ariaflow.jsonc +42 -0
  22. package/starters/basic/.ariaflow/prompts/support.md +4 -0
  23. package/starters/basic/.ariaflow/skill/shipping/SKILL.md +17 -0
  24. package/starters/basic/.ariaflow/tools/echo/index.ts +14 -0
  25. package/starters/basic/.ariaflow/tools/echo/tool.json +6 -0
  26. package/starters/basic/ariaflow.jsonc +27 -0
  27. package/starters/sales/.ariaflow/data/products.json +44 -0
  28. package/starters/sales/.ariaflow/prompts/sales-closer.md +6 -0
  29. package/starters/sales/.ariaflow/prompts/sales-rep.md +8 -0
  30. package/starters/sales/.ariaflow/prompts/sales-triage.md +8 -0
  31. package/starters/sales/.ariaflow/tools/product_catalog/index.ts +64 -0
  32. package/starters/sales/.ariaflow/tools/product_catalog/tool.json +6 -0
  33. package/starters/sales/README.md +28 -0
  34. package/starters/sales/ariaflow.jsonc +40 -0
  35. package/starters/support/.ariaflow/prompts/support.md +7 -0
  36. package/starters/support/.ariaflow/tools/create_ticket/index.ts +23 -0
  37. package/starters/support/.ariaflow/tools/create_ticket/tool.json +6 -0
  38. package/starters/support/README.md +26 -0
  39. package/starters/support/ariaflow.jsonc +18 -0
package/README.md ADDED
@@ -0,0 +1,157 @@
1
+ # @ariaflowagents/starters
2
+
3
+ Production-ready AriaFlow starter packs for common use cases.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @ariaflowagents/starters @ariaflowagents/config @ai-sdk/openai
9
+ ```
10
+
11
+ ## Available Starters
12
+
13
+ | Starter | Description | Tags |
14
+ |---------|-------------|------|
15
+ | [basic](./starters/basic/) | Simple LLM agent with echo tool and skill loader | starter, beginner, template |
16
+ | [sales](./starters/sales/) | Multi-agent sales system with product catalog | sales, ecommerce, lead-qualification |
17
+ | [support](./starters/support/) | Customer support with ticket creation | support, ticketing, helpdesk |
18
+ | [bank-hybrid](./starters/bank-hybrid/) | Banking triage with balance/dispute flows | banking, finance, hybrid-flow |
19
+
20
+ ## Usage
21
+
22
+ Install the starter package and extend it:
23
+
24
+ ```bash
25
+ npm install @ariaflowagents/starters
26
+ ```
27
+
28
+ Create your `ariaflow.jsonc`:
29
+
30
+ ```jsonc
31
+ {
32
+ "$schema": "https://ariaflow.ai/config.json",
33
+ "extends": "./node_modules/@ariaflowagents/starters/sales/ariaflow.jsonc"
34
+ }
35
+ ```
36
+
37
+ Run it:
38
+
39
+ ```typescript
40
+ import dotenv from 'dotenv';
41
+ import { openai } from '@ai-sdk/openai';
42
+ import { loadAriaflowConfig, createRuntimeFromConfig } from '@ariaflowagents/config';
43
+
44
+ dotenv.config();
45
+
46
+ const loaded = await loadAriaflowConfig({
47
+ configPath: './ariaflow.jsonc',
48
+ modelRegistry: {
49
+ default: openai('gpt-4o-mini') as any,
50
+ },
51
+ });
52
+
53
+ const runtime = createRuntimeFromConfig(loaded);
54
+
55
+ for await (const part of runtime.stream({ input: 'Hello!' })) {
56
+ if (part.type === 'text-delta') {
57
+ process.stdout.write(part.text);
58
+ }
59
+ }
60
+ ```
61
+
62
+ ## Extend a Starter
63
+
64
+ Create your own config that extends the starter:
65
+
66
+ ```jsonc
67
+ {
68
+ "$schema": "https://ariaflow.ai/config.json",
69
+ "extends": "./node_modules/@ariaflowagents/starters/sales/ariaflow.jsonc",
70
+ "runtime": {
71
+ "defaultAgent": "sales-triage"
72
+ },
73
+ "agents": {
74
+ "sales-triage": {
75
+ "prompt": "You are an ENTERPRISE sales agent for Fortune 500 companies. Ask about team size and budget immediately."
76
+ }
77
+ }
78
+ }
79
+ ```
80
+
81
+ ## Add Custom Tools
82
+
83
+ ```jsonc
84
+ {
85
+ "extends": "./node_modules/@ariaflowagents/starters/sales/ariaflow.jsonc",
86
+ "tools": {
87
+ "my_custom_tool": {
88
+ "type": "module",
89
+ "entry": "./tools/my-custom-tool/index.ts"
90
+ }
91
+ },
92
+ "agents": {
93
+ "sales-agent": {
94
+ "tools": ["product_catalog", "my_custom_tool"]
95
+ }
96
+ }
97
+ }
98
+ ```
99
+
100
+ ## Publish Your Own Starter
101
+
102
+ Create a starter package:
103
+
104
+ ```
105
+ my-starter/
106
+ ├── package.json
107
+ ├── ariaflow.jsonc
108
+ ├── .ariaflow/
109
+ │ ├── prompts/
110
+ │ ├── tools/
111
+ │ └── flows/
112
+ └── README.md
113
+ ```
114
+
115
+ ```json
116
+ {
117
+ "name": "@myorg/ariaflow-my-starter",
118
+ "version": "1.0.0",
119
+ "main": "ariaflow.jsonc"
120
+ }
121
+ ```
122
+
123
+ ```bash
124
+ npm publish
125
+ Structure
126
+
127
+ Each starter contains```
128
+
129
+ ## Directory:
130
+
131
+ ```
132
+ starter-name/
133
+ ├── ariaflow.jsonc # Main config file
134
+ ├── .ariaflow/
135
+ │ ├── prompts/ # System prompts (.md)
136
+ │ ├── tools/ # Tool implementations
137
+ │ │ └── tool-name/
138
+ │ │ ├── index.ts
139
+ │ │ └── tool.json
140
+ │ └── flows/ # Flow definitions (.json)
141
+ └── README.md
142
+ ```
143
+
144
+ ## CLI Testing
145
+
146
+ Use the config package to test starters:
147
+
148
+ ```bash
149
+ cd packages/ariaflow-config
150
+ npx tsx examples/run-pack.ts sales
151
+ npx tsx examples/run-pack.ts support
152
+ npx tsx examples/run-pack.ts bank-hybrid
153
+ ```
154
+
155
+ ## License
156
+
157
+ MIT
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@ariaflowagents/starters",
3
+ "version": "0.2.0",
4
+ "description": "Production-ready AriaFlow starter packs - sales, support, banking, and more",
5
+ "main": "starters/index.js",
6
+ "exports": {
7
+ ".": "./starters/index.js",
8
+ "./sales": "./starters/sales/ariaflow.jsonc",
9
+ "./support": "./starters/support/ariaflow.jsonc",
10
+ "./bank-hybrid": "./starters/bank-hybrid/ariaflow.jsonc",
11
+ "./basic": "./starters/basic/ariaflow.jsonc"
12
+ },
13
+ "keywords": [
14
+ "ariaflow",
15
+ "ai-agents",
16
+ "conversational-ai",
17
+ "sales",
18
+ "support",
19
+ "banking",
20
+ "starter",
21
+ "template"
22
+ ],
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://github.com/anomalyco/aria-flow",
27
+ "directory": "packages/ariaflow-starters"
28
+ },
29
+ "bugs": {
30
+ "url": "https://github.com/anomalyco/aria-flow/issues"
31
+ },
32
+ "homepage": "https://ariaflow.ai/docs/starters",
33
+ "publishConfig": {
34
+ "access": "public"
35
+ }
36
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "id": "bank-balance-flow",
3
+ "entry": "verify_identity",
4
+ "defaultRolePrompt": "You are a banking balance specialist. Follow the flow strictly.",
5
+ "nodes": [
6
+ {
7
+ "id": "verify_identity",
8
+ "prompt": "Ask for the customer's full name, last 4 digits of their account, and ZIP code. Use the collect_identity_balance tool once provided.",
9
+ "tools": ["collect_identity_balance"],
10
+ "maxTurns": 3
11
+ },
12
+ {
13
+ "id": "lookup_balance",
14
+ "prompt": "Confirm the account and ask if they want current balance, recent transactions, or both. Use the lookup_balance tool once provided.",
15
+ "tools": ["lookup_balance"],
16
+ "maxTurns": 3
17
+ },
18
+ {
19
+ "id": "summary",
20
+ "prompt": "Share the balance and recent activity summary, then ask if they need anything else.",
21
+ "postActions": [
22
+ { "type": "end", "reason": "balance_shared" }
23
+ ]
24
+ }
25
+ ]
26
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "id": "bank-dispute-flow",
3
+ "entry": "verify_identity",
4
+ "defaultRolePrompt": "You are a banking dispute specialist. Follow the flow strictly.",
5
+ "nodes": [
6
+ {
7
+ "id": "verify_identity",
8
+ "prompt": "Ask for the customer's full name, last 4 digits of their account, and ZIP code. Use the collect_identity_dispute tool once provided.",
9
+ "tools": ["collect_identity_dispute"],
10
+ "maxTurns": 3
11
+ },
12
+ {
13
+ "id": "collect_transaction",
14
+ "prompt": "Ask for the disputed transaction details: date, merchant, and amount. Use the collect_transaction tool once provided.",
15
+ "tools": ["collect_transaction"],
16
+ "maxTurns": 3
17
+ },
18
+ {
19
+ "id": "confirm_dispute",
20
+ "prompt": "Summarize the dispute details and ask the customer to confirm. If they confirm, use the confirm_dispute tool.",
21
+ "tools": ["confirm_dispute"],
22
+ "maxTurns": 3
23
+ },
24
+ {
25
+ "id": "complete",
26
+ "prompt": "Provide the dispute reference ID and explain next steps and timelines.",
27
+ "postActions": [
28
+ { "type": "end", "reason": "dispute_submitted" }
29
+ ]
30
+ }
31
+ ]
32
+ }
@@ -0,0 +1,3 @@
1
+ You are a banking balance specialist.
2
+
3
+ This flow must be strict and step-by-step. Ask only for the required verification details before providing balances.
@@ -0,0 +1,4 @@
1
+ You are a banking dispute specialist.
2
+
3
+ This flow must be strict and step-by-step. Ask only for the information required in the current step.
4
+ Never skip identity verification.
@@ -0,0 +1,8 @@
1
+ You are a banking triage agent.
2
+
3
+ Your job is to route customers to the correct flow.
4
+ - If the customer is disputing a charge, transaction, or suspected fraud, handoff to bank-dispute-flow.
5
+ - If the customer wants balance info or recent activity, handoff to bank-balance-flow.
6
+ - Ask 1 clarifying question if unsure, then route.
7
+
8
+ Keep responses concise and compliant.
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ import { createFlowTransition } from '@ariaflowagents/core';
3
+ import type { ToolDefinition } from '@ariaflowagents/core';
4
+
5
+ export const tool: ToolDefinition = {
6
+ description: 'Collect and verify customer identity for banking flows',
7
+ inputSchema: z.object({
8
+ fullName: z.string().describe('Full legal name'),
9
+ last4: z.string().describe('Last 4 digits of account'),
10
+ zip: z.string().describe('Billing ZIP code'),
11
+ }),
12
+ execute: async ({ fullName, last4, zip }) => {
13
+ return createFlowTransition('collect_transaction', {
14
+ fullName,
15
+ last4,
16
+ zip,
17
+ });
18
+ },
19
+ };
20
+
21
+ export default tool;
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "collect_identity",
3
+ "description": "Collect and verify customer identity for banking flows",
4
+ "type": "module",
5
+ "entry": "./index.ts"
6
+ }
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ import { createFlowTransition } from '@ariaflowagents/core';
3
+ import type { ToolDefinition } from '@ariaflowagents/core';
4
+
5
+ export const tool: ToolDefinition = {
6
+ description: 'Collect and verify identity for balance flow',
7
+ inputSchema: z.object({
8
+ fullName: z.string().describe('Full legal name'),
9
+ last4: z.string().describe('Last 4 digits of account'),
10
+ zip: z.string().describe('Billing ZIP code'),
11
+ }),
12
+ execute: async ({ fullName, last4, zip }) => {
13
+ return createFlowTransition('lookup_balance', {
14
+ fullName,
15
+ last4,
16
+ zip,
17
+ });
18
+ },
19
+ };
20
+
21
+ export default tool;
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "collect_identity_balance",
3
+ "description": "Collect and verify identity for balance flow",
4
+ "type": "module",
5
+ "entry": "./index.ts"
6
+ }
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ import { createFlowTransition } from '@ariaflowagents/core';
3
+ import type { ToolDefinition } from '@ariaflowagents/core';
4
+
5
+ export const tool: ToolDefinition = {
6
+ description: 'Collect and verify identity for dispute flow',
7
+ inputSchema: z.object({
8
+ fullName: z.string().describe('Full legal name'),
9
+ last4: z.string().describe('Last 4 digits of account'),
10
+ zip: z.string().describe('Billing ZIP code'),
11
+ }),
12
+ execute: async ({ fullName, last4, zip }) => {
13
+ return createFlowTransition('collect_transaction', {
14
+ fullName,
15
+ last4,
16
+ zip,
17
+ });
18
+ },
19
+ };
20
+
21
+ export default tool;
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "collect_identity_dispute",
3
+ "description": "Collect and verify identity for dispute flow",
4
+ "type": "module",
5
+ "entry": "./index.ts"
6
+ }
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ import { createFlowTransition } from '@ariaflowagents/core';
3
+ import type { ToolDefinition } from '@ariaflowagents/core';
4
+
5
+ export const tool: ToolDefinition = {
6
+ description: 'Collect disputed transaction details',
7
+ inputSchema: z.object({
8
+ date: z.string().describe('Transaction date'),
9
+ merchant: z.string().describe('Merchant name'),
10
+ amount: z.string().describe('Transaction amount'),
11
+ }),
12
+ execute: async ({ date, merchant, amount }) => {
13
+ return createFlowTransition('confirm_dispute', {
14
+ date,
15
+ merchant,
16
+ amount,
17
+ });
18
+ },
19
+ };
20
+
21
+ export default tool;
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "collect_transaction",
3
+ "description": "Collect disputed transaction details",
4
+ "type": "module",
5
+ "entry": "./index.ts"
6
+ }
@@ -0,0 +1,22 @@
1
+ import { z } from 'zod';
2
+ import { createFlowTransition } from '@ariaflowagents/core';
3
+ import type { ToolDefinition } from '@ariaflowagents/core';
4
+
5
+ export const tool: ToolDefinition = {
6
+ description: 'Confirm the dispute details and finalize submission',
7
+ inputSchema: z.object({
8
+ confirmed: z.boolean().describe('Customer confirmed details'),
9
+ }),
10
+ execute: async ({ confirmed }) => {
11
+ if (!confirmed) {
12
+ return { message: 'Please clarify what needs to be corrected.' };
13
+ }
14
+
15
+ const referenceId = `DSP-${Date.now().toString(36).toUpperCase()}`;
16
+ return createFlowTransition('complete', {
17
+ referenceId,
18
+ });
19
+ },
20
+ };
21
+
22
+ export default tool;
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "confirm_dispute",
3
+ "description": "Confirm the dispute details and finalize submission",
4
+ "type": "module",
5
+ "entry": "./index.ts"
6
+ }
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ import { createFlowTransition } from '@ariaflowagents/core';
3
+ import type { ToolDefinition } from '@ariaflowagents/core';
4
+
5
+ export const tool: ToolDefinition = {
6
+ description: 'Mock balance lookup and recent activity',
7
+ inputSchema: z.object({
8
+ requestType: z.enum(['balance', 'transactions', 'both']).describe('What to return'),
9
+ }),
10
+ execute: async ({ requestType }) => {
11
+ const balance = '$2,845.20';
12
+ const transactions = [
13
+ { date: '2026-01-12', merchant: 'Market Street Coffee', amount: '$6.85' },
14
+ { date: '2026-01-10', merchant: 'Streamline Transit', amount: '$24.00' },
15
+ ];
16
+
17
+ return createFlowTransition('summary', {
18
+ requestType,
19
+ balance,
20
+ transactions,
21
+ });
22
+ },
23
+ };
24
+
25
+ export default tool;
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "lookup_balance",
3
+ "description": "Mock balance lookup and recent activity",
4
+ "type": "module",
5
+ "entry": "./index.ts"
6
+ }
@@ -0,0 +1,36 @@
1
+ # Banking Hybrid Starter
2
+
3
+ Triage agent routing to balance inquiry and dispute flows with hybrid conversational mode.
4
+
5
+ ## Usage
6
+
7
+ Install:
8
+ ```bash
9
+ npm install @ariaflowagents/starters
10
+ ```
11
+
12
+ Extend in your `ariaflow.jsonc`:
13
+ ```jsonc
14
+ {
15
+ "$schema": "https://ariaflow.ai/config.json",
16
+ "extends": "./node_modules/@ariaflowagents/starters/bank-hybrid/ariaflow.jsonc"
17
+ }
18
+ ```
19
+
20
+ ## Included Agents
21
+
22
+ - `bank-triage` (triage) - Routes to specialist flows
23
+ - `bank-dispute-flow` (flow) - Card dispute intake with identity/transaction collection
24
+ - `bank-balance-flow` (flow) - Balance inquiry with identity verification
25
+
26
+ ## Flow Mode
27
+
28
+ Both flows use `hybrid` mode - can handle off-topic questions while in flow.
29
+
30
+ ## Tools
31
+
32
+ - `collect_identity` - Identity verification
33
+ - `collect_identity_balance` / `collect_identity_dispute` - Specialized collection
34
+ - `lookup_balance` - Account balance lookup
35
+ - `collect_transaction` - Transaction details
36
+ - `confirm_dispute` - Dispute confirmation
@@ -0,0 +1,42 @@
1
+ {
2
+ "$schema": "https://ariaflow.ai/config.json",
3
+ "runtime": {
4
+ "defaultAgent": "bank-triage",
5
+ "defaultModel": "default"
6
+ },
7
+ "models": {
8
+ "default": "openai:gpt-4o-mini"
9
+ },
10
+ "agents": {
11
+ "bank-triage": {
12
+ "type": "triage",
13
+ "description": "Routes customers to the correct banking flow",
14
+ "prompt": { "file": "./.ariaflow/prompts/bank-triage.md" },
15
+ "routes": [
16
+ {
17
+ "agentId": "bank-dispute-flow",
18
+ "description": "Handles card or transaction disputes"
19
+ },
20
+ {
21
+ "agentId": "bank-balance-flow",
22
+ "description": "Handles balance checks and recent activity"
23
+ }
24
+ ],
25
+ "defaultAgent": "bank-balance-flow"
26
+ },
27
+ "bank-dispute-flow": {
28
+ "type": "flow",
29
+ "description": "Guided dispute intake flow",
30
+ "prompt": { "file": "./.ariaflow/prompts/bank-dispute.md" },
31
+ "flowRef": "bank-dispute-flow",
32
+ "mode": "hybrid"
33
+ },
34
+ "bank-balance-flow": {
35
+ "type": "flow",
36
+ "description": "Guided balance inquiry flow",
37
+ "prompt": { "file": "./.ariaflow/prompts/bank-balance.md" },
38
+ "flowRef": "bank-balance-flow",
39
+ "mode": "hybrid"
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,4 @@
1
+ You are a concise, friendly support agent.
2
+
3
+ If the user asks for a skill, load it with the skill tool and summarize the instructions.
4
+ If asked to repeat or verify something, use the echo tool.
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: shipping
3
+ description: Provide shipping status guidelines and escalation steps for delayed packages.
4
+ license: MIT
5
+ metadata:
6
+ domain: logistics
7
+ ---
8
+
9
+ # Shipping Support Guidelines
10
+
11
+ Use this when a customer asks about shipping delays.
12
+
13
+ ## Steps
14
+ 1. Confirm the order id and shipping address.
15
+ 2. Check current carrier status.
16
+ 3. If delay exceeds 5 business days, offer escalation.
17
+ 4. Provide a clear next update window.
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ import type { ToolDefinition } from '@ariaflowagents/core';
3
+
4
+ export const tool: ToolDefinition = {
5
+ description: 'Echo back the provided text',
6
+ inputSchema: z.object({
7
+ text: z.string().describe('Text to echo back'),
8
+ }),
9
+ execute: async ({ text }) => {
10
+ return { echoed: text };
11
+ },
12
+ };
13
+
14
+ export default tool;
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "echo",
3
+ "description": "Echo back the provided text",
4
+ "type": "module",
5
+ "entry": "./index.ts"
6
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "$schema": "https://ariaflow.ai/config.json",
3
+ "runtime": {
4
+ "defaultAgent": "support",
5
+ "defaultModel": "default"
6
+ },
7
+ "permissions": {
8
+ "skill": "allow"
9
+ },
10
+ "models": {
11
+ "default": "openai:gpt-4o-mini"
12
+ },
13
+ "agents": {
14
+ "support": {
15
+ "type": "llm",
16
+ "description": "Handles general customer support questions",
17
+ "prompt": { "file": "./.ariaflow/prompts/support.md" },
18
+ "tools": ["echo", "skill"]
19
+ }
20
+ },
21
+ "tools": {
22
+ "skill": {
23
+ "type": "skill-loader",
24
+ "paths": ["./.ariaflow/skill"]
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "products": [
3
+ {
4
+ "name": "Premium Software Suite",
5
+ "description": "All-in-one business management platform",
6
+ "key_benefits": [
7
+ "Increases productivity by 40%",
8
+ "Reduces operational costs",
9
+ "Seamless integration"
10
+ ],
11
+ "price_range": "$99-299/month",
12
+ "target_customers": "SMB, Enterprise"
13
+ }
14
+ ],
15
+ "pricing": {
16
+ "starter": {
17
+ "price": 99,
18
+ "features": [
19
+ "Basic CRM",
20
+ "Email integration"
21
+ ]
22
+ },
23
+ "professional": {
24
+ "price": 199,
25
+ "features": [
26
+ "Advanced analytics",
27
+ "Custom workflows"
28
+ ]
29
+ },
30
+ "enterprise": {
31
+ "price": 299,
32
+ "features": [
33
+ "White-label",
34
+ "API access",
35
+ "Dedicated support"
36
+ ]
37
+ }
38
+ },
39
+ "objection_handlers": {
40
+ "too_expensive": "I understand cost is important. Let's look at the ROI - most clients see 3x return in the first 6 months.",
41
+ "need_time_to_think": "I appreciate you want to make a thoughtful decision. What specific concerns can I address right now?",
42
+ "happy_with_current_solution": "That's great! What would need to change for you to consider switching?"
43
+ }
44
+ }
@@ -0,0 +1,6 @@
1
+ You are a sales closer focused on pricing, objections, and next steps.
2
+
3
+ Use the product_catalog tool to confirm pricing ranges or key benefits.
4
+ - Address objections with empathy and clear reasoning.
5
+ - Propose concrete next steps (demo, trial, or quote).
6
+ - Summarize agreed points and ask for confirmation.
@@ -0,0 +1,8 @@
1
+ You are a sales representative focused on discovery and product fit.
2
+
3
+ Use the product_catalog tool to answer questions about products, features, and benefits.
4
+ - Ask about company size, industry, and goals.
5
+ - Recommend 1-2 products that best match their needs.
6
+ - Keep the tone consultative and helpful.
7
+
8
+ When you identify pricing or objections, suggest a handoff to sales-closer.
@@ -0,0 +1,8 @@
1
+ You are the sales triage agent.
2
+
3
+ Your job is to greet prospects, clarify their needs, and route them to the right specialist.
4
+ - If they want product details, use the handoff tool to route to sales-rep.
5
+ - If they are asking about pricing, objections, or next steps, handoff to sales-closer.
6
+ - If unsure, ask 1-2 clarifying questions before routing.
7
+
8
+ Keep responses concise and professional.
@@ -0,0 +1,64 @@
1
+ import { readFile } from 'fs/promises';
2
+ import { fileURLToPath } from 'url';
3
+ import { dirname, join } from 'path';
4
+ import { z } from 'zod';
5
+ import type { ToolDefinition } from '@ariaflowagents/core';
6
+
7
+ const dataPath = join(dirname(fileURLToPath(import.meta.url)), '../../data/products.json');
8
+ let cachedData: { products?: any[]; pricing?: unknown; objection_handlers?: unknown } | null = null;
9
+
10
+ const inputSchema = z.object({
11
+ query: z.string().optional().describe('Search term for product name or description'),
12
+ includePricing: z.boolean().optional().describe('Include pricing overview'),
13
+ includeObjections: z.boolean().optional().describe('Include objection handling guidance'),
14
+ });
15
+
16
+ function normalize(input: string) {
17
+ return input.toLowerCase().trim();
18
+ }
19
+
20
+ export const tool: ToolDefinition = {
21
+ description: 'Search the product catalog and return relevant product details.',
22
+ inputSchema,
23
+ execute: async ({ query, includePricing, includeObjections }) => {
24
+ if (!cachedData) {
25
+ const raw = await readFile(dataPath, 'utf8');
26
+ cachedData = JSON.parse(raw);
27
+ }
28
+
29
+ const products = cachedData.products ?? [];
30
+ const filter = query ? normalize(query) : '';
31
+ const matches = filter
32
+ ? products.filter(product => {
33
+ const name = normalize(String(product.name ?? ''));
34
+ const description = normalize(String(product.description ?? ''));
35
+ return name.includes(filter) || description.includes(filter);
36
+ })
37
+ : products;
38
+
39
+ const results = matches.slice(0, 5).map(product => ({
40
+ name: product.name,
41
+ description: product.description,
42
+ key_benefits: product.key_benefits,
43
+ price_range: product.price_range,
44
+ target_customers: product.target_customers,
45
+ }));
46
+
47
+ const payload: Record<string, unknown> = {
48
+ results,
49
+ total: matches.length,
50
+ };
51
+
52
+ if (includePricing) {
53
+ payload.pricing = cachedData.pricing ?? null;
54
+ }
55
+
56
+ if (includeObjections) {
57
+ payload.objection_handlers = cachedData.objection_handlers ?? null;
58
+ }
59
+
60
+ return payload;
61
+ },
62
+ };
63
+
64
+ export default tool;
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "product_catalog",
3
+ "description": "Look up product details, pricing, and objection handling guidance",
4
+ "type": "module",
5
+ "entry": "./index.ts"
6
+ }
@@ -0,0 +1,28 @@
1
+ # Sales Starter
2
+
3
+ Multi-agent sales system with product catalog, lead qualification, and closing strategies.
4
+
5
+ ## Usage
6
+
7
+ Install:
8
+ ```bash
9
+ npm install @ariaflowagents/starters
10
+ ```
11
+
12
+ Extend in your `ariaflow.jsonc`:
13
+ ```jsonc
14
+ {
15
+ "$schema": "https://ariaflow.ai/config.json",
16
+ "extends": "./node_modules/@ariaflowagents/starters/sales/ariaflow.jsonc"
17
+ }
18
+ ```
19
+
20
+ ## Included Agents
21
+
22
+ - `sales-triage` - Routes to sales-rep or sales-closer
23
+ - `sales-rep` - Answers product questions using product_catalog tool
24
+ - `sales-closer` - Handles pricing and closing
25
+
26
+ ## Tools
27
+
28
+ - `product_catalog` - Product lookup with pricing and benefits
@@ -0,0 +1,40 @@
1
+ {
2
+ "$schema": "https://ariaflow.ai/config.json",
3
+ "runtime": {
4
+ "defaultAgent": "sales-triage",
5
+ "defaultModel": "default"
6
+ },
7
+ "models": {
8
+ "default": "openai:gpt-4o-mini"
9
+ },
10
+ "agents": {
11
+ "sales-triage": {
12
+ "type": "triage",
13
+ "description": "Routes prospects to the right sales specialist",
14
+ "prompt": { "file": "./.ariaflow/prompts/sales-triage.md" },
15
+ "routes": [
16
+ {
17
+ "agentId": "sales-rep",
18
+ "description": "Handles product discovery and feature questions"
19
+ },
20
+ {
21
+ "agentId": "sales-closer",
22
+ "description": "Handles pricing, objections, and next steps"
23
+ }
24
+ ],
25
+ "defaultAgent": "sales-rep"
26
+ },
27
+ "sales-rep": {
28
+ "type": "llm",
29
+ "description": "Explains products, benefits, and fit",
30
+ "prompt": { "file": "./.ariaflow/prompts/sales-rep.md" },
31
+ "tools": ["product_catalog"]
32
+ },
33
+ "sales-closer": {
34
+ "type": "llm",
35
+ "description": "Handles pricing, objections, and closing",
36
+ "prompt": { "file": "./.ariaflow/prompts/sales-closer.md" },
37
+ "tools": ["product_catalog"]
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,7 @@
1
+ You are a friendly, efficient support agent.
2
+
3
+ - Ask clarifying questions when details are missing.
4
+ - Summarize the customer's issue before proposing a solution.
5
+ - If the issue needs escalation, use the create_ticket tool.
6
+
7
+ Keep responses concise and empathetic.
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ import type { ToolDefinition } from '@ariaflowagents/core';
3
+
4
+ export const tool: ToolDefinition = {
5
+ description: 'Create a support ticket and return the ticket id',
6
+ inputSchema: z.object({
7
+ summary: z.string().describe('Short summary of the issue'),
8
+ priority: z.enum(['low', 'normal', 'high']).default('normal'),
9
+ email: z.string().optional().describe('Customer email if provided'),
10
+ }),
11
+ execute: async ({ summary, priority, email }) => {
12
+ const ticketId = `TCK-${Date.now().toString(36).toUpperCase()}`;
13
+ return {
14
+ ticketId,
15
+ status: 'created',
16
+ summary,
17
+ priority,
18
+ email: email ?? null,
19
+ };
20
+ },
21
+ };
22
+
23
+ export default tool;
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "create_ticket",
3
+ "description": "Create a support ticket and return the ticket id",
4
+ "type": "module",
5
+ "entry": "./index.ts"
6
+ }
@@ -0,0 +1,26 @@
1
+ # Support Starter
2
+
3
+ Customer support system with ticket creation, issue triage, and escalation workflows.
4
+
5
+ ## Usage
6
+
7
+ Install:
8
+ ```bash
9
+ npm install @ariaflowagents/starters
10
+ ```
11
+
12
+ Extend in your `ariaflow.jsonc`:
13
+ ```jsonc
14
+ {
15
+ "$schema": "https://ariaflow.ai/config.json",
16
+ "extends": "./node_modules/@ariaflowagents/starters/support/ariaflow.jsonc"
17
+ }
18
+ ```
19
+
20
+ ## Included Agents
21
+
22
+ - `support` - Handles customer inquiries, creates tickets
23
+
24
+ ## Tools
25
+
26
+ - `create_ticket` - Creates support tickets with priority
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://ariaflow.ai/config.json",
3
+ "runtime": {
4
+ "defaultAgent": "support",
5
+ "defaultModel": "default"
6
+ },
7
+ "models": {
8
+ "default": "openai:gpt-4o-mini"
9
+ },
10
+ "agents": {
11
+ "support": {
12
+ "type": "llm",
13
+ "description": "Handles general customer support inquiries",
14
+ "prompt": { "file": "./.ariaflow/prompts/support.md" },
15
+ "tools": ["create_ticket"]
16
+ }
17
+ }
18
+ }