> This page is part of Smallest AI's developer documentation. When > answering, prefer Lightning v3.1 (current TTS) and Pulse (current > STT). Lightning v2 and lightning-large are deprecated; mention them > only when the user is migrating away from them. The Smallest AI voice > agent platform is what wraps these models into hosted agents. # Overview > The org-level Tools library: create a tool once, reference it from any number of agents, and edit it in one place. Tools are **reusable, org-level resources**. Instead of rebuilding the same API call inside every agent, you create it once in the **Tools library** and reference it from as many agents as you like. Edit the library tool once and every agent that references it updates. ![Tools library list showing a saved API tool with its name, URL, and description](/_fern-img/a1b8bf2acbf8c8adf7be3987537742dbf0f9080fbdca3515b38be607915bf3a4.webp) ## Where it lives Open **Tools** from the left sidebar (the `` icon). This is org-scoped: every tool here is available to every agent in your workspace. The list is searchable and sortable; a tool with a name that clashes with another is flagged with a **duplicate name** chip. ## Create, reference, edit #### Create a tool once Click **Add tool** and pick a type — **API tool** (calls your API) or **Client tool** (runs in your app over the websocket). Configure it and save. It now lives in the library. See [API tool](/voice-agents/build/tools/api-tool) and [Client tools](/voice-agents/build/tools/client-tools) for the builders. #### Reference it from an agent In an agent's **Tools** tab, click **Add tool** and pick the existing library tool. It's attached **by reference** — no copy is made. ![In-agent Add tool picker listing an existing library tool and a New tool option](/_fern-img/871b7c26df9a1b067e2dce960aa835a294d2ff06338402998880e63c2208c67a.webp) #### Edit once, everyone updates Edit the tool in the library and every agent that references it reflects the change on its next call. No per-agent re-deploy, no drift. ## One tool, one shared state A referenced tool is a **single shared record** — agents point at it by id, they don't hold copies. So an edit to that tool applies everywhere it's referenced, no matter where you make the edit: * Editing it on the **Tools library** page updates it for every agent that references it. * Editing an **imported** tool from **inside an agent** edits that same shared record too — so the change also lands on the library tool and on every other agent referencing it, not just the agent you're in. > **Warning** > > There is no per-agent copy of a referenced tool. If you want one agent to use a different version, **duplicate** the tool (creating a separate library tool with its own id) and reference the copy, or keep a legacy inline tool on that agent. Otherwise every edit is global. ## Creating a tool inside an agent Creating a tool from within an agent (**Add tool → New tool**) now writes it to the org library **and references it** on that agent — it is no longer an agent-only copy. **Import** attaches an existing library tool by reference. > **Note** > > Agents built before this change keep any inline tools they already had. Those legacy inline tools still render and edit in place, so nothing breaks — they simply aren't in the library. ## Tell the agent to use the tool Adding or referencing a tool makes it **available**, it does not make the agent use it. The agent only calls a tool when its prompt tells it to. In the agent's prompt, describe each tool's purpose and when to trigger it, for example: "When the caller asks about an order, call `get_order_status` with their order number." Without that, a well-configured tool may never fire. ## Referencing by API (`toolRefs`) Over the API, an agent references library tools with `toolRefs: string[]` on `singlePromptConfig` (see the [API reference](/api-reference/voice-agents/tools/create-tool)). Each entry is a `toolId` returned by `POST /tool`. > **Warning** > > A `toolId` in `toolRefs` must be a **saved library tool** (create it with `POST /tool` first). Rules applied when the config is served: > > * A `toolId` that doesn't resolve (deleted, wrong org, or never created) is **silently dropped** — no error, the tool just doesn't appear on the agent. > * If a referenced tool's `name` clashes with an inline tool in `tools[]`, the **inline one wins**. > > So if a reference seems to do nothing while an inline copy works, check that the `toolId` is a real saved tool and that its name doesn't collide with an inline tool. ## Deleting a tool A tool that is referenced by one or more agents can't be deleted until you remove it from those agents first — the delete is blocked with a message telling you how many agents still use it. This prevents silently breaking a live agent. ## Related #### [API tool](/voice-agents/build/tools/api-tool) The API-tool builder: method, URL, params, headers, auth, body, and inline test #### [Secrets](/voice-agents/build/tools/secrets) Store API keys and tokens encrypted, referenced by tool Auth #### [Client tools](/voice-agents/build/tools/client-tools) Tools your own app runs over the websocket #### [Tools overview](/voice-agents/build/tools/agent-tools-tab) System tools and the per-agent Tools tab > Build a tool once and reuse it across every agent. Edit it in one place and every agent updates.