@getfrontline/cli
v1.0.3
Published
Frontline CLI — Public API (agents, workflows, billing, tables, objects) + Max chat/admin REST from your terminal
Maintainers
Readme
@getfrontline/cli
Unified Frontline command-line toolbox. Ships two binaries:
frontline— public REST API: agents, workflows, billing, tables, objects, raw GET, Claude Code skills setup.max— Max chat & admin REST (per-user API key as Bearer, interactive chat).
Installation
npm install -g @getfrontline/cliOr run without installing:
npx @getfrontline/cli --helpOutput format
All frontline commands print JSON to stdout by default (scripting-friendly). Opt into human-readable output with:
--pretty— key/value blocks, spinners, icons (to stderr-safe channels)--table— tabular rendering for list endpoints
Errors always go to stderr in human form and to stdout as structured JSON when the command was invoked in its default (non-pretty) mode.
frontline binary
Login
frontline auth login <api-key>The API key is shared between frontline and max automatically.
Switch / inspect profiles
frontline auth profiles list # all saved profiles + active one
frontline auth profiles use prod # change active profile
frontline auth whoami # hits /me with current profile
frontline auth logout # remove active profile
frontline auth logout --profile stagingCommands
Agents
frontline agents list
frontline agents list --status active
frontline agents flows <agentId>
frontline agents flows <agentId> --status active
frontline agents analytics <agentId> --start-date 2025-01-01 --end-date 2025-12-31Workflows
frontline workflows list
frontline workflows list --status active
frontline workflows analytics <workflowId> --start-date 2025-01-01 --end-date 2025-12-31Billing
frontline billing getRaw API requests
For endpoints not yet mapped to a command:
frontline api get /agents
frontline api get /agents --query status=active
frontline api get /workflows/123/analytics --query startDate=2025-01-01 endDate=2025-12-31Objects (CRM entities)
frontline object list
frontline object get standard__people
frontline object schema standard__deals
frontline object create --data '{"name":"custom_obj","displayName":"Custom","fields":[...]}'
frontline object update standard__deals --data '{"displayName":"Deals v2"}'
frontline object count standard__deals
frontline object delete standard__custom_objectTables (spreadsheet-like)
frontline table list
frontline table get my_table
frontline table create my_table --data '{"displayName":"My Table","columns":[{"name":"Name","type":"string","metadata":{"format":"text"}}]}'
frontline table delete my_tableShared sub-commands (object & table)
Both object and table expose the same set of sub-commands:
| Command | Description |
| ---------------- | ----------------------------------------------- |
| field | Manage fields (columns) — CRUD |
| option | Manage select-field options — CRUD |
| record / row | Manage rows — list, get, create, update, delete |
| relation | Link / unlink related records |
| view | Manage views (object only) — CRUD |
| record-type | Manage record types (object only) |
| note | Notes on rows — CRUD |
| task | Tasks on rows — CRUD + complete / uncomplete |
| file | Files on rows — list, get, download, delete |
| aggregation | Aggregations — CRUD + compute |
| export | Export data as XLSX or CSV |
Run frontline <resource> <subcommand> --help for details and examples.
Global flags
Every frontline command accepts:
--api-key <key>— override stored API key for a single call--profile <name>— use a specific saved profile--debug— verbose request/response logs--pretty— human-readable output--table— tabular output for list endpoints
Claude Code Skills
Optional: install Frontline skills into Claude Code (auto-detected on npm install):
frontline setup --claude-skills # install new skills
frontline setup --claude-skills --force # overwrite existingSkills currently shipped:
- Public API:
frontline-agents,frontline-workflows,frontline-billing,frontline-api - Max:
max-chat,max-auth - Table / Object CRUD:
auth-and-profiles,crm-setup,crud-operations,pipeline-setup,schema-design,resource-creation,record-type-management,relations,filter-and-query,files,notes-and-tasks,export-and-delete,aggregations
Debugging
frontline agents list --debugTroubleshooting
- "No API key found" — run
frontline auth login <key>. - "No Max API key found" (Max CLI) — run
max auth login <key>orfrontline auth login <key>on the same profile. - "Missing or invalid API key" — key expired / revoked. Generate a new one.
- "Request timed out" — check network.
- Rate limit — public API allows 100 req/min.
max binary
Authentication uses the same API key as frontline. Logging in with either CLI keeps them in sync.
max --help
max auth login <api-key>
max auth whoami
max auth logout # clears Max + matching Frontline profile
max auth logout --keep-frontline # only clears the Max storeResponse shape and stdout
Max Public API responses are typically { "ok": true|false, "data": ... }. HTTP errors still use 4xx/5xx; logical failures may return 200 with ok: false (the CLI treats those as errors).
max "…"(root) andmax chat send: default stdout is one-line JSON (JSON.stringifyof the last response: POST, or last GET after polling). Use--prettyfor assistant plain text fromdata. Use--jsonto print only the POST body and skip polling.max conversations …: same idea — default one-line JSON;--prettyfor plain text when the CLI can infer it.max chat/ REPL: stdout is assistant plain text fromdatawhen possible (interactive UX); otherwise one-line JSON. No progress spinners on stdout.
Public API — Max conversations
| Method | Path (after base) |
| ------- | ------------------------------------------------- |
| POST | /max/conversations/message |
| GET | /max/conversations/:conversationId |
| PATCH | /max/conversations/:conversationId |
| POST | /max/conversations/:conversationId/abortMessage |
| GET | /max/conversations/ |
CLI:
max conversations list
max conversations get 123
max conversations update 123 --data '{"title":"Renamed"}'
max conversations abort 123
# alias: max conv listGlobal flags: --profile, --api-key, --pretty, --debug (same resolution as max chat send).
Chat with Max
After max auth login, you can send messages:
# Send message (uses last conversation by default)
max "Hola"
# Start a new conversation
max --new "Hola"
# Explicit conversation id
max --conversation 123 "Hola"
# Default: one-line JSON from the API; human reply with --pretty
max "Hola" --pretty
# Override API key for one run
max "Hola" --api-key flk_...
# Alternative explicit command form
max chat send "Hola"You can also start an interactive session (so you don't have to type max every time):
max chatInside the interactive prompt, use:
:helpfor commands:newto start a new conversation:conv <id>to switch conversations:exitto quit
