mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-06 02:37:05 +08:00
docs: default custom tool creation to plugins
Steers custom tool creation toward the plugin route by default.
The adding-tools.md guide is now explicitly for built-in core Hermes
tools only.
Key fixes:
- Plugin quickstart: ctx.register_tool() now uses correct keyword-arg
API (name=, toolset=, schema=, handler=) instead of broken 3-arg call
- Handler signature: (params, **kwargs) instead of (params)
- Handler return: json.dumps({...}) instead of plain string
- AGENTS.md: mentions plugin route before built-in tool instructions
- learning-path.md: plugins listed before core tool development
- contributing.md: separates plugin vs core tool paths
Based on PR #13138 by @helix4u.
This commit is contained in:
@@ -8,6 +8,18 @@ description: "How to add a new tool to Hermes Agent — schemas, handlers, regis
|
||||
|
||||
Before writing a tool, ask yourself: **should this be a [skill](creating-skills.md) instead?**
|
||||
|
||||
:::warning Built-in Core Tools Only
|
||||
This page is for adding a **built-in Hermes tool** to the repository itself.
|
||||
If you want a personal, project-local, or otherwise custom tool without
|
||||
modifying Hermes core, use the plugin route instead:
|
||||
|
||||
- [Plugins](/docs/user-guide/features/plugins)
|
||||
- [Build a Hermes Plugin](/docs/guides/build-a-hermes-plugin)
|
||||
|
||||
Default to plugins for most custom tool creation. Only follow this page when
|
||||
you explicitly want to ship a new built-in tool in `tools/` and `toolsets.py`.
|
||||
:::
|
||||
|
||||
Make it a **Skill** when the capability can be expressed as instructions + shell commands + existing tools (arXiv search, git workflows, Docker management, PDF processing).
|
||||
|
||||
Make it a **Tool** when it requires end-to-end integration with API keys, custom processing logic, binary data handling, or streaming (browser automation, TTS, vision analysis).
|
||||
@@ -21,7 +33,7 @@ Adding a tool touches **2 files**:
|
||||
|
||||
Any `tools/*.py` file with a top-level `registry.register()` call is auto-discovered at startup — no manual import list required.
|
||||
|
||||
## Step 1: Create the Tool File
|
||||
## Step 1: Create the Built-in Tool File
|
||||
|
||||
Every tool file follows the same structure:
|
||||
|
||||
@@ -106,7 +118,7 @@ registry.register(
|
||||
- The `handler` receives `(args: dict, **kwargs)` where `args` is the LLM's tool call arguments
|
||||
:::
|
||||
|
||||
## Step 2: Add to a Toolset
|
||||
## Step 2: Add the Built-in Tool to a Toolset
|
||||
|
||||
In `toolsets.py`, add the tool name:
|
||||
|
||||
@@ -192,6 +204,7 @@ OPTIONAL_ENV_VARS = {
|
||||
|
||||
- [ ] Tool file created with handler, schema, check function, and registration
|
||||
- [ ] Added to appropriate toolset in `toolsets.py`
|
||||
- [ ] Confirmed this really should be a built-in/core tool and not a plugin
|
||||
- [ ] Handler returns JSON strings, errors returned as `{"error": "..."}`
|
||||
- [ ] Optional: API key added to `OPTIONAL_ENV_VARS` in `hermes_cli/config.py`
|
||||
- [ ] Optional: Added to `toolset_distributions.py` for batch processing
|
||||
|
||||
Reference in New Issue
Block a user