Deploy and operate

Access administration

Decide who may use each agent and its controlled tools, add and offboard people in Settings, and repair access from the server when you need to.

Hubzoid decides who may use each agent and which controlled tools they may call, with one access model managed in Settings however a Hub was created or deployed. Day to day, administrators work in Settings. The hubzoid admin, grant, revoke and access commands cover what has to happen on the server: the first administrator, scripted grants and recovery.

Settings, the My Hub agent on its Access tab, People view: Lee Okafor and Priya Raman with Use this agent, Sam Rivera with Use this agent and Manage access inherited, each with Edit access, and Add user above the list.Settings, the My Hub agent on its Access tab, People view: Lee Okafor and Priya Raman with Use this agent, Sam Rivera with Use this agent and Manage access inherited, each with Edit access, and Add user above the list.
Each agent's Access tab lists who may use it and what each person may do.

When to use this

Use this page when you set up a new deployment, add people or offboard them, or need to inspect or repair access from a shell. Sign-in itself is on authentication. The model behind access (identities, surfaces and the tool check) is on identity and access, and the screens are on agents and access.

Give someone access

  1. Open Settings → Agents, the agent, then Access.
  2. For someone new, choose Add user. Enter their name and email, choose what they may do starting with Use this agent, review, then Create account.
  3. Copy the one-time sign-in link Hubzoid shows once, and share it yourself. Nothing is emailed.
  4. For someone who already has an account, choose Edit access on their row, or open them under People and use Add an agent.
  5. Check with their account that the agent appears and a tool they were not given stays unavailable.

Changes take effect at the next permission check, in every bridge of the deployment. A person with no agent yet sees a notice in the chat instead of an empty agent list.

One access model

  • A person may use an agent, or one of its controlled tools, only with a grant. Nothing else grants access. The groups in a Hub's identity/access.csv roster grant nothing, though a roster still says who a WhatsApp or Telegram sender is.
New Hubs, the owner's first grants and refused calls
  • A Hub deployed from git with no .hubzoid/ folder is managed like any other. Nobody can use it until someone is granted access.
  • The configured owner gets the owner's grants once, at their first verified sign-in as an administrator. With sign-in off, the local owner admin@localhost owns every Hub from the first start. An API key never provisions anyone.
  • A call to a bridge without a verified person is refused.
  • hubzoid doctor warns about an agent nobody may use, and notes one only its owner may use (access.who).

Grants

A grant is one row in the deployment's operational store: a subject, a Hub and a permission.

The parts of a grant
PartValues
SubjectA person's sign-in email. Older deployments can also hold legacy workflow identities (workflow:<name>, workflow:md:<task>) and a carried-over * for everyone signed in.
HubThe Hub's folder name, which is its access domain, or the organization domain for organization administrators (--org)
Permissionuse_hub (Use this agent), manage_access (Manage access), a built-in capability, a connector's connector_<id>, or the name of a restricted tool file, such as ledger for restricted/ledger.py

Built-in capabilities come with Hubzoid and are off until granted.

Every built-in capability
CapabilityWhat it allows
Save shared knowledge (curator)Use remember to create or replace documents under knowledge/_learned/, when changing agent files from the browser is turned on
Call Jev (jev)Use the call_jev chat tool, billed to the Hub's JEV_OPENROUTER_API_KEY
Share artifacts publicly (share_public_links, sensitive)Create links anyone who has them can open without signing in
Share reports with the company domain (share_domain_links, sensitive)Give a report a link anyone at the company's share domains can open after signing in
See workflows and runs (workflows_view)List this agent's workflows and recent runs from chat or an assistant
Run and control workflows (workflows_manage, sensitive)Start, pause, resume and cancel this agent's workflows from chat or an assistant
Schedule reports for themselves (schedule_reports)Save personal schedules of the reports they can run
Run report (wf_<workflow>)Run one workflow offered in chat, as themselves
Manage access from chat (access_tools, sensitive)Use the access tools in this agent's chat. Only organization administrators grant it.
Rules the store enforces on every write

The store enforces these rules on every write:

  • Granting any tool permission also grants use_hub in the same Hub, so a grantee can always open the agent.
  • Revoking use_hub removes every permission that subject holds in that Hub.
  • The organization domain accepts only manage_access.
  • New grants to * (everyone signed in) are refused everywhere.
  • The last organization administrator cannot be revoked, demoted or deleted.

use_hub and manage_access are reserved names, and connector_ is a reserved prefix. Every other permission comes from a file in the Hub's restricted/ folder. Optional labels, descriptions and a sensitivity flag come from identity/permissions.yaml, which cannot relabel a built-in:

my-hub/identity/permissions.yaml
ledger:
  label: Read ledger
  description: Read accounting entries for this agent.
  sensitive: true

Sensitivity is only what this file says. Hubzoid never infers it from a name.

Administrators

A person with manage_access in one Hub is an agent administrator for that Hub, and can also open and chat with it.

What an agent administrator can and cannot do

In each agent they manage, they grant or remove only capabilities they hold there themselves, never manage_access, and cannot change their own access or an organization administrator's. They can create a normal account with access in their agents, but cannot approve, reset passwords, change roles or delete accounts.

A person with manage_access in the organization domain is an organization administrator for every Hub. That does not by itself grant chat or any tool, so an administrator still needs Use this agent to chat with an agent. Set someone's Role to Administrator under Settings → People, the person, or run hubzoid admin set-role <email> admin <hub> on the server.

How the Administrator role and Needs attention work

Administrator sets organization administration and the account's administrator role together. A person who is an administrator on only one side shows Needs attention, and choosing their role fixes it.

Administrators must set up two-step sign-in by default. The Two-step column under People shows who has, and Reset two-step sign-in on a person's page clears a lost authenticator. See authentication.

The first administrator

The configured owner is the first administrator: HUBZOID_ADMIN_EMAIL (or owner in hubzoid.yaml), else the owner the deployment recorded. On their first verified sign-in they receive organization administration and Use this agent in each Hub, once. A later sign-in never restores access you revoke. Authentication covers creating the account.

For a deployment nobody can administer, grant organization administration from the server. For several Hubs run together, start hubzoid run first so its Hubs are registered.

Terminal
hubzoid access bootstrap --admin sam@example.com ./finance

--admin can be repeated. Bootstrap grants administrators on its first successful run only, so it cannot be used to add administrators later.

Accounts in Settings

Accounts live in Hubzoid's operational store, and every action is recorded under Activity → Audit log.

ActionWhoWhere
Add user: a new account with its first accessOrganization administrators, and agent administrators within their own accessAn agent's Access tab, or People
Change an existing user's accessThe sameEdit access on their row, or People, the user, Edit access or Add an agent
Approve a pending sign-up, reset a password or two-step sign-in, record a phone numberOrganization administratorsPeople, the user
Set Role to User or AdministratorOrganization administratorsPeople, the user
Delete user, or Reactivate a blocked userOrganization administratorsPeople, the user, the … menu
Google-only accounts, existing emails and phone numbers

Google sign-in only in Add user creates the account with no password when Google sign-in and OAUTH_MERGE_ACCOUNTS_BY_EMAIL=true are configured. An email that already has an account changes nothing, and Settings links to that user so you edit their access instead. A phone number recorded on a person is how their WhatsApp and Telegram messages are recognized.

Offboard someone

Use Delete user and type the person's email to confirm. It removes every grant and ends every credential: sessions, API keys and assistant connections.

What deletion keeps, and blocked accounts from older releases

Their share links stop working, and their chats stay attached to the removed account. Activity history, usage records and published artifacts are kept, and the email is marked as removed, so a later account with it inherits nothing. Only an organization administrator can create an account with that email again. Copies in your backups follow your own retention policy.

Settings does not offer Block. A person blocked by an older release shows as Blocked, and new access for them is refused. An organization administrator chooses Reactivate from the … menu, or deletes them. Reactivating does not restore the grants the block removed.

Everyone signed in

Nobody can create access for everyone signed in. An agent that had it before keeps an Everyone signed in row on its Access tab, which keeps working until an organization administrator selects Remove on it. Give the people who need the agent named access first. From a shell: hubzoid revoke '*' use_hub --hub <hub> <hub_dir>.

Workflow identities

Scheduled workflows and markdown tasks run as an ordinary account: run_as on the declaration or in the task's frontmatter, else HUBZOID_WORKFLOW_USER (the Hub's, then the deployment's), else the owner recorded at setup. Grant that account the permissions the work needs, like any person. For shared automation, create an ordinary account such as reports@example.com.

Account requirements, and moving from legacy workflow subjects

The account must have signed in once, must not be waiting for approval or blocked, and must hold Use this agent. Otherwise the run fails with the fix in its error, and Hubzoid never falls back to another account. hubzoid schedule list <hub> and Runs as on the agent's Workflows tab show who each one runs as.

Grants to the older workflow:<name> and workflow:md:<task> subjects are kept, but runs do not use them. When a run's account lacks a permission the old subject held, the run log names it. Settings lists these subjects as Legacy service identity and cannot add new ones. To move over, grant the account and then remove the old grant:

Terminal
hubzoid grant reports@example.com ledger ./finance
hubzoid revoke workflow:month_end_close ledger ./finance

Access and workflows from chat

Two families of agent tools are off for everyone until granted, under Hubzoid tools in the access editor:

  • Manage access from chat (access_tools). A manager can ask the agent who has access to an agent they manage, why a person has it, and propose an access change or a new account. The agent replies with a link to Settings, where the same manager reviews and confirms the exact change. Nothing applies before that.
  • See workflows and runs and Run and control workflows (workflows_view, workflows_manage). They act only on the agent they run in.
Proposal expiry, runs started from chat, and turning the tools off

A proposal works once and expires after HUBZOID_CHANGE_REQUEST_TTL seconds (default 900). The access tools refuse anonymous callers, scheduled workflows and every Slack surface.

A run started from chat acts as the workflow's own account and is recorded with the person who started it.

HUBZOID_ACCESS_TOOLS=false or HUBZOID_WORKFLOW_TOOLS=false in a Hub's .env removes a family from that agent. The older HUBZOID_MANAGEMENT_TOOLS=true still gives every manager the access tools without a grant, and hubzoid doctor warns about it. Grant access_tools to the managers who use them, then remove the setting.

Command reference

Every command takes the Hub directory as its last argument (default: the current directory) and finds the operational store through the Hub, including the shared store of several Hubs run together.

CommandWhat it does
hubzoid grant SUBJECT PERMISSION [HUB_DIR]Grant one permission. --hub NAME targets another Hub's domain, --org the organization domain.
hubzoid revoke SUBJECT PERMISSION [HUB_DIR]Revoke one permission. Same --hub and --org options.
hubzoid access check SUBJECT [HUB_DIR]Every permission the subject effectively holds in the Hub. --hub NAME, --json.
hubzoid access list [HUB_DIR]Every grant as subject, permission and Hub. --hub NAME limits it to one Hub, --json.
hubzoid access bootstrap --admin EMAIL [HUB_DIR]Organization administrators for a deployment nobody can administer, on the first successful run only
hubzoid admin ...Accounts: create, reset passwords, list and set roles. See the admin command.
hubzoid audit [HUB_DIR]Recent tool decisions. See observability.
Terminal
hubzoid grant priya@example.com ledger ./finance       # also grants use_hub
hubzoid access check priya@example.com ./finance
hubzoid revoke priya@example.com use_hub ./finance      # removes all of Priya's finance permissions

hubzoid grant also accepts an email that has no account yet. The access applies when someone first signs in with that email, for example through single sign-on.

Upgrading from older releases

Older releases had a second, group-based access mode. It is gone, and so are hubzoid access migrate, rollback and diff, access bootstrap --authoritative and the .hubzoid/fresh-install marker.

What the upgrade changed, and what to check after

An upgrade gave each group member the grants and shares their groups held. MCP_ACCESS_GROUP is no longer read, and hubzoid doctor warns while it is present (mcp.access_group). After upgrading, run hubzoid doctor on each Hub and grant Use this agent wherever access.who reports that nobody may use an agent.

If something goes wrong

What you seeWhat to do
A grant has no effectThe command used the wrong Hub directory, the grant's email differs from the sign-in email, or the person is blocked.
Nobody may use an agenthubzoid doctor reports access.who. Grant Use this agent in Settings, or sign in once as the configured owner.
Settings shows only the personal sectionsThe account lacks manage_access. An organization administrator sets their Role to Administrator, or grants Manage access in one agent.
Someone keeps access after a revokeThe agent still has a carried-over Everyone signed in row. Remove it, or offboard with Delete user.
A workflow run fails with no account to run asSet run_as or HUBZOID_WORKFLOW_USER, and check that the account has signed in once and holds Use this agent.
More problems and fixes
What you seeWhat to do
hubzoid grant '*' ... is refusedNew access for everyone signed in cannot be created. Grant named people.
A person shows Needs attentionThey are an administrator on only one side. Choose their Role under People.

Next steps

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.