Start here
By product
When it goes wrong
Looking for what a specific tool does? The toolbox lists every one of them.
Start here
Custom tools
Keep the scripts you trust in a folder, and your AI assistant gets each one as a tool of its own. Instead of writing new code every time, it runs your checked script by name.
How it works
Save a script
Put a script in Documents\AEC Pilot\Custom Tools. Each file is one tool.
The assistant sees it
The assistant sees it as custom_ plus the tool's name and runs it with the arguments you describe in the file.
You approve it
The approval window shows the whole file before it runs.
It runs in your app
Your checked script runs in Revit, AutoCAD, Navisworks or whichever application you work in.
- It works with Claude, ChatGPT / Codex, Cursor and other MCP clients, and in Pilot Chat.
- Changes to the folder are picked up while the application is open.
- Settings > Security > Custom tools lists what is loaded, says why a file was not, and opens the folder. The first time it creates the folder with a short how-to file.
Which language
C#
MAXScript
Python
The script is written the same way as the code the assistant runs in that application, with the arguments in args.
One file, one tool
The first lines of the file are comments that describe the tool. This Revit example lists the sheets whose number does not start with a given prefix:
// tool: check_sheet_names
// description: Lists the sheets whose number does not start with the given prefix.
// products: revit
// readonly: true
// param: prefix string required - The sheet number prefix, for example A-
string prefix = (string)args["prefix"];
return new FilteredElementCollector(doc).OfClass(typeof(ViewSheet)).Cast()
.Where(s => !s.SheetNumber.StartsWith(prefix))
.Select(s => s.SheetNumber + " " + s.Name).ToList(); - tool: the name, 3 to 40 lowercase letters, digits or underscores, starting with a letter.
- description: what the tool does, in any language, up to 400 characters. The assistant reads it to choose the tool.
- products: where it runs: revit, autocad, civil3d, advancesteel, navisworks, inventor, robot, 3dsmax, fusion. autocad also covers Civil 3D and Advance Steel.
- readonly: true when the script only reads the model.
- param: one line per argument: name, type (string, number, integer, boolean), required or optional, an optional default, and a short text.
The assistant sees it as custom_check_sheet_names, with a prefix argument.
Let the assistant save it
When a script works, ask the assistant to save it as a custom tool. AEC Pilot checks the file and shows you all of it, and saves it only when you choose Save. It asks every time, and it writes only to your own folder.
Safety: a custom tool is code
Settings > Security > Allow custom code must be on. When it is off, custom tools do not run.
Before a custom tool runs, the approval window shows its arguments and the whole file, unless you chose Don't ask again.
Only the file you were shown runs. If it changes while the window is open, the call is refused and asked again.
It goes through the same checks as any code from an assistant. In the applications that have a security check, risky calls such as deleting files or starting programs are refused.
In read-only mode custom tools are switched off.
For IT: one shared folder for the office
Set the policy value CustomToolsFolder (REG_SZ) under HKEY_LOCAL_MACHINE\SOFTWARE\Policies\7Dimensions\AEC Pilot, or under HKEY_CURRENT_USER, to a folder everyone can read, for example a network share. Environment variables are expanded.
Office folder
Set by IT, read by everyone, for example a network share.
Your folder
Documents\AEC Pilot\Custom Tools
Your assistant
Sees the tools of both folders.
Same name: the office tool wins
- Tools in the shared folder are marked as shared for the assistant.
- When a shared tool and a user's own tool have the same name, the shared one is used.
- Saving from the assistant never overwrites a shared tool.
Limits
40
custom tools per application
64 KB
per file
12
arguments per tool
400
characters of description
- Every tool is sent to the assistant with each request, so the list is kept short.
- Only the top level of the folder is read; subfolders are ignored.
- A file that does not fit is not loaded, and Settings says why.