Repository navigation
Releases
Releases · WireCatLabs/tg-cli
0.128.0
Changed — may break callers
- A
readonlylevel no longer stops a sync (cli-core 0.662.0, was 0.659.0). Commands that only fetch from
Telegram into the local store (sync,messages sync,contacts sync,metadata sync,store gaps repair,
--sync-first) run atreadonly;denystill refuses them. Commands that write the owner's files or call another
service stay blocked byreadonly. A profile that usedreadonlyto stop syncing sets the key todeny. - Dates in list queries read the computer's zone (cli-core 0.661.0).
todayand a bare date intasks list,
chats listand the other list queries started in UTC and now start at local midnight, as search does. - The MCP tool
messages_phototakesattachment, from 1 (cli-core 0.661.0), asattachments_showdoes. It
tookindexfrom 0. - A server search no longer sends a
to:orcc:person to Telegram as the sender (cli-core 0.660.0); the store
still filters them.
0.127.0
Changed — may break callers
- Deleting messages no longer asks, and enabled reply rules send (cli-core 0.659.0, was 0.656.0).
messages delete
andbot messages deletego ahead without a question or--allow-dangerous; a profile that wants the question
setsmessages.delete: ask.replies.sendis nowallow, soservesends the replies of the rules you turned on;
a new rule still starts off, andreplies.send: denystops every automatic reply. See the
cli-core changelog.
Fixed
- A shared config with a small slip is mended when it is read.
~/.config/WireCat/config.jsonwith a
byte-order mark, a comment, a trailing comma or a missing comma between two lines is fixed in place, the old file
kept beside it asconfig.json.bak-<time>. Other damage names its line, column and the likely fix.
0.126.0
Added
- The first screen and first run list
pbx(cli-core 0.651.0), WireCat's Asterisk tool, under "Works with" and
among the tools first run offers to install. doctor reports creategives a pre-filled issue link (cli-core 0.651.0) inissue_urland in its note. The
title and body hold only the version, the platform and the failed run's error code; the report file stays on the
computer until you attach it.
Changed — may break callers
- Built on cli-core 0.656.0 (was 0.651.0). See the
cli-core changelog.
Fixed
- A mistyped profile in
TG_PROFILElists the profiles here (cli-core 0.651.0), as a mistyped first word does. session startandsetupkeep Telegram's refusal (cli-core 0.651.0). A failed sign-in for a new profile was
reported as "no profile named …", which hid the reason.schedule commandsaves PATH without its relative folders (cli-core 0.651.0). Under pnpm,schedule exec
refused such a schedule; save it again and it runs.- A model at an IPv6 address such as
https://[fd00::1]is reached again (cli-core 0.651.0). - A shared config that cannot be read no longer makes this tool read-only. A WireCat config
(~/.config/WireCat/config.json) with a byte-order mark, broken JSON, a folder in its place or an oldersetup
shape capped every profile at read-only, and an MCP server hidmessages sync. Now only the owner's own "read only"
answer limits a tool, and even thenmessages syncis offered over MCP: it only reads the messenger into the local
store (cli-core 0.656.0).
Security
account removewith only the config folder moved no longer signs the owner's session out (cli-core 0.651.0).
The state folder there is the owner's, so the sign-in is now listed underkept.
0.125.0
Changed — may break callers
contacts contextandcontacts prepareanswermeetings[](cli-core 0.650.0): the recorded calls of that
person, from a meetings CLI that shares the store. A caller that checks the answer against a pinned schema updates
it.
Fixed
TG_READ_ONLYlets Telegram's search through (cli-core 0.650.0). The lock promises "can read and sync but never
send", yetsearch messages --backend serverfailed withpermission_errorand the default--backend both
dropped the server without a word. Reads that only fetch from Telegram or work locally now pass the lock
(#874); catch-up for local search too
(#872).- An archive-only search over a partly synced chat suggests Telegram's search (cli-core 0.650.0):
nextleads
with the same query and--backend server(#873). - The skill no longer keeps agents on the local copy. For an agreement or a document it said "search the local
archive", and agents added--backend archive, so a message older than the synced history came back "not found"
although Telegram's own search had it. The skill now searches the archive and Telegram together, keeps
--backend archivefor an owner who asked that nothing leaves the machine, and, when a search finds nothing in a
partly synced chat, tries the server before a sync (#873).
Security
- The update check and model calls reach only their own host (cli-core 0.650.0). A redirect to another host is
refused, and each exchange has a deadline. - A run with moved folders removes nothing in the owner's folders (cli-core 0.650.0). With only
TG_CONFIG_DIR
moved,account removedeleted files in the owner's real state folder, and--delete-datapurged the account from
the owner's store. Now each is kept, with its reason underkept.
0.124.0
Added
- From
@wirecat/cli-core0.648.0 (was 0.633.0):images read <ref>has your coding agent read the text of one
picture and keeps it for search;schedule agentstarts gemini, cursor, opencode, openclaw, hermes, grok and kimi
as well as claude and codex, andschedule agents listsays which are on PATH;contacts unlink --from <person>.
Changed — may break callers
- Local only keeps every model call on this computer (cli-core 0.648.0). With the switch on
(memo models local-only set on), tg's model calls, remote embeddings and OpenAI transcription refuse any address
that is not this computer before anything is sent (local-only.refused). - Plain http goes only to this computer, for every model call. Enrichment, search harder, linking, reply drafts,
attachment OCR and remote embeddings refuse anhttp://address on another machine (model.address-refused); use
https, or run the model on this computer. - Voice messages are heard by the downloaded model first.
autouses the local speech model when it is downloaded
and asks Telegram only when it is not, and never under local only. - Every agent schedule must be saved again (cli-core 0.648.0). A schedule saved before is refused with
agent.refusedand a hint to save it again; a codex schedule needs--allow-dangerous. stats tasks showhas no--chatany more (cli-core 0.648.0): name the chat in the query,
tg personal stats tasks show 'chat:"Project room"'.- A mistyped profile is
not_foundwith reasonprofile.unknownand the profiles on this computer, where it was
"not signed in" (cli-core 0.648.0).tg serveunder a service unit is not restarted after that exit (6), as after a
missing login (4); a unit installed before keeps its old setting untilserver installruns again. store resetis no longer offered over MCP, andstore restoreandstore recover runneedmcp.authority
(cli-core 0.648.0).doctor reports create --outputrefuses to overwrite a file.
Fixed
- The archive and search pages say that
messages sync --allleaves out muted chats, and show--with-muted.
Security
tg session endin a run with moved folders keeps the owner's login. With onlyTG_CONFIG_DIRor
TG_CACHE_DIRmoved, the state folder is still the owner's, andsession endlogged that login out on Telegram
and deleted its file. It now answersended: falsewithkept: "owners-sign-in"and changes nothing.
account removein such a run keeps the owner's session file and bots folder too. A moved run whose state folder
is its own forgets its session file but never logs out on Telegram (logged_out: false): a file copied there
would still be the owner's login.
0.123.0
Added
muted:in search and stats, from@wirecat/cli-core0.633.0.muted:falseleaves out the chats you muted, so
stats messages show -- 'date>=30d muted:false'counts only what the sync still reads.stats messages responses
andstats messages waitingtake it too.store import, from@wirecat/cli-core0.633.0. Loads made-up chats, people and messages from a file marked synthetic into a test store, such as Desktop's sandbox; it refuses the owner's real store.
0.122.0
Changed — may break callers
- Built on cli-core 0.630.0 (was 0.624.0). The store moves to version 63 on first open. Each person's kind is
kept on the person, and saving a chat's members leaves the rows of members who stayed, so memo'speople list
filters, counts and pages in SQL. People who wrote in a one-to-one chat or a small group now count as the owner's
people, no rule joins anyone to the owner's person, and a name is matched across Cyrillic and Latin. A tool on an
older cli-core that saves members clears the kept kinds, so tg, max and memo move together. What changed in between
is in cli-core's changelog.
0.121.0
Changed — may break callers
- Built on cli-core 0.624.0 (was 0.619.0). The store moves to version 61 on first open (people ties, additive).
What changed in between is in cli-core's changelog. search messages --timeout 30smay search for up to about 29 seconds. It stopped at 2 seconds whatever time the
run was given, so a valid query over a large store failed in WireCat Desktop. Without--timeoutit stays 2 seconds,
for agents and MCP too.schedule pause <name>andschedule resume <name>take a schedule off its timer and keep it;schedule run
still runs it.--atrepeats:--at 08:30 --at 18:00runs twice a day.
0.120.0
Changed — may break callers
tg messages sync --allleaves out the chats you muted. An account with many muted groups no longer downloads
them all. The answer counts them inlimited.muted, and a note says how to read them. Messages already stored stay,
and a chat you name (tg messages sync <chat>) or keep with--full-historyis read as before. To read muted chats
again, pass--with-mutedfor one run, or settg config set history_muted true. From cli-core 0.619.0 (was
0.618.0).- EmbeddingGemma is the default text model for search by meaning, not e5-small. A computer that already has
e5-small and not EmbeddingGemma keeps e5-small.tg models downloadno longer asks to accept its terms;
--accept-termsis ignored. tg contacts linkrun by an agent proposes the link instead of making it, and needs--reason. Only the
owner decides; an agent'stg contacts unlinkis refused.
Fixed
bin/releasepublishes when main has onlychanges/fragments and no## Unreleased. With the version taken on
npm it looked for## Unreleasedto put the next version under, found none and stopped before publishing. It now adds
the new version's heading above the newest one and collects the fragments into it.
0.119.0
Added
tg account remove --keep-data|--delete-datalogs the profile out on Telegram's side, then forgets it on this
computer: its session files, its app id and hash and proxy password in the keyring, its bots' history sessions and
what cli-core keeps for it.--keep-dataleaves its messages searchable;--delete-datadeletes them. A bot token
stays, and so does every other profile. A run with moved folders forgets its own copy and never logs out for the owner.tg models setandtg models addfrom cli-core 0.609.0: choose the local embedding model every WireCat
CLI uses, and add one of your own from Hugging Face. A question with a time in it (HH:MM,10:30) is searched by
its words again.- tg ships
contracts/wirecat.json, which says which hosts it talks to over HTTP. WireCat Desktop reads it to
show you, before you install, what tg touches:api.telegram.org(bots) andmy.telegram.org(registering your
app), plus the proxy you set. Your account's own connection to Telegram (MTProto) is not HTTP and is not in that
list. - A pull request adds its changelog entries as a fragment,
changes/<branch>.md. Open pull requests no longer
conflict under## Unreleased.pnpm docs:checkchecks each fragment, andbin/releasecollects them into the
version's section. An entry under## Unreleasedstill works during the move.
Changed — may break callers
- tg now writes the shared store at version 59, and an older WireCat CLI refuses it until it is upgraded. Run
<cli> upgradefor each WireCat CLI on the same store. From cli-core 0.615.0, whose message templates live in the
store.
Fixed
tg serveexits when the build it runs is out of date, so its service starts the new one. Every minute it
checks whether the shared store moved to a format this build can no longer write, or whether a newer tg is
installed. If so it logsserve.outdatedand exits with code 3, and the systemd unit (Restart=on-failure)
starts the installed version. Before, a serve could run for a day on the old build and store nothing.- After
tg store recover run, the next ordinary sync fetches again what the damage may have taken. The recovery
marks what each chat held from a day before the last deep check that passed as not fetched, so a sync no longer
jumps over a hole inside a chat. From cli-core 0.618.0 (was 0.616.0).
Security
- The chat with BotFather is kept out of search. It holds every bot token BotFather sent, so search over all chats
(memo searchtoo), search by meaning andmemo contextleave it out;tg messages listand a search that names
the chat still read it. Takes effect with the cli-core release that readsChat.searchable, at the next sync of the
chat list; that release also masks bot tokens in every chat. - tg's HTTP reaches only the hosts it declares. Every Bot API call and every step of app registration goes
through cli-base'shostFetch. It refuses any other host before a byte is sent, checks each redirect and drops
theAuthorizationheader on a redirect to another site. Through a SOCKS5 or HTTP proxy the check still holds.
It does not cover MTProto, which GramJS sends over its own sockets to Telegram's data centres, or an MTProxy.
From cli-base 0.87.0 (was 0.80.8) and cli-core 0.615.0 (was 0.609.0).