Hubzoid
Reference

Built-in tools

Every tool the Hubzoid 1.0.1 runtime gives an agent, with arguments, limits, which surfaces receive it, and what the MCP server leaves out.

Every Hub starts with the tools on this page. They are built for the Hub they run in, so file paths resolve inside the Hub folder and chat tools resolve to the current conversation. Your own tools from tools_local/ and restricted/, and tools from MCP servers, are added on top.

Summary

ToolWhat it does
read_fileRead a text file inside the Hub folder.
list_filesList Hub files matching a glob.
write_artifactSave a file the user can download, and return a download link.
list_artifactsList files saved in this chat.
read_uploadPreview a file the user attached in this chat.
read_upload_fullRead an attached text file in full.
list_knowledgeList knowledge documents.
read_knowledgeRead one knowledge document.
list_skillsList skills.
load_skillLoad one skill's instructions.
grep_dataSearch raw_data/ for a pattern.
http_getFetch a URL.
web_searchSearch the web.
current_timeCurrent date and time in a timezone.
render_jinjaRender a Jinja2 template with JSON values.
rememberSave a learning into the Hub's knowledge, for people with Save shared knowledge (curator).
call_jevTyped decisions from Jev, for people with Call Jev (jev). Experimental.
my_management_scopeList the agents you manage and what you can grant. Optional.
propose_access_changePropose a grant or removal for one person, to confirm in the Console. Optional.
propose_new_accountPropose a new account with access, to confirm in the Console. Optional.
connect_accountSend a personal link to connect an app. Optional.
run_gitRead or sync a Git checkout. Scheduled markdown tasks only.
write_hub_fileWrite inside a task's declared paths. Scheduled markdown tasks only.
publish_artifactPublish a file the run wrote as a private artifact. Markdown tasks that opt in.
send_emailEmail the account the run acts as. Markdown tasks that opt in.

Where each tool is available

ToolChat surfaces and /v1Markdown tasksCode workflow agent calls, evals, hubzoid testMCP server
File, knowledge, skill, search, web and utility toolsyesyesyesyes
write_artifact, list_artifacts, read_upload, read_upload_fullyesyesyesno
remember, call_jevwith the capabilitywith the capabilitywith the capabilityno
Management tools, when turned onfor people who manage access, not in Slacknonofor people who manage access
run_git, write_hub_filenoyesnono
publish_artifact, send_emailnowhen the task opts innono
Your tools_local/ toolsyesyesyesyes
Your restricted/ toolswith the permissionwith the permissionwith the permissionwith the permission
Delegates (handover_<name>)yesyesyesno
Tools from connectors/.mcp.json and the shared browseryesyesyesno

Chat surfaces are the web chat, Slack, WhatsApp, Telegram and the OpenAI-compatible API. The MCP server leaves out the four chat-scoped tools because an MCP call has no conversation to save files into or read attachments from. It also leaves out remember, call_jev and delegates, and it does not relay the Hub's own MCP servers. connect_account is covered below.

Markdown tasks and code workflow agent calls run without a chat, so write_artifact saves into output/<session>/ and reports a local path, and the upload tools have nothing to read. Evals run each case in its own chat, eval-<case>.

Files and uploads

read_file

Read a UTF-8 text file under the Hub folder.

Prop

Type

Without a limit, results over 25,000 characters are cut, and the full text is saved to an overflow file whose path the result names, so the agent can continue with offset and limit. Paths outside the Hub and anything under restricted/ are refused.

list_files

List files under the Hub folder that match a glob.

Prop

Type

Returns up to 100 paths, with a note to narrow the glob when there are more. Files under restricted/ are never listed.

write_artifact

Save a text file for the user and return a download link.

Prop

Type

The file goes to .hubzoid/chats/<chat>/artifacts/. The link is signed, so a browser can open it without an API key, and it is built from HUBZOID_PUBLIC_URL, then WEBUI_URL, then the bridge's loopback address. The runtime also shows the link to the user even when the model does not repeat it. Links expire only when HUBZOID_ARTIFACT_LINK_TTL is set. The built-in dashboard skill uses this tool to deliver single-file HTML dashboards. These chat downloads are separate from published artifacts, which workflows create with hub.publish_artifact and people open in the artifact viewer.

list_artifacts

List the files saved in this chat so far, with their sizes. Takes no arguments.

read_upload

Preview a file the user attached in this chat. The preview depends on the file type.

Prop

Type

File typePreview
TextThe first 200 lines, or the whole file when it is shorter.
JSONA structural summary and the start of the formatted document.
CSVThe header, the first 20 rows and the row count.
PDFExtracted text of the first 5 pages, or the pages you ask for.
ImageMetadata only. With HUBZOID_VISION on, the model sees attached images directly.
Other binaryA hex preview of the first bytes.

Text previews start with the file's path on disk, so the agent can pass the file to a tool that takes a path.

read_upload_full

Read an attached text file in full, up to 500,000 characters.

Prop

Type

Refuses images and other binary files. Use it after read_upload when the preview says more is available.

Knowledge and skills

list_knowledge

List every document in knowledge/ as name: description. Takes no arguments.

read_knowledge

Return the body of one knowledge document.

Prop

Type

Both knowledge tools read the folder from disk on each call, so edits and documents saved with remember are visible immediately.

list_skills

List every skill as name: description. Takes no arguments.

load_skill

Return the instructions of one skill.

Prop

Type

Skills include skills/, sub-agents loaded as skills, and on chat surfaces the built-in dashboard skill. The skill list is read when the Hub starts. See Hub files.

Search and web

grep_data

Search inside the Hub for a regular expression or plain string. Uses rg (ripgrep) when it is installed and a Python search otherwise, with the same output.

Prop

Type

Returns path:line:content lines grouped by file, most matches first. Limits: 100 matches in total, 30 per file, 300 characters per line and 25,000 characters per result, with notes on how to narrow the search. Folders such as .git, node_modules, .venv, dist and build are skipped, as are files over 5 MB in the Python search. The tool needs a raw_data/ folder, and refuses paths outside the Hub or under restricted/.

http_get

Fetch a URL and return the status and body as text. No JavaScript runs and no credentials are sent.

Prop

Type

Follows redirects, times out after 15 seconds, and cuts bodies at 50,000 characters. With HTTP_ALLOWLIST set, only the listed hosts and their subdomains are fetched. HUBZOID_DISABLE_HTTP_GET=true removes the tool.

Search the web through DuckDuckGo's HTML results. No API key is needed.

Prop

Type

Returns a list of titles, links and snippets. HUBZOID_DISABLE_WEB_SEARCH=true removes the tool.

Utilities

current_time

Return the current date and time as ISO 8601, for example 2026-05-20T14:32:01+05:30.

Prop

Type

render_jinja

Render a Jinja2 template with values from a JSON object. Undefined variables are an error rather than empty text.

Prop

Type

Learning

remember

Save a learning as a knowledge document. The tool tells the model to call it only when the user explicitly asks it to remember something.

Prop

Type

The document is written to knowledge/_learned/<slug>.md with the author and time in its frontmatter, and the previous version is kept as <slug>.md.bak. Content is limited to 100,000 bytes. Every person using the Hub can read the result through read_knowledge.

remember is on every Hub but works only for a caller who holds the curator permission, shown in the Console as Save shared knowledge, on a surface allowed to use restricted tools. On a Hub whose access is managed in the Console, grant it there or with hubzoid grant <email> curator. On a Hub with group-based access, membership of a web chat group named curator gives the same access. Until someone holds it, the tool is hidden and every call is refused. A Hub tool named remember replaces this one.

Decisions

call_jev

Ask Jev, TypeSafe's decision model, typed questions about a piece of text through OpenRouter. It returns answers with probabilities instead of prose. Experimental.

Prop

Type

TypeAsksAnswer
noulDoes it hold?The probability of yes. Criteria are optional.
choiceWhich label fits?One of two or more labels given in criteria, with probabilities.
scoreWhere on a scale?A score from 0 to the last of two or more levels in criteria, lowest first.

call_jev is on every Hub but works only for a caller who holds the jev capability, shown in the Console as Call Jev, on a surface allowed to use restricted tools. Nobody holds it by default, and the Console shows "Jev key missing" until JEV_OPENROUTER_API_KEY is set. The tool uses only that key, never OPENROUTER_API_KEY or the Hub's model. Each call writes a usage row. A failure comes back as readable text. A Hub tool named call_jev replaces this one. Workflows use the same adapter as hub.call_jev. See the workflow API.

Management tools

With HUBZOID_MANAGEMENT_TOOLS=true on a Hub whose access is managed in the Console, the agent gets three tools that propose people and access changes. They only propose. Nothing changes until the same person opens the link the tool returns, signs in to the Console on the web and confirms the exact change.

ToolArgumentsWhat it does
my_management_scopenoneLists the agents the caller manages and the capabilities they can grant in each, with Console labels and ids. Read only.
propose_access_changeperson (email), hub, optional grant and revoke lists of capability idsProposes granting or removing capabilities for one person in one agent. Removing use_hub removes all of that person's access there.
propose_new_accountemail, name, hub, optional grant listProposes a new chat account with access to one agent. Chat access is included. The password is set on the confirmation page, never in chat.
  • The acting person is always the signed-in caller. No tool takes an actor, and no tool accepts or returns a password.
  • They work on the web chat, the API, MCP, WhatsApp and Telegram. They refuse anonymous callers, scheduled work and every Slack surface, and are hidden from people who manage nothing.
  • A proposal is checked against the caller's own access, can be used once, and expires after HUBZOID_CHANGE_REQUEST_TTL seconds (900 by default). At most 20 can wait per person. Each proposal, confirmation, rejection and expiry is recorded in the access log with its surface.

Personal connections

connect_account

Start a connection journey for the caller's own account in an app, for example Gmail. Present on every runtime only when HUBZOID_CONNECT_JOURNEY=true.

Prop

Type

Returns either a note that the app is already connected or a personal link to /portal/connect/<id>, which works only for the person who asked while signed in and expires after HUBZOID_CONNECT_TTL seconds. The caller needs the app's connector_<app> capability, and the app must be an OAuth 2.1 MCP server registered in the web chat with OWUI_NATIVE_MCP=true. See tools and connectors.

Scheduled task tools

A markdown task run receives two more tools, and two others when its frontmatter opts in. They are never available in chat.

run_git

Run a read or sync Git command in a checkout inside the Hub.

Prop

Type

Allowed verbs are pull, fetch, log, diff, show, status, rev-parse, ls-files, branch, shortlog, describe and the read-only forms of remote. Flags that could write files or run commands, such as --output, --upload-pack, -c and --git-dir, are refused. Each call times out after 300 seconds, and output is cut at 60,000 characters. Hubzoid itself commits the task's commit: paths after the run.

write_hub_file

Create or overwrite a file inside the task's writable paths.

Prop

Type

Writable paths are the task's commit: and write: paths plus its scratch folder, .hubzoid/schedule/<task>/. The schedule/ folder and any .git/ folder are never writable, even under a broad commit: path. See markdown tasks.

publish_artifact

Publish a file the run wrote as a private artifact owned by the account the run acts as. Offered only when the task sets publish_artifacts: true.

Prop

Type

Returns the artifact's id and its viewer link, /portal/artifacts/<id>. Only the owner can open it until they share it. Files that hold secrets, such as .env files and databases, are refused. See the HTTP endpoints for the viewer.

send_email

Email the account the run acts as, the only possible recipient, with optional links to artifacts published in the same run. Offered only when the task sets send_email: true.

Prop

Type

At most five emails per run. Only an accepted result means the SMTP server took the message, and even then it does not confirm delivery to the inbox. It uses the HUBZOID_SMTP_* settings, or writes to a preview outbox with HUBZOID_EMAIL_DELIVERY=preview. See configuration.

Tools from other sources

  • Delegates. A sub-agent that runs on its own model becomes a tool named handover_<name> on the OpenAI Agents and Codex runtimes, and a Claude subagent on claude-local. See Hub files.
  • MCP servers. Each server in connectors/.mcp.json adds its tools. See tools and connectors.
  • The shared browser. HUBZOID_BROWSER=true adds the Playwright tools, such as browser_navigate, browser_click and browser_snapshot, as an MCP server named playwright.
  • Personal MCP connections. With OWUI_NATIVE_MCP=true, servers a person connected in the web chat are added for that person's turns on every runtime. On a Console-managed Hub each one also needs the person's connector_<app> capability. See tools and connectors.

Names on each backend

On the OpenAI Agents and Codex runtimes tools keep the names above, and tools from MCP servers keep their own names. On claude-local, Hubzoid's tools are served to Claude as an in-process MCP server, so the model sees mcp__hubzoid__read_file, external servers appear as mcp__<server>__<tool>, and personal servers as mcp__owui_<name>__<tool>. Eval checks such as expect_tools match the short name on every runtime. On claude-local, Claude Code's own tools (shell, file editing and the rest) are switched off, so the agent only has the tools on this page and the ones you add. The one exception is Claude's subagent tool, which is enabled when the Hub has delegates. On codex-local, Codex's own shell, file, browser and web search tools are switched off in the same way, and Hubzoid runs every tool the agent calls.

On every runtime the agent sees only the controlled tools (restricted/ tools, remember, call_jev) the caller may use, and the management tools only when the caller manages access.

Change the tool set

ToDo this
Remove http_get or web_searchSet HUBZOID_DISABLE_HTTP_GET=true or HUBZOID_DISABLE_WEB_SEARCH=true.
Limit http_get to known hostsSet HTTP_ALLOWLIST=example.com,api.example.com.
Replace a built-inAdd a tools_local/ tool with the same name.
Require a permission for a toolPut it in restricted/<permission>.py. See restrict tools.
Limit a delegate's toolsList them in the sub-agent's tools:.

Next steps

Read this page as Markdown

Choose which cookies Hubzoid can use. You can change this at any time from Cookie settings in the footer. Read the Cookie Policy for details.