Dynamic Toolsets v2 - Combining progressive discovery and semantic search
Introducing Dynamic Toolsets v2. Our new approach combines the strengths of both methods into a unified system that exposes three core tools: search_tools, describe_tools, and execute_tool. The key insight is that tool descriptions provide structure and discoverability, while semantic search provides efficiency and natural language discovery. Together, they create a system that scales naturally without sacrificing usability.

Features
-
Gram Functions composition - Gram instances are now composable. This allows some similarity to Hono’s grouping pattern, making it possible to split and organize Gram Functions code bases more than before.
Before:
const gram = new Gram({ envSchema: { TRAIN_API_KEY: z.string().describe("API key for the train service"), FLIGHT_API_KEY: z.string().describe("API key for the flight service"), }, }) .tool({ name: "train_book", description: "Books a train ticket", }) .tool({ name: "train_status", description: "Gets the status of a train", }) .tool({ name: "flight_book", description: "Books a flight ticket", }) .tool({ name: "flight_status", description: "Gets the status of a flight", });Now, with composability:
// train.ts const trainGram = new Gram({ envSchema: { TRAIN_API_KEY: z.string().describe("API key for the train service"), }, }) .tool({ name: "train_book", description: "Books a train ticket", }) .tool({ name: "train_status", description: "Gets the status of a train", }); // flight.ts const flightGram = new Gram({ envSchema: { FLIGHT_API_KEY: z.string().describe("API key for the flight service"), }, }) .tool({ name: "flight_book", description: "Books a flight ticket", }) .tool({ name: "flight_status", description: "Gets the status of a flight", }); // index.ts import { trainGram } from './train' import { flightGram } from './flight' const travelGram = new Gram() .extend(trainGram) .extend(flightGram); -
Integrate dynamic toolsets v2 with progressive and semantic search in one feature
-
Introduce announcement modal for new Gram Functions release
-
Add Resend example demonstrating email reminders via the Resend API
-
Support non-blocking deployment creation for non-intrusive deployment initiation
-
Update Gram description tagline and rearrange sidebar UI elements
-
Index embedding tags to enhance search and retrieval operations
-
Add tags to embeddings table for dynamic toolsets phase two
Fixes
- Wrap long environment variable names in Playground auth tab to prevent overflow
- Fix Moonshine button issues and adjust various UI elements
- Ensure dark mode compatibility for Shiki themes
- Increase function reap batch size for improved resource recovery
- Enhance deployment tracking and local Gram CLI setup processes
- Update esbuild configuration with CommonJS require shim for better compatibility
- Correct textual content in create-function CLI for improved clarity