Tool catalog

The capabilities agents can be wired to. Tools are backed by code and ship with AgentsHQ — library skills reference them by slug.

fetch-file

api

Download a file (binary-safe) from a URL into your data directory so you can then parse or read it. Per-host auth from the org Integration is applied automatically. Use before parse-document to process a remote PDF/invoice/resume/export.

http-get

api

Make an HTTP GET request to a URL

http-post

api

Make an HTTP POST request with a JSON body

http-request

api

Make an HTTP request with ANY method (GET, POST, PUT, PATCH, DELETE) plus optional JSON body and headers. Use this over http-get/http-post when a SaaS API needs PUT/PATCH/DELETE to update or remove records — it enables true two-way sync. Per-host auth is injected automatically from the org's Integration; never put credentials in the body or headers.

send-email

api

Send an email via the configured email integration

parse-document

shell

Extract plain text from a document in your data directory: PDF, DOCX, images/scans (set ocr:true), or plain text/CSV/JSON. Use to read invoices, contracts, resumes, statements, and exports that aren't already plain text.

read-file

shell

Read a file from your data directory. Paths starting with 'shared/' read and write the group's shared directory, visible to every agent in your group; any other path is private to you.

shell-execute

shell

Execute a shell command inside the agent's container

write-file

shell

Write a file into your data directory. Paths starting with 'shared/' read and write the group's shared directory, visible to every agent in your group; any other path is private to you.

browser-extract

browser

Extract text and links from part of a page already loaded by browser-navigate, using a CSS selector. Requires the cache_key that browser-navigate returned.

browser-navigate

browser

Fetch a URL and return its text plus every link on the page. Follows redirects. Returns truncated:true and total_length when the page is longer than max_chars.

browser-search

browser

Search the web using a query string

check-task

internal

Check the current status and result of a previously delegated task

complete-task

internal

Complete your currently assigned task with a structured, verifiable result. Call this when you finish work on a task you were ASSIGNED. Cron and heartbeat runs have no assigned task — finish those by summarising in your final message instead. Result content is a scannable record, NOT a document: no markdown headers, no emoji, no tables, no preamble, and never restate the task. Full deliverables (drafts, specs, reports) go in artifacts or a CRM Inbox draft — never inline in summary.

create-hook

internal

Create an internal event hook: an instruction an agent runs automatically whenever a platform event fires (task_complete, task_blocked, agent_error, session_open, …). Event-driven counterpart to create-schedule — use it for 'whenever X happens, do Y', and a schedule for 'every Monday at 9am, do Y'.

create-schedule

internal

Create an internal recurring cron schedule that wakes an agent with a prompt at set intervals (e.g. 'run gtm-campaign-monitor every Monday 9am BRT'). This is the ONLY correct way to put an agent on a schedule — the schedule lives in this platform's own scheduler, so never build it through an external automation, workflow, or calendar API.

create-task

internal

Create a new task on the group's board

delegate-task

internal

Dispatch work to a sub-agent. Pass task_id to hand off an EXISTING board task (preferred — no new task is created); otherwise pass title + description to create a new one. ONE task = ONE goal with ONE verifiable outcome — two deliverables means two tasks (exception: fetching from several API endpoints to complete one goal is still one task). Every description MUST end with a "Done when:" acceptance line stating how completion is verified.

delete-hook

internal

Stop an internal event hook by its ID. By default it is disabled (kept, so update-hook can switch it back on); pass permanent:true to erase it for good.

delete-schedule

internal

Stop an internal recurring schedule by its ID. By default it is disabled (kept, with its run history, so update-schedule can switch it back on); pass permanent:true to erase it for good.

list-agents

internal

List available sub-agents in the organization with their skills and current status

list-hooks

internal

List the internal event hooks in this organization (enabled and disabled), with their ids, trigger type and last trigger time. Call this first to find the hook_id that update-hook or delete-hook needs.

list-schedules

internal

List the internal recurring schedules in this organization (enabled and disabled), with their ids, cadence, timezone and next run time. Call this first to find the schedule_id that update-schedule or delete-schedule needs.

list-tasks

internal

List tasks on your group's board. Check for existing/duplicate work BEFORE creating or delegating tasks.

schedule-task

internal

Schedule a recurring instruction for YOURSELF on a cron expression (e.g. a daily 9am spend-pacing check, an hourly deliverability watch). Runs on this platform's own internal scheduler — never call an external automation or calendar API to make an agent run on a schedule. The platform re-runs the prompt automatically at each due time, so monitoring/watchdog work repeats without a human re-enqueuing it. To schedule a DIFFERENT agent, use create-schedule.

send-message

internal

Send a message to another agent or user via a session

update-hook

internal

Change an existing internal event hook: its prompt, trigger event, conditions, or whether it is active. Set enabled:true to (re)activate and enabled:false to deactivate. Use list-hooks to find the hook_id.

update-memory

internal

Write notes to the agent's own persistent memory for future reference

update-schedule

internal

Change an existing internal schedule: its cadence, prompt, timezone, name, or whether it is active. Set enabled:true to (re)activate a schedule and enabled:false to deactivate it — the next run time is recomputed for you. Use list-schedules to find the schedule_id.