Skip to content

Resources

Changelog

What changed in Telem, newest first: the API, the SDKs, the agent plugins, the installer and the MCP server, with the version that ships each change.

This page starts with the state each package was in when this documentation site launched. Earlier changes live in the project’s git history.

Installer: a private deployment’s MCP url

Section titled “Installer: a private deployment’s MCP url”

The installer takes --mcp-url, the MCP url of a private deployment, next to --base-url, its REST url. Codex, Grok Build, Muse, VS Code, Cursor, Devin Desktop, the copy-paste snippet and the Claude Code plugin then point at it instead of https://mcp.telem.ai/mcp. Both urls are saved in ~/.telem/credentials.json, so a later run keeps them: --base-url is now saved on a run that keeps your saved key, too. See API keys.

The installer also installs the OpenClaw plugin on OpenClaw 2026.10 and later, which asks for capability consent: it passes --accept-capabilities when OpenClaw knows the flag. When a tool’s own install fails, the installer now shows that tool’s reason.

In @telemai/create 0.1.31.

API: a monitor create without agent says it got the agent

Section titled “API: a monitor create without agent says it got the agent”

A POST /v1/monitors that does not send agent makes a monitor with an agent, the default, and its answer now says so: a notice with the code agent_default, the header Telem-Notice: agent_default, and a Link to Monitors. Send agent to choose: true or false answers with notice set to null.

Claude and ChatGPT: sign in with your Telem account

Section titled “Claude and ChatGPT: sign in with your Telem account”

The hosted MCP server now takes a sign-in with your Telem account. Add https://mcp.telem.ai/mcp as a custom connector in Claude, or as a custom MCP server in ChatGPT, sign in, and select Allow. Telem creates a key for the connection, so there is no key to copy. A key in the Authorization header still works as before. See Claude, ChatGPT and Sign in instead of a key.

On the hosted server, with no package to update.

Python and JavaScript SDKs: monitors have an agent by default

Section titled “Python and JavaScript SDKs: monitors have an agent by default”

In telem-sdk 0.4.0 and @telemai/sdk 0.5.0, monitors.create() makes a monitor with an agent unless you pass agent=False (agent: false), and that monitor needs a ttl, at most "30d": without one, create() fails before sending (ValueError; in JavaScript a TelemError, invalid_request). update() takes ttl to renew a monitor, a create’s answer has agent_note (agentNote), and poll() is deprecated and warns once: read the agent’s changes with iter_changes() or iterateChanges(). See Monitors.

Switch the default search and fetch to Telem

Section titled “Switch the default search and fetch to Telem”

The installer’s question about your agent’s built-in web search now asks whether to switch its default web search and fetch to Telem, for Claude Code, Codex, Grok Build and Muse. For Claude Code, a yes now adds "WebFetch" as well as "WebSearch" to permissions.deny, so page reads go through Telem too. If an earlier install added only "WebSearch", run the installer again: it asks about "WebFetch". The flags keep their names, such as --claude-disable-web-search. See Claude Code.

In @telemai/create 0.1.30.

  • A saved key that works is used with no question. To use a different key, run the installer with --login. It now gives the new key to the agents on your computer, not only to ~/.telem/credentials.json.
  • Paste a key, or create one. With no key that works, the installer asks whether to paste a key you already have or create a new one. For a new one, it opens the console, then asks for the key. A new key starts with no searches, sessions or monitors of its own.
  • No questions about search options. The installer turns on auto-routing, unless ~/.telem/telem.json already sets it, and leaves the rest at Telem’s defaults. --auto-routing still sets it.
  • No question about a project file. Add --project to write one.
  • With one agent on your computer, no menu. The installer sets up that agent and says so. --client now works in a terminal too.
  • A key that works but cannot pay is kept. The installer tells you to add funds in the console.

In @telemai/create 0.1.30. See Quickstart.

Claude Code: Telem search and page reads without a prompt

Section titled “Claude Code: Telem search and page reads without a prompt”
  • No prompt for Telem search and page reads. The installer adds mcp__plugin_telem_telem__telem_search and mcp__plugin_telem_telem__telem_fetch to permissions.allow in ~/.claude/settings.json. Your own deny or ask rule for those tools wins. The monitor tools get no rule.
  • The plugin has a folder of its own. The installer copies it to ~/.telem/plugins/claude-plugin-telem, and Claude Code runs it from there, so it no longer disappears when the npm cache is cleaned. Run the installer again to move an older install there. Your key stays.
  • A broken options file is named. If a telem.json is not valid JSON, you see one line that names it. Claude does not see it.

In @telemai/create 0.1.30 and the Claude Code plugin 0.1.16. See Claude Code.

Python and JavaScript SDKs: read what the monitor agent finds

Section titled “Python and JavaScript SDKs: read what the monitor agent finds”

client.monitors.agent(monitor_id) gives a monitor’s agent, and client.monitors.changes(monitor_id) one page of what the agent found. client.monitors.iter_changes(monitor_id) gives all of it, page by page, until you are caught up. A monitor now has agent_state. In JavaScript, the same reads are telem.monitors.agent(), changes() and iterateChanges() (read it with for await), and a monitor has agentState. See Read what the agent finds.

In telem-sdk 0.3.0 and @telemai/sdk 0.4.0.

The installer’s GitHub Copilot choice is now VS Code (--client vscode). It sets up the same files as before, for VS Code’s agent in the Copilot and Local session targets and for Copilot CLI. --client copilot still works. The console now names these searches vscode. A setup from 0.1.28 sends copilot until you run the installer again. See VS Code.

In @telemai/create 0.1.29.

The installer now sets up Telem in the agents of three more editors: pick the editor, or pass its --client name. Each gets the hosted MCP server with your key, the Telem skill, and a hook that sends your .telem/telem.json options and keeps each chat’s searches together in the console.

  • GitHub Copilot in VS Code (--client copilot): the Chat view’s Copilot and Local session targets, and Copilot CLI. See VS Code.
  • Cursor (--client cursor): Cursor’s agent. The hook also sends the model’s reasoning. See Cursor.
  • Devin Desktop, formerly Windsurf (--client devin): Devin Local and the Devin CLI. The hook also sends the model’s reasoning. See Devin Desktop.

In @telemai/create 0.1.28.

The installer now sets up Telem in Muse CLI: pick Muse CLI, or pass --client muse. It adds the hosted MCP server with your key to Muse’s settings, and a hook that sends your .telem/telem.json options and records why Muse searched, when the model gives reasoning summaries. It also asks whether to turn off Muse’s own web search; with no prompts, pass --muse-disable-web-search. The Muse app connects Telem as a custom connector. See Muse.

In @telemai/create 0.1.27.

The installer now sets up Telem in Grok Build: pick Grok Build, or pass --client grok. It adds the hosted MCP server with your key to ~/.grok/config.toml, and a hook that sends your .telem/telem.json options and records why Grok searched, when the model gives its reasoning. It also asks whether to turn off Grok’s own web search, and whether to let Grok run Telem searches and page reads without asking. With no prompts, pass --grok-disable-web-search and --grok-allow-telem. See Grok Build.

In @telemai/create 0.1.26.

Section titled “The Telem skill asks for a reason on every search”

The Telem skill in the Codex and Claude Code plugins now tells the model to send context with every telem_search: one or two sentences on why it makes that search and what it needs from it. context stays optional. Telem stores it with the call, and the console shows it as the agent’s reasoning. See MCP server.

In the Codex plugin 0.1.13 and the Claude Code plugin 0.1.13. New installs through the installer get them from @telemai/create 0.1.25. After you update the Codex plugin by hand, Codex asks you once to approve the hook again. See Codex.

@telemai/dsh-plugin 0.1.1 has the same code as 0.1.0-rc.4. It has a plain version number, so a plain install and @latest now get the current plugin. Before, they could get an older release candidate. The plugin stays experimental, because DSH’s own plugin APIs are still prerelease. See DeepSeek Harness.

In @telemai/dsh-plugin 0.1.1.

The provider list marks the auto-routed providers

Section titled “The provider list marks the auto-routed providers”

GET /v1/preprocessors has a new field on each provider, auto_routed: whether auto-routing can choose it when you send no provider list. The SDKs read it as ProviderInfo.auto_routed (Python) and ProviderInfo.autoRouted (JavaScript). On the hosted MCP server, telem_providers marks those providers (auto-routed), next to (default), and leaves out the router’s built-in entries. See Search parameters.

Live on the router and the hosted MCP server since 2026-10-29. In telem-sdk 0.2.3 and @telemai/sdk 0.3.3.

Codex searches carry only their own reasoning

Section titled “Codex searches carry only their own reasoning”

The Codex plugin sends the reasoning that led to each search. With Codex 0.164, every search in a turn sent all the reasoning since the turn began, so later searches repeated the reasoning of the earlier ones. Now each search carries only the reasoning since the search before it. When the plugin refuses a search, its message also ends with one period, not two.

In the Codex plugin 0.1.12. After you update it by hand, Codex asks you once to approve the hook again. See Codex.

Codex keeps the Telem hook after an installer update

Section titled “Codex keeps the Telem hook after an installer update”

Codex runs a plugin’s hook only while the plugin’s files match what you approved. The installer now approves the hook for the plugin files it installs, the way Codex does. When you update the plugin by running the installer again, Codex keeps running the hook with no prompt. An update through Codex itself still asks you to approve the hook once. See Codex.

In @telemai/create 0.1.24.

telem_search on the hosted MCP server takes an optional context: one or two sentences on why the model makes this search. Telem stores it with the call. It does not change the results yet. See MCP server.

Live on the hosted MCP server since 2026-10-28.

The response names the providers you pinned

Section titled “The response names the providers you pinned”

Search and fetch responses have a new field, pinned_providers: the providers that you named for the call, or null when Telem chose them. See Search parameters and Fetch parameters.

Live since 2026-10-28.

Codex runs the Telem search tools without asking

Section titled “Codex runs the Telem search tools without asking”

The hosted MCP server now gives each tool a title and marks the search and read tools read-only. Codex runs them without an approval prompt, and codex exec no longer refuses them. The monitor tools that create, delete or read new results still ask first. See Codex.

Live on the hosted MCP server since 2026-10-27.

The hosted MCP server reads three more connection headers, X-Telem-Fetch-Providers, X-Telem-Fetch-Tier and X-Telem-Fetch-No-Cache, and applies them to every telem_fetch, so any MCP client can set the fetch options. See MCP server.

Live on the hosted MCP server since 2026-10-27.

One rule when include and exclude name the same provider

Section titled “One rule when include and exclude name the same provider”

Every surface now handles a provider in both providersInclude and providersExclude the same way: the exclude list wins. When other providers are left, they run, with a warning. When none is left, the search is refused before anything is sent, and the message says which list to edit. Before, most plugins ran the default providers instead, and OpenClaw and the SDKs got a 400. See When include and exclude name the same provider.

In telem-sdk 0.2.3, @telemai/sdk 0.3.3, @telemai/opencode-plugin 0.2.13, @telemai/pi-telem 0.2.12, @telemai/openclaw-plugin 0.2.15, @telemai/dsh-plugin 0.1.0-rc.4, the Claude Code plugin 0.1.12 and the Codex plugin 0.1.11.

On the hosted MCP server, which Claude Code, Codex and other MCP clients use, each telem_search result now names the provider that found it, and a provider that failed gets a line of its own. Before, a failed provider looked the same as an empty result.

Live on the hosted MCP server since 2026-10-27.

The OpenCode plugin’s telem_fetch now sends fetchProviders, fetchTier and fetchNoCache from its options object, .telem/telem.json or the TELEM_FETCH_* variables. See Pinning the fetch provider.

In @telemai/opencode-plugin 0.2.13.

The OpenClaw plugin takes fetchProviders, fetchTier and fetchNoCache in its plugin entry, with the TELEM_FETCH_* variables below them, and its telem_fetch sends them. Before, OpenClaw refused to load the plugin if its config had one of these keys. See Pinning the fetch provider.

In @telemai/openclaw-plugin 0.2.15.

telem.fetch() now takes tier and noCache, next to providers. When you leave them out, it uses the TELEM_FETCH_PROVIDERS, TELEM_FETCH_TIER and TELEM_FETCH_NO_CACHE variables. See Pinning the fetch provider.

In @telemai/sdk 0.3.3.

Fetch options in the Python SDK and Hermes

Section titled “Fetch options in the Python SDK and Hermes”

fetch() in the Python SDK now takes tier and no_cache, next to providers. When you leave them out, it uses the TELEM_FETCH_PROVIDERS, TELEM_FETCH_TIER and TELEM_FETCH_NO_CACHE variables. The new telem.resolve_fetch_options() also reads fetchProviders, fetchTier and fetchNoCache from .telem/telem.json, when you ask for it. The Hermes plugin’s telem_fetch sends them. See Pinning the fetch provider.

In telem-sdk 0.2.3, which the Hermes plugin uses.

The DeepSeek Harness plugin’s telem_fetch now sends fetchProviders, fetchTier and fetchNoCache from its plugin config, .telem/telem.json or the TELEM_FETCH_* variables. See Pinning the fetch provider.

In @telemai/dsh-plugin 0.1.0-rc.4.

The Pi extension’s telem_fetch and the Pi skill’s fetch.mjs now send fetchProviders, fetchTier and fetchNoCache from .telem/telem.json or the TELEM_FETCH_* variables. See Pinning the fetch provider.

In @telemai/pi-telem 0.2.12.

Page-fetch settings in Claude Code and Codex

Section titled “Page-fetch settings in Claude Code and Codex”

The Claude Code and Codex plugins now send fetchProviders, fetchTier and fetchNoCache from .telem/telem.json with every telem_fetch, so you can pin the fetch provider, set the fetch tier, or skip the saved copy. See Pinning the fetch provider.

In the Claude Code plugin 0.1.11 and the Codex plugin 0.1.10.

Section titled “The installer can turn off Claude Code’s built-in web search”

When it installs the Claude Code plugin, @telemai/create now asks whether to send Claude Code’s web searches through Telem. Yes adds "WebSearch" to permissions.deny in your Claude Code settings. With no prompts, pass --claude-disable-web-search. Codex already had this step.

In @telemai/create 0.1.24.

Date window in the Pi skill’s search script

Section titled “Date window in the Pi skill’s search script”

The Pi skill’s scripts/search.mjs now takes --published-after and --published-before, so a search from the script can keep only results from a date window, like the Pi tools.

In @telemai/pi-telem 0.2.12.

Clear messages for Hermes versions that cannot run the plugin

Section titled “Clear messages for Hermes versions that cannot run the plugin”

@telemai/create 0.1.23 stops the Hermes install with a clear message when Hermes cannot run the Telem plugin: Hermes older than 0.21.6, or Hermes installed with Homebrew. The plugin needs Hermes 0.21.6 or newer from the official Hermes installer.

Auto-routing off in the Claude Code and Codex plugins

Section titled “Auto-routing off in the Claude Code and Codex plugins”

@telemai/create 0.1.23 installs the Claude Code plugin 0.1.10 and the Codex plugin 0.1.9. When your configuration sets autoRouting to off, searches through the hosted MCP server now run without auto-routing. Before, that setting had no effect there.

@telemai/create 0.1.22 writes your auto-routing answer as the X-Telem-Auto-Routing header in the Codex table and in the printed MCP snippet. So clients that connect with only a URL and headers get the same routing.

Section titled “Search by domain, and monitors that search”

telem-sdk 0.2.2 and @telemai/sdk 0.3.2:

  • A search takes include_domains: only results from these domains and their subdomains. See Domains.
  • A monitor’s frequency is optional. If you leave it out, the monitor runs once a day. A monitor can also run every 12h.
  • A monitor takes search: it also searches the web for the query on each run. See Monitors.
  • A monitor takes include_domains: only results from these sites.

telem-sdk 0.2.1 and @telemai/sdk 0.3.1 add ttl to a monitor create: Telem deletes the monitor after this time, for example 7d. A monitor has expires_at. See Monitors.

telem-sdk 0.2.0 and @telemai/sdk 0.3.0 change monitors. A create takes only the query, the frequency, metadata and webhook_url. A monitor has one status: active or paused. The providers and provider_overrides fields are removed, so code that sends them must change. See Monitors.

telem-sdk 0.1.13 and @telemai/sdk 0.2.6 add webhook_url to monitors and a function that checks each webhook request (verify_webhook, verifyWebhook). See Get results by webhook.

telem-sdk 0.1.12 and @telemai/sdk 0.2.5 add monitors. A monitor watches the web for a query, and you poll it for the results that are new since your last poll. See Monitors.

Two new search options, published_after and published_before, get only results published in a date window. See Publication date. Each value is a date or a date and time in ISO 8601 format. A result with no known publication date is kept. Set them per search: there is no configuration file key and no environment variable for them.

  • telem-sdk 0.1.11: published_after= and published_before= on search(). They take a string, a date or a datetime. A datetime with no time zone is local time.
  • @telemai/sdk 0.2.4: publishedAfter and publishedBefore. They take a string or a Date. The Vercel AI SDK tools take them from the model.
  • @telemai/opencode-plugin 0.2.12, @telemai/pi-telem 0.2.11, @telemai/openclaw-plugin 0.2.14 and @telemai/dsh-plugin 0.1.0-rc.3: the model can set both options on telem_search. The Hermes, OpenAI and LangChain tools in telem-sdk can do this too.

The agent also sees each result’s publication date. The tools add a line Published: <date> to a result when its date is known.

Auto-routing on by default in the installer

Section titled “Auto-routing on by default in the installer”

@telemai/create 0.1.21 turns on auto-routing (accuracy) by default:

  • The installer question starts on Yes. A run with --yes and no --auto-routing flag writes "autoRouting": "accuracy" to ~/.telem/telem.json.
  • Answering No, or passing --auto-routing off, writes "autoRouting": "off". Later runs keep that answer.
  • A configuration file that already has autoRouting does not change. A file without the key keeps its meaning: no routing. Run the installer again to turn routing on.

Every surface now accepts "off", in any case, from the configuration file or from TELEM_AUTO_ROUTING, and sends no routing for it. Before this release, "off" made every search fail. This applies to:

  • @telemai/opencode-plugin 0.2.11
  • @telemai/pi-telem 0.2.10
  • @telemai/openclaw-plugin 0.2.13
  • @telemai/dsh-plugin 0.1.0-rc.2
  • the Claude Code and Codex plugins
  • @telemai/sdk 0.2.3
  • telem-sdk 0.1.10

The SDKs and the OpenClaw plugin do not route by default. To turn on routing there, set autoRouting to accuracy: in the plugin settings for OpenClaw, or as a client option or TELEM_AUTO_ROUTING for the SDKs.

@telemai/dsh-plugin 0.1.0-rc.1 is the first release of the DeepSeek Harness integration, published under the next dist-tag:

  • telem_search and telem_fetch as native DSH tools, registered globally so every agent preset sees them. Arguments are validated by DSH, and its cancellation, timeout and spill policies apply.
  • The same .telem/telem.json pair that every other surface reads. DSH adds one level above it: the plugin’s own row in your profile patch. It is the only surface with no deprecated host-specific config file.
  • Lineage across in-process subagents: a spawned or forked child inherits the tools. Its searches include a frozen snapshot of the parent conversation.
  • Experimental, and a release candidate on purpose. DSH’s plugin APIs are prerelease and can change between release candidates. This release is built and tested against 0.1.5-rc.2.

@telemai/sdk 0.2.0 adds the Vercel AI SDK integration, @telemai/sdk/vercel:

  • createTelemVercelTools gives an AI SDK agent telem_search and telem_fetch tools, with query lineage attached to every call. A subagent started inside one of those tools links to it by itself. No lineage data is built by hand.
  • Lineage data is sent incrementally, as the plugins send it: a subagent’s inherited context travels once, not on every call.
  • ai (version 5 or later) is an optional peer dependency used by the subpath only. The main entry still has no runtime dependencies.

@telemai/openclaw-plugin, @telemai/opencode-plugin, and @telemai/pi-telem all shipped 0.2.0, packaged as registry-ready installs:

  • Each package builds a dist-only tarball with an explicit files list, rather than requiring a source checkout.
  • Install paths were verified end-to-end against a local Verdaccio registry, one clean install per surface. For current public npm availability, see the coming-soon note on each integration page.
  • @telemai/openclaw-plugin registers the telem-openclaw-setup bin entry point used by the OpenClaw install flow.

All three have the same normalized search work underneath. It includes a search block resolved per call, results read from the router’s normalized response, and session threading. See the OpenClaw, OpenCode, and Pi pages.

The Python SDK’s first version, 0.1.0:

  • Normalized search response: search() reads the router’s normalized response (results + by_provider, which keeps partial per-provider failures). See Python SDK.
  • Query batching: search() accepts a sequence of queries. They batch into a single interaction and run concurrently on the server. See Multi-query batching.
  • MCP server: the [mcp] extra adds telem-mcp, a stateless MCP stdio server that exposes telem_search and telem_providers. See MCP server.

telem-sdk 0.1.0 is on PyPI: pip install telem-sdk. See the Python SDK page.

Was this page helpful?