Hubzoid
Getting started

Project structure

Every file and folder in a Hubzoid Hub, what each one holds, how Hubzoid discovers it, and which runtime folders to keep out of Git.

A Hub is one folder. Only AGENTS.md is required. Every other folder is optional and is picked up when it exists, so a Hub can start as a single file and grow as the work does. Keep the folder in Git, except the secrets and runtime folders listed at the end of this page.

The complete layout

AGENTS.md
.env
.gitignore

What each part does

PathWhat it holdsHow Hubzoid uses it
AGENTS.mdThe main agent. YAML frontmatter plus a Markdown body.The body becomes the system prompt. Required at the Hub root, with exactly this file name.
.envModel, keys and settings for this Hub.Loaded at start and wins over the shell environment. Never commit it.
agents/Sub-agents, as agents/<name>.md or agents/<name>/AGENTS.md.Loaded inline as skills, or run on their own model as delegates. See agents and models.
skills/Playbooks, as skills/<name>.md or skills/<name>/SKILL.md.Listed by name and description in the system prompt, loaded on demand with load_skill(name).
knowledge/Reference documents, any *.md in the folder or its subfolders.Listed in the system prompt, read on demand with read_knowledge(name). Read live from disk.
knowledge/_learned/Documents written by the remember tool.Ordinary knowledge named learned/<slug>. See memory and history.
tools_local/Python files with @function_tool functions.Every module-level tool is added to the agent. A local tool with the same name as a built-in replaces it.
restricted/Python tools that need a permission, plus restricted/.env for their secrets.The file name is the permission. Calls are checked and recorded. The agent's file tools cannot read this folder. See restrict tools.
connectors/.mcp.jsonMCP servers the agent can use, in the mcpServers format. connectors/mcp.json also works.${VAR} references are filled from the environment at start. See tools and connectors.
schedule/Markdown tasks, one *.md per job, with a cron or webhook trigger in frontmatter.Run on the workflow engine by the Hub's own agent, or as a command when the task sets run:. See markdown tasks.
workflows/Code workflows, as workflows/<name>/*.py with a @workflow function, and an optional workflows/settings.yaml.Imported and scheduled on the workflow engine. hub.setting(...) reads settings.yaml. See code workflows.
identity/access.csv or access.py (a roster of people by phone and email), and permissions.yaml (labels for permissions).The roster admits WhatsApp and Telegram senders and adds groups. The labels appear in the Console. See identity and access.
raw_data/Unstructured material: exports, document dumps, code checkouts.Searched with grep_data, read with read_file. No indexing step.
branding/logo.*, favicon.*, splash.* and an optional custom.css.Copied into the chat app at every start.
evals/Behavioral checks, one *.md per case.Run with hubzoid eval run. See evals.

A scaffolded Hub also has .gitignore. Hub files is the field-by-field reference for every file format on this page.

AGENTS.md

The main agent is a Markdown file. Frontmatter is optional: without it, the name is the Hub folder name and the description is the first line of the body that is not a heading.

AGENTS.md
---
name: accounts-desk
description: Checks supplier bills against purchase orders and drafts entries for review.
suggestions:
  - Which pending bills need a decision
  - Is this bill a duplicate
---

You are the accounts desk agent for the finance team.

Check each bill against its purchase order before you draft an entry.
Quote the tolerance from knowledge/matching-rules.md when a line does not match.

Prop

Type

Sub-agent files in agents/ accept name, description and model, plus tools, a list of tool names the sub-agent may call when it runs as a delegate.

Skills and knowledge files

Skills and knowledge are both Markdown with a small frontmatter block. The difference is how the agent uses them: a skill is a procedure the agent follows, and a knowledge document is reference material it quotes or reasons from.

skills/weekly-report/SKILL.md
---
name: weekly-report
description: Builds the weekly operations report. Use when someone asks for this week's numbers.
---

1. Read knowledge/report-format.md.
2. Collect the figures with the sales_snapshot tool.
3. Save the report with write_artifact and share the link.
FileFrontmatter fieldsWhen a field is missing
Skillname, descriptionThe name comes from the folder (for SKILL.md) or the file name, and a generic description is used.
Knowledgename, description, optional keywords listThe name is the file name without .md, and a generic description is used.

In knowledge/, files whose names start with a dot and files named _index.md are skipped. One unreadable knowledge file is skipped with a warning, and the rest still load.

Folder names

Folder names are matched without regard to case, and several spellings are accepted. If two spellings exist in the same Hub, the first in alphabetical order is used and a warning is logged.

FolderAccepted names
agentsagents, agent
skillsskills, skill
knowledgeknowledge
tools_localtools_local, tool_local, tools, local_tools
connectorsconnectors, connector
scheduleschedule, schedules, scheduled
workflowsworkflows, workflow
evalsevals, eval, evaluations
raw_dataraw_data, raw-data, rawdata
restrictedrestricted
identityidentity
outputoutput, outputs

In tools_local/, restricted/, workflows/ and evals/, files whose names start with an underscore are skipped, so you can keep helpers and drafts beside real files.

Runtime folders

Hubzoid writes these while the Hub runs. They stay inside the Hub folder, so hubzoid backup finds them and deleting the folder removes them. The scaffolded .gitignore excludes .hubzoid/, .openwebui-data/, output/ and .env. Add .inbound/ to it if the Hub receives webhooks.

PathWritten byContents
.hubzoid/Hubzoidhub.db (Hubzoid's tables on a single Hub), dbos.db (workflow runs and checkpoints), artifact_secret (signs download links), chats/<chat_id>/ (uploads and files the agent saved), schedule/<task>/ (task state and run logs) and eval results.
.openwebui-data/The chat appAccounts, sessions and chats in webui.db, plus the chat app log.
output/Agents and tasksFiles saved outside a chat and reports written by scheduled work.
.inbound/Inbound surfacesWebhook deliveries waiting for a task, one JSON file each, under .inbound/webhooks/<name>/.

Under hubzoid gateway, accounts and the shared access database live in the gateway's data folder instead. See architecture.

Several Hubs in one repository

Run hubzoid init more than once in the same folder to build an agents repository one Hub at a time:

mkdir my-agents && cd my-agents
hubzoid init finance-agent      # writes requirements.txt, .gitignore, README.md and finance-agent/
hubzoid init operations-agent   # writes operations-agent/ only

Each Hub keeps its own .env, ports and chat database. To run several Hubs behind one sign-in, use the gateway.

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.