{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"github-bytebot-ai--bytebot","slug":"bytebot-ai--bytebot","name":"bytebot","type":"agent","url":"https://www.bytebot.ai/","page_url":"https://unfragile.ai/bytebot-ai--bytebot","categories":["ai-agents"],"tags":["agent","agentic-ai","agents","ai","ai-agents","ai-tools","anthropic","automation","bytebot","computer-use","computer-use-agent","cua","desktop","desktop-automation","docker","gemini","llm","mcp","openai"],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"github-bytebot-ai--bytebot__cap_0","uri":"capability://automation.workflow.natural.language.task.execution.with.observe.act.verify.loop","name":"natural-language-task-execution-with-observe-act-verify-loop","description":"Executes multi-step desktop automation tasks from natural language descriptions by implementing an observe-act-verify cycle where the AgentProcessor polls the desktop state via screenshot, sends observations to an LLM (OpenAI, Anthropic, or Gemini), receives computer actions, executes them through the ComputerUseService, and repeats until task completion. The system maintains full task state in PostgreSQL and broadcasts real-time progress through WebSocket events, enabling both autonomous execution and human intervention via takeover mode.","intents":["I want to automate a multi-step business process like downloading invoices from email and organizing them by date without writing code","I need to execute complex workflows across multiple desktop applications that don't have APIs","I want to see the agent's reasoning and desktop actions in real-time as it completes my task"],"best_for":["Business process automation teams replacing legacy RPA solutions","Non-technical users automating repetitive desktop workflows","Developers building agentic systems that need visual grounding"],"limitations":["Latency per observe-act cycle is ~2-5 seconds depending on LLM provider and screenshot processing","Limited to applications running in the containerized Ubuntu desktop environment; cannot control host OS or external systems","No built-in persistence for long-running tasks across container restarts without external state management","Screenshot-based observation limits accuracy for rapidly changing UIs or high-frequency interactions"],"requires":["Docker runtime for containerized Ubuntu desktop environment","API key for at least one LLM provider (OpenAI, Anthropic, or Google Gemini)","PostgreSQL database for task state persistence","Node.js 18+ for backend services"],"input_types":["natural language task description (string)","uploaded files (PDF, spreadsheet, document)","desktop screenshots (PNG, JPEG)"],"output_types":["task execution status (pending, running, completed, failed)","agent reasoning messages (text)","computer actions log (mouse clicks, keyboard input, file operations)","final task result with artifacts"],"categories":["automation-workflow","planning-reasoning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-bytebot-ai--bytebot__cap_1","uri":"capability://tool.use.integration.multi.provider.llm.integration.with.computer.use.api.support","name":"multi-provider-llm-integration-with-computer-use-api-support","description":"Abstracts LLM provider differences through a unified interface that supports OpenAI, Anthropic, and Google Gemini with native support for their computer-use/vision APIs. The AgentProcessor routes task execution to the configured LLM provider, handles provider-specific function calling schemas, manages token context windows, and implements fallback logic. Each provider integration handles vision input (desktop screenshots), tool/function definitions for computer actions, and streaming response parsing.","intents":["I want to switch between LLM providers without rewriting agent logic","I need to use Anthropic's computer-use API for better desktop understanding","I want to leverage different models' strengths for different task types"],"best_for":["Teams evaluating multiple LLM providers for agent workloads","Builders needing provider flexibility to optimize cost vs. performance","Organizations with multi-cloud or multi-vendor strategies"],"limitations":["Provider-specific API differences require conditional logic; not all providers support identical vision/tool-calling features","Token limits vary by provider and model; context window management is provider-specific","Streaming response parsing differs across providers, adding complexity to real-time message handling","No automatic provider failover; requires manual configuration to switch providers"],"requires":["API key for OpenAI (gpt-4-vision or later) OR Anthropic (claude-3.5-sonnet or later) OR Google Gemini","Environment variable configuration for provider selection and API credentials","NestJS backend service (bytebot-agent) running on port 9991"],"input_types":["task description (string)","desktop screenshot (PNG/JPEG for vision input)","tool/function definitions (JSON schema)"],"output_types":["LLM reasoning text","computer action commands (structured JSON)","streaming response tokens"],"categories":["tool-use-integration","planning-reasoning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-bytebot-ai--bytebot__cap_10","uri":"capability://automation.workflow.password.manager.integration.for.authentication.automation","name":"password-manager-integration-for-authentication-automation","description":"Supports password manager integration (e.g., KeePass, 1Password) to automatically fill authentication credentials during task execution. The agent can request credentials from the password manager, which are injected into login forms without exposing them in task logs or agent messages. This enables secure automation of workflows requiring authentication without hardcoding credentials.","intents":["I want to automate login workflows without storing passwords in task descriptions","I need to securely handle credentials during multi-application workflows","I want the agent to access password manager for authentication without manual intervention"],"best_for":["Organizations automating workflows with sensitive authentication","Teams requiring credential security and audit trails","Builders creating enterprise automation solutions"],"limitations":["Password manager integration is limited to specific tools; not all managers are supported","Credential injection requires manual password manager configuration","No built-in credential rotation or expiration handling","Credentials are stored in plaintext in password manager; security depends on password manager's implementation"],"requires":["Supported password manager (KeePass, 1Password, etc.) running on desktop","Password manager API or CLI integration configured","Credentials pre-stored in password manager with proper naming conventions"],"input_types":["credential request (service name, username hint)","password manager response (username, password)"],"output_types":["injected credentials (into form fields)","authentication status (success/failure)"],"categories":["automation-workflow","safety-moderation"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-bytebot-ai--bytebot__cap_11","uri":"capability://memory.knowledge.agent.message.history.and.reasoning.transparency","name":"agent-message-history-and-reasoning-transparency","description":"Maintains a complete message history for each task, including agent reasoning, tool calls, observations, and user messages. Messages are stored in PostgreSQL with different content types (text, images, tool calls, results) and displayed in the web UI in chronological order. This provides full transparency into the agent's decision-making process and enables debugging of failed tasks.","intents":["I want to see why the agent made a particular decision or took a specific action","I need to debug a failed task by reviewing the agent's reasoning","I want to audit the agent's actions for compliance or quality assurance"],"best_for":["Teams debugging agent behavior and failures","Organizations requiring audit trails for compliance","Builders analyzing agent performance and decision patterns"],"limitations":["Message history grows unbounded; requires manual cleanup or external archival","Large message histories (>1000 messages) may slow down UI rendering","No built-in search or filtering for message history","Sensitive information (credentials, personal data) may be exposed in message history"],"requires":["PostgreSQL database with message storage schema","bytebot-agent service with message persistence","Web UI with message display components"],"input_types":["agent messages (text, images, tool calls)","user messages (task descriptions, feedback)"],"output_types":["message history (chronological list)","message content (text, images, JSON)"],"categories":["memory-knowledge","planning-reasoning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-bytebot-ai--bytebot__cap_12","uri":"capability://automation.workflow.task.scheduling.and.recurring.execution","name":"task-scheduling-and-recurring-execution","description":"Supports basic task scheduling where tasks can be configured to run at specific times or on a recurring basis. The AgentScheduler manages task scheduling logic, persisting schedule configurations to PostgreSQL and triggering task execution at scheduled times. This enables automation of routine workflows without manual intervention.","intents":["I want to run a task every morning to download and process daily reports","I need to schedule a task to run at a specific time without manual triggering","I want to automate routine workflows that occur on a regular schedule"],"best_for":["Teams automating routine, recurring workflows","Organizations with time-based automation requirements","Builders creating scheduled automation pipelines"],"limitations":["Scheduling is basic; no support for complex cron expressions or timezone handling","No built-in retry logic if a scheduled task fails","Scheduling is in-memory; tasks are lost if the service restarts","No distributed scheduling; only works with a single bytebot-agent instance"],"requires":["bytebot-agent service with AgentScheduler enabled","PostgreSQL database for schedule persistence","Task definition with schedule configuration"],"input_types":["schedule configuration (time, frequency, recurrence)","task definition (description, parameters)"],"output_types":["scheduled task object (id, schedule, next_run_time)","execution trigger (when schedule time is reached)"],"categories":["automation-workflow","planning-reasoning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-bytebot-ai--bytebot__cap_2","uri":"capability://automation.workflow.containerized.ubuntu.desktop.environment.with.vnc.access","name":"containerized-ubuntu-desktop-environment-with-vnc-access","description":"Provides an isolated, containerized Ubuntu desktop environment running inside Docker where all desktop automation occurs. The bytebotd NestJS daemon (port 9990) exposes the desktop through a noVNC web client for real-time visual monitoring, handles VNC input tracking to detect human intervention, and manages the lifecycle of desktop applications. The environment includes pre-configured tools (browser, terminal, file manager) and supports password manager integration for authentication flows.","intents":["I want to see exactly what the agent is doing on the desktop in real-time","I need to take over control from the agent if it gets stuck or makes a mistake","I want to run desktop automation in an isolated, reproducible environment without affecting my host OS"],"best_for":["Teams needing visual debugging and monitoring of agent actions","Organizations requiring isolated execution environments for compliance","Developers building desktop automation workflows with visual feedback"],"limitations":["VNC latency adds ~100-500ms to visual feedback depending on network conditions","Desktop environment is limited to Ubuntu; cannot automate Windows-specific applications","Container resource limits (CPU, memory) constrain the number of concurrent applications and task complexity","Input tracking for human takeover detection requires VNC polling, adding overhead"],"requires":["Docker runtime with sufficient resources (minimum 2 CPU cores, 4GB RAM recommended)","VNC client or web browser for noVNC access","Port 9990 exposed for bytebotd daemon communication"],"input_types":["computer action commands (mouse clicks, keyboard input, file operations)","VNC input events (for human takeover detection)"],"output_types":["desktop screenshot (PNG/JPEG)","VNC stream (for real-time visual monitoring)","action execution status (success/failure)"],"categories":["automation-workflow","image-visual"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-bytebot-ai--bytebot__cap_3","uri":"capability://automation.workflow.task.lifecycle.management.with.websocket.real.time.updates","name":"task-lifecycle-management-with-websocket-real-time-updates","description":"Manages the complete lifecycle of automation tasks (creation, queuing, execution, completion, failure) through the TasksService API and TasksGateway WebSocket broadcaster. Tasks are persisted to PostgreSQL with state transitions (pending → running → completed/failed), and all state changes are broadcast in real-time to connected clients via WebSocket events. The system supports task scheduling, file attachment handling, and message history tracking with different content types (text, images, tool calls).","intents":["I want to create, monitor, and manage multiple automation tasks from a web UI or API","I need real-time notifications when task status changes or the agent sends messages","I want to persist task history and audit logs for compliance"],"best_for":["Teams managing multiple concurrent automation workflows","Organizations requiring task audit trails and compliance logging","Builders integrating Bytebot into larger automation platforms"],"limitations":["WebSocket connections are stateful; scaling to many concurrent clients requires Redis pub/sub or similar","Task scheduling is basic (no cron expressions or complex recurrence patterns)","No built-in task prioritization or queue management; all tasks execute sequentially","Message history grows unbounded; requires manual cleanup or external archival"],"requires":["PostgreSQL database with Prisma ORM configured","NestJS backend service (bytebot-agent) with TasksService and TasksGateway","WebSocket client library for real-time updates (Socket.io or native WebSocket)"],"input_types":["task creation payload (description, files, parameters)","task ID (for status queries)"],"output_types":["task object (id, status, created_at, updated_at)","WebSocket events (task.created, task.started, task.completed, message.added)","message history (text, images, tool calls)"],"categories":["automation-workflow","memory-knowledge"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-bytebot-ai--bytebot__cap_4","uri":"capability://data.processing.analysis.file.upload.and.context.injection.for.task.execution","name":"file-upload-and-context-injection-for-task-execution","description":"Enables users to upload files (PDFs, spreadsheets, documents) which are stored and injected into the LLM context during task execution. The system handles file parsing, storage in PostgreSQL (via Prisma), and inclusion in agent messages as base64-encoded content or extracted text. This allows the agent to process documents without downloading them from external sources, reducing task complexity and improving privacy.","intents":["I want to upload a PDF invoice and have the agent extract data from it","I need the agent to reference a spreadsheet while filling out a form","I want to process multiple documents in a single task without manual downloads"],"best_for":["Document processing workflows (invoice extraction, form filling)","Teams handling sensitive files that shouldn't be uploaded to external services","Builders automating workflows with multi-document inputs"],"limitations":["File parsing is limited to basic formats; complex PDFs with images may not extract text accurately","Large files (>10MB) may exceed LLM context windows or cause performance issues","No built-in file format validation; unsupported formats are silently ignored","Files are stored in PostgreSQL as binary blobs, limiting scalability for large-scale document processing"],"requires":["PostgreSQL database with file storage schema","File upload endpoint in bytebot-agent service","LLM provider supporting base64-encoded file content (OpenAI, Anthropic, Gemini)"],"input_types":["file upload (PDF, XLSX, DOCX, TXT, PNG, JPEG)","file metadata (name, size, MIME type)"],"output_types":["file object (id, name, size, storage_path)","extracted text or base64 content for LLM injection"],"categories":["data-processing-analysis","memory-knowledge"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-bytebot-ai--bytebot__cap_5","uri":"capability://automation.workflow.computer.action.execution.with.mouse.keyboard.and.file.operations","name":"computer-action-execution-with-mouse-keyboard-and-file-operations","description":"Executes low-level desktop automation actions (mouse clicks, keyboard input, file operations, screenshot capture) through the ComputerUseService running in the bytebotd daemon. Actions are received as structured JSON commands from the LLM, validated, and executed against the Ubuntu desktop environment. The system tracks action history, handles action failures gracefully, and provides feedback to the agent for the next observation cycle.","intents":["I want the agent to click buttons, type text, and navigate applications","I need to automate file operations like copying, moving, and deleting files","I want the agent to take screenshots to observe the current desktop state"],"best_for":["Desktop automation workflows requiring precise UI interaction","Teams automating legacy applications without APIs","Builders needing low-level control over desktop actions"],"limitations":["Mouse and keyboard automation is brittle; UI changes break action sequences","No OCR or element detection; coordinates must be calculated from screenshots","File operations are limited to the containerized environment; cannot access host OS files","Action execution is synchronous; parallel actions are not supported"],"requires":["bytebotd daemon running in Ubuntu container","X11 or Wayland display server for mouse/keyboard input","File system access within container for file operations"],"input_types":["action command (JSON with type, coordinates, text, file paths)","action parameters (duration, delay, repeat count)"],"output_types":["action execution result (success/failure)","screenshot (PNG/JPEG)","file operation status (created, moved, deleted)"],"categories":["automation-workflow","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-bytebot-ai--bytebot__cap_6","uri":"capability://automation.workflow.human.intervention.and.takeover.mode.with.input.tracking","name":"human-intervention-and-takeover-mode-with-input-tracking","description":"Detects human intervention during task execution by monitoring VNC input events and allows seamless takeover where a human operator can control the desktop while the agent pauses. The system tracks input sources (agent vs. human), maintains task state during takeover, and enables the agent to resume execution after human actions. This is implemented through VNC input event polling and task state management in the TasksService.","intents":["I want to take over if the agent gets stuck or makes a mistake","I need to handle authentication dialogs or unexpected UI states manually","I want to collaborate with the agent, alternating between automated and manual control"],"best_for":["Workflows with unpredictable UI states or authentication challenges","Teams requiring human oversight for compliance or risk management","Builders creating hybrid human-agent automation systems"],"limitations":["Input tracking adds latency (~100-500ms) due to VNC polling overhead","No automatic context preservation during takeover; agent must re-observe desktop state","Takeover detection is event-based; rapid human input may be missed if polling interval is too long","No conflict resolution if agent and human issue conflicting commands simultaneously"],"requires":["VNC client with input event tracking","bytebotd daemon with input tracking enabled","Task state management in TasksService"],"input_types":["VNC input events (mouse, keyboard)","task state (paused, running, takeover)"],"output_types":["takeover status (human in control, agent paused)","desktop state after human actions","task resumption signal"],"categories":["automation-workflow","planning-reasoning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-bytebot-ai--bytebot__cap_7","uri":"capability://tool.use.integration.mcp.endpoint.exposure.for.tool.invocation.and.integration","name":"mcp-endpoint-exposure-for-tool-invocation-and-integration","description":"Exposes the bytebotd desktop service as an MCP (Model Context Protocol) endpoint, allowing external LLM clients and tools to invoke computer actions directly. The MCP integration provides a standardized interface for tool definition and invocation, enabling Bytebot to be used as a backend for other AI systems or integrated into larger MCP-based workflows. This is implemented through an MCP server running in the bytebotd daemon that translates MCP tool calls to ComputerUseService actions.","intents":["I want to use Bytebot as a tool in my own LLM agent or workflow","I need to integrate Bytebot with other MCP-compatible tools and services","I want to expose desktop automation capabilities to external AI systems"],"best_for":["Builders integrating Bytebot into larger agentic systems","Teams using MCP-based tool orchestration frameworks","Organizations building multi-agent workflows with desktop automation"],"limitations":["MCP endpoint is local-only; no built-in authentication or authorization","Tool definitions must be manually synchronized between Bytebot and MCP clients","No built-in rate limiting or request queuing for MCP calls","MCP protocol overhead adds latency compared to direct API calls"],"requires":["bytebotd daemon running with MCP server enabled","MCP client library (e.g., Anthropic SDK with MCP support)","Port 9990 accessible for MCP communication"],"input_types":["MCP tool call (JSON-RPC format)","tool parameters (action type, coordinates, text, etc.)"],"output_types":["MCP tool result (JSON)","action execution status","screenshot or file content"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-bytebot-ai--bytebot__cap_8","uri":"capability://tool.use.integration.rest.and.websocket.api.for.programmatic.task.control","name":"rest-and-websocket-api-for-programmatic-task-control","description":"Exposes a comprehensive REST API (on port 9991) and WebSocket API for programmatic task creation, monitoring, and control. The REST API provides endpoints for task CRUD operations, file uploads, and computer action execution, while the WebSocket API enables real-time event streaming (task status changes, agent messages, desktop updates). This allows external systems and custom frontends to integrate with Bytebot without using the built-in web UI.","intents":["I want to integrate Bytebot into my existing automation platform via API","I need to build a custom frontend or dashboard for task management","I want to programmatically trigger tasks from my application or workflow engine"],"best_for":["Developers building custom integrations with Bytebot","Teams embedding Bytebot into larger automation platforms","Organizations with existing API-driven automation infrastructure"],"limitations":["API documentation is incomplete; requires reading source code for full endpoint details","No built-in API authentication; requires external reverse proxy for security","Rate limiting is not implemented; high-volume requests may overwhelm the service","WebSocket connections are stateful; scaling requires Redis pub/sub or similar"],"requires":["bytebot-agent service running on port 9991","HTTP client library for REST API calls","WebSocket client library for real-time updates"],"input_types":["REST request (JSON payload with task description, files, parameters)","WebSocket subscription (event types to listen for)"],"output_types":["REST response (task object, status code)","WebSocket events (JSON with event type and payload)"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-bytebot-ai--bytebot__cap_9","uri":"capability://automation.workflow.next.js.frontend.with.task.management.and.desktop.viewer","name":"next-js-frontend-with-task-management-and-desktop-viewer","description":"Provides a Next.js 15 web UI (bytebot-ui service on port 9992) with React components for task creation, task list management, task detail viewing, and real-time desktop visualization. The frontend proxies all backend communication (HTTP, WebSocket, VNC) through a custom Express server, eliminating CORS issues and enabling seamless integration. The desktop viewer displays live VNC stream and agent messages, while the task interface supports file uploads and parameter configuration.","intents":["I want a web-based UI to create and monitor automation tasks","I need to see the desktop in real-time while the agent executes tasks","I want to upload files and configure task parameters through a visual interface"],"best_for":["Non-technical users managing automation tasks","Teams needing a centralized dashboard for task monitoring","Organizations deploying Bytebot as a self-hosted service"],"limitations":["VNC streaming latency adds 100-500ms to visual feedback","UI is tightly coupled to Bytebot's backend; customization requires forking","No built-in multi-user support or role-based access control","Desktop viewer performance degrades with high-frequency screen updates"],"requires":["Node.js 18+ for Next.js runtime","bytebot-agent service running on port 9991","bytebotd service running on port 9990","Modern web browser with WebSocket support"],"input_types":["task description (text input)","file uploads (drag-and-drop or file picker)","parameter configuration (form inputs)"],"output_types":["rendered HTML/CSS/JavaScript","VNC stream (for desktop viewer)","WebSocket events (for real-time updates)"],"categories":["automation-workflow","image-visual"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":50,"verified":false,"data_access_risk":"high","permissions":["Docker runtime for containerized Ubuntu desktop environment","API key for at least one LLM provider (OpenAI, Anthropic, or Google Gemini)","PostgreSQL database for task state persistence","Node.js 18+ for backend services","API key for OpenAI (gpt-4-vision or later) OR Anthropic (claude-3.5-sonnet or later) OR Google Gemini","Environment variable configuration for provider selection and API credentials","NestJS backend service (bytebot-agent) running on port 9991","Supported password manager (KeePass, 1Password, etc.) running on desktop","Password manager API or CLI integration configured","Credentials pre-stored in password manager with proper naming conventions"],"failure_modes":["Latency per observe-act cycle is ~2-5 seconds depending on LLM provider and screenshot processing","Limited to applications running in the containerized Ubuntu desktop environment; cannot control host OS or external systems","No built-in persistence for long-running tasks across container restarts without external state management","Screenshot-based observation limits accuracy for rapidly changing UIs or high-frequency interactions","Provider-specific API differences require conditional logic; not all providers support identical vision/tool-calling features","Token limits vary by provider and model; context window management is provider-specific","Streaming response parsing differs across providers, adding complexity to real-time message handling","No automatic provider failover; requires manual configuration to switch providers","Password manager integration is limited to specific tools; not all managers are supported","Credential injection requires manual password manager configuration","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.6798882496716804,"quality":0.5,"ecosystem":0.6000000000000001,"match_graph":0.25,"freshness":0.6,"weights":{"adoption":0.25,"quality":0.25,"ecosystem":0.1,"match_graph":0.28,"freshness":0.12}},"observed_outcomes":{"matches":0,"success_rate":0,"avg_confidence":0,"top_intents":[],"last_matched_at":null},"maintenance":{"status":"active","updated_at":"2026-05-24T12:16:21.549Z","last_scraped_at":"2026-05-03T13:57:16.560Z","last_commit":"2025-09-12T19:35:46Z"},"community":{"stars":10985,"forks":1464,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=bytebot-ai--bytebot","compare_url":"https://unfragile.ai/compare?artifact=bytebot-ai--bytebot"}},"signature":"iLsojK+bqNH096zs5aIWDHTDUM/zmUaONjGY+32J0lYXxCtJcTlYgE+YE/dyJhe44b1W5QxBVwudQrwkCL37BQ==","signedAt":"2026-06-20T03:01:24.533Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/bytebot-ai--bytebot","artifact":"https://unfragile.ai/bytebot-ai--bytebot","verify":"https://unfragile.ai/api/v1/verify?slug=bytebot-ai--bytebot","publicKey":"https://unfragile.ai/api/v1/trust-passport-public-key","spec":"https://unfragile.ai/trust","schema":"https://unfragile.ai/schema.json","docs":"https://unfragile.ai/docs"}}