When to create a custom tool
You have an internal API or service. If a step in your workflow means calling an internal endpoint, a ticketing system, or a proprietary data source, a custom tool gives the agent a typed, reliable way to do it instead of hand-written curl commands. You repeat the same multi-step operation. Recurring logic like normalizing scan output, enriching a finding, or querying an asset inventory is more reliable as a single tool than as instructions the agent re-derives each time. You want to wrap proprietary tooling. Custom tools let you expose your own scanners or scripts to the agent with a clear contract, so it knows exactly what inputs to pass and what to expect back.Anatomy of a custom tool
Every custom tool Neo builds has the same structure:- Source code: a TypeScript or Python function that contains the tool’s logic and runs inside your sandbox.
- Input schema: the typed parameters the agent must provide when it calls the tool.
- Output schema: the shape of the result the tool returns, so the agent can reason about it.
- When to use: a description of the situations this tool is for, so the agent knows when to reach for it.
- Timeout: how long the tool is allowed to run before it is stopped.
- Language: whether the toolkit’s tools are written in TypeScript or Python.
- Dependencies: packages the tools need, installed when the toolkit is set up.
- Setup code: initialization that runs before the tools, such as configuring a client.
- Environment variables: configuration and credentials made available to the tools at runtime.
- Metadata: tags and descriptions for organizing and discovering toolkits.
How to create a custom tool
You create and manage custom tools through Neo itself by describing what you want: the operation the tool should perform, its inputs, and what it should return. Neo writes the function, defines the input and output schema, registers it inside a toolkit, and tests it to confirm it runs. You can be as specific or as high-level as you like, and Neo fills in the gaps based on your description. For example:Sharing custom toolkits
Named toolkits can be shared privately with your Neo team. The owner chooses whether each teammate supplies personal or project credentials, or whether the toolkit uses saved credentials the owner explicitly binds for team use. See Team-shared custom toolkits for the Neo and API workflows, credential modes, access rules, and revocation behavior.How tools are loaded
Once created, a custom tool can reach your agents in four ways:- On-demand: the agent discovers and calls the tool only when a task needs it.
- Pinned: the tool loads automatically on every task.
- Attached: the tool is scoped to a specific custom agent, so only that agent sees it.
- Team-shared: an active teammate discovers a named toolkit shared with their team and can attach it to their own custom agents.

