Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.ntrp.io/llms.txt

Use this file to discover all available pages before exploring further.

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 calls load_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

ToolDescriptionApproval
bashExecute shell commands🔒 Dangerous commands
read_fileRead file contents (supports ~ expansion)
current_timeGet current date and time
researchSpawn a research agent with all read-only tools (depth: quick/normal/deep)
load_toolsLoad deferred tool schemas by group or exact name
backgroundSpawn an autonomous background agent for long-running tasks
set_directivesSet persistent behavioral directives injected into the system prompt🔒
background and set_directives are deferred. The agent should first load background or directives when those capabilities are needed.

Email

Requires Gmail to be connected. Deferred group: email.
ToolDescriptionApproval
emailsSearch and list emails
read_emailRead full email content
send_emailSend an email🔒

Calendar

Requires Google Calendar to be connected. Deferred group: calendar.
ToolDescriptionApproval
calendarSearch and list events
create_calendar_eventCreate an event🔒
edit_calendar_eventEdit an event🔒
delete_calendar_eventDelete an event🔒

Memory

ToolDescriptionApproval
rememberStore a fact🔒
recallSearch stored knowledge
forgetDelete facts by query🔒

Web

Web search uses WEB_SEARCH mode (auto, exa, ddgs, none). EXA_API_KEY is only required when mode resolves to Exa.
ToolDescriptionApproval
web_searchSearch the web
web_fetchFetch content from a URL

Slack

Requires Slack to be connected. Deferred group: slack.
ToolDescriptionApproval
slack_searchSearch Slack messages
slack_channelRead recent channel history
slack_threadRead a message thread
slack_channelsList accessible channels
slack_dmsList open direct messages
slack_dmRead a direct message conversation
slack_usersSearch workspace members
slack_userRead a user profile

Automations

Deferred group: automations.
ToolDescriptionApproval
create_automationSchedule a task🔒
list_automationsList all automations
update_automationModify an automation🔒
delete_automationRemove an automation🔒
run_automationTrigger immediate run🔒
get_automation_resultGet last run result

Background tasks

Deferred group: background.
ToolDescriptionApproval
cancel_background_taskCancel a running background task by ID🔒
get_background_resultGet the output of a completed background task
list_background_tasksList all running background tasks
Background tasks are spawned via the background tool. Results are delivered automatically via SSE when complete — use get_background_result to read the full output.

Notifications

Deferred group: notifications.
ToolDescriptionApproval
notifySend a notification🔒

MCP tools

Connected MCP server tools are deferred by server. Use load_tools(group="mcp:<server>"), for example load_tools(group="mcp:obsidian"). MCP tools still keep their own approval/mutation behavior after loading.

Deferred loading examples

NeedLoad call
Search Gmailload_tools(group="email")
Read or edit calendarload_tools(group="calendar")
Search Slackload_tools(group="slack")
Manage automationsload_tools(group="automations")
Spawn or inspect background workload_tools(group="background")
Send a notificationload_tools(group="notifications")
Update standing directivesload_tools(group="directives")
Use an MCP serverload_tools(group="mcp:<server>")

Skills

ToolDescriptionApproval
use_skillActivate a skill for specialized instructions
Obsidian is handled through the /obsidian skill or an external MCP server.

Approval flow

When a tool requires approval, the TUI shows a dialog with the tool name, arguments, and options to approve, reject, or always-allow that tool for the session. See Auto-approve mode for skipping approvals.

User-defined tools

Create custom tools in ~/.ntrp/tools/. Each file is a Python module that exports a tools mapping:
from pydantic import BaseModel, Field

from ntrp.tools.core import ToolResult, tool
from ntrp.tools.core.context import ToolExecution


class EchoInput(BaseModel):
    text: str = Field(description="Text to echo")


async def echo(execution: ToolExecution, args: EchoInput) -> ToolResult:
    return ToolResult(content=args.text, preview="Echoed")


tools = {
    "echo": tool(
        display_name="Echo",
        description="Echo text back to the user.",
        input_model=EchoInput,
        execute=echo,
    )
}
Use mutates=True plus an approval= function for tools that change external state. Use requires={...} to hide a tool unless a service is configured. Restart the server after adding or changing user tools.