Back to skills
extension
Category: Development & EngineeringNo API key required

inline-cli

Explain and use the Inline CLI (`inline`) for authentication, chats, users, spaces, messages, search, attachments, downloads, JSON output, and configuration. Use when asked how to use the Inline CLI or its commands, flags, outputs, or workflows.

personAuthor: jakexiaohubgithub

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 --public is set, participants must be empty.
  • 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-id is omitted, marks through the latest message.
  • inline chats delete --chat-id 123
    • Delete a chat (space thread). Prompts for confirmation unless --yes is provided.

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 --yes to skip).
  • inline spaces update-member-access --space-id 31 --user-id 42 [--admin | --member] [--public-chats]
    • Update a member's access/role. Provide --admin or --member (and optional --public-chats).

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.
    • --query is 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 --mention with UTF-16 offsets.
    • --stdin reads message text from stdin.
    • --attach is repeatable. Each attachment is sent as its own message; --text is reused as the caption.
    • Folders are zipped before upload. Attachments over 200MB are rejected.
    • --force-file uploads photos/videos as files (documents).
    • --mention is repeatable and must match the message text (user_id:offset:length with UTF-16 units).
  • 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 --yes to skip).
  • 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:).
  • 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:).
  • 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

inline users list | grep -i "partial_name"

Faster than parsing JSON when you just need user ID.

Filtering messages with jq

# 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

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

# 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):

{
  "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):

{
  "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"
              }
            }
          }
        ]
      }
    }
  ]
}