@getfrontline/cli 1.0.3 → 1.0.5
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 +173 -7
- package/dist/commands/agents/builder.d.ts +10 -0
- package/dist/commands/agents/builder.d.ts.map +1 -0
- package/dist/commands/agents/builder.js +243 -0
- package/dist/commands/agents/builder.js.map +1 -0
- package/dist/commands/agents/flows.d.ts.map +1 -1
- package/dist/commands/agents/flows.js +253 -25
- package/dist/commands/agents/flows.js.map +1 -1
- package/dist/commands/agents/intents.d.ts +3 -0
- package/dist/commands/agents/intents.d.ts.map +1 -0
- package/dist/commands/agents/intents.js +137 -0
- package/dist/commands/agents/intents.js.map +1 -0
- package/dist/commands/agents/use.d.ts +3 -0
- package/dist/commands/agents/use.d.ts.map +1 -0
- package/dist/commands/agents/use.js +33 -0
- package/dist/commands/agents/use.js.map +1 -0
- package/dist/commands/agents/variables.d.ts +3 -0
- package/dist/commands/agents/variables.d.ts.map +1 -0
- package/dist/commands/agents/variables.js +111 -0
- package/dist/commands/agents/variables.js.map +1 -0
- package/dist/commands/aiModels/index.d.ts +3 -0
- package/dist/commands/aiModels/index.d.ts.map +1 -0
- package/dist/commands/aiModels/index.js +60 -0
- package/dist/commands/aiModels/index.js.map +1 -0
- package/dist/commands/incomingWebhooks/index.d.ts +3 -0
- package/dist/commands/incomingWebhooks/index.d.ts.map +1 -0
- package/dist/commands/incomingWebhooks/index.js +28 -0
- package/dist/commands/incomingWebhooks/index.js.map +1 -0
- package/dist/commands/object/activity.d.ts +3 -0
- package/dist/commands/object/activity.d.ts.map +1 -0
- package/dist/commands/object/{note.js → activity.js} +24 -19
- package/dist/commands/object/activity.js.map +1 -0
- package/dist/commands/object/export.js +3 -3
- package/dist/commands/object/field.js +5 -5
- package/dist/commands/object/index.js +10 -10
- package/dist/commands/object/index.js.map +1 -1
- package/dist/commands/object/option.js +4 -4
- package/dist/commands/object/record-type.js +4 -4
- package/dist/commands/object/record.js +8 -8
- package/dist/commands/object/relation.js +4 -4
- package/dist/commands/object/view.js +9 -9
- package/dist/commands/table/index.d.ts.map +1 -1
- package/dist/commands/table/index.js +0 -4
- package/dist/commands/table/index.js.map +1 -1
- package/dist/commands/tools/index.d.ts +3 -0
- package/dist/commands/tools/index.d.ts.map +1 -0
- package/dist/commands/tools/index.js +113 -0
- package/dist/commands/tools/index.js.map +1 -0
- package/dist/commands/util/uuid.d.ts +3 -0
- package/dist/commands/util/uuid.d.ts.map +1 -0
- package/dist/commands/util/uuid.js +15 -0
- package/dist/commands/util/uuid.js.map +1 -0
- package/dist/commands/workflows/analytics.d.ts.map +1 -1
- package/dist/commands/workflows/analytics.js +9 -3
- package/dist/commands/workflows/analytics.js.map +1 -1
- package/dist/commands/workflows/common.d.ts +39 -0
- package/dist/commands/workflows/common.d.ts.map +1 -0
- package/dist/commands/workflows/common.js +45 -0
- package/dist/commands/workflows/common.js.map +1 -0
- package/dist/commands/workflows/create.d.ts +3 -0
- package/dist/commands/workflows/create.d.ts.map +1 -0
- package/dist/commands/workflows/create.js +41 -0
- package/dist/commands/workflows/create.js.map +1 -0
- package/dist/commands/workflows/delete.d.ts +3 -0
- package/dist/commands/workflows/delete.d.ts.map +1 -0
- package/dist/commands/workflows/delete.js +20 -0
- package/dist/commands/workflows/delete.js.map +1 -0
- package/dist/commands/workflows/describe.d.ts +3 -0
- package/dist/commands/workflows/describe.d.ts.map +1 -0
- package/dist/commands/workflows/describe.js +40 -0
- package/dist/commands/workflows/describe.js.map +1 -0
- package/dist/commands/workflows/edges.d.ts +3 -0
- package/dist/commands/workflows/edges.d.ts.map +1 -0
- package/dist/commands/workflows/edges.js +50 -0
- package/dist/commands/workflows/edges.js.map +1 -0
- package/dist/commands/workflows/graph.d.ts +3 -0
- package/dist/commands/workflows/graph.d.ts.map +1 -0
- package/dist/commands/workflows/graph.js +47 -0
- package/dist/commands/workflows/graph.js.map +1 -0
- package/dist/commands/workflows/nodes.d.ts +3 -0
- package/dist/commands/workflows/nodes.d.ts.map +1 -0
- package/dist/commands/workflows/nodes.js +68 -0
- package/dist/commands/workflows/nodes.js.map +1 -0
- package/dist/commands/workflows/update.d.ts +3 -0
- package/dist/commands/workflows/update.d.ts.map +1 -0
- package/dist/commands/workflows/update.js +42 -0
- package/dist/commands/workflows/update.js.map +1 -0
- package/dist/commands/workflows/use.d.ts +3 -0
- package/dist/commands/workflows/use.d.ts.map +1 -0
- package/dist/commands/workflows/use.js +34 -0
- package/dist/commands/workflows/use.js.map +1 -0
- package/dist/commands/workflows/variables.d.ts +3 -0
- package/dist/commands/workflows/variables.d.ts.map +1 -0
- package/dist/commands/workflows/variables.js +105 -0
- package/dist/commands/workflows/variables.js.map +1 -0
- package/dist/index.js +50 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +9 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +54 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/httpClient.d.ts +2 -1
- package/dist/lib/httpClient.d.ts.map +1 -1
- package/dist/lib/httpClient.js +5 -2
- package/dist/lib/httpClient.js.map +1 -1
- package/dist/max/ui/banner.js +15 -15
- package/dist/max.js +7 -1
- package/dist/max.js.map +1 -1
- package/dist/scripts/postinstall.d.ts.map +1 -1
- package/dist/scripts/postinstall.js +8 -0
- package/dist/scripts/postinstall.js.map +1 -1
- package/dist/skills/agent-builder/SKILL.md +88 -0
- package/dist/skills/aggregations/SKILL.md +7 -7
- package/dist/skills/ai-models/SKILL.md +43 -0
- package/dist/skills/auth-and-profiles/SKILL.md +1 -1
- package/dist/skills/crm-setup/SKILL.md +66 -48
- package/dist/skills/crud-operations/SKILL.md +2 -2
- package/dist/skills/export-and-delete/SKILL.md +5 -5
- package/dist/skills/files/SKILL.md +4 -4
- package/dist/skills/filter-and-query/SKILL.md +7 -7
- package/dist/skills/flow-builder/SKILL.md +124 -0
- package/dist/skills/frontline-agents/SKILL.md +152 -3
- package/dist/skills/frontline-internals/SKILL.md +7 -7
- package/dist/skills/frontline-workflows/SKILL.md +170 -3
- package/dist/skills/incoming-webhooks/SKILL.md +36 -0
- package/dist/skills/notes-and-tasks/SKILL.md +29 -29
- package/dist/skills/pipeline-setup/SKILL.md +13 -13
- package/dist/skills/relations/SKILL.md +15 -15
- package/dist/skills/resource-creation/SKILL.md +70 -1
- package/dist/skills/schema-design/SKILL.md +21 -14
- package/dist/skills/tools/SKILL.md +65 -0
- package/dist/skills/variables/SKILL.md +82 -0
- package/dist/skills/workflow-builder/SKILL.md +426 -0
- package/package.json +51 -51
- package/dist/commands/object/note.d.ts +0 -3
- package/dist/commands/object/note.d.ts.map +0 -1
- package/dist/commands/object/note.js.map +0 -1
- package/dist/commands/table/note.d.ts +0 -3
- package/dist/commands/table/note.d.ts.map +0 -1
- package/dist/commands/table/note.js +0 -62
- package/dist/commands/table/note.js.map +0 -1
- package/dist/commands/table/task.d.ts +0 -3
- package/dist/commands/table/task.d.ts.map +0 -1
- package/dist/commands/table/task.js +0 -88
- package/dist/commands/table/task.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: frontline-agents
|
|
3
|
-
description: List, filter, and
|
|
3
|
+
description: List, filter, inspect, and manage Frontline AI agents and their flows using the Frontline CLI. Use when the user asks about agents, flow CRUD, flow graph nodes/edges, status, or analytics.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## Prerequisites
|
|
@@ -10,6 +10,94 @@ description: List, filter, and inspect Frontline AI agents using the Frontline C
|
|
|
10
10
|
|
|
11
11
|
## Commands
|
|
12
12
|
|
|
13
|
+
## Agent Builder
|
|
14
|
+
|
|
15
|
+
Create an agent and store it as the active agent:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
frontline agents create --name "Support Agent"
|
|
19
|
+
frontline agents describe
|
|
20
|
+
frontline agents update --name "Support Agent v2"
|
|
21
|
+
frontline agents deploy --offline false
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Use `--no-use` on `create` if you do not want to change the active agent. Use
|
|
25
|
+
`--agent-id <id>` on scoped commands to override the active agent in scripts.
|
|
26
|
+
|
|
27
|
+
Delete uses the public API soft-delete flow:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
frontline agents delete
|
|
31
|
+
frontline agents delete --agent-id <agentId>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Manage core agent settings with JSON payloads validated by the API:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
frontline ai-models list --type TEXT --table
|
|
38
|
+
frontline agents agent-setting get
|
|
39
|
+
frontline agents agent-setting update --data '{"instructions":"Answer concisely.","temperature":0.2,"aiModelId":1}'
|
|
40
|
+
frontline agents agent-setting update --data '{"customToolIds":[123,456],"instructions":"Use the selected tools when needed.","temperature":0.2,"aiModelId":1}'
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Create API call tools first with `frontline tools create`; then assign them by
|
|
44
|
+
ID through `customToolIds`.
|
|
45
|
+
Use TEXT AI model IDs from `frontline ai-models list --type TEXT` as
|
|
46
|
+
`aiModelId`. The CLI validates referenced IDs in the same
|
|
47
|
+
`agents agent-setting update` command when the Public API exposes the referenced
|
|
48
|
+
resource, including `aiModelId`, `customToolIds`, and `selectedTables[].id`.
|
|
49
|
+
The backend is still the source of truth for every existence and ownership
|
|
50
|
+
check.
|
|
51
|
+
|
|
52
|
+
Manage theme fields. Image upload is not part of this public CLI surface; pass
|
|
53
|
+
existing image URLs or `null`.
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
frontline agents theme get
|
|
57
|
+
frontline agents theme update --data '{"title":"Support","initialMessage":"Hi! How can I help?","placeholder":"Type your message...","avatar":null,"bubbleImage":null,"bubbleColor":"#111827","userMessageColor":"#2563eb","agentMessageColor":"#f3f4f6","bubbleAlignment":"RIGHT","progressIndicator":"DYNAMIC","verticalPositionInPixels":24}'
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Manage channel settings:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
frontline agents settings get
|
|
64
|
+
frontline agents settings get livechat
|
|
65
|
+
frontline agents settings update whatsapp --data '{"splitMessages":true,"splitCharacterLimit":500,"conversationClose":"NEVER","closeAfter":null,"timeUnit":null,"sendCloseMessage":false,"closeMessageType":"STATIC","closeMessage":null,"closeInstruction":null}'
|
|
66
|
+
frontline agents settings list-channels --table
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Mutating commands require a USER API key.
|
|
70
|
+
|
|
71
|
+
## Variables And Intents
|
|
72
|
+
|
|
73
|
+
Agent-scoped variables and intents use the active agent by default. Override with
|
|
74
|
+
`--agent-id <id>` in scripts.
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
frontline agents variables list --table
|
|
78
|
+
frontline agents variables all
|
|
79
|
+
frontline agents variables create --name customer_name --description "Customer name"
|
|
80
|
+
frontline agents variables describe 123
|
|
81
|
+
frontline agents variables update 123 --name customer_name --pattern "^[A-Za-z ]+$"
|
|
82
|
+
frontline agents variables delete 123
|
|
83
|
+
frontline agents variables check-name customer_name
|
|
84
|
+
|
|
85
|
+
frontline agents intents list --table
|
|
86
|
+
frontline agents intents all
|
|
87
|
+
frontline agents intents create --name cancellation --phrases '["cancel order","stop subscription"]'
|
|
88
|
+
frontline agents intents describe 10
|
|
89
|
+
frontline agents intents update 10 --name cancellation --phrases '[{"id":1,"phrase":"cancel order"},{"phrase":"stop order"}]'
|
|
90
|
+
frontline agents intents delete 10
|
|
91
|
+
frontline agents intents generate-phrases --name cancellation --samples '["cancel order"]' --amount 5
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Use variables inside flow text fields as `{VARIABLE_NAME}`. The name must match
|
|
95
|
+
the saved variable name exactly. Flow fields with variable replacement include
|
|
96
|
+
API `url`, `headers[].value`, `parameters[].value`, `body`; Say AI `message` and
|
|
97
|
+
`prompt`; Response AI `instructions`; Tools AI `instructions`; Conditional
|
|
98
|
+
Routing AI `conditions[].expression`; and Dynamic Tables `rowId`, `search`, and
|
|
99
|
+
`rowData` values.
|
|
100
|
+
|
|
13
101
|
### List all agents
|
|
14
102
|
|
|
15
103
|
```bash
|
|
@@ -39,12 +127,13 @@ frontline agents list --json
|
|
|
39
127
|
### Get flows for a specific agent
|
|
40
128
|
|
|
41
129
|
```bash
|
|
42
|
-
frontline agents flows <
|
|
130
|
+
frontline agents flows [agentId] [--agent-id <id>] [--status <status>] [--json] [--debug]
|
|
43
131
|
```
|
|
44
132
|
|
|
45
133
|
| Flag | Description |
|
|
46
134
|
| ------------------- | -------------------------------------- |
|
|
47
|
-
| `<agentId>` |
|
|
135
|
+
| `<agentId>` | Optional agent ID |
|
|
136
|
+
| `--agent-id <id>` | Override the active agent |
|
|
48
137
|
| `--status <status>` | Filter by flow status |
|
|
49
138
|
| `--json` | Output raw JSON |
|
|
50
139
|
| `--api-key <key>` | Override API key |
|
|
@@ -63,6 +152,66 @@ frontline agents flows abc-123 --status active --json
|
|
|
63
152
|
|
|
64
153
|
**Output columns:** `id`, `name`, `status`, `runCount`, `createdAt`
|
|
65
154
|
|
|
155
|
+
## Flow CRUD And Context
|
|
156
|
+
|
|
157
|
+
Select an agent once:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
frontline agents use <agentId>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Then manage its flows:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
frontline agents flows list
|
|
167
|
+
frontline agents flows create --name "Order Routing" --description "Routes order questions"
|
|
168
|
+
frontline agents flows use <flowId>
|
|
169
|
+
frontline agents flows describe --include-nodes
|
|
170
|
+
frontline agents flows update --name "Order Routing v2" --status ACTIVE
|
|
171
|
+
frontline agents flows delete
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
`create` selects the new flow by default. Use `--agent-id` and `--flow-id` to
|
|
175
|
+
override saved context in scripts.
|
|
176
|
+
|
|
177
|
+
## Flow Graphs
|
|
178
|
+
|
|
179
|
+
Inspect before changing:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
frontline agents flows graph --table
|
|
183
|
+
frontline agents flows nodes list
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Create a minimal flow:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
frontline agents flows nodes create --data '{"nodeId":"start_1","type":"START","position":{"positionX":0,"positionY":0}}'
|
|
190
|
+
frontline agents flows nodes create --data '{"nodeId":"say_1","type":"SAY_AI","position":{"positionX":320,"positionY":0},"data":{"type":"SAY_AI","sayWithAi":false,"message":"Hello!"}}'
|
|
191
|
+
frontline agents flows edges add --source start_1 --source-handle default --target say_1 --target-handle default
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Update and delete:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
frontline agents flows nodes update say_1 --data '{"alias":"Greeting"}'
|
|
198
|
+
frontline agents flows nodes delete say_1
|
|
199
|
+
frontline agents flows edges remove --source start_1 --source-handle default --target say_1 --target-handle default
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Supported flow node types:
|
|
203
|
+
|
|
204
|
+
`START`, `TRIGGER_INTENT`, `SAY_AI`, `RESPONSE_AI`, `TOOLS_AI`, `API`,
|
|
205
|
+
`CONDITIONAL_ROUTING`, `DYNAMIC_TABLES`.
|
|
206
|
+
|
|
207
|
+
Validation rules:
|
|
208
|
+
|
|
209
|
+
- Use exactly one initial node: `START` or `TRIGGER_INTENT`.
|
|
210
|
+
- `data.type` must match `type` when `data` is present.
|
|
211
|
+
- Edges must reference existing source and target nodes.
|
|
212
|
+
- No self-edges and no cycles.
|
|
213
|
+
- `CONDITIONAL_ROUTING` and `TOOLS_AI` can use multiple outgoing handles; other nodes use one outgoing edge.
|
|
214
|
+
|
|
66
215
|
### Get analytics for a specific agent
|
|
67
216
|
|
|
68
217
|
```bash
|
|
@@ -24,10 +24,10 @@ Frontline ships with four core objects that form the foundation of every
|
|
|
24
24
|
account. They are pre-provisioned and cannot be deleted.
|
|
25
25
|
|
|
26
26
|
```
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
companies — Organizations / accounts
|
|
28
|
+
people — Individual contacts
|
|
29
|
+
deals — Sales opportunities
|
|
30
|
+
tickets — Support or service requests
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
### Built-in Relations
|
|
@@ -118,8 +118,8 @@ that aggregate and summarize information at the People and Company level.
|
|
|
118
118
|
Use this checklist whenever you are about to create a new object, table, or field:
|
|
119
119
|
|
|
120
120
|
1. **Is this already a base object?**
|
|
121
|
-
Check `frontline object list` — `
|
|
122
|
-
`
|
|
121
|
+
Check `frontline object list` — `companies`, `people`,
|
|
122
|
+
`deals`, `tickets` may already fit.
|
|
123
123
|
|
|
124
124
|
2. **Is this interaction data?**
|
|
125
125
|
If the new entity stores emails, messages, calls, or any user-to-contact
|
|
@@ -204,6 +204,6 @@ points to keep record profiles fresh:
|
|
|
204
204
|
│ • Updates Vector Store for context-aware AI reasoning │
|
|
205
205
|
│ │
|
|
206
206
|
│ BASE OBJECTS │
|
|
207
|
-
│
|
|
207
|
+
│ companies people deals tickets │
|
|
208
208
|
└─────────────────────────────────────────────────────────────────┘
|
|
209
209
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: frontline-workflows
|
|
3
|
-
description:
|
|
3
|
+
description: Create, edit, connect, inspect, and delete Frontline automation workflows using the Frontline CLI. Use when the user asks to build workflows, add nodes or edges, manage workflow context, inspect status, or view analytics.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## Prerequisites
|
|
@@ -36,15 +36,182 @@ frontline workflows list --status active --json
|
|
|
36
36
|
|
|
37
37
|
**Output columns:** `id`, `name`, `status`, `triggerType`, `runsCount`, `lastRunDate`
|
|
38
38
|
|
|
39
|
+
### Create and select a workflow
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
frontline workflows create --name "Daily CRM Sync" [--description "..."]
|
|
43
|
+
frontline workflows use <workflowId>
|
|
44
|
+
frontline workflows describe [--include-nodes]
|
|
45
|
+
frontline workflows graph [--table]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`create` saves the created workflow ID as the active workflow for the current
|
|
49
|
+
profile. `use` changes the active workflow. All graph commands accept
|
|
50
|
+
`--workflow-id <id>` to override the active workflow, which is preferred for
|
|
51
|
+
scripts and CI.
|
|
52
|
+
|
|
53
|
+
### Update or delete a workflow
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
frontline workflows update --status ACTIVE # name is optional; fetched automatically if omitted
|
|
57
|
+
frontline workflows update --name "Daily CRM Sync" --status ACTIVE
|
|
58
|
+
frontline workflows delete
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Use a USER API key for mutations. GENERAL keys can still read account-level
|
|
62
|
+
workflow data where the API allows it.
|
|
63
|
+
|
|
64
|
+
### Manage variables
|
|
65
|
+
|
|
66
|
+
Workflow variable commands use the active workflow by default. Override with
|
|
67
|
+
`--workflow-id <id>` in scripts and CI.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
frontline workflows variables list --table
|
|
71
|
+
frontline workflows variables all
|
|
72
|
+
frontline workflows variables create --name order_id --description "Order ID"
|
|
73
|
+
frontline workflows variables describe 123
|
|
74
|
+
frontline workflows variables update 123 --name order_id --pattern "^[0-9]+$"
|
|
75
|
+
frontline workflows variables delete 123
|
|
76
|
+
frontline workflows variables check-name order_id
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Use variables inside text fields as `{VARIABLE_NAME}`. Automation workflows also
|
|
80
|
+
make each node output available by node ID, so a node with `nodeId` `api_1` can be
|
|
81
|
+
referenced later as `{api_1}`.
|
|
82
|
+
|
|
83
|
+
## Building Workflow Graphs
|
|
84
|
+
|
|
85
|
+
Always inspect the graph before changing it:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
frontline workflows graph --table
|
|
89
|
+
frontline workflows nodes list --table
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### nodeId Format
|
|
93
|
+
|
|
94
|
+
All node IDs **must** follow the pattern `node_<uuid>`. Names like `trigger_1` or `api_1` will fail with a validation error.
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
node_a1b2c3d4-e5f6-7890-abcd-ef1234567890
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Create nodes
|
|
101
|
+
|
|
102
|
+
Trigger node (CONTACT_CREATED):
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
frontline workflows nodes create --data '{"nodeId":"node_11111111-1111-1111-1111-111111111111","type":"TRIGGER","position":{"positionX":0,"positionY":0},"data":{"type":"TRIGGER","triggerType":"CONTACT_CREATED"}}'
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Incoming webhook trigger — first create the webhook resource:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
frontline incoming-webhooks create --name "My Webhook"
|
|
112
|
+
# Save the returned id
|
|
113
|
+
frontline workflows nodes create --data '{"nodeId":"node_11111111-1111-1111-1111-111111111111","type":"TRIGGER","position":{"positionX":0,"positionY":0},"data":{"type":"TRIGGER","triggerType":"INCOMING_WEBHOOK","triggerByWebhookIds":["<incoming-webhook-id>"]}}'
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
When this fires, the POST body is available as `{webhook_payload}` in all downstream nodes.
|
|
117
|
+
|
|
118
|
+
API action node:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
frontline workflows nodes create --data '{"nodeId":"node_22222222-2222-2222-2222-222222222222","type":"API","position":{"positionX":320,"positionY":0},"data":{"type":"API","url":"https://example.com","method":"GET","headers":[]}}'
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Supported automation node types:
|
|
125
|
+
|
|
126
|
+
`TRIGGER`, `SCHEDULED_TRIGGER`, `WEBHOOK`, `TOOLS_AI`, `API`,
|
|
127
|
+
`CONDITIONAL_ROUTING`, `AI_CAPTURE`, `DATA_TRANSFORMER`, `DYNAMIC_TABLES`,
|
|
128
|
+
`SEND_MESSAGE`, `TRANSCRIPTION`.
|
|
129
|
+
|
|
130
|
+
### DYNAMIC_TABLES node
|
|
131
|
+
|
|
132
|
+
Used to create, update, delete, or search records in an object. Always get the object schema first:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
frontline object get <object-name>
|
|
136
|
+
# id → tableId, record_types[0].id → recordTypeId, fields[].name → rowData keys
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
`rowData` maps **field names** (e.g. `"First Name"`, `"Email"`) — not UUIDs — to static values or `{VARIABLE_NAME}` references. `inputModeByField` sets `"INPUT"` (static) or `"VARIABLE"` (interpolated) per field name. All variables used must exist and be populated by a prior node.
|
|
140
|
+
|
|
141
|
+
**Variables are plain text substitutions** — `{my_var}` is replaced with the exact string stored in that variable. There is no dot-access: `{webhook_payload.firstName}` is not valid.
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
frontline workflows nodes create --data '{"nodeId":"node_22222222-2222-2222-2222-222222222222","type":"DYNAMIC_TABLES","position":{"positionX":640,"positionY":0},"data":{"type":"DYNAMIC_TABLES","tableId":2,"recordTypeId":2,"actionType":"CREATE","rowData":{"First Name":"{first_name}","Email":"{email}"},"inputModeByField":{"First Name":"VARIABLE","Email":"VARIABLE"}}}'
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
`actionType` values: `CREATE`, `UPDATE`, `DELETE`, `SEARCH`, `SEARCH_BY_ID`.
|
|
148
|
+
|
|
149
|
+
### Connect nodes
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
frontline workflows edges add \
|
|
153
|
+
--source node_11111111-1111-1111-1111-111111111111 \
|
|
154
|
+
--source-handle default \
|
|
155
|
+
--target node_22222222-2222-2222-2222-222222222222 \
|
|
156
|
+
--target-handle default
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
The API enforces one outgoing edge per node, no self-edges, source/target
|
|
160
|
+
existence, and no cycles.
|
|
161
|
+
|
|
162
|
+
### Edit and delete nodes
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
frontline workflows nodes update node_22222222-2222-2222-2222-222222222222 --data '{"alias":"Fetch external data"}'
|
|
166
|
+
frontline workflows nodes delete node_22222222-2222-2222-2222-222222222222
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Deleting a node also removes incoming and outgoing edges.
|
|
170
|
+
|
|
171
|
+
### Remove an edge
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
frontline workflows edges remove \
|
|
175
|
+
--source node_11111111-1111-1111-1111-111111111111 \
|
|
176
|
+
--source-handle default \
|
|
177
|
+
--target node_22222222-2222-2222-2222-222222222222 \
|
|
178
|
+
--target-handle default
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Validation Checklist
|
|
182
|
+
|
|
183
|
+
- Use exactly one initial trigger node (`TRIGGER` or `SCHEDULED_TRIGGER`).
|
|
184
|
+
- All node IDs must follow `node_<uuid>` format.
|
|
185
|
+
- Use only supported automation node types.
|
|
186
|
+
- Ensure `data.type` matches the node `type`.
|
|
187
|
+
- Connect only existing source and target nodes.
|
|
188
|
+
- Keep a single outgoing edge per node.
|
|
189
|
+
- Avoid self-edges and cycles.
|
|
190
|
+
- Inspect `frontline workflows graph` after each structural change.
|
|
191
|
+
|
|
192
|
+
## Variable Interpolation
|
|
193
|
+
|
|
194
|
+
Interpolable workflow fields include API `url`, `headers[].value`,
|
|
195
|
+
`parameters[].value`, `body`; Send Message / Say AI `message` and `prompt`;
|
|
196
|
+
Response AI `instructions`; Tools AI `instructions` and `prompt`; AI Capture
|
|
197
|
+
`prompt` and `instructions`; Data Transformer `prompt`; Conditional Routing AI
|
|
198
|
+
`conditions[].expression`; Dynamic Tables `rowId`, `search`, `rowData` values;
|
|
199
|
+
Transcription `audioUrl`; and WhatsApp template variables in
|
|
200
|
+
`templateVariables.header`, `templateVariables.body`, and
|
|
201
|
+
`templateVariables.buttons`.
|
|
202
|
+
|
|
203
|
+
Each node's output is also available as `{nodeId}` in downstream nodes.
|
|
204
|
+
|
|
39
205
|
### Get analytics for a specific workflow
|
|
40
206
|
|
|
41
207
|
```bash
|
|
42
|
-
frontline workflows analytics <
|
|
208
|
+
frontline workflows analytics [workflowId] [--workflow-id <id>] [--start-date <YYYY-MM-DD>] [--end-date <YYYY-MM-DD>] [--json] [--debug]
|
|
43
209
|
```
|
|
44
210
|
|
|
45
211
|
| Flag | Description |
|
|
46
212
|
| --------------------- | -------------------------------------- |
|
|
47
|
-
| `<workflowId>` |
|
|
213
|
+
| `<workflowId>` | Optional workflow ID |
|
|
214
|
+
| `--workflow-id <id>` | Override the active workflow |
|
|
48
215
|
| `--start-date <date>` | Start date in `YYYY-MM-DD` format |
|
|
49
216
|
| `--end-date <date>` | End date in `YYYY-MM-DD` format |
|
|
50
217
|
| `--json` | Output raw JSON |
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: incoming-webhooks
|
|
3
|
+
description: Create Frontline incoming webhooks from the CLI and use the returned URL/token in automation workflows.
|
|
4
|
+
allowed-tools: Bash(frontline:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Incoming Webhooks
|
|
8
|
+
|
|
9
|
+
Create a webhook:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
frontline incoming-webhooks create --name "CRM payload" --description "Receives contacts"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Create an unauthenticated webhook:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
frontline incoming-webhooks create --name "Open endpoint" --no-authentication
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
The create response includes:
|
|
22
|
+
|
|
23
|
+
- `id`: use this in workflow trigger payloads as `triggerByWebhookIds`.
|
|
24
|
+
- `url`: endpoint that receives the webhook request.
|
|
25
|
+
- `accessToken`: bearer token returned only on creation when authentication is enabled.
|
|
26
|
+
|
|
27
|
+
To trigger an automation from this webhook, create a workflow `TRIGGER` node with
|
|
28
|
+
`triggerType` and `triggeredBy` set to `INCOMING_WEBHOOK`, and include the
|
|
29
|
+
webhook ID:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
frontline workflows nodes create --data '{"nodeId":"incoming_webhook_1","type":"TRIGGER","position":{"positionX":0,"positionY":0},"data":{"type":"TRIGGER","triggerType":"INCOMING_WEBHOOK","triggeredBy":"INCOMING_WEBHOOK","triggerByWebhookIds":["<incomingWebhookId>"]}}'
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Incoming webhook payload data is available to later automation nodes through the
|
|
36
|
+
runtime webhook payload variables documented in the workflow builder skill.
|
|
@@ -1,53 +1,54 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: activities-and-tasks
|
|
3
3
|
description: >
|
|
4
|
-
How to create, read, update, and delete
|
|
4
|
+
How to create, read, update, and delete activities and tasks attached to rows
|
|
5
5
|
in tables and objects using the Frontline CLI.
|
|
6
6
|
allowed-tools: Bash(frontline:*)
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
#
|
|
9
|
+
# Activities & Tasks
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
track follow-ups, comments, and to-do items without polluting row fields.
|
|
11
|
+
Activities and tasks are sub-resources attached to individual rows. They let you
|
|
12
|
+
track follow-ups, comments, interactions, and to-do items without polluting row fields.
|
|
13
13
|
|
|
14
|
-
##
|
|
14
|
+
## Activities
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Activities log manual interactions on a row. Each activity has a **type**:
|
|
17
|
+
`NOTE`, `EMAIL`, `PHONE_CALL`, `MEETING`, or `WHATSAPP`.
|
|
17
18
|
|
|
18
|
-
### List
|
|
19
|
+
### List Activities
|
|
19
20
|
|
|
20
21
|
```bash
|
|
21
|
-
frontline object
|
|
22
|
-
frontline table note list <table> <row-id>
|
|
22
|
+
frontline object activity list <object> <row-id>
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
### Create
|
|
25
|
+
### Create an Activity
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
|
|
29
|
-
frontline
|
|
28
|
+
# Simple note (default type)
|
|
29
|
+
frontline object activity create <object> <row-id> --content "Follow up next week"
|
|
30
|
+
|
|
31
|
+
# With a specific type
|
|
32
|
+
frontline object activity create <object> <row-id> --content "Called re: pricing" --type PHONE_CALL
|
|
33
|
+
frontline object activity create <object> <row-id> --content "Discussed contract" --type MEETING
|
|
30
34
|
```
|
|
31
35
|
|
|
32
|
-
### Get
|
|
36
|
+
### Get an Activity by ID
|
|
33
37
|
|
|
34
38
|
```bash
|
|
35
|
-
frontline object
|
|
36
|
-
frontline table note get <table> <note-id>
|
|
39
|
+
frontline object activity get <object> <activity-id>
|
|
37
40
|
```
|
|
38
41
|
|
|
39
|
-
### Update
|
|
42
|
+
### Update an Activity
|
|
40
43
|
|
|
41
44
|
```bash
|
|
42
|
-
frontline object
|
|
43
|
-
frontline table note update <table> <note-id> --content "Updated content"
|
|
45
|
+
frontline object activity update <object> <activity-id> --content "Updated: follow up tomorrow"
|
|
44
46
|
```
|
|
45
47
|
|
|
46
|
-
### Delete
|
|
48
|
+
### Delete an Activity
|
|
47
49
|
|
|
48
50
|
```bash
|
|
49
|
-
frontline object
|
|
50
|
-
frontline table note delete <table> <note-id>
|
|
51
|
+
frontline object activity delete <object> <activity-id>
|
|
51
52
|
```
|
|
52
53
|
|
|
53
54
|
---
|
|
@@ -60,7 +61,6 @@ Tasks have content, optional due dates, assignees, and a completion state.
|
|
|
60
61
|
|
|
61
62
|
```bash
|
|
62
63
|
frontline object task list <object> <row-id>
|
|
63
|
-
frontline table task list <table> <row-id>
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
### Create a Task
|
|
@@ -111,18 +111,18 @@ frontline object task delete <object> <task-id>
|
|
|
111
111
|
|
|
112
112
|
```bash
|
|
113
113
|
# 1. Find the row you want to annotate
|
|
114
|
-
frontline object record list
|
|
114
|
+
frontline object record list deals --search "Acme"
|
|
115
115
|
# → row ID = 6625abc123def456
|
|
116
116
|
|
|
117
|
-
# 2.
|
|
118
|
-
frontline object
|
|
119
|
-
--content "Discussed pricing on call"
|
|
117
|
+
# 2. Log a phone call activity
|
|
118
|
+
frontline object activity create deals 6625abc123def456 \
|
|
119
|
+
--content "Discussed pricing on call" --type PHONE_CALL
|
|
120
120
|
|
|
121
121
|
# 3. Add a follow-up task with a due date
|
|
122
|
-
frontline object task create
|
|
122
|
+
frontline object task create deals 6625abc123def456 \
|
|
123
123
|
--content "Send revised proposal" \
|
|
124
124
|
--due-date 2026-05-15
|
|
125
125
|
|
|
126
126
|
# 4. Later, mark it complete
|
|
127
|
-
frontline object task complete
|
|
127
|
+
frontline object task complete deals 7
|
|
128
128
|
```
|
|
@@ -176,33 +176,33 @@ frontline object record list <object> --query '{
|
|
|
176
176
|
## Complete Example: Support Ticket Pipeline
|
|
177
177
|
|
|
178
178
|
```bash
|
|
179
|
-
# 1. The Status field already exists on
|
|
179
|
+
# 1. The Status field already exists on tickets as a predefined field.
|
|
180
180
|
# Check its field ID and existing options:
|
|
181
|
-
frontline object field list
|
|
181
|
+
frontline object field list tickets
|
|
182
182
|
# → Status field ID = 64, existing options: New, On You, On Customer, On Hold, Closed
|
|
183
183
|
|
|
184
184
|
# 2. Add more stages to the existing Status field (optionsEditable: true)
|
|
185
|
-
frontline object option create
|
|
186
|
-
frontline object option create
|
|
185
|
+
frontline object option create tickets 64 --data '{"name": "Escalated", "color": "Bright Red"}'
|
|
186
|
+
frontline object option create tickets 64 --data '{"name": "Waiting on Vendor", "color": "Amber"}'
|
|
187
187
|
|
|
188
188
|
# 3. Also add a priority field
|
|
189
|
-
frontline object field create
|
|
189
|
+
frontline object field create tickets --data '{
|
|
190
190
|
"name": "Priority",
|
|
191
191
|
"type": "select",
|
|
192
192
|
"metadata": { "mode": "singleSelect" }
|
|
193
193
|
}'
|
|
194
194
|
# → { id: 11, ... }
|
|
195
195
|
|
|
196
|
-
frontline object option create
|
|
197
|
-
frontline object option create
|
|
198
|
-
frontline object option create
|
|
199
|
-
frontline object option create
|
|
196
|
+
frontline object option create tickets 11 --data '{"name": "Critical", "color": "Bright Red"}'
|
|
197
|
+
frontline object option create tickets 11 --data '{"name": "High", "color": "Magenta"}'
|
|
198
|
+
frontline object option create tickets 11 --data '{"name": "Medium", "color": "Amber"}'
|
|
199
|
+
frontline object option create tickets 11 --data '{"name": "Low", "color": "Gray"}'
|
|
200
200
|
|
|
201
201
|
# 4. Create record type with relevant fields
|
|
202
|
-
frontline object field list
|
|
202
|
+
frontline object field list tickets
|
|
203
203
|
# → Suppose: 1=Subject, 10=Status, 11=Priority, 5=Assignee, 3=Description
|
|
204
204
|
|
|
205
|
-
frontline object record-type create
|
|
205
|
+
frontline object record-type create tickets --data '{
|
|
206
206
|
"name": "support_board",
|
|
207
207
|
"displayName": "Support Board",
|
|
208
208
|
"columnIds": [1, 10, 11, 5, 3]
|
|
@@ -210,14 +210,14 @@ frontline object record-type create standard__tickets --data '{
|
|
|
210
210
|
# → { id: 4, ... }
|
|
211
211
|
|
|
212
212
|
# 5. Create kanban view grouped by Status — directly on the object
|
|
213
|
-
frontline object view create
|
|
213
|
+
frontline object view create tickets --data '{
|
|
214
214
|
"name": "Ticket Board",
|
|
215
215
|
"type": "KANBAN",
|
|
216
216
|
"metadata": { "groupingColumnId": 10 }
|
|
217
217
|
}'
|
|
218
218
|
|
|
219
219
|
# 6. Create a table view too (for list browsing)
|
|
220
|
-
frontline object view create
|
|
220
|
+
frontline object view create tickets --data '{
|
|
221
221
|
"name": "All Tickets",
|
|
222
222
|
"type": "TABLE",
|
|
223
223
|
"metadata": {}
|