Tools
Built-in tools, Composio-powered external tools, and how to scope them per agent.
A tool is a capability an agent can invoke. Project88 ships built-in tools and exposes thousands more via Composio.
Built-in tools
Always available — no setup required:
| Tool | What it does |
|---|---|
search_user_tables | Query your data tables and their rows |
search_pages | Find page content (block-level search) |
list_agents | List the agents in the current org |
get_current_time | Returns the current time in ISO 8601 |
Built-in tools run inside the chat-proxy Edge Function — they're fast,
free of external rate limits, and never leave Supabase.
Composio tools
Every Composio toolkit you've connected exposes its tools to your agents automatically. The catalog has 900+ services. Common ones:
- Gmail — search, fetch, send, label
- Google Calendar — list events, create events
- Outlook — calendar + mail
- Slack — list channels, search messages, send messages
- GitHub — list issues, create issues
- Notion / Linear / Asana / Jira — and many more
When you connect a toolkit, the chat-proxy Edge Function fetches its
tool definitions from Composio's REST API at request time, converts them
to OpenAI function-calling schemas, and exposes them to the LLM.
The proxy also does several things to keep tool use reliable:
- Schema sanitization — Composio sometimes returns property keys with
spaces or other characters invalid in JSON schema (e.g.
"Time Min"). The proxy rewrites them before passing to the LLM and reverses the mapping before invoking the tool. - Description overrides — for a handful of high-traffic tools (Gmail, Calendar, Outlook, Slack, GitHub) the proxy substitutes clearer, user-centric descriptions so the LLM picks them up reliably.
- Connected-services hint — a system message at the start of every conversation lists the user's connected services and nudges the LLM to use the tools rather than refuse the request.
- Tool count per toolkit is capped to keep the prompt focused — the exact number is tuned per release.
Scoping tools per agent
Each agent has a Tools tab with visual toggle switches grouped by category:
- Built-in — the 4 built-in tools
- Calendar & Email — Gmail, Outlook, Google Calendar
- Communication — Slack
- Development — GitHub
- (your other connected toolkits appear in their own categories)
The toggles write to tools.allow (a list of allowed tool IDs) and
tools.deny (a list of explicitly denied tool IDs). The proxy reads both
at request time:
- If
allowis non-empty, only tools inalloware exposed. - Any tool in
denyis removed regardless ofallow.
Use deny to surgically remove a single dangerous tool from an otherwise
broadly-scoped agent.
Explicit tool calls in pipelines
In an Agent's pipeline, drop a Tool Call node. You pick the tool, fill in its arguments (with bindable inputs — you can reference upstream node outputs, variables, and formula functions), and the node returns the result for downstream nodes to use.
This is how you get deterministic tool use — the LLM doesn't decide, your graph does.
Tool call visibility in chat
Every tool call shows up in the chat thread as a collapsible
ToolCallsDisplay block with:
- Tool name
- Arguments (JSON)
- Result preview
Tool calls are persisted to messages.metadata so they re-render exactly
when you reload the conversation.