{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"github-grinev--opencode-telegram-bot","slug":"grinev--opencode-telegram-bot","name":"opencode-telegram-bot","type":"agent","url":"https://github.com/grinev/opencode-telegram-bot","page_url":"https://unfragile.ai/grinev--opencode-telegram-bot","categories":["ai-agents","observability"],"tags":["ai-agent","autonomous-agent","coding-agent","developer-tools","grammy","nodejs","openclaw","openclaw-alternative","opencode","telegram","telegrambot","typescript"],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"github-grinev--opencode-telegram-bot__cap_0","uri":"capability://tool.use.integration.voice.to.code.prompt.submission.with.stt.tts.pipeline","name":"voice-to-code prompt submission with stt/tts pipeline","description":"Accepts voice messages via Telegram, transcribes them to text using configurable STT providers (Whisper, Google Cloud Speech-to-Text, or local alternatives), sends the transcribed prompt to OpenCode as a coding task, and streams back responses with optional TTS synthesis for voice playback. The pipeline integrates grammy's voice message handling with the @opencode-ai/sdk's event stream, buffering audio chunks and managing provider-specific authentication and format conversion.","intents":["I want to send voice commands to my AI coding agent from my phone without typing","I need to hear the AI's response read aloud while I'm away from my desk","I want to use natural speech to describe code changes without context switching to a keyboard"],"best_for":["mobile-first developers who prefer voice interaction","teams managing remote coding tasks from field or travel","developers with accessibility needs for voice-based workflows"],"limitations":["STT accuracy depends on provider choice and audio quality; local models may have higher latency than cloud providers","TTS synthesis adds 1-3 seconds per response message; not suitable for real-time interactive debugging","Voice message size limited by Telegram's 50MB file upload constraint","No built-in speaker identification; single-user bot design assumes one authenticated user per instance"],"requires":["Telegram Bot API token with message_handler permissions","OpenCode server running locally (localhost:8000 by default)","STT provider credentials (Whisper API key, Google Cloud Speech-to-Text service account, or local Whisper model)","Optional TTS provider (Google Cloud Text-to-Speech, ElevenLabs, or local TTS engine)","Node.js 20+ with grammy and @opencode-ai/sdk packages"],"input_types":["Telegram voice message (OGG Opus codec, up to 50MB)","Text transcription from STT pipeline"],"output_types":["Transcribed text prompt sent to OpenCode","Audio file (MP3 or OGG) returned via Telegram if TTS enabled","Text response from AI agent"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-grinev--opencode-telegram-bot__cap_1","uri":"capability://automation.workflow.real.time.sse.event.aggregation.and.pinned.status.message","name":"real-time sse event aggregation and pinned status message","description":"Consumes Server-Sent Events (SSE) from the OpenCode SDK's event stream, aggregates multi-event sequences (task start, model selection, context consumption, file changes, task completion) into a single coherent state, and maintains a persistent pinned Telegram message that updates in-place with live metrics: token usage, context window consumption, list of modified files, and agent status. Uses a SummaryAggregator class to deduplicate events, calculate deltas, and format structured data into Telegram's MarkdownV2 syntax.","intents":["I want to see real-time progress of my AI coding task without spamming the chat with individual events","I need to monitor token consumption and context usage to understand cost and performance","I want a single glanceable status indicator that shows which files changed and what the agent is currently doing"],"best_for":["developers running long-running AI coding tasks (5+ minutes) who need progress visibility","teams tracking token budgets and model usage across multiple concurrent tasks","users managing multiple OpenCode projects and needing unified status across sessions"],"limitations":["Pinned message updates are rate-limited by Telegram API (max ~1 update per second); rapid event bursts may cause message lag","MarkdownV2 formatting has strict escaping rules; special characters in file paths or error messages require careful sanitization","No historical event log; pinned message only shows current state, not event timeline","SSE connection drops require manual reconnection; no automatic retry with exponential backoff built-in"],"requires":["OpenCode server with SSE event stream support (via @opencode-ai/sdk)","Telegram Bot API token with message_edit permissions","Active Telegram chat with bot (message_id for pinning)","Node.js 20+ with grammy and @opencode-ai/sdk"],"input_types":["OpenCode SSE events (JSON: task_started, model_selected, context_updated, file_changed, task_completed)","Telegram chat context (chat_id, message_id for pinning)"],"output_types":["Formatted Telegram message (MarkdownV2) with embedded metrics and file list","Pinned message in Telegram chat (updated in-place, not new messages)"],"categories":["automation-workflow","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-grinev--opencode-telegram-bot__cap_10","uri":"capability://automation.workflow.daemon.mode.execution.with.systemd.integration","name":"daemon mode execution with systemd integration","description":"Supports running the bot as a background daemon process on Linux/macOS using systemd or similar process managers. Provides configuration templates and setup guides for systemd service files, environment variable management, and log rotation. Enables the bot to start automatically on system boot and restart on failure, making it suitable for always-on local execution.","intents":["I want the bot to run continuously in the background without keeping a terminal open","I want the bot to automatically restart if it crashes","I want to run the bot as a systemd service on my Linux machine"],"best_for":["developers running the bot on a dedicated machine or server","teams with always-on local OpenCode execution requirements","users who want to set up the bot once and forget about it"],"limitations":["Systemd integration is Linux-specific; macOS and Windows require alternative process managers","Daemon mode requires elevated privileges (sudo) to install systemd service files","Log management must be configured separately; logs can grow large without rotation","No built-in monitoring or alerting; users must set up external monitoring for daemon health"],"requires":["Linux system with systemd (Ubuntu 24.04 LTS or similar)","Node.js 20+ installed globally","Sudo access to install systemd service files",".env file with Telegram token and OpenCode configuration"],"input_types":["Systemd service file template","Environment variables (.env file)"],"output_types":["Running systemd service","Log files (journalctl or file-based)","Automatic restarts on failure"],"categories":["automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-grinev--opencode-telegram-bot__cap_11","uri":"capability://safety.moderation.error.handling.and.recovery.with.user.friendly.error.messages","name":"error handling and recovery with user-friendly error messages","description":"Implements comprehensive error handling for common failure scenarios: OpenCode server unavailable, invalid session/project, task submission errors, SSE connection drops, and API rate limits. Translates technical errors into user-friendly Telegram messages with suggested remediation steps (e.g., 'Server is offline, please check localhost:8000'). Includes retry logic for transient failures and graceful degradation when features are unavailable.","intents":["I want to understand why my task failed and how to fix it","I want the bot to automatically retry if the connection drops","I want clear error messages instead of cryptic stack traces"],"best_for":["developers troubleshooting bot connectivity issues","teams with unreliable network or server availability","users who want self-service error recovery without contacting support"],"limitations":["Error messages are generic; specific error details are logged but not exposed to users for security","Retry logic is basic; no exponential backoff or circuit breaker pattern","Some errors (e.g., invalid OpenCode configuration) cannot be recovered automatically","Error logging is in-memory; logs are lost if the bot restarts"],"requires":["Telegram Bot API token","Node.js 20+ with error handling middleware","Logging infrastructure (optional, for debugging)"],"input_types":["Errors from OpenCode SDK, Telegram API, or internal logic"],"output_types":["User-friendly error message in Telegram","Suggested remediation steps","Internal error logs (for debugging)"],"categories":["safety-moderation","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-grinev--opencode-telegram-bot__cap_12","uri":"capability://automation.workflow.cli.argument.parsing.and.environment.configuration","name":"cli argument parsing and environment configuration","description":"Provides a command-line interface (CLI) for starting the bot with configurable options: Telegram token, OpenCode server URL, STT/TTS provider selection, locale, and logging level. Parses arguments using a custom args parser, validates configuration, and loads environment variables from .env files. Supports both global npm installation (via npx) and direct execution, with clear error messages for missing or invalid configuration.","intents":["I want to start the bot with custom configuration without editing code","I want to use different STT/TTS providers for different deployments","I want to set the bot's language and logging level from the command line"],"best_for":["developers deploying the bot in different environments (dev, staging, production)","teams with multiple OpenCode server instances and wanting to switch between them","users who want to customize bot behavior without modifying source code"],"limitations":["CLI arguments are not validated against OpenCode server; invalid URLs are only caught at runtime","No interactive configuration wizard; users must know all required options upfront","Environment variables override CLI arguments; precedence is not always clear","No configuration file support beyond .env; complex setups require multiple environment variables"],"requires":["Node.js 20+","Telegram Bot API token","OpenCode server URL (default: localhost:8000)"],"input_types":["CLI arguments (--token, --opencode-url, --stt-provider, --locale, --log-level)",".env file with environment variables"],"output_types":["Validated configuration object","Bot startup with applied configuration","Error messages for invalid configuration"],"categories":["automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-grinev--opencode-telegram-bot__cap_2","uri":"capability://planning.reasoning.interactive.agent.question.handling.with.inline.button.state.machine","name":"interactive agent question handling with inline button state machine","description":"Implements a state machine that intercepts OpenCode agent questions and permission requests (e.g., 'Should I modify this file?', 'Which model should I use?') via SSE events, renders them as Telegram inline keyboard buttons, captures user responses, and sends them back to OpenCode via the SDK's interaction API. The Interaction Guard class manages state transitions, prevents concurrent interactions, and ensures responses are routed to the correct agent context (session, project, task).","intents":["I want to approve or deny file modifications from my phone without interrupting the agent","I need to select between multiple model options when the agent asks, without returning to my desktop","I want to handle agent permission requests inline without breaking the task execution flow"],"best_for":["developers running autonomous coding agents that require human-in-the-loop decisions","teams with approval workflows for code changes (e.g., security-sensitive modifications)","users managing multiple concurrent tasks and needing to respond to agent questions on-demand"],"limitations":["Inline button responses are ephemeral; if the user doesn't respond within Telegram's session timeout (~5 minutes), the button becomes inactive","No timeout enforcement on the bot side; if OpenCode waits indefinitely for a response, the task will hang","State machine assumes single-user interaction; concurrent requests from multiple users will cause state conflicts","Complex multi-step interactions (e.g., 'choose file, then choose action') require sequential button presses, not parallel options"],"requires":["OpenCode server with agent question/permission request event support","Telegram Bot API token with callback_query permissions","Active Telegram chat with bot","Node.js 20+ with grammy and @opencode-ai/sdk"],"input_types":["OpenCode SSE events (agent_question, permission_request with options)","Telegram callback_query from inline button press"],"output_types":["Telegram message with inline keyboard (buttons for each option)","User response sent back to OpenCode via SDK interaction API","Updated message or confirmation in Telegram chat"],"categories":["planning-reasoning","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-grinev--opencode-telegram-bot__cap_3","uri":"capability://automation.workflow.session.and.project.context.switching.with.git.worktree.management","name":"session and project context switching with git worktree management","description":"Provides commands to list, create, and switch between OpenCode sessions and projects, mirroring the TUI's session management. Internally uses the OpenCode SDK to query available projects, manage git worktrees (creating isolated working directories for parallel work), and maintain session state (current project, branch, uncommitted changes). Stores session context in memory and persists it across bot restarts via environment variables or a local state file.","intents":["I want to switch between multiple coding projects from my phone without managing git branches manually","I need to create a new session for a different feature branch without losing my current work","I want to see which files are uncommitted in my current session before submitting a new task"],"best_for":["developers managing multiple concurrent feature branches or projects","teams using git worktrees for parallel development workflows","users who need to context-switch between projects frequently and want to avoid manual git operations"],"limitations":["Session state is single-user; the bot maintains one active session per instance, not per Telegram user","Git worktree creation requires local disk space; creating many worktrees can consume significant storage","No conflict detection; if the user modifies files in two worktrees simultaneously, git merge conflicts may occur","Session persistence is in-memory; restarting the bot loses the current session context unless explicitly saved"],"requires":["OpenCode server with project and session management API","Git repository with worktree support (Git 2.15+)","Telegram Bot API token","Node.js 20+ with @opencode-ai/sdk"],"input_types":["Telegram command (/session_list, /session_create, /session_switch)","Project name or session ID from user input"],"output_types":["List of available projects and sessions (formatted as Telegram message)","Confirmation of session switch or creation","Current session context (project, branch, uncommitted files)"],"categories":["automation-workflow","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-grinev--opencode-telegram-bot__cap_4","uri":"capability://automation.workflow.natural.language.task.scheduling.with.cron.expression.generation","name":"natural language task scheduling with cron expression generation","description":"Accepts natural language scheduling descriptions (e.g., 'every Monday at 9am', 'daily at 3pm', 'once tomorrow at 2pm') via Telegram message, parses them using a scheduling library (likely node-cron or similar), generates cron expressions, and registers recurring or one-time tasks with the OpenCode server. The bot stores scheduled task definitions and executes them on a schedule, submitting the associated coding prompt to OpenCode at the specified time.","intents":["I want to schedule a recurring code review or refactoring task to run automatically every week","I need to set up a one-time coding task to run tomorrow morning without being at my desk","I want to automate routine maintenance tasks (e.g., dependency updates) on a fixed schedule"],"best_for":["developers with routine maintenance tasks (dependency updates, code reviews, linting)","teams running scheduled CI/CD-like workflows without a full CI/CD pipeline","users who want to automate coding tasks without managing cron jobs directly"],"limitations":["Natural language parsing is heuristic-based; ambiguous descriptions (e.g., 'next week') may be misinterpreted","Scheduled tasks are stored in-memory; restarting the bot loses all scheduled tasks unless persisted to disk","No timezone support; scheduling assumes the bot's local timezone, which may not match the user's","Task execution is single-threaded; if a scheduled task runs while another task is in progress, it will queue or skip"],"requires":["OpenCode server with task submission API","Telegram Bot API token","Node.js 20+ with node-cron or similar scheduling library","Persistent storage (optional) for scheduled task definitions"],"input_types":["Telegram message with natural language scheduling description","Coding prompt or task description"],"output_types":["Confirmation of scheduled task with cron expression","Task execution at scheduled time (submits prompt to OpenCode)","Notification in Telegram when scheduled task completes"],"categories":["automation-workflow","planning-reasoning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-grinev--opencode-telegram-bot__cap_5","uri":"capability://code.generation.editing.code.file.attachment.delivery.with.diff.rendering","name":"code file attachment delivery with diff rendering","description":"Captures modified files from OpenCode's file_changed SSE events, retrieves the full file content or diffs via the SDK, and delivers them to the user as Telegram file attachments (for binary or large files) or inline code blocks (for small text files). Supports syntax highlighting via Telegram's code block formatting and generates human-readable diffs showing before/after changes. Handles large files by splitting them into multiple messages or offering download links.","intents":["I want to review the code changes the AI made without opening my IDE","I need to download modified files directly to my phone for offline review","I want to see a diff of what changed without reading the entire file"],"best_for":["developers reviewing AI-generated code changes on mobile","teams with code review workflows that need mobile-friendly diffs","users who want to download generated code directly to their phone"],"limitations":["Telegram message size limit (4096 characters for text) requires splitting large files into multiple messages","Syntax highlighting is limited to Telegram's supported languages; some languages may not render correctly","Binary files cannot be displayed inline; must be delivered as attachments, which may be blocked by Telegram's content filter","Diff rendering is text-based; no visual side-by-side comparison like in IDEs"],"requires":["OpenCode server with file content API","Telegram Bot API token with file upload permissions","Node.js 20+ with @opencode-ai/sdk"],"input_types":["OpenCode SSE file_changed events with file path and content","User request to download or review a specific file"],"output_types":["Telegram message with inline code block (for small text files)","Telegram file attachment (for binary or large files)","Diff in text format showing before/after changes"],"categories":["code-generation-editing","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-grinev--opencode-telegram-bot__cap_6","uri":"capability://tool.use.integration.agent.and.model.selection.with.keyboard.ui","name":"agent and model selection with keyboard ui","description":"Exposes OpenCode's available agents (e.g., 'architect', 'coder', 'reviewer') and models (e.g., 'gpt-4', 'claude-3') via Telegram inline keyboard buttons, allowing users to select their preferred agent mode and model before submitting a task. Stores the selected agent and model in session state and applies them to all subsequent tasks until changed. Integrates with OpenCode's agent configuration API to fetch available options and validate selections.","intents":["I want to switch between different AI agents (architect vs coder) for different types of tasks","I need to use a specific model (e.g., GPT-4 for complex tasks, GPT-3.5 for simple ones) based on cost/performance trade-offs","I want to see what agents and models are available without consulting documentation"],"best_for":["developers using multiple OpenCode agents for different task types","teams managing model costs and wanting to choose cheaper models for routine tasks","users experimenting with different agents and models to find optimal configurations"],"limitations":["Agent and model selection is global per session; cannot override per-task without adding complexity","Keyboard UI requires multiple button presses to change agent/model; not suitable for rapid switching","No cost estimation; users cannot see token costs before selecting a model","Agent availability depends on OpenCode server configuration; not all agents/models may be available in all environments"],"requires":["OpenCode server with agent and model configuration API","Telegram Bot API token with callback_query permissions","Node.js 20+ with @opencode-ai/sdk"],"input_types":["Telegram command (/agent, /model) or callback_query from keyboard button","User selection from available options"],"output_types":["Telegram message with inline keyboard showing available agents/models","Confirmation of selected agent/model","Updated session state with new selection"],"categories":["tool-use-integration","planning-reasoning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-grinev--opencode-telegram-bot__cap_7","uri":"capability://text.generation.language.multi.locale.internationalization.with.dynamic.dictionary.loading","name":"multi-locale internationalization with dynamic dictionary loading","description":"Implements i18n support via a dictionary-based system that loads locale-specific strings from JSON files, allowing the bot to render all Telegram messages (commands, responses, errors, keyboard labels) in the user's preferred language. Supports dynamic locale switching per user and includes a contribution guide for adding new locales. Uses a key-based lookup system (e.g., 'task.started', 'error.no_session') to manage translations without hardcoding strings.","intents":["I want to use the bot in my native language instead of English","I want to contribute translations for a new language to help other developers","I want the bot to automatically detect my Telegram language preference and respond accordingly"],"best_for":["international teams using the bot in non-English environments","open-source contributors wanting to add language support","users with accessibility needs for non-English interfaces"],"limitations":["Translation quality depends on community contributions; some languages may have incomplete or outdated translations","Dynamic locale switching requires storing user preferences, which adds complexity to state management","Telegram's language detection is not always accurate; users may need to manually set their preferred language","RTL languages (Arabic, Hebrew) are not fully supported; Telegram's MarkdownV2 has limited RTL formatting options"],"requires":["Telegram Bot API token","Node.js 20+ with i18n library (likely i18next or similar)","JSON locale files in src/locales/ directory"],"input_types":["User's Telegram language preference (from Telegram API)","Manual locale selection via command"],"output_types":["All bot messages rendered in selected locale","Keyboard labels and command descriptions in user's language"],"categories":["text-generation-language","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-grinev--opencode-telegram-bot__cap_8","uri":"capability://tool.use.integration.local.opencode.server.integration.with.sse.event.streaming","name":"local opencode server integration with sse event streaming","description":"Establishes a persistent connection to a locally running OpenCode server (default: localhost:8000) using the @opencode-ai/sdk, consuming Server-Sent Events (SSE) to receive real-time updates on task progress, model usage, file changes, and agent questions. Handles connection lifecycle (connect, reconnect on failure, graceful shutdown), event parsing, and error handling. Translates SDK events into Telegram messages and maintains session context across the connection.","intents":["I want my Telegram bot to communicate with my local OpenCode server without exposing it to the internet","I need real-time updates on my AI coding tasks as they progress","I want to run OpenCode locally and control it from my phone securely"],"best_for":["developers running OpenCode locally and wanting mobile control without public APIs","teams with security requirements that prohibit cloud-based task management","users who want to keep all AI execution and data on their local machine"],"limitations":["Requires OpenCode server to be running and accessible on localhost; if the server crashes, the bot loses connectivity","SSE connection is not encrypted by default; if the bot and server are on different machines, use HTTPS/TLS","No automatic reconnection with exponential backoff; connection drops require manual restart or basic retry logic","Event stream is unidirectional; the bot cannot push updates back to the server (only via SDK API calls)"],"requires":["OpenCode server running locally (Node.js 20+, default port 8000)","Node.js 20+ with @opencode-ai/sdk package","Network connectivity between bot and server (localhost or LAN)"],"input_types":["OpenCode SSE events (JSON: task_started, model_selected, context_updated, file_changed, task_completed, agent_question)"],"output_types":["Telegram messages with task progress, metrics, and results","Pinned status message with real-time metrics","File attachments with code changes"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-grinev--opencode-telegram-bot__cap_9","uri":"capability://tool.use.integration.command.based.task.submission.with.prompt.context.preservation","name":"command-based task submission with prompt context preservation","description":"Accepts user prompts via Telegram messages (text or voice-transcribed), packages them with current session context (project, branch, uncommitted files, selected agent/model), and submits them to OpenCode as a task via the SDK. Preserves context across multiple messages by maintaining session state and allowing users to reference previous tasks or files. Handles prompt validation, context assembly, and error reporting.","intents":["I want to send a coding task to OpenCode and have it automatically use my current project and branch","I want to reference files from previous tasks without re-specifying the full context","I want to submit a task and immediately see progress updates in Telegram"],"best_for":["developers submitting ad-hoc coding tasks from their phone","teams with iterative workflows where tasks build on previous work","users who want to avoid manual context setup for each task"],"limitations":["Prompt length is limited by Telegram's message size (4096 characters); longer prompts must be split across multiple messages","Context preservation is in-memory; if the bot restarts, session context is lost","No prompt history or search; users cannot retrieve previous prompts without manual logging","Context assembly is automatic but may include irrelevant files; users cannot selectively exclude files"],"requires":["OpenCode server with task submission API","Telegram Bot API token","Active session with project and branch selected","Node.js 20+ with @opencode-ai/sdk"],"input_types":["Telegram message (text or voice-transcribed)","Current session context (project, branch, agent, model)"],"output_types":["Task submission to OpenCode with assembled context","Task ID and confirmation in Telegram","Real-time progress updates via SSE events"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":45,"verified":false,"data_access_risk":"high","permissions":["Telegram Bot API token with message_handler permissions","OpenCode server running locally (localhost:8000 by default)","STT provider credentials (Whisper API key, Google Cloud Speech-to-Text service account, or local Whisper model)","Optional TTS provider (Google Cloud Text-to-Speech, ElevenLabs, or local TTS engine)","Node.js 20+ with grammy and @opencode-ai/sdk packages","OpenCode server with SSE event stream support (via @opencode-ai/sdk)","Telegram Bot API token with message_edit permissions","Active Telegram chat with bot (message_id for pinning)","Node.js 20+ with grammy and @opencode-ai/sdk","Linux system with systemd (Ubuntu 24.04 LTS or similar)"],"failure_modes":["STT accuracy depends on provider choice and audio quality; local models may have higher latency than cloud providers","TTS synthesis adds 1-3 seconds per response message; not suitable for real-time interactive debugging","Voice message size limited by Telegram's 50MB file upload constraint","No built-in speaker identification; single-user bot design assumes one authenticated user per instance","Pinned message updates are rate-limited by Telegram API (max ~1 update per second); rapid event bursts may cause message lag","MarkdownV2 formatting has strict escaping rules; special characters in file paths or error messages require careful sanitization","No historical event log; pinned message only shows current state, not event timeline","SSE connection drops require manual reconnection; no automatic retry with exponential backoff built-in","Systemd integration is Linux-specific; macOS and Windows require alternative process managers","Daemon mode requires elevated privileges (sudo) to install systemd service files","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.38573370605906826,"quality":0.5,"ecosystem":0.7000000000000001,"match_graph":0.25,"freshness":0.75,"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.550Z","last_scraped_at":"2026-05-03T13:57:09.058Z","last_commit":"2026-05-02T22:56:15Z"},"community":{"stars":579,"forks":104,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=grinev--opencode-telegram-bot","compare_url":"https://unfragile.ai/compare?artifact=grinev--opencode-telegram-bot"}},"signature":"GR3o0ddB/9cJio6tXYBcernhjuvN1kqRQ3OuuzKIz42BECzwILOUQKnz+mnZMCjptSXV+DPzF1MSCfdb6tLiAA==","signedAt":"2026-06-22T01:47:42.594Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/grinev--opencode-telegram-bot","artifact":"https://unfragile.ai/grinev--opencode-telegram-bot","verify":"https://unfragile.ai/api/v1/verify?slug=grinev--opencode-telegram-bot","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"}}