Bot Roles & Permissions

Prerequisites: Before reading this guide, we recommend familiarizing yourself with the permission model in Core Concepts and the Resources & Credentials page.

Bot Roles are the core mechanism through which the platform governs Bot behavior. With roles, you can precisely control which Resources a Bot can access, which tools it can use, and what parameter ranges it can operate within.


Overview

Monstrum’s permission design is built around one principle: platform-enforced, not AI self-regulated. Permissions don’t “tell the Bot what not to do” — they architecturally guarantee that a Bot cannot perform unauthorized actions.

Permission control operates at two levels:

  1. Tool visibility (Pre-LLM): A Bot can only see tools it has been authorized to use. Unbound Resources and their tools are completely invisible to the Bot
  2. Parameter-level validation (Post-LLM): Even when a Bot calls a visible tool, the parameters must fall within the defined constraints

Core Workflow

A Bot’s permissions come from the Resources you configure. The overall setup flow is:

1. Create Resources (Resource + Credential)

2. Create a Bot Role, reference those Resources in the role, and set permissions

3. Assign the role to a Bot → The Bot automatically gains the resource access defined in the role

You can also skip roles and bind Resources directly to a Bot (direct binding), but roles are better suited for scenarios where you need to reuse the same permission configuration across multiple Bots.


Bot Roles

A Bot Role is a collection of Permission Entries. Each Permission Entry specifies a Resource and the operations the Bot is allowed to perform on that Resource.

Creating a Role

  1. Click Bot Roles in the left navigation bar
  2. Click Create Bot Role
  3. Fill in the basic information:
    • Role name: e.g., “Read-only Ops”, “Repository Admin”
    • Description: A brief explanation of the role’s purpose
    • Parent role (optional): Inherit permissions from another role

Adding Permission Entries

The core of a role is its Permission Entries. Each entry is associated with a Resource you have already created, defining what operations the Bot is allowed to perform on that Resource.

Click Add Permission Entry and configure:

FieldDescriptionRequired
Select ResourceChoose from Resources you have already created in Resource ManagementYes
Select CredentialSpecify which Credential to use. If left empty, all Credentials for that Resource are availableNo
Select OperationsCheck the operations or tools to allow. If left empty, all operations are allowedNo
Scope ConstraintsSet constraint values for each permission dimension (e.g., host allowlist, command allowlist)No

A single role can contain multiple Permission Entries, each referencing a different Resource. For example, an “Ops” role can include Permission Entries for both an SSH Resource and a Web Resource.

Operation Selection

The list of available operations depends on the Resource type:

  • Static tool types (SSH, Bot, Web3, Web): Display a fixed list of operations, grouped by function
  • Dynamic tool types (MCP, Monstrum Agent): Display the tools discovered for that Resource

Operations support glob patterns, for example:

  • * — Allow all operations
  • issue.* — Allow all issue-related operations
  • issue.read — Allow reading issues only

Scope Constraints

Scope Constraints are configured in the form of “only allow [dimension] [value list]”, restricting the parameter ranges when a Bot calls tools:

  • Only allow host allowlist 10.0.1.*, prod-web-*
  • Only allow command allowlist ls *, cat /var/log/*
  • Only allow repository allowlist org/repo-*
  • Only allow domain allowlist *.github.com

Values use glob pattern matching (fnmatch syntax), where * matches any characters.

Permission Dimensions by Resource Type

Resource TypeDimensionDescription
SSHhostsAllowed hosts to connect to (glob)
SSHcommandsAllowed commands to execute (glob)
WebdomainsAllowed domains to scrape (glob)
Web3operationsAllowed operation types (read/write)
Web3recipientsAllowed transfer recipients
Web3contractsAllowed contracts to call
Web3functionsAllowed contract functions (glob)
BotbotsAllowed target Bots to call
MCPtoolsAllowed tools to call (glob)
AgenttoolsAllowed tools to call (glob)
AgentpathsAllowed file paths (glob)
AgentcommandsAllowed commands (glob)

Role Inheritance

Roles support parent-child inheritance. A child role inherits all Permission Entries from its parent and can further narrow them (but never expand them).

For example:

  • Parent role “Ops”: Allows all SSH operations
  • Child role “Read-only Ops”: Inherits from “Ops”, but restricts the command allowlist to cat *, ls *, tail *

Assigning Roles to Bots

Once you have created a role, assign it to a Bot:

  1. Go to the Bot detail page → Resource Configuration tab
  2. In the Bot Roles section, click Assign Role
  3. Select the role to assign
  4. All Resource bindings defined in the role take effect automatically

After assignment, the Bot Roles section displays the assigned roles along with the number of Resource bindings each contains.

Role Binding vs Direct Binding

The Bot’s Resource configuration page is divided into two sections:

SectionDescription
Bot RolesResources bound indirectly through roles. Modifying a role updates all associated Bots at once
Direct Resource BindingResources bound directly to the Bot without going through a role

Both approaches can coexist. Roles are suited for standardized scenarios (multiple Bots sharing the same permissions), while direct binding is suited for one-off special configurations.

Resource Assignment Overview

In the Resource Assignment Overview tab on the Bot Roles page, you can view the role assignment status across your entire workspace:

  • Grouped by Bot, showing all Resource bindings for each Bot
  • Each binding is labeled with its source (which role it comes from)
  • Supports filtering by role or Resource

Delegate Scope

When Bot A calls Bot B through a Bot Resource, you can set constraints on that delegation to limit Bot B’s effective permissions while executing the delegated task.

Why Delegate Scope Is Needed

Consider this scenario:

  • Bot A is an orchestrator Bot, bound to Bot B (an ops Bot) and Bot C (a dev Bot)
  • Bot B has full SSH permissions
  • Bot A delegates an ops task to Bot B

Without Delegate Scope, Bot B would use its full permissions to execute the task. But Bot A may only want Bot B to execute specific commands during this delegation. Delegate Scope solves exactly this problem.

Configuring Delegate Scope

In Bot A’s Resource configuration where Bot B is bound, set the Delegate Scope:

  • Tool allowlist: Restrict which tools Bot B can use during the delegated task
  • Scope Constraints: Further restrict Bot B’s parameter ranges

Intersection Principle

Bot B’s effective permissions during a delegated task = Bot A’s Delegate Scope ∩ Bot B’s own permissions.

This means:

  • Delegate Scope can only narrow Bot B’s permissions, never expand them
  • If Bot A’s Delegate Scope allows hosts: ["*"] but Bot B’s own permissions only allow hosts: ["10.0.*"], the effective scope is 10.0.*
  • Conversely, if Bot B allows all hosts but Bot A’s Delegate Scope only allows 10.0.*, the effective scope is also 10.0.*

Workspace Member Permissions

In addition to Bot-level tool permissions, Monstrum also has workspace member management permissions. These are user-level permissions, entirely separate from the Bot-level permissions described above.

Member Roles

RolePermissions
OwnerFull control, including deleting the workspace
AdminManage Bots, Resources, and members, but cannot delete the workspace
MemberUse Bots, view Resources, but cannot manage configurations
ViewerRead-only access

Managing Members

  1. Go to the Member Management page in your workspace
  2. Invite new members: Enter an email address and select a role
  3. Change member roles: Update from the member list
  4. Remove members: Remove from the workspace

Common Patterns

Principle of Least Privilege

Configure each Bot with only the minimum permissions needed to complete its work:

  • SSH Bot: Only allow cat, ls, tail commands, restricted to specific hosts
  • Web3 Bot: Only allow balance.get (read-only), disallow transfer and contract.send
  • Orchestrator Bot: Use Delegate Scope to limit the permission scope of child Bots

Role Reuse

Create role templates for common scenarios and assign them to multiple Bots:

  • “Read-only Ops”: SSH Resource limited to read commands only
  • “Repository Read-only”: GitHub Resource limited to issue.read, pr.read
  • “Search Specialist”: Web Resource limited to web.search

Auditing Permission Changes

All permission check results (allowed/denied) are recorded in the audit log. You can view detailed permission validation records in the Audit Log tab of the Data Center.


FAQ

Bot’s Tool Call Was Denied

  1. Check whether the Bot has the corresponding Resource bound (via a role or direct binding)
  2. Check whether the operations in the Permission Entry include the tool in question
  3. Check whether the Scope Constraints cover the parameter values used in the call
  4. Review the denial reason in the Data Center’s Audit Log

Bot Cannot See Tools After Role Assignment

  • Confirm that the Resources referenced in the role’s Permission Entries still exist and their Credentials are valid
  • Confirm that the operation selection in the role is not empty

Delegate Scope Too Restrictive, Child Bot Cannot Work

Check the intersection of the Delegate Scope and the child Bot’s own permissions. Make sure the intersection includes the tools and parameter ranges the child Bot needs to complete its task.