AgentsBooks · Schema
AgentAppManifest
Declarative description of a whole multi-agent application. One document describing many agents, the handoffs between them, and an optional team grouping — provisioned idempotently via ``POST /api/agent-apps``.
Artificial IntelligenceAgencySoftware-as-a-ServiceAutomationPlatformCompany
Properties
| Name | Type | Description |
|---|---|---|
| app_id | string | |
| name | string | |
| description | object | |
| version | string | |
| agents | array | |
| connections | array | |
| team | object | |
| webhook | object |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/agentsbooks-com/json-schema/agentsbooks-com-agent-app-manifest-schema.json",
"title": "AgentAppManifest",
"description": "Declarative description of a whole multi-agent application.\n\nOne document describing many agents, the handoffs between them, and an\noptional team grouping — provisioned idempotently via\n``POST /api/agent-apps``.",
"x-generated": "2026-11-01",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/agentsbooks-com-openapi.json#/components/schemas/AgentAppManifest",
"$defs": {
"AbilityAccessSchema": {
"description": "Per-ability access level for the agent.\n\nEach ability can be: private (owner only), members (owner + the agent's\nteam/org co-members — chat only), public (anyone), friends (owner +\nfriend-agent owners), public_paid (paid subscribers).\n\n``members`` sits between ``private`` and ``friends``: it is what an owner\nflips to let the people they already share a team or org with talk to the\nagent. Only ``chat`` reads it; on any other\nability it behaves as ``private``.",
"properties": {
"feed": {
"default": "private",
"title": "Feed",
"type": "string"
},
"chat": {
"default": "private",
"title": "Chat",
"type": "string"
},
"friends": {
"default": "private",
"title": "Friends",
"type": "string"
},
"memory": {
"default": "private",
"title": "Memory",
"type": "string"
}
},
"title": "AbilityAccessSchema",
"type": "object"
},
"AgentAppAgentSpec": {
"additionalProperties": true,
"description": "One agent within an App Manifest.\n\nA thin declarative wrapper around the character-create shape. ``local_id``\nis the manifest-local handle referenced by connections/team; the\nprovisioned agent's id defaults to ``{app_id}--{local_id}`` unless an\nexplicit ``id`` is given. Reuses the existing hub sub-schemas so anyone who\nknows the character API already knows this.",
"properties": {
"local_id": {
"title": "Local Id",
"type": "string"
},
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Id"
},
"name": {
"title": "Name",
"type": "string"
},
"full_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Full Name"
},
"role": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Role"
},
"tagline": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Tagline"
},
"bio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Bio"
},
"skills": {
"items": {
"type": "string"
},
"title": "Skills",
"type": "array"
},
"tools": {
"items": {
"type": "string"
},
"title": "Tools",
"type": "array"
},
"knowledge_domains": {
"items": {
"type": "string"
},
"title": "Knowledge Domains",
"type": "array"
},
"personality": {
"anyOf": [
{
"$ref": "#/$defs/PersonalitySchema"
},
{
"type": "null"
}
],
"default": null
},
"appearance": {
"anyOf": [
{
"$ref": "#/$defs/AppearanceSchema"
},
{
"type": "null"
}
],
"default": null
},
"brain": {
"anyOf": [
{
"$ref": "#/$defs/BrainSchema"
},
{
"type": "null"
}
],
"default": null
},
"heart": {
"anyOf": [
{
"$ref": "#/$defs/HeartSchema"
},
{
"type": "null"
}
],
"default": null
},
"control": {
"anyOf": [
{
"$ref": "#/$defs/ControlSchema"
},
{
"type": "null"
}
],
"default": null
},
"visibility": {
"anyOf": [
{
"$ref": "#/$defs/VisibilitySchema"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"local_id",
"name"
],
"title": "AgentAppAgentSpec",
"type": "object"
},
"AgentAppConnection": {
"description": "A directed handoff edge between two agents in the app, by ``local_id``.\n\nProvisioning turns each connection into reciprocal accepted\n:class:`FriendEntry` edges on both agents.",
"properties": {
"from": {
"title": "From",
"type": "string"
},
"to": {
"title": "To",
"type": "string"
},
"relationship_type": {
"default": "friend",
"title": "Relationship Type",
"type": "string"
},
"permissions": {
"items": {
"type": "string"
},
"title": "Permissions",
"type": "array"
},
"shared_abilities": {
"items": {
"type": "string"
},
"title": "Shared Abilities",
"type": "array"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"required": [
"from",
"to"
],
"title": "AgentAppConnection",
"type": "object"
},
"AgentAppTeamSpec": {
"description": "Optional team grouping for the app's agents.\n\nAn empty ``member_local_ids`` means \"all agents in the manifest\".",
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"icon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Icon"
},
"member_local_ids": {
"items": {
"type": "string"
},
"title": "Member Local Ids",
"type": "array"
}
},
"required": [
"name"
],
"title": "AgentAppTeamSpec",
"type": "object"
},
"AgentAppWebhook": {
"description": "Optional lifecycle webhook for an app.\n\nWhen set, AgentsBooks POSTs a JSON event to ``url`` on provision / update /\nteardown (best-effort, never blocks the response). When ``secret`` is set,\nthe body is signed with an ``X-AgentsBooks-Signature`` HMAC-SHA256 header.",
"properties": {
"url": {
"title": "Url",
"type": "string"
},
"secret": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Secret"
},
"events": {
"items": {
"type": "string"
},
"title": "Events",
"type": "array"
}
},
"required": [
"url"
],
"title": "AgentAppWebhook",
"type": "object"
},
"AppearanceSchema": {
"properties": {
"seed": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Seed"
},
"age_range": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Age Range"
},
"gender": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Gender"
},
"ethnicity": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ethnicity"
},
"build": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Build"
},
"hair": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Hair"
},
"facial_hair": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Facial Hair"
},
"eyes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Eyes"
},
"style": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Style"
},
"avatar_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Avatar Url"
},
"accessories": {
"items": {
"type": "string"
},
"title": "Accessories",
"type": "array"
},
"avatar_prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Avatar Prompt"
},
"photos": {
"items": {
"type": "string"
},
"title": "Photos",
"type": "array"
}
},
"title": "AppearanceSchema",
"type": "object"
},
"ApprovalGateDef": {
"description": "Human-in-the-loop approval gate on a single task.\n\nDeclares that the task must pause for human sign-off before performing a\ngated (often irreversible) action. The runtime injects a STOP contract into\nthe prompt; the run pauses on the emitted sentinel, an approval is opened,\nand a follow-up run of the same task resumes on approval.\n\n``approvers`` are agent ids (the existing human-approval quorum operates on\nagents). When empty and ``requires_approval`` is True, the dispatcher\nresolves it to the owning agent itself at gate-open time.",
"properties": {
"requires_approval": {
"default": false,
"title": "Requires Approval",
"type": "boolean"
},
"approval_prompt": {
"default": "",
"title": "Approval Prompt",
"type": "string"
},
"approvers": {
"items": {
"type": "string"
},
"title": "Approvers",
"type": "array"
},
"min_approvals": {
"default": 1,
"minimum": 1,
"title": "Min Approvals",
"type": "integer"
},
"timeout_seconds": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Timeout Seconds"
},
"on_reject": {
"default": "abandon",
"enum": [
"abandon",
"notify_only"
],
"title": "On Reject",
"type": "string"
}
},
"title": "ApprovalGateDef",
"type": "object"
},
"BrainSchema": {
"properties": {
"agent_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Agent Type"
},
"openclaw_fork": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Openclaw Fork"
},
"llm_provider": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Llm Provider"
},
"llm_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Llm Model"
},
"temperature": {
"anyOf": [
{
"maximum": 2,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": 0.7,
"title": "Temperature"
},
"max_tokens": {
"anyOf": [
{
"maximum": 128000,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": 4096,
"title": "Max Tokens"
},
"system_prompt_override": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "System Prompt Override"
},
"mcps": {
"items": {
"$ref": "#/$defs/MCPServerConfig"
},
"title": "Mcps",
"type": "array"
},
"plugins": {
"items": {
"$ref": "#/$defs/PluginConfig"
},
"title": "Plugins",
"type": "array"
},
"skills": {
"items": {
"type": "string"
},
"title": "Skills",
"type": "array"
},
"custom_skill_urls": {
"items": {
"type": "string"
},
"title": "Custom Skill Urls",
"type": "array"
},
"custom_mcp_urls": {
"items": {
"type": "string"
},
"title": "Custom Mcp Urls",
"type": "array"
},
"custom_plugin_urls": {
"items": {
"type": "string"
},
"title": "Custom Plugin Urls",
"type": "array"
},
"hooks": {
"items": {
"$ref": "#/$defs/HookConfig"
},
"title": "Hooks",
"type": "array"
}
},
"title": "BrainSchema",
"type": "object"
},
"ControlChannel": {
"description": "A communication/control channel for the agent.",
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"type": {
"title": "Type",
"type": "string"
},
"config": {
"additionalProperties": true,
"title": "Config",
"type": "object"
},
"enabled": {
"default": true,
"title": "Enabled",
"type": "boolean"
}
},
"required": [
"name",
"type"
],
"title": "ControlChannel",
"type": "object"
},
"ControlSchema": {
"description": "Agent control — communication channels.",
"properties": {
"channels": {
"items": {
"$ref": "#/$defs/ControlChannel"
},
"title": "Channels",
"type": "array"
},
"default_channel": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Default Channel"
}
},
"title": "ControlSchema",
"type": "object"
},
"HeartSchema": {
"description": "Agent tasks & triggers — defines executable tasks with trigger conditions.",
"properties": {
"heartbeat_interval": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Heartbeat Interval"
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Timezone"
},
"tasks": {
"items": {
"$ref": "#/$defs/TaskDefinition"
},
"title": "Tasks",
"type": "array"
}
},
"title": "HeartSchema",
"type": "object"
},
"HookConfig": {
"description": "Configuration for an agent lifecycle hook.",
"properties": {
"event": {
"title": "Event",
"type": "string"
},
"action": {
"title": "Action",
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"enabled": {
"default": true,
"title": "Enabled",
"type": "boolean"
}
},
"required": [
"event",
"action"
],
"title": "HookConfig",
"type": "object"
},
"MCPServerConfig": {
"description": "Configuration for a Model Context Protocol server.",
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url"
},
"env": {
"additionalProperties": {
"type": "string"
},
"title": "Env",
"type": "object"
},
"enabled": {
"default": true,
"title": "Enabled",
"type": "boolean"
}
},
"required": [
"name"
],
"title": "MCPServerConfig",
"type": "object"
},
"PersonalitySchema": {
"properties": {
"traits": {
"items": {
"type": "string"
},
"title": "Traits",
"type": "array"
},
"communication_style": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Communication Style"
},
"humor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Humor"
},
"energy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Energy"
},
"temperament": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Temperament"
}
},
"title": "PersonalitySchema",
"type": "object"
},
"PluginConfig": {
"description": "Configuration for an agent plugin.",
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Version"
},
"config": {
"additionalProperties": true,
"title": "Config",
"type": "object"
},
"enabled": {
"default": true,
"title": "Enabled",
"type": "boolean"
}
},
"required": [
"name"
],
"title": "PluginConfig",
"type": "object"
},
"QuorumConfigDef": {
"description": "Quorum spec for a ``runtime: human_approval`` task.",
"properties": {
"min_approvals": {
"minimum": 1,
"title": "Min Approvals",
"type": "integer"
},
"approver_agent_ids": {
"items": {
"type": "string"
},
"minItems": 1,
"title": "Approver Agent Ids",
"type": "array"
},
"timeout_seconds": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Timeout Seconds"
},
"fallback_agent_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Fallback Agent Id"
}
},
"required": [
"min_approvals",
"approver_agent_ids"
],
"title": "QuorumConfigDef",
"type": "object"
},
"RatingSummary": {
"description": "Denormalized rating aggregate stored on an agent or task document.\n\nKept in sync with the `ratings` subcollection whenever a rating is written\nor deleted — lets card / grid views read aggregate stars without paying the\ncost of streaming the full subcollection.",
"properties": {
"average": {
"default": 0.0,
"maximum": 5,
"minimum": 0,
"title": "Average",
"type": "number"
},
"count": {
"default": 0,
"minimum": 0,
"title": "Count",
"type": "integer"
}
},
"title": "RatingSummary",
"type": "object"
},
"TaskActiveWindow": {
"description": "Clock window (in the agent's timezone) inside which a scheduled task\nmay fire. Fires whose wall-clock time falls outside [start, end) are\nskipped. ``days`` limits firing to specific weekdays (0=Sun..6=Sat);\nempty means every day.",
"properties": {
"start": {
"default": "09:00",
"title": "Start",
"type": "string"
},
"end": {
"default": "18:00",
"title": "End",
"type": "string"
},
"days": {
"items": {
"type": "integer"
},
"title": "Days",
"type": "array"
}
},
"title": "TaskActiveWindow",
"type": "object"
},
"TaskArtifactStore": {
"description": "Where task execution artifacts are saved.",
"properties": {
"type": {
"title": "Type",
"type": "string"
},
"connection": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Connection"
},
"config": {
"additionalProperties": true,
"title": "Config",
"type": "object"
},
"enabled": {
"default": true,
"title": "Enabled",
"type": "boolean"
}
},
"required": [
"type"
],
"title": "TaskArtifactStore",
"type": "object"
},
"TaskDefinition": {
"description": "A defined task — instructions, triggers, tools, runtime, artifacts, and memory.",
"properties": {
"task_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Task Id"
},
"order": {
"default": 0,
"title": "Order",
"type": "integer"
},
"name": {
"title": "Name",
"type": "string"
},
"prompt": {
"default": "",
"title": "Prompt",
"type": "string"
},
"autonomy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Autonomy"
},
"skip_next_run_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Skip Next Run At"
},
"variables": {
"additionalProperties": {
"type": "string"
},
"title": "Variables",
"type": "object"
},
"variable_types": {
"additionalProperties": {
"type": "string"
},
"title": "Variable Types",
"type": "object"
},
"triggers": {
"items": {
"$ref": "#/$defs/TaskTrigger"
},
"title": "Triggers",
"type": "array"
},
"tools": {
"items": {
"$ref": "#/$defs/TaskTool"
},
"title": "Tools",
"type": "array"
},
"runtime": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Runtime"
},
"runtime_mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Runtime Mode"
},
"model_override": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Model Override"
},
"openrouter_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Openrouter Model"
},
"docker_image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Docker Image"
},
"docker_command": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Docker Command"
},
"shell_command": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Shell Command"
},
"workflow_entry": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Workflow Entry"
},
"api_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Api Url"
},
"artifact_stores": {
"items": {
"$ref": "#/$defs/TaskArtifactStore"
},
"title": "Artifact Stores",
"type": "array"
},
"output_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Output Path"
},
"memory_namespace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Memory Namespace"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"enabled": {
"default": true,
"title": "Enabled",
"type": "boolean"
},
"public": {
"default": true,
"title": "Public",
"type": "boolean"
},
"selected_secrets": {
"items": {
"type": "string"
},
"title": "Selected Secrets",
"type": "array"
},
"selected_connections": {
"items": {
"type": "string"
},
"title": "Selected Connections",
"type": "array"
},
"output_sharing": {
"anyOf": [
{
"$ref": "#/$defs/TaskOutputSharing"
},
{
"type": "null"
}
],
"default": null
},
"social_posting": {
"anyOf": [
{
"$ref": "#/$defs/TaskSocialPosting"
},
{
"type": "null"
}
],
"default": null
},
"post_to_feed": {
"default": true,
"title": "Post To Feed",
"type": "boolean"
},
"email_enabled": {
"default": false,
"title": "Email Enabled",
"type": "boolean"
},
"rating_summary": {
"anyOf": [
{
"$ref": "#/$defs/RatingSummary"
},
{
"type": "null"
}
],
"default": null
},
"service_enabled": {
"default": false,
"title": "Service Enabled",
"type": "boolean"
},
"public_title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
# --- truncated at 32 KB (45 KB total) ---
# Full source: https://artifacts.apis.io/agentsbooks-com/json-schema/agentsbooks-com-agent-app-manifest-schema.json
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/agentsbooks-com-agent-app-manifest"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.