A collection of external tool sets for Crystal Code. Each tool set adds model-callable tools to the Plan and Work catalogs without changing the host.
This repository is operator content only. It does not modify the Crystal library or the Crystal Code host. The host owns discovery, catalog registration, workspace fencing, approval, output truncation, and timeouts.
| Set | Tools | Runner | Notes |
|---|---|---|---|
| crystal-web | websearch, webfetch |
exec | Deprecated. Use the enhanced native .NET version: CrystalCode.Tools.Web |
Crystal Code scans one directory per tool set:
~/.crystal/tools/<directory>/tools.json
<workspace>/.crystal/tools/<directory>/tools.json
The set identity is the directory name. A project directory of the same name
replaces the home set as a whole. Each set is one directory, one tools.json,
and one runner (exec or dotnet). "enabled": false in tools.json leaves
the directory in place without loading it.
Discovery is controlled by /tools on|off|reload in a session, or by setting
"externalTools": false in ~/.crystal/config.json.
An exec set is copied as-is. Publish into the home or project tools directory
(the example installs the deprecated crystal-web set; prefer the native .NET
CrystalCode.Tools.Web):
mkdir -p ~/.crystal/tools
cp -r tools/crystal-web ~/.crystal/tools/crystal-webRestart the session, or run /tools reload, to load the new set. A dotnet
set is published with dotnet publish -c Release -o ~/.crystal/tools/<directory>
so the directory contains tools.json, the assembly, and its *.deps.json.
See external tools
for the full manifest and publish layout.
A tool registers in Plan, Work, or both through its set-level or tool-level
catalogs field (default ["plan", "work"]). Installing a set opts it into
the whole product unless the author narrows it. A ["work"] set keeps Plan
free of its side effects.
Every external tool is at least Write + Workspace and goes through
ToolInvocationPolicy by default. /tools lists the effective catalog and
approval; /tools home|project author|host changes source trust.
Create a new directory under tools/, give it a tools.json, and implement
the runner. The model-facing tool name comes from tools[].name (exec) or
ITool.Definition.Name (dotnet); it must not collide with a built-in name.
Set identity, manifest fields, and the dotnet load context are documented in
Crystal Code's
docs/external-tools.md.
tools/
crystal-web/ # deprecated; see CrystalCode.Tools.Web
tools.json # set manifest
crystal_web_tools.py # exec runner
README.md # per-set notes
MIT. See LICENSE.