Overview
Tools are capabilities the agent can invoke during a conversation. Some tools require your approval before executing (marked with π). Some tool schemas are deferred. Deferred tools are known to the agent, but their full schemas are hidden until the agent callsload_tools. This keeps the prompt smaller and avoids carrying Gmail, calendar, Slack, MCP, automation, background, notification, and directive tools in every turn. Loading a tool only makes it callable on the next model step; it does not execute the tool or bypass approvals.
System & files
| Tool | Description | Approval |
|---|---|---|
bash | Execute shell commands | π Dangerous commands |
read_file / list_files / find_files / search_text | Inspect local files without editing them | β |
write_file / edit_file | Create or modify local files | π |
current_time | Get current date and time | β |
research | Spawn a research agent with all read-only tools (depth: quick/normal/deep) | β |
background | Spawn an autonomous background agent for long-running tasks | β |
render_html | Render a sandboxed rich card in desktop chat (display or input mode) | β |
load_tools | Load deferred tool schemas by group or exact name | β |
set_directives | Set persistent behavioral directives injected into the system prompt | π |
set_directives are deferred. The background tool can start new background work immediately; the background deferred group is only for listing, reading, or canceling existing background tasks.
email.
| Tool | Description | Approval |
|---|---|---|
emails | Search and list emails | β |
read_email | Read full email content | β |
send_email | Send an email | π |
Calendar
Requires Google Calendar to be connected. Deferred group:calendar.
| Tool | Description | Approval |
|---|---|---|
calendar | Search and list events | β |
create_calendar_event | Create an event | π |
edit_calendar_event | Edit an event | π |
delete_calendar_event | Delete an event | π |
Memory
| Tool | Description | Approval |
|---|---|---|
remember | Store a fact | π |
recall | Search stored knowledge | β |
forget | Delete facts by query | π |
Web
Web search usesWEB_SEARCH mode (auto, exa, ddgs, none). EXA_API_KEY is only required when mode resolves to Exa.
| Tool | Description | Approval |
|---|---|---|
web_search | Search the web | β |
web_fetch | Fetch content from a URL | β |
Slack
Requires Slack to be connected. Deferred group:slack.
| Tool | Description | Approval |
|---|---|---|
slack_search | Search Slack messages | β |
slack_channel | Read recent channel history | β |
slack_thread | Read a message thread | β |
slack_channels | List accessible channels | β |
slack_dms | List open direct messages | β |
slack_dm | Read a direct message conversation | β |
slack_users | Search workspace members | β |
slack_user | Read a user profile | β |
slack_post_message | Post a message | π |
slack_post_blocks | Post Block Kit content | π |
Automations
Deferred group:automations.
| Tool | Description | Approval |
|---|---|---|
create_automation | Schedule a task | π |
create_loop | Start an in-chat recurring loop | π |
schedule_wakeup | Schedule a one-off wakeup into the current session | π |
list_automations | List all automations | β |
update_automation | Modify an automation | π |
delete_automation | Remove an automation | π |
run_automation | Trigger immediate run | π |
get_automation_result | Get last run result | β |
Runtime state
| Tool | Description | Approval |
|---|---|---|
update_todos | Update the visible task list for complex work | β |
get_goal | Read the active durable session goal | β |
complete_goal | Mark the active goal complete after verification | β |
block_goal | Mark the active goal blocked on missing input | β |
create_session | Create a new chat/channel session | β |
list_recent_sessions / read_session / search_transcripts | Inspect readable chat history | β |
Background tasks
Deferred group:background.
| Tool | Description | Approval |
|---|---|---|
cancel_background_task | Cancel a running background task by ID | π |
get_background_result | Get the output of a completed background task | β |
list_background_tasks | List all running background tasks | β |
background tool. Results are delivered automatically via SSE when complete β use get_background_result to read the full output.
Notifications
Deferred group:notifications.
| Tool | Description | Approval |
|---|---|---|
notify | Send a notification | π |
MCP tools
Connected MCP server tools are deferred by server. Useload_tools(group="mcp:<server>"), for example load_tools(group="mcp:obsidian"). MCP tools still keep their own approval/mutation behavior after loading.
MCP tools default to conservative external execution: approval required. Per-tool config can override that with tool_policies.<tool_name>. If a server is trusted, trust_tool_annotations=true lets ntrp use MCP Tool.annotations hints such as readOnlyHint and destructiveHint; explicit tool_policies still win.
Deferred loading examples
| Need | Load call |
|---|---|
| Search Gmail | load_tools(group="email") |
| Read or edit calendar | load_tools(group="calendar") |
| Search Slack | load_tools(group="slack") |
| Manage automations | load_tools(group="automations") |
| Spawn or inspect background work | load_tools(group="background") |
| Send a notification | load_tools(group="notifications") |
| Update standing directives | load_tools(group="directives") |
| Use an MCP server | load_tools(group="mcp:<server>") |
Skills
| Tool | Description | Approval |
|---|---|---|
use_skill | Activate a skill for specialized instructions | β |
load_tools(group="mcp:obsidian") when needed.
Approval flow
When a tool requires approval, the desktop app shows an approval card with the tool name, arguments, preview, and options to approve or reject the call. Session/tool-specific policy overrides can skip repeated approvals when you explicitly configure them. Settings β Tools can override individual tools:| Override | Behavior |
|---|---|
| Default | Use the toolβs policy |
| Approve | Expose the tool and skip approval |
| Ask | Expose the tool and require approval |
| Deny | Hide the tool from the agent and block execution |
User-defined tools
Create custom tools in~/.ntrp/tools/. Each file is a Python module that exports a tools mapping:
policy=ToolPolicy(..., requires_approval=True) plus an approval= function for tools that change source-of-truth state. Use permissions=frozenset({...}) to hide a tool unless a service is configured. Restart the server after adding or changing user tools.