@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.
Files changed (145) hide show
  1. package/README.md +173 -7
  2. package/dist/commands/agents/builder.d.ts +10 -0
  3. package/dist/commands/agents/builder.d.ts.map +1 -0
  4. package/dist/commands/agents/builder.js +243 -0
  5. package/dist/commands/agents/builder.js.map +1 -0
  6. package/dist/commands/agents/flows.d.ts.map +1 -1
  7. package/dist/commands/agents/flows.js +253 -25
  8. package/dist/commands/agents/flows.js.map +1 -1
  9. package/dist/commands/agents/intents.d.ts +3 -0
  10. package/dist/commands/agents/intents.d.ts.map +1 -0
  11. package/dist/commands/agents/intents.js +137 -0
  12. package/dist/commands/agents/intents.js.map +1 -0
  13. package/dist/commands/agents/use.d.ts +3 -0
  14. package/dist/commands/agents/use.d.ts.map +1 -0
  15. package/dist/commands/agents/use.js +33 -0
  16. package/dist/commands/agents/use.js.map +1 -0
  17. package/dist/commands/agents/variables.d.ts +3 -0
  18. package/dist/commands/agents/variables.d.ts.map +1 -0
  19. package/dist/commands/agents/variables.js +111 -0
  20. package/dist/commands/agents/variables.js.map +1 -0
  21. package/dist/commands/aiModels/index.d.ts +3 -0
  22. package/dist/commands/aiModels/index.d.ts.map +1 -0
  23. package/dist/commands/aiModels/index.js +60 -0
  24. package/dist/commands/aiModels/index.js.map +1 -0
  25. package/dist/commands/incomingWebhooks/index.d.ts +3 -0
  26. package/dist/commands/incomingWebhooks/index.d.ts.map +1 -0
  27. package/dist/commands/incomingWebhooks/index.js +28 -0
  28. package/dist/commands/incomingWebhooks/index.js.map +1 -0
  29. package/dist/commands/object/activity.d.ts +3 -0
  30. package/dist/commands/object/activity.d.ts.map +1 -0
  31. package/dist/commands/object/{note.js → activity.js} +24 -19
  32. package/dist/commands/object/activity.js.map +1 -0
  33. package/dist/commands/object/export.js +3 -3
  34. package/dist/commands/object/field.js +5 -5
  35. package/dist/commands/object/index.js +10 -10
  36. package/dist/commands/object/index.js.map +1 -1
  37. package/dist/commands/object/option.js +4 -4
  38. package/dist/commands/object/record-type.js +4 -4
  39. package/dist/commands/object/record.js +8 -8
  40. package/dist/commands/object/relation.js +4 -4
  41. package/dist/commands/object/view.js +9 -9
  42. package/dist/commands/table/index.d.ts.map +1 -1
  43. package/dist/commands/table/index.js +0 -4
  44. package/dist/commands/table/index.js.map +1 -1
  45. package/dist/commands/tools/index.d.ts +3 -0
  46. package/dist/commands/tools/index.d.ts.map +1 -0
  47. package/dist/commands/tools/index.js +113 -0
  48. package/dist/commands/tools/index.js.map +1 -0
  49. package/dist/commands/util/uuid.d.ts +3 -0
  50. package/dist/commands/util/uuid.d.ts.map +1 -0
  51. package/dist/commands/util/uuid.js +15 -0
  52. package/dist/commands/util/uuid.js.map +1 -0
  53. package/dist/commands/workflows/analytics.d.ts.map +1 -1
  54. package/dist/commands/workflows/analytics.js +9 -3
  55. package/dist/commands/workflows/analytics.js.map +1 -1
  56. package/dist/commands/workflows/common.d.ts +39 -0
  57. package/dist/commands/workflows/common.d.ts.map +1 -0
  58. package/dist/commands/workflows/common.js +45 -0
  59. package/dist/commands/workflows/common.js.map +1 -0
  60. package/dist/commands/workflows/create.d.ts +3 -0
  61. package/dist/commands/workflows/create.d.ts.map +1 -0
  62. package/dist/commands/workflows/create.js +41 -0
  63. package/dist/commands/workflows/create.js.map +1 -0
  64. package/dist/commands/workflows/delete.d.ts +3 -0
  65. package/dist/commands/workflows/delete.d.ts.map +1 -0
  66. package/dist/commands/workflows/delete.js +20 -0
  67. package/dist/commands/workflows/delete.js.map +1 -0
  68. package/dist/commands/workflows/describe.d.ts +3 -0
  69. package/dist/commands/workflows/describe.d.ts.map +1 -0
  70. package/dist/commands/workflows/describe.js +40 -0
  71. package/dist/commands/workflows/describe.js.map +1 -0
  72. package/dist/commands/workflows/edges.d.ts +3 -0
  73. package/dist/commands/workflows/edges.d.ts.map +1 -0
  74. package/dist/commands/workflows/edges.js +50 -0
  75. package/dist/commands/workflows/edges.js.map +1 -0
  76. package/dist/commands/workflows/graph.d.ts +3 -0
  77. package/dist/commands/workflows/graph.d.ts.map +1 -0
  78. package/dist/commands/workflows/graph.js +47 -0
  79. package/dist/commands/workflows/graph.js.map +1 -0
  80. package/dist/commands/workflows/nodes.d.ts +3 -0
  81. package/dist/commands/workflows/nodes.d.ts.map +1 -0
  82. package/dist/commands/workflows/nodes.js +68 -0
  83. package/dist/commands/workflows/nodes.js.map +1 -0
  84. package/dist/commands/workflows/update.d.ts +3 -0
  85. package/dist/commands/workflows/update.d.ts.map +1 -0
  86. package/dist/commands/workflows/update.js +42 -0
  87. package/dist/commands/workflows/update.js.map +1 -0
  88. package/dist/commands/workflows/use.d.ts +3 -0
  89. package/dist/commands/workflows/use.d.ts.map +1 -0
  90. package/dist/commands/workflows/use.js +34 -0
  91. package/dist/commands/workflows/use.js.map +1 -0
  92. package/dist/commands/workflows/variables.d.ts +3 -0
  93. package/dist/commands/workflows/variables.d.ts.map +1 -0
  94. package/dist/commands/workflows/variables.js +105 -0
  95. package/dist/commands/workflows/variables.js.map +1 -0
  96. package/dist/index.js +50 -1
  97. package/dist/index.js.map +1 -1
  98. package/dist/lib/config.d.ts +9 -0
  99. package/dist/lib/config.d.ts.map +1 -1
  100. package/dist/lib/config.js +54 -0
  101. package/dist/lib/config.js.map +1 -1
  102. package/dist/lib/httpClient.d.ts +2 -1
  103. package/dist/lib/httpClient.d.ts.map +1 -1
  104. package/dist/lib/httpClient.js +5 -2
  105. package/dist/lib/httpClient.js.map +1 -1
  106. package/dist/max/ui/banner.js +15 -15
  107. package/dist/max.js +7 -1
  108. package/dist/max.js.map +1 -1
  109. package/dist/scripts/postinstall.d.ts.map +1 -1
  110. package/dist/scripts/postinstall.js +8 -0
  111. package/dist/scripts/postinstall.js.map +1 -1
  112. package/dist/skills/agent-builder/SKILL.md +88 -0
  113. package/dist/skills/aggregations/SKILL.md +7 -7
  114. package/dist/skills/ai-models/SKILL.md +43 -0
  115. package/dist/skills/auth-and-profiles/SKILL.md +1 -1
  116. package/dist/skills/crm-setup/SKILL.md +66 -48
  117. package/dist/skills/crud-operations/SKILL.md +2 -2
  118. package/dist/skills/export-and-delete/SKILL.md +5 -5
  119. package/dist/skills/files/SKILL.md +4 -4
  120. package/dist/skills/filter-and-query/SKILL.md +7 -7
  121. package/dist/skills/flow-builder/SKILL.md +124 -0
  122. package/dist/skills/frontline-agents/SKILL.md +152 -3
  123. package/dist/skills/frontline-internals/SKILL.md +7 -7
  124. package/dist/skills/frontline-workflows/SKILL.md +170 -3
  125. package/dist/skills/incoming-webhooks/SKILL.md +36 -0
  126. package/dist/skills/notes-and-tasks/SKILL.md +29 -29
  127. package/dist/skills/pipeline-setup/SKILL.md +13 -13
  128. package/dist/skills/relations/SKILL.md +15 -15
  129. package/dist/skills/resource-creation/SKILL.md +70 -1
  130. package/dist/skills/schema-design/SKILL.md +21 -14
  131. package/dist/skills/tools/SKILL.md +65 -0
  132. package/dist/skills/variables/SKILL.md +82 -0
  133. package/dist/skills/workflow-builder/SKILL.md +426 -0
  134. package/package.json +51 -51
  135. package/dist/commands/object/note.d.ts +0 -3
  136. package/dist/commands/object/note.d.ts.map +0 -1
  137. package/dist/commands/object/note.js.map +0 -1
  138. package/dist/commands/table/note.d.ts +0 -3
  139. package/dist/commands/table/note.d.ts.map +0 -1
  140. package/dist/commands/table/note.js +0 -62
  141. package/dist/commands/table/note.js.map +0 -1
  142. package/dist/commands/table/task.d.ts +0 -3
  143. package/dist/commands/table/task.d.ts.map +0 -1
  144. package/dist/commands/table/task.js +0 -88
  145. package/dist/commands/table/task.js.map +0 -1
@@ -24,7 +24,7 @@ allowed-tools: Bash(frontline:*)
24
24
  This skill walks through building a complete CRM system: Companies, Contacts,
25
25
  and Deals — with relations, pipeline stages, record types, and views.
26
26
 
27
- > The built-in `standard__companies`, `standard__people`, and `standard__deals` objects already
27
+ > The built-in `companies`, `people`, and `deals` objects already
28
28
  > exist. This guide uses **custom objects** to show how to build everything from
29
29
  > scratch, but the same patterns apply when extending existing objects.
30
30
 
@@ -75,6 +75,8 @@ Use `object create` for business entities and `table create` for simple data.
75
75
  # Create a new "Embarques" table
76
76
  frontline table create embarques --data '{
77
77
  "displayName": "Embarques",
78
+ "emoji": "truck",
79
+ "icon_color": "orange",
78
80
  "columns": [
79
81
  { "name": "Nombre", "type": "string", "metadata": { "format": "text" } }
80
82
  ]
@@ -83,6 +85,8 @@ frontline table create embarques --data '{
83
85
  # Create a new "Pedidos" table
84
86
  frontline table create pedidos --data '{
85
87
  "displayName": "Pedidos",
88
+ "emoji": "package",
89
+ "icon_color": "blue",
86
90
  "columns": [
87
91
  { "name": "Nombre", "type": "string", "metadata": { "format": "text" } }
88
92
  ]
@@ -92,9 +96,9 @@ frontline table create pedidos --data '{
92
96
  The system also ships with these core objects:
93
97
 
94
98
  ```
95
- standard__companies — Companies
96
- standard__people — People (contacts)
97
- standard__deals — Deals (sales pipeline)
99
+ companies — Companies
100
+ people — People (contacts)
101
+ deals — Deals (sales pipeline)
98
102
  ```
99
103
 
100
104
  Verify they exist:
@@ -103,21 +107,35 @@ Verify they exist:
103
107
  frontline object list
104
108
  ```
105
109
 
110
+ ### Setting Icons on Existing Objects/Tables
111
+
112
+ ```bash
113
+ frontline object update deals --data '{"emoji": "handshake", "icon_color": "emerald"}'
114
+ frontline table update embarques --data '{"emoji": "delivery", "icon_color": "teal"}'
115
+ ```
116
+
117
+ ### Available Icon Colors
118
+
119
+ Use the `icon_color` field with a **color name** (case-insensitive):
120
+
121
+ `red`, `orange`, `amber`, `yellow`, `lime`, `green`, `emerald`, `teal`,
122
+ `cyan`, `sky`, `blue`, `indigo`, `violet`, `purple`, `pink`, `rose`
123
+
106
124
  ## Step 2 — Inspect & Extend the Schema
107
125
 
108
126
  ### View current fields
109
127
 
110
128
  ```bash
111
- frontline object field list standard__companies
112
- frontline object field list standard__people
113
- frontline object field list standard__deals
129
+ frontline object field list companies
130
+ frontline object field list people
131
+ frontline object field list deals
114
132
  ```
115
133
 
116
134
  ### Add custom fields
117
135
 
118
136
  ```bash
119
137
  # Add a "Lead Source" select field to People
120
- frontline object field create standard__people --data '{
138
+ frontline object field create people --data '{
121
139
  "name": "Lead Source",
122
140
  "type": "select",
123
141
  "metadata": { "mode": "singleSelect" }
@@ -125,20 +143,20 @@ frontline object field create standard__people --data '{
125
143
  # → Returns: { id: 15, name: "Lead Source", type: "select", ... }
126
144
 
127
145
  # Add options to the new field (use the field ID from above)
128
- frontline object option create standard__people 15 --data '{"name": "Website", "color": "Sky"}'
129
- frontline object option create standard__people 15 --data '{"name": "Referral", "color": "Emerald"}'
130
- frontline object option create standard__people 15 --data '{"name": "Cold Outreach", "color": "Gray"}'
131
- frontline object option create standard__people 15 --data '{"name": "Event", "color": "Lavender"}'
146
+ frontline object option create people 15 --data '{"name": "Website", "color": "Sky"}'
147
+ frontline object option create people 15 --data '{"name": "Referral", "color": "Emerald"}'
148
+ frontline object option create people 15 --data '{"name": "Cold Outreach", "color": "Gray"}'
149
+ frontline object option create people 15 --data '{"name": "Event", "color": "Lavender"}'
132
150
 
133
151
  # Add a "Probability %" number field to Deals
134
- frontline object field create standard__deals --data '{
152
+ frontline object field create deals --data '{
135
153
  "name": "Probability",
136
154
  "type": "number",
137
155
  "metadata": {}
138
156
  }'
139
157
 
140
158
  # Add a "Next Follow-up" date field to Deals
141
- frontline object field create standard__deals --data '{
159
+ frontline object field create deals --data '{
142
160
  "name": "Next Follow-up",
143
161
  "type": "dateOnly",
144
162
  "metadata": {}
@@ -150,13 +168,13 @@ frontline object field create standard__deals --data '{
150
168
  The built-in objects already have relations defined:
151
169
 
152
170
  ```bash
153
- frontline object schema standard__people
154
- # → relations: [{ name: "companies", target: "standard__companies", mode: "multi" }]
171
+ frontline object schema people
172
+ # → relations: [{ name: "companies", target: "companies", mode: "multi" }]
155
173
 
156
- frontline object schema standard__deals
174
+ frontline object schema deals
157
175
  # → relations: [
158
- # { name: "people", target: "standard__people", mode: "multi" },
159
- # { name: "company", target: "standard__companies", mode: "single" }
176
+ # { name: "people", target: "people", mode: "multi" },
177
+ # { name: "company", target: "companies", mode: "single" }
160
178
  # ]
161
179
  ```
162
180
 
@@ -167,14 +185,14 @@ The `name` field is what you use in all relation commands.
167
185
  ### Create companies
168
186
 
169
187
  ```bash
170
- frontline object record create standard__companies --data '{
188
+ frontline object record create companies --data '{
171
189
  "Name": "Acme Corp",
172
190
  "Domain": "acme.com",
173
191
  "Primary Location": "New York, USA"
174
192
  }'
175
193
  # → { id: "6625aaa...", ... }
176
194
 
177
- frontline object record create standard__companies --data '{
195
+ frontline object record create companies --data '{
178
196
  "Name": "TechStart Inc",
179
197
  "Domain": "techstart.io",
180
198
  "Primary Location": "San Francisco, USA"
@@ -185,7 +203,7 @@ frontline object record create standard__companies --data '{
185
203
  ### Create contacts
186
204
 
187
205
  ```bash
188
- frontline object record create standard__people --data '{
206
+ frontline object record create people --data '{
189
207
  "First Name": "Alice",
190
208
  "Last Name": "Johnson",
191
209
  "Email": "alice@acme.com",
@@ -194,7 +212,7 @@ frontline object record create standard__people --data '{
194
212
  }'
195
213
  # → { id: "6625ccc...", ... }
196
214
 
197
- frontline object record create standard__people --data '{
215
+ frontline object record create people --data '{
198
216
  "First Name": "Bob",
199
217
  "Last Name": "Smith",
200
218
  "Email": "bob@techstart.io",
@@ -206,10 +224,10 @@ frontline object record create standard__people --data '{
206
224
  ### Create deals
207
225
 
208
226
  ```bash
209
- # Use option IDs from `frontline object field list standard__deals`
227
+ # Use option IDs from `frontline object field list deals`
210
228
  # Stage options: 1=Lead, 2=In Progress, 3=Won, 4=Lost
211
229
 
212
- frontline object record create standard__deals --data '{
230
+ frontline object record create deals --data '{
213
231
  "Name": "Acme Enterprise License",
214
232
  "Stage": [2],
215
233
  "Value": 150000
@@ -223,36 +241,36 @@ frontline object record create standard__deals --data '{
223
241
 
224
242
  ```bash
225
243
  # Alice works at Acme
226
- frontline object relation link standard__people 6625ccc... Companies 6625aaa...
244
+ frontline object relation link people 6625ccc... Companies 6625aaa...
227
245
 
228
246
  # Bob works at TechStart
229
- frontline object relation link standard__people 6625ddd... Companies 6625bbb...
247
+ frontline object relation link people 6625ddd... Companies 6625bbb...
230
248
  ```
231
249
 
232
250
  ### Link deal → company and deal → person
233
251
 
234
252
  ```bash
235
253
  # The Acme deal belongs to Acme Corp
236
- frontline object relation link standard__deals 6625eee... Company 6625aaa...
254
+ frontline object relation link deals 6625eee... Company 6625aaa...
237
255
 
238
256
  # Alice is the contact for this deal
239
- frontline object relation link standard__deals 6625eee... People 6625ccc...
257
+ frontline object relation link deals 6625eee... People 6625ccc...
240
258
  ```
241
259
 
242
260
  ### Verify links
243
261
 
244
262
  ```bash
245
263
  # What company does Alice belong to?
246
- frontline object relation get standard__people 6625ccc... Companies
264
+ frontline object relation get people 6625ccc... Companies
247
265
 
248
266
  # Who are the contacts for the Acme deal?
249
- frontline object relation get standard__deals 6625eee... People
267
+ frontline object relation get deals 6625eee... People
250
268
 
251
269
  # Which deals belong to Acme Corp? (reverse lookup)
252
- frontline object relation find-by standard__deals Company 6625aaa...
270
+ frontline object relation find-by deals Company 6625aaa...
253
271
 
254
272
  # Which people work at Acme Corp? (reverse lookup)
255
- frontline object relation find-by standard__people Companies 6625aaa...
273
+ frontline object relation find-by people Companies 6625aaa...
256
274
  ```
257
275
 
258
276
  ## Step 6 — Set Up Pipeline Views
@@ -261,10 +279,10 @@ frontline object relation find-by standard__people Companies 6625aaa...
261
279
 
262
280
  ```bash
263
281
  # Get the field IDs to include in each record type
264
- frontline object field list standard__deals
282
+ frontline object field list deals
265
283
  # → Use the IDs for Name, Stage, Value, People, Company
266
284
 
267
- frontline object record-type create standard__deals --data '{
285
+ frontline object record-type create deals --data '{
268
286
  "name": "active_pipeline",
269
287
  "displayName": "Active Pipeline",
270
288
  "columnIds": [1, 2, 3, 5, 8]
@@ -277,14 +295,14 @@ frontline object record-type create standard__deals --data '{
277
295
  ```bash
278
296
  # Use the Stage field ID for grouping (e.g., field ID 2)
279
297
  # Create directly on the object (no record type needed)
280
- frontline object view create standard__deals --data '{
298
+ frontline object view create deals --data '{
281
299
  "name": "Pipeline Board",
282
300
  "type": "KANBAN",
283
301
  "metadata": { "groupingColumnId": 2 }
284
302
  }'
285
303
 
286
304
  # Or scoped to a specific record type with --record-type <id>
287
- frontline object view create standard__deals --record-type 7 --data '{
305
+ frontline object view create deals --record-type 7 --data '{
288
306
  "name": "Pipeline Board",
289
307
  "type": "KANBAN",
290
308
  "metadata": { "groupingColumnId": 2 }
@@ -299,13 +317,13 @@ Refine your views to show only the most important information:
299
317
 
300
318
  ```bash
301
319
  # Set order of columns/fields
302
- frontline object view update standard__deals <view-id> --column-order "Name, Stage, Value, Company"
320
+ frontline object view update deals <view-id> --column-order "Name, Stage, Value, Company"
303
321
 
304
322
  # Hide less relevant fields
305
- frontline object view update standard__deals <view-id> --hidden-columns "Created At, Updated At"
323
+ frontline object view update deals <view-id> --hidden-columns "Created At, Updated At"
306
324
 
307
325
  # Order fields in the record creation dialog
308
- frontline object view update standard__deals <view-id> --dialog-field-order "Name, Stage, Value, Probability"
326
+ frontline object view update deals <view-id> --dialog-field-order "Name, Stage, Value, Probability"
309
327
  ```
310
328
 
311
329
  ## Step 8 — Query Your CRM
@@ -313,7 +331,7 @@ frontline object view update standard__deals <view-id> --dialog-field-order "Nam
313
331
  ### Find high-value deals
314
332
 
315
333
  ```bash
316
- frontline object record list standard__deals --query '{
334
+ frontline object record list deals --query '{
317
335
  "operator": "and",
318
336
  "conditions": [
319
337
  { "path": "[Value]", "operator": "gte", "value": 50000 },
@@ -325,7 +343,7 @@ frontline object record list standard__deals --query '{
325
343
  ### Find contacts with no company
326
344
 
327
345
  ```bash
328
- frontline object record list standard__people --query '{
346
+ frontline object record list people --query '{
329
347
  "path": "[Companies]", "operator": "isNull"
330
348
  }'
331
349
  ```
@@ -333,29 +351,29 @@ frontline object record list standard__people --query '{
333
351
  ### Search across fields
334
352
 
335
353
  ```bash
336
- frontline object record list standard__people --search "alice"
337
- frontline object record list standard__companies --search "tech"
354
+ frontline object record list people --search "alice"
355
+ frontline object record list companies --search "tech"
338
356
  ```
339
357
 
340
358
  ### Find all contacts at a specific company
341
359
 
342
360
  ```bash
343
- frontline object relation find-by standard__people Companies <company-id>
361
+ frontline object relation find-by people Companies <company-id>
344
362
  ```
345
363
 
346
364
  ## Step 8 — Export & Backup
347
365
 
348
366
  ```bash
349
367
  # Export all deals to spreadsheet
350
- frontline object export xlsx standard__deals --output deals_report.xlsx
368
+ frontline object export xlsx deals --output deals_report.xlsx
351
369
 
352
370
  # Export filtered data (only won deals)
353
- frontline object export csv standard__deals \
371
+ frontline object export csv deals \
354
372
  --query '{"path": "[Stage]", "operator": "containsAny", "value": [3]}' \
355
373
  --output won_deals.csv
356
374
 
357
375
  # Export all contacts
358
- frontline object export xlsx standard__people --output contacts_backup.xlsx
376
+ frontline object export xlsx people --output contacts_backup.xlsx
359
377
  ```
360
378
 
361
379
  ## Quick Command Reference
@@ -269,10 +269,10 @@ Create a new record type with a kanban view for a deals pipeline:
269
269
 
270
270
  ```bash
271
271
  # 1. Check current fields
272
- frontline object field list standard__deals
272
+ frontline object field list deals
273
273
 
274
274
  # 2. Create a record type (returns record_type_id)
275
- frontline object record-type create standard__deals --data '{
275
+ frontline object record-type create deals --data '{
276
276
  "name": "enterprise",
277
277
  "displayName": "Enterprise Deals",
278
278
  "columnIds": [1, 2, 5, 8]
@@ -23,10 +23,10 @@ frontline object export xlsx <name> [--output file.xlsx]
23
23
 
24
24
  ```bash
25
25
  # Export all people
26
- frontline object export xlsx standard__people
26
+ frontline object export xlsx people
27
27
 
28
28
  # Export with filter (high-value deals only)
29
- frontline object export xlsx standard__deals \
29
+ frontline object export xlsx deals \
30
30
  --query '{"path": "[Amount]", "operator": "gte", "value": 10000}' \
31
31
  --output big_deals.xlsx
32
32
 
@@ -46,7 +46,7 @@ frontline object export csv <name> [--output file.csv]
46
46
 
47
47
  ```bash
48
48
  # Export all records as CSV
49
- frontline object export csv standard__people --output people_backup.csv
49
+ frontline object export csv people --output people_backup.csv
50
50
  ```
51
51
 
52
52
  ### Default Output
@@ -86,11 +86,11 @@ Always export before deleting:
86
86
 
87
87
  ```bash
88
88
  # 1. Export everything
89
- frontline object export xlsx standard__legacy_deals --output legacy_deals_backup.xlsx
89
+ frontline object export xlsx legacy_deals --output legacy_deals_backup.xlsx
90
90
 
91
91
  # 2. Verify the export file exists and looks right
92
92
  ls -la legacy_deals_backup.xlsx
93
93
 
94
94
  # 3. Delete the object
95
- frontline object delete standard__legacy_deals
95
+ frontline object delete legacy_deals
96
96
  ```
@@ -55,16 +55,16 @@ frontline table file delete <table> <file-id>
55
55
 
56
56
  ```bash
57
57
  # 1. Find the row
58
- frontline object row list standard__deals --search "Acme Corp"
58
+ frontline object row list deals --search "Acme Corp"
59
59
  # → row ID = 6625abc123def456
60
60
 
61
61
  # 2. List attached files
62
- frontline object file list standard__deals 6625abc123def456
62
+ frontline object file list deals 6625abc123def456
63
63
  # → [{ id: 15, originalName: "contract_v2.pdf", size: 245000, ... }]
64
64
 
65
65
  # 3. Download a file
66
- frontline object file download standard__deals 15 --output ./contract_v2.pdf
66
+ frontline object file download deals 15 --output ./contract_v2.pdf
67
67
 
68
68
  # 4. Delete an outdated file
69
- frontline object file delete standard__deals 15
69
+ frontline object file delete deals 15
70
70
  ```
@@ -17,18 +17,18 @@ The `frontline table row list` and `frontline object record list` commands accep
17
17
 
18
18
  ```bash
19
19
  # Simple text search across all fields
20
- frontline object record list standard__people --search "john"
20
+ frontline object record list people --search "john"
21
21
 
22
22
  # Filter by a single condition
23
23
  # TIP: Use 'frontline object field list <name>' to find field names and tag IDs
24
- frontline object record list standard__deals --query '{
24
+ frontline object record list deals --query '{
25
25
  "path": "[Amount]",
26
26
  "operator": "gte",
27
27
  "value": 10000
28
28
  }'
29
29
 
30
30
  # Multiple conditions (AND)
31
- frontline object record list standard__deals --query '{
31
+ frontline object record list deals --query '{
32
32
  "operator": "and",
33
33
  "conditions": [
34
34
  { "path": "[Status]", "operator": "containsAny", "value": [1, 2] },
@@ -37,7 +37,7 @@ frontline object record list standard__deals --query '{
37
37
  }'
38
38
 
39
39
  # Sort results
40
- frontline object record list standard__people --sort '[{"path": "[Last Name]", "type": "asc"}]'
40
+ frontline object record list people --sort '[{"path": "[Last Name]", "type": "asc"}]'
41
41
  ```
42
42
 
43
43
  ## Path Format
@@ -176,8 +176,8 @@ frontline table row list my_table --page 1 --page-size 50
176
176
  ## Filter by Record Type (objects only)
177
177
 
178
178
  ```bash
179
- frontline object record list standard__people --record-type lead
180
- frontline object record list standard__deals --record-type "all"
179
+ frontline object record list people --record-type lead
180
+ frontline object record list deals --record-type "all"
181
181
  ```
182
182
 
183
183
  ## Full Example
@@ -185,7 +185,7 @@ frontline object record list standard__deals --record-type "all"
185
185
  Find all open deals worth over $10k, owned by a specific company, sorted by amount:
186
186
 
187
187
  ```bash
188
- frontline object record list standard__deals \
188
+ frontline object record list deals \
189
189
  --query '{
190
190
  "operator": "and",
191
191
  "conditions": [
@@ -0,0 +1,124 @@
1
+ ---
2
+ name: flow-builder
3
+ description: Build valid Frontline assistant flows from CLI commands. Use when creating flow graphs, choosing conversation node payloads, connecting nodes, or validating flow structure before execution.
4
+ allowed-tools: Bash(frontline:*)
5
+ ---
6
+
7
+ # Flow Builder
8
+
9
+ ## Default Workflow
10
+
11
+ 1. Select the agent:
12
+
13
+ ```bash
14
+ frontline agents use <agentId>
15
+ ```
16
+
17
+ 2. Create or select a flow:
18
+
19
+ ```bash
20
+ frontline agents flows create --name "Flow name"
21
+ frontline agents flows use <flowId>
22
+ ```
23
+
24
+ 3. Inspect before each change:
25
+
26
+ ```bash
27
+ frontline agents flows graph --table
28
+ ```
29
+
30
+ ## Valid Flow Rules
31
+
32
+ - Supported nodes: `START`, `TRIGGER_INTENT`, `SAY_AI`, `RESPONSE_AI`, `TOOLS_AI`, `API`, `CONDITIONAL_ROUTING`, `DYNAMIC_TABLES`.
33
+ - Use exactly one initial node: `START` or `TRIGGER_INTENT`.
34
+ - `data.type` must match the node `type`.
35
+ - Edges cannot point from a node to itself.
36
+ - Edges cannot create cycles.
37
+ - `CONDITIONAL_ROUTING` and `TOOLS_AI` can use multiple outgoing handles.
38
+ - Other nodes should use one outgoing edge.
39
+ - Deleting a node removes all incoming and outgoing edges.
40
+
41
+ ## Variables And Intents
42
+
43
+ Use variables in text fields as `{VARIABLE_NAME}`. The name must match the agent
44
+ variable exactly.
45
+
46
+ ```bash
47
+ frontline agents variables create --name customer_name --description "Customer name"
48
+ frontline agents intents create --name cancellation --phrases '["cancel order","stop subscription"]'
49
+ ```
50
+
51
+ Flow fields with variable replacement include API `url`, `headers[].value`,
52
+ `parameters[].value`, `body`; Say AI `message` and `prompt`; Response AI
53
+ `instructions`; Tools AI `instructions`; Conditional Routing AI
54
+ `conditions[].expression`; and Dynamic Tables `rowId`, `search`, and `rowData`
55
+ values.
56
+
57
+ ## nodeId Format
58
+
59
+ All node IDs **must** follow the pattern `node_<uuid>`. Names like `start_1` or `api_1` will fail validation.
60
+
61
+ ```
62
+ node_a1b2c3d4-e5f6-7890-abcd-ef1234567890
63
+ ```
64
+
65
+ ## Node Payloads
66
+
67
+ Start:
68
+
69
+ ```bash
70
+ frontline agents flows nodes create --data '{"nodeId":"node_11111111-1111-1111-1111-111111111111","type":"START","position":{"positionX":0,"positionY":0}}'
71
+ ```
72
+
73
+ Intent trigger:
74
+
75
+ ```bash
76
+ frontline agents flows nodes create --data '{"nodeId":"node_11111111-1111-1111-1111-111111111111","type":"TRIGGER_INTENT","position":{"positionX":0,"positionY":0},"data":{"type":"TRIGGER_INTENT","intentIds":[123],"agenticRouting":null}}'
77
+ ```
78
+
79
+ Say AI:
80
+
81
+ ```bash
82
+ frontline agents flows nodes create --data '{"nodeId":"node_22222222-2222-2222-2222-222222222222","type":"SAY_AI","position":{"positionX":320,"positionY":0},"data":{"type":"SAY_AI","sayWithAi":false,"message":"Hello!"}}'
83
+ ```
84
+
85
+ API:
86
+
87
+ ```bash
88
+ frontline agents flows nodes create --data '{"nodeId":"node_33333333-3333-3333-3333-333333333333","type":"API","position":{"positionX":640,"positionY":0},"data":{"type":"API","url":"https://example.com","method":"GET","headers":[]}}'
89
+ ```
90
+
91
+ Conditional routing:
92
+
93
+ ```bash
94
+ frontline agents flows nodes create --data '{"nodeId":"node_44444444-4444-4444-4444-444444444444","type":"CONDITIONAL_ROUTING","position":{"positionX":960,"positionY":0},"data":{"type":"CONDITIONAL_ROUTING","routingType":"DYNAMIC","conditions":[{"handleId":"yes","expression":"input == true"},{"handleId":"no","expression":"input != true"}]}}'
95
+ ```
96
+
97
+ ## Edges
98
+
99
+ Connect nodes:
100
+
101
+ ```bash
102
+ frontline agents flows edges add --source node_11111111-1111-1111-1111-111111111111 --source-handle default --target node_22222222-2222-2222-2222-222222222222 --target-handle default
103
+ ```
104
+
105
+ Connect routing handles:
106
+
107
+ ```bash
108
+ frontline agents flows edges add --source node_44444444-4444-4444-4444-444444444444 --source-handle yes --target node_33333333-3333-3333-3333-333333333333 --target-handle default
109
+ frontline agents flows edges add --source node_44444444-4444-4444-4444-444444444444 --source-handle no --target node_22222222-2222-2222-2222-222222222222 --target-handle default
110
+ ```
111
+
112
+ Remove an edge:
113
+
114
+ ```bash
115
+ frontline agents flows edges remove --source node_11111111-1111-1111-1111-111111111111 --source-handle default --target node_22222222-2222-2222-2222-222222222222 --target-handle default
116
+ ```
117
+
118
+ ## Updates
119
+
120
+ ```bash
121
+ frontline agents flows nodes update node_22222222-2222-2222-2222-222222222222 --data '{"alias":"Greeting"}'
122
+ frontline agents flows nodes delete node_22222222-2222-2222-2222-222222222222
123
+ frontline agents flows update --name "Flow name" --status ACTIVE
124
+ ```