frontcli -- Front CLI
CLI for Front customer support. Manages conversations, messages, contacts, tags, drafts, comments, templates, and more.
Quick Start
Verify auth before any operation:
frontcli auth status
frontcli whoami --json
If not authenticated, the user must run frontcli auth login interactively (requires browser for OAuth). Do not attempt auth setup on behalf of the user.
Core Rules
- Always use
--json when parsing output. Human-readable format is for display only.
- Use correct ID prefixes -- see ID Reference below. Wrong prefix produces a clear error.
- Read before write -- fetch current state before modifying (archive, assign, tag, reply).
- Pipe with jq -- extract IDs/fields:
frontcli conv list --json | jq -r '._results[].id'
- Multi-account -- use
--account user@email.com if the user has multiple Front accounts.
ID Reference
| Prefix |
Resource |
Example |
cnv_ |
conversation |
cnv_abc123 |
msg_ |
message |
msg_abc123 |
cmt_ |
comment |
cmt_abc123 |
tea_ |
teammate |
tea_abc123 |
tag_ |
tag |
tag_abc123 |
inb_ |
inbox |
inb_abc123 |
chn_ |
channel |
chn_abc123 |
ctc_ |
contact |
ctc_abc123 |
drf_ |
draft |
drf_abc123 |
rsp_ |
template |
rsp_abc123 |
att_ |
attachment |
att_abc123 |
hdl_ |
handle |
hdl_abc123 |
Output Formats
| Flag |
Format |
Use case |
| (default) |
Table |
User-facing display |
--json |
JSON |
Agent parsing, scripting |
--plain |
TSV |
Pipe to awk/cut |
JSON list responses wrap results in ._results[]. Single-object responses return the object directly.
Workflows
Read a Conversation Thread
# Full message bodies + comments (timeline view)
frontcli conv get cnv_xxx --full --json
# Metadata only
frontcli conv get cnv_xxx --json
# Messages only
frontcli conv messages cnv_xxx --json
# Comments only
frontcli conv comments cnv_xxx --json
Use --full when you need message content; omit for metadata only.
Search / List Conversations
# List recent open conversations
frontcli conv list --status open --limit 10 --json
# List by inbox or tag
frontcli conv list --inbox inb_xxx --json
frontcli conv list --tag tag_xxx --json
# Free-text search
frontcli conv search "customer issue" --json
# Filtered search
frontcli conv search --from client@co.com --status open --json
frontcli conv search --tag tag_xxx --assignee me --json
frontcli conv search --after "2025-01-01" --before "2025-02-01" --json
Search flags: --from, --to, --recipient, --inbox, --tag (repeatable), --status, --assignee, --unassigned, --before, --after, --limit.
Reply to a Conversation
frontcli msg reply cnv_xxx --body "Thanks for reaching out."
frontcli msg reply cnv_xxx --body-file ./reply.txt
Send a New Message
Requires a channel ID. Find channels first:
frontcli channels list --json
frontcli msg send --channel chn_xxx --to user@example.com --subject "Hello" --body "Message body"
Add Internal Comment
Comments are internal notes visible only to teammates:
frontcli comments create cnv_xxx --body "Internal note: customer is VIP"
Manage Tags
# List available tags
frontcli tags list --json
# Find tag ID by name
frontcli tags list --json | jq -r '._results[] | select(.name == "Urgent") | .id'
# Tag / untag a conversation
frontcli conv tag cnv_xxx tag_xxx
frontcli conv untag cnv_xxx tag_xxx
Assign / Unassign
# Find teammate IDs
frontcli teammates list --json
# Assign / unassign
frontcli conv assign cnv_xxx --to tea_xxx
frontcli conv unassign cnv_xxx
Manage Conversation Status
frontcli conv archive cnv_xxx
frontcli conv open cnv_xxx
frontcli conv trash cnv_xxx
# Snooze (timestamp or duration)
frontcli conv snooze cnv_xxx --until "2025-01-15T09:00:00Z"
frontcli conv snooze cnv_xxx --duration 2h
frontcli conv unsnooze cnv_xxx
Look Up Contacts
frontcli contacts search "john" --json
frontcli contacts get ctc_xxx --json
frontcli contacts handles ctc_xxx --json
frontcli contacts convos ctc_xxx --json
Templates
frontcli templates list --json
frontcli templates use rsp_xxx
# Use template body in a reply
BODY=$(frontcli templates use rsp_xxx)
frontcli msg reply cnv_xxx --body "$BODY"
Drafts
frontcli drafts create cnv_xxx --body "Draft reply"
frontcli drafts list cnv_xxx --json
frontcli drafts update drf_xxx --body "Updated" --draft-version 1
frontcli drafts delete drf_xxx
Custom Fields
frontcli conv update cnv_xxx --field "Priority=High" --field "Category=Support"
Bulk Operations
# Archive all conversations with a tag (xargs)
frontcli conv list --tag tag_xxx --json | jq -r '._results[].id' | xargs frontcli conv archive
# Archive from stdin
frontcli conv list --tag tag_xxx --json | jq -r '._results[].id' | frontcli conv archive --ids-from -
# Tag all open unassigned conversations
frontcli conv search --status open --unassigned --json | jq -r '._results[].id' | \
while read id; do frontcli conv tag "$id" tag_xxx; done
Environment Variables
| Variable |
Description |
FRONT_ACCOUNT |
Default account (avoids --account) |
FRONT_JSON |
Set 1 for JSON output by default |
FRONT_PLAIN |
Set 1 for TSV output by default |
Command Reference
| Command |
Subcommands |
conv |
list, get, search, messages, comments, archive, open, trash, assign, unassign, snooze, unsnooze, followers, follow, unfollow, tag, untag, update |
msg |
get, send, reply, attachments, attachment download |
drafts |
create, list, get, update, delete |
tags |
list, get, create, update, delete, children, convos |
contacts |
list, search, get, handles, handle add/delete, notes, note add, convos, create, update, delete, merge |
inboxes |
list, get, convos, channels |
teammates |
list, get, convos |
channels |
list, get |
comments |
list, get, create |
templates |
list, get, use |
whoami |
(show authenticated user) |
auth |
setup, login, logout, status, list |
Guidelines
- Never expose or log OAuth tokens, client secrets, or keyring contents.
- Confirm destructive operations (
trash, delete, archive) with the user first.
contacts merge is irreversible -- always confirm before executing.
- Rate limits are handled automatically with exponential backoff.
- When an error mentions wrong ID prefix, check the ID Reference table.
Installation
brew install dedene/tap/frontcli
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: frontcli3description: Interact with Front customer support platform via the frontcli CLI. Use when managing conversations, messages, contacts, tags, drafts, comments, templates, inboxes, teammates, or channels in Front. Triggered by mentions of Front, frontcli, support tickets, customer conversations, or helpdesk operations. Use when this capability is needed.4---56# frontcli -- Front CLI78CLI for [Front](https://frontapp.com) customer support. Manages conversations, messages, contacts, tags, drafts, comments, templates, and more.910## Quick Start1112Verify auth before any operation:1314```bash15frontcli auth status16frontcli whoami --json17```1819If not authenticated, the user must run `frontcli auth login` interactively (requires browser for OAuth). Do not attempt auth setup on behalf of the user.2021## Core Rules22231. **Always use `--json`** when parsing output. Human-readable format is for display only.242. **Use correct ID prefixes** -- see ID Reference below. Wrong prefix produces a clear error.253. **Read before write** -- fetch current state before modifying (archive, assign, tag, reply).264. **Pipe with jq** -- extract IDs/fields: `frontcli conv list --json | jq -r '._results[].id'`275. **Multi-account** -- use `--account user@email.com` if the user has multiple Front accounts.2829## ID Reference3031| Prefix | Resource | Example |32|--------|-------------|--------------|33| `cnv_` | conversation | `cnv_abc123` |34| `msg_` | message | `msg_abc123` |35| `cmt_` | comment | `cmt_abc123` |36| `tea_` | teammate | `tea_abc123` |37| `tag_` | tag | `tag_abc123` |38| `inb_` | inbox | `inb_abc123` |39| `chn_` | channel | `chn_abc123` |40| `ctc_` | contact | `ctc_abc123` |41| `drf_` | draft | `drf_abc123` |42| `rsp_` | template | `rsp_abc123` |43| `att_` | attachment | `att_abc123` |44| `hdl_` | handle | `hdl_abc123` |4546## Output Formats4748| Flag | Format | Use case |49|------------|--------|----------|50| (default) | Table | User-facing display |51| `--json` | JSON | Agent parsing, scripting |52| `--plain` | TSV | Pipe to awk/cut |5354JSON list responses wrap results in `._results[]`. Single-object responses return the object directly.5556## Workflows5758### Read a Conversation Thread5960```bash61# Full message bodies + comments (timeline view)62frontcli conv get cnv_xxx --full --json6364# Metadata only65frontcli conv get cnv_xxx --json6667# Messages only68frontcli conv messages cnv_xxx --json6970# Comments only71frontcli conv comments cnv_xxx --json72```7374Use `--full` when you need message content; omit for metadata only.7576### Search / List Conversations7778```bash79# List recent open conversations80frontcli conv list --status open --limit 10 --json8182# List by inbox or tag83frontcli conv list --inbox inb_xxx --json84frontcli conv list --tag tag_xxx --json8586# Free-text search87frontcli conv search "customer issue" --json8889# Filtered search90frontcli conv search --from client@co.com --status open --json91frontcli conv search --tag tag_xxx --assignee me --json92frontcli conv search --after "2025-01-01" --before "2025-02-01" --json93```9495Search flags: `--from`, `--to`, `--recipient`, `--inbox`, `--tag` (repeatable), `--status`, `--assignee`, `--unassigned`, `--before`, `--after`, `--limit`.9697### Reply to a Conversation9899```bash100frontcli msg reply cnv_xxx --body "Thanks for reaching out."101frontcli msg reply cnv_xxx --body-file ./reply.txt102```103104### Send a New Message105106Requires a channel ID. Find channels first:107108```bash109frontcli channels list --json110frontcli msg send --channel chn_xxx --to user@example.com --subject "Hello" --body "Message body"111```112113### Add Internal Comment114115Comments are internal notes visible only to teammates:116117```bash118frontcli comments create cnv_xxx --body "Internal note: customer is VIP"119```120121### Manage Tags122123```bash124# List available tags125frontcli tags list --json126127# Find tag ID by name128frontcli tags list --json | jq -r '._results[] | select(.name == "Urgent") | .id'129130# Tag / untag a conversation131frontcli conv tag cnv_xxx tag_xxx132frontcli conv untag cnv_xxx tag_xxx133```134135### Assign / Unassign136137```bash138# Find teammate IDs139frontcli teammates list --json140141# Assign / unassign142frontcli conv assign cnv_xxx --to tea_xxx143frontcli conv unassign cnv_xxx144```145146### Manage Conversation Status147148```bash149frontcli conv archive cnv_xxx150frontcli conv open cnv_xxx151frontcli conv trash cnv_xxx152153# Snooze (timestamp or duration)154frontcli conv snooze cnv_xxx --until "2025-01-15T09:00:00Z"155frontcli conv snooze cnv_xxx --duration 2h156frontcli conv unsnooze cnv_xxx157```158159### Look Up Contacts160161```bash162frontcli contacts search "john" --json163frontcli contacts get ctc_xxx --json164frontcli contacts handles ctc_xxx --json165frontcli contacts convos ctc_xxx --json166```167168### Templates169170```bash171frontcli templates list --json172frontcli templates use rsp_xxx173174# Use template body in a reply175BODY=$(frontcli templates use rsp_xxx)176frontcli msg reply cnv_xxx --body "$BODY"177```178179### Drafts180181```bash182frontcli drafts create cnv_xxx --body "Draft reply"183frontcli drafts list cnv_xxx --json184frontcli drafts update drf_xxx --body "Updated" --draft-version 1185frontcli drafts delete drf_xxx186```187188### Custom Fields189190```bash191frontcli conv update cnv_xxx --field "Priority=High" --field "Category=Support"192```193194## Bulk Operations195196```bash197# Archive all conversations with a tag (xargs)198frontcli conv list --tag tag_xxx --json | jq -r '._results[].id' | xargs frontcli conv archive199200# Archive from stdin201frontcli conv list --tag tag_xxx --json | jq -r '._results[].id' | frontcli conv archive --ids-from -202203# Tag all open unassigned conversations204frontcli conv search --status open --unassigned --json | jq -r '._results[].id' | \205 while read id; do frontcli conv tag "$id" tag_xxx; done206```207208## Environment Variables209210| Variable | Description |211|----------|-------------|212| `FRONT_ACCOUNT` | Default account (avoids `--account`) |213| `FRONT_JSON` | Set `1` for JSON output by default |214| `FRONT_PLAIN` | Set `1` for TSV output by default |215216## Command Reference217218| Command | Subcommands |219|---------|-------------|220| `conv` | `list`, `get`, `search`, `messages`, `comments`, `archive`, `open`, `trash`, `assign`, `unassign`, `snooze`, `unsnooze`, `followers`, `follow`, `unfollow`, `tag`, `untag`, `update` |221| `msg` | `get`, `send`, `reply`, `attachments`, `attachment download` |222| `drafts` | `create`, `list`, `get`, `update`, `delete` |223| `tags` | `list`, `get`, `create`, `update`, `delete`, `children`, `convos` |224| `contacts` | `list`, `search`, `get`, `handles`, `handle add/delete`, `notes`, `note add`, `convos`, `create`, `update`, `delete`, `merge` |225| `inboxes` | `list`, `get`, `convos`, `channels` |226| `teammates` | `list`, `get`, `convos` |227| `channels` | `list`, `get` |228| `comments` | `list`, `get`, `create` |229| `templates` | `list`, `get`, `use` |230| `whoami` | (show authenticated user) |231| `auth` | `setup`, `login`, `logout`, `status`, `list` |232233## Guidelines234235- Never expose or log OAuth tokens, client secrets, or keyring contents.236- Confirm destructive operations (`trash`, `delete`, `archive`) with the user first.237- `contacts merge` is irreversible -- always confirm before executing.238- Rate limits are handled automatically with exponential backoff.239- When an error mentions wrong ID prefix, check the ID Reference table.240241242## Installation243244```bash245brew install dedene/tap/frontcli246```247248---249> Converted and distributed by [TomeVault](https://tomevault.io/claim/dedene) — claim your Tome and manage your conversions.250<!-- tomevault:4.0:skill_md:2026-04-13 -->