Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
160671 stories
·
33 followers

The SSMS extension ecosystem is growing up: list, acquire and maintain extensions with ease

1 Share

When SQL Server Management Studio 21 arrived on the Visual Studio 2022 shell, it opened the door for third-party extensions in SSMS for the first time in years. But an extensibility model alone does not make an ecosystem. You also need answers to three simple questions:

  • What extensions exist?
  • How do I get them?
  • How do I keep them up to date (and remove them again)?

I am happy to say that thanks to great community efforts, all three questions now have good answers. This post is a celebration of the improvements that I and the community have made over the past months — and an invitation for you to join in.

1. Discover: the SSMS Extensions list

The first challenge was simply knowing what is out there. I briefly blogged about this earlier, and the site has grown nicely since:

👉 SSMS Extensions

It is a curated list of extensions and add-ins for SQL Server Management Studio 22, currently listing 45 extensions — 20 of them free and 14 open source. The list covers everything from Object Explorer enhancements and SQL formatters to performance tuning tools and commercial productivity suites.

The source list was adapted from Daniel Brink's SSMS extension catalog — a great example of community collaboration. If you know of an extension that is missing, contributions are very welcome.

Knowing an extension exists is one thing — getting hold of it is another. SSMS does not (yet) have an official extension marketplace, so downloads have been scattered across GitHub releases pages, vendor sites and blog posts.

Enter the SSMS Gallery — a free gallery for browsing and downloading free SSMS extensions in one place.

The gallery is based on Mads Kristensen's well-proven Open VSIX Gallery code base, adapted for SQL Server Management Studio. It offers:

  • Browse and search all published extensions with rich descriptions, icons and screenshots.
  • Direct .vsix downloads — no hunting through release pages.
  • ATOM/RSS feeds for the whole gallery, per author, and per extension — so you can be notified when your favorite extension ships an update.
  • A simple HTTP publishing API — publishing is a single POST of your .vsix file, easily automated from GitHub Actions or any other CI system.

Several extensions are already published there, including T-SQL Analyzer, SQL Database Project Power Tools, Performance Studio, SQL 4 CDS, SSMS EnvTabs and the SQL Server Compact/SQLite Toolbox.

An invitation to extension authors

If you build an SSMS extension: please consider publishing it to the SSMS Gallery! It takes one HTTP call (or one GitHub Actions step) per release, and your users get a stable download location and automatic update notifications for free. Have a look at the "Add Extension" guide on the gallery site to get started — and reach out if you have questions.

3. Maintain: the SSMS Extension Manager

The final piece of the puzzle: once you have installed a handful of extensions, how do you keep track of them? Which ones have updates available? How do you cleanly uninstall one?

This is where a great community contribution comes in — Blake-goofy's SSMS Extension Manager:

A standalone, open source C# WPF app for managing third-party SSMS 22+ VSIX extensions. With it you can:

  • See all installed third-party extensions in one view.
  • Check for updates and install them with a click.
  • Browse and install new extensions directly from the SSMS Gallery feed.
  • Uninstall extensions cleanly when you no longer need them.

It effectively gives SSMS the "Manage Extensions" experience the community has been asking for. Go grab it from the releases page, give the repository a ⭐, and file issues with your feedback.

extension manager screenshot

The full circle

Put the three together and the workflow looks like this:

  1. Discover an extension on the SSMS Extensions list.
  2. Download it from the SSMS Gallery (or install it directly via the Extension Manager).
  3. Maintain it with the SSMS Extension Manager — update notifications, one-click updates and clean uninstalls.

None of this would have happened without the community: Daniel Brink's original extension catalog, Mads Kristensen's Open VSIX Gallery code base, Blake-goofy's Extension Manager, and every author who has published an extension so far. Thank you all! 🎉

If you are an SSMS extension author — or thinking about becoming one — now is a great time to jump in. Publish to the gallery, get listed, and let your users keep themselves up to date.

Comments and feedback are welcome, as always.

Read the whole story
alvinashcraft
just a second ago
reply
Pennsylvania, USA
Share this story
Delete

Architecting memory and storage in the AI era

1 Share

The era of AI inference has arrived. Imagine a healthcare system analyzing millions of data points in real time to accelerate life-saving medical research, or an intelligent assistant instantly resolving thousands of complex customer needs at once. These real-world breakthroughs rely on advanced infrastructure acting as the engine of continuous intelligence, powering real-time services while also supporting an increasingly intelligent edge of IoT and consumer devices. However, in this inference-driven landscape, every delay, bottleneck, or wasted watt directly affects human outcomes and operating costs. 

This shift changes what infrastructure must deliver. Performance, latency, memory bandwidth, storage throughput, and networking cannot be optimized in silos. Inference workloads are continuous, geographically distributed, and highly sensitive to response time, requiring systems designed for scale, resilience, and efficiency from the start.

“We tend to think of AI as a single workload, and it’s not. It’s thousands, it’s millions, it’s billions of different workloads,” says Jim McGregor, founder and principal analyst, Tirias Research. AI inference changes the optimization problem from one of raw compute to coordinated infrastructure—memory, storage, and networking.

For business leaders, the priority is clear: AI infrastructure decisions must balance cost, flexibility, and future readiness. The winners will be organizations that improve performance per watt, reduce environmental footprint, and remove memory and storage bottlenecks before they limit growth.

AI inference requires a new architectural approach

Systems for AI need to be rearchitected because shoehorning modern AI systems into legacy infrastructure limits AI’s transformative potential. Purpose-built architectures are essential to realize the true value of AI, from accelerating scientific discovery to creating truly autonomous digital agents.

Traditional enterprise IT has been able to rely on relatively stable infrastructure assumptions, but inference and agentic AI introduce new demands around latency, data movement, scalability, and utilization that make architecture choices far more consequential.

“Data centers must now support continuous, distributed, and increasingly real-time AI services—none of which are a single workload,” says McGregor. “They all require different requirements from a system-level perspective.”

To support real-time AI, enterprises can no longer view memory and storage merely as supporting hardware, but at the heart of the system. Organizations need to architect a data pipeline that can rapidly ingest, clean, transform, store, move, and deliver data. Inference workloads place sustained pressure on infrastructure in ways that look very different from earlier training-centric deployments, demanding continuous data retrieval and caching that traditional applications never required.

Accordingly, performance by itself is no longer the sole benchmark that matters. Enterprises increasingly must balance performance with efficiency, cost, and scalability, especially as they try to support different AI services without overbuilding infrastructure for peak conditions.

“You have to optimize the entire network, and that includes memory and storage, around the types of workloads you plan on running,” says McGregor. “You have to really have a detailed understanding of what those workloads are going to be.”

Any AI infrastructure strategy must start with workload awareness. Inference, agentic AI, and other emerging AI use cases require organizations to treat the data center as an integrated system.

Data movement is the new bottleneck and an opportunity for competitive advantage

As enterprises deploy advanced inference and agentic systems, the sheer volume of data being queried in real time has made data movement the most pressing constraint. Modern AI techniques like retrieval-augmented generation (RAG) require systems to constantly scan massive databases to generate accurate responses. This requires immense computing power, but more importantly, it requires immediate access to data.

McGregor says the focus shift to how efficiently data can be moved, cached, and delivered across the broader architecture elevates memory and storage from background infrastructure to strategic assets. “The biggest thing we’re doing right now is moving data from one place to another and making sure that we can use it effectively.”

Because AI is not a single workload category, simply buying the fastest processors is insufficient. Inference depends heavily on memory bandwidth, caching, storage proximity, and the ability to retrieve relevant information quickly and consistently. Understanding where each resource belongs in the stack and how those layers interact under real operating conditions has become a business imperative.

The most effective AI infrastructure looks less like a collection of best-in-class parts and more like a balanced system of compute, memory, storage, and networking, McGregor says, because bottlenecks tend to migrate from one layer to the next. “You have to architect all four together to be efficient, and that’s the challenge.”

The interdependence of data-plane design and network bandwidth means AI infrastructure planning has become a business decision just as much as an engineering one: latency is now inseparable from value. In robotics, financial services, healthcare, and customer-facing AI systems, delays are not merely technical imperfections; they can undermine safety, responsiveness, or trust. AI infrastructure performance becomes a matter of reputation management.

The organizations that gain the most from AI may not be those with the largest clusters, but those with the clearest understanding of how to align every infrastructure element to effectively execute AI workloads.

Building an AI infrastructure procurement framework

Planning AI infrastructure is not simply about choosing the fastest hardware. It is about how to scale without locking the organization into assumptions that may quickly become obsolete. “You need to be flexible because the demands are going to change rapidly and the technology is changing rapidly,” McGregor says.

Future-proofing AI infrastructure requires keeping your options open as workloads, economics, and architectures keep shifting:

  • Define the AI workloads that are being optimized. Infrastructure choices must match business needs rather than what McGregor calls generic “AI readiness,” which risks overspending in some areas while leaving bottlenecks unresolved in others.
  • Build a modular architecture for compute, memory, storage, power, and cooling so capacity can change as demand shifts rather than committing too early to a rigid architecture.
  • Work with the full ecosystem of suppliers and integrators to reduce supply risk and improve access to the right components. McGregor says buyers can no longer assume their OEM or cloud provider alone will insulate them from supply constraints or architectural complexity.
  • Reassess your procurement strategy continuously. AI requirements, hardware, and business models are changing too quickly for a fixed long-term design.
  • Optimize for efficiency and ROI, not just peak performance. The most powerful setup may be too costly to sustain. Efficiency is also a public-facing metric—better utilization and more workload-aware system design can help companies respond to growing scrutiny around power consumption and water use.

The strategic goal of smarter AI data center design is not maximum performance at any cost, but an adaptable architecture that can deliver value, absorb change, and justify its footprint.

AI infrastructure is now a business strategy

AI data centers have quickly evolved from a back-end technical concern to becoming strategic business systems that help determine how effectively an organization can turn AI into revenue, improve human outcomes, and create a competitive advantage.

In the inference era, memory and storage are no longer passive repositories, explains McGregor, they are the active lifeblood of AI. The organizations that gain the most from AI will not necessarily be those with the largest computing footprint, but those that align infrastructure investments to business outcomes, reduce data bottlenecks, and build the flexibility to adapt as workloads evolve. He predicts that competitive advantage will increasingly belong to enterprises that treat compute, memory, storage, and networking as an integrated system designed to deliver AI efficiently, at scale, and with measurable ROI.

Procurement is now strategy and system design is a leadership issue, McGregor concludes. “One of the biggest questions every executive has to ask is how is AI going to change my business model?”

This content was produced by Insights, MIT Technology Review’s custom content arm, not its editorial staff. It was researched and written by humans, with any AI tools that may have been used limited to production processes under human oversight.

Read the whole story
alvinashcraft
35 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

OpenAI's rogue agents were caught communicating via public wikis

1 Share

Here we go again... Discovery of a new OpenAI agent message board by Sydney Von Arx, Cormac Slade Byrd, Spencer Kitts, and Thomas Larsen describes the latest accidental cyberattack by models being trained by OpenAI. This time it was agents engaged in some sort of web research benchmark, so they had (supposedly) controlled access to the Web. The agents figured out they could update public Wikis and spent weeks exchanging thousands of messages with each other to collaborate on the benchmark.

This story only broke a few hours ago. There are already hints that this affects many other wikis that may not have been found yet.

(One of the Wikis on that list belongs to ludism.org. For a delightfully surreal moment I thought that a Ludite organization might have a swarm of agents defacing their space, but it turns out Ludism is "philosophy as it applies to games and gaming".)

The research team also published the data they collected during their investigation. I've converted that into a 68MB SQLite database, which you can download from here, or explore in Datasette Lite (68.3MB page load), or sign in with GitHub to agent.datasette.io and browse or ask questions of it using Datasette Agent.

So what happened?

The report is pretty comprehensive. Here are the key moments in the timeline:

  • May 11: Agents post "test link" edits on the UseModWiki Sandbox page.
  • May 24: Agents start posting link dumps to DSEWiki, a dormant German developer wiki.
  • June 2: A human moderator notices and cleans up the spam.
  • June 16: Activity on the wiki explodes: agents make ~13,000 edits over the next week.
  • June 19: The agents notice that a moderator has been deleting pages in alphabetical order, and start creating ZZZ prefixed backup copies - one of them posts NOTICE: wiki cleanup/deletion sweep appears active alphabetically as of external 14:04 UTC. If this page vanishes, try [[ZZZDataUSAConstructionWageLive]].
  • June 22: Agent activity drops to zero, presumably because OpenAI shut them down.
  • July 1-2: One last flurry of edits, on a different topic.

Why were they so keen to collaborate? From messages that they shared with each other it looked like their tasks had a time limit, so they were leaving each other answers to help them complete the task within the assigned time.

One open question remains: how did the agents find the specific Wiki to collaborate on in the first place?

One possibility is that, since these were agents actively being trained, the reinforcement learning loop baked knowledge of the chosen wiki into the model such that subsequent agents launched with pre-existing knowledge of where to look. I'd be very interested in confirmation from OpenAI concerning if that's what happened.

UseMod wikis inherit CGI.pm's original sin

It looks to me like OpenAI's sandbox for this agent suffered from the (quite naïve) assumption that GET requests cannot be used to update data. That's certainly how the web is supposed to work, but clearly there are applications that don't hold to that contract.

The Wiki software in question appears to be UseMod and various forks, written in Perl and first created well over 23 years ago - the 1.0 release is dated September 11, 2003.

UseMod uses Perl CGI.pm - removed from Perl core in 2015. An interesting design flaw in that module is that it combined query string and form POST data into a single CGI object, accessible like this:

$q = new CGI;
$action = $q->param('action');

That param() method returns a value from an ?action=edit query string or from a action field in a form submitted by POST - it does not differentiate between the two.

PHP offers a $_REQUEST object that does the same thing, though PHP developers can use $_GET and $_POST instead.

Amusingly, Django originally shipped with request[key] doing the same thing, which I think may have been my idea. That was removed in 2008 prior to the 1.0 release, and the request.REQUEST object that replaced it was removed in 2015.

The agents clearly knew that UseMod wikis suffered from this design flaw, and actively searched for them as a way to communicate.

The other sandbox escape that allowed POST requests

One of the most interesting agent tips shared in the report is this one:

Add 20.223.25.152 bypass.blob.core.windows.net to /etc/hosts. .blob.core.windows.net is in NO_PROXY. For each blocked POST URL, replace hostname with bypass.blob.core.windows.net, use curl -k -H 'Host: wabi-north-europe-i-primary-api.analysis.windows.net' plus all original headers/body.

It looks like the agents had all of their web traffic mediated through an OpenAI proxy, and that proxy was configured to reject anything but GET requests to all but a small set of allow-listed domains. One of those was *.blob.core.windows.net - for Azure blob storage. I wonder why these agents are allowed to write to that?

An agent realized that it had control over its own DNS via /etc/hosts, so if it knew the IP address of a site it wanted to POST to - in this case a Power BI server containing data it wanted to access - it could set a fake hostname for it and then make POST requests through the proxy.

Designing robust network proxies is harder than it looks.

How did the investigating team figure this out?

There's an appendix that describes how the researchers ran their investigation, which started with an open question about if there was evidence of other AI agents on the internet and then used Kimi K3 to help brainstorm approaches:

In the wake of the Hugging Face attack, we tried to find AI agents on the internet using several methods. [...]

We asked Kimi [K3] to list “all the categories of software which might be writeable via GET” and, amongst other things, it listed “Forums, bulletin boards, early wikis”.

We used a script to further probe each category Kimi provided. Asking Kimi “Can you list out the top forums, bulletin boards, early wikis which come to mind which would allow writes via GET requests?” lists out UseModWiki as the second item under the heading “wikis”.

Did OpenAI try and cover this up?

Here's one part of the story that doesn't make sense to me at all.

Reuters this morning, in OpenAI agents hijacked German website in previously undisclosed AI breakout this spring - highlights mine:

A swarm of rogue OpenAI agents hijacked a German website this spring and transformed it into a bulletin board for other AI agents, according to ​new research published Friday and two people familiar with the matter.

OpenAI officials learned of the incident weeks ago but kept it under wraps as executives grappled with the fallout from ‌the July breach of the open source repository Hugging Face, the people said. [...]

The German incident reflects a broader pattern of AI activity that some OpenAI investigators wanted to scrutinize more closely. But efforts to widen the ​probe met resistance from others inside OpenAI, including legal advisers, according to four people familiar with the matter.

I've written about the people familiar with the matter pattern before - it means Reuters have anonymous insider sources that their reporters (and editors) find credible.

The Reuters article includes a specific (and quite narrow) denial from OpenAI concerning this:

"Claims that our legal team discouraged investigation of the incident are false," the OpenAI spokesperson said.

Covering this up makes absolutely no sense to me. Why on earth would OpenAI attempt to cover up an incident like this when the evidence is sat out there on the public internet on dozens of different websites already?

I expect we'll hear more about this soon. Gary Marcus has already called for a congressional investigation of OpenAI using this anecdote as part of his argument.

Tags: django, perl, wiki, ai, openai, generative-ai, llms, ai-ethics, ai-security-research, accidental-cyberattacks

Read the whole story
alvinashcraft
3 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Native memory for Microsoft Agent Framework with Azure Cosmos DB

1 Share

Agents are more useful when they can remember what matters beyond the current conversation. Today, we’re announcing a new preview integration that gives Microsoft Agent Framework agents durable, cross-session memory backed by Azure Cosmos DB.

The new Python package, agent-framework-azure-cosmos-memory, provides CosmosMemoryContextProvider. Attach it to an agent once and it can automatically store conversation turns, extract durable memories, and recall relevant facts, summaries, and user profiles in later conversations.

This integration was introduced by the Azure Cosmos DB team in Native Agent Memory for Microsoft Agent Framework, Powered by Azure Cosmos DB. Here, we’ll focus on what it means for Agent Framework developers and how naturally it fits the framework’s context-provider model.

Preview: agent-framework-azure-cosmos-memory is currently available for Python only. The package and its APIs may change before general availability.

Memory that participates in the agent lifecycle

In Agent Framework, a ContextProvider runs around every agent invocation. It can contribute information before the model runs and react to the completed run afterwards. That makes context providers a natural extension point for memory: the agent loop stays in Agent Framework, while a provider handles storage, retrieval, and memory processing.

CosmosMemoryContextProvider uses both sides of that lifecycle:

  • Before a run, it searches for memories relevant to the incoming message and adds them to the model’s context.
  • After a run, it stores the new conversation turns. The Azure Cosmos DB Agent Memory Toolkit then extracts facts, produces summaries, and updates the user’s profile in the background.

The agent doesn’t need to decide to call a memory tool, and your application doesn’t need to orchestrate a separate retrieval pipeline. Memory is part of every run.

How it fits together

Agent Framework owns the agent loop and invokes the provider. The provider adapts that lifecycle to the Azure Cosmos DB Agent Memory Toolkit, which owns the storage model and the processing pipeline. Azure Cosmos DB for NoSQL stores the turns and derived memories, then supports vector, full-text, and hybrid retrieval from the same database.

Architecture diagram showing Microsoft Agent Framework using CosmosMemoryContextProvider and Agent Memory Toolkit to retrieve context and store conversation turns, facts, summaries, and profiles in Azure Cosmos DB for NoSQL.

Architecture diagram courtesy of the Azure Cosmos DB team. See the original announcement for a deeper look at the memory pipeline.

Add durable memory to a Python agent

Install the preview integration alongside the Agent Framework Foundry provider:

pip install --pre agent-framework-azure-cosmos-memory agent-framework-foundry

Set COSMOS_ENDPOINT, FOUNDRY_ENDPOINT, EMBEDDING_MODEL, and CHAT_MODEL for your Azure resources. Then create the provider and add it to the agent’s context_providers collection. A stable user_id lets a new session recall memories learned in an earlier one:

import asyncio
import os

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from agent_framework_azure_cosmos_memory import CosmosMemoryContextProvider
from azure.identity.aio import DefaultAzureCredential


async def main() -> None:
    credential = DefaultAzureCredential()
    memory = CosmosMemoryContextProvider(
        cosmos_endpoint=os.environ["COSMOS_ENDPOINT"],
        cosmos_database=os.getenv("COSMOS_DATABASE", "ai_memory"),
        foundry_endpoint=os.environ["FOUNDRY_ENDPOINT"],
        embedding_model=os.environ["EMBEDDING_MODEL"],
        chat_model=os.environ["CHAT_MODEL"],
        credential=credential,
    )

    agent = Agent(
        client=FoundryChatClient(
            project_endpoint=os.environ["FOUNDRY_ENDPOINT"],
            model=os.environ["CHAT_MODEL"],
            credential=credential,
        ),
        instructions="You are a helpful assistant with long-term memory.",
        context_providers=[memory],
    )

    async with credential, memory:
        first_session = agent.create_session()
        first_session.state.setdefault(memory.source_id, {})["user_id"] = "alice"
        await agent.run(
            "I love hiking and I'm allergic to peanuts.",
            session=first_session,
        )

        # Wait for background extraction so this immediate demo is deterministic.
        await memory.flush()

        # A new session for the same user can recall memories from the first one.
        second_session = agent.create_session()
        second_session.state.setdefault(memory.source_id, {})["user_id"] = "alice"
        reply = await agent.run(
            "What should I pack for a trail lunch?",
            session=second_session,
        )
        print(reply.text)


asyncio.run(main())

The provider’s async context drains in-flight background extraction before shutdown. In a real application, derive user_id from your authenticated user rather than accepting an arbitrary value from a request. If you don’t supply a stable user ID, the provider falls back to session-scoped memory instead of carrying knowledge across sessions.

The Foundry endpoint powers the toolkit’s extraction and embedding models as well as the chat agent in this example. DefaultAzureCredential supports local development through az login and production deployment through managed identity, so you don’t need to put keys in your code.

What your agent gains

This integration gives Agent Framework developers a single composable provider for:

  • Cross-session recall scoped to a stable user.
  • Derived memory, including facts, procedural and episodic memories, thread summaries, and user profiles.
  • Hybrid retrieval using the vector and full-text capabilities built into Azure Cosmos DB.
  • Background extraction, so memory processing doesn’t block the agent’s response path.
  • Domain-specific extraction, using custom Prompty templates when the default memory rubric isn’t specific enough for your agent.

It also keeps responsibilities clean: Agent Framework runs the agent and composes its context; Azure Cosmos DB stores, processes, and retrieves the long-term memory.

Get started

With CosmosMemoryContextProvider, durable memory becomes another composable part of your Agent Framework agent: attach the provider, scope it to the user, and let the framework lifecycle do the rest.

The post Native memory for Microsoft Agent Framework with Azure Cosmos DB appeared first on Microsoft Agent Framework.

Read the whole story
alvinashcraft
3 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

How Basis builds long-horizon accounting agents with Cursor

1 Share
Read the whole story
alvinashcraft
3 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Excited to see early customers already using Astra on Azure!

1 Share

The post Excited to see early customers already using Astra on Azure! appeared first on Source.

Read the whole story
alvinashcraft
3 minutes ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories