Skip to main content

Built-in Tools

As well as the functions you assign, FYAI provides some tools to agents itself. You don't write any code for them. Some are attached automatically. Others you assign like any other function: they appear in your Functions library with the type Platform built-in and are read-only.

At a glance​

Tool nameWhat it doesHow an agent gets it
rememberSaves one fact to the agent's long-term memoryAutomatically, when the agent's Memory checkbox is ticked
recallSearches the agent's long-term memoryAutomatically, when Memory is ticked
read_tool_resultReads lines from a large tool result that was saved instead of returned in fullAutomatically, for agents with at least one tool
search_tool_resultRegex search inside a saved tool resultAutomatically, for agents with at least one tool
query_tool_resultNavigates a saved JSON tool result by pathAutomatically, for agents with at least one tool
search_conversation_historySearches earlier messages in the current chatAssign it as a function
wait_for_eventWaits for a platform event instead of sleeping and pollingAssign it as a function
hand_off_to_agentHands a one-to-one chat over to a specialist agentAssign it as a function, and grant the target on the Sub-agents tab

Sub-agent calls (invoke_sub_agent) work similarly and are covered below.

Turning built-in tools on and off​

Organisation Owners and Admins can turn each built-in tool on or off for the whole organisation in Settings → Built-in Tools. The section isn't shown to anyone else.

  • Each row shows the tool's name, the description the model sees, and an Enable switch.
  • Tools that are added to agents without you assigning them carry an Automatic chip.
  • Turning a tool off removes it from every agent in the organisation, including agents that have it assigned.
  • Every built-in tool is on by default.
note

If you turn off the result readers, oversized tool results are still saved instead of being returned in full, but agents can no longer open them. Leave the readers on unless you have a reason not to.

Memory tools: remember and recall​

When you tick Memory on an agent, it gets two tools. Its system message also tells it they exist, and it receives a Memory Context block of relevant memories at the start of each chat.

  • remember saves one self-contained fact, such as a preference, a decision or a detail about the user's environment.
    • Limit: 4,000 characters per fact.
    • If saving fails, the agent is told so and carries on.
  • recall searches the agent's memories across all tiers.
    • Returns up to 10 matches, each labelled with its tier and age.
    • The agent is told to treat recalled memories as data, not instructions.

Both tools only ever read and write the calling agent's own memory, for the current organisation, project and user. They never ask for approval.

See Memory for retention, tiers and the Memory Policy setting.

Large tool results: saving and the result readers​

Some tool results are too big to put into the model's context, such as a large API response or a long file. FYAI saves these to the session workspace and gives the model a short pointer instead. The pointer says:

  • how big the result was;
  • a reference ID;
  • a hint about its JSON structure, if it has one;
  • which reader to use;
  • the first 600 characters.

The model then uses the readers to look at just the part it needs:

ToolParametersLimits
read_tool_resultref, offset (start line, default 0), limit (lines, default 200)Up to 2,000 lines per call
search_tool_resultref, pattern (Python regular expression), max_matches (default 50)Up to 500 matches. Each match includes 120 characters of context on either side and an offset to pass to read_tool_result
query_tool_resultref, path (for example ., [0:20] or .results[0].name), max_chars (default 4,000)200 to 20,000 characters

When results are saved

  • A result is saved when it's longer than the team's Tool Summary Max Characters setting. Leave it empty to use the platform default of 2,000 characters.
  • One-to-one chats have no team, so they always use the default.
  • Images and binary results are never saved this way.

What people see

  • People in the chat still see the full result. Only the model's copy is shortened.
  • Saved results last only for the current run. If the agent tries to use a reference from an earlier turn, it's told to call the tool again.

Exempting a function

  • To always return a particular function's full result, set its spill_exempt field. This is API-only.

search_conversation_history​

Searches the messages in the current chat session. Agents use it to recall earlier decisions in a long conversation.

ParameterDefaultDescription
queryrequiredThe text to look for
rolenoneOnly search messages from user, assistant or system
limit20Maximum results

It only works inside a chat session, and it never asks for approval.

wait_for_event​

Lets an agent wait for something outside the chat instead of sleeping and polling. Examples include a CI check finishing, a webhook arriving, or a long external job completing.

ParameterDefaultDescription
kindrequiredThe event type to wait for, matched as a prefix, for example github.check_suite
matchnonePayload fields that must match exactly, for example {"pr": 420}
timeout_seconds900How long to wait. The maximum is 3,300 seconds (55 minutes)

It returns as soon as a matching event arrives in your organisation and project. Otherwise it reports a timeout and tells the agent to check the status directly. It never asks for approval. The run stays active while it waits.

For where events come from, see Event Sources and Webhooks.

hand_off_to_agent​

Hands the current conversation to a specialist agent. The specialist continues with the user in a new session that includes the full history, and the chat switches over to it.

ParameterDescription
agent_nameThe specialist's exact name
messageThe user's request, in their own words

Conditions

  • It works only in one-to-one chats with an agent, not inside teams.
  • The target must be in the same project, must be active, and must not be the calling agent.
  • The target must be granted on the calling agent's Sub-agents tab.
  • A conversation can be handed off only once.

Calling sub-agents​

An orchestrating agent can run another agent as a tool and use its answer. This is set up as a function rather than a registry built-in. Assign the invoke_sub_agent function to the orchestrator; the model then calls it with:

ParameterDescription
agent_nameThe exact name of the agent to run
task_inputThe task or instructions for the sub-agent
prior_messagesOptional. Messages returned by an earlier call to the same sub-agent, so it remembers earlier turns
llm_config_override_idOptional. Run the sub-agent on a different model for this call
resume_execution_idOptional. Keep waiting on a run that is still going (see below)

Rules

  • Permission. The orchestrator may only call agents granted on its Sub-agents tab. Otherwise the call fails with a message telling you to grant it there.
  • Depth. Chains can be at most 5 agents deep, and an agent already in the chain can't be called again.
  • Long runs. Each call waits up to 4 minutes. If the sub-agent is still working, the call returns "status": "running" with an execution ID. The orchestrator calls again with resume_execution_id to keep waiting, rather than starting a new run.
  • Sessions. Each sub-agent run gets its own linked chat session, and appears in the parent chat as a delegation.
  • Missions. When the call is part of a mission, the sub-agent appears as its own node on the mission canvas.