{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"github-nanobrowser--nanobrowser","slug":"nanobrowser--nanobrowser","name":"nanobrowser","type":"extension","url":"https://nanobrowser.ai","page_url":"https://unfragile.ai/nanobrowser--nanobrowser","categories":["browser-extensions"],"tags":["agent","ai","ai-agents","ai-tools","automation","browser","browser-automation","browser-use","chrome-extension","comet","dia","extension","manus","mariner","multi-agent","n8n","nano","opensource","playwright","web-automation"],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"github-nanobrowser--nanobrowser__cap_0","uri":"capability://planning.reasoning.multi.agent.task.orchestration.with.planner.navigator.collaboration","name":"multi-agent task orchestration with planner-navigator collaboration","description":"Nanobrowser decomposes user natural language requests into structured task plans using a Planner agent, then executes those plans through a Navigator agent that performs granular browser actions. The system uses a message-passing architecture (chrome-extension/src/background/index.ts) where the background script routes commands between agents, maintains execution state, and coordinates action sequencing. The Planner generates step-by-step workflows while the Navigator translates those steps into concrete browser interactions, enabling complex multi-step automation without requiring users to write code.","intents":["I want to automate a complex workflow like filling out forms across multiple websites using natural language","I need to break down a large task into smaller steps that an AI can execute sequentially","I want agents to collaborate where one plans and another executes to handle web automation"],"best_for":["teams automating repetitive web workflows without custom code","non-technical users who want to describe tasks in natural language","developers building multi-step RPA solutions with AI reasoning"],"limitations":["Agent coordination adds latency per task decomposition cycle — each plan-execute loop involves LLM inference","No built-in persistence of task state across browser sessions — requires manual checkpointing for long-running workflows","Limited to single-browser context per extension instance — cannot parallelize across multiple browser windows"],"requires":["Chrome or Edge browser (latest stable version)","API key for at least one supported LLM provider (OpenAI, Anthropic, Gemini, etc.)","JavaScript/TypeScript runtime for background script execution"],"input_types":["natural language task descriptions","user intent strings"],"output_types":["structured task plans (JSON)","execution logs with action sequences","extracted web data from completed tasks"],"categories":["planning-reasoning","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-nanobrowser--nanobrowser__cap_1","uri":"capability://tool.use.integration.provider.agnostic.llm.model.factory.with.runtime.configuration","name":"provider-agnostic llm model factory with runtime configuration","description":"Nanobrowser abstracts LLM provider differences through a factory pattern (createChatModel in chrome-extension/src/background/agent/helper.ts) that maps 11+ providers (OpenAI, Anthropic, Gemini, Ollama, Groq, Cerebras, Azure, OpenRouter, DeepSeek, Grok, Llama) to LangChain chat model implementations. Users configure providers and models via the Options page UI, which persists settings to the storage layer (packages/storage/lib/settings/llmProviders.ts). At runtime, the factory instantiates the correct LangChain ChatModel class with provider-specific parameters (API keys, endpoints, deployment names), enabling seamless provider switching without code changes.","intents":["I want to use different LLM providers (OpenAI, Anthropic, local Ollama) without rewriting automation logic","I need to configure multiple LLM providers and assign different agents to different models","I want to switch between cloud and local LLM providers based on cost or privacy requirements"],"best_for":["developers who want provider flexibility without vendor lock-in","organizations with existing LLM provider contracts (Azure, custom OpenAI-compatible endpoints)","users prioritizing privacy who want to use local models (Ollama) alongside cloud providers"],"limitations":["Provider-specific features (e.g., vision capabilities, tool use schemas) are not normalized — users must handle provider differences in agent logic","Configuration UI does not validate API credentials at setup time — errors only surface during first agent execution","Custom OpenAI-compatible providers require manual base URL and model name entry — no auto-discovery mechanism"],"requires":["Valid API key or endpoint URL for chosen LLM provider","For Ollama: local Ollama instance running on http://localhost:11434 (or custom URL)","For Azure: API key, endpoint URL, deployment name, and API version"],"input_types":["provider type selection (enum)","API credentials (string)","model name (string)","provider-specific parameters (JSON)"],"output_types":["instantiated LangChain ChatModel object","provider configuration metadata"],"categories":["tool-use-integration","memory-knowledge"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-nanobrowser--nanobrowser__cap_10","uri":"capability://automation.workflow.browser.context.and.page.management.with.puppeteer.integration","name":"browser context and page management with puppeteer integration","description":"Nanobrowser manages browser contexts and pages through Puppeteer, maintaining a reference to the current active page and browser instance. The system handles page lifecycle events (navigation, load, close) and maintains DOM snapshots for agent decision-making. The Browser Context and Page Management layer (referenced in Architecture Overview) abstracts Puppeteer's API, providing a simplified interface for agents to query page state, execute JavaScript, and interact with the DOM. This enables agents to understand the current page context before executing actions, reducing errors from stale DOM references.","intents":["I want agents to understand the current page state before executing actions","I need to handle page navigation and load events during automation","I want to extract data from the current page DOM for decision-making"],"best_for":["developers automating complex multi-page workflows","teams building RPA solutions that must handle dynamic page content","users automating sites with heavy JavaScript rendering"],"limitations":["DOM snapshots are point-in-time — rapid page changes can make snapshots stale between capture and action execution","Puppeteer integration adds memory overhead — maintaining page contexts consumes browser resources","No built-in handling for popup windows or new tabs — limited to single-page context per extension","JavaScript execution in page context can be slow for large DOMs — extracting full page state is expensive"],"requires":["Chrome/Edge browser with Puppeteer protocol support","Sufficient memory for maintaining browser context"],"input_types":["page URL (string)","JavaScript code to execute (string)","DOM selector (string)"],"output_types":["page state snapshot (JSON)","extracted data (text, HTML, structured JSON)","JavaScript execution result"],"categories":["automation-workflow","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-nanobrowser--nanobrowser__cap_11","uri":"capability://automation.workflow.executor.based.task.management.with.state.tracking","name":"executor-based task management with state tracking","description":"The Executor (chrome-extension/src/background/agent/executor.ts) manages task execution lifecycle, maintaining state for in-progress tasks and coordinating between the Planner and Navigator agents. It tracks task progress, captures execution logs, and handles errors or task cancellation. The executor maintains a queue of pending actions and executes them sequentially, updating task state after each action. This enables users to monitor task progress through the UI and provides a foundation for resuming interrupted tasks. The executor also captures detailed logs of agent decisions and action results, enabling post-execution analysis and debugging.","intents":["I want to monitor the progress of long-running automation tasks","I need to see detailed logs of what actions were executed and why","I want to cancel a task in progress if something goes wrong"],"best_for":["users running long-running automation workflows who need visibility into progress","developers debugging agent behavior by inspecting execution logs","teams auditing automation for compliance or troubleshooting"],"limitations":["Task state is not persisted across extension restarts — in-progress tasks are lost if the extension crashes","No built-in checkpointing — resuming a cancelled task requires re-executing from the beginning","Execution logs are stored in memory — large logs can consume significant memory for long-running tasks","No built-in rate limiting — rapid task execution can overwhelm the browser or target websites"],"requires":["Background script with executor implementation"],"input_types":["task request (JSON)","action sequence (JSON)"],"output_types":["task state (enum: pending, running, completed, failed, cancelled)","execution log (JSON array)","task result (JSON)"],"categories":["automation-workflow","planning-reasoning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-nanobrowser--nanobrowser__cap_12","uri":"capability://tool.use.integration.options.page.configuration.ui.with.settings.persistence","name":"options page configuration ui with settings persistence","description":"The Options page (pages/options/src/components/ModelSettings.tsx) provides a user-friendly interface for configuring LLM providers, assigning models to agents, and setting domain firewall rules. The UI is built with React and communicates with the storage layer to persist settings. Users can add/remove providers, test API credentials, and preview available models for each provider. The Options page also includes language selection and other extension-wide settings. All configuration changes are immediately persisted to extension storage and take effect on the next task execution.","intents":["I want a visual interface to configure LLM providers without editing JSON files","I need to test my API credentials before using them in automation","I want to see available models for each provider and select which to use"],"best_for":["non-technical users who want to configure Nanobrowser without command-line tools","teams managing multiple LLM provider accounts","users who want to verify API credentials are working before running tasks"],"limitations":["Options page does not validate API credentials in real-time — errors only surface during task execution","No bulk import/export of settings — users must configure each provider individually","Settings are stored locally in extension storage — no cloud sync or backup mechanism","UI does not show current usage or costs — users cannot see how much they've spent on LLM API calls"],"requires":["Chrome/Edge browser with extension UI support","Access to extension Options page (right-click extension icon > Options)"],"input_types":["provider type (enum)","API key (string)","model name (string)","provider-specific parameters (JSON)"],"output_types":["persisted settings (JSON)","configuration validation result"],"categories":["tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-nanobrowser--nanobrowser__cap_2","uri":"capability://automation.workflow.dom.aware.browser.action.execution.with.puppeteer.anti.detection","name":"dom-aware browser action execution with puppeteer anti-detection","description":"The Navigator agent executes browser actions (click, type, scroll, extract text) by translating natural language or planner directives into Puppeteer commands that interact with the live DOM. The system uses Puppeteer integration (chrome-extension/src/background/agent/agents/navigator.ts) with anti-detection measures to avoid triggering bot-detection systems on target websites. Actions are executed against the current browser context and page, with real-time DOM snapshots captured to inform subsequent action decisions. The action system maintains a registry of supported actions (click, fill form, navigate, extract data) that the Navigator can invoke with structured parameters.","intents":["I want to click buttons, fill forms, and extract data from live web pages without writing Puppeteer code","I need to automate interactions that require understanding the current DOM state (e.g., conditional clicks based on visible elements)","I want to avoid triggering anti-bot detection while automating web interactions"],"best_for":["developers automating web scraping and form filling at scale","teams building RPA workflows that must evade bot detection","non-technical users who want to describe browser actions in natural language"],"limitations":["Anti-detection measures are not foolproof — sophisticated bot detection (behavioral analysis, fingerprinting) may still block automation","Action execution is synchronous per step — no parallel action execution within a single page context","Complex JavaScript-heavy sites (SPAs with dynamic rendering) may require explicit waits or retry logic not automatically handled","No built-in handling for multi-tab workflows — limited to single active tab per extension instance"],"requires":["Chrome/Edge browser with Puppeteer protocol support","Target website must be accessible and not behind authentication (unless credentials are provided)","Sufficient page load time for DOM to stabilize before action execution"],"input_types":["action type (string: 'click', 'type', 'scroll', 'extract')","action parameters (selector, text, coordinates)","DOM context (current page state)"],"output_types":["action execution result (success/failure)","extracted data (text, HTML, structured JSON)","updated DOM snapshot"],"categories":["automation-workflow","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-nanobrowser--nanobrowser__cap_3","uri":"capability://memory.knowledge.chat.history.persistence.with.replay.and.bookmarking","name":"chat history persistence with replay and bookmarking","description":"Nanobrowser maintains a persistent chat history stored in the extension's local storage (packages/storage/lib/settings/types.ts) that records user messages, agent responses, and execution logs. The Side Panel Interface displays this history with a replay system that allows users to re-execute previous tasks or inspect what actions were taken. Users can bookmark favorite conversations or task templates, which are stored separately in the Favorites storage layer. The chat history system captures not just text but also metadata (timestamps, agent decisions, action sequences), enabling users to audit automation decisions and reuse successful workflows.","intents":["I want to see a history of all automation tasks I've run and what actions were executed","I need to replay a previous task with the same or modified parameters","I want to save successful automation workflows as templates for future use"],"best_for":["users who run recurring automation tasks and want to reuse previous workflows","teams auditing what automation was performed and when","developers debugging agent behavior by replaying task execution"],"limitations":["Chat history is stored locally in extension storage — no cloud sync across devices","Storage is limited by browser extension storage quotas (typically 10MB per extension)","Replay system re-executes tasks from scratch — does not support resuming from checkpoints mid-workflow","No built-in deduplication or compression of history — large numbers of tasks can degrade UI performance"],"requires":["Chrome/Edge extension storage API access","Sufficient local storage quota (typically 10MB available)"],"input_types":["user chat messages (text)","agent execution logs (JSON)","action sequences (structured data)"],"output_types":["chat history list (JSON array)","bookmarked workflows (JSON)","replay execution logs"],"categories":["memory-knowledge","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-nanobrowser--nanobrowser__cap_4","uri":"capability://text.generation.language.speech.to.text.task.input.with.natural.language.processing","name":"speech-to-text task input with natural language processing","description":"The Side Panel Interface includes a speech-to-text input system that converts user voice commands into text task descriptions, which are then processed by the Planner agent. The system uses the browser's Web Speech API to capture audio and transcribe it into natural language, which is passed to the LLM for task decomposition. This enables hands-free task specification — users can describe complex workflows verbally without typing, and the system converts speech into structured task plans.","intents":["I want to describe automation tasks using voice commands instead of typing","I need to quickly specify a task while my hands are busy with other work","I want to use natural spoken language to trigger complex workflows"],"best_for":["power users who prefer voice input for task specification","accessibility-focused users who cannot type","teams in fast-paced environments where voice is faster than typing"],"limitations":["Speech recognition accuracy depends on microphone quality and background noise — poor audio leads to transcription errors","Web Speech API support varies by browser — not all browsers/OS combinations have reliable speech recognition","No built-in noise cancellation or speaker diarization — multi-speaker environments may produce garbled transcriptions","Transcribed text still requires LLM processing — speech errors propagate to task decomposition"],"requires":["Browser with Web Speech API support (Chrome, Edge, Safari)","Microphone access granted to the extension","Stable internet connection (some speech recognition backends require cloud processing)"],"input_types":["audio stream (microphone input)"],"output_types":["transcribed text (string)","task description (natural language)"],"categories":["text-generation-language","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-nanobrowser--nanobrowser__cap_5","uri":"capability://safety.moderation.url.firewall.and.domain.based.access.control","name":"url firewall and domain-based access control","description":"Nanobrowser implements a firewall system (referenced in Storage and State Management) that restricts which domains the automation agents can access. Users can configure allowed/blocked domains in the Options page, and the background script enforces these restrictions before executing navigation or action commands. This prevents accidental or malicious automation from accessing sensitive sites (e.g., banking, email) without explicit user approval. The firewall operates at the action execution layer — blocked domains are rejected before Puppeteer commands are sent to the browser.","intents":["I want to prevent automation from accidentally accessing sensitive websites like my bank or email","I need to restrict which domains my agents can interact with for security reasons","I want to create a whitelist of approved domains for automation"],"best_for":["security-conscious users running untrusted or experimental automation workflows","organizations with compliance requirements restricting automation scope","developers testing automation logic without risking access to production systems"],"limitations":["Firewall operates at domain level only — cannot restrict access to specific paths or resources within a domain","No built-in logging of blocked access attempts — users cannot audit what was prevented","Firewall can be disabled by users in Options page — provides security through user intent, not technical enforcement","Does not prevent data exfiltration after access is granted — only controls initial navigation"],"requires":["User configuration of allowed/blocked domains in Options page"],"input_types":["domain URL (string)","firewall rule (allow/block enum)"],"output_types":["firewall decision (allow/deny)","blocked action log (optional)"],"categories":["safety-moderation","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-nanobrowser--nanobrowser__cap_6","uri":"capability://tool.use.integration.agent.model.assignment.with.per.agent.llm.selection","name":"agent model assignment with per-agent llm selection","description":"Nanobrowser allows users to assign different LLM models to different agents (Planner and Navigator) through the Model Settings interface (pages/options/src/components/ModelSettings.tsx). The agentModels storage (packages/storage/lib/settings/agentModels.ts) maintains a mapping of agent names to model configurations, enabling users to use a fast/cheap model for the Navigator (which makes many decisions) and a more capable model for the Planner (which requires complex reasoning). At runtime, the agent factory instantiates each agent with its assigned model, allowing fine-grained control over LLM resource allocation.","intents":["I want to use a cheaper/faster model for routine browser actions and a more capable model for complex planning","I need to assign different LLM providers to different agents based on their capabilities","I want to optimize cost by using smaller models where possible and larger models only when needed"],"best_for":["cost-conscious users who want to optimize LLM spending across agents","teams using multiple LLM providers and wanting to leverage each for its strengths","developers tuning agent behavior by experimenting with different model combinations"],"limitations":["No automatic model selection based on task complexity — users must manually configure agent-model mappings","Model assignments are global — cannot vary models per-task or per-workflow","No built-in cost tracking per agent — users cannot easily see which agent consumed the most LLM tokens"],"requires":["At least one LLM provider configured with multiple models available","User configuration in Model Settings UI"],"input_types":["agent name (string: 'planner', 'navigator')","model name (string)","provider type (enum)"],"output_types":["agent-model mapping (JSON)","instantiated agent with assigned model"],"categories":["tool-use-integration","planning-reasoning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-nanobrowser--nanobrowser__cap_7","uri":"capability://tool.use.integration.background.script.message.routing.and.port.based.communication","name":"background script message routing and port-based communication","description":"The background script (chrome-extension/src/background/index.ts) implements a message routing system that handles communication between the Side Panel UI, content scripts, and agent executors. It uses Chrome extension message passing APIs (chrome.runtime.onMessage, chrome.runtime.connect) to establish persistent ports for long-running tasks and route messages between components. The routing system maintains a registry of active ports and task executors, ensuring that responses from agents are delivered back to the correct UI component. This architecture enables asynchronous task execution — the UI can dispatch a task and continue responding to user input while agents work in the background.","intents":["I want the UI to remain responsive while agents execute long-running automation tasks","I need to send task requests from the UI to background agents and receive results asynchronously","I want to support multiple concurrent tasks without blocking the extension UI"],"best_for":["extension developers building responsive UIs for background automation","teams running multiple concurrent automation tasks","users who need to interact with the extension while tasks are executing"],"limitations":["Message passing adds latency per round-trip — each agent decision requires message serialization/deserialization","Port connections are tied to extension lifecycle — if the background script crashes, all active tasks are lost","No built-in message queuing or retry logic — failed messages are not automatically retried","Message size is limited by Chrome extension APIs (typically 64MB per message, but practical limits are lower)"],"requires":["Chrome/Edge extension runtime with message passing support","Content scripts injected into target pages"],"input_types":["task request message (JSON)","agent command (JSON)"],"output_types":["task result message (JSON)","execution log (JSON)"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-nanobrowser--nanobrowser__cap_8","uri":"capability://code.generation.editing.monorepo.structure.with.shared.packages.and.extension.modules","name":"monorepo structure with shared packages and extension modules","description":"Nanobrowser is organized as a TypeScript monorepo using pnpm workspaces, with separate packages for storage (packages/storage), shared utilities, and the main Chrome extension module (chrome-extension). The storage package provides a unified interface for persisting settings, chat history, and agent configurations. The extension module contains the background script, content scripts, UI components (Side Panel, Options page), and agent implementations. This modular structure enables code reuse across components and simplifies testing — storage logic can be tested independently of UI logic, and agents can be tested without the full extension context.","intents":["I want to contribute to Nanobrowser by adding new features without understanding the entire codebase","I need to reuse storage and utility logic across multiple extension components","I want to test agent logic independently from the Chrome extension runtime"],"best_for":["open-source contributors to Nanobrowser","developers building extensions that want to reuse Nanobrowser's storage layer","teams maintaining complex extension codebases with multiple modules"],"limitations":["Monorepo adds build complexity — requires pnpm and understanding of workspace dependencies","Shared packages must maintain backward compatibility — changes to storage schema can break existing installations","Module boundaries are not enforced at runtime — developers can create circular dependencies or tight coupling","Testing requires setting up multiple package contexts — not all tests can run in isolation"],"requires":["pnpm package manager (npm/yarn not supported for this monorepo)","Node.js 18+ for build tooling","Understanding of TypeScript and monorepo patterns"],"input_types":["source code (TypeScript)","package configuration (package.json)"],"output_types":["built extension (Chrome extension bundle)","compiled packages (JavaScript)"],"categories":["code-generation-editing","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-nanobrowser--nanobrowser__cap_9","uri":"capability://text.generation.language.internationalization.i18n.with.multi.language.ui.support","name":"internationalization (i18n) with multi-language ui support","description":"Nanobrowser includes an internationalization system that enables the UI (Side Panel, Options page) to be displayed in multiple languages. The i18n system uses language-specific resource files to provide translations for UI strings, and the extension detects the user's browser language to select the appropriate language. Users can also manually override the language in the Options page. This enables Nanobrowser to be accessible to non-English speakers without requiring separate builds or installations.","intents":["I want to use Nanobrowser in my native language, not English","I need to deploy Nanobrowser to international teams with different language preferences","I want to contribute translations for Nanobrowser to support more languages"],"best_for":["international teams using Nanobrowser","non-English speakers who prefer native language UIs","open-source contributors who want to localize Nanobrowser"],"limitations":["Only UI strings are translated — agent responses and task descriptions are in the language of the LLM model","Adding new languages requires updating translation files — no automatic translation mechanism","Translation maintenance burden grows with each new language — outdated translations can confuse users","Right-to-left (RTL) languages may require additional UI layout adjustments not currently implemented"],"requires":["Browser language detection support (all modern browsers)","Translation files for desired languages"],"input_types":["browser language preference (string: 'en', 'es', 'fr', etc.)","translation resource files (JSON)"],"output_types":["localized UI strings (text)"],"categories":["text-generation-language"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":43,"verified":false,"data_access_risk":"high","permissions":["Chrome or Edge browser (latest stable version)","API key for at least one supported LLM provider (OpenAI, Anthropic, Gemini, etc.)","JavaScript/TypeScript runtime for background script execution","Valid API key or endpoint URL for chosen LLM provider","For Ollama: local Ollama instance running on http://localhost:11434 (or custom URL)","For Azure: API key, endpoint URL, deployment name, and API version","Chrome/Edge browser with Puppeteer protocol support","Sufficient memory for maintaining browser context","Background script with executor implementation","Chrome/Edge browser with extension UI support"],"failure_modes":["Agent coordination adds latency per task decomposition cycle — each plan-execute loop involves LLM inference","No built-in persistence of task state across browser sessions — requires manual checkpointing for long-running workflows","Limited to single-browser context per extension instance — cannot parallelize across multiple browser windows","Provider-specific features (e.g., vision capabilities, tool use schemas) are not normalized — users must handle provider differences in agent logic","Configuration UI does not validate API credentials at setup time — errors only surface during first agent execution","Custom OpenAI-compatible providers require manual base URL and model name entry — no auto-discovery mechanism","DOM snapshots are point-in-time — rapid page changes can make snapshots stale between capture and action execution","Puppeteer integration adds memory overhead — maintaining page contexts consumes browser resources","No built-in handling for popup windows or new tabs — limited to single-page context per extension","JavaScript execution in page context can be slow for large DOMs — extracting full page state is expensive","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.3614412881377773,"quality":0.5,"ecosystem":0.6000000000000001,"match_graph":0.25,"freshness":0.6,"weights":{"adoption":0.25,"quality":0.25,"ecosystem":0.15,"match_graph":0.23,"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:22.062Z","last_scraped_at":"2026-05-03T13:57:16.560Z","last_commit":"2025-11-24T11:10:03Z"},"community":{"stars":12857,"forks":1355,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=nanobrowser--nanobrowser","compare_url":"https://unfragile.ai/compare?artifact=nanobrowser--nanobrowser"}},"signature":"hH1fHTeoylgFXd9JZBpH9bK0lSXfQ2W592Vf7+3OgDFyv2H4DhAUr8+Q6oUXiOdJLDcW3etWL9stV2KGtjT9CQ==","signedAt":"2026-06-19T19:11:50.616Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/nanobrowser--nanobrowser","artifact":"https://unfragile.ai/nanobrowser--nanobrowser","verify":"https://unfragile.ai/api/v1/verify?slug=nanobrowser--nanobrowser","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"}}