Inline CLI
Global flags
- •
--json: Output JSON instead of human tables/details (available on all commands). This greatly increases the verbosity and information you can get. Most of the data is either not included or truncated/redacted in the default human readable mode. Use JSON mode when you need exact details of a chat, message, etc. You can start with default mode and switch to json mode for more details and form your response. - •
--pretty: Pretty-print JSON output (default). - •
--compact: Compact JSON output (no whitespace).
Subcommands
auth
- •
inline auth login [--email you@x.com | --phone +15551234567]- •Run an interactive login flow.
- •If code is wrong, prompt to try again or edit email/phone (no hard exit).
- •
inline auth me- •Fetch and print the current user (verifies your token is still valid).
- •
inline auth logout- •Clear the stored token and current user.
chats
- •
inline chats list- •List chats with human-readable names, unread count, and last message preview (sender + text in one column).
- •
inline chats get [--chat-id 123 | --user-id 42]- •Fetch a chat (thread or DM) by id.
- •
inline chats participants --chat-id 123- •List participants for a chat, including join date.
- •
inline chats add-participant --chat-id 123 --user-id 42- •Add a user to a chat.
- •
inline chats remove-participant --chat-id 123 --user-id 42- •Remove a user from a chat.
- •
inline chats create --title "Project" [--space-id 31] [--description "Spec"] [--emoji ":rocket:"] [--public] [--participant 42]- •Create a new chat or thread. If
--publicis set, participants must be empty.
- •Create a new chat or thread. If
- •
inline chats create-dm --user-id 42- •Create a private chat (DM).
- •
inline chats mark-unread [--chat-id 123 | --user-id 42]- •Mark a chat or DM as unread.
- •
inline chats mark-read [--chat-id 123 | --user-id 42] [--max-id 456]- •Mark a chat or DM as read. If
--max-idis omitted, marks through the latest message.
- •Mark a chat or DM as read. If
- •
inline chats delete --chat-id 123- •Delete a chat (space thread). Prompts for confirmation unless
--yesis provided.
- •Delete a chat (space thread). Prompts for confirmation unless
users
- •
inline users list- •List users that appear in your chats (derived from getChats).
- •
inline users list --filter "name"- •Filter users by name, username, email, or phone.
- •
inline users get --id 42- •Fetch one user by id (from the same getChats payload).
spaces
- •
inline spaces list- •List spaces referenced by your chats (derived from getChats).
- •
inline spaces members --space-id 31- •List members in a space.
- •
inline spaces invite --space-id 31 [--user-id 42 | --email you@x.com | --phone +15551234567] [--admin] [--public-chats]- •Invite a user to a space (role is optional; defaults to server behavior).
- •
inline spaces delete-member --space-id 31 --user-id 42- •Remove a member from a space (prompts for confirmation; use
--yesto skip).
- •Remove a member from a space (prompts for confirmation; use
- •
inline spaces update-member-access --space-id 31 --user-id 42 [--admin | --member] [--public-chats]- •Update a member's access/role. Provide
--adminor--member(and optional--public-chats).
- •Update a member's access/role. Provide
notifications
- •
inline notifications get- •Show current notification settings.
- •
inline notifications set [--mode all|none|mentions|important] [--silent | --sound]- •Update notification settings.
update
- •
inline update- •Download and install the latest release for this machine.
doctor
- •
inline doctor- •Print diagnostic info (system, config, paths, auth state).
messages
- •
inline messages list [--chat-id 123 | --user-id 42] [--limit 50] [--offset-id 456] [--translate en]- •List chat history for a chat or DM.
- •
--translate <lang>fetches translations and includes them in output.
- •
inline messages export [--chat-id 123 | --user-id 42] [--limit 50] [--offset-id 456] --output PATH- •Export chat history to a JSON file.
- •
inline messages search [--chat-id 123 | --user-id 42] --query "onboarding" [--query "alpha beta"] [--limit 50]- •Search messages in a chat or DM.
- •
--queryis repeatable; each query can contain space-separated terms (ANDed within a query, ORed across queries). Extra whitespace is collapsed.
- •
inline messages get --chat-id 123 --message-id 456 [--translate en]- •Fetch one full message by id (includes media + attachments).
- •
inline messages send [--chat-id 123 | --user-id 42] [--text "hi"] [--stdin] [--reply-to 456] [--mention USER_ID:OFFSET:LENGTH ...] [--attach PATH ...] [--force-file]- •Send a message (markdown parsing enabled). Mentions are provided via
--mentionwith UTF-16 offsets. - •
--stdinreads message text from stdin. - •
--attachis repeatable. Each attachment is sent as its own message;--textis reused as the caption. - •Folders are zipped before upload. Attachments over 200MB are rejected.
- •
--force-fileuploads photos/videos as files (documents). - •
--mentionis repeatable and must match the message text (user_id:offset:lengthwith UTF-16 units).
- •Send a message (markdown parsing enabled). Mentions are provided via
- •
inline messages edit [--chat-id 123 | --user-id 42] --message-id 456 [--text "updated" | --stdin]- •Edit a message by id.
- •
inline messages delete [--chat-id 123 | --user-id 42] --message-id 456 [--message-id 789]- •Delete one or more messages (prompts for confirmation; use
--yesto skip).
- •Delete one or more messages (prompts for confirmation; use
- •
inline messages add-reaction [--chat-id 123 | --user-id 42] --message-id 456 --emoji "👍"- •Add an emoji reaction to a message (emoji characters only, no
:shortcode:).
- •Add an emoji reaction to a message (emoji characters only, no
- •
inline messages delete-reaction [--chat-id 123 | --user-id 42] --message-id 456 --emoji "👍"- •Remove an emoji reaction from a message (emoji characters only, no
:shortcode:).
- •Remove an emoji reaction from a message (emoji characters only, no
- •
inline messages download [--chat-id 123 | --user-id 42] --message-id 456 [--output PATH | --dir PATH]- •Download the attachment from a message.
Examples
- •Login and greet user:
- •
inline auth login(prompts for email/phone + code, then prints welcome name)
- •
- •Verify who you are:
- •
inline auth me
- •
- •Check diagnostics:
- •
inline doctor
- •
- •Search messages in a chat:
- •
inline messages search --chat-id 123 --query "design review" - •JSON:
inline messages search --chat-id 123 --query "design review" --json
- •
- •Translate and list messages:
- •
inline messages list --chat-id 123 --translate en
- •
- •Export messages to a file:
- •
inline messages export --chat-id 123 --output ./messages.json
- •
- •Send message with multiple attachments:
- •
inline messages send --chat-id 123 --text "FYI" --attach ./photo.jpg --attach ./spec.pdf
- •
- •Reply to a message:
- •
inline messages send --chat-id 123 --reply-to 456 --text "on it"
- •
- •Send a message with a mention entity:
- •
inline messages send --chat-id 123 --text "@Sam hello" --mention 42:0:4
- •
- •Download an attachment:
- •
inline messages download --chat-id 123 --message-id 456 --dir ./downloads
- •
- •Edit and delete a message:
- •
inline messages edit --chat-id 123 --message-id 456 --text "updated" - •
inline messages delete --chat-id 123 --message-id 456
- •
- •Invite and manage members:
- •
inline spaces invite --space-id 31 --email you@example.com - •
inline spaces update-member-access --space-id 31 --user-id 42 --admin
- •
- •JQ pipelines for lists:
- •
inline users list --json | jq -r '.users[] | "\(.id)\t\(.first_name) \(.last_name)\t@\(.username // "")\t\(.email // "")"' - •
inline users list --json | jq -r '.users[] | select((.first_name + " " + (.last_name // "") + " " + (.username // "") + " " + (.email // "")) | ascii_downcase | contains("mo")) | "\(.id)\t\(.first_name) \(.last_name)"'
- •
- •
inline chats list --json | jq -r '.chats[] | "\(.id)\t\(.title // "")\tspace:\(if .space_id == null then "dm" else (.space_id | tostring) end)"' - •
inline chats list --json | jq -r '.dialogs[] | select(.unread_count > 0) | "\(.chat_id)\tunread:\(.unread_count)"' - •
inline messages list --chat-id 123 --json | jq -r '.messages[] | "\(.id)\t\(.from_id)\t\((.message // "") | gsub("\n"; " ") | .[0:80])"'
Agent Tips
Finding users quickly
bash
inline users list | grep -i "partial_name"
Faster than parsing JSON when you just need user ID.
Filtering messages with jq
bash
# Get last N outgoing messages (your messages) inline messages list --user-id ID --json | jq '[.messages[] | select(.out == true)] | .[0:3]' # Get last N incoming messages (their messages) inline messages list --user-id ID --json | jq '[.messages[] | select(.out == false)] | .[0:3]'
Multi-term search for feedback/bugs
bash
inline messages search --user-id ID --query "bug" --query "issue" --query "loom" --query "broken" --limit 30 --json
Each --query is ORed together - useful for finding feedback items.
Common patterns
- •Use --user-id for DMs instead of looking up chat IDs
- •Use --json + jq for programmatic filtering
- •Use default (non-JSON) mode for quick human-readable output
More quick tips
bash
# Page back with offset-id inline messages list --chat-id ID --limit 50 --offset-id 1234 # Get the latest message id inline messages list --chat-id ID --limit 1 --json | jq '.messages[0].id' # Export a batch for offline review inline messages export --chat-id ID --limit 500 --output ./chat.json # Compact JSON for pipelines inline messages list --chat-id ID --json --compact | jq '.messages | length'
JSON samples
Chat list (GetChatsResult, truncated to essential fields):
code
{
"dialogs": [
{
"peer": { "type": { "Chat": { "chat_id": 340 } } },
"space_id": 31,
"archived": false,
"pinned": false,
"read_max_id": 1,
"unread_count": 0,
"chat_id": 340,
"unread_mark": false
}
],
"chats": [
{
"id": 340,
"title": "Main",
"space_id": 31,
"description": "Main chat for everyone in the space",
"emoji": null,
"is_public": true,
"last_msg_id": 1,
"peer_id": { "type": { "Chat": { "chat_id": 340 } } },
"date": 1754585453
}
],
"spaces": [
{ "id": 31, "name": "Design", "creator": false, "date": 1750000000 }
],
"users": [
{
"id": 1000,
"first_name": "Ava",
"last_name": "Chen",
"username": "ava",
"email": "ava@example.com",
"min": false,
"bot": false
}
],
"messages": [
{
"id": 1,
"from_id": 1000,
"peer_id": { "type": { "Chat": { "chat_id": 340 } } },
"chat_id": 340,
"message": null,
"out": true,
"date": 1754585453,
"media": {
"media": {
"Document": {
"document": {
"id": 32,
"file_name": "recording.mp4",
"mime_type": "video/mp4",
"size": 6932635,
"cdn_url": "https://..."
}
}
}
}
}
]
}
Message list (GetChatHistoryResult, truncated to essential fields):
code
{
"messages": [
{
"id": 456,
"from_id": 42,
"peer_id": { "type": { "Chat": { "chat_id": 123 } } },
"chat_id": 123,
"message": "Ship it",
"out": true,
"date": 1733184000,
"attachments": {
"attachments": [
{
"id": 9001,
"attachment": {
"UrlPreview": {
"id": 88,
"url": "https://...",
"site_name": "Docs",
"title": "Spec",
"description": "API rollout spec"
}
}
}
]
}
}
]
}