Skip to content

Usage Friends and Chat

Alex edited this page Oct 2, 2026 · 2 revisions

Friends & chat

Part of the Usage reference. · ← Previous: Steam Workshop · Next: Inventory, wallet & market →

Manage your Steam friends, look up profiles and wishlists, and exchange direct (friend-to-friend) messages. All of these commands require an active session. Since v0.1.38, user lookups go over the Steam connection and no longer read the public Community ?xml=1 profile pages.

To receive friend data and incoming messages, the session must announce a Steam presence. Steam treats a refresh-token logon as offline and withholds friend persona state and chat until a presence is declared. The daemon does this automatically on connect using the configured config presence. A standalone session announces it on demand. Presence defaults to offline, which is an invisible presence: you appear offline to friends but still sync your friends list and receive messages. Change it with config presence.

A <STEAMID> below is a friend's SteamID64, the 17-digit id shown by friends.

User identifiers

user, wishlist, friends search and friends add take a <USER> that may be any of:

  • a 17-digit SteamID64 (7656…; a shorter number is rejected),
  • a profile URL (https://steamcommunity.com/profiles/<id>),
  • me, the logged-in account, or
  • a friend's display name. An exact (case-insensitive) match wins, otherwise a unique prefix. Several matches are an error that lists them. Non-friends need a SteamID64 or profile URL.

Custom (vanity) URLs (steamcommunity.com/id/<name>) are not accepted any more: the Steam connection cannot resolve them. Pass the SteamID64 or the /profiles/ URL instead.

friends

List your Steam friends with display name, online status, and current game.

aurelia friends [--json]

The text view is a STATUS / STEAMID / NAME / GAME table, where STATUS is the persona state (online, offline, busy, away, snooze, looking to trade, looking to play). The --json output is an array of { "steam_id", "relationship", "persona_name", "persona_state", "game_app_id", "game_name" } (only accepted friends, relationship 3, are listed. persona_state is the raw EPersonaState integer).

Through the daemon the roster is served from a background watcher that keeps it live as Steam pushes friend/persona updates, so a call right after the daemon starts may be briefly empty until the initial list arrives. Run it again a moment later. Standalone it does a short best-effort collection over a fresh connection.

aurelia friends
aurelia friends --json

aurelia friends is shorthand for aurelia friends list.

user

Show a Steam user's profile, as Steam reports it over the CM connection (no web requests).

aurelia user <USER> [--json]

<USER> is any user identifier. The text view prints the display name and SteamID64, profile URL, avatar URL, privacy (public, friends-only or private, plus limited account), and, when Steam shares them, the real name, location, account creation date, online status, current game, last-seen date, headline, profile summary and any community ban. Private profiles show less. The --json output is the full profile object: { "steam_id", "persona_name", "profile_url", "avatar_url", "visibility", "privacy_state", "is_public", "is_limited", "ban_expires", "created", "real_name", "location", "headline", "summary", "persona_state", "game_app_id", "game_name", "last_logoff", "sources" }.

aurelia user me
aurelia user 76561197960287930 --json
aurelia user "AI Jungle Wulf"          # a friend, by display name

friends search

Same as user: shows a user by identifier, with the same output. Kept so existing scripts keep working. Steam exposes no free-text people search, so this resolves one specific user rather than searching.

aurelia friends search <USER> [--json]
aurelia friends search 76561197960287930
aurelia friends search https://steamcommunity.com/profiles/76561197960287930

wishlist

Show your wishlist, or a friend's, with store prices. Add or remove items on your own.

aurelia wishlist [<USER>] [-n <N>] [-o <OFFSET>] [-c <CC>] [-l <LANG>] [--json]
aurelia wishlist add <APP_ID> [--json]
aurelia wishlist remove <APP_ID> [--json]
Option Description
<USER> Whose wishlist to show (a user identifier). Defaults to yours.
-n, --count <N> Maximum items to show (default 50).
-o, --offset <N> Skip this many items first, for paging (default 0).
-c, --country <CC> (alias --cc) Price region. Defaults to config country, then the system locale, then US.
-l, --lang <LANG> (alias --language) Language for names.

The table shows # (your wishlist rank), APPID, PRICE, DISCOUNT, ADDED and NAME, with prices from one batched store lookup. A wishlisted app that is no longer on the store reads (not on the store). Steam only lets you read friends' wishlists: anyone else's fails with a privacy error ("type": "privacy_restricted"), and so does a friend's wishlist that is private or empty. The --json output is { "steam_id", "total", "offset", "items" }, where each item has the same fields as a search row plus priority, date_added and date_added_date.

wishlist add and wishlist remove change your own wishlist and report the new item count. Their --json output is { "app_id", "status": "added"|"removed", "wishlist_count" }.

aurelia wishlist                         # yours, first 50 items
aurelia wishlist -n 20 -o 20             # items 21-40
aurelia wishlist "AI Jungle Wulf"        # a friend's
aurelia wishlist add 1245620
aurelia wishlist remove 1245620

friends add / remove

Send a friend request, or remove a friend / cancel a pending request. Both require an active session.

aurelia friends add <USER> [--json]
aurelia friends remove <STEAMID> [--json]

add accepts any user identifier except custom (vanity) URLs. It is resolved to a SteamID and a request is sent. Aurelia waits for Steam's confirmation and reports the target (and its name, when Steam returns one). A non-OK result is surfaced as a clear error (e.g. friend-list full, rate-limited, or access denied). The --json output is { "steam_id", "persona_name", "status": "request_sent" }.

remove takes a SteamID64 (as listed by friends) and removes that friend or withdraws a request you sent. It is fire-and-forget (Steam returns no acknowledgement), so it reports success once the message is sent. The --json output is { "steam_id", "status": "removed" }.

aurelia friends add 76561197960287930
aurelia friends add https://steamcommunity.com/profiles/76561197960287930
aurelia friends remove 76561197960287930

Friend requests are visible to the recipient. Sending many in a short time can trip Steam's rate limits (surfaced as an EResult 84 error).

chat send

Send a direct message to a friend.

aurelia chat send <STEAMID> <MESSAGE>...

All words after the SteamID form the message (quote it to be safe). The --json output is { "steamid", "sent", "server_timestamp", "modified_message" } (modified_message is set only when Steam rewrites the text, e.g. applying bbcode).

aurelia chat send 76561198042323314 "on my way"
aurelia chat send 76561198042323314 "ggwp" --json

chat history

Show recent messages exchanged with a friend, most recent first.

aurelia chat history <STEAMID> [-n <N>] [--json]
Option Description
-n, --count <N> How many recent messages to fetch (default 20).

The text view prints [<timestamp>] me/them: <text>. The --json output is an array of { "sender", "from_self", "message", "timestamp" } (sender a SteamID64, timestamp a Unix time).

aurelia chat history 76561198042323314
aurelia chat history 76561198042323314 --count 50 --json

chat open

Open an interactive live chat with a friend: incoming messages stream to stdout while each line you type on stdin is sent. The session ends on stdin EOF, Ctrl-D (or Ctrl-Z then Enter on Windows), or if the connection closes.

aurelia chat open <STEAMID> [--json]

In plain mode it prints them: <text> for incoming messages, me (sent elsewhere): <text> for messages you sent from another device, and a typing indicator. With --json it becomes an NDJSON event stream for front-ends, reading message text from stdin lines and emitting one event per line:

Event line When
{"event":"ready","with":<steamid>} Session established.
{"event":"message","from":<steamid>,"text":"…","timestamp":<unix>} A message arrived from the friend.
{"event":"echo","to":<steamid>,"text":"…","timestamp":<unix>} A message you sent from another device.
{"event":"typing","from":<steamid>,"timestamp":<unix>} The friend is typing.
{"event":"error","message":"…"} A send failed.
{"event":"closed","with":<steamid>} Terminal: the session ended.

It runs naturally over the daemon: the thin client streams your stdin and relays the daemon's stdout in real time, so the live session reuses the shared, already-online connection.

aurelia chat open 76561198042323314
echo "brb" | aurelia chat open 76561198042323314      # send one line, then exit on EOF
aurelia chat open 76561198042323314 --json            # NDJSON event stream

Clone this wiki locally