{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://beeuni.ai/schema/beeuni.schema.json",
  "title": "Beeuni manifest",
  "description": "beeuni.toml / beeuni.yaml — combined schema covering every published `beeuni_version`. Dispatches to the v1, v2 or v3 shape by `beeuni_version`. Prefer this URL when the version is not known ahead of time; pin `https://beeuni.ai/schema/beeuni.v3.schema.json` (or v1/v2) when it is.",
  "type": "object",
  "required": [
    "beeuni_version"
  ],
  "properties": {
    "beeuni_version": {
      "type": "integer",
      "enum": [
        1,
        2,
        3
      ]
    }
  },
  "allOf": [
    {
      "if": {
        "properties": {
          "beeuni_version": {
            "const": 1
          }
        }
      },
      "then": {
        "type": "object",
        "required": [
          "beeuni_version"
        ],
        "properties": {
          "beeuni_version": {
            "const": 1
          },
          "imports": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^(?![/\\s])(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*//)[^\\\\*?\\[\\]{}]*[^\\\\*?\\[\\]{}\\s/]/?$"
            }
          },
          "project": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "description": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "env": {
            "type": "object",
            "properties": {
              "required": {
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
                }
              },
              "optional": {
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
                }
              }
            },
            "additionalProperties": true
          },
          "opencode": {
            "type": "object",
            "properties": {
              "config_dir": {
                "type": "string",
                "minLength": 1,
                "not": {
                  "pattern": "^/|(^|/)\\.\\.($|/)"
                },
                "description": "Directory with the OpenCode-only files (opencode.jsonc, plugins/, tools/). Defaults to harnesses/opencode, then the legacy .beeuni/opencode."
              }
            },
            "additionalProperties": true
          },
          "sandbox": {
            "type": "object",
            "properties": {
              "image": false,
              "dockerfile": false,
              "slug": false,
              "cpu": false,
              "memory": false,
              "disk": false,
              "entrypoint": false,
              "context": false,
              "context_dir": false,
              "gpu": false,
              "templates": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "slug"
                  ],
                  "properties": {
                    "slug": {
                      "allOf": [
                        {
                          "type": "string",
                          "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
                        },
                        {
                          "not": {
                            "const": "default"
                          }
                        }
                      ]
                    },
                    "name": {
                      "type": "string"
                    },
                    "entrypoint": {
                      "type": "string"
                    },
                    "image": {
                      "type": "string",
                      "minLength": 1
                    },
                    "dockerfile": {
                      "type": "string",
                      "minLength": 1,
                      "not": {
                        "pattern": "^/|(^|/)\\.\\.($|/)"
                      }
                    },
                    "cpu": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "memory": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "disk": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "container_runtime": {
                      "type": "boolean"
                    }
                  },
                  "oneOf": [
                    {
                      "required": [
                        "image"
                      ],
                      "not": {
                        "required": [
                          "dockerfile"
                        ]
                      }
                    },
                    {
                      "required": [
                        "dockerfile"
                      ],
                      "not": {
                        "required": [
                          "image"
                        ]
                      }
                    }
                  ]
                }
              },
              "default": {
                "type": "string",
                "minLength": 1
              }
            },
            "additionalProperties": true
          },
          "sandboxes": false,
          "triggers": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "slug",
                "type"
              ],
              "properties": {
                "slug": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "cron",
                    "webhook",
                    "monitor",
                    "event"
                  ]
                },
                "name": {
                  "type": "string"
                },
                "agent": {
                  "type": "string",
                  "minLength": 1
                },
                "agent_name": {
                  "type": "string",
                  "minLength": 1
                },
                "enabled": {
                  "oneOf": [
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "string",
                      "pattern": "^(?:[tT][rR][uU][eE]|[fF][aA][lL][sS][eE]|1|0|[yY][eE][sS]|[nN][oO]|[oO][nN]|[oO][fF][fF])$"
                    }
                  ]
                },
                "session_mode": {
                  "type": "string",
                  "enum": [
                    "fresh",
                    "reuse",
                    "pinned",
                    "keyed"
                  ]
                },
                "session_key": {
                  "type": "string"
                },
                "sessionKey": {
                  "type": "string"
                },
                "filter": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "sessionMode": {
                  "type": "string",
                  "enum": [
                    "fresh",
                    "reuse",
                    "pinned",
                    "keyed"
                  ]
                },
                "session_id": {
                  "type": "string",
                  "minLength": 1
                },
                "sessionId": {
                  "type": "string",
                  "minLength": 1
                },
                "prompt": {
                  "type": "string",
                  "minLength": 1
                },
                "prompt_template": {
                  "type": "string",
                  "minLength": 1
                },
                "cron": {
                  "type": "string",
                  "minLength": 1
                },
                "schedule": {
                  "type": "string",
                  "minLength": 1
                },
                "run_at": {
                  "type": "string",
                  "minLength": 1
                },
                "runAt": {
                  "type": "string",
                  "minLength": 1
                },
                "timezone": {
                  "type": "string"
                },
                "secret_env": {
                  "type": "string",
                  "pattern": "^[A-Z_][A-Z0-9_]*$"
                },
                "secretEnv": {
                  "type": "string",
                  "pattern": "^[A-Z_][A-Z0-9_]*$"
                },
                "run": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 1024
                },
                "mode": {
                  "type": "string",
                  "enum": [
                    "poll",
                    "stream"
                  ]
                },
                "interval": {
                  "type": "string",
                  "pattern": "^([1-9][0-9]*)(s|m|h|d)$"
                },
                "expect_event_within": {
                  "type": "string",
                  "pattern": "^([1-9][0-9]*)(s|m|h|d)$"
                },
                "connector": {
                  "type": "string",
                  "minLength": 1
                },
                "account": {
                  "type": "string",
                  "minLength": 1
                },
                "source": {
                  "type": "string",
                  "minLength": 1
                },
                "event": {
                  "type": "string",
                  "minLength": 1
                },
                "config": {
                  "type": "object"
                }
              },
              "additionalProperties": true,
              "allOf": [
                {
                  "anyOf": [
                    {
                      "required": [
                        "prompt"
                      ]
                    },
                    {
                      "required": [
                        "prompt_template"
                      ]
                    }
                  ]
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "cron"
                      }
                    }
                  },
                  "then": {
                    "anyOf": [
                      {
                        "required": [
                          "cron"
                        ]
                      },
                      {
                        "required": [
                          "schedule"
                        ]
                      },
                      {
                        "required": [
                          "run_at"
                        ]
                      },
                      {
                        "required": [
                          "runAt"
                        ]
                      }
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "webhook"
                      }
                    }
                  },
                  "then": {
                    "anyOf": [
                      {
                        "required": [
                          "secret_env"
                        ]
                      },
                      {
                        "required": [
                          "secretEnv"
                        ]
                      }
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "monitor"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "run",
                      "mode"
                    ],
                    "properties": {
                      "cron": false,
                      "schedule": false,
                      "run_at": false,
                      "runAt": false,
                      "timezone": false,
                      "secret_env": false,
                      "secretEnv": false
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "event"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "connector",
                      "event"
                    ],
                    "properties": {
                      "cron": false,
                      "schedule": false,
                      "run_at": false,
                      "runAt": false,
                      "timezone": false,
                      "secret_env": false,
                      "secretEnv": false,
                      "run": false,
                      "mode": false,
                      "interval": false,
                      "expect_event_within": false
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "enum": [
                          "cron",
                          "webhook",
                          "monitor"
                        ]
                      }
                    },
                    "required": [
                      "type"
                    ]
                  },
                  "then": {
                    "properties": {
                      "connector": false,
                      "account": false,
                      "source": false,
                      "event": false,
                      "config": false
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "monitor"
                      },
                      "mode": {
                        "const": "poll"
                      }
                    },
                    "required": [
                      "mode"
                    ]
                  },
                  "then": {
                    "required": [
                      "interval"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "monitor"
                      },
                      "mode": {
                        "const": "stream"
                      }
                    },
                    "required": [
                      "mode"
                    ]
                  },
                  "then": {
                    "properties": {
                      "interval": false
                    }
                  }
                }
              ]
            }
          },
          "connectors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "slug",
                "provider"
              ],
              "properties": {
                "slug": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
                },
                "name": {
                  "type": "string",
                  "minLength": 1
                },
                "provider": {
                  "type": "string",
                  "enum": [
                    "pipedream",
                    "composio",
                    "mcp",
                    "openapi",
                    "postman",
                    "graphql",
                    "http",
                    "channel"
                  ]
                },
                "app": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "endpoint": {
                  "type": "string"
                },
                "base_url": {
                  "type": "string"
                },
                "baseUrl": {
                  "type": "string"
                },
                "transport": {
                  "type": "string",
                  "enum": [
                    "http",
                    "sse"
                  ]
                },
                "spec": {
                  "type": "string"
                },
                "platform": {
                  "type": "string",
                  "enum": [
                    "slack",
                    "teams",
                    "email"
                  ]
                },
                "credential": {},
                "authorization_strategy": {
                  "type": "string",
                  "enum": [
                    "project",
                    "user"
                  ],
                  "default": "project"
                },
                "agent_scope": {},
                "auth": {
                  "type": "object",
                  "required": [
                    "type"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "bearer",
                        "basic",
                        "custom",
                        "api_key",
                        "oauth1",
                        "hmac",
                        "aws_sigv4",
                        "mtls",
                        "none"
                      ]
                    },
                    "secret": false
                  },
                  "additionalProperties": true
                },
                "headers": {
                  "type": "object",
                  "maxProperties": 32,
                  "propertyNames": {
                    "pattern": "^[A-Za-z0-9!#$%&'*+.^_`|~-]+$",
                    "maxLength": 128
                  },
                  "additionalProperties": {
                    "type": "string",
                    "maxLength": 2048,
                    "pattern": "^[^\\r\\n]*$"
                  }
                },
                "policies": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "match",
                      "action"
                    ],
                    "properties": {
                      "match": {
                        "type": "string",
                        "minLength": 1
                      },
                      "action": {
                        "type": "string",
                        "enum": [
                          "always_run",
                          "require_approval",
                          "block"
                        ]
                      }
                    }
                  }
                }
              },
              "additionalProperties": true,
              "allOf": [
                {
                  "if": {
                    "properties": {
                      "slug": {
                        "const": "beeuni_slack"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "slug": {
                        "const": "beeuni_teams"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "slug": {
                        "const": "beeuni_email"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "slug": {
                        "const": "computer"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "provider": {
                        "const": "computer"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "pipedream"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "app"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "mcp"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "url"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "graphql"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "endpoint"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "http"
                      }
                    }
                  },
                  "then": {
                    "anyOf": [
                      {
                        "required": [
                          "base_url"
                        ]
                      },
                      {
                        "required": [
                          "baseUrl"
                        ]
                      }
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "platform"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    },
                    "required": [
                      "auth"
                    ]
                  },
                  "then": {
                    "properties": {
                      "auth": {
                        "properties": {
                          "type": {
                            "const": "none"
                          }
                        }
                      }
                    }
                  }
                }
              ]
            }
          },
          "apps": false,
          "agents": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
                },
                "connectors": {
                  "description": "An allowlist of names, or the \"all\" / \"none\" sentinel. \"*\" (alone or in the list) means \"all\".",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                },
                "beeuni_permissions": {
                  "description": "Beeuni permissions: the project.* IAM actions this agent may exercise, or \"all\" / \"none\".",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "project.read",
                          "project.write",
                          "project.delete",
                          "project.session.read",
                          "project.session.start",
                          "project.session.stop",
                          "project.session.bindings.write",
                          "project.members.read",
                          "project.members.manage",
                          "project.trigger.read",
                          "project.trigger.create",
                          "project.trigger.update",
                          "project.trigger.delete",
                          "project.trigger.fire",
                          "project.gateway.logs.read",
                          "project.gateway.spend.read",
                          "project.usage.read",
                          "project.gateway.budget.set",
                          "project.gateway.keys.manage",
                          "project.agent.read",
                          "project.agent.write",
                          "project.skill.read",
                          "project.skill.write",
                          "project.command.read",
                          "project.command.write",
                          "project.file.read",
                          "project.file.write",
                          "project.settings.write",
                          "project.sandbox.write",
                          "project.model.read",
                          "project.model.write",
                          "project.gitops.read",
                          "project.gitops.push",
                          "project.gitops.merge",
                          "project.gitops.ref.any",
                          "project.gitops.ref.delete",
                          "project.secret.read",
                          "project.secret.write",
                          "project.connector.read",
                          "project.connector.connections.manage",
                          "project.connector.write",
                          "project.app.read",
                          "project.app.write",
                          "project.app.deploy",
                          "project.app.admin",
                          "project.review.read",
                          "project.review.submit",
                          "project.review.act",
                          "project.credentials.issue",
                          "project.cr.open",
                          "project.cr.merge",
                          "project.customize.read",
                          "project.customize.write",
                          "project.session.exec",
                          "project.gateway.routing.edit",
                          "project.schedule.read",
                          "project.schedule.write",
                          "project.webhook.read",
                          "project.webhook.write",
                          "channel.read",
                          "channel.connect",
                          "channel.send",
                          "channel.disconnect",
                          "*"
                        ]
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                },
                "beeuni_cli": {
                  "description": "Deprecated alias for beeuni_permissions.",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "project.read",
                          "project.write",
                          "project.delete",
                          "project.session.read",
                          "project.session.start",
                          "project.session.stop",
                          "project.session.bindings.write",
                          "project.members.read",
                          "project.members.manage",
                          "project.trigger.read",
                          "project.trigger.create",
                          "project.trigger.update",
                          "project.trigger.delete",
                          "project.trigger.fire",
                          "project.gateway.logs.read",
                          "project.gateway.spend.read",
                          "project.usage.read",
                          "project.gateway.budget.set",
                          "project.gateway.keys.manage",
                          "project.agent.read",
                          "project.agent.write",
                          "project.skill.read",
                          "project.skill.write",
                          "project.command.read",
                          "project.command.write",
                          "project.file.read",
                          "project.file.write",
                          "project.settings.write",
                          "project.sandbox.write",
                          "project.model.read",
                          "project.model.write",
                          "project.gitops.read",
                          "project.gitops.push",
                          "project.gitops.merge",
                          "project.gitops.ref.any",
                          "project.gitops.ref.delete",
                          "project.secret.read",
                          "project.secret.write",
                          "project.connector.read",
                          "project.connector.connections.manage",
                          "project.connector.write",
                          "project.app.read",
                          "project.app.write",
                          "project.app.deploy",
                          "project.app.admin",
                          "project.review.read",
                          "project.review.submit",
                          "project.review.act",
                          "project.credentials.issue",
                          "project.cr.open",
                          "project.cr.merge",
                          "project.customize.read",
                          "project.customize.write",
                          "project.session.exec",
                          "project.gateway.routing.edit",
                          "project.schedule.read",
                          "project.schedule.write",
                          "project.webhook.read",
                          "project.webhook.write",
                          "channel.read",
                          "channel.connect",
                          "channel.send",
                          "channel.disconnect",
                          "*"
                        ]
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ],
                  "deprecated": true
                },
                "env": {
                  "description": "An allowlist of names, or the \"all\" / \"none\" sentinel. \"*\" (alone or in the list) means \"all\".",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                },
                "apps": {
                  "description": "An allowlist of names, or the \"all\" / \"none\" sentinel. \"*\" (alone or in the list) means \"all\".",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                }
              },
              "additionalProperties": true
            }
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "platform"
              ],
              "properties": {
                "platform": {
                  "type": "string",
                  "minLength": 1
                },
                "enabled": {
                  "oneOf": [
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "string",
                      "pattern": "^(?:[tT][rR][uU][eE]|[fF][aA][lL][sS][eE]|1|0|[yY][eE][sS]|[nN][oO]|[oO][nN]|[oO][fF][fF])$"
                    }
                  ]
                },
                "events": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": true
      }
    },
    {
      "if": {
        "properties": {
          "beeuni_version": {
            "const": 2
          }
        }
      },
      "then": {
        "type": "object",
        "required": [
          "beeuni_version",
          "default_agent",
          "agents"
        ],
        "properties": {
          "beeuni_version": {
            "const": 2
          },
          "default_agent": {
            "type": "string",
            "minLength": 1
          },
          "runtime": {
            "type": "string",
            "enum": [
              "opencode",
              "pi"
            ]
          },
          "harnesses": {
            "type": "object",
            "properties": {
              "opencode": {
                "type": "object",
                "properties": {
                  "plugins": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "pattern": "^[a-zA-Z0-9_-]+\\.[cm]?[jt]s$"
                    }
                  }
                },
                "additionalProperties": false
              },
              "pi": {
                "type": "object",
                "properties": {
                  "packages": {
                    "type": "array",
                    "maxItems": 20,
                    "items": {
                      "oneOf": [
                        {
                          "type": "string",
                          "anyOf": [
                            {
                              "pattern": "^npm:(@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]*@\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z.-]+)?$"
                            },
                            {
                              "pattern": "^\\.\\/(?!.*(^|\\/)\\.\\.(\\/|$))[^\\s:]+$"
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "required": [
                            "source"
                          ],
                          "properties": {
                            "source": {
                              "type": "string",
                              "anyOf": [
                                {
                                  "pattern": "^npm:(@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]*@\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z.-]+)?$"
                                },
                                {
                                  "pattern": "^\\.\\/(?!.*(^|\\/)\\.\\.(\\/|$))[^\\s:]+$"
                                }
                              ]
                            },
                            "extensions": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "skills": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "prompts": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "themes": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            }
                          },
                          "additionalProperties": false
                        }
                      ]
                    }
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          "tools": {
            "type": [
              "object",
              "null"
            ],
            "description": "Tools: tool name → repo-relative path of the module that implements it, or `beeuni:<name>` for a Beeuni tool. Each module default-exports { description, parameters (JSON Schema), execute(args, context) }. Every harness loads them. With a `tools` key, sessions get only the Beeuni tools it lists; without one, they get all five.",
            "propertyNames": {
              "pattern": "^[a-z][a-z0-9_]{0,63}$"
            },
            "properties": {
              "web_search": {
                "anyOf": [
                  {
                    "const": "beeuni:web_search",
                    "description": "The Beeuni web_search tool, maintained by Beeuni."
                  },
                  {
                    "type": "string",
                    "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.[cm]?[jt]s$"
                  }
                ]
              },
              "image_search": {
                "anyOf": [
                  {
                    "const": "beeuni:image_search",
                    "description": "The Beeuni image_search tool, maintained by Beeuni."
                  },
                  {
                    "type": "string",
                    "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.[cm]?[jt]s$"
                  }
                ]
              },
              "scrape_webpage": {
                "anyOf": [
                  {
                    "const": "beeuni:scrape_webpage",
                    "description": "The Beeuni scrape_webpage tool, maintained by Beeuni."
                  },
                  {
                    "type": "string",
                    "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.[cm]?[jt]s$"
                  }
                ]
              },
              "memory": {
                "anyOf": [
                  {
                    "const": "beeuni:memory",
                    "description": "The Beeuni memory tool, maintained by Beeuni."
                  },
                  {
                    "type": "string",
                    "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.[cm]?[jt]s$"
                  }
                ]
              },
              "show": {
                "anyOf": [
                  {
                    "const": "beeuni:show",
                    "description": "The Beeuni show tool, maintained by Beeuni."
                  },
                  {
                    "type": "string",
                    "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.[cm]?[jt]s$"
                  }
                ]
              }
            },
            "additionalProperties": {
              "type": "string",
              "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.[cm]?[jt]s$"
            }
          },
          "agents": {
            "type": "object",
            "minProperties": 1,
            "propertyNames": {
              "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
            },
            "additionalProperties": {
              "type": "object",
              "properties": {
                "file": {
                  "type": "string",
                  "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.md$",
                  "description": "Repo-relative path of this agent's .md (frontmatter + prompt). Defaults to agents/<name>.md."
                },
                "enabled": {
                  "type": "boolean"
                },
                "tools": {
                  "description": "Which tools this agent may use: harness tools (bash, read, edit, …), Beeuni tools (web_search, memory, show, …) and project tools (top-level `tools`). `all` (default) or `none`; a list allows only those; `{ exclude: [...] }` allows every tool but those. A map of tool name → boolean is the earlier form.",
                  "oneOf": [
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "none"
                      ]
                    },
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    {
                      "type": "object",
                      "required": [
                        "exclude"
                      ],
                      "properties": {
                        "exclude": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1
                          }
                        }
                      },
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "not": {
                        "required": [
                          "exclude"
                        ]
                      },
                      "additionalProperties": {
                        "type": "boolean"
                      }
                    }
                  ]
                },
                "sandbox": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
                },
                "network_egress": {
                  "type": "object",
                  "required": [
                    "version",
                    "default",
                    "rules"
                  ],
                  "properties": {
                    "version": {
                      "const": 1
                    },
                    "default": {
                      "const": "deny"
                    },
                    "rules": {
                      "type": "array",
                      "maxItems": 0
                    }
                  },
                  "additionalProperties": false,
                  "description": "Non-enforcing declaration. Outbound network access remains unrestricted until provider gateway isolation ships."
                },
                "connectors": {
                  "description": "An allowlist of names, or the \"all\" / \"none\" sentinel. \"*\" (alone or in the list) means \"all\".",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                },
                "connectors_required": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  },
                  "description": "Connector profile slugs that must resolve before the session starts."
                },
                "connectors_personal": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  },
                  "deprecated": true,
                  "description": "Deprecated input alias for connectors_required."
                },
                "secrets": {
                  "description": "An allowlist of names, or the \"all\" / \"none\" sentinel. \"*\" (alone or in the list) means \"all\".",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                },
                "skills": {
                  "description": "An allowlist of names, or the \"all\" / \"none\" sentinel. \"*\" (alone or in the list) means \"all\".",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                },
                "apps": {
                  "description": "Beeuni Apps (by App slug) this agent may open when the App is restricted or private. Deny by default.",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "pattern": "^(?:[a-z0-9][a-z0-9_-]{0,127}|\\*)$"
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                },
                "beeuni_permissions": {
                  "description": "Beeuni permissions: the project.* IAM actions this agent may exercise, or \"all\" / \"none\".",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "project.read",
                          "project.write",
                          "project.delete",
                          "project.session.read",
                          "project.session.start",
                          "project.session.stop",
                          "project.session.bindings.write",
                          "project.members.read",
                          "project.members.manage",
                          "project.trigger.read",
                          "project.trigger.create",
                          "project.trigger.update",
                          "project.trigger.delete",
                          "project.trigger.fire",
                          "project.gateway.logs.read",
                          "project.gateway.spend.read",
                          "project.usage.read",
                          "project.gateway.budget.set",
                          "project.gateway.keys.manage",
                          "project.agent.read",
                          "project.agent.write",
                          "project.skill.read",
                          "project.skill.write",
                          "project.command.read",
                          "project.command.write",
                          "project.file.read",
                          "project.file.write",
                          "project.settings.write",
                          "project.sandbox.write",
                          "project.model.read",
                          "project.model.write",
                          "project.gitops.read",
                          "project.gitops.push",
                          "project.gitops.merge",
                          "project.gitops.ref.any",
                          "project.gitops.ref.delete",
                          "project.secret.read",
                          "project.secret.write",
                          "project.connector.read",
                          "project.connector.connections.manage",
                          "project.connector.write",
                          "project.app.read",
                          "project.app.write",
                          "project.app.deploy",
                          "project.app.admin",
                          "project.review.read",
                          "project.review.submit",
                          "project.review.act",
                          "project.credentials.issue",
                          "project.cr.open",
                          "project.cr.merge",
                          "project.customize.read",
                          "project.customize.write",
                          "*"
                        ]
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                },
                "beeuni_cli": {
                  "description": "Deprecated alias for beeuni_permissions.",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "project.read",
                          "project.write",
                          "project.delete",
                          "project.session.read",
                          "project.session.start",
                          "project.session.stop",
                          "project.session.bindings.write",
                          "project.members.read",
                          "project.members.manage",
                          "project.trigger.read",
                          "project.trigger.create",
                          "project.trigger.update",
                          "project.trigger.delete",
                          "project.trigger.fire",
                          "project.gateway.logs.read",
                          "project.gateway.spend.read",
                          "project.usage.read",
                          "project.gateway.budget.set",
                          "project.gateway.keys.manage",
                          "project.agent.read",
                          "project.agent.write",
                          "project.skill.read",
                          "project.skill.write",
                          "project.command.read",
                          "project.command.write",
                          "project.file.read",
                          "project.file.write",
                          "project.settings.write",
                          "project.sandbox.write",
                          "project.model.read",
                          "project.model.write",
                          "project.gitops.read",
                          "project.gitops.push",
                          "project.gitops.merge",
                          "project.gitops.ref.any",
                          "project.gitops.ref.delete",
                          "project.secret.read",
                          "project.secret.write",
                          "project.connector.read",
                          "project.connector.connections.manage",
                          "project.connector.write",
                          "project.app.read",
                          "project.app.write",
                          "project.app.deploy",
                          "project.app.admin",
                          "project.review.read",
                          "project.review.submit",
                          "project.review.act",
                          "project.credentials.issue",
                          "project.cr.open",
                          "project.cr.merge",
                          "project.customize.read",
                          "project.customize.write",
                          "*"
                        ]
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ],
                  "deprecated": true
                },
                "repository_access": {
                  "type": "boolean",
                  "description": "Allow new sessions to access the project repository. Defaults to true."
                },
                "workspace": {
                  "type": "string",
                  "enum": [
                    "runtime",
                    "read",
                    "branch"
                  ],
                  "deprecated": true
                },
                "harnesses": {
                  "type": "object",
                  "properties": {
                    "opencode": {
                      "type": "object",
                      "properties": {
                        "plugins": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "pattern": "^[a-zA-Z0-9_-]+\\.[cm]?[jt]s$"
                          }
                        },
                        "exclude": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "pattern": "^[a-zA-Z0-9_-]+\\.[cm]?[jt]s$"
                          }
                        }
                      },
                      "additionalProperties": false
                    },
                    "pi": {
                      "type": "object",
                      "properties": {
                        "packages": {
                          "type": "array",
                          "maxItems": 20,
                          "items": {
                            "oneOf": [
                              {
                                "type": "string",
                                "anyOf": [
                                  {
                                    "pattern": "^npm:(@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]*@\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z.-]+)?$"
                                  },
                                  {
                                    "pattern": "^\\.\\/(?!.*(^|\\/)\\.\\.(\\/|$))[^\\s:]+$"
                                  }
                                ]
                              },
                              {
                                "type": "object",
                                "required": [
                                  "source"
                                ],
                                "properties": {
                                  "source": {
                                    "type": "string",
                                    "anyOf": [
                                      {
                                        "pattern": "^npm:(@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]*@\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z.-]+)?$"
                                      },
                                      {
                                        "pattern": "^\\.\\/(?!.*(^|\\/)\\.\\.(\\/|$))[^\\s:]+$"
                                      }
                                    ]
                                  },
                                  "extensions": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  },
                                  "skills": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  },
                                  "prompts": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  },
                                  "themes": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                },
                                "additionalProperties": false
                              }
                            ]
                          }
                        },
                        "exclude": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "anyOf": [
                              {
                                "pattern": "^(@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]*$"
                              },
                              {
                                "pattern": "^\\.\\/(?!.*(^|\\/)\\.\\.(\\/|$))[^\\s:]+$"
                              }
                            ]
                          }
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false,
              "allOf": [
                {
                  "if": {
                    "required": [
                      "workspace"
                    ],
                    "properties": {
                      "workspace": {
                        "const": "branch"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "repository_access": {
                        "const": true
                      }
                    }
                  }
                },
                {
                  "if": {
                    "required": [
                      "workspace"
                    ],
                    "properties": {
                      "workspace": {
                        "enum": [
                          "runtime",
                          "read"
                        ]
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "repository_access": {
                        "const": false
                      }
                    }
                  }
                }
              ]
            }
          },
          "imports": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^(?![/\\s])(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*//)[^\\\\*?\\[\\]{}]*[^\\\\*?\\[\\]{}\\s/]/?$"
            }
          },
          "project": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "description": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "env": {
            "type": "object",
            "properties": {
              "required": {
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
                }
              },
              "optional": {
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
                }
              }
            },
            "additionalProperties": true
          },
          "opencode": {
            "type": "object",
            "properties": {
              "config_dir": {
                "type": "string",
                "minLength": 1,
                "not": {
                  "pattern": "^/|(^|/)\\.\\.($|/)"
                },
                "description": "Directory with the OpenCode-only files (opencode.jsonc, plugins/, tools/). Defaults to harnesses/opencode, then the legacy .beeuni/opencode."
              }
            },
            "additionalProperties": true
          },
          "sandbox": {
            "type": "object",
            "properties": {
              "image": false,
              "dockerfile": false,
              "slug": false,
              "cpu": false,
              "memory": false,
              "disk": false,
              "entrypoint": false,
              "context": false,
              "context_dir": false,
              "gpu": false,
              "templates": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "slug"
                  ],
                  "properties": {
                    "slug": {
                      "allOf": [
                        {
                          "type": "string",
                          "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
                        },
                        {
                          "not": {
                            "const": "default"
                          }
                        }
                      ]
                    },
                    "name": {
                      "type": "string"
                    },
                    "entrypoint": {
                      "type": "string"
                    },
                    "image": {
                      "type": "string",
                      "minLength": 1
                    },
                    "dockerfile": {
                      "type": "string",
                      "minLength": 1,
                      "not": {
                        "pattern": "^/|(^|/)\\.\\.($|/)"
                      }
                    },
                    "cpu": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "memory": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "disk": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "container_runtime": {
                      "type": "boolean"
                    }
                  },
                  "oneOf": [
                    {
                      "required": [
                        "image"
                      ],
                      "not": {
                        "required": [
                          "dockerfile"
                        ]
                      }
                    },
                    {
                      "required": [
                        "dockerfile"
                      ],
                      "not": {
                        "required": [
                          "image"
                        ]
                      }
                    }
                  ]
                }
              },
              "default": {
                "type": "string",
                "minLength": 1
              }
            },
            "additionalProperties": true
          },
          "sandboxes": false,
          "triggers": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "slug",
                "type"
              ],
              "properties": {
                "slug": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "cron",
                    "webhook",
                    "monitor",
                    "event"
                  ]
                },
                "name": {
                  "type": "string"
                },
                "agent": {
                  "type": "string",
                  "minLength": 1
                },
                "agent_name": {
                  "type": "string",
                  "minLength": 1
                },
                "enabled": {
                  "oneOf": [
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "string",
                      "pattern": "^(?:[tT][rR][uU][eE]|[fF][aA][lL][sS][eE]|1|0|[yY][eE][sS]|[nN][oO]|[oO][nN]|[oO][fF][fF])$"
                    }
                  ]
                },
                "session_mode": {
                  "type": "string",
                  "enum": [
                    "fresh",
                    "reuse",
                    "pinned",
                    "keyed"
                  ]
                },
                "session_key": {
                  "type": "string"
                },
                "sessionKey": {
                  "type": "string"
                },
                "filter": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "sessionMode": {
                  "type": "string",
                  "enum": [
                    "fresh",
                    "reuse",
                    "pinned",
                    "keyed"
                  ]
                },
                "session_id": {
                  "type": "string",
                  "minLength": 1
                },
                "sessionId": {
                  "type": "string",
                  "minLength": 1
                },
                "prompt": {
                  "type": "string",
                  "minLength": 1
                },
                "prompt_template": {
                  "type": "string",
                  "minLength": 1
                },
                "cron": {
                  "type": "string",
                  "minLength": 1
                },
                "schedule": {
                  "type": "string",
                  "minLength": 1
                },
                "run_at": {
                  "type": "string",
                  "minLength": 1
                },
                "runAt": {
                  "type": "string",
                  "minLength": 1
                },
                "timezone": {
                  "type": "string"
                },
                "secret_env": {
                  "type": "string",
                  "pattern": "^[A-Z_][A-Z0-9_]*$"
                },
                "secretEnv": {
                  "type": "string",
                  "pattern": "^[A-Z_][A-Z0-9_]*$"
                },
                "run": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 1024
                },
                "mode": {
                  "type": "string",
                  "enum": [
                    "poll",
                    "stream"
                  ]
                },
                "interval": {
                  "type": "string",
                  "pattern": "^([1-9][0-9]*)(s|m|h|d)$"
                },
                "expect_event_within": {
                  "type": "string",
                  "pattern": "^([1-9][0-9]*)(s|m|h|d)$"
                },
                "connector": {
                  "type": "string",
                  "minLength": 1
                },
                "account": {
                  "type": "string",
                  "minLength": 1
                },
                "source": {
                  "type": "string",
                  "minLength": 1
                },
                "event": {
                  "type": "string",
                  "minLength": 1
                },
                "config": {
                  "type": "object"
                }
              },
              "additionalProperties": true,
              "allOf": [
                {
                  "anyOf": [
                    {
                      "required": [
                        "prompt"
                      ]
                    },
                    {
                      "required": [
                        "prompt_template"
                      ]
                    }
                  ]
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "cron"
                      }
                    }
                  },
                  "then": {
                    "anyOf": [
                      {
                        "required": [
                          "cron"
                        ]
                      },
                      {
                        "required": [
                          "schedule"
                        ]
                      },
                      {
                        "required": [
                          "run_at"
                        ]
                      },
                      {
                        "required": [
                          "runAt"
                        ]
                      }
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "webhook"
                      }
                    }
                  },
                  "then": {
                    "anyOf": [
                      {
                        "required": [
                          "secret_env"
                        ]
                      },
                      {
                        "required": [
                          "secretEnv"
                        ]
                      }
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "monitor"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "run",
                      "mode"
                    ],
                    "properties": {
                      "cron": false,
                      "schedule": false,
                      "run_at": false,
                      "runAt": false,
                      "timezone": false,
                      "secret_env": false,
                      "secretEnv": false
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "event"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "connector",
                      "event"
                    ],
                    "properties": {
                      "cron": false,
                      "schedule": false,
                      "run_at": false,
                      "runAt": false,
                      "timezone": false,
                      "secret_env": false,
                      "secretEnv": false,
                      "run": false,
                      "mode": false,
                      "interval": false,
                      "expect_event_within": false
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "enum": [
                          "cron",
                          "webhook",
                          "monitor"
                        ]
                      }
                    },
                    "required": [
                      "type"
                    ]
                  },
                  "then": {
                    "properties": {
                      "connector": false,
                      "account": false,
                      "source": false,
                      "event": false,
                      "config": false
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "monitor"
                      },
                      "mode": {
                        "const": "poll"
                      }
                    },
                    "required": [
                      "mode"
                    ]
                  },
                  "then": {
                    "required": [
                      "interval"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "monitor"
                      },
                      "mode": {
                        "const": "stream"
                      }
                    },
                    "required": [
                      "mode"
                    ]
                  },
                  "then": {
                    "properties": {
                      "interval": false
                    }
                  }
                }
              ]
            }
          },
          "connectors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "slug",
                "provider"
              ],
              "properties": {
                "slug": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
                },
                "name": {
                  "type": "string",
                  "minLength": 1
                },
                "provider": {
                  "type": "string",
                  "enum": [
                    "pipedream",
                    "composio",
                    "mcp",
                    "openapi",
                    "postman",
                    "graphql",
                    "http",
                    "channel"
                  ]
                },
                "app": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "endpoint": {
                  "type": "string"
                },
                "base_url": {
                  "type": "string"
                },
                "baseUrl": {
                  "type": "string"
                },
                "transport": {
                  "type": "string",
                  "enum": [
                    "http",
                    "sse"
                  ]
                },
                "spec": {
                  "type": "string"
                },
                "platform": {
                  "type": "string",
                  "enum": [
                    "slack",
                    "teams",
                    "email"
                  ]
                },
                "credential": {
                  "const": "shared"
                },
                "authorization_strategy": {
                  "type": "string",
                  "enum": [
                    "project",
                    "user"
                  ],
                  "default": "project"
                },
                "agent_scope": false,
                "auth": {
                  "type": "object",
                  "required": [
                    "type"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "bearer",
                        "basic",
                        "custom",
                        "api_key",
                        "oauth1",
                        "hmac",
                        "aws_sigv4",
                        "mtls",
                        "none"
                      ]
                    },
                    "secret": false
                  },
                  "additionalProperties": true
                },
                "headers": {
                  "type": "object",
                  "maxProperties": 32,
                  "propertyNames": {
                    "pattern": "^[A-Za-z0-9!#$%&'*+.^_`|~-]+$",
                    "maxLength": 128
                  },
                  "additionalProperties": {
                    "type": "string",
                    "maxLength": 2048,
                    "pattern": "^[^\\r\\n]*$"
                  }
                },
                "policies": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "match",
                      "action"
                    ],
                    "properties": {
                      "match": {
                        "type": "string",
                        "minLength": 1
                      },
                      "action": {
                        "type": "string",
                        "enum": [
                          "always_run",
                          "require_approval",
                          "block"
                        ]
                      }
                    }
                  }
                }
              },
              "additionalProperties": true,
              "allOf": [
                {
                  "if": {
                    "properties": {
                      "slug": {
                        "const": "beeuni_slack"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "slug": {
                        "const": "beeuni_teams"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "slug": {
                        "const": "beeuni_email"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "slug": {
                        "const": "computer"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "provider": {
                        "const": "computer"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "pipedream"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "app"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "mcp"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "url"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "graphql"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "endpoint"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "http"
                      }
                    }
                  },
                  "then": {
                    "anyOf": [
                      {
                        "required": [
                          "base_url"
                        ]
                      },
                      {
                        "required": [
                          "baseUrl"
                        ]
                      }
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "platform"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    },
                    "required": [
                      "auth"
                    ]
                  },
                  "then": {
                    "properties": {
                      "auth": {
                        "properties": {
                          "type": {
                            "const": "none"
                          }
                        }
                      }
                    }
                  }
                }
              ]
            }
          },
          "apps": {
            "type": "object",
            "propertyNames": {
              "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
            },
            "additionalProperties": {
              "type": "object",
              "properties": {
                "path": {
                  "type": "string",
                  "minLength": 1,
                  "not": {
                    "pattern": "^/|(^|/)\\.\\.($|/)"
                  }
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "static",
                    "bundle",
                    "dockerfile",
                    "oci_image"
                  ]
                },
                "image": {
                  "type": "string",
                  "minLength": 1
                },
                "dockerfile": {
                  "type": "string",
                  "minLength": 1,
                  "not": {
                    "pattern": "^/|(^|/)\\.\\.($|/)"
                  }
                },
                "command": {
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "port": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 65535,
                  "not": {
                    "enum": [
                      7331,
                      8080
                    ]
                  }
                },
                "root": {
                  "type": "string",
                  "minLength": 1,
                  "not": {
                    "pattern": "^/|(^|/)\\.\\.($|/)"
                  }
                },
                "output_dir": {
                  "type": "string",
                  "minLength": 1,
                  "not": {
                    "pattern": "^/|(^|/)\\.\\.($|/)"
                  }
                },
                "install_command": {
                  "type": "string",
                  "minLength": 1
                },
                "build_command": {
                  "type": "string",
                  "minLength": 1
                },
                "spa": {
                  "type": "boolean"
                },
                "readiness_path": {
                  "type": "string",
                  "pattern": "^/"
                },
                "idle_timeout_seconds": {
                  "type": "integer",
                  "minimum": 120,
                  "maximum": 86400
                },
                "always_on": {
                  "type": "boolean"
                },
                "uses": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "pattern": "^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$"
                  }
                },
                "resources": {
                  "type": "object",
                  "properties": {
                    "cpu": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 64
                    },
                    "memory_gb": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 512
                    },
                    "disk_gb": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 2048
                    }
                  },
                  "additionalProperties": false
                },
                "env": {
                  "type": "object",
                  "propertyNames": {
                    "pattern": "^[A-Z_][A-Z0-9_]*$"
                  },
                  "additionalProperties": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "secrets": {
                  "type": "object",
                  "propertyNames": {
                    "pattern": "^[A-Z_][A-Z0-9_]*$"
                  },
                  "additionalProperties": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "processes": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "http_service": {
                  "type": "object",
                  "properties": {
                    "internal_port": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 65535,
                      "not": {
                        "enum": [
                          7331,
                          8080
                        ]
                      }
                    },
                    "protocol": {
                      "type": "string",
                      "enum": [
                        "http",
                        "tcp"
                      ]
                    },
                    "access": {
                      "type": "string",
                      "enum": [
                        "public",
                        "app",
                        "admins"
                      ]
                    },
                    "auto_stop_machines": {
                      "type": "string",
                      "enum": [
                        "off",
                        "stop",
                        "suspend"
                      ]
                    },
                    "auto_start_machines": {
                      "type": "boolean"
                    },
                    "min_machines_running": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "processes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "checks": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "enum": [
                              "http",
                              "tcp"
                            ]
                          },
                          "port": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 65535
                          },
                          "path": {
                            "type": "string",
                            "pattern": "^/"
                          },
                          "interval_s": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 3600
                          },
                          "timeout_s": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 600
                          },
                          "grace_period_s": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 3600
                          }
                        },
                        "additionalProperties": false
                      }
                    }
                  },
                  "additionalProperties": false
                },
                "services": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "pattern": "^[a-z][a-z0-9-]{0,30}$"
                      },
                      "internal_port": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 65535,
                        "not": {
                          "enum": [
                            7331,
                            8080
                          ]
                        }
                      },
                      "protocol": {
                        "type": "string",
                        "enum": [
                          "http",
                          "tcp"
                        ]
                      },
                      "access": {
                        "type": "string",
                        "enum": [
                          "public",
                          "app",
                          "admins"
                        ]
                      },
                      "auto_stop_machines": {
                        "type": "string",
                        "enum": [
                          "off",
                          "stop",
                          "suspend"
                        ]
                      },
                      "auto_start_machines": {
                        "type": "boolean"
                      },
                      "min_machines_running": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "processes": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "checks": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "enum": [
                                "http",
                                "tcp"
                              ]
                            },
                            "port": {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 65535
                            },
                            "path": {
                              "type": "string",
                              "pattern": "^/"
                            },
                            "interval_s": {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 3600
                            },
                            "timeout_s": {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 600
                            },
                            "grace_period_s": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 3600
                            }
                          },
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "name",
                      "internal_port"
                    ],
                    "additionalProperties": false
                  }
                },
                "mounts": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "source": {
                        "type": "string",
                        "pattern": "^[a-z0-9_]{1,30}$"
                      },
                      "destination": {
                        "type": "string",
                        "pattern": "^/.+[^/]$"
                      },
                      "initial_size_gb": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 100
                      },
                      "snapshot_retention_days": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 60
                      },
                      "processes": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "required": [
                      "source",
                      "destination"
                    ],
                    "additionalProperties": false
                  }
                },
                "vm": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "cpu": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 32
                        },
                        "memory_gb": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 128
                        },
                        "disk_gb": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 500
                        },
                        "processes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "additionalProperties": false
                    },
                    {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "cpu": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 32
                          },
                          "memory_gb": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 128
                          },
                          "disk_gb": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 500
                          },
                          "processes": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "additionalProperties": false
                      }
                    }
                  ]
                },
                "deploy": {
                  "type": "object",
                  "properties": {
                    "strategy": {
                      "type": "string",
                      "enum": [
                        "rolling",
                        "immediate",
                        "bluegreen",
                        "canary"
                      ]
                    },
                    "release_command": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": false
                },
                "labels": {
                  "type": "array",
                  "maxItems": 10,
                  "items": {
                    "type": "string",
                    "pattern": "^[a-z0-9][a-z0-9-]{0,30}$"
                  }
                }
              },
              "additionalProperties": false,
              "allOf": [
                {
                  "if": {
                    "properties": {
                      "type": {
                        "enum": [
                          "dockerfile",
                          "oci_image"
                        ]
                      }
                    },
                    "required": [
                      "type"
                    ]
                  },
                  "then": {
                    "required": [
                      "command"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "oci_image"
                      }
                    },
                    "required": [
                      "type"
                    ]
                  },
                  "then": {
                    "required": [
                      "image"
                    ]
                  }
                }
              ]
            }
          },
          "pi": {
            "type": "object",
            "properties": {
              "config_dir": {
                "type": "string",
                "minLength": 1,
                "not": {
                  "pattern": "^/|(^|/)\\.\\.($|/)"
                },
                "description": "Directory with the OpenCode-only files (opencode.jsonc, plugins/, tools/). Defaults to harnesses/opencode, then the legacy .beeuni/opencode."
              }
            },
            "additionalProperties": true,
            "description": "Pi native config directory (defaults to harnesses/pi, then .beeuni/pi)."
          },
          "channels": false
        },
        "additionalProperties": true,
        "$defs": {
          "agentMdFrontmatter": {
            "type": "object",
            "description": "Behavior for one agent — lives in its .md frontmatter (agents.<name>.file, default agents/<name>.md), never in the manifest. Provided here as an authoring aid; not itself part of beeuni.yaml.",
            "properties": {
              "description": {
                "type": "string"
              },
              "model": {
                "type": "string"
              },
              "mode": {
                "type": "string",
                "enum": [
                  "primary",
                  "subagent",
                  "all"
                ]
              },
              "variant": {
                "type": "string"
              },
              "temperature": {
                "type": "number"
              },
              "top_p": {
                "type": "number"
              },
              "steps": {
                "type": "integer",
                "minimum": 1
              },
              "color": {
                "oneOf": [
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "primary",
                      "secondary",
                      "accent",
                      "success",
                      "warning",
                      "error",
                      "info"
                    ]
                  }
                ]
              },
              "hidden": {
                "type": "boolean"
              },
              "disable": {
                "type": "boolean"
              },
              "options": {
                "type": "object"
              },
              "permission": {
                "oneOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ask",
                      "allow",
                      "deny"
                    ]
                  },
                  {
                    "type": "object",
                    "properties": {
                      "todowrite": {
                        "type": "string",
                        "enum": [
                          "ask",
                          "allow",
                          "deny"
                        ]
                      },
                      "question": {
                        "type": "string",
                        "enum": [
                          "ask",
                          "allow",
                          "deny"
                        ]
                      },
                      "webfetch": {
                        "type": "string",
                        "enum": [
                          "ask",
                          "allow",
                          "deny"
                        ]
                      },
                      "websearch": {
                        "type": "string",
                        "enum": [
                          "ask",
                          "allow",
                          "deny"
                        ]
                      },
                      "doom_loop": {
                        "type": "string",
                        "enum": [
                          "ask",
                          "allow",
                          "deny"
                        ]
                      }
                    },
                    "additionalProperties": {
                      "oneOf": [
                        {
                          "type": "string",
                          "enum": [
                            "ask",
                            "allow",
                            "deny"
                          ]
                        },
                        {
                          "type": "object",
                          "additionalProperties": {
                            "type": "string",
                            "enum": [
                              "ask",
                              "allow",
                              "deny"
                            ]
                          }
                        }
                      ]
                    }
                  }
                ]
              }
            },
            "additionalProperties": true
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "beeuni_version": {
            "const": 3
          }
        }
      },
      "then": {
        "type": "object",
        "required": [
          "beeuni_version",
          "default_agent"
        ],
        "if": {
          "not": {
            "required": [
              "imports"
            ]
          }
        },
        "then": {
          "required": [
            "agents"
          ]
        },
        "properties": {
          "beeuni_version": {
            "const": 3
          },
          "imports": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^(?![/\\s])(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*//)[^\\\\*?\\[\\]{}]*[^\\\\*?\\[\\]{}\\s/]/?$"
            }
          },
          "default_agent": {
            "type": "string",
            "minLength": 1
          },
          "runtime": {
            "type": "string",
            "enum": [
              "opencode",
              "pi"
            ]
          },
          "harnesses": {
            "type": "object",
            "properties": {
              "opencode": {
                "type": "object",
                "properties": {
                  "plugins": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "pattern": "^[a-zA-Z0-9_-]+\\.[cm]?[jt]s$"
                    }
                  }
                },
                "additionalProperties": false
              },
              "pi": {
                "type": "object",
                "properties": {
                  "packages": {
                    "type": "array",
                    "maxItems": 20,
                    "items": {
                      "oneOf": [
                        {
                          "type": "string",
                          "anyOf": [
                            {
                              "pattern": "^npm:(@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]*@\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z.-]+)?$"
                            },
                            {
                              "pattern": "^\\.\\/(?!.*(^|\\/)\\.\\.(\\/|$))[^\\s:]+$"
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "required": [
                            "source"
                          ],
                          "properties": {
                            "source": {
                              "type": "string",
                              "anyOf": [
                                {
                                  "pattern": "^npm:(@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]*@\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z.-]+)?$"
                                },
                                {
                                  "pattern": "^\\.\\/(?!.*(^|\\/)\\.\\.(\\/|$))[^\\s:]+$"
                                }
                              ]
                            },
                            "extensions": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "skills": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "prompts": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "themes": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            }
                          },
                          "additionalProperties": false
                        }
                      ]
                    }
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          "tools": {
            "type": [
              "object",
              "null"
            ],
            "description": "Tools: tool name → repo-relative path of the module that implements it, or `beeuni:<name>` for a Beeuni tool. Each module default-exports { description, parameters (JSON Schema), execute(args, context) }. Every harness loads them. With a `tools` key, sessions get only the Beeuni tools it lists; without one, they get all five.",
            "propertyNames": {
              "pattern": "^[a-z][a-z0-9_]{0,63}$"
            },
            "properties": {
              "web_search": {
                "anyOf": [
                  {
                    "const": "beeuni:web_search",
                    "description": "The Beeuni web_search tool, maintained by Beeuni."
                  },
                  {
                    "type": "string",
                    "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.[cm]?[jt]s$"
                  }
                ]
              },
              "image_search": {
                "anyOf": [
                  {
                    "const": "beeuni:image_search",
                    "description": "The Beeuni image_search tool, maintained by Beeuni."
                  },
                  {
                    "type": "string",
                    "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.[cm]?[jt]s$"
                  }
                ]
              },
              "scrape_webpage": {
                "anyOf": [
                  {
                    "const": "beeuni:scrape_webpage",
                    "description": "The Beeuni scrape_webpage tool, maintained by Beeuni."
                  },
                  {
                    "type": "string",
                    "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.[cm]?[jt]s$"
                  }
                ]
              },
              "memory": {
                "anyOf": [
                  {
                    "const": "beeuni:memory",
                    "description": "The Beeuni memory tool, maintained by Beeuni."
                  },
                  {
                    "type": "string",
                    "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.[cm]?[jt]s$"
                  }
                ]
              },
              "show": {
                "anyOf": [
                  {
                    "const": "beeuni:show",
                    "description": "The Beeuni show tool, maintained by Beeuni."
                  },
                  {
                    "type": "string",
                    "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.[cm]?[jt]s$"
                  }
                ]
              }
            },
            "additionalProperties": {
              "type": "string",
              "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.[cm]?[jt]s$"
            }
          },
          "agents": {
            "type": "object",
            "minProperties": 1,
            "propertyNames": {
              "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
            },
            "additionalProperties": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean"
                },
                "tools": {
                  "description": "Which tools this agent may use: harness tools (bash, read, edit, …), Beeuni tools (web_search, memory, show, …) and project tools (top-level `tools`). `all` (default) or `none`; a list allows only those; `{ exclude: [...] }` allows every tool but those. A map of tool name → boolean is the earlier form.",
                  "oneOf": [
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "none"
                      ]
                    },
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    {
                      "type": "object",
                      "required": [
                        "exclude"
                      ],
                      "properties": {
                        "exclude": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1
                          }
                        }
                      },
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "not": {
                        "required": [
                          "exclude"
                        ]
                      },
                      "additionalProperties": {
                        "type": "boolean"
                      }
                    }
                  ]
                },
                "sandbox": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
                },
                "network_egress": {
                  "type": "object",
                  "required": [
                    "version",
                    "default",
                    "rules"
                  ],
                  "properties": {
                    "version": {
                      "const": 1
                    },
                    "default": {
                      "const": "deny"
                    },
                    "rules": {
                      "type": "array",
                      "maxItems": 0
                    }
                  },
                  "additionalProperties": false,
                  "description": "Non-enforcing declaration. Outbound network access remains unrestricted until provider gateway isolation ships."
                },
                "connectors": {
                  "description": "An allowlist of names, or the \"all\" / \"none\" sentinel. \"*\" (alone or in the list) means \"all\".",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                },
                "connectors_required": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  },
                  "description": "Connector slugs that must resolve before the session starts."
                },
                "connectors_personal": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  },
                  "deprecated": true,
                  "description": "Deprecated input alias for connectors_required."
                },
                "secrets": {
                  "description": "An allowlist of names, or the \"all\" / \"none\" sentinel. \"*\" (alone or in the list) means \"all\".",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                },
                "skills": {
                  "description": "An allowlist of names, or the \"all\" / \"none\" sentinel. \"*\" (alone or in the list) means \"all\".",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                },
                "apps": {
                  "description": "Beeuni Apps (by App slug) this agent may open when the App is restricted or private. Deny by default.",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "pattern": "^(?:[a-z0-9][a-z0-9_-]{0,127}|\\*)$"
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                },
                "beeuni_permissions": {
                  "description": "Beeuni permissions: the project.* IAM actions this agent may exercise, or \"all\" / \"none\".",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "project.read",
                          "project.write",
                          "project.delete",
                          "project.session.read",
                          "project.session.start",
                          "project.session.stop",
                          "project.session.bindings.write",
                          "project.members.read",
                          "project.members.manage",
                          "project.trigger.read",
                          "project.trigger.create",
                          "project.trigger.update",
                          "project.trigger.delete",
                          "project.trigger.fire",
                          "project.gateway.logs.read",
                          "project.gateway.spend.read",
                          "project.usage.read",
                          "project.gateway.budget.set",
                          "project.gateway.keys.manage",
                          "project.agent.read",
                          "project.agent.write",
                          "project.skill.read",
                          "project.skill.write",
                          "project.command.read",
                          "project.command.write",
                          "project.file.read",
                          "project.file.write",
                          "project.settings.write",
                          "project.sandbox.write",
                          "project.model.read",
                          "project.model.write",
                          "project.gitops.read",
                          "project.gitops.push",
                          "project.gitops.merge",
                          "project.gitops.ref.any",
                          "project.gitops.ref.delete",
                          "project.secret.read",
                          "project.secret.write",
                          "project.connector.read",
                          "project.connector.connections.manage",
                          "project.connector.write",
                          "project.app.read",
                          "project.app.write",
                          "project.app.deploy",
                          "project.app.admin",
                          "project.review.read",
                          "project.review.submit",
                          "project.review.act",
                          "project.credentials.issue",
                          "project.cr.open",
                          "project.cr.merge",
                          "project.customize.read",
                          "project.customize.write",
                          "*"
                        ]
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ]
                },
                "beeuni_cli": {
                  "description": "Deprecated alias for beeuni_permissions.",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "project.read",
                          "project.write",
                          "project.delete",
                          "project.session.read",
                          "project.session.start",
                          "project.session.stop",
                          "project.session.bindings.write",
                          "project.members.read",
                          "project.members.manage",
                          "project.trigger.read",
                          "project.trigger.create",
                          "project.trigger.update",
                          "project.trigger.delete",
                          "project.trigger.fire",
                          "project.gateway.logs.read",
                          "project.gateway.spend.read",
                          "project.usage.read",
                          "project.gateway.budget.set",
                          "project.gateway.keys.manage",
                          "project.agent.read",
                          "project.agent.write",
                          "project.skill.read",
                          "project.skill.write",
                          "project.command.read",
                          "project.command.write",
                          "project.file.read",
                          "project.file.write",
                          "project.settings.write",
                          "project.sandbox.write",
                          "project.model.read",
                          "project.model.write",
                          "project.gitops.read",
                          "project.gitops.push",
                          "project.gitops.merge",
                          "project.gitops.ref.any",
                          "project.gitops.ref.delete",
                          "project.secret.read",
                          "project.secret.write",
                          "project.connector.read",
                          "project.connector.connections.manage",
                          "project.connector.write",
                          "project.app.read",
                          "project.app.write",
                          "project.app.deploy",
                          "project.app.admin",
                          "project.review.read",
                          "project.review.submit",
                          "project.review.act",
                          "project.credentials.issue",
                          "project.cr.open",
                          "project.cr.merge",
                          "project.customize.read",
                          "project.customize.write",
                          "*"
                        ]
                      }
                    },
                    {
                      "type": "string",
                      "enum": [
                        "all",
                        "*",
                        "none"
                      ]
                    }
                  ],
                  "deprecated": true
                },
                "repository_access": {
                  "type": "boolean",
                  "description": "Allow new sessions to access the project repository. Defaults to true."
                },
                "workspace": {
                  "type": "string",
                  "enum": [
                    "runtime",
                    "read",
                    "branch"
                  ],
                  "deprecated": true
                },
                "harnesses": {
                  "type": "object",
                  "properties": {
                    "opencode": {
                      "type": "object",
                      "properties": {
                        "plugins": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "pattern": "^[a-zA-Z0-9_-]+\\.[cm]?[jt]s$"
                          }
                        },
                        "exclude": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "pattern": "^[a-zA-Z0-9_-]+\\.[cm]?[jt]s$"
                          }
                        }
                      },
                      "additionalProperties": false
                    },
                    "pi": {
                      "type": "object",
                      "properties": {
                        "packages": {
                          "type": "array",
                          "maxItems": 20,
                          "items": {
                            "oneOf": [
                              {
                                "type": "string",
                                "anyOf": [
                                  {
                                    "pattern": "^npm:(@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]*@\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z.-]+)?$"
                                  },
                                  {
                                    "pattern": "^\\.\\/(?!.*(^|\\/)\\.\\.(\\/|$))[^\\s:]+$"
                                  }
                                ]
                              },
                              {
                                "type": "object",
                                "required": [
                                  "source"
                                ],
                                "properties": {
                                  "source": {
                                    "type": "string",
                                    "anyOf": [
                                      {
                                        "pattern": "^npm:(@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]*@\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z.-]+)?$"
                                      },
                                      {
                                        "pattern": "^\\.\\/(?!.*(^|\\/)\\.\\.(\\/|$))[^\\s:]+$"
                                      }
                                    ]
                                  },
                                  "extensions": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  },
                                  "skills": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  },
                                  "prompts": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  },
                                  "themes": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                },
                                "additionalProperties": false
                              }
                            ]
                          }
                        },
                        "exclude": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "anyOf": [
                              {
                                "pattern": "^(@[a-z0-9][a-z0-9._-]*\\/)?[a-z0-9][a-z0-9._-]*$"
                              },
                              {
                                "pattern": "^\\.\\/(?!.*(^|\\/)\\.\\.(\\/|$))[^\\s:]+$"
                              }
                            ]
                          }
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "description": {
                  "type": "string"
                },
                "model": {
                  "type": "string"
                },
                "mode": {
                  "type": "string",
                  "enum": [
                    "primary",
                    "subagent",
                    "all"
                  ]
                },
                "variant": {
                  "type": "string"
                },
                "temperature": {
                  "type": "number"
                },
                "top_p": {
                  "type": "number"
                },
                "steps": {
                  "type": "integer",
                  "minimum": 1
                },
                "color": {
                  "oneOf": [
                    {
                      "type": "string",
                      "pattern": "^#[0-9a-fA-F]{6}$"
                    },
                    {
                      "type": "string",
                      "enum": [
                        "primary",
                        "secondary",
                        "accent",
                        "success",
                        "warning",
                        "error",
                        "info"
                      ]
                    }
                  ]
                },
                "hidden": {
                  "type": "boolean"
                },
                "options": {
                  "type": "object"
                },
                "permission": {
                  "oneOf": [
                    {
                      "type": "string",
                      "enum": [
                        "ask",
                        "allow",
                        "deny"
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "todowrite": {
                          "type": "string",
                          "enum": [
                            "ask",
                            "allow",
                            "deny"
                          ]
                        },
                        "question": {
                          "type": "string",
                          "enum": [
                            "ask",
                            "allow",
                            "deny"
                          ]
                        },
                        "webfetch": {
                          "type": "string",
                          "enum": [
                            "ask",
                            "allow",
                            "deny"
                          ]
                        },
                        "websearch": {
                          "type": "string",
                          "enum": [
                            "ask",
                            "allow",
                            "deny"
                          ]
                        },
                        "doom_loop": {
                          "type": "string",
                          "enum": [
                            "ask",
                            "allow",
                            "deny"
                          ]
                        }
                      },
                      "additionalProperties": {
                        "oneOf": [
                          {
                            "type": "string",
                            "enum": [
                              "ask",
                              "allow",
                              "deny"
                            ]
                          },
                          {
                            "type": "object",
                            "additionalProperties": {
                              "type": "string",
                              "enum": [
                                "ask",
                                "allow",
                                "deny"
                              ]
                            }
                          }
                        ]
                      }
                    }
                  ]
                },
                "prompt": {
                  "type": "string"
                },
                "prompt_file": {
                  "type": "string",
                  "pattern": "^(?!-)(?!(?:.*/)?\\.\\.?(?:/|$))(?:[\\w .-]+/)*[\\w .-]+\\.md$"
                }
              },
              "additionalProperties": false,
              "allOf": [
                {
                  "if": {
                    "required": [
                      "workspace"
                    ],
                    "properties": {
                      "workspace": {
                        "const": "branch"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "repository_access": {
                        "const": true
                      }
                    }
                  }
                },
                {
                  "if": {
                    "required": [
                      "workspace"
                    ],
                    "properties": {
                      "workspace": {
                        "enum": [
                          "runtime",
                          "read"
                        ]
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "repository_access": {
                        "const": false
                      }
                    }
                  }
                },
                {
                  "not": {
                    "required": [
                      "prompt",
                      "prompt_file"
                    ]
                  }
                }
              ]
            }
          },
          "project": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "description": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "env": {
            "type": "object",
            "properties": {
              "required": {
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
                }
              },
              "optional": {
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
                }
              }
            },
            "additionalProperties": true
          },
          "opencode": false,
          "sandbox": {
            "type": "object",
            "properties": {
              "image": false,
              "dockerfile": false,
              "slug": false,
              "cpu": false,
              "memory": false,
              "disk": false,
              "entrypoint": false,
              "context": false,
              "context_dir": false,
              "gpu": false,
              "templates": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "slug"
                  ],
                  "properties": {
                    "slug": {
                      "allOf": [
                        {
                          "type": "string",
                          "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
                        },
                        {
                          "not": {
                            "const": "default"
                          }
                        }
                      ]
                    },
                    "name": {
                      "type": "string"
                    },
                    "entrypoint": {
                      "type": "string"
                    },
                    "image": {
                      "type": "string",
                      "minLength": 1
                    },
                    "dockerfile": {
                      "type": "string",
                      "minLength": 1,
                      "not": {
                        "pattern": "^/|(^|/)\\.\\.($|/)"
                      }
                    },
                    "cpu": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "memory": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "disk": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "container_runtime": {
                      "type": "boolean"
                    }
                  },
                  "oneOf": [
                    {
                      "required": [
                        "image"
                      ],
                      "not": {
                        "required": [
                          "dockerfile"
                        ]
                      }
                    },
                    {
                      "required": [
                        "dockerfile"
                      ],
                      "not": {
                        "required": [
                          "image"
                        ]
                      }
                    }
                  ]
                }
              },
              "default": {
                "type": "string",
                "minLength": 1
              }
            },
            "additionalProperties": true
          },
          "sandboxes": false,
          "triggers": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "slug",
                "type"
              ],
              "properties": {
                "slug": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "cron",
                    "webhook",
                    "monitor",
                    "event"
                  ]
                },
                "name": {
                  "type": "string"
                },
                "agent": {
                  "type": "string",
                  "minLength": 1
                },
                "agent_name": {
                  "type": "string",
                  "minLength": 1
                },
                "enabled": {
                  "oneOf": [
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "string",
                      "pattern": "^(?:[tT][rR][uU][eE]|[fF][aA][lL][sS][eE]|1|0|[yY][eE][sS]|[nN][oO]|[oO][nN]|[oO][fF][fF])$"
                    }
                  ]
                },
                "session_mode": {
                  "type": "string",
                  "enum": [
                    "fresh",
                    "reuse",
                    "pinned",
                    "keyed"
                  ]
                },
                "session_key": {
                  "type": "string"
                },
                "sessionKey": {
                  "type": "string"
                },
                "filter": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "sessionMode": {
                  "type": "string",
                  "enum": [
                    "fresh",
                    "reuse",
                    "pinned",
                    "keyed"
                  ]
                },
                "session_id": {
                  "type": "string",
                  "minLength": 1
                },
                "sessionId": {
                  "type": "string",
                  "minLength": 1
                },
                "prompt": {
                  "type": "string",
                  "minLength": 1
                },
                "prompt_template": {
                  "type": "string",
                  "minLength": 1
                },
                "cron": {
                  "type": "string",
                  "minLength": 1
                },
                "schedule": {
                  "type": "string",
                  "minLength": 1
                },
                "run_at": {
                  "type": "string",
                  "minLength": 1
                },
                "runAt": {
                  "type": "string",
                  "minLength": 1
                },
                "timezone": {
                  "type": "string"
                },
                "secret_env": {
                  "type": "string",
                  "pattern": "^[A-Z_][A-Z0-9_]*$"
                },
                "secretEnv": {
                  "type": "string",
                  "pattern": "^[A-Z_][A-Z0-9_]*$"
                },
                "run": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 1024
                },
                "mode": {
                  "type": "string",
                  "enum": [
                    "poll",
                    "stream"
                  ]
                },
                "interval": {
                  "type": "string",
                  "pattern": "^([1-9][0-9]*)(s|m|h|d)$"
                },
                "expect_event_within": {
                  "type": "string",
                  "pattern": "^([1-9][0-9]*)(s|m|h|d)$"
                },
                "connector": {
                  "type": "string",
                  "minLength": 1
                },
                "account": {
                  "type": "string",
                  "minLength": 1
                },
                "source": {
                  "type": "string",
                  "minLength": 1
                },
                "event": {
                  "type": "string",
                  "minLength": 1
                },
                "config": {
                  "type": "object"
                }
              },
              "additionalProperties": true,
              "allOf": [
                {
                  "anyOf": [
                    {
                      "required": [
                        "prompt"
                      ]
                    },
                    {
                      "required": [
                        "prompt_template"
                      ]
                    }
                  ]
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "cron"
                      }
                    }
                  },
                  "then": {
                    "anyOf": [
                      {
                        "required": [
                          "cron"
                        ]
                      },
                      {
                        "required": [
                          "schedule"
                        ]
                      },
                      {
                        "required": [
                          "run_at"
                        ]
                      },
                      {
                        "required": [
                          "runAt"
                        ]
                      }
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "webhook"
                      }
                    }
                  },
                  "then": {
                    "anyOf": [
                      {
                        "required": [
                          "secret_env"
                        ]
                      },
                      {
                        "required": [
                          "secretEnv"
                        ]
                      }
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "monitor"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "run",
                      "mode"
                    ],
                    "properties": {
                      "cron": false,
                      "schedule": false,
                      "run_at": false,
                      "runAt": false,
                      "timezone": false,
                      "secret_env": false,
                      "secretEnv": false
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "event"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "connector",
                      "event"
                    ],
                    "properties": {
                      "cron": false,
                      "schedule": false,
                      "run_at": false,
                      "runAt": false,
                      "timezone": false,
                      "secret_env": false,
                      "secretEnv": false,
                      "run": false,
                      "mode": false,
                      "interval": false,
                      "expect_event_within": false
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "enum": [
                          "cron",
                          "webhook",
                          "monitor"
                        ]
                      }
                    },
                    "required": [
                      "type"
                    ]
                  },
                  "then": {
                    "properties": {
                      "connector": false,
                      "account": false,
                      "source": false,
                      "event": false,
                      "config": false
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "monitor"
                      },
                      "mode": {
                        "const": "poll"
                      }
                    },
                    "required": [
                      "mode"
                    ]
                  },
                  "then": {
                    "required": [
                      "interval"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "monitor"
                      },
                      "mode": {
                        "const": "stream"
                      }
                    },
                    "required": [
                      "mode"
                    ]
                  },
                  "then": {
                    "properties": {
                      "interval": false
                    }
                  }
                }
              ]
            }
          },
          "connectors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "slug",
                "provider"
              ],
              "properties": {
                "slug": {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
                },
                "name": {
                  "type": "string",
                  "minLength": 1
                },
                "provider": {
                  "type": "string",
                  "enum": [
                    "pipedream",
                    "composio",
                    "mcp",
                    "openapi",
                    "postman",
                    "graphql",
                    "http",
                    "channel"
                  ]
                },
                "app": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "endpoint": {
                  "type": "string"
                },
                "base_url": {
                  "type": "string"
                },
                "baseUrl": {
                  "type": "string"
                },
                "transport": {
                  "type": "string",
                  "enum": [
                    "http",
                    "sse"
                  ]
                },
                "spec": {
                  "type": "string"
                },
                "platform": {
                  "type": "string",
                  "enum": [
                    "slack",
                    "teams",
                    "email"
                  ]
                },
                "credential": {
                  "const": "shared"
                },
                "authorization_strategy": {
                  "type": "string",
                  "enum": [
                    "project",
                    "user"
                  ],
                  "default": "project"
                },
                "agent_scope": false,
                "auth": {
                  "type": "object",
                  "required": [
                    "type"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "bearer",
                        "basic",
                        "custom",
                        "api_key",
                        "oauth1",
                        "hmac",
                        "aws_sigv4",
                        "mtls",
                        "none"
                      ]
                    },
                    "secret": false
                  },
                  "additionalProperties": true
                },
                "headers": {
                  "type": "object",
                  "maxProperties": 32,
                  "propertyNames": {
                    "pattern": "^[A-Za-z0-9!#$%&'*+.^_`|~-]+$",
                    "maxLength": 128
                  },
                  "additionalProperties": {
                    "type": "string",
                    "maxLength": 2048,
                    "pattern": "^[^\\r\\n]*$"
                  }
                },
                "policies": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "match",
                      "action"
                    ],
                    "properties": {
                      "match": {
                        "type": "string",
                        "minLength": 1
                      },
                      "action": {
                        "type": "string",
                        "enum": [
                          "always_run",
                          "require_approval",
                          "block"
                        ]
                      }
                    }
                  }
                }
              },
              "additionalProperties": true,
              "allOf": [
                {
                  "if": {
                    "properties": {
                      "slug": {
                        "const": "beeuni_slack"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "slug": {
                        "const": "beeuni_teams"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "slug": {
                        "const": "beeuni_email"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "slug": {
                        "const": "computer"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "provider": {
                        "const": "computer"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "pipedream"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "app"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "mcp"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "url"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "graphql"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "endpoint"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "http"
                      }
                    }
                  },
                  "then": {
                    "anyOf": [
                      {
                        "required": [
                          "base_url"
                        ]
                      },
                      {
                        "required": [
                          "baseUrl"
                        ]
                      }
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "platform"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "provider": {
                        "const": "channel"
                      }
                    },
                    "required": [
                      "auth"
                    ]
                  },
                  "then": {
                    "properties": {
                      "auth": {
                        "properties": {
                          "type": {
                            "const": "none"
                          }
                        }
                      }
                    }
                  }
                }
              ]
            }
          },
          "apps": {
            "type": "object",
            "propertyNames": {
              "pattern": "^[a-z0-9][a-z0-9_-]{0,127}$"
            },
            "additionalProperties": {
              "type": "object",
              "properties": {
                "path": {
                  "type": "string",
                  "minLength": 1,
                  "not": {
                    "pattern": "^/|(^|/)\\.\\.($|/)"
                  }
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "static",
                    "bundle",
                    "dockerfile",
                    "oci_image"
                  ]
                },
                "image": {
                  "type": "string",
                  "minLength": 1
                },
                "dockerfile": {
                  "type": "string",
                  "minLength": 1,
                  "not": {
                    "pattern": "^/|(^|/)\\.\\.($|/)"
                  }
                },
                "command": {
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "port": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 65535,
                  "not": {
                    "enum": [
                      7331,
                      8080
                    ]
                  }
                },
                "root": {
                  "type": "string",
                  "minLength": 1,
                  "not": {
                    "pattern": "^/|(^|/)\\.\\.($|/)"
                  }
                },
                "output_dir": {
                  "type": "string",
                  "minLength": 1,
                  "not": {
                    "pattern": "^/|(^|/)\\.\\.($|/)"
                  }
                },
                "install_command": {
                  "type": "string",
                  "minLength": 1
                },
                "build_command": {
                  "type": "string",
                  "minLength": 1
                },
                "spa": {
                  "type": "boolean"
                },
                "readiness_path": {
                  "type": "string",
                  "pattern": "^/"
                },
                "idle_timeout_seconds": {
                  "type": "integer",
                  "minimum": 120,
                  "maximum": 86400
                },
                "always_on": {
                  "type": "boolean"
                },
                "uses": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "pattern": "^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$"
                  }
                },
                "resources": {
                  "type": "object",
                  "properties": {
                    "cpu": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 64
                    },
                    "memory_gb": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 512
                    },
                    "disk_gb": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 2048
                    }
                  },
                  "additionalProperties": false
                },
                "env": {
                  "type": "object",
                  "propertyNames": {
                    "pattern": "^[A-Z_][A-Z0-9_]*$"
                  },
                  "additionalProperties": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "secrets": {
                  "type": "object",
                  "propertyNames": {
                    "pattern": "^[A-Z_][A-Z0-9_]*$"
                  },
                  "additionalProperties": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "processes": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "http_service": {
                  "type": "object",
                  "properties": {
                    "internal_port": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 65535,
                      "not": {
                        "enum": [
                          7331,
                          8080
                        ]
                      }
                    },
                    "protocol": {
                      "type": "string",
                      "enum": [
                        "http",
                        "tcp"
                      ]
                    },
                    "access": {
                      "type": "string",
                      "enum": [
                        "public",
                        "app",
                        "admins"
                      ]
                    },
                    "auto_stop_machines": {
                      "type": "string",
                      "enum": [
                        "off",
                        "stop",
                        "suspend"
                      ]
                    },
                    "auto_start_machines": {
                      "type": "boolean"
                    },
                    "min_machines_running": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "processes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "checks": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "enum": [
                              "http",
                              "tcp"
                            ]
                          },
                          "port": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 65535
                          },
                          "path": {
                            "type": "string",
                            "pattern": "^/"
                          },
                          "interval_s": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 3600
                          },
                          "timeout_s": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 600
                          },
                          "grace_period_s": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 3600
                          }
                        },
                        "additionalProperties": false
                      }
                    }
                  },
                  "additionalProperties": false
                },
                "services": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "pattern": "^[a-z][a-z0-9-]{0,30}$"
                      },
                      "internal_port": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 65535,
                        "not": {
                          "enum": [
                            7331,
                            8080
                          ]
                        }
                      },
                      "protocol": {
                        "type": "string",
                        "enum": [
                          "http",
                          "tcp"
                        ]
                      },
                      "access": {
                        "type": "string",
                        "enum": [
                          "public",
                          "app",
                          "admins"
                        ]
                      },
                      "auto_stop_machines": {
                        "type": "string",
                        "enum": [
                          "off",
                          "stop",
                          "suspend"
                        ]
                      },
                      "auto_start_machines": {
                        "type": "boolean"
                      },
                      "min_machines_running": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "processes": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "checks": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "enum": [
                                "http",
                                "tcp"
                              ]
                            },
                            "port": {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 65535
                            },
                            "path": {
                              "type": "string",
                              "pattern": "^/"
                            },
                            "interval_s": {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 3600
                            },
                            "timeout_s": {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 600
                            },
                            "grace_period_s": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 3600
                            }
                          },
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "name",
                      "internal_port"
                    ],
                    "additionalProperties": false
                  }
                },
                "mounts": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "source": {
                        "type": "string",
                        "pattern": "^[a-z0-9_]{1,30}$"
                      },
                      "destination": {
                        "type": "string",
                        "pattern": "^/.+[^/]$"
                      },
                      "initial_size_gb": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 100
                      },
                      "snapshot_retention_days": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 60
                      },
                      "processes": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "required": [
                      "source",
                      "destination"
                    ],
                    "additionalProperties": false
                  }
                },
                "vm": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "cpu": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 32
                        },
                        "memory_gb": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 128
                        },
                        "disk_gb": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 500
                        },
                        "processes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "additionalProperties": false
                    },
                    {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "cpu": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 32
                          },
                          "memory_gb": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 128
                          },
                          "disk_gb": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 500
                          },
                          "processes": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "additionalProperties": false
                      }
                    }
                  ]
                },
                "deploy": {
                  "type": "object",
                  "properties": {
                    "strategy": {
                      "type": "string",
                      "enum": [
                        "rolling",
                        "immediate",
                        "bluegreen",
                        "canary"
                      ]
                    },
                    "release_command": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": false
                },
                "labels": {
                  "type": "array",
                  "maxItems": 10,
                  "items": {
                    "type": "string",
                    "pattern": "^[a-z0-9][a-z0-9-]{0,30}$"
                  }
                }
              },
              "additionalProperties": false,
              "allOf": [
                {
                  "if": {
                    "properties": {
                      "type": {
                        "enum": [
                          "dockerfile",
                          "oci_image"
                        ]
                      }
                    },
                    "required": [
                      "type"
                    ]
                  },
                  "then": {
                    "required": [
                      "command"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "type": {
                        "const": "oci_image"
                      }
                    },
                    "required": [
                      "type"
                    ]
                  },
                  "then": {
                    "required": [
                      "image"
                    ]
                  }
                }
              ]
            }
          },
          "pi": {
            "type": "object",
            "properties": {
              "config_dir": {
                "type": "string",
                "minLength": 1,
                "not": {
                  "pattern": "^/|(^|/)\\.\\.($|/)"
                },
                "description": "Directory with the OpenCode-only files (opencode.jsonc, plugins/, tools/). Defaults to harnesses/opencode, then the legacy .beeuni/opencode."
              }
            },
            "additionalProperties": true,
            "description": "Pi native config directory (defaults to harnesses/pi, then .beeuni/pi)."
          },
          "channels": false
        },
        "additionalProperties": true,
        "$defs": {
          "agentMdFrontmatter": {
            "type": "object",
            "description": "OpenCode behavior for one agent — lives in .beeuni/opencode/agents/<name>.md frontmatter, never in the manifest. Provided here as an authoring aid; not itself part of beeuni.yaml.",
            "properties": {
              "description": {
                "type": "string"
              },
              "model": {
                "type": "string"
              },
              "mode": {
                "type": "string",
                "enum": [
                  "primary",
                  "subagent",
                  "all"
                ]
              },
              "variant": {
                "type": "string"
              },
              "temperature": {
                "type": "number"
              },
              "top_p": {
                "type": "number"
              },
              "steps": {
                "type": "integer",
                "minimum": 1
              },
              "color": {
                "oneOf": [
                  {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "primary",
                      "secondary",
                      "accent",
                      "success",
                      "warning",
                      "error",
                      "info"
                    ]
                  }
                ]
              },
              "hidden": {
                "type": "boolean"
              },
              "disable": {
                "type": "boolean"
              },
              "options": {
                "type": "object"
              },
              "permission": {
                "oneOf": [
                  {
                    "type": "string",
                    "enum": [
                      "ask",
                      "allow",
                      "deny"
                    ]
                  },
                  {
                    "type": "object",
                    "properties": {
                      "todowrite": {
                        "type": "string",
                        "enum": [
                          "ask",
                          "allow",
                          "deny"
                        ]
                      },
                      "question": {
                        "type": "string",
                        "enum": [
                          "ask",
                          "allow",
                          "deny"
                        ]
                      },
                      "webfetch": {
                        "type": "string",
                        "enum": [
                          "ask",
                          "allow",
                          "deny"
                        ]
                      },
                      "websearch": {
                        "type": "string",
                        "enum": [
                          "ask",
                          "allow",
                          "deny"
                        ]
                      },
                      "doom_loop": {
                        "type": "string",
                        "enum": [
                          "ask",
                          "allow",
                          "deny"
                        ]
                      }
                    },
                    "additionalProperties": {
                      "oneOf": [
                        {
                          "type": "string",
                          "enum": [
                            "ask",
                            "allow",
                            "deny"
                          ]
                        },
                        {
                          "type": "object",
                          "additionalProperties": {
                            "type": "string",
                            "enum": [
                              "ask",
                              "allow",
                              "deny"
                            ]
                          }
                        }
                      ]
                    }
                  }
                ]
              }
            },
            "additionalProperties": true
          }
        }
      }
    }
  ]
}
