Changelog
Release notes for Extentos — the MCP server (@extentos/mcp-server), the Android library (com.extentos:glasses), and the iOS library (swift-glasses). Newest first. The MCP server is pre-1.0; APIs may shift between minor versions until the hardware test loop closes. The 2.x line covers the vendorless core split, the display overflow policy, the iOS on-glasses display path, the minified-release fix, the removal of the automatic wake sound, and capture telemetry; the managed AI gateway, the Phase-4 voice assistant, the first stable iOS release, the pure-SDK pivot, the browser simulator, getEventLog, auto-bind, and device-code auth landed earlier.
Release notes for Extentos, newest first. The MCP server is pre-1.0 (the SDK line is 2.x on both platforms — Maven Central and the swift-glasses SPM package, released in lockstep) — minor versions of the MCP server may introduce breaking changes until the hardware test loop closes. For the current published MCP version see the npm package; for the exact live capability state of any primitive, have your agent call getPlatformInfo (more accurate than any docs page).
Dates are given where they're verifiable. Items grouped under Recent shipped in the same period but aren't pinned to a precise date — we'd rather say "recent" than invent a date.
Recent
These landed across recent releases (mid-2026) and represent the current shape of the platform.
Managed AI gateway
The Phase-4 voice assistant now routes its voice AI through Extentos's managed gateway on Extentos's provider key — a developer can ship a voice-AI glasses app with zero AI configuration (no key to obtain, store, or rotate). Conversation content (audio, transcripts, model responses) is relayed but never stored; only token-usage metadata and computed cost are recorded per project. Metering and billing are live — a prepaid-credit model with a $2 free grant per account (see the milestone below). (There is no bring-your-own-key option.) See pricing.
Phase-4 assistant runtime
The glasses.assistant.* runtime — a real-time voice loop with a wake/sleep state machine, session.say(), barge-in, intent-based end, and tool calling — is stable on both platforms: on Android since com.extentos:glasses 1.4.0 (Maven Central), on iOS in the 1.7.0 Swift package (see the release entries below). Setup and API surface: the assistant page.
Meta DAT 0.8.0
The Android library now builds on Meta Device Access Toolkit 0.8.0 (the iOS package followed on 2026-07-03 — its DAT floor is now 0.8.0 too). The one developer-visible addition is the generic META_GLASSES device type, surfaced as glasses.device.type on Android; it's handled by the same capability dial as every other camera + audio model, so no app changes are needed. Camera, audio, voice, and display behavior are unchanged.
Display capability
Meta opened heads-up display content to third parties; Extentos exposes it as glasses.display.* — a UI tree plus full-surface video — shipped in both SDKs and fully testable in the simulator on both. On-glasses rendering via Meta DAT (DAT 0.8.0) ships on both platforms, not yet confirmed on Display hardware. Per-variant display status is on the Meta vendor page.
Library releases
The Android and iOS libraries version in lockstep — one release number covers both.
2.7.0 — 2026-08-28
Breaking, in two lines: audio.playSound / registerSound / soundNames are gone, and so is AssistantConfig.wakeSoundEnabled. Both are source-breaking. If you called either, read on — the replacement is one method.
Bring your own realtime model. If a realtime model already runs your conversation, it hands you finished audio, not text. speak(text) was the wrong shape for that: it would throw away audio your model already generated so the SDK could re-synthesize the words. The audio client is now symmetric —
val rate = if (glasses.audio.outputFidelity == OutgoingAudioFidelity.HiFi) 24000 else 8000
glasses.audio.sendAudio(pcm16 = chunk, sampleRate = rate) // your model's audio, out
glasses.audio.stopAudio() // barge-in: drop what is queuedstopAudio() matters more than it looks. A realtime model emits faster than realtime, so seconds of reply can already be buffered when the wearer starts talking; without it, playback continues until the backlog drains and the interruption feels ignored. outputFidelity tells you what the link can carry so your model generates the right format instead of guessing. And you do not have to mute the mic while playing: capture runs through the platform's voice-communication unit, which subtracts our own output from the input.
This is not a new audio path — it is the same transport call the managed assistant, the on-device tier and local-voice speak() already use on real glasses. What is new is the public entry point. Full guide: bring your own realtime model.
The named-sound system is removed — playSound, registerSound, soundNames, the dashboard Sounds section, the clip library and its upload flow, the listProjectSounds / addProjectSound MCP tools, and the assistant_config.sounds grant. It let you upload a clip in the dashboard and play it by name from code. Across its whole life it held eight clips and four slots belonging to one account, and shipping sendAudio made it redundant: read your own bytes and send them. A chime that used to be playSound("shutter") is now sendAudio(shutterPcm, sampleRate = 24000), with no upload, no name, and no round trip through us.
AssistantConfig.wakeSoundEnabled is removed (it was already inert after 2.3.0 stopped the SDK playing a chime). Delete the line and your build is fixed.
The wake phrase engine is untouched — glasses.voice.onPhrase and on-device wake detection are unchanged. Only the wake sound is gone.
2.6.0 — 2026-08-26
Telemetry that can answer why a capture failed. capture.completed, speak.completed and device.condition_changed join the event vocabulary. Photo capture is the flagship capability of the product and emitted no telemetry at all before this, so a failed capture left nothing behind to diagnose.
- Error codes moved into the shared core. Kotlin was reflecting over class names and Swift kept a hand-maintained parallel switch, which is two copies of one vocabulary and one rename away from drift. Both platforms now read the same codes from the core.
- iOS reports which glasses were used. The device model was hardcoded empty on iOS, so vendor breakdowns had been Android-only even though the core held the fact the whole time.
- The event registry shrank from 35 events to 29. Five were dead since the pivot and could not fire. Four more were defined as carrying verbatim transcripts or tool payloads as properties; nothing emitted them, and they are gone rather than left as standing permission.
No application change is required.
2.5.0 — 2026-08-16
A level for the audio the assistant is playing. AssistantSession gains audioLevels(), so your UI can show the assistant speaking the same way it already shows the wearer speaking.
Additive if you call the SDK. If you implement AssistantSession yourself, most likely as a hand-rolled test fake, the protocol gained a member and your implementation needs it.
2.4.0 — 2026-08-16
The assistant says when it stopped talking. AssistantEvent gains assistantAudioStarted and assistantAudioFinished, which is what you want if your UI needs to know the difference between "the model finished generating" and "the wearer stopped hearing it".
Additive, with one caveat worth stating plainly: adding a case to a public Swift enum or Kotlin sealed class breaks an exhaustive switch that has no else branch. If yours is exhaustive, that is the one edit this release asks of you.
2.3.1 — 2026-08-15
A refused gateway session now says why. Every failure to open the realtime connection used to surface as the same ten-second realtime WebSocket open timed out. A quota refusal, a bad credential, a DNS failure and a TLS failure were indistinguishable, because the failure signal was gated on a flag that stays false for the whole connect window, leaving the timeout as the only reachable outcome.
Your app now receives a prefixed reason it can branch on, for example insufficient_credits: the gateway refused the session (HTTP 429). No public API change on either platform, and not source-breaking.
2.3.0 — the SDK stops playing a sound you didn't ask for
Superseded in 2.7.0. The named-sound system this entry tells you to lean on
(playSound / registerSound / soundNames, the dashboard Sounds section and its
clip library) was removed. Push your own bytes with sendAudio instead — the
snippets below have been updated to the current API so they still compile. See
bring your own realtime model.
Breaking, in one line: AssistantConfig.wakeSoundEnabled is gone. Delete it and your build is fixed. Nothing else in the sound system changed.
Until now the SDK synthesized a chime and played it the moment wake() began. It fired before the realtime connection opened, which is exactly the window where the glasses audio link may not be up yet — so it went quiet precisely when the wearer needed the confirmation. A cue that only sometimes plays is worse than no cue, so it's removed rather than patched.
If you want an activation sound, you now own it — and it's one line. Play your own clip from your own wake path:
// Android — wherever you wake the session
glasses.voice.onPhrase("hey coach") {
glasses.audio.sendAudio(wakeChimePcm, sampleRate = 24000) // your clip, your timing
session?.wake()
}// iOS
_ = await glasses.audio.sendAudio(wakeChimePcm, sampleRate: 24000)
try await session.wake()Because it's your call now, you can await it, skip it on a button press but not a wake phrase, or use a different clip per trigger — none of which the built-in chime allowed.
Nothing in the dashboard changed at the time of this release. (That changed in 2.7.0, which removed the Sounds section along with the rest of the named-sound system.)
2.2.4 — 2026-08-13
Read this if you ship a minified Android release build. On 2.2.3 and earlier, every Android release build with isMinifyEnabled = true crashed on launch, and a second defect silently stripped the gateway credential out of the same build. Both are fixed in the SDK's own consumer rules, so upgrading is the whole fix and your proguard-rules.pro needs no change.
- The crash. R8 renamed
com.sun.jna.*, JNA resolves those classes by name from native code, and the SDK's consumer rules only keptcom.extentos.glasses.**. The SDK died during transport resolution before doing anything, on every app regardless of which capabilities it used. - The credential. Your project key is read by reflection out of your app's generated
BuildConfig. Nothing kept that class, so in a minified build it was absent from the dex entirely and the app authenticated as though no key had been set.
Neither could appear in debug, in the browser simulator, or in any test, because none of those minify. If you ship minified, treat 2.2.4 as your floor.
Also in this cut: 11 MB of orphaned model files removed from the core artifact, taking the Android AAR from 14.1 MB to 5.1 MB.
2.2.3 — 2026-08-09
The connection page stops offering toggles the app cannot use. The toggle list returned a hardcoded voice-activation entry to every integration, so a camera-only app showed its user a microphone kill-switch for hardware it never opens. The list now derives from your declared capability footprint, the way the capability tiles on the same page already did.
2.2.2 — 2026-08-09
iOS raw camera frames match the documented I420 contract. Meta hardware hands iOS an NV12 buffer with 16-byte-aligned rows, where the documentation, Android and the browser simulator all promise packed I420. The two layouts are byte-identical in size, so no length check could catch it: every computer-vision integrator received a valid-looking buffer, rendered nothing, and saw no error at any layer.
Also in this cut: the iOS scaffold now emits the two camera Wi-Fi entitlements and declares the session plist as a build-phase input, without which a generated project does not build at all under Xcode's default script sandboxing. Android now warns once on a raw size mismatch rather than passing an unverified buffer through.
2.2.1 — 2026-08-08
The first 2.2.x an iOS integrator can install. The Swift package published for 2.2.0 did not compile, so 2.2.1 is the iOS floor for everything in that release. Android was unaffected and republished only to hold lockstep.
2.2.0 — 2026-08-07
The per-device display overflow policy on both platforms, and the iOS on-glasses display path, which the iOS package had never carried because the Meta display module was simply never pulled in. Display content written once now renders through the same policy on either platform instead of each shell guessing at a row limit.
On iOS, install 2.2.1 rather than this version (see above).
2.1.2 — 2026-07-31
Behaviour change worth checking before you upgrade: recordDiscrete no longer returns a transcript in the browser simulator. It returns an empty transcript, which is what real hardware has always returned. An app that read that field demoed perfectly in the simulator and went silent on glasses, so the simulator was corrected to match rather than the other way round.
2.1.1 — 2026-07-31
Two fixes a fresh-agent audit turned up, both on paths a first-time integrator hits.
capabilitiesno longer takes the host app down when the vendor SDK never initialised. It is a property getter read during Compose composition, so an uninitialised vendor SDK crashed the app outright on the most ordinary first-run path there is: the placeholder credentials the scaffold itself emits.observability.aiCallgained a failure reason, so a typed failure stops being recorded as a success. Additive; existing call sites are unchanged.
2.1.0 — 2026-07-31
Brilliant stops costing a dependency line. The Brilliant transport folded into com.extentos:glasses, so a vendor that charges nothing to support now costs nothing to add. The Android XR module self-registers on the same pattern, and the video container check landed on both platforms.
2.0.2 — 2026-07-29
Android on-device transcription and the iOS Brilliant transport become installable. Both had landed in source; this is the release that makes them resolve.
The on-device recogniser is Android-only, and that is a deliberate asymmetry rather than a missing feature. Feeding audio buffers to the system recogniser needs a workaround on Android and is only available from Android 13, and a given device may still refuse it. On iOS the system recogniser has always accepted buffers directly, so iOS reaches the same place with no model to download and no OS floor.
2.0.1 — 2026-07-29
glasses-brilliant self-registers. At 2.0.0 the module required a second explicit registration call from your code. Maven Central is immutable, so the fix needed a new version, and the whole line moves together by the lockstep rule.
The module's published POM also declared the core artifact at runtime scope rather than compile scope, so the core types its own public surface hands back were missing from a consumer's compile classpath unless that consumer happened to declare the core itself.
2.0.0 — the vendorless baseline (Maven Central + Swift Package)
Read this before upgrading if your app uses the camera or the display. This is the one release in Extentos's history that can disable a working feature without a build error.
What changed. com.extentos:glasses no longer contains the Meta transport. Camera, display and the Meta device session moved into a new optional artifact, com.extentos:glasses-meta. The core artifact now carries no vendor SDK at all.
If your app uses camera or display — add one line:
implementation("com.extentos:glasses:2.0.0")
implementation("com.extentos:glasses-ui:2.0.0")
implementation("com.extentos:glasses-meta:2.0.0") // ← add thisNo Kotlin change is needed. The module registers itself at app start, so TransportChoice.Auto resolves to real glasses exactly as before. Keep your settings.gradle.kts as-is — the Meta DAT repository and its read:packages token are still required, because those artifacts now arrive through glasses-meta.
If you skip it, nothing fails loudly. Gradle resolves, the build succeeds, voice keeps working and the connection still reports as up — only capture breaks. That shape survives CI and a smoke test, so check explicitly after upgrading: glasses.transportChosen reads SYSTEM_AUDIO where you expect REAL_META, glasses.capabilities.camera is false, and the SDK logs a warning naming the missing module (adb logcat -s Extentos:W).
Android only, for now. The artifact split is an Android change: SwiftPM has no credentialed-repository problem to solve, and splitting would mean restructuring the published swift-glasses package. On iOS the DAT modules remain unconditional dependencies of GlassesCore, so an iOS voice app still links them — it just never uses them, needs no Meta credentials, and no Info.plist DAT keys. The vendorless runtime behaviour is identical on both platforms; only the dependency hygiene differs.
Why. The Meta DAT artifacts live on a credentialed GitHub Packages repository. While they sat inside the core artifact, every customer had to accept Meta's terms and mint a GitHub token — including voice-only apps that never touch a camera. Skipping it failed the build with a 401 that never mentioned Extentos. That toll is now charged only to apps that actually use vendor hardware.
What this unlocks — voice apps need no vendor setup whatsoever. A new SystemAudioTransport serves the complete agent runtime (turn-taking, barge-in, tool calling, conversation memory, local and cloud models) over the phone's own Bluetooth audio routing. No vendor SDK, no Meta Developer account, no App ID, no GitHub token, no connection page, no pairing flow. It works on smart glasses, on ordinary Bluetooth earbuds, and — with nothing connected — on the phone's own microphone and speaker, so a voice app never dead-ends because the glasses are in their case. See choose your path.
TransportChoice.Auto gains a rung for it, placed below every vendor arm and below the simulator arms: an app with bonded glasses still resolves to RealMeta, and the browser-simulator dev loop is unchanged.
Renamed: AssistantProvider.OpenAi → AssistantProvider.Managed (Swift .openAI → .managed). The type was named after one vendor while the model id picks the vendor — gpt-* OpenAI, grok-* xAI, gemini-* Google, local-* on-device. So OpenAi(model = "local-auto") ran an on-device model with no network, which reads like a bug and isn't one.
Your code keeps working. The old name stays as a fully functional deprecated case on both platforms — same shape, same behaviour, with a deprecation warning and an IDE fix-it pointing at the new one. Migrate when convenient:
AssistantProvider.Managed(model = "local-auto") // was AssistantProvider.OpenAi(...)Also in this release: bring-your-own-key is fully removed. The assistant runs on the Extentos managed gateway, always; there is no option to supply a provider key and none is on the roadmap.
1.11.1 — 2026-07-26 (Maven Central + Swift Package)
Android-only cut that restores lockstep: ExtentosLocalTier.autoChoice(context) landed for iOS parity just after 1.11.0 was tagged, so on Android it wasn't callable until this release. If you use the local tier's automatic rung selection, this is your floor.
1.11.0 — 2026-07-26 (Maven Central + Swift Package)
The local tier ships whole. com.extentos:glasses-local (on-device text models) and com.extentos:glasses-local-voice (on-device speech) are both on Maven Central, with GlassesLocal / GlassesLocalVoice as the Swift-package equivalents. glasses-local-voice is the first public release of the high-quality on-device voice. Automatic joins the model picker — the assistant selects a local rung sized to the phone and falls back to the gateway when the device can't serve one. See local models.
1.10.0 — 2026-07-26 (Maven Central + Swift Package)
The first release carrying com.extentos:glasses-local — the on-device text tier, published alongside the existing artifacts on both platforms.
1.9.0 — 2026-07-19 (Maven Central + Swift Package)
Adds OpenAI's two newest realtime models to the assistant catalog, so they're selectable from the dashboard's Agent tab, from AssistantProvider.Managed(model = …), and from AssistantCatalog.realtimeModels in your own in-app picker.
gpt-realtime-2.1— a drop-in successor togpt-realtime-2: same voices, samereasoning.effortknob, same price on every dimension.gpt-realtime-2.1-mini— distilled reasoning at mini pricing. Despite the name it is not a newergpt-realtime-mini: it does acceptreasoning.effort(the older mini does not) and carries the full 128k context window (the older mini is 32k). Its image-input rate also differs from the rest of the realtime line.- Both are token-billed through the managed gateway at OpenAI's published rates; the dashboard's cost estimate and the exact per-response ledger both price them from day one.
Existing models are unchanged, and the SDK default stays gpt-realtime-2 — upgrading does not move any project onto a new model.
1.8.0 — 2026-07-17 (Maven Central + Swift Package)
Google Gemini Live joins the assistant, alongside OpenAI Realtime and xAI Grok — the model id picks the vendor (gemini-*), so switching providers is a string change. Gemini adds streaming video input (session.sendVideoFrame) on the video-capable models: gate it with session.modelSupportsVideoInput, because an ungated send on a text-only model surfaces an error to your app and tells the model it can't see, rather than dropping the frame silently. All of it bills through the managed gateway at list price.
1.7.0 — 2026-07 (Maven Central + Swift Package — first stable iOS release)
The first joint Android + iOS release, and the iOS library's stable debut: the Swift package is published from github.com/extentos/swift-glasses, version-locked to the Android line. .package(url: "https://github.com/extentos/swift-glasses", from: "1.7.0") resolves the binary core and builds with no workarounds — see install.
- iOS SDK, stable. The capability surface ships on iOS: camera (photo, video with audio, live frames), the Phase-4 voice assistant on the managed gateway (wake/sleep, barge-in, tool calling), named sounds (
playSound/registerSound+ dashboard slots), the display API, connection page, telemetry. A season of real-hardware dogfooding landed reliability work across the voice loop (silence endpointing, mic-subscription persistence across STT restarts, barge-in flush) and the camera/video path (AAC video audio at the encode ceiling, stream re-arm, auto-finalize when the stream stops mid-record). - Core (both platforms):
CameraStatus(ready/starting/broken) replaces the boolean capture gate; connection-state fixes — no transientDisconnectedwhile the glasses stay reachable, noActive → Connectingblip when the camera starts; strictly monotonic frame timestamps across stream re-arms; a shared named-sound registry behind both shells. - Published as
com.extentos:glasses:1.7.0+com.extentos:glasses-ui:1.7.0(Maven Central) and theswift-glasses1.7.0tag (SPM).
1.6.0 — 2026-07-11 (Maven Central)
Camera-capture refinements and browser-simulator fidelity for the temple-tap capture button.
PhotoConfig.fullResolution→dedicatedCapture(breaking rename, no deprecation alias — pre-adoption). DAT's discretecapturePhototakes no resolution argument, so the non-frame-grab path is a dedicated capture whose resolution DAT sets independently of the stream — not a caller-chosen resolution. The old name was a misnomer.- Capture mechanism in the simulator event log.
capture_photo_returnednow carriesmechanism=frame_grab|dedicated, so a developer testing in the browser simulator — where the returned image is identical either way — can confirm which path their code would take on real hardware. - The capture button is reproducible in the simulator. The wearer's temple-tap pause/resume/stop and the resulting
CaptureError.StreamPausedare now testable without hardware:BrowserSimTransporthonors a simulated paused state through the same shared gate real glasses use, and a shell-declined capture recordscapture_deniedin the event log. Published ascom.extentos:glasses:1.6.0+com.extentos:glasses-ui:1.6.0.
1.5.0 — 2026-07 (Maven Central)
Camera reliability on real Meta hardware, and honest handling of the wearer's temple-tap pause.
CaptureError.StreamPaused— a capture attempted while the wearer has paused the camera (a single temple tap) returns this typed error carrying an actionable "tap the right temple to resume" message, instead of fighting the platform. DAT 0.8 exposes no app-callable resume; the honest response is to prompt the wearer, then retry.- Camera-streaming reliability fixes from a full audit of the frame-grab / video / live-frames paths (cold-start re-arm, stream-state teardown on disconnect).
- Capture failures funnel to the assistant by default — an assistant tool that captures a photo surfaces the failure's actionable message to the model, so the assistant tells the user exactly what to do.
1.4.0 — 2026-07-02 (Maven Central)
The Phase-4 assistant runtime graduates to stable: glasses.assistant.* (wake/sleep state machine, session.say(), barge-in, intent-based end, tool calling) is now in the public Maven Central release — the 1.4.0-phase4-dogfood preview snapshot and its mavenLocal() setup are retired. Published as com.extentos:glasses:1.4.0 + com.extentos:glasses-ui:1.4.0.
1.3.0 — 2026-05-24 (Maven Central)
Added the Phase-3 conversation runtime (glasses.conversation.onWake { listen() / speak() / cancelSpeak() / ai.complete() }). Superseded by the Phase-4 assistant runtime (see Recent) for new voice-AI work, but still resolvable from Maven Central. Published as com.extentos:glasses:1.3.0 + com.extentos:glasses-ui:1.3.0.
1.2.0 — 2026-05-22 (Maven Central)
First public release of the Android library on Maven Central, via the Sonatype Central Portal. com.extentos:glasses (core) + com.extentos:glasses-ui resolve from the default mavenCentral() repository with no workaround.
The iOS Swift package ships from
github.com/extentos/swift-glasses, version-locked to the Android release line — stable since1.7.0(see the entry above). Some primitives landed Android-first; per-primitive status:getPlatformInfo.
Platform milestones
Managed-gateway billing — 2026-06-26
The managed AI gateway went from metered-only to live prepaid billing. Every account gets $2 of free managed-gateway credit; past that, usage draws down a prepaid credit balance bought in the dashboard's account Billing hub (any amount, with optional auto-reload), and the gateway stops when the balance hits zero — prepaid, so no surprise invoice. Pricing is the provider's list price with no markup — tokens for token-billed models, connected minutes for per-minute voice models. All managed usage counts (simulator, dev, and real hardware). Nothing outside the managed gateway is affected — the free surfaces stay free. Full detail on pricing.
Pure-SDK pivot — 2026-05
The library stopped interpreting a declarative runtime and became a pure Kotlin/Swift SDK. The trigger was evidence rather than taste: 31 items from our own dogfood logs were developers fighting the authoring layer to reach capabilities the SDK already exposed, so the layer was removed rather than improved. Customer code now writes its own handler classes directly against capability primitives (glasses.audio.transcriptions(), glasses.camera.capturePhoto(), glasses.audio.speak(), …) — there is no intermediate authoring layer to fight through. The MCP server, simulator, and backend all moved post-pivot in the same period. The canonical voice-glasses patterns are available via the getCodeExample MCP tool.
Earlier foundation
These shipped before the pivot period and remain core to the developer loop:
- Browser simulator at
extentos.com/s— the hardware surrogate the library connects to in BrowserSim mode, running the same library code as production with only the transport and I/O swapped. getEventLog— the structured event log (queryable per chip:errors/voice/camera/display/ai/lifecycle/custom), mirrored to the backend during simulator mode so an AI agent can debug a run.- Auto-bind dev loop — shipped on Android and iOS; the library's debug-build probe finds the agent's local MCP server and binds a running app to a simulator session automatically (the
extentos.session.plistURL-bake path remains as the iOS fallback). - Device-code auth — the OAuth-style flow (RFC 8628) that links an anonymous install to a free email-only account. It's required for browser-simulator session minting, project scaffolding (
generateConnectionModule), and the managed AI gateway; discovery, validation, guidance, and on-device simulation stay anonymous.
Notes
- Last updated: 2026-08-28. Entries marked "Recent" are honest about approximate timing; precise dates appear only where verifiable.
- Versioning: the Android and iOS libraries version in lockstep; the MCP server versions independently (always install
@latestunless you're pinning for reproducibility — see the npm package). - For where Extentos is going rather than what shipped, see the roadmap.
Related
- Roadmap — forward-looking direction
- The managed AI gateway — how the assistant's AI runs, and metering
- Pricing — free surfaces and the one metered surface
- License — MIT for the MCP server; proprietary libraries (public packages)