{"role": "session_meta", "tools": [{"type": "function", "function": {"name": "browser_back", "description": "Navigate back to the previous page in browser history. Requires browser_navigate to be called first.", "parameters": {"type": "object", "properties": {}}}}, {"type": "function", "function": {"name": "browser_cdp", "description": "Send a raw Chrome DevTools Protocol (CDP) command. Escape hatch for browser operations not covered by browser_navigate, browser_click, browser_console, etc.\n\n**Requires a reachable CDP endpoint.** Available when the user has run '/browser connect' to attach to a running Chrome, or when 'browser.cdp_url' is set in config.yaml. Not currently wired up for cloud backends (Browserbase, Browser Use, Firecrawl) — those expose CDP per session but live-session routing is a follow-up. Camofox is REST-only and will never support CDP. If the tool is in your toolset at all, a CDP endpoint is already reachable.\n\n**CDP method reference:** https://chromedevtools.github.io/devtools-protocol/ — use web_extract on a method's URL (e.g. '/tot/Page/#method-handleJavaScriptDialog') to look up parameters and return shape.\n\n**Common patterns:**\n- List tabs: method='Target.getTargets', params={}\n- Handle a native JS dialog: method='Page.handleJavaScriptDialog', params={'accept': true, 'promptText': ''}, target_id=\n- Get all cookies: method='Network.getAllCookies', params={}\n- Eval in a specific tab: method='Runtime.evaluate', params={'expression': '...', 'returnByValue': true}, target_id=\n- Set viewport for a tab: method='Emulation.setDeviceMetricsOverride', params={'width': 1280, 'height': 720, 'deviceScaleFactor': 1, 'mobile': false}, target_id=\n\n**Usage rules:**\n- Browser-level methods (Target.*, Browser.*, Storage.*): omit target_id and frame_id.\n- Page-level methods (Page.*, Runtime.*, DOM.*, Emulation.*, Network.* scoped to a tab): pass target_id from Target.getTargets.\n- **Cross-origin iframe scope** (Runtime.evaluate inside an OOPIF, Page.* targeting a frame target, etc.): pass frame_id from the browser_snapshot frame_tree output. This routes through the CDP supervisor's live connection — the only reliable way on Browserbase where stateless CDP calls hit signed-URL expiry.\n- Each stateless call (without frame_id) is independent — sessions and event subscriptions do not persist between calls. For stateful workflows, prefer the dedicated browser tools or use frame_id routing.", "parameters": {"type": "object", "properties": {"method": {"type": "string", "description": "CDP method name, e.g. 'Target.getTargets', 'Runtime.evaluate', 'Page.handleJavaScriptDialog'."}, "params": {"type": "object", "description": "Method-specific parameters as a JSON object. Omit or pass {} for methods that take no parameters.", "properties": {}, "additionalProperties": true}, "target_id": {"type": "string", "description": "Optional. Target/tab ID from Target.getTargets result (each entry's 'targetId'). Use for page-level methods at the top-level tab scope. Mutually exclusive with frame_id."}, "frame_id": {"type": "string", "description": "Optional. Out-of-process iframe (OOPIF) frame_id from browser_snapshot.frame_tree.children[] where is_oopif=true. When set, routes the call through the CDP supervisor's live session for that iframe. Essential for Runtime.evaluate inside cross-origin iframes, especially on Browserbase where fresh per-call CDP connections can't keep up with signed URL rotation. For same-origin iframes, use parent contentWindow/contentDocument from Runtime.evaluate at the top-level page instead."}, "timeout": {"type": "number", "description": "Timeout in seconds (default 30, max 300).", "default": 30}}, "required": ["method"]}}}, {"type": "function", "function": {"name": "browser_click", "description": "Click on an element identified by its ref ID from the snapshot (e.g., '@e5'). The ref IDs are shown in square brackets in the snapshot output. Requires browser_navigate and browser_snapshot to be called first.", "parameters": {"type": "object", "properties": {"ref": {"type": "string", "description": "The element reference from the snapshot (e.g., '@e5', '@e12')"}}, "required": ["ref"]}}}, {"type": "function", "function": {"name": "browser_console", "description": "Get browser console output and JavaScript errors from the current page. Returns console.log/warn/error/info messages and uncaught JS exceptions. Use this to detect silent JavaScript errors, failed API calls, and application warnings. Requires browser_navigate to be called first. When 'expression' is provided, evaluates JavaScript in the page context and returns the result — use this for DOM inspection, reading page state, or extracting data programmatically.", "parameters": {"type": "object", "properties": {"clear": {"type": "boolean", "default": false, "description": "If true, clear the message buffers after reading"}, "expression": {"type": "string", "description": "JavaScript expression to evaluate in the page context. Runs in the browser like DevTools console — full access to DOM, window, document. Return values are serialized to JSON. Example: 'document.title' or 'document.querySelectorAll(\"a\").length'"}}}}}, {"type": "function", "function": {"name": "browser_dialog", "description": "Respond to a native JavaScript dialog (alert / confirm / prompt / beforeunload) that is currently blocking the page.\n\n**Workflow:** call ``browser_snapshot`` first — if a dialog is open, it appears in the ``pending_dialogs`` field with ``id``, ``type``, and ``message``. Then call this tool with ``action='accept'`` or ``action='dismiss'``.\n\n**Prompt dialogs:** pass ``prompt_text`` to supply the response string. Ignored for alert/confirm/beforeunload.\n\n**Multiple dialogs:** if more than one dialog is queued (rare — happens when a second dialog fires while the first is still open), pass ``dialog_id`` from the snapshot to disambiguate.\n\n**Availability:** only present when a CDP-capable backend is attached — Browserbase sessions, local Chrome via ``/browser connect``, or ``browser.cdp_url`` in config.yaml. Not available on Camofox (REST-only) or the default Playwright local browser (CDP port is hidden).", "parameters": {"type": "object", "properties": {"action": {"type": "string", "enum": ["accept", "dismiss"], "description": "'accept' clicks OK / returns the prompt text. 'dismiss' clicks Cancel / returns null from prompt(). For ``beforeunload`` dialogs: 'accept' allows the navigation, 'dismiss' keeps the page."}, "prompt_text": {"type": "string", "description": "Response string for a ``prompt()`` dialog. Ignored for other dialog types. Defaults to empty string."}, "dialog_id": {"type": "string", "description": "Specific dialog to respond to, from ``browser_snapshot.pending_dialogs[].id``. Required only when multiple dialogs are queued."}}, "required": ["action"]}}}, {"type": "function", "function": {"name": "browser_get_images", "description": "Get a list of all images on the current page with their URLs and alt text. Useful for finding images to analyze with the vision tool. Requires browser_navigate to be called first.", "parameters": {"type": "object", "properties": {}}}}, {"type": "function", "function": {"name": "browser_navigate", "description": "Navigate to a URL in the browser. Initializes the session and loads the page. Must be called before other browser tools. For simple information retrieval, prefer web_search or web_extract (faster, cheaper). For plain-text endpoints — URLs ending in .md, .txt, .json, .yaml, .yml, .csv, .xml, raw.githubusercontent.com, or any documented API endpoint — prefer curl via the terminal tool or web_extract; the browser stack is overkill and much slower for these. Use browser tools when you need to interact with a page (click, fill forms, dynamic content). Returns a compact page snapshot with interactive elements and ref IDs — no need to call browser_snapshot separately after navigating.", "parameters": {"type": "object", "properties": {"url": {"type": "string", "description": "The URL to navigate to (e.g., 'https://example.com')"}}, "required": ["url"]}}}, {"type": "function", "function": {"name": "browser_press", "description": "Press a keyboard key. Useful for submitting forms (Enter), navigating (Tab), or keyboard shortcuts. Requires browser_navigate to be called first.", "parameters": {"type": "object", "properties": {"key": {"type": "string", "description": "Key to press (e.g., 'Enter', 'Tab', 'Escape', 'ArrowDown')"}}, "required": ["key"]}}}, {"type": "function", "function": {"name": "browser_scroll", "description": "Scroll the page in a direction. Use this to reveal more content that may be below or above the current viewport. Requires browser_navigate to be called first.", "parameters": {"type": "object", "properties": {"direction": {"type": "string", "enum": ["up", "down"], "description": "Direction to scroll"}}, "required": ["direction"]}}}, {"type": "function", "function": {"name": "browser_snapshot", "description": "Get a text-based snapshot of the current page's accessibility tree. Returns interactive elements with ref IDs (like @e1, @e2) for browser_click and browser_type. full=false (default): compact view with interactive elements. full=true: complete page content. Snapshots over 8000 chars are truncated or LLM-summarized. Requires browser_navigate first. Note: browser_navigate already returns a compact snapshot — use this to refresh after interactions that change the page, or with full=true for complete content.", "parameters": {"type": "object", "properties": {"full": {"type": "boolean", "description": "If true, returns complete page content. If false (default), returns compact view with interactive elements only.", "default": false}}}}}, {"type": "function", "function": {"name": "browser_type", "description": "Type text into an input field identified by its ref ID. Clears the field first, then types the new text. Requires browser_navigate and browser_snapshot to be called first.", "parameters": {"type": "object", "properties": {"ref": {"type": "string", "description": "The element reference from the snapshot (e.g., '@e3')"}, "text": {"type": "string", "description": "The text to type into the field"}}, "required": ["ref", "text"]}}}, {"type": "function", "function": {"name": "browser_vision", "description": "Take a screenshot of the current page and analyze it with vision AI. Use this when you need to visually understand what's on the page - especially useful for CAPTCHAs, visual verification challenges, complex layouts, or when the text snapshot doesn't capture important visual information. Returns both the AI analysis and a screenshot_path that you can share with the user by including MEDIA: in your response. Requires browser_navigate to be called first.", "parameters": {"type": "object", "properties": {"question": {"type": "string", "description": "What you want to know about the page visually. Be specific about what you're looking for."}, "annotate": {"type": "boolean", "default": false, "description": "If true, overlay numbered [N] labels on interactive elements. Each [N] maps to ref @eN for subsequent browser commands. Useful for QA and spatial reasoning about page layout."}}, "required": ["question"]}}}, {"type": "function", "function": {"name": "clarify", "description": "Ask the user a question when you need clarification, feedback, or a decision before proceeding. Supports two modes:\n\n1. **Multiple choice** — provide up to 4 choices. The user picks one or types their own answer via a 5th 'Other' option.\n2. **Open-ended** — omit choices entirely. The user types a free-form response.\n\nUse this tool when:\n- The task is ambiguous and you need the user to choose an approach\n- You want post-task feedback ('How did that work out?')\n- You want to offer to save a skill or update memory\n- A decision has meaningful trade-offs the user should weigh in on\n\nDo NOT use this tool for simple yes/no confirmation of dangerous commands (the terminal tool handles that). Prefer making a reasonable default choice yourself when the decision is low-stakes.", "parameters": {"type": "object", "properties": {"question": {"type": "string", "description": "The question to present to the user."}, "choices": {"type": "array", "items": {"type": "string"}, "maxItems": 4, "description": "Up to 4 answer choices. Omit this parameter entirely to ask an open-ended question. When provided, the UI automatically appends an 'Other (type your answer)' option."}}, "required": ["question"]}}}, {"type": "function", "function": {"name": "cronjob", "description": "Manage scheduled cron jobs with a single compressed tool.\n\nUse action='create' to schedule a new job from a prompt or one or more skills.\nUse action='list' to inspect jobs.\nUse action='update', 'pause', 'resume', 'remove', or 'run' to manage an existing job.\n\nTo stop a job the user no longer wants: first action='list' to find the job_id, then action='remove' with that job_id. Never guess job IDs — always list first.\n\nJobs run in a fresh session with no current-chat context, so prompts must be self-contained.\nIf skills are provided on create, the future cron run loads those skills in order, then follows the prompt as the task instruction.\nOn update, passing skills=[] clears attached skills.\n\nNOTE: The agent's final response is auto-delivered to the target. Put the primary\nuser-facing content in the final response. Cron jobs run autonomously with no user\npresent — they cannot ask questions or request clarification.\n\nImportant safety rule: cron-run sessions should not recursively schedule more cron jobs.", "parameters": {"type": "object", "properties": {"action": {"type": "string", "description": "One of: create, list, update, pause, resume, remove, run"}, "job_id": {"type": "string", "description": "Required for update/pause/resume/remove/run"}, "prompt": {"type": "string", "description": "For create: the full self-contained prompt. If skills are also provided, this becomes the task instruction paired with those skills."}, "schedule": {"type": "string", "description": "For create/update: '30m', 'every 2h', '0 9 * * *', or ISO timestamp"}, "name": {"type": "string", "description": "Optional human-friendly name"}, "repeat": {"type": "integer", "description": "Optional repeat count. Omit for defaults (once for one-shot, forever for recurring)."}, "deliver": {"type": "string", "description": "Omit this parameter to auto-deliver back to the current chat and topic (recommended). Auto-detection preserves thread/topic context. Only set explicitly when the user asks to deliver somewhere OTHER than the current conversation. Values: 'origin' (same as omitting), 'local' (no delivery, save only), or platform:chat_id:thread_id for a specific destination. Examples: 'telegram:-1001234567890:17585', 'discord:#engineering', 'sms:+15551234567'. WARNING: 'platform:chat_id' without :thread_id loses topic targeting."}, "skills": {"type": "array", "items": {"type": "string"}, "description": "Optional ordered list of skill names to load before executing the cron prompt. On update, pass an empty array to clear attached skills."}, "model": {"type": "object", "description": "Optional per-job model override. If provider is omitted, the current main provider is pinned at creation time so the job stays stable.", "properties": {"provider": {"type": "string", "description": "Provider name (e.g. 'openrouter', 'anthropic'). Omit to use and pin the current provider."}, "model": {"type": "string", "description": "Model name (e.g. 'anthropic/claude-sonnet-4', 'claude-sonnet-4')"}}, "required": ["model"]}, "script": {"type": "string", "description": "Optional path to a Python script that runs before each cron job execution. Its stdout is injected into the prompt as context. Use for data collection and change detection. Relative paths resolve under ~/.hermes/scripts/. On update, pass empty string to clear."}, "context_from": {"type": "array", "items": {"type": "string"}, "description": "Optional job ID or list of job IDs whose most recent completed output is injected into the prompt as context before each run. Use this to chain cron jobs: job A collects data, job B processes it. Each entry must be a valid job ID (from cronjob action='list'). Note: injects the most recent completed output — does not wait for upstream jobs running in the same tick. On update, pass an empty array to clear."}, "enabled_toolsets": {"type": "array", "items": {"type": "string"}, "description": "Optional list of toolset names to restrict the job's agent to (e.g. [\"web\", \"terminal\", \"file\", \"delegation\"]). When set, only tools from these toolsets are loaded, significantly reducing input token overhead. When omitted, all default tools are loaded. Infer from the job's prompt — e.g. use \"web\" if it calls web_search, \"terminal\" if it runs scripts, \"file\" if it reads files, \"delegation\" if it calls delegate_task. On update, pass an empty array to clear."}, "workdir": {"type": "string", "description": "Optional absolute path to run the job from. When set, AGENTS.md / CLAUDE.md / .cursorrules from that directory are injected into the system prompt, and the terminal/file/code_exec tools use it as their working directory — useful for running a job inside a specific project repo. Must be an absolute path that exists. When unset (default), preserves the original behaviour: no project context files, tools use the scheduler's cwd. On update, pass an empty string to clear. Jobs with workdir run sequentially (not parallel) to keep per-job directories isolated."}}, "required": ["action"]}}}, {"type": "function", "function": {"name": "delegate_task", "description": "Spawn one or more subagents to work on tasks in isolated contexts. Each subagent gets its own conversation, terminal session, and toolset. Only the final summary is returned -- intermediate tool results never enter your context window.\n\nTWO MODES (one of 'goal' or 'tasks' is required):\n1. Single task: provide 'goal' (+ optional context, toolsets)\n2. Batch (parallel): provide 'tasks' array with up to delegation.max_concurrent_children items (default 3, configurable via config.yaml, no hard ceiling). All run concurrently and results are returned together. Nested delegation requires role='orchestrator' and delegation.max_spawn_depth >= 2.\n\nWHEN TO USE delegate_task:\n- Reasoning-heavy subtasks (debugging, code review, research synthesis)\n- Tasks that would flood your context with intermediate data\n- Parallel independent workstreams (research A and B simultaneously)\n\nWHEN NOT TO USE (use these instead):\n- Mechanical multi-step work with no reasoning needed -> use execute_code\n- Single tool call -> just call the tool directly\n- Tasks needing user interaction -> subagents cannot use clarify\n- Durable long-running work that must outlive the current turn -> use cronjob (action='create') or terminal(background=True, notify_on_complete=True) instead. delegate_task runs SYNCHRONOUSLY inside the parent turn: if the parent is interrupted (user sends a new message, /stop, /new) the child is cancelled with status='interrupted' and its work is discarded. Children cannot continue in the background.\n\nIMPORTANT:\n- Subagents have NO memory of your conversation. Pass all relevant info (file paths, error messages, constraints) via the 'context' field.\n- If the user is writing in a non-English language, or asked for output in a specific language / tone / style, say so in 'context' (e.g. \"respond in Chinese\", \"return output in Japanese\"). Otherwise subagents default to English and their summaries will contaminate your final reply with the wrong language.\n- Subagent summaries are SELF-REPORTS, not verified facts. A subagent that claims \"uploaded successfully\" or \"file written\" may be wrong. For operations with external side-effects (HTTP POST/PUT, remote writes, file creation at shared paths, publishing), require the subagent to return a verifiable handle (URL, ID, absolute path, HTTP status) and verify it yourself — fetch the URL, stat the file, read back the content — before telling the user the operation succeeded.\n- Leaf subagents (role='leaf', the default) CANNOT call: delegate_task, clarify, memory, send_message, execute_code.\n- Orchestrator subagents (role='orchestrator') retain delegate_task so they can spawn their own workers, but still cannot use clarify, memory, send_message, or execute_code. Orchestrators are bounded by delegation.max_spawn_depth (default 2) and can be disabled globally via delegation.orchestrator_enabled=false.\n- Each subagent gets its own terminal session (separate working directory and state).\n- Results are always returned as an array, one entry per task.", "parameters": {"type": "object", "properties": {"goal": {"type": "string", "description": "What the subagent should accomplish. Be specific and self-contained -- the subagent knows nothing about your conversation history."}, "context": {"type": "string", "description": "Background information the subagent needs: file paths, error messages, project structure, constraints. The more specific you are, the better the subagent performs."}, "toolsets": {"type": "array", "items": {"type": "string"}, "description": "Toolsets to enable for this subagent. Default: inherits your enabled toolsets. Available toolsets: 'browser', 'cronjob', 'discord', 'discord_admin', 'feishu_doc', 'feishu_drive', 'file', 'homeassistant', 'image_gen', 'kanban', 'search', 'session_search', 'skills', 'spotify', 'terminal', 'todo', 'tts', 'vision', 'web', 'yuanbao'. Common patterns: ['terminal', 'file'] for code work, ['web'] for research, ['browser'] for web interaction, ['terminal', 'file', 'web'] for full-stack tasks."}, "tasks": {"type": "array", "items": {"type": "object", "properties": {"goal": {"type": "string", "description": "Task goal"}, "context": {"type": "string", "description": "Task-specific context"}, "toolsets": {"type": "array", "items": {"type": "string"}, "description": "Toolsets for this specific task. Available: 'browser', 'cronjob', 'discord', 'discord_admin', 'feishu_doc', 'feishu_drive', 'file', 'homeassistant', 'image_gen', 'kanban', 'search', 'session_search', 'skills', 'spotify', 'terminal', 'todo', 'tts', 'vision', 'web', 'yuanbao'. Use 'web' for network access, 'terminal' for shell, 'browser' for web interaction."}, "acp_command": {"type": "string", "description": "Per-task ACP command override (e.g. 'claude'). Overrides the top-level acp_command for this task only."}, "acp_args": {"type": "array", "items": {"type": "string"}, "description": "Per-task ACP args override."}, "role": {"type": "string", "enum": ["leaf", "orchestrator"], "description": "Per-task role override. See top-level 'role' for semantics."}}, "required": ["goal"]}, "description": "Batch mode: tasks to run in parallel (limit configurable via delegation.max_concurrent_children, default 3). Each gets its own subagent with isolated context and terminal session. When provided, top-level goal/context/toolsets are ignored."}, "role": {"type": "string", "enum": ["leaf", "orchestrator"], "description": "Role of the child agent. 'leaf' (default) = focused worker, cannot delegate further. 'orchestrator' = can use delegate_task to spawn its own workers. Requires delegation.max_spawn_depth >= 2 in config; ignored (treated as 'leaf') when the child would exceed max_spawn_depth or when delegation.orchestrator_enabled=false."}, "acp_command": {"type": "string", "description": "Override ACP command for child agents (e.g. 'claude', 'copilot'). When set, children use ACP subprocess transport instead of inheriting the parent's transport. Enables spawning Claude Code (claude --acp --stdio) or other ACP-capable agents from any parent, including Discord/Telegram/CLI."}, "acp_args": {"type": "array", "items": {"type": "string"}, "description": "Arguments for the ACP command (default: ['--acp', '--stdio']). Only used when acp_command is set. Example: ['--acp', '--stdio', '--model', 'claude-opus-4-6']"}}}}}, {"type": "function", "function": {"name": "execute_code", "description": "Run a Python script that can call Hermes tools programmatically. Use this when you need 3+ tool calls with processing logic between them, need to filter/reduce large tool outputs before they enter your context, need conditional branching (if X then Y else Z), or need to loop (fetch N pages, process N files, retry on failure).\n\nUse normal tool calls instead when: single tool call with no processing, you need to see the full result and apply complex reasoning, or the task requires interactive user input.\n\nAvailable via `from hermes_tools import ...`:\n\n web_search(query: str, limit: int = 5) -> dict\n Returns {\"data\": {\"web\": [{\"url\", \"title\", \"description\"}, ...]}}\n web_extract(urls: list[str]) -> dict\n Returns {\"results\": [{\"url\", \"title\", \"content\", \"error\"}, ...]} where content is markdown\n read_file(path: str, offset: int = 1, limit: int = 500) -> dict\n Lines are 1-indexed. Returns {\"content\": \"...\", \"total_lines\": N}\n write_file(path: str, content: str) -> dict\n Always overwrites the entire file.\n search_files(pattern: str, target=\"content\", path=\".\", file_glob=None, limit=50) -> dict\n target: \"content\" (search inside files) or \"files\" (find files by name). Returns {\"matches\": [...]}\n patch(path: str, old_string: str, new_string: str, replace_all: bool = False) -> dict\n Replaces old_string with new_string in the file.\n terminal(command: str, timeout=None, workdir=None) -> dict\n Foreground only (no background/pty). Returns {\"output\": \"...\", \"exit_code\": N}\n\nLimits: 5-minute timeout, 50KB stdout cap, max 50 tool calls per script. terminal() is foreground-only (no background or pty).\n\nScripts run in the session's working directory with the active venv's python, so project deps (pandas, etc.) and relative paths work like in terminal().\n\nPrint your final result to stdout. Use Python stdlib (json, re, math, csv, datetime, collections, etc.) for processing between tool calls.\n\nAlso available (no import needed — built into hermes_tools):\n json_parse(text: str) — json.loads with strict=False; use for terminal() output with control chars\n shell_quote(s: str) — shlex.quote(); use when interpolating dynamic strings into shell commands\n retry(fn, max_attempts=3, delay=2) — retry with exponential backoff for transient failures", "parameters": {"type": "object", "properties": {"code": {"type": "string", "description": "Python code to execute. Import tools with `from hermes_tools import web_search, terminal, ...` and print your final result to stdout."}}, "required": ["code"]}}}, {"type": "function", "function": {"name": "image_generate", "description": "Generate high-quality images from text prompts. The underlying backend (FAL, OpenAI, etc.) and model are user-configured and not selectable by the agent. Returns either a URL or an absolute file path in the `image` field; display it with markdown ![description](url-or-path) and the gateway will deliver it.", "parameters": {"type": "object", "properties": {"prompt": {"type": "string", "description": "The text prompt describing the desired image. Be detailed and descriptive."}, "aspect_ratio": {"type": "string", "enum": ["landscape", "square", "portrait"], "description": "The aspect ratio of the generated image. 'landscape' is 16:9 wide, 'portrait' is 16:9 tall, 'square' is 1:1.", "default": "landscape"}}, "required": ["prompt"]}}}, {"type": "function", "function": {"name": "mcp_context7_get_prompt", "description": "Get a prompt by name from MCP server 'context7'", "parameters": {"type": "object", "properties": {"name": {"type": "string", "description": "Name of the prompt to retrieve"}, "arguments": {"type": "object", "description": "Optional arguments to pass to the prompt", "properties": {}, "additionalProperties": true}}, "required": ["name"]}}}, {"type": "function", "function": {"name": "mcp_context7_list_prompts", "description": "List available prompts from MCP server 'context7'", "parameters": {"type": "object", "properties": {}}}}, {"type": "function", "function": {"name": "mcp_context7_list_resources", "description": "List available resources from MCP server 'context7'", "parameters": {"type": "object", "properties": {}}}}, {"type": "function", "function": {"name": "mcp_context7_query_docs", "description": "Retrieves and queries up-to-date documentation and code examples from Context7 for any programming library or framework.\n\nYou must call 'Resolve Context7 Library ID' tool first to obtain the exact Context7-compatible library ID required to use this tool, UNLESS the user explicitly provides a library ID in the format '/org/project' or '/org/project/version' in their query.\n\nDo not call this tool more than 3 times per question.", "parameters": {"$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": {"libraryId": {"type": "string", "description": "Exact Context7-compatible library ID (e.g., '/mongodb/docs', '/vercel/next.js', '/supabase/supabase', '/vercel/next.js/v14.3.0-canary.87') retrieved from 'resolve-library-id' or directly from user query in the format '/org/project' or '/org/project/version'."}, "query": {"type": "string", "description": "The question or task you need help with. Be specific and include relevant details. Good: 'How to set up authentication with JWT in Express.js' or 'React useEffect cleanup function examples'. Bad: 'auth' or 'hooks'. The query is sent to the Context7 API for processing. Do not include any sensitive or confidential information such as API keys, passwords, credentials, personal data, or proprietary code in your query."}}, "required": ["libraryId", "query"]}}}, {"type": "function", "function": {"name": "mcp_context7_read_resource", "description": "Read a resource by URI from MCP server 'context7'", "parameters": {"type": "object", "properties": {"uri": {"type": "string", "description": "URI of the resource to read"}}, "required": ["uri"]}}}, {"type": "function", "function": {"name": "mcp_context7_resolve_library_id", "description": "Resolves a package/product name to a Context7-compatible library ID and returns matching libraries.\n\nYou MUST call this function before 'Query Documentation' tool to obtain a valid Context7-compatible library ID UNLESS the user explicitly provides a library ID in the format '/org/project' or '/org/project/version' in their query.\n\nEach result includes:\n- Library ID: Context7-compatible identifier (format: /org/project)\n- Name: Library or package name\n- Description: Short summary\n- Code Snippets: Number of available code examples\n- Source Reputation: Authority indicator (High, Medium, Low, or Unknown)\n- Benchmark Score: Quality indicator (100 is the highest score)\n- Versions: List of versions if available. Use one of those versions if the user provides a version in their query. The format of the version is /org/project/version.\n\nFor best results, select libraries based on name match, source reputation, snippet coverage, benchmark score, and relevance to your use case.\n\nSelection Process:\n1. Analyze the query to understand what library/package the user is looking for\n2. Return the most relevant match based on:\n- Name similarity to the query (exact matches prioritized)\n- Description relevance to the query's intent\n- Documentation coverage (prioritize libraries with higher Code Snippet counts)\n- Source reputation (consider libraries with High or Medium reputation more authoritative)\n- Benchmark Score: Quality indicator (100 is the highest score)\n\nResponse Format:\n- Return the selected library ID in a clearly marked section\n- Provide a brief explanation for why this library was chosen\n- If multiple good matches exist, acknowledge this but proceed with the most relevant one\n- If no good matches exist, clearly state this and suggest query refinements\n\nFor ambiguous queries, request clarification before proceeding with a best-guess match.\n\nIMPORTANT: Do not call this tool more than 3 times per question. If you cannot find what you need after 3 calls, use the best result you have.", "parameters": {"$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": {"query": {"type": "string", "description": "The question or task you need help with. This is used to rank library results by relevance to what the user is trying to accomplish. The query is sent to the Context7 API for processing. Do not include any sensitive or confidential information such as API keys, passwords, credentials, personal data, or proprietary code in your query."}, "libraryName": {"type": "string", "description": "Library name to search for and retrieve a Context7-compatible library ID. Use the official library name with proper punctuation — e.g., 'Next.js' instead of 'nextjs', 'Customer.io' instead of 'customerio', 'Three.js' instead of 'threejs'."}}, "required": ["query", "libraryName"]}}}, {"type": "function", "function": {"name": "memory", "description": "Save durable information to persistent memory that survives across sessions. Memory is injected into future turns, so keep it compact and focused on facts that will still matter later.\n\nWHEN TO SAVE (do this proactively, don't wait to be asked):\n- User corrects you or says 'remember this' / 'don't do that again'\n- User shares a preference, habit, or personal detail (name, role, timezone, coding style)\n- You discover something about the environment (OS, installed tools, project structure)\n- You learn a convention, API quirk, or workflow specific to this user's setup\n- You identify a stable fact that will be useful again in future sessions\n\nPRIORITY: User preferences and corrections > environment facts > procedural knowledge. The most valuable memory prevents the user from having to repeat themselves.\n\nDo NOT save task progress, session outcomes, completed-work logs, or temporary TODO state to memory; use session_search to recall those from past transcripts.\nIf you've discovered a new way to do something, solved a problem that could be necessary later, save it as a skill with the skill tool.\n\nTWO TARGETS:\n- 'user': who the user is -- name, role, preferences, communication style, pet peeves\n- 'memory': your notes -- environment facts, project conventions, tool quirks, lessons learned\n\nACTIONS: add (new entry), replace (update existing -- old_text identifies it), remove (delete -- old_text identifies it).\n\nSKIP: trivial/obvious info, things easily re-discovered, raw data dumps, and temporary task state.", "parameters": {"type": "object", "properties": {"action": {"type": "string", "enum": ["add", "replace", "remove"], "description": "The action to perform."}, "target": {"type": "string", "enum": ["memory", "user"], "description": "Which memory store: 'memory' for personal notes, 'user' for user profile."}, "content": {"type": "string", "description": "The entry content. Required for 'add' and 'replace'."}, "old_text": {"type": "string", "description": "Short unique substring identifying the entry to replace or remove."}}, "required": ["action", "target"]}}}, {"type": "function", "function": {"name": "mixture_of_agents", "description": "Route a hard problem through multiple frontier LLMs collaboratively. Makes 5 API calls (4 reference models + 1 aggregator) with maximum reasoning effort — use sparingly for genuinely difficult problems. Best for: complex math, advanced algorithms, multi-step analytical reasoning, problems benefiting from diverse perspectives.", "parameters": {"type": "object", "properties": {"user_prompt": {"type": "string", "description": "The complex query or problem to solve using multiple AI models. Should be a challenging problem that benefits from diverse perspectives and collaborative reasoning."}}, "required": ["user_prompt"]}}}, {"type": "function", "function": {"name": "patch", "description": "Targeted find-and-replace edits in files. Use this instead of sed/awk in terminal. Uses fuzzy matching (9 strategies) so minor whitespace/indentation differences won't break it. Returns a unified diff. Auto-runs syntax checks after editing.\n\nReplace mode (default): find a unique string and replace it.\nPatch mode: apply V4A multi-file patches for bulk changes.", "parameters": {"type": "object", "properties": {"mode": {"type": "string", "enum": ["replace", "patch"], "description": "Edit mode: 'replace' for targeted find-and-replace, 'patch' for V4A multi-file patches", "default": "replace"}, "path": {"type": "string", "description": "File path to edit (required for 'replace' mode)"}, "old_string": {"type": "string", "description": "Text to find in the file (required for 'replace' mode). Must be unique in the file unless replace_all=true. Include enough surrounding context to ensure uniqueness."}, "new_string": {"type": "string", "description": "Replacement text (required for 'replace' mode). Can be empty string to delete the matched text."}, "replace_all": {"type": "boolean", "description": "Replace all occurrences instead of requiring a unique match (default: false)", "default": false}, "patch": {"type": "string", "description": "V4A format patch content (required for 'patch' mode). Format:\n*** Begin Patch\n*** Update File: path/to/file\n@@ context hint @@\n context line\n-removed line\n+added line\n*** End Patch"}}, "required": ["mode"]}}}, {"type": "function", "function": {"name": "process", "description": "Manage background processes started with terminal(background=true). Actions: 'list' (show all), 'poll' (check status + new output), 'log' (full output with pagination), 'wait' (block until done or timeout), 'kill' (terminate), 'write' (send raw stdin data without newline), 'submit' (send data + Enter, for answering prompts), 'close' (close stdin/send EOF).", "parameters": {"type": "object", "properties": {"action": {"type": "string", "enum": ["list", "poll", "log", "wait", "kill", "write", "submit", "close"], "description": "Action to perform on background processes"}, "session_id": {"type": "string", "description": "Process session ID (from terminal background output). Required for all actions except 'list'."}, "data": {"type": "string", "description": "Text to send to process stdin (for 'write' and 'submit' actions)"}, "timeout": {"type": "integer", "description": "Max seconds to block for 'wait' action. Returns partial output on timeout.", "minimum": 1}, "offset": {"type": "integer", "description": "Line offset for 'log' action (default: last 200 lines)"}, "limit": {"type": "integer", "description": "Max lines to return for 'log' action", "minimum": 1}}, "required": ["action"]}}}, {"type": "function", "function": {"name": "read_file", "description": "Read a text file with line numbers and pagination. Use this instead of cat/head/tail in terminal. Output format: 'LINE_NUM|CONTENT'. Suggests similar filenames if not found. Use offset and limit for large files. Reads exceeding ~100K characters are rejected; use offset and limit to read specific sections of large files. NOTE: Cannot read images or binary files — use vision_analyze for images.", "parameters": {"type": "object", "properties": {"path": {"type": "string", "description": "Path to the file to read (absolute, relative, or ~/path)"}, "offset": {"type": "integer", "description": "Line number to start reading from (1-indexed, default: 1)", "default": 1, "minimum": 1}, "limit": {"type": "integer", "description": "Maximum number of lines to read (default: 500, max: 2000)", "default": 500, "maximum": 2000}}, "required": ["path"]}}}, {"type": "function", "function": {"name": "search_files", "description": "Search file contents or find files by name. Use this instead of grep/rg/find/ls in terminal. Ripgrep-backed, faster than shell equivalents.\n\nContent search (target='content'): Regex search inside files. Output modes: full matches with line numbers, file paths only, or match counts.\n\nFile search (target='files'): Find files by glob pattern (e.g., '*.py', '*config*'). Also use this instead of ls — results sorted by modification time.", "parameters": {"type": "object", "properties": {"pattern": {"type": "string", "description": "Regex pattern for content search, or glob pattern (e.g., '*.py') for file search"}, "target": {"type": "string", "enum": ["content", "files"], "description": "'content' searches inside file contents, 'files' searches for files by name", "default": "content"}, "path": {"type": "string", "description": "Directory or file to search in (default: current working directory)", "default": "."}, "file_glob": {"type": "string", "description": "Filter files by pattern in grep mode (e.g., '*.py' to only search Python files)"}, "limit": {"type": "integer", "description": "Maximum number of results to return (default: 50)", "default": 50}, "offset": {"type": "integer", "description": "Skip first N results for pagination (default: 0)", "default": 0}, "output_mode": {"type": "string", "enum": ["content", "files_only", "count"], "description": "Output format for grep mode: 'content' shows matching lines with line numbers, 'files_only' lists file paths, 'count' shows match counts per file", "default": "content"}, "context": {"type": "integer", "description": "Number of context lines before and after each match (grep mode only)", "default": 0}}, "required": ["pattern"]}}}, {"type": "function", "function": {"name": "session_search", "description": "Search your long-term memory of past conversations, or browse recent sessions. This is your recall -- every past session is searchable, and this tool summarizes what happened.\n\nTWO MODES:\n1. Recent sessions (no query): Call with no arguments to see what was worked on recently. Returns titles, previews, and timestamps. Zero LLM cost, instant. Start here when the user asks what were we working on or what did we do recently.\n2. Keyword search (with query): Search for specific topics across all past sessions. Returns LLM-generated summaries of matching sessions.\n\nUSE THIS PROACTIVELY when:\n- The user says 'we did this before', 'remember when', 'last time', 'as I mentioned'\n- The user asks about a topic you worked on before but don't have in current context\n- The user references a project, person, or concept that seems familiar but isn't in memory\n- You want to check if you've solved a similar problem before\n- The user asks 'what did we do about X?' or 'how did we fix Y?'\n\nDon't hesitate to search when it is actually cross-session -- it's fast and cheap. Better to search and confirm than to guess or ask the user to repeat themselves.\n\nSearch syntax: keywords joined with OR for broad recall (elevenlabs OR baseten OR funding), phrases for exact match (\"docker networking\"), boolean (python NOT java), prefix (deploy*). IMPORTANT: Use OR between keywords for best results — FTS5 defaults to AND which misses sessions that only mention some terms. If a broad OR query returns nothing, try individual keyword searches in parallel. Returns summaries of the top matching sessions.", "parameters": {"type": "object", "properties": {"query": {"type": "string", "description": "Search query — keywords, phrases, or boolean expressions to find in past sessions. Omit this parameter entirely to browse recent sessions instead (returns titles, previews, timestamps with no LLM cost)."}, "role_filter": {"type": "string", "description": "Optional: only search messages from specific roles (comma-separated). E.g. 'user,assistant' to skip tool outputs."}, "limit": {"type": "integer", "description": "Max sessions to summarize (default: 3, max: 5).", "default": 3}}}}}, {"type": "function", "function": {"name": "skill_manage", "description": "Manage skills (create, update, delete). Skills are your procedural memory — reusable approaches for recurring task types. New skills go to ~/.hermes/skills/; existing skills can be modified wherever they live.\n\nActions: create (full SKILL.md + optional category), patch (old_string/new_string — preferred for fixes), edit (full SKILL.md rewrite — major overhauls only), delete, write_file, remove_file.\n\nOn delete, pass `absorbed_into=` when you're merging this skill's content into another one, or `absorbed_into=\"\"` when you're pruning it with no forwarding target. This lets the curator tell consolidation from pruning without guessing, so downstream consumers (cron jobs that reference the old skill name, etc.) get updated correctly. The target you name in `absorbed_into` must already exist — create/patch the umbrella first, then delete.\n\nCreate when: complex task succeeded (5+ calls), errors overcome, user-corrected approach worked, non-trivial workflow discovered, or user asks you to remember a procedure.\nUpdate when: instructions stale/wrong, OS-specific failures, missing steps or pitfalls found during use. If you used a skill and hit issues not covered by it, patch it immediately.\n\nAfter difficult/iterative tasks, offer to save as a skill. Skip for simple one-offs. Confirm with user before creating/deleting.\n\nGood skills: trigger conditions, numbered steps with exact commands, pitfalls section, verification steps. Use skill_view() to see format examples.\n\nPinned skills are off-limits — all write actions refuse with a message pointing the user to `hermes curator unpin `. Don't try to route around this by renaming or recreating.", "parameters": {"type": "object", "properties": {"action": {"type": "string", "enum": ["create", "patch", "edit", "delete", "write_file", "remove_file"], "description": "The action to perform."}, "name": {"type": "string", "description": "Skill name (lowercase, hyphens/underscores, max 64 chars). Must match an existing skill for patch/edit/delete/write_file/remove_file."}, "content": {"type": "string", "description": "Full SKILL.md content (YAML frontmatter + markdown body). Required for 'create' and 'edit'. For 'edit', read the skill first with skill_view() and provide the complete updated text."}, "old_string": {"type": "string", "description": "Text to find in the file (required for 'patch'). Must be unique unless replace_all=true. Include enough surrounding context to ensure uniqueness."}, "new_string": {"type": "string", "description": "Replacement text (required for 'patch'). Can be empty string to delete the matched text."}, "replace_all": {"type": "boolean", "description": "For 'patch': replace all occurrences instead of requiring a unique match (default: false)."}, "category": {"type": "string", "description": "Optional category/domain for organizing the skill (e.g., 'devops', 'data-science', 'mlops'). Creates a subdirectory grouping. Only used with 'create'."}, "file_path": {"type": "string", "description": "Path to a supporting file within the skill directory. For 'write_file'/'remove_file': required, must be under references/, templates/, scripts/, or assets/. For 'patch': optional, defaults to SKILL.md if omitted."}, "file_content": {"type": "string", "description": "Content for the file. Required for 'write_file'."}, "absorbed_into": {"type": "string", "description": "For 'delete' only — declares intent so the curator can tell consolidation from pruning without guessing. Pass the umbrella skill name when this skill's content was merged into another (the target must already exist). Pass an empty string when the skill is truly stale and being pruned with no forwarding target. Omitting the arg on delete is supported for backward compatibility but downstream tooling (e.g. cron-job skill reference rewriting) will have to guess at intent."}}, "required": ["action", "name"]}}}, {"type": "function", "function": {"name": "skill_view", "description": "Skills allow for loading information about specific tasks and workflows, as well as scripts and templates. Load a skill's full content or access its linked files (references, templates, scripts). First call returns SKILL.md content plus a 'linked_files' dict showing available references/templates/scripts. To access those, call again with file_path parameter.", "parameters": {"type": "object", "properties": {"name": {"type": "string", "description": "The skill name (use skills_list to see available skills). For plugin-provided skills, use the qualified form 'plugin:skill' (e.g. 'superpowers:writing-plans')."}, "file_path": {"type": "string", "description": "OPTIONAL: Path to a linked file within the skill (e.g., 'references/api.md', 'templates/config.yaml', 'scripts/validate.py'). Omit to get the main SKILL.md content."}}, "required": ["name"]}}}, {"type": "function", "function": {"name": "skills_list", "description": "List available skills (name + description). Use skill_view(name) to load full content.", "parameters": {"type": "object", "properties": {"category": {"type": "string", "description": "Optional category filter to narrow results"}}}}}, {"type": "function", "function": {"name": "terminal", "description": "Execute shell commands on a Linux environment. Filesystem usually persists between calls.\n\nDo NOT use cat/head/tail to read files — use read_file instead.\nDo NOT use grep/rg/find to search — use search_files instead.\nDo NOT use ls to list directories — use search_files(target='files') instead.\nDo NOT use sed/awk to edit files — use patch instead.\nDo NOT use echo/cat heredoc to create files — use write_file instead.\nReserve terminal for: builds, installs, git, processes, scripts, network, package managers, and anything that needs a shell.\n\nForeground (default): Commands return INSTANTLY when done, even if the timeout is high. Set timeout=300 for long builds/scripts — you'll still get the result in seconds if it's fast. Prefer foreground for short commands.\nBackground: Set background=true to get a session_id. Two patterns:\n (1) Long-lived processes that never exit (servers, watchers).\n (2) Long-running tasks with notify_on_complete=true — you can keep working on other things and the system auto-notifies you when the task finishes. Great for test suites, builds, deployments, or anything that takes more than a minute.\nFor servers/watchers, do NOT use shell-level background wrappers (nohup/disown/setsid/trailing '&') in foreground mode. Use background=true so Hermes can track lifecycle and output.\nAfter starting a server, verify readiness with a health check or log signal, then run tests in a separate terminal() call. Avoid blind sleep loops.\nUse process(action=\"poll\") for progress checks, process(action=\"wait\") to block until done.\nWorking directory: Use 'workdir' for per-command cwd.\nPTY mode: Set pty=true for interactive CLI tools (Codex, Claude Code, Python REPL).\n\nDo NOT use vim/nano/interactive tools without pty=true — they hang without a pseudo-terminal. Pipe git output to cat if it might page.\n", "parameters": {"type": "object", "properties": {"command": {"type": "string", "description": "The command to execute on the VM"}, "background": {"type": "boolean", "description": "Run the command in the background. Two patterns: (1) Long-lived processes that never exit (servers, watchers). (2) Long-running tasks paired with notify_on_complete=true — you can keep working and get notified when the task finishes. For short commands, prefer foreground with a generous timeout instead.", "default": false}, "timeout": {"type": "integer", "description": "Max seconds to wait (default: 180, foreground max: 600). Returns INSTANTLY when command finishes — set high for long tasks, you won't wait unnecessarily. Foreground timeout above 600s is rejected; use background=true for longer commands.", "minimum": 1}, "workdir": {"type": "string", "description": "Working directory for this command (absolute path). Defaults to the session working directory."}, "pty": {"type": "boolean", "description": "Run in pseudo-terminal (PTY) mode for interactive CLI tools like Codex, Claude Code, or Python REPL. Only works with local and SSH backends. Default: false.", "default": false}, "notify_on_complete": {"type": "boolean", "description": "When true (and background=true), you'll be automatically notified exactly once when the process finishes. **This is the right choice for almost every long-running task** — tests, builds, deployments, multi-item batch jobs, anything that takes over a minute and has a defined end. Use this and keep working on other things; the system notifies you on exit. MUTUALLY EXCLUSIVE with watch_patterns — when both are set, watch_patterns is dropped.", "default": false}, "watch_patterns": {"type": "array", "items": {"type": "string"}, "description": "Strings to watch for in background process output. HARD RATE LIMIT: at most 1 notification per 15 seconds per process — matches arriving inside the cooldown are dropped. After 3 consecutive 15-second windows with dropped matches, watch_patterns is automatically disabled for that process and promoted to notify_on_complete behavior (one notification on exit, no more mid-process spam). USE ONLY for truly rare, one-shot mid-process signals on LONG-LIVED processes that will never exit on their own — e.g. ['Application startup complete'] on a server so you know when to hit its endpoint, or ['migration done'] on a daemon. DO NOT use for: (1) end-of-run markers like 'DONE'/'PASS' — use notify_on_complete instead; (2) error patterns like 'ERROR'/'Traceback' in loops or multi-item batch jobs — they fire on every iteration and you'll hit the strike limit fast; (3) anything you'd ever combine with notify_on_complete. When in doubt, choose notify_on_complete. MUTUALLY EXCLUSIVE with notify_on_complete — set one, not both."}}, "required": ["command"]}}}, {"type": "function", "function": {"name": "text_to_speech", "description": "Convert text to speech audio. Returns a MEDIA: path that the platform delivers as native audio. Compatible providers render as a voice bubble on Telegram; otherwise audio is sent as a regular attachment. In CLI mode, saves to ~/voice-memos/. Voice and provider are user-configured (built-in providers like edge/openai or custom command providers under tts.providers.), not model-selected.", "parameters": {"type": "object", "properties": {"text": {"type": "string", "description": "The text to convert to speech. Provider-specific character caps apply and are enforced automatically (OpenAI 4096, xAI 15000, MiniMax 10000, ElevenLabs 5k-40k depending on model); over-long input is truncated."}, "output_path": {"type": "string", "description": "Optional custom file path to save the audio. Defaults to ~/.hermes/audio_cache/.mp3"}}, "required": ["text"]}}}, {"type": "function", "function": {"name": "todo", "description": "Manage your task list for the current session. Use for complex tasks with 3+ steps or when the user provides multiple tasks. Call with no parameters to read the current list.\n\nWriting:\n- Provide 'todos' array to create/update items\n- merge=false (default): replace the entire list with a fresh plan\n- merge=true: update existing items by id, add any new ones\n\nEach item: {id: string, content: string, status: pending|in_progress|completed|cancelled}\nList order is priority. Only ONE item in_progress at a time.\nMark items completed immediately when done. If something fails, cancel it and add a revised item.\n\nAlways returns the full current list.", "parameters": {"type": "object", "properties": {"todos": {"type": "array", "description": "Task items to write. Omit to read current list.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Unique item identifier"}, "content": {"type": "string", "description": "Task description"}, "status": {"type": "string", "enum": ["pending", "in_progress", "completed", "cancelled"], "description": "Current status"}}, "required": ["id", "content", "status"]}}, "merge": {"type": "boolean", "description": "true: update existing items by id, add new ones. false (default): replace the entire list.", "default": false}}}}}, {"type": "function", "function": {"name": "vision_analyze", "description": "Inspect an image from a URL, file path, or tool output when you need closer detail than what's visible in the conversation. If the user's image is already attached to the conversation and you can see it, just answer directly — only call this tool for images referenced by URL/path, images returned inside other tool results (browser screenshots, search thumbnails), or when you need a deeper look at a specific region the main model's vision may have missed.", "parameters": {"type": "object", "properties": {"image_url": {"type": "string", "description": "Image URL (http/https) or local file path to analyze."}, "question": {"type": "string", "description": "Your specific question or request about the image to resolve. The AI will automatically provide a complete image description AND answer your specific question."}}, "required": ["image_url", "question"]}}}, {"type": "function", "function": {"name": "web_extract", "description": "Extract content from web page URLs. Returns page content in markdown format. Also works with PDF URLs (arxiv papers, documents, etc.) — pass the PDF link directly and it converts to markdown text. Pages under 5000 chars return full markdown; larger pages are LLM-summarized and capped at ~5000 chars per page. Pages over 2M chars are refused. If a URL fails or times out, use the browser tool to access it instead.", "parameters": {"type": "object", "properties": {"urls": {"type": "array", "items": {"type": "string"}, "description": "List of URLs to extract content from (max 5 URLs per call)", "maxItems": 5}}, "required": ["urls"]}}}, {"type": "function", "function": {"name": "web_search", "description": "Search the web for information. Returns up to 5 results by default with titles, URLs, and descriptions. The query is passed through to the configured backend, so operators such as site:domain, filetype:pdf, intitle:word, -term, and \"exact phrase\" may work when the backend supports them.", "parameters": {"type": "object", "properties": {"query": {"type": "string", "description": "The search query to look up on the web. You may include backend-supported operators such as site:example.com, filetype:pdf, intitle:word, -term, or \"exact phrase\"."}, "limit": {"type": "integer", "description": "Maximum number of results to return. Defaults to 5.", "minimum": 1, "maximum": 100, "default": 5}}, "required": ["query"]}}}, {"type": "function", "function": {"name": "write_file", "description": "Write content to a file, completely replacing existing content. Use this instead of echo/cat heredoc in terminal. Creates parent directories automatically. OVERWRITES the entire file — use 'patch' for targeted edits.", "parameters": {"type": "object", "properties": {"path": {"type": "string", "description": "Path to the file to write (will be created if it doesn't exist, overwritten if it does)"}, "content": {"type": "string", "description": "Complete content to write to the file"}}, "required": ["path", "content"]}}}, {"type": "function", "function": {"name": "honcho_profile", "description": "Retrieve or update a peer card from Honcho — a curated list of key facts about that peer (name, role, preferences, communication style, patterns). Pass `card` to update; omit `card` to read. If the card is empty, the result includes a `hint` field explaining why (observation disabled, fresh peer, dialectic layer still warming up, etc.) — this is NOT an error. Peer cards accumulate over time from observed conversation.", "parameters": {"type": "object", "properties": {"peer": {"type": "string", "description": "Peer to query. Built-in aliases: 'user' (default), 'ai'. Or pass any peer ID from this workspace."}, "card": {"type": "array", "items": {"type": "string"}, "description": "New peer card as a list of fact strings. Omit to read the current card."}}, "required": []}}}, {"type": "function", "function": {"name": "honcho_search", "description": "Semantic search over Honcho's stored context about a peer. Returns raw excerpts ranked by relevance — no LLM synthesis. Cheaper and faster than honcho_reasoning. Good when you want to find specific past facts and reason over them yourself.", "parameters": {"type": "object", "properties": {"query": {"type": "string", "description": "What to search for in Honcho's memory."}, "max_tokens": {"type": "integer", "description": "Token budget for returned context (default 800, max 2000)."}, "peer": {"type": "string", "description": "Peer to query. Built-in aliases: 'user' (default), 'ai'. Or pass any peer ID from this workspace."}}, "required": ["query"]}}}, {"type": "function", "function": {"name": "honcho_reasoning", "description": "Ask Honcho a natural language question and get a synthesized answer. Uses Honcho's LLM (dialectic reasoning) — higher cost than honcho_profile or honcho_search. Can query about any peer via alias or explicit peer ID. Pass reasoning_level to control depth: minimal (fast/cheap), low (default), medium, high, max (deep/expensive). Omit for configured default.", "parameters": {"type": "object", "properties": {"query": {"type": "string", "description": "A natural language question."}, "reasoning_level": {"type": "string", "description": "Override the default reasoning depth. Omit to use the configured default (typically low). Guide:\n- minimal: quick factual lookups (name, role, simple preference)\n- low: straightforward questions with clear answers\n- medium: multi-aspect questions requiring synthesis across observations\n- high: complex behavioral patterns, contradictions, deep analysis\n- max: thorough audit-level analysis, leave no stone unturned", "enum": ["minimal", "low", "medium", "high", "max"]}, "peer": {"type": "string", "description": "Peer to query. Built-in aliases: 'user' (default), 'ai'. Or pass any peer ID from this workspace."}}, "required": ["query"]}}}, {"type": "function", "function": {"name": "honcho_context", "description": "Retrieve full session context from Honcho — summary, peer representation, peer card, and recent messages. No LLM synthesis. Cheaper than honcho_reasoning. Use this to see what Honcho knows about the current conversation and the specified peer.", "parameters": {"type": "object", "properties": {"query": {"type": "string", "description": "Optional focus query to filter context. Omit for full session context snapshot."}, "peer": {"type": "string", "description": "Peer to query. Built-in aliases: 'user' (default), 'ai'. Or pass any peer ID from this workspace."}}, "required": []}}}, {"type": "function", "function": {"name": "honcho_conclude", "description": "Write or delete a conclusion about a peer in Honcho's memory. Conclusions are persistent facts that build a peer's profile. You MUST pass exactly one of: `conclusion` (to create) or `delete_id` (to delete). Passing neither is an error. Deletion is only for PII removal — Honcho self-heals incorrect conclusions over time.", "parameters": {"type": "object", "properties": {"conclusion": {"type": "string", "description": "A factual statement to persist. Provide this when creating a conclusion. Do not send it together with delete_id."}, "delete_id": {"type": "string", "description": "Conclusion ID to delete for PII removal. Provide this when deleting a conclusion. Do not send it together with conclusion."}, "peer": {"type": "string", "description": "Peer to query. Built-in aliases: 'user' (default), 'ai'. Or pass any peer ID from this workspace."}}, "required": []}}}], "model": "gpt-5.5", "platform": "discord", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "user", "content": "[nachlakes] Hola me podes decir si esto es factible? https://x.com/__microdancing/status/2054160914438291840 gracias", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "assistant", "content": "", "reasoning": "**Assessing tweet feasibility**\n\nI need to evaluate the feasibility of the tweet. This involves inspecting some element, let's call it \"x\". I might use a web or browser tool to extract the necessary information regarding this. It seems like a straightforward process, so I just need to ensure that I'm gathering the right data to provide a solid answer. Let's get going on figuring this out!", "finish_reason": "tool_calls", "reasoning_content": "**Assessing tweet feasibility**\n\nI need to evaluate the feasibility of the tweet. This involves inspecting some element, let's call it \"x\". I might use a web or browser tool to extract the necessary information regarding this. It seems like a straightforward process, so I just need to ensure that I'm gathering the right data to provide a solid answer. Let's get going on figuring this out!", "codex_reasoning_items": [{"type": "reasoning", "encrypted_content": "gAAAAABqAzyCYYIeHQdELAmAusJQpgbuv2LLO9eXw5-yYdpM-d9I0YNQQ_IDIjravtlGhFnpTNUK5tVfdx4-s7h8iqsNA_DOV4JEDX3uUGz7hKLv-rCVApGSSBn1UzM3_H6siCnsdv7au5XxvTSRUW8Mnv36y4rt7o1iCF3G2eud63iAwblNIzT-rxhHrqycUozNkZwxZEjjICzw2W5_NEdM12dEMeniltMXBLlFlht3N0be2U-aRXf8tAGxLgBJREExSSSYUoBHEO-130EZ6lDBhjNZ89z6p24OuojBgJsOVqHR7tbRZb-GM6OT7dR-f04uVenf4GifdLySr9IkCEPg_o6VmC-mWJRnyrDOsBXypZnmUb-TimG1B3UXO0v-4XZFJtQvSDzKhsQkr90iR3VGkR5QvqD_ajPH2vrFyT-5cgF0gSfE8o8N3uD9wmbxVCXEuo6lIOFSYHRYcVDuRCL8O87fibJaUV-0NRIwd7nRDw3eHWPfua_x6V5bdzAwKFR3B7hNcb3dtYgukaZrnTT1s8g2HhTadh6s_IgI-iRArQMBrES6wwwHjdXRxk1t_Gp0RYsXz-nUwhiLqSRDheUyWJpncXBG0cq8Er-7PYoPa-LnP8Mrf9IdoTp1NzXskKPaC1Y5KjPRt6oOQLJXwIexHcUuTL01Ok0wl6aL-HtQgsPTqk_VIAKUfpgCDFLIXHBCO0Ene7iVQLW620xS9Qn7nWYKH1GnReWQk4fTYfUEq4oGpqWx_rAux9eXbN1t1vNHqwLiQUWON_9Jmwf8gob0oH0R7IlyCZxAmgxEpB75y0bMG6IepHyEnD7exm1n9JO4PZDlp5zmb_p4lE3Rfwvj2wIouXHqYkb216W8t8QILF6Rt9QTnBnA3lmp2LdDrClbYcYgMo9tdQ2QDdwRKtCQjSTOvVLdDvfFU7wognKHnSCEGXuAR8PY3xPzSXDWQGfpvoM2Kvp__buEh8TjOSFZmo_elCIutFa88DIjLxyi5VdeekuRUBystAI8wkuzpoEHguCLopOWksJlDinEEFniD5BqvMhA1g==", "id": "rs_0965b568e0b96b22016a033c7ec66881918440002e564d695e", "summary": [{"type": "summary_text", "text": "**Assessing tweet feasibility**\n\nI need to evaluate the feasibility of the tweet. This involves inspecting some element, let's call it \"x\". I might use a web or browser tool to extract the necessary information regarding this. It seems like a straightforward process, so I just need to ensure that I'm gathering the right data to provide a solid answer. Let's get going on figuring this out!"}]}], "tool_calls": [{"id": "call_URQP10Mr1btv8eDPmOwqVy7v", "call_id": "call_URQP10Mr1btv8eDPmOwqVy7v", "response_item_id": "fc_0965b568e0b96b22016a033c825dc88191ae84f9cf12bf3a89", "type": "function", "function": {"name": "web_extract", "arguments": "{\"urls\":[\"https://x.com/__microdancing/status/2054160914438291840\"]}"}}], "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\"error\": \"Content was inaccessible or not found\"}", "tool_call_id": "call_URQP10Mr1btv8eDPmOwqVy7v", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "assistant", "content": "", "reasoning": null, "finish_reason": "tool_calls", "tool_calls": [{"id": "call_1bkTvRv9WHHtmNH59xkBvJNo", "call_id": "call_1bkTvRv9WHHtmNH59xkBvJNo", "response_item_id": "fc_032a898bcb1a2258016a033c89f44c8191a0f48620ef0b65e7", "type": "function", "function": {"name": "browser_navigate", "arguments": "{\"url\":\"https://x.com/__microdancing/status/2054160914438291840\"}"}}], "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\"success\": false, \"error\": \"All CDP discovery methods failed for 127.0.0.1:9223: /json/version: Failed to connect to CDP at 127.0.0.1:9223: error sending request for url (http://127.0.0.1:9223/json/version); /json/list: Failed to connect to /json/list at 127.0.0.1:9223: error sending request for url (http://127.0.0.1:9223/json/list); WebSocket: WebSocket connect failed at ws://127.0.0.1:9223/devtools/browser: IO error: Connection refused (os error 111)\"}", "tool_call_id": "call_1bkTvRv9WHHtmNH59xkBvJNo", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "assistant", "content": "", "reasoning": null, "finish_reason": "tool_calls", "codex_reasoning_items": [{"type": "reasoning", "encrypted_content": "gAAAAABqAzyOyaCTRZ1EciB6owTdv8aLUISx-qh_rk3rmGc1cGwwQHFlzEEhVPguNNPcSHEwx4tQTVSEZaJqnnf-MgaLZMaLoC7lJkMGgwjqa2ttlFm7j9Uk1fiWIxwtgC4GvxJyAzS0Yw_y6r-Rgs3eilZcUDLP0yKJlqq9gFNAlopWouzn5_EgD2XiGd-5oEGd1dF0NZ3yFRcFeQcv-XlZqpF6sw3GrPjs-F-2De5Qh8qtEa-wrp4RfZBZTiz6XmnrbPrd-Niw2Sz_ronJOTcJFPUkyd8lyFuge1kQmK4Bu23KJ0i4iVsww7ZZEpsMbiRkTD2jBkBSPwbMx4mXelnvzYeWpICKAW-Giz1EEvymbqfOSs0tWqowJWpQbdUHwgyhRrs4wZ01zsWivfGsyjtCIZk5a1IzLA0DuVZLu25vijSOGPprTLPXP4pb_471naUQ32rILJbr4benIuP4JYxO5a9sGjTPJuCQPrkGHcYuTYeF0js9JZZZxs577BT7p94Mjo6eIuVYR1zxSPPfKTH9Pb8X4Bi8NYu1uvLqGyGeI-DMPyH1WC7g_8ArUDJUJvFAOwWxrpK9knW_pjbHUNvbtsvqf1HkGFRsahM_soUOBxDAk-xI3XK2Td1VjhSIRxTc0fpPfYcwLNZ5OHz7eKt9w_nqOAap-_dmhDIHjro39Z-Fpw4QrtbcZcw_4BDk-8LSmFwNiPNRW6G36UdgP7CCUpEVWlvvAm8VRROfofYq7ZdOgwgEvSRqtYTwIduGhApRCgs2gAv30r5JSxu116pOt_1ZZArYhUUftx7PkGbyYIr65y57QOr072RT95nqD64AHHs-BRd21KWxK0WifySDhNkKEBP-xduDvBSSUZpcaJbhdIh4vtqRR85HR1CNL5Oeu9KcUNgIkfSwsvghzV_vI5EkrfLpnp33vpEiOb7RQL3RAi_P99fwFDfddD6VDzx7L-_YZXck30eVBfdnHvNVPioT76eLILm-HImwjnBVewsvjWJvqiZn_j4RoyoM451l06HvxFvq", "id": "rs_0c2f70655f667a9f016a033c8ccd808191b3bc25f3fbc1f148", "summary": []}], "tool_calls": [{"id": "call_T40frWjrS7a94pwQNUVXPT9G", "call_id": "call_T40frWjrS7a94pwQNUVXPT9G", "response_item_id": "fc_0c2f70655f667a9f016a033c8e6ae081918ce02027b3f5708f", "type": "function", "function": {"name": "skill_view", "arguments": "{\"name\":\"xurl\"}"}}], "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\"success\": true, \"name\": \"xurl\", \"description\": \"X/Twitter via xurl CLI: post, search, DM, media, v2 API.\", \"tags\": [\"twitter\", \"x\", \"social-media\", \"xurl\", \"official-api\"], \"related_skills\": [], \"content\": \"---\\nname: xurl\\ndescription: \\\"X/Twitter via xurl CLI: post, search, DM, media, v2 API.\\\"\\nversion: 1.1.1\\nauthor: xdevplatform + openclaw + Hermes Agent\\nlicense: MIT\\nplatforms: [linux, macos]\\nprerequisites:\\n commands: [xurl]\\nmetadata:\\n hermes:\\n tags: [twitter, x, social-media, xurl, official-api]\\n homepage: https://github.com/xdevplatform/xurl\\n upstream_skill: https://github.com/openclaw/openclaw/blob/main/skills/xurl/SKILL.md\\n---\\n\\n# xurl — X (Twitter) API via the Official CLI\\n\\n`xurl` is the X developer platform's official CLI for the X API. It supports shortcut commands for common actions AND raw curl-style access to any v2 endpoint. All commands return JSON to stdout.\\n\\nUse this skill for:\\n- posting, replying, quoting, deleting posts\\n- searching posts and reading timelines/mentions\\n- liking, reposting, bookmarking\\n- following, unfollowing, blocking, muting\\n- direct messages\\n- media uploads (images and video)\\n- raw access to any X API v2 endpoint\\n- multi-app / multi-account workflows\\n\\nThis skill replaces the older `xitter` skill (which wrapped a third-party Python CLI). `xurl` is maintained by the X developer platform team, supports OAuth 2.0 PKCE with auto-refresh, and covers a substantially larger API surface.\\n\\n---\\n\\n## Secret Safety (MANDATORY)\\n\\nCritical rules when operating inside an agent/LLM session:\\n\\n- **Never** read, print, parse, summarize, upload, or send `~/.xurl` to LLM context.\\n- **Never** ask the user to paste credentials/tokens into chat.\\n- The user must fill `~/.xurl` with secrets manually on their own machine.\\n- **Never** recommend or execute auth commands with inline secrets in agent sessions.\\n- **Never** use `--verbose` / `-v` in agent sessions — it can expose auth headers/tokens.\\n- To verify credentials exist, only use: `xurl auth status`.\\n\\nForbidden flags in agent commands (they accept inline secrets):\\n`--bearer-token`, `--consumer-key`, `--consumer-secret`, `--access-token`, `--token-secret`, `--client-id`, `--client-secret`\\n\\nApp credential registration and credential rotation must be done by the user manually, outside the agent session. After credentials are registered, the user authenticates with `xurl auth oauth2` — also outside the agent session. Tokens persist to `~/.xurl` in YAML. Each app has isolated tokens. OAuth 2.0 tokens auto-refresh.\\n\\n---\\n\\n## Installation\\n\\nPick ONE method. On Linux, the shell script or `go install` are the easiest.\\n\\n```bash\\n# Shell script (installs to ~/.local/bin, no sudo, works on Linux + macOS)\\ncurl -fsSL https://raw.githubusercontent.com/xdevplatform/xurl/main/install.sh | bash\\n\\n# Homebrew (macOS)\\nbrew install --cask xdevplatform/tap/xurl\\n\\n# npm\\nnpm install -g @xdevplatform/xurl\\n\\n# Go\\ngo install github.com/xdevplatform/xurl@latest\\n```\\n\\nVerify:\\n\\n```bash\\nxurl --help\\nxurl auth status\\n```\\n\\nIf `xurl` is installed but `auth status` shows no apps or tokens, the user needs to complete auth manually — see the next section.\\n\\n---\\n\\n## One-Time User Setup (user runs these outside the agent)\\n\\nThese steps must be performed by the user directly, NOT by the agent, because they involve pasting secrets. Direct the user to this block; do not execute it for them.\\n\\n1. Create or open an app at https://developer.x.com/en/portal/dashboard\\n2. Set the redirect URI to `http://localhost:8080/callback`\\n3. Copy the app's Client ID and Client Secret\\n4. Register the app locally (user runs this):\\n ```bash\\n xurl auth apps add my-app --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET\\n ```\\n5. Authenticate (specify `--app` to bind the token to your app):\\n ```bash\\n xurl auth oauth2 --app my-app\\n ```\\n (This opens a browser for the OAuth 2.0 PKCE flow.)\\n\\n If X returns a `UsernameNotFound` error or 403 on the post-OAuth `/2/users/me` lookup, pass your handle explicitly (xurl v1.1.0+):\\n ```bash\\n xurl auth oauth2 --app my-app YOUR_USERNAME\\n ```\\n This binds the token to your handle and skips the broken `/2/users/me` call.\\n6. Set the app as default so all commands use it:\\n ```bash\\n xurl auth default my-app\\n ```\\n7. Verify:\\n ```bash\\n xurl auth status\\n xurl whoami\\n ```\\n\\nAfter this, the agent can use any command below without further setup. OAuth 2.0 tokens auto-refresh.\\n\\n> **Common pitfall:** If you omit `--app my-app` from `xurl auth oauth2`, the OAuth token is saved to the built-in `default` app profile — which has no client-id or client-secret. Commands will fail with auth errors even though the OAuth flow appeared to succeed. If you hit this, re-run `xurl auth oauth2 --app my-app` and `xurl auth default my-app`.\\n\\n---\\n\\n## Quick Reference\\n\\n| Action | Command |\\n| --- | --- |\\n| Post | `xurl post \\\"Hello world!\\\"` |\\n| Reply | `xurl reply POST_ID \\\"Nice post!\\\"` |\\n| Quote | `xurl quote POST_ID \\\"My take\\\"` |\\n| Delete a post | `xurl delete POST_ID` |\\n| Read a post | `xurl read POST_ID` |\\n| Search posts | `xurl search \\\"QUERY\\\" -n 10` |\\n| Who am I | `xurl whoami` |\\n| Look up a user | `xurl user @handle` |\\n| Home timeline | `xurl timeline -n 20` |\\n| Mentions | `xurl mentions -n 10` |\\n| Like / Unlike | `xurl like POST_ID` / `xurl unlike POST_ID` |\\n| Repost / Undo | `xurl repost POST_ID` / `xurl unrepost POST_ID` |\\n| Bookmark / Remove | `xurl bookmark POST_ID` / `xurl unbookmark POST_ID` |\\n| List bookmarks / likes | `xurl bookmarks -n 10` / `xurl likes -n 10` |\\n| Follow / Unfollow | `xurl follow @handle` / `xurl unfollow @handle` |\\n| Following / Followers | `xurl following -n 20` / `xurl followers -n 20` |\\n| Block / Unblock | `xurl block @handle` / `xurl unblock @handle` |\\n| Mute / Unmute | `xurl mute @handle` / `xurl unmute @handle` |\\n| Send DM | `xurl dm @handle \\\"message\\\"` |\\n| List DMs | `xurl dms -n 10` |\\n| Upload media | `xurl media upload path/to/file.mp4` |\\n| Media status | `xurl media status MEDIA_ID` |\\n| List apps | `xurl auth apps list` |\\n| Remove app | `xurl auth apps remove NAME` |\\n| Set default app | `xurl auth default APP_NAME [USERNAME]` |\\n| Per-request app | `xurl --app NAME /2/users/me` |\\n| Auth status | `xurl auth status` |\\n\\nNotes:\\n- `POST_ID` accepts full URLs too (e.g. `https://x.com/user/status/1234567890`) — xurl extracts the ID.\\n- Usernames work with or without a leading `@`.\\n\\n---\\n\\n## Command Details\\n\\n### Posting\\n\\n```bash\\nxurl post \\\"Hello world!\\\"\\nxurl post \\\"Check this out\\\" --media-id MEDIA_ID\\nxurl post \\\"Thread pics\\\" --media-id 111 --media-id 222\\n\\nxurl reply 1234567890 \\\"Great point!\\\"\\nxurl reply https://x.com/user/status/1234567890 \\\"Agreed!\\\"\\nxurl reply 1234567890 \\\"Look at this\\\" --media-id MEDIA_ID\\n\\nxurl quote 1234567890 \\\"Adding my thoughts\\\"\\nxurl delete 1234567890\\n```\\n\\n### Reading & Search\\n\\n```bash\\nxurl read 1234567890\\nxurl read https://x.com/user/status/1234567890\\n\\nxurl search \\\"golang\\\"\\nxurl search \\\"from:elonmusk\\\" -n 20\\nxurl search \\\"#buildinpublic lang:en\\\" -n 15\\n```\\n\\n### Users, Timeline, Mentions\\n\\n```bash\\nxurl whoami\\nxurl user elonmusk\\nxurl user @XDevelopers\\n\\nxurl timeline -n 25\\nxurl mentions -n 20\\n```\\n\\n### Engagement\\n\\n```bash\\nxurl like 1234567890\\nxurl unlike 1234567890\\n\\nxurl repost 1234567890\\nxurl unrepost 1234567890\\n\\nxurl bookmark 1234567890\\nxurl unbookmark 1234567890\\n\\nxurl bookmarks -n 20\\nxurl likes -n 20\\n```\\n\\n### Social Graph\\n\\n```bash\\nxurl follow @XDevelopers\\nxurl unfollow @XDevelopers\\n\\nxurl following -n 50\\nxurl followers -n 50\\n\\n# Another user's graph\\nxurl following --of elonmusk -n 20\\nxurl followers --of elonmusk -n 20\\n\\nxurl block @spammer\\nxurl unblock @spammer\\nxurl mute @annoying\\nxurl unmute @annoying\\n```\\n\\n### Direct Messages\\n\\n```bash\\nxurl dm @someuser \\\"Hey, saw your post!\\\"\\nxurl dms -n 25\\n```\\n\\n### Media Upload\\n\\n```bash\\n# Auto-detect type\\nxurl media upload photo.jpg\\nxurl media upload video.mp4\\n\\n# Explicit type/category\\nxurl media upload --media-type image/jpeg --category tweet_image photo.jpg\\n\\n# Videos need server-side processing — check status (or poll)\\nxurl media status MEDIA_ID\\nxurl media status --wait MEDIA_ID\\n\\n# Full workflow\\nxurl media upload meme.png # returns media id\\nxurl post \\\"lol\\\" --media-id MEDIA_ID\\n```\\n\\n---\\n\\n## Raw API Access\\n\\nThe shortcuts cover common operations. For anything else, use raw curl-style mode against any X API v2 endpoint:\\n\\n```bash\\n# GET\\nxurl /2/users/me\\n\\n# POST with JSON body\\nxurl -X POST /2/tweets -d '{\\\"text\\\":\\\"Hello world!\\\"}'\\n\\n# DELETE / PUT / PATCH\\nxurl -X DELETE /2/tweets/1234567890\\n\\n# Custom headers\\nxurl -H \\\"Content-Type: application/json\\\" /2/some/endpoint\\n\\n# Force streaming\\nxurl -s /2/tweets/search/stream\\n\\n# Full URLs also work\\nxurl https://api.x.com/2/users/me\\n```\\n\\n---\\n\\n## Global Flags\\n\\n| Flag | Short | Description |\\n| --- | --- | --- |\\n| `--app` | | Use a specific registered app (overrides default) |\\n| `--auth` | | Force auth type: `oauth1`, `oauth2`, or `app` |\\n| `--username` | `-u` | Which OAuth2 account to use (if multiple exist) |\\n| `--verbose` | `-v` | **Forbidden in agent sessions** — leaks auth headers |\\n| `--trace` | `-t` | Add `X-B3-Flags: 1` trace header |\\n\\n---\\n\\n## Streaming\\n\\nStreaming endpoints are auto-detected. Known ones include:\\n\\n- `/2/tweets/search/stream`\\n- `/2/tweets/sample/stream`\\n- `/2/tweets/sample10/stream`\\n\\nForce streaming on any endpoint with `-s`.\\n\\n---\\n\\n## Output Format\\n\\nAll commands return JSON to stdout. Structure mirrors X API v2:\\n\\n```json\\n{ \\\"data\\\": { \\\"id\\\": \\\"1234567890\\\", \\\"text\\\": \\\"Hello world!\\\" } }\\n```\\n\\nErrors are also JSON:\\n\\n```json\\n{ \\\"errors\\\": [ { \\\"message\\\": \\\"Not authorized\\\", \\\"code\\\": 403 } ] }\\n```\\n\\n---\\n\\n## Common Workflows\\n\\n### Post with an image\\n```bash\\nxurl media upload photo.jpg\\nxurl post \\\"Check out this photo!\\\" --media-id MEDIA_ID\\n```\\n\\n### Reply to a conversation\\n```bash\\nxurl read https://x.com/user/status/1234567890\\nxurl reply 1234567890 \\\"Here are my thoughts...\\\"\\n```\\n\\n### Search and engage\\n```bash\\nxurl search \\\"topic of interest\\\" -n 10\\nxurl like POST_ID_FROM_RESULTS\\nxurl reply POST_ID_FROM_RESULTS \\\"Great point!\\\"\\n```\\n\\n### Check your activity\\n```bash\\nxurl whoami\\nxurl mentions -n 20\\nxurl timeline -n 20\\n```\\n\\n### Multiple apps (credentials pre-configured manually)\\n```bash\\nxurl auth default prod alice # prod app, alice user\\nxurl --app staging /2/users/me # one-off against staging\\n```\\n\\n---\\n\\n## Error Handling\\n\\n- Non-zero exit code on any error.\\n- API errors are still printed as JSON to stdout, so you can parse them.\\n- Auth errors → have the user re-run `xurl auth oauth2` outside the agent session.\\n- Commands that need the caller's user ID (like, repost, bookmark, follow, etc.) will auto-fetch it via `/2/users/me`. An auth failure there surfaces as an auth error.\\n\\n---\\n\\n## Agent Workflow\\n\\n1. Verify prerequisites: `xurl --help` and `xurl auth status`.\\n2. **Check default app has credentials.** Parse the `auth status` output. The default app is marked with `▸`. If the default app shows `oauth2: (none)` but another app has a valid oauth2 user, tell the user to run `xurl auth default ` to fix it. This is the most common setup mistake — the user added an app with a custom name but never set it as default, so xurl keeps trying the empty `default` profile.\\n3. If auth is missing entirely, stop and direct the user to the \\\"One-Time User Setup\\\" section — do NOT attempt to register apps or pass secrets yourself.\\n4. Start with a cheap read (`xurl whoami`, `xurl user @handle`, `xurl search ... -n 3`) to confirm reachability.\\n5. Confirm the target post/user and the user's intent before any write action (post, reply, like, repost, DM, follow, block, delete).\\n6. Use JSON output directly — every response is already structured.\\n7. Never paste `~/.xurl` contents back into the conversation.\\n\\n---\\n\\n## Troubleshooting\\n\\n| Symptom | Cause | Fix |\\n| --- | --- | --- |\\n| Auth errors after successful OAuth flow | Token saved to `default` app (no client-id/secret) instead of your named app | `xurl auth oauth2 --app my-app` then `xurl auth default my-app` |\\n| `unauthorized_client` during OAuth | App type set to \\\"Native App\\\" in X dashboard | Change to \\\"Web app, automated app or bot\\\" in User Authentication Settings |\\n| `UsernameNotFound` or 403 on `/2/users/me` right after OAuth | X not returning username reliably from `/2/users/me` | Re-run `xurl auth oauth2 --app my-app YOUR_USERNAME` (xurl v1.1.0+) to pass the handle explicitly |\\n| 401 on every request | Token expired or wrong default app | Check `xurl auth status` — verify `▸` points to an app with oauth2 tokens |\\n| `client-forbidden` / `client-not-enrolled` | X platform enrollment issue | Dashboard → Apps → Manage → Move to \\\"Pay-per-use\\\" package → Production environment |\\n| `CreditsDepleted` | $0 balance on X API | Buy credits (min $5) in Developer Console → Billing |\\n| `media processing failed` on image upload | Default category is `amplify_video` | Add `--category tweet_image --media-type image/png` |\\n| Two \\\"Client Secret\\\" values in X dashboard | UI bug — first is actually Client ID | Confirm on the \\\"Keys and tokens\\\" page; ID ends in `MTpjaQ` |\\n\\n---\\n\\n## Notes\\n\\n- **Rate limits:** X enforces per-endpoint rate limits. A 429 means wait and retry. Write endpoints (post, reply, like, repost) have tighter limits than reads.\\n- **Scopes:** OAuth 2.0 tokens use broad scopes. A 403 on a specific action usually means the token is missing a scope — have the user re-run `xurl auth oauth2`.\\n- **Token refresh:** OAuth 2.0 tokens auto-refresh. Nothing to do.\\n- **Multiple apps:** Each app has isolated credentials/tokens. Switch with `xurl auth default` or `--app`.\\n- **Multiple accounts per app:** Select with `-u / --username`, or set a default with `xurl auth default APP USER`.\\n- **Token storage:** `~/.xurl` is YAML. Never read or send this file to LLM context.\\n- **Cost:** X API access is typically paid for meaningful usage. Many failures are plan/permission problems, not code problems.\\n\\n---\\n\\n## Attribution\\n\\n- Upstream CLI: https://github.com/xdevplatform/xurl (X developer platform team, Chris Park et al.)\\n- Upstream agent skill: https://github.com/openclaw/openclaw/blob/main/skills/xurl/SKILL.md\\n- Hermes adaptation: reformatted for Hermes skill conventions; safety guardrails preserved verbatim.\\n\", \"path\": \"social-media/xurl/SKILL.md\", \"skill_dir\": \"/home/ubuntu/.hermes/skills/social-media/xurl\", \"linked_files\": null, \"usage_hint\": null, \"required_environment_variables\": [], \"required_commands\": [], \"missing_required_environment_variables\": [], \"missing_credential_files\": [], \"missing_required_commands\": [], \"setup_needed\": false, \"setup_skipped\": false, \"readiness_status\": \"available\", \"metadata\": {\"hermes\": {\"tags\": [\"twitter\", \"x\", \"social-media\", \"xurl\", \"official-api\"], \"homepage\": \"https://github.com/xdevplatform/xurl\", \"upstream_skill\": \"https://github.com/openclaw/openclaw/blob/main/skills/xurl/SKILL.md\"}}}", "tool_call_id": "call_T40frWjrS7a94pwQNUVXPT9G", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "assistant", "content": "", "reasoning": null, "finish_reason": "tool_calls", "tool_calls": [{"id": "call_11dKsiiNYne4OgOH9FvVXZ6s", "call_id": "call_11dKsiiNYne4OgOH9FvVXZ6s", "response_item_id": "fc_0276ecfc7f097671016a033c926de48191af1ea90f41a69e0f", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\":\"xurl read 2054160914438291840\",\"timeout\":60}"}}], "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\"output\": \"/usr/bin/bash: line 3: xurl: command not found\", \"exit_code\": 127, \"error\": null}", "tool_call_id": "call_11dKsiiNYne4OgOH9FvVXZ6s", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "assistant", "content": "", "reasoning": null, "finish_reason": "tool_calls", "codex_reasoning_items": [{"type": "reasoning", "encrypted_content": "gAAAAABqAzyWXAD5abaiGg8gwL3oQsd5blbzNJ2QlHlYjcQtuErh8_bpsiWFWSBV7_wHHbVF0Nw66wquaAfF5xMbp7gCe8wJkWuz6eD3FCZXuynv-Y3rppFJQqBv5MuveYn0siIZFE5qDKF-JxZGZGHerQAlFF3yg-MFB-Regc14BmT1-u3o1rfQy-FhGP_4NLe9oHaKtN7Pxl4nW-v1c2NmqNr7jsvOLKXyzt_sOt8R4cUazgRg3Liyt3fQ5TJt4L1QWJ2H2FTQoNrhLfbRD9BiMBEcSJgdtug7z15fu9Tm0aduDaAx8MrFY8p7gsowSjTL4P_tOMJbRo7iZnC-syig0-tZT9y7hOZHVuQIdU9meX2rs3hKpHnkk4MK1wznINfiXYD0esdMJehchTZnMzEpGZxVA_vpDdS-2t-kpIkNEPvlAinVEn2ILhO72wuYAdYgCUVriuQcj1qa0cpuapJW9VCUW_sRYnGSfmpu8p1hsTKzrINffpqn28r_wgElP2cQN5M0767rk5sS9J7tgyn7ejTCKH-9221dkHkxXeY1b4cGvBOMLVKASHMLN_O8suhkpwbe9LgmTU0GuvhoOZ3NdF5-0C9Sl5O92PVmSOD7669GgCpbgvl_SULT1fT0vVFzV9YWCmeIvsIbj4uHP3QHXuBRgQFTqFL7tdtkk0Al0RVpvGQtgIO_fwtbmksVn7GVrioKf38dwfkm1Dm4BfKb30y2hv2K9lQb99D4mp5BWs895E-a639yOSvINUVvh9UI-ckDxTDeJXyuQEOBYUZswm0ggZ0wcXgEOUaCrxolyxnCqNHmhJ8iS8JXEziqJVIB7iy2ZiEccRrBi-ket1ncBWOhxVAiDIIF9RlqqZk37h5LMzIZyDAxKSJMAiPiHbndgRkeQVJ3VvgPe63l64c8fsqbobe1-NNHeSnAakaY33pfHbBPe_3aGCBrjTS8zyV3TL9bQrfJnE4VYAmYtxRIoKh8xAdNHQ==", "id": "rs_0e2a58cfd7f94bbf016a033c956b9c8191934e2d8901279053", "summary": []}], "tool_calls": [{"id": "call_xUv6Hcus59HYOLbjd4oSWqVP", "call_id": "call_xUv6Hcus59HYOLbjd4oSWqVP", "response_item_id": "fc_0e2a58cfd7f94bbf016a033c9686008191967f0f47ae7b6707", "type": "function", "function": {"name": "web_search", "arguments": "{\"query\":\"\\\"2054160914438291840\\\" OR \\\"__microdancing\\\"\",\"limit\":10}"}}], "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\n \"success\": true,\n \"data\": {\n \"web\": [\n {\n \"url\": \"https://musicbrainz.org/work/80e21ed3-8ccd-4fca-a448-54ec9f21b378\",\n \"title\": \"Work “Microdancing” - MusicBrainz\",\n \"description\": \"Work “Microdancing” - MusicBrainz\\n[...]\\n# Microdancing\\n[...]\\n| Date | Title | Attributes | Artist | Length |\\n| --- | --- | --- | --- | --- |\\n| recordings |\\n| Microdancing | Babasónicos | 3:22 |\",\n \"position\": 1\n },\n {\n \"url\": \"https://musicbrainz.org/recording/6bc78a31-bb19-40cf-9396-7e2b0e22557f\",\n \"title\": \"Recording “Microdancing” by Babasónicos - MusicBrainz\",\n \"description\": \"Recording “Microdancing” by Babasónicos - MusicBrainz\\n[...]\\n# Microdancing\\n[...]\\n~ Recording by Babasónicos\\n[...]\\n| # | Title | Length | Track artist | Release title | Release artist | Release group type | Country/Date | Label | Catalog# |\\n| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\\n| Official |\\n| 1.6 | Microdancing | 3:23 | Babasónicos | Mucho | Babasónicos | Album | Universal Music(plain logo: “Universal Music”) |\\n| 1.6 | Microdancing | 3:22 | Babasónicos | Mucho | Babasónicos | Album | Universal(plain logo “Universal” used by Universal Music and Universal Pictures) |\\n[...]\\n### Microdancing\",\n \"position\": 2\n },\n {\n \"url\": \"https://open.spotify.com/track/4RdcVT8qZw3W4cHhpeSVct\",\n \"title\": \"Microdancing - song and lyrics by Babasonicos - Spotify\",\n \"description\": \"Microdancing - song and lyrics by Babasonicos | Spotify\",\n \"position\": 3\n },\n {\n \"url\": \"http://beatport.com/artist/microdancing/1201561\",\n \"title\": \"Microdancing Music & Downloads on Beatport\",\n \"description\": \"Microdancing Music & Downloads on Beatport\\n[...]\\n# Microdancing\\n[...]\\n## Latest Releases\\n[...]\\nXelima Records\\n[...]\\nXelima Records\\n[...]\\nXelima Records\\n[...]\\nXC11\\n[...]\\nMicrodancing, Pharmacy, Laekis, Non-specific Defence System\\n[...]\\nXelima\\n[...]\\nA Name EP\\n[...]\\nXelima Records\\n[...]\\nXelima Records\\n[...]\\nXelima Records\\n[...]\\nBeliefs EP\\n[...]\\nXelima Records\\n[...]\\nBerlin Boat EP\\n[...]\\nXelima Records\\n[...]\\n## Top Ten Tracks\\n[...]\\nUND0 Original Mix\\n[...]\\nXelima\\n[...]\\nBeliefs Original Mix\\n[...]\\nXelima Records\\n[...]\\nKrim 2 Original Mix\\n[...]\\nXelima\\n[...]\\nHead Top Original Mix\\n[...]\\nXelima\\n[...]\\nUND4 Original Mix\\n[...]\\nXelima Records\\n[...]\\nE85 Original Mix\\n[...]\\nJust Original Mix\\n[...]\\nXelima Records\\n[...]\\nUND5 Original Mix\\n[...]\\nXelima Records\\n[...]\\nUND3 Original Mix\\n[...]\\nUND2 Original Mix\\n[...]\\nXelima Records\",\n \"position\": 4\n },\n {\n \"url\": \"https://www.junodownload.com/products/microdancing-und/7409125-02/\",\n \"title\": \"Microdancing - UND on Juno Download | MP3, WAV, FLAC\",\n \"description\": \"Microdancing - UND on Juno Download | MP3, WAV, FLAC\\n[...]\\nHome Techno Xelima Microdancing\\n[...]\\n## Microdancing\\n[...]\\n### Xelima\\n[...]\\nCat: XR 577Released: 16 January, 2026Genre: Techno\\n[...]\\n320KB/S MP3\\n[...]\\n320KB/S MP3\\n[...]\\n320KB/S MP3WAVFLACALACAIFF\\n[...]\\n1. UND0\\n[...]\\n3:38\\n[...]\\n2. UND1\\n[...]\\n3. UND2\\n[...]\\n4. UND3\\n[...]\\n5. UND4\\n[...]\\n6. UND5\\n[...]\\nMicrodancingXelima\",\n \"position\": 5\n },\n {\n \"url\": \"https://www.beatport.com/artist/microdancing/1201561/tracks\",\n \"title\": \"Microdancing\",\n \"description\": \"Microdancing Music download :: Beatport\\n* Beatport Logo\\n* Genres\\n* Dig Deeper\\n* Beatport DJ\\n* Beatportal\\n* Beatport Studio\\n* Beatport.io\\n* * Add Streaming\\n* Login\\n* * My Beatport\\n* Collection\\n* Downloads\\n* Playlists\\nCreate playlist\\n# Microdancing\\nFollow\\nPlay\\nAdd to queue\\nFeatured\\n[...]\\nGenre**\\n* Minimal / Deep Tech(29)\\n* Techno (Raw / Deep / Hypnotic)(8)\\n[...]\\nResetApply\\nArtists**\\n* Microdancing(37)\\nResetApply\\nKey\\n[...]\\n* A Major(4)\\n* A Minor(4\\n[...]\\n* B Minor(\\n[...]\\n* Xelima Records(19)\\n[...]\\n* Merien Records(18)\\n[...]\\nColumbiaOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nTechno (Raw / Deep / Hypnotic)\\n\\n125BPM- Gb Minor\\n2025-03-17\\n$1.69**\\n[...]\\nAdd to playlist\\n\\nWinter TapeOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nTechno (Raw / Deep / Hypnotic)\\n\\n125BPM- Gb Minor\\n2025-03-17\\n[...]\\n$1.69**\\n[...]\\nThe DoorOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nTechno (Raw / Deep / Hypnotic)\\n\\n125BPM- B Minor\\n2025-03-17\\n$1.69**\\n[...]\\nSnowfallOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nTechno (Raw / Deep / Hypnotic)\\n\\n125BPM- E Major\\n2025-03-17\\n$1.69**\\n[...]\\nReaction DodgeOriginal Mix\\n\\nMicrodancing\\n\\nXelima Records\\n\\n\\nTechno (Raw / Deep / Hypnotic)\\n\\n128BPM- Bb Minor\\n2025-01-24\\n[...]\\n$1.49**\\n[...]\\nI1Original Mix\\n\\nMicrodancing\\n\\nXelima Records\\n\\n\\nTechno (Raw / Deep / Hypnotic)\\n\\n83BPM- G Major\\n2025-01-24\\n[...]\\n$1.49**\\n[...]\\nMind ReadyOriginal Mix\\n\\nMicrodancing\\n\\nXelima Records\\n\\n\\nTechno (Raw / Deep / Hypnotic)\\n\\n126BPM- E Minor\\n2025-01-24\\n[...]\\n$1.49**\\n[...]\\nPortable StorageOriginal Mix\\n\\nMicrodancing\\n\\nXelima Records\\n\\n\\nTechno (Raw / Deep / Hypnotic)\\n\\n128BPM- Gb Minor\\n2025-01-24\\n[...]\\n$1.49**\\n[...]\\nGood IntentionsOriginal Mix\\n\\nMicrodancing\\n\\nXelima Records\\n\\n\\nMinimal / Deep Tech\\n\\n124BPM- D Minor\\n2024-11-27\\n[...]\\n$1.49**\\n[...]\\nAdd to playlist\\n\\nDesiresOriginal Mix\\n\\nMicrodancing\\n\\nXelima Records\\n\\n\\nMinimal / Deep Tech\\n\\n120BPM- A Minor\\n[...]\\n2024-11-27\\n[...]\\n$1.49**\\n[...]\\nDeep HugOriginal Mix\\n\\nMicrodancing\\n\\nXelima Records\\n\\n\\nMinimal / Deep Tech\\n\\n68BPM- A Minor\\n[...]\\n2024-11-27\\n[...]\\n$1.49**\\n[...]\\nBeat FantasyOriginal Mix\\n\\nMicrodancing\\n\\nXelima Records\\n\\n\\nMinimal / Deep Tech\\n\\n124BPM- Eb Minor\\n2024-11-27\\n[...]\\n$1.49**\\n[...]\\nHere We AreOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nMinimal / Deep Tech\\n\\n123BPM- Db Minor\\n2024-05-22\\n$1.49**\\n[...]\\nAdd to playlist\\n\\nNo MirrorOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nMinimal / Deep Tech\\n\\n122BPM- Gb Minor\\n2024-05-22\\n$1.49**\\n[...]\\nHere We ArePlay\\n[...]\\nAdd to playlist\\n\\nNormal ModeOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nMinimal / Deep Tech\\n\\n122BPM- A Major\\n2024-05-22\\n[...]\\n$1.49**\\n[...]\\nAdd to playlist\\n\\nRandOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nMinimal / Deep Tech\\n\\n122BPM- Bb Minor\\n2024-05-22\\n$1.49**\\n[...]\\nAdd to playlist\\n\\nJingleOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nMinimal / Deep Tech\\n\\n122BPM- Gb Minor\\n2024-05-22\\n$1.49**\\n[...]\\nHere We ArePlay\\n[...]\\nAdd to playlist\\n\\nRibbonOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nMinimal / Deep Tech\\n\\n122BPM- Bb Minor\\n2024-05-22\\n$1.49**\\n[...]\\nHere We ArePlay\\n[...]\\nAdd to playlist\\n\\nRollingOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nMinimal / Deep Tech\\n\\n122BPM- Gb Minor\\n2024-05-22\\n$1.49**\\n[...]\\nHere We ArePlay\\n[...]\\nAdd to playlist\\n\\nIntroversion IOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nMinimal / Deep Tech\\n\\n122BPM- A Major\\n[...]\\n2024-05-22\\n[...]\\n$1.49**\\n[...]\\nto playlist\\n\\nOne NightOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nMinimal / Deep Tech\\n\\n122BPM- Gb Minor\\n2024-05-22\\n$1.49**\\n[...]\\nTap TempoOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nMinimal / Deep Tech\\n\\n122BPM- Eb Minor\\n2024-05-20\\n[...]\\n$1.49**\\n[...]\\nHere We GoPlay\\n[...]\\nAdd to playlist\\n\\nYour BackOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nMinimal / Deep Tech\\n\\n122BPM- A Major\\n2024-05-20\\n[...]\\n$1.49**\\n[...]\\nYes SirOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nMinimal / Deep Tech\\n\\n122BPM- Gb Minor\\n2024-05-20\\n$1.49**\\n[...]\\nHere We GoPlay\\n[...]\\nAdd to queue\\n[...]\\nAdd to playlist\\n\\nTransparentOriginal Mix\\n\\nMicrodancing\\n\\nMerien Records\\n\\n\\nMinimal / Deep Tech\\n\\n122BPM- A Major\\n[...]\\n2024-05-20\\n[...]\\n$1.49**\",\n \"position\": 6\n },\n {\n \"url\": \"https://audiomack.com/microdancing/album/und\",\n \"title\": \"Microdancing UND\",\n \"description\": \"UND by Microdancing: Listen on Audiomack\\n[...]\\n# MicrodancingUND\\n[...]\\n- ℗ Xelima Records\\n- Release Date:January 16, 2026\\n[...]\\n## Microdancing\\n[...]\\n#### Microdancing\\n[...]\\nA Name EP\\n[...]\\n#### Microdancing\\n[...]\\n#### Microdancing\\n[...]\\nBeliefs EP\",\n \"position\": 7\n },\n {\n \"url\": \"https://www.beatsource.com/artist/microdancing/880515\",\n \"title\": \"Microdancing Music and DJ Edits on Beatsource\",\n \"description\": \"Microdancing Music and DJ Edits on Beatsource\\n[...]\\n# Microdancing\\n[...]\\n# Featured Releases\\n[...]\\n## Microdancing\\n[...]\\n## Xelima Records\\n[...]\\n# Mind Calm\\n[...]\\n## Microdancing\\n[...]\\n## Xelima Records\\n[...]\\n## Microdancing\\n[...]\\n## Xelima Records\\n[...]\\n# XC11\\n[...]\\n## Microdancing, Pharmacy, Laekis, Non-specific Defence System\\n[...]\\n## Xelima Records\\n[...]\\n# Head Top\\n[...]\\n## Microdancing\\n[...]\\n## Xelima Records\\n[...]\\n# A Name EP\\n[...]\\n## Microdancing\\n[...]\\n## Xelima Records\\n[...]\\n## Microdancing\\n[...]\\n## Xelima Records\\n[...]\\n## Microdancing\\n[...]\\n## Xelima Records\\n[...]\\n# Beliefs EP\\n[...]\\n## Microdancing\\n[...]\\n## Xelima Records\\n[...]\\n# Berlin Boat EP\\n[...]\\n## Microdancing\\n[...]\\n## Xelima Records\\n[...]\\n# Snowfall\\n[...]\\n## Microdancing\\n[...]\\n## Merien Records\\n[...]\\n# Mind Ready\\n[...]\\n## Microdancing\\n[...]\\n## Xelima Records\",\n \"position\": 8\n },\n {\n \"url\": \"https://xelimarecords.bandcamp.com/album/microdancing-a-name-ep\",\n \"title\": \"Microdancing - A Name EP | Xelima Records\",\n \"description\": \"Microdancing - A Name EP | Xelima Records\\n\\n+ add\\n\\n×\\n\\nNo matching results\\n\\nTry a different filter or a new search keyword.\\n\\n- See all results\\n\\nSearch all Bandcamp artists, tracks, and albums\\n\\ncancel\\n\\n×\\n\\nNo matching results\\n\\nTry a different filter or a new search keyword.\\n\\n- See all results\\n\\nSearch all Bandcamp artists, tracks, and albums\\n\\ncancel\\n\\nGet fresh music recommendations delivered to your inbox every Friday.\\n\\n## Microdancing - A Name EP\\n\\n### by Xelima Records\\n\\nsupported by\\n\\n/\\n\\n### Digital Album Streaming + Download\\n\\nIncludes unlimited streaming via the free Bandcamp app, plus high-quality download in MP3, FLAC and more.\\n\\nPurchasable with gift card\\n\\nDownload available in 16-bit/44.1kHz.\\n\\n#### Buy Digital Album €3 EUR or more\\n\\n#### Send as Gift\\n\\n### Full Digital Discography\\n\\n434\\n\\nreleases\\n\\nGet all 434 Xelima Records releases available on Bandcamp and save 90%.\\n\\nIncludes unlimited streaming via the free Bandcamp app, plus high-quality downloads of PHARMACY - GREAT ELEPHANT, LUCAS LOYATO - OPX COOL, MIRROR ISLAND - A MUST (ambient), VOLLKOMM - M8TIVAD8, ANTEAC - DEAD FLOWERS, Rous b - Mogotes EP, ANTEAC - NOT LABELLED FOR IMPORT, microdancing - shark, and 426 more., and , .\\n\\nPurchasable with gift card\\n\\n#### Buy Digital Discography €129.43 EUR or more (90% OFF)\\n\\n#### Send as Gift\\n\\n### Share / Embed\\n\\n1.\\n\\nMicrodancing - Gizeh 05:38\\n\\n2.\\n\\nMicrodancing - A Name 05:31\\n\\n### credits\\n\\nreleased January 8, 2026\\n\\n### license\\n\\nall rights reserved\\n\\n### tags\\n\\n### Tags\\n\\n### Shopping cart\\n\\n| subtotal | USD |\\n| --- | --- |\\n| taxes calculated at checkout |\\n\\nCheck out\\n\\n### about\\n\\nXelima Records Cordoba, Argentina\\n\\nplaceholder\\n\\nXELIMA RECORDS you can also find exclusive material from all genres here: merien.bandcamp.com\\n\\n### contact / help\\n\\nStreaming and Download help\\n\\nReport this album or account\\n\\nIf you like Xelima Records, you may also like:\\n\\nA Fireside Chatby Xen Chron\\n\\nA collection of distinctively squelchy techno oddities from DJ & producer Chris Leamy under his Xen Chron alias. Bandcamp New & Notable\\n\\nBreakneck techno from Desirée Falessi that moves at a million miles a minute, racing drums and breathless pads. Bandcamp New & Notable\\n\\nFederation Of Rytm IVby Various Artists\\n\\nA killer 30-track collection from German label Mutual Rytm spanning the past, present, and future of techno. Bandcamp New & Notable\\n\\n\\\"Combat EP\\\" by Acutek delivers blisteringly minimal electronics—classic coldwave colliding with techno. Bandcamp New & Notable\\n\\nThe new single from this UK act is electronic music at its most searing, with white-hot electronics blazing over hectic beats. Bandcamp New & Notable\\n\\nThe latest EP of hypnotic techno tracks from Scottish producer Acutek is also the first release on his new label, Flick. Bandcamp New & Notable\\n\\nClaude B delivers an EP full of twitchy tech house, needlepoint synths scraping and prickling. Bandcamp New & Notable\",\n \"position\": 9\n },\n {\n \"url\": \"https://www.songsterr.com/a/wsa/babasonicos-microdancing-tab-s647276\",\n \"title\": \"Microdancing Tab by Babasónicos | Songsterr Tabs with Rhythm\",\n \"description\": \"Microdancing Tab by Babasónicos | Songsterr Tabs with Rhythm\\n\\nAd loading…\",\n \"position\": 10\n }\n ]\n }\n}", "tool_call_id": "call_xUv6Hcus59HYOLbjd4oSWqVP", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "assistant", "content": "", "reasoning": null, "finish_reason": "tool_calls", "codex_reasoning_items": [{"type": "reasoning", "encrypted_content": "gAAAAABqAzyb1mhGvyyvT1g5i-KyKhoA9pddqBIpAN8yq6loNqbIKd1fazXzf71Qmi03_ymkEGwmISj_NWFyjaR1zhE2If21NH10j5B8m5ftKwijuYFvUyxzfgMWr0cF4Bee2ZyUXS8hkOPTRc5rXfYqlubLbn0hxT0ZYUCPePJrJYxyFmrGpbS3nJKfTFhT0azdOZW6ooSwfKrtz9sg6O4rQSETN1Pj-7pt6pHbuUoZUOUS1BleTZGAfTjddFtghFLY1_gZi97x9ihknoNCSYkUUFSEhIDfACrKuD50LEo8fr21HLLekd5FW2unwK1EYBPOx9wTCXQBmy38aoDK36yF5LYPTx53EoC-U0rQW3IHLCYVPwuTJQXru5EDLmQ9jDr4rmtqYojMyrHr6doVQs6NcUXz08vJkqfTovpiyPFwzshznz_H99ShrSkpUa4nt9gnconP83utG8qqaNwoJGkgC4ZTHa_YUB7QclBFOpwDOfk4ohUkPex-b6ezp3F5qHGQK8LbU-e0z6NpcpQJUI-kBz2WmWNo6nw2PuutSPuzb091HYYkcz14hewIvhwtWmQ5it9aF5bkOEc11AS0dZOs90sWy_SlaBAlK5iDtO89Ct3pQeL64Xq58uEy9ykgP7rCSMRMNZtp8luJXv2MXDKlKqCsWM2bXUokapNGi034x1r-Ez1gewXfxh_zNdIMMrY6G6Hyu7SJ9ThdNU6F8MT_EP7qpPYPYfZvWDUz6oHZxV-1XrpGbY2eWR7mom2tapY4xbNDAXcXgxnUFHb9vZLAC_VVlvv-iS3i02WbZ2XxVoeqR9omGm2kfVm9dcgk5e8LJ7tYSrUlG4mUBEQmW6rNinXCuHIuMK7GHFfmwCCB-quRA_7rqeAlPUeTW1Psyeq5w_chGtQ1NDHOfccnf2P6RLKmcafYq1lTnTYEbuwAHyNPgb3lHtYyyPvk2xMXp0kkqmu1yG2hRUO33lUMxg8w1oSNQBgwWA==", "id": "rs_05397c2fa9b0c9d6016a033c99ee488191b9e750ea39d19ac9", "summary": []}], "tool_calls": [{"id": "call_cuLAMTXJmQaA5ew2t35OQYVN", "call_id": "call_cuLAMTXJmQaA5ew2t35OQYVN", "response_item_id": "fc_05397c2fa9b0c9d6016a033c9b527c81918201cd5561e2b00e", "type": "function", "function": {"name": "web_extract", "arguments": "{\"urls\":[\"https://publish.twitter.com/oembed?url=https://x.com/__microdancing/status/2054160914438291840\"]}"}}], "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\"error\": \"Content was inaccessible or not found\"}", "tool_call_id": "call_cuLAMTXJmQaA5ew2t35OQYVN", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "assistant", "content": "", "reasoning": null, "finish_reason": "tool_calls", "tool_calls": [{"id": "call_4PjCyULwuVFq5qydQIwAb9tt", "call_id": "call_4PjCyULwuVFq5qydQIwAb9tt", "response_item_id": "fc_00fcfcbd64e569c0016a033ca99a408191b9129e8eecb1d40c", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\":\"python3 - <<'PY'\\nimport requests\\nurl='https://cdn.syndication.twimg.com/tweet-result?id=2054160914438291840&lang=en'\\nr=requests.get(url,timeout=20,headers={'User-Agent':'Mozilla/5.0'})\\nprint(r.status_code)\\nprint(r.text[:2000])\\nPY\", \"timeout\":60}"}}], "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\"output\": \"200\\n{}\", \"exit_code\": 0, \"error\": null}", "tool_call_id": "call_4PjCyULwuVFq5qydQIwAb9tt", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "assistant", "content": "", "reasoning": null, "finish_reason": "tool_calls", "codex_reasoning_items": [{"type": "reasoning", "encrypted_content": "gAAAAABqAzyy6klO81YADGM9Dd-ryFiY_0DsL3h0DkwuifkuCwZPptEWcZVreRloDWOscNdlZt0MzyYam5iDjhrgRbVQtN7sNXEZad3ZOB7nVGsHlTbLo_B4mQ_3uDbivZ816eZbkUs1MEzKIE4aeKQY-k44joCH55RzzRu0B622dqLQdDtzXSTY4E9S-btBvsAMEPDP9QLGLS2YDhteq9D0ZRoGOFfQsCKR6R4UC2TdtY6v77Hgweh6BVv09FsxwvBzqMmDau_xiI91e6Ysh74Qv4K4VSfoFjBzJDJt-K_tFRpchaucizuVo20apo6UBZG5kc-Cn47Ci29AgIvQgSOagUmLy_unlEHgj0-QKQztbFBpmcs72yfd2oYYvHJF0J5T06qPYrRkVzBRgZJB71SoVlQ5F4k2nT68kFkFXC5EDcpO3dGFa6ahTG50APUqBFjR3YewPivVxZ6FrssByf2p8b_Q452QXZcQlAAFyxqqirEkgHWR0vzksifAt1ib5mTO0wLGmR1aah-Mmz2j90fffSVXje8INtKINBszsUDO6iwvyPy14nEKQzJs2294wSn0IbdZsgQC3eWqcSGogGn_WqvvZ_yfxDJSe6ck2wVNrG9WKAuaZUN5l8j70z1t4JUOB-H5Yk46cYKYg7domvfxN2CJiYv4-yjlJPMOPqJbt4qvtg3ajPCRQLfHzf9C9nQfRHM35f8JMtgW4HnhTekxnEGS6HxakRE8t2rt1ZQQlWnM4Nn9bXk2Q4Jdrlz-n2hIiXPM4LyBGRC7iDtGmi2khQtSQxm42x92NmYhBo6MkbepaW8v1fY7QFAO4wDc5Y4SyCC3zp876Lf7FY_M-LhJuesTSNgksUihJRHprI9FzDTgA_dVtsxdUA3rf5PSDVZ16DB77djbIA0XH7L-lSV4oVuotIspCIi8shIyJwlhkljR3k0ICqVcQ7BGMgPULv0lRwICM7vOV2a9ecB8cOogRXnvNpXOjdEymLEcMA5W8WPK4D4TZ59Q7xO_iWmgo3twAsyQBfiSQvfzi3sqLL7tlGZ8SVBcOw==", "id": "rs_082dd806b3d91864016a033cb09fac81919b7dec6215399513", "summary": []}], "tool_calls": [{"id": "call_4tyLWvHrDkFy8VoHTbBfr1GF", "call_id": "call_4tyLWvHrDkFy8VoHTbBfr1GF", "response_item_id": "fc_082dd806b3d91864016a033cb22e9881919aae9f30f4ddf70a", "type": "function", "function": {"name": "web_search", "arguments": "{\"query\":\"\\\"__microdancing\\\" \\\"factible\\\" OR \\\"2054160914438291840\\\" -music\",\"limit\":20}"}}], "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\n \"success\": true,\n \"data\": {\n \"web\": [\n {\n \"url\": \"https://musicbrainz.org/work/80e21ed3-8ccd-4fca-a448-54ec9f21b378\",\n \"title\": \"Work “Microdancing” - MusicBrainz\",\n \"description\": \"Work “Microdancing” - MusicBrainz\\n[...]\\n# Microdancing\\n[...]\\n| Date | Title | Attributes | Artist | Length |\\n| --- | --- | --- | --- | --- |\\n| recordings |\\n| Microdancing | Babasónicos | 3:22 |\",\n \"position\": 1\n },\n {\n \"url\": \"https://fusion-circus.com/events/microdancing-in-brussels/\",\n \"title\": \"Microdancing in Brussels: a dance event for small movements and big presence - fusion-circus.com\",\n \"description\": \"Microdancing in Brussels: a dance event for small movements and big presence - fusion-circus.com\\n[...]\\n## Microdancing in Brussels: a dance event for small movements and big presence\\n[...]\\n### What is microdancing?\\n[...]\\nMicrodancing is a dance form based on very small, subtle movements and an intimate, nuanced connection between partners. Instead of big steps or flashy moves, it focuses on tiny gestures, breath-sized shifts, and minimal body communication. This allows dancers to truly listen—to the music and to each other—creating a quiet yet deeply expressive shared experience.\\n[...]\\nMicrodancing is easy to pick up. Whether you’re completely new to dance or highly experienced in one or several styles, you’ll be able to find a partner and share a meaningful moment on the dance floor.\\n[...]\\nWe’ll start with open-level workshops that introduce useful tools and techniques for microdancing. These sessions are also a playful way to build connection, trust, and a shared dance language among participants.The potluck will nourish both body and spirit, giving us time to relax and get to know one another.In the evening, there will be space to freely practice and explore microdancing, with music by DJ Diana.\\n[...]\\n18:45 – 22:00 Practice time! Social dancing with DJ Diana. Open to\\n[...]\\n## Registration and prices\\n[...]\\nWe believe microdancing grows best when it’s shared. That’s why tickets for two are available at a lower, promotional price. Come with a friend, share the experience, and help the community grow.\\n[...]\\n### Nosotros Tango / BAyres53\\n[...]\\nAvenue du Bois de la Cambre 53 à 1050 Ixelles\\n[...]\\nGot any questions, suggestions, or want to collaborate? Contact Agnieszka at atworkagnieszka @ gmail.com.\",\n \"position\": 2\n },\n {\n \"url\": \"https://artwalknews.com/2025/05/14/why-micro-dance-challenges-are-igniting-social-media/\",\n \"title\": \"Why Micro-Dance Challenges Are Igniting Social Media - artwalknews\",\n \"description\": \"Why Micro-Dance Challenges Are Igniting Social Media - artwalknews\\n[...]\\nIn the ever-evolving world of social media, trends come and go with incredible speed. Yet some phenomena manage to capture collective attention and hold it—for weeks, months, or even longer. One of the most powerful of these recent trends is the rise of micro-dance challenges. These short, catchy, and highly shareable dance routines are igniting platforms like TikTok, Instagram Reels, and YouTube Shorts, becoming a cultural phenomenon that goes far beyond mere entertainment.\\n[...]\\nBut what exactly makes\\n[...]\\nchallenges so magnetic? Why are\\n[...]\\nMicro-dance challenges are short choreographed routines—often 15 to 30 seconds long—set to trending songs. Unlike traditional dance performances, these challenges are designed to be easy to learn, fun to perform, and highly repeatable. They usually involve simple, rhythmic movements that align with a beat drop or lyric, making them accessible to everyone, from seasoned dancers to absolute beginners.\\n[...]\\nThese challenges often originate from influencers, dance creators, or even artists promoting a new single. Once released, they take on a life of their own, inspiring millions of recreations across the globe.\\n[...]\\nOne key reason for the success of micro-dance challenges is their interactive nature. Social media thrives on user-generated content, and dance challenges turn passive viewers into active creators. Instead of just liking or sharing a video, users can join the trend, put their own spin on the choreography, and showcase their personality.\\n[...]\\nThis blend of entertainment and participation encourages virality. Once a challenge starts trending, more users jump in, hoping to go viral themselves. The low barrier to entry—thanks to short runtimes and straightforward moves—further fuels mass adoption.\\n[...]\\nIn the digital age, attention spans are shrinking. The average user scrolls quickly, giving content just a few seconds to make an impression. Micro-dance challenges are tailor-made for this environment. Their brief, high-energy format captures attention almost instantly and delivers satisfaction in under a minute.\\n[...]\\nBecause they’re so short, viewers often watch them multiple times or jump from one version to another, keeping engagement levels high. Platforms like TikTok and Instagram even favor such content in their algorithms, rewarding creators with more visibility and reach.\\n[...]\\nDance has always been a powerful form of self-expression, and social media democratizes access to this creative outlet. Micro-dance challenges allow users to add flair—through outfit choices, facial expressions, background settings, and even slight choreography tweaks.\\n[...]\\nMusic is the heartbeat of any dance challenge. A catchy song or hook can spark a trend overnight. Artists and music producers now recognize the power of viral dance trends in promoting new singles. In fact, many release music with TikTok or Reels in mind—featuring segments designed to inspire dance routines.\\n[...]\\nThe result is a mutually beneficial ecosystem: creators get exposure, users get fun content, and artists gain streams and chart traction. It’s a win-win-win driven by rhythm, movement, and digital reach.\\n[...]\\nMicro-dance challenges are more than fleeting trends—they’re a vibrant expression of culture, creativity, and connection. In just a few seconds, they blend music, motion, and identity in ways that resonate across generations and continents. Whether you’re dancing in your kitchen or watching from your phone, it’s clear: this is one social media wave that’s got everyone moving.\\n[...]\\nSo the next time you see a trending dance pop up on your\\n[...]\\n, don’t just scroll by—get up, join in, and let the rhythm carry you into the global groove.\",\n \"position\": 3\n },\n {\n \"url\": \"https://www.musicbiatch.com/music/factible/\",\n \"title\": \"Factible MP3 Download\",\n \"description\": \"Factible MP3 Download\\n[...]\\n# factible\\n[...]\\nFactible→ Download, Listen and View free Factible MP3, Video and Lyrics\\n[...]\\nQue significa FACTIBLE • factible SIGNIFICADO • factible DEFINICIÓN • Que es FACTIBLE→ Download, Listen and View free Que significa FACTIBLE • factible SIGNIFICADO • factible DEFINICIÓN • Que es FACTIBLE MP3, Video and Lyrics\\n[...]\\nFactible→ Download, Listen and View free Factible MP3, Video and Lyrics\\n[...]\\nFactible, una solución de Fenalco Antioquia→ Download, Listen and View free Factible, una solución de Fenalco Antioquia MP3, Video and Lyrics\\n[...]\\n¿Qué significa factible?→ Download, Listen and View free ¿Qué significa factible? MP3, Video and Lyrics\\n[...]\\nMétodo 100% factible!!!! 😈#toxica #parejas #humor #fypシ゚ #jajaja→ Download, Listen and View free Método 100% factible!!!! 😈#toxica #parejas #humor #fypシ゚ #jajaja MP3, Video and Lyrics\\n[...]\\nComo encontrar la región factible→ Download, Listen and View free Como encontrar la región factible MP3, Video and Lyrics\\n[...]\\nREGIÓN FACTIBLE Desde CERO [Programación Lineal]→ Download, Listen and View free REGIÓN FACTIBLE Desde CERO [Programación Lineal] MP3, Video and Lyrics\\n[...]\\nFactible Significado En Español→ Download, Listen and View free Factible Significado En Español MP3, Video and Lyrics\\n[...]\\nDefinición de factible→ Download, Listen and View free Definición de factible MP3, Video and Lyrics\\n[...]\\n¿QUÉ ES EL PROYECTO FACTIBLE? ELEMENTOS BASICOS PROYECTO FACTIBLE CÓMO HACER PROYECTO FACTIBLE (I)→ Download, Listen and View free ¿QUÉ ES EL PROYECTO FACTIBLE? ELEMENTOS BASICOS PROYECTO FACTIBLE CÓMO HACER PROYECTO FACTIBLE (I) MP3, Video and Lyrics\\n[...]\\nFACTIBLE→ Download, Listen and View free FACTIBLE MP3, Video and Lyrics\\n[...]\\nProgramación Lineal: Función Objetivo, Restricciones y Región Factible→ Download, Listen and View free Programación Lineal: Función Objetivo, Restricciones y Región Factible MP3, Video and Lyrics\\n[...]\\nLa reencarnación es factible y posible #drmanuelsanssegarra #supraconciencia→ Download, Listen and View free La reencarnación es factible y posible #drmanuelsanssegarra #supraconciencia MP3, Video and Lyrics\\n[...]\\nProyecto factible→ Download, Listen and View free Proyecto factible MP3, Video and Lyrics\",\n \"position\": 4\n },\n {\n \"url\": \"https://tracxn.com/d/companies/factible/__3isrIwJb65u7qbbZcuuT-PQoNzqU3r29M7bkbge5y60\",\n \"title\": \"Factible - Company Profile\",\n \"description\": \"Factible - 2025 Company Profile & Competitors - Tracxn\\n[...]\\n# Factible - Company Profile\\n[...]\\n## Factible - About the company\\n[...]\\nFactible is an unfunded company based in Quito (Ecuador). It operates as a Software platform offering billing solutions. Factible has not raised any funding yet. The company has 2618 active competitors, including 201 funded and 140 that have exited. Its top competitors include companies like Intuit, Visma and Xero.\\n[...]\\nSoftware platform offering billing solutions. It offers solutions for electronic billing management, document management, and more.\\n[...]\\nWebsite factible.ec\\n[...]\\nQuito, Ecuador\\n[...]\\n## Factible's funding and investors\\n[...]\\nFactible has not raised any funding rounds yet.\\n[...]\\n## Factible's Competitors and alternates\\n[...]\\nTop competitors of Factible include Intuit, Visma and Xero. Here is the list of Top 10 competitors of Factible, ranked by Tracxn score:\\n[...]\\n2568th\\n[...]\\nQuito (Ecuador), Unfunded\\n[...]\\nSoftware platform offering billing solutions\\n[...]\\nFactible'\\n[...]\\nFactible has made no investments or acquisitions yet.\\n[...]\\n## FAQs about Factible\\n[...]\\nWhat does Factible do\",\n \"position\": 5\n },\n {\n \"url\": \"https://tardigram.com/tag/factible%C2%BB\",\n \"title\": \"#factible» - Tardigram\",\n \"description\": \"#factible» - Tardigram\\n\\nEn Tardigram tu contenido es tuyo😎\\n\\n#factible» - Tardigram\\nGo to content\\nGo to filters\\nGo to search\\n* **\\n* **\\n* \\nAdd new thread\\n\\n* Add new post\\n\\n* Log in\\nEn Tardigram tu contenido es\\n[...]\\nShow Comment Avatars\\n**Moderation log**\\nShow users’ avatars\\nShow magazines’ icons\\nShow new icons\\n#factible»\\n* \\nCombined\\n\\n* \\nThreads \\n* \\nMicroblog \\n* \\nPeople\\n\\n* \\nMagazines\\n\\n### Tag\\n####\\n\\n#factible»\\n\\n* Threads1\\n* Comments0\\n* Posts0\\n* Replies0\\n### Active people\",\n \"position\": 6\n },\n {\n \"url\": \"http://en.wiktionary.org/wiki/factible\",\n \"title\": \"factible - Wiktionary, the free dictionary\",\n \"description\": \"factible m or f (masculine and feminine plural factibles)\\n[...]\\nfactible m or f (plural factibles)\\n[...]\\n- IPA(key): /faɡˈtible/ [faɣ̞ˈt̪i.β̞le]\\n- Rhymes: -ible\\n- Syllabification: fac‧ti‧ble\\n[...]\\nfactible m or f (masculine and feminine plural factibles)\",\n \"position\": 7\n },\n {\n \"url\": \"https://www.theacropolismuseum.gr/en/events/microdances-athens\",\n \"title\": \"MicroDances. Athens | Acropolis Museum | Official website\",\n \"description\": \"MicroDances. Athens | Acropolis Museum | Official website\\n[...]\\n## MicroDances. Athens\\n[...]\\nAthens • 9 and 10 October 2021 Acropolis Museum - National Museum of Contemporary Art Athens (EMST) - Stavros Niarchos Foundation Cultural Center (SNFCC) - Greek National Opera\\n[...]\\nThe Greek National Opera Ballet presents MicroDances at three emblematic venues in Athens on 9 and 10 October. A five-hour wandering through dance along the axis of Syggrou Avenue, from the Acropolis Museum at Makrygianni to the National Museum of Contemporary Art Athens (EMST) at Fix and the Stavros Niarchos Foundation Cultural Center (SNFCC) at Delta Falirou.\\n[...]\\nMicroDances is held as part of the project An Ideal City, which aims to research and explore the possibilities of dance as a public art that is rooted in the urban web of three cities: Athens, Reggio Emilia and Brussels. The project An Ideal City was launched in October 2020 and will be completed in July 2022. It is the fruit of the collaboration of three European dance organisations, Fondazione Nazionale della Danza / Aterballetto (Reggio Emilia), Les Halles de Schaerbeek (Brussels), and the Greek National Opera Ballet and it is co-funded by the EU programme Creative Europe, which aims at supporting Europe’s cultural and creative industry. The GNO Ballet programme is made possible by a grant from the Stavros Niarchos Foundation (SNF) to the Greek National Opera.\\n[...]\\nMicroDances consists of short dance performances, from 6 to 10 minutes long, designed for one or three dancers and for small spaces. They were commissioned from artists from very different backgrounds and with very varied influences, who were called upon to create a rich and diverse choreographic environment. In the first phase of the programme works by eight Greek and thirteen foreign choreographers will be developed in an organic relationship with select museum/cultural venues in three cities. In the second phase they will be rearticulated according to each different city’s public space and the special way it converses with bodies and history.\\n[...]\\nOn 9 and 10 October audience members will have the possibility to follow a five-hour route with 21 stops that will be divided into the four institutions hosting the works: the halls of the Acropolis Museum, the National Museum of Contemporary Art Athens (EMST), the parking, Stavros Niarchos Park and Lighthouse of the Stavros Niarchos Foundation Cultural Center (SNFCC), as well as the Foyer, the backstage of the Stavros Niarchos Hall, and the rehearsal rooms of the Greek National Opera.\\n[...]\\nThe route will start every day from the Acropolis Museum at 11.00, 12.00 and 13.00, it will continue to the EMST and will conclude at around 16.00, 17.00 and 18.00 respectively, at SNFCC and GNO’s venues. Audience members will be transported from one venue to the other by a minibus leased by the GNO.\\n[...]\\nAn Ideal City aims at bringing out the public art of dance in three European urban landscapes with a strong historical and symbolic character, Athens, Reggio Emilia and Brussels. More specifically, with this project the three organisations aim to:\\n[...]\\n### Venues and works\\n[...]\\n– Acropolis Museum\\n[...]\\nΒ – National Museum of Contemporary Art Athens (EMST), Suggrou Avenue, Fix\\n[...]\\nC – Stavros Niarchos Foundation Cultural Center (SNFCC),\\n[...]\\n36\\n[...]\\nD – GREEK NATIONAL OPERA (SNFCC),\\n[...]\\n36\\n[...]\\nIn collaboration with the Acropolis Museum, the National Museum of Contemporary Art Athens (EMST) and the Stavros Niarchos Foundation Cultural\\n[...]\\n(SNFCC). Lead Donor of the GNO\\n[...]\\nros Niarchos Foundation (SNF)\",\n \"position\": 8\n },\n {\n \"url\": \"https://github.com/Sapphire-Labs/Hackathon\",\n \"title\": \"Factibly/factibly\",\n \"description\": \"# Repository: Factibly/factibly\\n[...]\\nYour online sources, fact checked by the crowd\\n[...]\\n- Stars: 1\\n- Forks: 0\\n- Watchers: 1\\n- Open issues: 0\\n- Primary language: TypeScript\\n- Languages: TypeScript (74.6%), Python (10.8%), Kotlin (6.4%), JavaScript (3.8%), Swift (1.4%), C++ (1.1%), Shell (0.7%), HTML (0.5%), CSS (0.5%), Ruby (0.1%), Makefile\\n- Default branch: master\\n- Homepage: https://www.factibly.com\\n- Created: 2020-06-16T23:34:10Z\\n- Last push: 2022-07-11T07:11:35Z\\n- Contributors: 3 (top: chandlerlei2017, JadonFan, jasonantao)\\n[...]\\n# Factibly\\n[...]\\n## Apps and Services\\n[...]\\n| App/Service | Code Name | URL |\\n| --- | --- | --- |\\n| factibly.com | fc-web | www.factibly.com |\\n| Factibly Android | fc-android | _Coming Soon_ |\\n| Factibly iOS | fc-ios | _Coming Soon_ |\\n| Factibly Monday | fc-monday | _Coming Soon_ |\\n| Factibly APIs and Services (back-end) | fc-api | _Not Applicable_ |\\n| Factibly Internal Tools | fc-internal | _Not Applicable_ |\",\n \"position\": 9\n },\n {\n \"url\": \"https://www.conceptnet.io/c/ca/factible\",\n \"title\": \"ConceptNet 5: factible\",\n \"description\": \"ConceptNet 5: factible\\n[...]\\n# ca factible\\n[...]\\n## A Catalan term in ConceptNet 5.8\",\n \"position\": 10\n },\n {\n \"url\": \"http://en.wiktionary.com/wiki/factible\",\n \"title\": \"factible - Wiktionary, the free dictionary\",\n \"description\": \"factible - Wiktionary, the free dictionary\\n[...]\\nfactible m or f (masculine and feminine plural factibles)\\n[...]\\nfactible m or f (plural factibles)\\n[...]\\n- IPA(key): /faɡˈtible/ [faɣ̞ˈt̪i.β̞le]\\n- Rhymes: -ible\\n- Syllabification: fac‧ti‧ble\\n[...]\\nfactible m or f (masculine and feminine plural factibles)\",\n \"position\": 11\n },\n {\n \"url\": \"https://nerdbot.com/2026/05/07/how-ai-dance-generators-are-taking-over-social-media-in-2026/\",\n \"title\": \"How AI Dance Generators Are Taking Over Social Media in 2026\",\n \"description\": \"the good from the passable: how the AI handles hands and lower-body movement. Those are the parts that look off in lower-quality results. Why This Format Is Performing So Well Dance challenges have always been one of TikTok’s highest-performing formats. The difference now is that you don’t need to actually dance — or be on camera at all. A few reasons this is resonating with audiences in 2026: Creators using AI-enhanced content tools see 2.3 times higher completion rates compared to raw single-take uploads. TikTok’s algorithm is sophisticated enough to detect motion smoothness, so the quality of the motion transfer directly affects how far your video gets pushed. The “Dancing Baby AI” trend and variants like the viral swing dance filter also show that audiences are genuinely entertained by AI-animated characters. People aren’t pushing back against the format — they’re participating in it. And once you have a workflow, AI dance videos are fast to produce. A planned post that used to take two hours of filming and editing can take 15 minutes. If you’re reacting to a trending sound, speed is most of the game. How to Make One in Three Steps You don’t need editing software or technical skills. Here’s how it works: Step 1: Choose your character. A clear photo with a visible face works best. Selfies, character art, and anime portraits all animate well. Avoid blurry backgrounds or overly crowded scenes — the AI needs clean subject separation. Step 2: Pick your dance reference. Most platforms offer template libraries covering K-pop, hip-hop, shuffle, and meme dances. You can also upload a 10-30 second clip from TikTok as your reference. Shorter, cleaner clips tend to produce better results than full performances. Step 3: Generate and review. Processing takes between 30 seconds and a few minutes depending on resolution and the model. Check the hands and lower body specifically — if those look off, try a shorter reference clip or a different model. All-in-one platforms like iMideo let you switch between multiple AI models in one workspace, which matters here because different models handle different dance styles better. Kling Motion Control is strong on realistic human movement. Other models work better for stylized or animated characters. What to Look for in a Dance Generator The market is crowded right now — Viggle AI, CapCut’s AI templates, Overchat, and dedicated motion tools all compete here. A few things worth checking before you commit to a platform: Model access. Free tiers often limit you to one or two models. If you want to experiment across dance styles, you want access to Kling, Seedance, or Wan-based options. Reference video length. Some platforms cap uploads at 10 seconds; others handle up to 30. For choreography with a full sequence, longer is better. Commercial use terms. If you’re making content for a brand, check whether the platform allows commercial output. Most do, but the terms vary and it’s worth five minutes to verify. Speed. This matters when you’re chasing a trending sound. The best AI dance generator for trend-reactive content is the one that delivers results in under two minutes, not 20. The Part Most People Overlook Good AI dance content still needs a good idea behind it. The motion transfer handles the mechanics — you still provide the concept. A bland photo of a standing person produces a bland animated video. Something with personality — a distinctive character, an unexpected subject, or a funny context — makes the result worth sharing. The AI removes the technical barrier. The creative judgment stays with you. That split is probably why this format has lasted longer than most predicted: it scales production without removing the human element that makes content actually interesting. Previous Article How to Prevent Ransomware Attacks Next Article Top Strategies for Increasing Your Follower Count with Authentic Accounts\\n\\n## Entities\\n\\n### Companies\\n\\n- TikTok\",\n \"position\": 12\n },\n {\n \"url\": \"https://github.com/Sapphire-Labs/SOS-Hackathon\",\n \"title\": \"Factibly/factibly\",\n \"description\": \"# Repository: Factibly/factibly\\n[...]\\nYour online sources, fact checked by the crowd\\n[...]\\n- Stars: 1\\n- Forks: 0\\n- Watchers: 1\\n- Open issues: 0\\n- Primary language: TypeScript\\n- Languages: TypeScript (74.6%), Python (10.8%), Kotlin (6.4%), JavaScript (3.8%), Swift (1.4%), C++ (1.1%), Shell (0.7%), HTML (0.5%), CSS (0.5%), Ruby (0.1%), Makefile\\n- Default branch: master\\n- Homepage: https://www.factibly.com\\n- Created: 2020-06-16T23:34:10Z\\n- Last push: 2022-07-11T07:11:35Z\\n- Contributors: 3 (top: chandlerlei2017, JadonFan, jasonantao)\\n[...]\\n# Factibly\\n[...]\\n## Apps and Services\\n[...]\\n| App/Service | Code Name | URL |\\n| --- | --- | --- |\\n| factibly.com | fc-web | www.factibly.com |\\n| Factibly Android | fc-android | _Coming Soon_ |\\n| Factibly iOS | fc-ios | _Coming Soon_ |\\n| Factibly Monday | fc-monday | _Coming Soon_ |\\n| Factibly APIs and Services (back-end) | fc-api | _Not Applicable_ |\\n| Factibly Internal Tools | fc-internal | _Not Applicable_ |\",\n \"position\": 13\n },\n {\n \"url\": \"https://facts.net/fitness-and-wellbeing/health-science/29-facts-about-dancing/\",\n \"title\": \"29 Facts About Dancing - Facts.net\",\n \"description\": \"29 Facts About Dancing - Facts.net\\n[...]\\n# 29 Facts About Dancing\\n[...]\\nDancing is more than just moving to music; it's a universal language that connects people across cultures and generations. Ever wondered why humans feel compelled to dance? Dancing can boost your mood, improve physical health, and even enhance cognitive function. From ancient rituals to modern dance floors, the history of dancing is rich and varied. Did you know that some dances have been around for thousands of years? Or that certain dance styles can burn as many calories as running? Whether you're a seasoned dancer or someone with two left feet, these 29 facts about dancing will surprise and inspire you. Get ready to tap into the fascinating world of rhythm and movement!\\n[...]\\nDancing has been a part of human culture for thousands of years. It’s a way to express emotions, tell stories, and celebrate life. Here are some fascinating facts about the origins of dancing.\\n[...]\\nThe movie \\\"Dirty Dancing\\\" became a cultural phenomenon in the 1980s. Its famous lift scene is iconic.\\n[...]\\nMusic videos often feature intricate dance routines. Artists like Beyoncé and BTS are known for their impressive choreography.\\n[...]\\nThe longest conga line on record had 119,986 participants. It took place in Miami in 1988.\\n[...]\\nThe world’s largest ballet class had 1,055 participants. It was held in Moscow in 2011.\\n[...]\\nThe \\\"Dancing Plague\\\" of 1518 was a bizarre event where hundreds of people danced uncontrollably for days in Strasbourg.\\n[...]\\nThe \\\"moonwalk\\\" was not invented by Michael Jackson. It was first performed by tap dancer Bill Bailey in 1955.\\n[...]\\nIn Japan, there’s a dance called \\\"Butoh\\\" that involves\\n[...]\\n, controlled movements. It’s often performed in\\n[...]\\nDancing isn't just about moving to the beat. It's a blend of art, history, and culture. From the ancient rituals of indigenous tribes to the modern moves of hip-hop, dance has always been a way for people to express themselves. It’s fascinating how each style, whether it's ballet, tango, or breakdancing, tells its own unique story.\",\n \"position\": 14\n },\n {\n \"url\": \"http://www.hyperdic.net/ca/factible\",\n \"title\": \"factible (HyperDic hyper-dictionary)\",\n \"description\": \"factible (HyperDic hyper-dictionary)\\n[...]\\n# HyperDic: factible\\n[...]\\n| Català> 1 sentit de la paraula factible: | ADJECTIU | all | factible, executable, possible, practicable, realitzable, viable | capable of being done with means/ means at hand and circumstances as they are |\\n| --- | --- | --- | --- | --- |\\n[...]\\n| Català> factible: 1 sentit > adjectiu 1 | Sentit | capable of being done with means/ means at hand and circumstances as they are. |\\n| --- | --- | --- |\\n| Sinònims | executable, possible, practicable, realitzable, viable |\\n| General | possible | capable of happening/ happening or existing |\\n| Anglès | feasible, executable, practicable, viable, workable |\\n| Espanyol | alcanzable, factible, practicable, realizable, viable |\\n| Noms | factibilitat, possibilitat, viabilitat | The quality of being doable |\\n| practicabilitat | The quality of being usable |\\n| viabilitat | capable of being done in a practical and useful/ useful way |\\n| Verbs | funcionar | Have an effect or outcome |\\n| processar, transformar, treballar | shape, form, or improve a material |\\n| resoldre, solucionar | Find the solution to (a problem or question) or understand the meaning/ meaning of |\",\n \"position\": 15\n },\n {\n \"url\": \"https://kaikki.org/eswiktionary/All%20languages%20combined/meaning/f/fa/factible.html\",\n \"title\": \"factible in All languages combined\",\n \"description\": \"[fəkˈtib.blə\\n[...]\\nCentral], [fakˈti.ble]\\n[...]\\nValencian], [fəkˈtib.blə]\\n[...]\\n: factibles\\n[...]\\nfakˈt̪iβ̞le\\n[...]\\n.\\\"\\n[...]\\n\\\"Formal\\\"\\n ],\\n[...]\\n\\\",\\n[...]\\n\\\"\\n },\\n {\\n \\\"kind\\\":\\n[...]\\n\\\"name\\\": \\\"CA:Palabras\\n[...]\\n\\\",\\n \\\"parents\\\":\\n[...]\\n\\\"source\\\":\\n[...]\\nw\\\"\\n },\\n {\\n \\\"kind\\\":\\n[...]\\nother\\\",\\n \\\"name\\\": \\\"Catalán\\\",\\n \\\"parents\\\": [],\\n \\\"source\\\": \\\"w\\\"\\n }\\n ],\\n \\\"etymology_texts\\\": [\\n \\\"Del catalán antiguo factible ('factible'). Atestiguado desde el siglo XV, en 1419.\\\"\\n ],\\n \\\"forms\\\": [\\n {\\n \\\"form\\\": \\\"factibles\\\",\\n \\\"tags\\\": [\\n \\\"plural\\\"\\n ]\\n }\\n ],\\n \\\"lang\\\": \\\"Catalán\\\",\\n \\\"lang_\\n[...]\\nca\\\",\\n \\\"pos\\\":\\n[...]\\n\\\",\\n \\\"pos\\n[...]\\n\\\",\\n \\\"\\n[...]\\n{\\n \\\"\\n[...]\\n\\\": [\\n \\\"Factible.\\\"\\n[...]\\n]\\\",\\n[...]\\n\\\"\\n[...]\\n\\\",\\n \\\"mas\\n[...]\\n\\\"\\n ],\\n[...]\\n\\\": \\\"factible\\\"\\n[...]\\n{\\n \\\"attestations\\\": [\\n {\\n \\\"date\\\": \\\"\\n[...]\\n\\\"\\n }\\n ],\\n \\\"categories\\\": [\\n \\\"CA:Adjetivos\\\",\\n \\\"CA:Adjetivos sin género definido\\\",\\n \\\"CA:Palabras documentadas desde el siglo XV\\\",\\n \\\"CA:Palabras llanas\\\",\\n \\\"CA:Palabras provenientes del catalán antiguo\\\",\\n \\\"CA:Palabras trisílabas\\\",\\n \\\"Catalán\\\"\\n ],\\n \\\"etymology_texts\\\": [\\n \\\"Del catalán antiguo factible ('factible'). Atestiguado desde el siglo XV, en 1419.\\\"\\n ],\\n \\\"forms\\\": [\\n {\\n \\\"form\\\": \\\"factibles\\\",\\n \\\"tags\\\": [\\n \\\"plural\\\"\\n ]\\n }\\n ],\\n \\\"lang\\\": \\\"Catalán\\\",\\n \\\"lang_code\\\": \\\"ca\\\",\\n \\\"pos\\\": \\\"adj\\\",\\n \\\"pos_title\\\": \\\"Adjetivo\\\",\\n \\\"senses\\\": [\\n {\\n \\\"glosses\\\": [\\n \\\"Factible.\\\"\\n ],\\n \\\"sense_index\\\": \\\"1\\\"\\n }\\n ],\\n \\\"sounds\\\": [\\n {\\n \\\"ipa\\\": \\\"[fəkˈtib.blə]\\\",\\n \\\"tags\\\": [\\n \\\"Central\\\"\\n ]\\n },\\n {\\n \\\"ipa\\\": \\\"[fakˈti.ble]\\\",\\n \\\"tags\\\": [\\n \\\"Valencian\\\"\\n ]\\n },\\n {\\n \\\"ipa\\\": \\\"[fəkˈtib.blə]\\\",\\n \\\"tags\\\": [\\n \\\"Balearic\\\"\\n ]\\n },\\n {\\n \\\"other\\\": \\\"llana\\\",\\n \\\"raw_tags\\\": [\\n \\\"acentuación\\\"\\n ]\\n },\\n {\\n \\\"other\\\": \\\"trisílaba\\\",\\n \\\"raw_tags\\\": [\\n \\\"longitud silábica\\\"\\n ]\\n }\\n ],\\n \\\"tags\\\": [\\n \\\"feminine\\\",\\n \\\"masculine\\\"\\n ],\\n \\\"word\\\": \\\"factible\\\"\\n}\\n[...]\\n\\\",\\n[...]\\n\\\",\\n[...]\\n\\\"Del lat\\n[...]\\n.\\\"\\n[...]\\n\\\"\\n[...]\\n\\\": \\\"factibles\\\",\\n \\\"\\n[...]\\n\\\"plural\\\"\\n[...]\\n}\\n ],\\n \\\"\\n[...]\\n{\\n \\\"parts\\\":\\n[...]\\nfac\\\",\\n \\\"ti\\\",\\n \\\"ble\\\"\\n[...]\\n],\\n \\\"lang\\\":\\n[...]\\n\\\",\\n \\\"lang_\\n[...]\\n\\\",\\n \\\"\\n[...]\\nadj\\\",\\n \\\"pos_\\n[...]\\n\\\": \\\"Ad\\n[...]\\n\\\",\\n \\\"\\n[...]\\n{\\n \\\"categories\\\":\\n[...]\\n\\\"\\n[...]\\n:Térm\\n[...]\\n\\\"\\n ],\\n \\\"glosses\\\":\\n[...]\\n\\\"\\n[...]\\n\\\"\\n ],\\n \\\"raw_tags\\\": [\\n \\\"Formal\\\"\\n ],\\n \\\"sense_index\\\":\\n[...]\\n1\\\"\\n }\\n ],\\n \\\"sounds\\\": [\\n {\\n \\\"ipa\\\": \\\"[fakˈt̪iβ̞le]\\\"\\n },\\n {\\n \\\"other\\\": \\\"llana\\\",\\n \\\"raw_tags\\\": [\\n \\\"acentuación\\\"\\n ]\\n },\\n {\\n \\\"other\\\": \\\"trisílaba\\\",\\n \\\"raw_tags\\\": [\\n \\\"longitud silábica\\\"\\n ]\\n },\\n {\\n \\\"rhymes\\\": \\\"i.ble\\\"\\n }\\n ],\\n \\\"synonyms\\\": [\\n {\\n \\\"sense\\\": \\\"Posible de hacerse\\\",\\n \\\"sense_index\\\": \\\"1\\\",\\n \\\"word\\\": \\\"realizable\\\"\\n },\\n {\\n \\\"sense\\\": \\\"Posible de hacerse\\\",\\n \\\"sense_index\\\": \\\"1\\\",\\n \\\"word\\\": \\\"viable\\\"\\n }\\n ],\\n \\\"tags\\\": [\\n \\\"femin\\n[...]\\n\\\",\\n \\\"masculine\\\"\\n ],\\n \\\"translations\\\": [\\n {\\n \\\"lang\\\": \\\"Búlgaro\\\",\\n \\\"lang_code\\\": \\\"bg\\\",\\n \\\"sense_index\\\": \\\"1\\\",\\n \\\"\\n[...]\\n\\\": \\\"изпълним\\\"\\n },\\n {\\n \\\"lang\\\": \\\"Búlgaro\\\",\\n \\\"lang_code\\\": \\\"bg\\\",\\n \\\"sense_index\\\": \\\"1\\\",\\n \\\"word\\\": \\\"възможен\\\"\\n },\\n {\\n \\\"lang\\\": \\\"Francés\\\",\\n \\\"lang_code\\\": \\\"fr\\\",\\n \\\"sense\\n[...]\\n\\\",\\n \\\"\\n[...]\\n\\\": \\\"faisable\\\"\\n },\\n {\\n \\\"\\n[...]\\n\\\",\\n \\\"\\n[...]\\n\\\",\\n \\\"\\n[...]\\n\\\",\\n \\\"\\n[...]\\n\\\": \\\"feasible\\\"\\n },\\n {\\n[...]\\n\\\",\\n \\\"\\n[...]\\n\\\",\\n \\\"sense\\n[...]\\n\\\",\\n \\\"\\n[...]\\n},\\n[...]\\n\\\"\\n[...]\\n\\\",\\n \\\"\\n[...]\\n},\\n {\\n \\\"\\n[...]\\n\\\",\\n[...]\\n\\\",\\n \\\"\\n[...]\\n},\\n[...]\\n\\\",\",\n \"position\": 16\n },\n {\n \"url\": \"https://www.conceptnet.io/c/es/factible\",\n \"title\": \"ConceptNet 5: factible\",\n \"description\": \"ConceptNet 5: factible\\n[...]\\n# es factible\\n[...]\\n## A Spanish term in ConceptNet 5.8\\n[...]\\n## Synonyms\\n[...]\\n- en practicable(a, wn) ➜\\n- en feasible(a) ➜\\n- en makeable(a) ➜\\n- fr faisable(a) ➜\\n- fr réussissable(a) ➜\\n[...]\\n## Related terms\\n[...]\\n- es factibilidad(n) ➜\\n- en doable ➜\\n- en feasible ➜\\n- es factibilidad ➜\\n- fr faisable ➜\\n[...]\\n## Word forms\\n[...]\\n- es factibles(a) ➜\\n[...]\\n- en.wiktionary.org factible\\n- fr.wiktionary.org factible\",\n \"position\": 17\n },\n {\n \"url\": \"https://docslib.org/doc/2359298/arxiv-2101-08779v3-cs-cv-31-jul-2021-changes-in-its-architecture-design-and-supervision-fact-ography\",\n \"title\": \"Arxiv:2101.08779V3 [Cs.CV] 31 Jul 2021 Changes in Its Architecture Design and Supervision: FACT Ography - DocsLib\",\n \"description\": \"D Dance Dataset Generated 3D Dance Figure 1: AI Choreographer. We present a new 3D dance dataset, AIST++, which contains 5:2 hours of 3D motion reconstructed from real dancers paired with music (left) and a novel Full-Attention Cross-modal Transformer (FACT) network that can generate realistic 3D dance motion with global translation conditioned on music (right). We output our 3D motion in representations that allow for instant motion retargeting to a novel character. Here we use a character from Mixamo [1] Abstract 1. Introduction We present AIST++, a new multi-modal dataset of 3D The ability to dance by composing movement patterns dance motion and music, along with FACT, a Full-Attention that align to musical beats is a fundamental aspect of hu- Cross-modal Transformer network for generating 3D dance man behavior. Dancing is an universal language found in all motion conditioned on music. The proposed AIST++ cultures [50], and today, many people express themselves dataset contains 5.2 hours of 3D dance motion in 1408 se- through dance on contemporary online media platforms. quences, covering 10 dance genres with multi-view videos The most watched videos on YouTube are dance-centric with known camera poses—the largest dataset of this kind music videos such as “Baby Shark Dance”, and “Gangnam to our knowledge. We show that naively applying sequence Style” [75], making dance a more and more powerful tool models such as transformers to this dataset for the task of to spread messages across the internet. However, dancing is music conditioned 3D motion generation does not produce a form of art that requires practice—even for humans, pro- satisfactory 3D motion that is well correlated with the input fessional training is required to equip a dancer with a rich music. We overcome these shortcomings by introducing key repertoire of dance motions to create an expressive chore- arXiv:2101.08779v3 [cs.CV] 31 Jul 2021 changes in its architecture design and supervision: FACT ography. Computationally, this is even more challenging as model involves a deep cross-modal transformer block with the task requires the ability to generate a continuous motion full-attention that is trained to predict N future motions. We with high kinematic complexity that captures the non-linear empirically show that these changes are key factors in gen- relationship with the accompanying music. erating long sequences of realistic dance motion that are In this work, we address these challenges by presenting well-attuned to the input music. We conduct extensive ex- a novel Full Attention Cross-modal Transformer (FACT) periments on AIST++ with user studies, where our method network, which can robustly generate realistic 3D dance outperforms recent state-of-the-art methods both qualita- motion from music, along with a large-scale multi-modal tively and quantitatively. The code and the dataset can be 3D dance motion dataset, AIST++, to train such a model. found at: https://google.github.io/aichoreographer. Specifically, given a piece of music and a short (2 seconds) seed motion, our model is able to generate a long sequence ∗ equal contribution. Work performed while Ruilong was an intern at of realistic 3D dance motions. Our model effectively learns Google. the music-motion correlation and can generate dance se- 1 Figure 2: Cross-Modal Music Conditioned 3D Motion Generation Overview. Our proposed a Full-Attention Cross- modal Transformer (FACT) network (details in Figure3) takes in a music piece and a 2-second sequence of seed motion, then auto-regressively generates long-range future motions that correlates with the input music. quences that varies for different input music. We represent requires heavily instrumented environments making these dance as a 3D motion sequence that consists of joint rota- datasets severely limited in the number of available dance tion and global translation, which enables easy transfer of sequences, dancer and music diversity.\",\n \"position\": 18\n },\n {\n \"url\": \"https://www.interalcaldes.com/en/post/mexico-factible-bridging-strategic-vision-and-economic-action\",\n \"title\": \"Mexico Factible: Bridging Strategic Vision and Economic Action\",\n \"description\": \"Mexico Factible: Bridging Strategic Vision and Economic Action\\n[...]\\nUnder this premise, Mexico Factible emerges—a platform that goes beyond the traditional forum format to become an ecosystem of real solutions, driven by a coalition of visionaries committed to national development.\\n[...]\\nThe viability of this project finds its entrepreneurial foundation in Ángel Francisco Moreno Alarcón, CEO of Grupo Empresarial Factible. His involvement reflects a corporate philosophy that understands economic growth is neither the sole responsibility of the state nor a spontaneous outcome of the market, but rather the result of strategic collaboration.\\n[...]\\nHowever, the true strength of Mexico Factible lies in the diversity of its leadership and the specialization of its speakers. The forum is enriched by key figures who address every dimension of business and social development:\\n[...]\\nMore than a one-time event, Mexico Factible is consolidating itself as a platform for ongoing dialogue. It is the meeting point where political vision, business strength, and academic rigor converge to design the roadmap for 21st-century Mexico. In its hands, economic dialogue ceases to be casual conversation and becomes the architectural blueprint for a more productive, equitable, and—above all—feasible country.\\n[...]\\nYou are formally invited to the Factible Forum, where political vision and business expertise come together to design real solutions for Mexico.\\n[...]\\nArticle first published\\n[...]\\nhttps://mundoejecutivo.com.mx/actualidad/mexico-factible-el-puente-entre-la-vision-estrategica-y-la-accion-economica/#penci-Un_Liderazgo_con_Sentido_Practico\",\n \"position\": 19\n },\n {\n \"url\": \"https://www.micro-movement.com/about/\",\n \"title\": \"About - Micro-Movement\",\n \"description\": \"About - Micro-Movement\\n[...]\\nMicro-Movement Method\\n[...]\\nA multi-dimensional method that gives you tools for inner understanding, mastery, and connection. Movement, breath, expanded consciousness, and exposure to the elements — under one holistic approach.\\n[...]\\nDeepens the body-mind connection through mindful practice that links movement and breath. Cultivates deep awareness of sensations, emotions, and thoughts.\\n[...]\\nthe Micro-Movement Method brings awareness to emotional regulation, eases anxiety, and lifts mood by engaging body and will together.\\n[...]\\nmovement-pattern\\n[...]\\n, sits inside the\\n[...]\\ninterference and motor-\\n[...]\\nliterature dating back to Shea\\n[...]\\n1979). Read\\n[...]\\nand Micro-Movement\\n[...]\\n### Frequently Asked Questions about the Micro-Movement Method\\n[...]\\nWhat is the Micro-Movement Method?\\n[...]\\nThe Micro-Movement Method is built on the principle of reprogramming the human code by integrating four pillars:\\n[...]\\nMovement: Deepens the body-mind connection through refined physical understanding and work with movement patterns. Breathwork: Strengthens the link between awareness and body, using intentional breath practice to regulate emotion and attention. Microdosing (educational framing): Explored as a tool that may support neuroplasticity and heightened sensory perception, helping reshape mental patterns and expand creativity. Exposure to the Elements: Builds physical and sensory resilience through engagement with natural forces such as sun, wind, cold, and heat. Together, these pillars form a holistic approach to focus, self-awareness, and inner work — making the method especially effective for personal development.\\n[...]\\nThe Micro-Movement Method helps people understand and reshape the relationship between body and mind by relating to trauma as a misinterpretation of present reality.It combines movement and awareness of sensory input to reprogram entrenched patterns, allowing the body to release stored emotional responses.By supporting neuroplasticity and refined sensory perception, people can embody healthier interpretations of past events — meeting them directly and reframing fear-based emotional responses tied to the past.\\n[...]\\nYes — the sessions and the course give practitioners the knowledge and frameworks to work with people who have engaged with consciousness-expanding practices or microdosing, so the work can be adapted accordingly.\\n[...]\\nnote: as\\n[...]\\n2025, psychoactive substances are not legal for therapeutic use in\\n[...]\\n. The Micro-Movement Method takes an educational, harm-reduction approach.\\n[...]\\nThe Micro-Movement Method works with the heightened neuroplasticity that emerges from combining mindful movement and breath practice to form new neural pathways.This process reshapes thought patterns, emotional reactions, and habits — opening the door to release patterns that no longer serve.\\n[...]\\nWhy is movement\\n[...]\\ndifferent from regular physical practice\\n[...]\\nMovement is foundational to the Micro-Movement Method because it goes beyond exercise — it's a deliberate inquiry into movement patterns and their relationship to consciousness. The practice deepens body awareness and reveals where the body is holding tension tied to past events that no longer apply. Unlike standard fitness practices that focus on physical performance, the Micro-Movement Method weaves the body-mind connection into the work itself, helping people release stored emotional responses and reprogram entrenched habits.\\n[...]\\n, and support immune health.\\n[...]\\nsupport emotional regulation, reduce anxiety and depression, and lift overall mood.\",\n \"position\": 20\n }\n ]\n }\n}", "tool_call_id": "call_4tyLWvHrDkFy8VoHTbBfr1GF", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "assistant", "content": "", "reasoning": null, "finish_reason": "tool_calls", "codex_reasoning_items": [{"type": "reasoning", "encrypted_content": "gAAAAABqAzy3YHbcbr_5BKC0rSEhvo5jBIV7CiK0CkICvEjjO1cRFnld6RyUJc-FUFit0fbE_d5afqlsGxYgQuQpgNJ-sqMKli5eoAz9nqieMNOwy7inw_u-apEXeLQ3Xm-9HOVZnwEF3BuV1h8BBBok2HJydd8cWFtzdznpzSmYGJweGORkLLG2qJvOIIeE_fLwTkWur4V0ai_c9K9Qxw4k_kMI6l3xeYfWEzoMrLSgguKYUNkfgYJY8m8IIERt0goXbWiVA_S0ylsN-yMNEqNmkhlA7fGzCzDuqSsyV7em96EBsNDaM6of2CiP1mNi0GdkM98hiO_nBg16iB60PnhygjI8PrdJMx4df3ex7WqsLhp_hqR4hBySDAdDs2Se31n1kI3ZrHNRRxVDON5eVvo7pLoH5jQH-VEBTWs5NHcOdZFtdH0g0tz_ZFLRxktLfnfh-N1GZgFRI5LXtQZUs-1BhEFRykD-Ux-3eGkTi8Bs4EVaHeNStTP6RbE4f4YKZyPQKRsCGc58piUOSW53IV_hKMDk8OObOWoESQrjTcMibDVP2nD8b3UJkSIwzJksqnVMFSXDccOFDfgFGX4g0tShn7-ThpHGdTePw8h2Gzeqnxr3sxYm8Cwb8Bt3MOgFrKROO0Jy-5Vyk8WxBKiovNLDp5lKYxN9EqW5tM_YoAeeEN1AVrisoiUIT03fXyLQjTOUUlKKDIhni5NsMVY-F1IXAg13keWQCheh7HtoFzOZPxJTjXPRnhHFYxpz65ATNphZRZxfafY0aA1YBx762IbpUzj-NSaxaI-crnK9SYok0f5jgwnnWEv8uzudyPtgbJwEI8gdSCsB3YdiDeU8QvKX1hEx8s1UkmP7FI2xV40fiMivPDT3Ck2YDT-fqGoPD94lhCaO7uWA-1CmqnAulODpfvYZEix8MIbKaAARhkxOv041T0Shy2PpgCpICx7inqPbdEmMU1St", "id": "rs_001d0192b2d67075016a033cb663d0819194ed9444001f27fd", "summary": []}], "tool_calls": [{"id": "call_ZOc7oT7AJ7vqDAfe1DlgK9xb", "call_id": "call_ZOc7oT7AJ7vqDAfe1DlgK9xb", "response_item_id": "fc_001d0192b2d67075016a033cb78da08191af2d629b8d62378c", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\":\"python3 - <<'PY'\\nimport requests\\nfor host in ['https://api.fxtwitter.com','https://api.vxtwitter.com','https://api.fixupx.com']:\\n url=f'{host}/__microdancing/status/2054160914438291840'\\n try:\\n r=requests.get(url,timeout=20,headers={'User-Agent':'Mozilla/5.0'})\\n print('\\\\n',host,r.status_code,r.url)\\n print(r.text[:1000])\\n except Exception as e: print(host,e)\\nPY\",\"timeout\":60}"}}], "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\"output\": \"https://api.fxtwitter.com 200 https://api.fxtwitter.com/__microdancing/status/2054160914438291840\\n{\\\"code\\\":200,\\\"message\\\":\\\"OK\\\",\\\"tweet\\\":{\\\"url\\\":\\\"https://x.com/__microdancing/status/2054160914438291840\\\",\\\"id\\\":\\\"2054160914438291840\\\",\\\"text\\\":\\\"hay que hacer un bot que twittee cada vez que hay una transferencia del gobierno nacional a las provincias/universidades/etc. monto, fecha, destino, ítem presupuestario. si existe en algún lugar esta info me ofrezco\\\",\\\"raw_text\\\":{\\\"text\\\":\\\"hay que hacer un bot que twittee cada vez que hay una transferencia del gobierno nacional a las provincias/universidades/etc. monto, fecha, destino, ítem presupuestario. si existe en algún lugar esta info me ofrezco\\\",\\\"display_text_range\\\":[0,215],\\\"facets\\\":[]},\\\"author\\\":{\\\"screen_name\\\":\\\"__microdancing\\\",\\\"url\\\":\\\"https://x.com/__microdancing\\\",\\\"id\\\":\\\"1146118836900585478\\\",\\\"followers\\\":9457,\\\"following\\\":2668,\\\"likes\\\":27839,\\\"media_count\\\":6165,\\\"name\\\":\\\"👾\\\",\\\"description\\\":\\\"in bocca al lupo\\\",\\\"raw_description\\\":{\\\"text\\\":\\\"in bocca al lupo\\\",\\\"facets\\\":[]},\\\"location\\\":\\\"\\\",\\\"banner_url\\\":\\\"https://pbs.twimg.com/profile_banners/1146118836900585478/170946653\\n\\n https://api.vxtwitter.com 200 https://api.vxtwitter.com/__microdancing/status/2054160914438291840\\n{\\\"allSameType\\\":true,\\\"article\\\":null,\\\"combinedMediaUrl\\\":null,\\\"communityNote\\\":null,\\\"conversationID\\\":\\\"2054160914438291840\\\",\\\"date\\\":\\\"Tue May 12 11:25:01 +0000 2026\\\",\\\"date_epoch\\\":1778585101,\\\"fetched_on\\\":1778597053,\\\"hasMedia\\\":false,\\\"hashtags\\\":[],\\\"lang\\\":\\\"es\\\",\\\"likes\\\":92,\\\"mediaURLs\\\":[],\\\"media_extended\\\":[],\\\"pollData\\\":null,\\\"possibly_sensitive\\\":false,\\\"qrt\\\":null,\\\"qrtURL\\\":null,\\\"replies\\\":5,\\\"replyingTo\\\":null,\\\"replyingToID\\\":null,\\\"retweet\\\":null,\\\"retweetURL\\\":null,\\\"retweets\\\":9,\\\"text\\\":\\\"hay que hacer un bot que twittee cada vez que hay una transferencia del gobierno nacional a las provincias/universidades/etc. monto, fecha, destino, \\\\u00edtem presupuestario. si existe en alg\\\\u00fan lugar esta info me ofrezco\\\",\\\"translation\\\":null,\\\"tweetID\\\":\\\"2054160914438291840\\\",\\\"tweetURL\\\":\\\"https://twitter.com/__microdancing/status/2054160914438291840\\\",\\\"user_name\\\":\\\"\\\\ud83d\\\\udc7e\\\",\\\"user_profile_image_url\\\":\\\"https://pbs.twimg.com/profile_images/1975155170406273024/3HPoxuGH_normal.jpg\\\",\\\"user_screen_name\\\":\\\"__microdancing\\\"}\\n\\nhttps://api.fixupx.com HTTPSConnectionPool(host='api.fixupx.com', port=443): Max retries exceeded with url: /__microdancing/status/2054160914438291840 (Caused by NameResolutionError(\\\"HTTPSConnection(host='api.fixupx.com', port=443): Failed to resolve 'api.fixupx.com' ([Errno -5] No address associated with hostname)\\\"))\", \"exit_code\": 0, \"error\": null}", "tool_call_id": "call_ZOc7oT7AJ7vqDAfe1DlgK9xb", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "assistant", "content": "", "reasoning": "**Researching data sources**\n\nI need to determine the feasibility of getting data from the Argentine government. My guess is that it involves a budget execution API. I want to check resources like datos.gob.ar, presupuesto abierto, and SIDIF e-SIDIF. They may have payments data related to provinces and universities. Next, I'll focus on finding current data sources to ensure I'm working with the most up-to-date information. Let’s get started on the search!", "finish_reason": "tool_calls", "reasoning_content": "**Researching data sources**\n\nI need to determine the feasibility of getting data from the Argentine government. My guess is that it involves a budget execution API. I want to check resources like datos.gob.ar, presupuesto abierto, and SIDIF e-SIDIF. They may have payments data related to provinces and universities. Next, I'll focus on finding current data sources to ensure I'm working with the most up-to-date information. Let’s get started on the search!", "codex_reasoning_items": [{"type": "reasoning", "encrypted_content": "gAAAAABqAzzFmFu5C3PbAlSHjKPJLxzTWlN5JxcW9_EllrNnqqFUON2fbhCvsWkpLNqVGA5Y6e6sMc4dXnsLox0Rs3-LmhoD8tXn_nPvWhL7M82rYNNBvIibv__PjdP6UyTu1cPtEHhlMoG6UI9XykzKEm3ifAmL-iIxoTpwdh-hySim5ArOQI9s_9uf5QmTf6qTiDwnX9XX2NdQhYh7KWBMlvwLCRLKv6bQWScjWFwbK3uILDXKrtOepQEE42wrgjXR7tVKO6ngokN7V8zm367RZ4XZO2Tofbq2SiGFXALI_I9xG6hcZMlsj-zPdY8Mbva2eFroQWhBIucpN9_QG9vXLeWg2jeU2skhvbA9yx5Cbx_072icIkKrXzeI-7ge7yl_ROT960XtExiwt8VfQlKZGvl6kWxq4pfAjCnv9pxAD_1w8ODn_LFytepBQ41Rici6CGX9f04__-X4w6IC5xYseBf92IdGuzQUzTYk9yeFU5atZEhuL9vFC4__q-NBmG-_tVjDZZ8hOwVD1AcKbuWVCJ37dRJycryIO9EObqeUfn90YqTmzhSWVNn7bV4vUVh13m_-XQHHi5ZIAP4uGViPccqAEod1PMSRypfSTDy1oIa14CKIaMoSBlNNvghT9Fi4FTsu5e_QlykR84pQes7GZ6ZIYeR9b6d_jCreQy1gqX-ZQmcKi8dHx0BTUp5C7XfRjJNYCx68WRCmZAq6-_AjaGwJFnNkTjylaf_rA9Uo7kMIB1eQAwWPFd_LsMWQKShwTmrw9shkMbaTKYtlwvq2iDIzlvtz23NvXKxZiSTCReWozSzapPG0GcoaYX9I-ghTT0W088Vojfoy9FMsLAPks9pYGX0rvf6h4cZ1hVljXtKrxRqs2kJ6QE4bVxYTYaykgPfala1iJdivQdm9-Ks2D43yXXPTZl8va3AS-ZW9BexQ6dbV4P0hVIarIwAcZBKDFWr8cXtYi4rVSnzGJNoBFzTO45FO-aWDTn8tML4u2ngSS9KHV8HuA1Lo7zI9OIhVC381FepD6e28NGJURYorWCbwLAKn_3RBOis0CXPr-86Kmvd7wUPmcS0gQuwfeh9ewbnCZQgNztUxPku1sqUKjpLQW-4TTRSyNCR0S1NrF7cKdGZNZeRB7FZIhOZk5hQfNcF8IFqtF5-1ivYDkJTO2cqRv3YqiVS5HY-8WSbysPbXy9g8WVofOAZWznVRFyPJUjf7wG0oNgIIzn_I9EdeB09wMTJCtw==", "id": "rs_0dc409fc1e089133016a033cbf42088191aabce5794cee9e04", "summary": [{"type": "summary_text", "text": "**Researching data sources**\n\nI need to determine the feasibility of getting data from the Argentine government. My guess is that it involves a budget execution API. I want to check resources like datos.gob.ar, presupuesto abierto, and SIDIF e-SIDIF. They may have payments data related to provinces and universities. Next, I'll focus on finding current data sources to ensure I'm working with the most up-to-date information. Let’s get started on the search!"}]}], "tool_calls": [{"id": "call_8g6nXe3fzb2oBbrFHoQEdRl3", "call_id": "call_8g6nXe3fzb2oBbrFHoQEdRl3", "response_item_id": "fc_0dc409fc1e089133016a033cc591dc819191e66b45af1be302", "type": "function", "function": {"name": "web_search", "arguments": "{\"query\":\"Argentina presupuesto abierto API transferencias provincias universidades gobierno nacional devengado pagado beneficiario\",\"limit\":5}"}}, {"id": "call_ARAG34UDlbhlSntynGfGyOTI", "call_id": "call_ARAG34UDlbhlSntynGfGyOTI", "response_item_id": "fc_0dc409fc1e089133016a033cc591ec8191996e3780505c05fa", "type": "function", "function": {"name": "web_search", "arguments": "{\"query\":\"site:presupuestoabierto.gob.ar API presupuesto abierto argentina pagos transferencias provincias universidades\",\"limit\":5}"}}, {"id": "call_i5Z1w3KJOKSI2TAEvVrV9BVg", "call_id": "call_i5Z1w3KJOKSI2TAEvVrV9BVg", "response_item_id": "fc_0dc409fc1e089133016a033cc591f48191ab0bb564bf10d1c2", "type": "function", "function": {"name": "web_search", "arguments": "{\"query\":\"datos.gob.ar transferencias gobierno nacional provincias universidades presupuesto abierto API\", \"limit\":5}"}}], "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\n \"success\": true,\n \"data\": {\n \"web\": [\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/api/\",\n \"title\": \"API - Presupuesto Abierto\",\n \"description\": \"Presupuesto Abierto | API\\n\\n### La interfaz de programación de aplicaciones (API) de Presupuesto Abierto\\n\\n---\\n\\nDejanos tu comentario\\n\\nPresupuesto Abierto | API\\n1. Inicio\\n2. API\\n### La interfaz de programación de aplicaciones (API) de Presupuesto Abierto\\n###\\n×\\n#### Advertencia\\n**\\nEl navegador no es compatible con el sitio Presupuesto Abierto.\\nUtilizá otro navegador para acceder a la funcionalidad completa\\ndel sitio.\\nAceptar\\nDejanos\\ntu comentario\",\n \"position\": 1\n },\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/sici/api-pac\",\n \"title\": \"Presupuesto Abierto | Sitio del ciudadano - API\",\n \"description\": \"Presupuesto Abierto | Sitio del ciudadano - API -- -- --\\n[...]\\n#### Registrate para acceder a la API\\n[...]\\nPodés acceder a una API pública de consultas sobre el presupuesto.\",\n \"position\": 2\n },\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/sici/visualizacion-gastos-x-transferencias\",\n \"title\": \"Presupuesto Abierto - Ejecución presupuestaria de las transferencias\",\n \"description\": \"Presupuesto Abierto | Sitio del ciudadano - Ejecución presupuestaria de las transferencias -- -- -- -- -- -- --\\n\\n-- --\\n\\n--\\n\\n-- -- -- --\\n\\n##### ¿Te resultó útil?\\n\\nSi No\\n\\nCancelar Enviar\\n\\nDejanos tu comentario\",\n \"position\": 3\n },\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/sici/datos-abiertos\",\n \"title\": \"Presupuesto Abierto | Sitio del ciudadano - Datos abiertos\",\n \"description\": \"Presupuesto Abierto | Sitio del ciudadano - Datos abiertos \\n\\n### Datos abiertos\\n[...]\\nEstos datos son tuyos. Podés descargarlos,\\n[...]\\n, cruzarlos con otros datos, crear aplicaciones o armar visualizaciones a\\n[...]\\nde ellos.\\n[...]\\n##### Año\",\n \"position\": 4\n },\n {\n \"url\": \"https://www.argentina.gob.ar/economia/sechacienda/dgsiaf/boletin-trimestral-iii-2022/presupuesto-abierto\",\n \"title\": \"Presupuesto Abierto | Argentina.gob.ar\",\n \"description\": \". Ministerio de Economía\\n[...]\\n5. Presupuesto Abierto\\n[...]\\n# Presupuesto Abierto\\n[...]\\nPortal de Presupuesto Abierto\\n[...]\\nAlcance: Administración Pública Nacional\\n[...]\\nIncorporamos una nueva API (Application Programming Interface) de Presupuesto Abierto que permite el acceso a datos de la programación y ejecución física del presupuesto nacional. Por medio de la API se podrán desarrollar programas o automatizar análisis frecuentes, accediendo a la base de datos del portal de Presupuesto Abierto.\",\n \"position\": 5\n }\n ]\n }\n}", "tool_call_id": "call_8g6nXe3fzb2oBbrFHoQEdRl3", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\n \"success\": true,\n \"data\": {\n \"web\": [\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/api/\",\n \"title\": \"Presupuesto Abierto | API\",\n \"description\": \"Presupuesto Abierto | API\\n\\n### La interfaz de programación de aplicaciones (API) de Presupuesto Abierto\\n[...]\\nPresupuesto Abierto | API\\n1. Inicio\\n2. API\\n### La interfaz de programación de aplicaciones (API) de Presupuesto Abierto\\n###\\n×\",\n \"position\": 1\n },\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/sici/ejecucion-presup-de-las-transferencias\",\n \"title\": \"Presupuesto Abierto | Sitio del ciudadano - Ejecución presupuestaria de las transferencias\",\n \"description\": \"Presupuesto Abierto | Sitio del ciudadano - Ejecución presupuestaria de las transferencias -- -- --\\n[...]\\n### Ejecución presupuestaria de las transferencias\",\n \"position\": 2\n },\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/sici/que-incluye\",\n \"title\": \"Presupuesto Abierto | Sitio del ciudadano - ¿Qué incluye el Presupuesto?\",\n \"description\": \"El presupuesto nacional abarca la Administración Central, los Organismos Descentralizados y las Instituciones de la Seguridad Social.\\n[...]\\nTambién contiene las transferencias que el Estado Nacional realiza a las provincias y municipios y a otros entes que forman parte del Sector Público Nacional, quienes a su vez confeccionan sus propios presupuestos.\\n[...]\\nPodés consultar información de los presupuestos provinciales y municipales en la Dirección Nacional de Asuntos Provinciales o bien dirigirte a cada uno de los Ministerios de Economía provinciales.\\n[...]\\nOtros entes: son organismos no empresariales excluidos del Presupuesto de la Administración Nacional donde el Estado Nacional tiene el control mayoritario del patrimonio o de la formación de las decisiones. Algunos ejemplos: la Administración Federal de Ingresos Públicos, el Instituto Nacional de Cine y Artes Audiovisuales, el Pami, etc.\\n[...]\\nVer más detalle en el capítulo II. A. Clasificación institucional del Manual de Clasificaciones presupuestarias.\",\n \"position\": 3\n },\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/sici/visualizaciones\",\n \"title\": \"Presupuesto Abierto | Sitio del ciudadano - Visualizaciones\",\n \"description\": \"Presupuesto Abierto | Sitio del ciudadano - Visualizaciones \\n\\n### Visualizaciones\\n[...]\\nPodés visualizar los datos desde distintas perspectivas, consultar la información detallada y navegarla aplicando distintos filtros.\\n\\n \\n\\n \\n\\n### ¿Quién gasta?\\n[...]\\n### ¿Dónde se gasta?\\n[...]\\nGastos por ubicación geográfica\\n\\n \\n\\n### ¿Cómo se financia?\\n[...]\\nAhorro\\n[...]\\niamiento (Base Pres\\n[...]\\n### Modificaciones al presupuesto por jurisdicción\\n\\nModificaciones que se hacen al presupuesto aprobado durante\\n[...]\\naño en que se ejecuta\\n\\n \\n\\n### Ejecución presupuestaria de las transferencias\\n\\nDetalle de transferencias realizadas desde el Tesoro Nacional\",\n \"position\": 4\n },\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/sici/preguntas-frecuentes\",\n \"title\": \"Presupuesto Abierto | Sitio del ciudadano - Preguntas Frecuentes\",\n \"description\": \"El Presupuesto Nacional es la LEY anual que sanciona el Congreso de la Nación, donde planifica los ingresos que recibirá el Estado Nacional y cómo se aplicarán para satisfacer las necesidades de la población.\\n[...]\\nEn el sitio de la Oficina Nacional de Presupuesto podés encontrar la Ley de Presupuesto de la Administración Pública Nacional, correspondiente a cada ejercicio fiscal desde el año 2001, específicamente en la sección Presupuesto/ Leyes de Presupuesto, seleccionando el año de interés.\\n[...]\\n##### ¿Cómo accedo a Presupuestos Provinciales?\\n[...]\\nLos presupuestos provinciales son facultades propias de los niveles provinciales de gobierno. Para acceder a ellos te recomendamos consultar el sitio de Coordinación Provincial o bien dirigirte a cada uno de los Ministerios de Economía provinciales.\\n[...]\\nLa información referida al Presupuesto Nacional desde 1993 la podés encontrar en el sitio de la Oficina Nacional de Presupuesto en cada una de las secciones de interés: Ejecución Presupuestaria, Evaluación Presupuestaria, Series Estadísticas.\\n[...]\\nLos Fondos Fiduciarios se construyen mediante la transferencia total o parcial de bienes y/o fondos correspondientes a entidades y/o jurisdic\\n[...]\\nque dependen del Poder Ejecutivo Nacional.\\n[...]\\nLas transacciones corrientes abarcan ingresos y gastos por la adquisición de bienes y servicios durante el ejercicio o bien transacciones que para el beneficiario no implican incremento de la dotación de capital (ingresos tributarios, transferencias recibidas y otorgadas para financiar gastos corrientes).\\n[...]\\nLas transacciones de capital implican ingresos o gastos con bajas o altas de capital, existencias, tierras o activos intangibles, como también los ingresos y gastos sin contraprestación efectuados con el fin de que los beneficiarios incrementen su dotación de capital (ejemplo: transferencias de capital). Asimismo, se consideran transacciones de capital aquellas transacciones reembolsables que el gobierno realiza con fines de política (ejemplo: concesión de préstamos y aportes de capital al sector privado).\\n[...]\\nLas fuentes financieras son cuentas de financiamiento presupuestario que tienen el objeto de cubrir las necesidades derivadas de la insuficiencia de recursos corrientes y de capital. Constituyen fuentes financieras la disminución de la inversión financiera (venta de títulos y valores, de acciones y participaciones de capital y las recuperaciones de préstamos con objeto de obtener liquidez), el endeudamiento público (colocación de instrumentos de deuda en los mercados financieros interno y externo y la obtención de préstamos a corto y largo plazo) y el incremento de otros pasivos (crédito de los proveedores expresado mediante cuentas y documentos por pagar, como asimismo los anticipos del Banco Central de la República Argentina otorgados al Tesoro Nacional).\\n[...]\\npor el incremento de los activos\\n[...]\\ncomo compra de acciones, concesión de préstamos, y adquisición de títulos y valores, con el\\n[...]\\nde obtener rent\\n[...]\\nde los pasivos públicos (mediante la amortización de la deuda pública).\\n[...]\\nPuede suceder que el Congreso no apruebe en tiempo y forma el Proyecto de Ley de Presupuesto. Esto significa que a fines de Diciembre no se cuenta con el Presupuesto aprobado para iniciar el año. En estos casos comienza el ejercicio fiscal con un Presupuesto de Prórroga, tomando como base el Presupuesto del año anterior, haciendo los ajustes para cubrir un período de tiempo a la espera de la aprobación del Proyecto de Ley.\\n[...]\\nSi este se aprueba, se fija una fecha de implementación y se revierte el presupuesto de prórroga para cargar la Ley de Presupuesto.\",\n \"position\": 5\n }\n ]\n }\n}", "tool_call_id": "call_ARAG34UDlbhlSntynGfGyOTI", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\n \"success\": true,\n \"data\": {\n \"web\": [\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/api/\",\n \"title\": \"API - Presupuesto Abierto\",\n \"description\": \"Presupuesto Abierto | API\\n\\n### La interfaz de programación de aplicaciones (API) de Presupuesto Abierto\\n\\n---\\n\\nDejanos tu comentario\\n\\nPresupuesto Abierto | API\\n1. Inicio\\n2. API\\n### La interfaz de programación de aplicaciones (API) de Presupuesto Abierto\\n###\\n×\\n#### Advertencia\\n**\\nEl navegador no es compatible con el sitio Presupuesto Abierto.\\nUtilizá otro navegador para acceder a la funcionalidad completa\\ndel sitio.\\nAceptar\\nDejanos\\ntu comentario\",\n \"position\": 1\n },\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/sici/datos-abiertos\",\n \"title\": \"Presupuesto Abierto | Sitio del ciudadano - Datos abiertos\",\n \"description\": \"Presupuesto Abierto | Sitio del ciudadano - Datos abiertos \\n\\n### Datos abiertos\\n[...]\\nEstos datos son tuyos. Podés descargarlos, analizarlos, cruzarlos con otros datos, crear aplicaciones o armar visualizaciones a partir de ellos.\\n\\n \\n\\n##### Año\\n\\nTodos los años\",\n \"position\": 2\n },\n {\n \"url\": \"http://apis.datos.gob.ar/\",\n \"title\": \"Datos Argentina\",\n \"description\": \"### Resultados Electorales - API\\n[...]\\n### API de Presupuesto Abierto\\n[...]\\nAPI de Presupuesto AbiertoAPI Presupuesto Abierto\\n[...]\\n### API Georef\\n[...]\\nAPI GeorefAccedé a la documentación de la API para normalizar unidades territoriales, provincias,departamentos, municipios y calles.\",\n \"position\": 3\n },\n {\n \"url\": \"https://www.datos.gob.ar/apis\",\n \"title\": \"APIs - Datos Argentina\",\n \"description\": \"Datos Argentina\\n\\nDATASETS\\n\\n---\\n\\nSERIES\\n\\nORGANIZACIONES\\n\\nAPIs\\n\\nACERCA\\n\\nIndicadores\\n\\nMarco legal\\n\\nPublicá datos\\n\\nHerramientas\\n\\nGlosario\\n\\nDatos Geoespaciales\\n\\n---\\n\\nMI CUENTA\\n\\nAYUDA\\n\\nSALIR\\n\\nDatasets Series Organizaciones APIs Acerca\\n\\n- Indicadores\\n- Marco legal\\n- Publicá datos\\n- Herramientas\\n- Glosario\\n- Datos Geoespaciales\\n\\n### Resultados Electorales - API\\n\\nDocumentación de la API para consultar los resultados provisionales electorales históricos.\\n\\n### API de Presupuesto Abierto\\n\\nAPI Presupuesto Abierto\\n\\n### API Georef\\n\\nAccedé a la documentación de la API para normalizar unidades territoriales, provincias,departamentos, municipios y calles.\\n\\n### Series de Tiempo (API)\\n\\nAccedé a la documentación de la API que te permite consultar indicadores con evolución en el tiempo, de forma personalizada y actualizada.\\n\\n### CKAN\\n\\nConsultá los metadatos de los datasets y distribuciones del Portal a través de la API de CKAN.\\n\\nIR A NUESTRO GITHUB\\n\\nIndicadores\\n\\nMarco legal\\n\\nPublicá datos\\n\\nHerramientas\\n\\nGlosario\\n\\nDatos Geoespaciales\\n\\nContactanos\\n\\nDesarrollado por Andino con CKAN\\n\\nVersión: 2.6.3\",\n \"position\": 4\n },\n {\n \"url\": \"https://datos.gob.ar/dataset?tags=Universidades\",\n \"title\": \"Datasets - Datos Argentina\",\n \"description\": \"Datos Argentina - Datos\\n\\nDATASETS\\n\\n---\\n\\nSERIES\\n\\nORGANIZACIONES\\n\\nAPIs\\n\\nACERCA\\n\\nIndicadores\\n\\nMarco legal\\n\\nPublicá datos\\n\\nHerramientas\\n\\nGlosario\\n\\nDatos Geoespaciales\\n\\n---\\n\\nMI CUENTA\\n\\nAYUDA\\n\\nSALIR\\n\\nDatasets Series Organizaciones APIs Acerca\\n\\n- Datos Geoespaciales\\n- Glosario\\n- Herramientas\\n- Publicá datos\\n- Marco legal\\n- Indicadores\\n\\nclose\\n\\nIndicadores\\n\\nMarco legal\\n\\nPublicá datos\\n\\nHerramientas\\n\\nGlosario\\n\\nDatos Geoespaciales\\n\\nContactanos\\n\\nDesarrollado por Andino con CKAN\\n\\nVersión: 2.6.3\",\n \"position\": 5\n }\n ]\n }\n}", "tool_call_id": "call_i5Z1w3KJOKSI2TAEvVrV9BVg", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "assistant", "content": "", "reasoning": null, "finish_reason": "tool_calls", "codex_reasoning_items": [{"type": "reasoning", "encrypted_content": "gAAAAABqAzzPfJDrycXnukDPT0hmDbe1b2SMOMRQVvzyZVlsu6cGC8OLJ1PuNveZhPC063I-xsgrDfLgIV0E4Yj-J_6mUpuw5sSGpkFlHZn-lqVju-JjbTbyoSvcuXzrBWvZdVZBcU2n27jaAXoYURnYWOtQ-2EUahuEpo-pZMhPAna9bJFbqCQ7fmx-LHeDJn6413wA7nEL0v-4fSGuDBGqQe0ipEfNE1Bala6L3GEEPEps4eoXYi2XcJuLnhn9s21TIesC1EUkwnb5DBlUtljjGgphubNRQLBvRD13JNV1Fyicv1XbXAQM9GzU8tyuwUroo9VmDJTx6wGF94oTI46fZ8Hx5y2fyb1WHeDKbf805DNDKD_n9guThzryJLjZ6CILnZ4_aEFttyQmV5bbu1ZLT9PzXKzE6Vj3qgwbR0G41J-BcX7NIoPwYwEmmcOgoUklkySg9lasA8-rDkE5pF6QL_DJb9yGLcgUVqVuWLQEcqvkGifUYI3ro3VOD0OyxsPPdfSVrRbnEEIFVRGuoaLmniSP1Ys_ZkpcfSrvf5lpCt5r6hRvt-e4P0HZyuPtUaBCKjBkMONvl2_9iiF9ku1386yplMvVowWUBzMssyWyx4MVvv4xNsm_18fUJId_5-jHiQ2gGptyHCSfxCkjaF5eALnd8cD_XEqJ4di_YYHwRcKGynRFx7-AqbGuusATuhu2Nh1byWoNAMW1FO_nL8VSyzWhMAQCl2LCtChDfn31fBd3JAujAELyZUPsphBnyR1RwjnzNnHpciwKvHoH8nEoTyu7JgqEfUntxjW9Cr9URli1ZiNaUQwAoDRpCVVNaC7wwge2TNGBH6aUNMUduxmrf71FfqDj2uag2XBoQSK0rqrGAY8kaGESgBWKj8Q5eSwjVcS0HsRTxzlOkWCOr3ScD-C99XsNHfhUsGJu_it8-ag3hexFBbY6Qyq3dfBtjk0XNUq-0Nby", "id": "rs_0778edfc9d885818016a033cce04308191a68f723b6aae96d8", "summary": []}], "tool_calls": [{"id": "call_j9Aq1ID1qjekbkIr4UuUbNe0", "call_id": "call_j9Aq1ID1qjekbkIr4UuUbNe0", "response_item_id": "fc_0778edfc9d885818016a033ccfc40c819191e0b78d8233bf54", "type": "function", "function": {"name": "web_extract", "arguments": "{\"urls\":[\"https://www.presupuestoabierto.gob.ar/api/\",\"https://www.presupuestoabierto.gob.ar/sici/datos-abiertos\",\"https://www.presupuestoabierto.gob.ar/sici/ejecucion-presup-de-las-transferencias\"]}"}}], "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\n \"results\": [\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/api/\",\n \"title\": \"Presupuesto Abierto | API\",\n \"content\": \"Presupuesto Abierto | API\\n\\n### La interfaz de programación de aplicaciones (API) de Presupuesto Abierto\\n\\n---\\n\\nDejanos tu comentario\\n\\nPresupuesto Abierto | API\\n1. [Inicio](https://www.presupuestoabierto.gob.ar/sici/home)\\n2. API\\n### La interfaz de programación de aplicaciones (API) de Presupuesto Abierto\\n###\\n×\\n#### Advertencia\\n**\\nEl navegador no es compatible con el sitio Presupuesto Abierto.\\nUtilizá otro navegador para acceder a la funcionalidad completa\\ndel sitio.\\nAceptar\\n[Dejanos\\ntu comentario](https://www.presupuestoabierto.gob.ar/sici/dejanos-tu-comentario)\",\n \"error\": null\n },\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/sici/datos-abiertos\",\n \"title\": \"Presupuesto Abierto | Sitio del ciudadano - Datos abiertos\",\n \"content\": \"Presupuesto Abierto | Sitio del ciudadano - Datos abiertos \\n\\n### Datos abiertos\\n\\n---\\n\\nEstos datos son tuyos. Podés descargarlos, analizarlos, cruzarlos con otros datos, crear aplicaciones o armar visualizaciones a partir de ellos.\\n\\n \\n\\n##### Año\\n\\nTodos los años\\n\\n---\\n\\nEstos datos están bajo la Licencia Creative Commons 4.0\\n\\n \\n\\n \\n\\nDejanos tu comentario\\n\\n\",\n \"error\": null\n },\n {\n \"url\": \"https://www.presupuestoabierto.gob.ar/sici/ejecucion-presup-de-las-transferencias\",\n \"title\": \"Presupuesto Abierto | Sitio del ciudadano - Ejecución presupuestaria de las transferencias\",\n \"content\": \"Presupuesto Abierto | Sitio del ciudadano - Ejecución presupuestaria de las transferencias -- -- --\\n\\n### Ejecución presupuestaria de las transferencias\\n\\n---\\n\\nDeslizá a la izquierda para visualizar el reporte.\\n\\n---\\n\\n##### ¿Te resultó útil?\\n\\nSi No\\n\\nCancelar Enviar\\n\\nDejanos tu comentario\",\n \"error\": null\n }\n ]\n}", "tool_call_id": "call_j9Aq1ID1qjekbkIr4UuUbNe0", "timestamp": "2026-05-12T14:48:12.833047"} {"role": "assistant", "content": "", "reasoning": "**Searching for API docs**\n\nI think I need to find the API documentation, but it seems like it might be hidden in JavaScript. So I'm considering fetching the HTML instead to see if I can locate the information I need. There’s definitely a method for accessing what’s obscured, but I want to make sure I’m approaching it correctly. Let’s see if I can uncover those docs efficiently!", "finish_reason": "tool_calls", "reasoning_content": "**Searching for API docs**\n\nI think I need to find the API documentation, but it seems like it might be hidden in JavaScript. So I'm considering fetching the HTML instead to see if I can locate the information I need. There’s definitely a method for accessing what’s obscured, but I want to make sure I’m approaching it correctly. Let’s see if I can uncover those docs efficiently!", "codex_reasoning_items": [{"type": "reasoning", "encrypted_content": "gAAAAABqAzzqRlB8ifmhDE9Vhu0ti7KPmiynIjJn0E73-Ye8kqMd_bE950Nf-WcCU7Dm04gSjrG_TmzagNpMLSI2Zvx6LQm4ibOQyTvusmzbjg1vIqVHMR0UnB3nhNvQfmYTFHJDw3ZvLsyWTNUFfDWTwLqVxgf5jQ1sgIBuyIcMZOLz3Sa7IQfviMhIky4bc4_k87yHVwcGKqJbLQWMzYIeXfrYoqEbTfH0-AH3Lp2ZP67p6qyArYVAJJruTDuWkfEARpfGn2LJSXGMmys-oSH4c9YCQ7u9-e75OvlJAU02Vr7tPq3NEAnGxuiY8Lo5UqyiHC-41fGass_GSs-zs_STIGv8M8idBULwL2yglghtDDVp5TNulc0ir5I5FhVJ0js_AvzcIWbkELbMjWzOvfqs0rBe2_DXFXY6p0xCnnMc4ZyCxaYIAn7k1E8yTM2q9C448rgttCPqNG0fgk2J_37x1sDDUvxnYkBtV9I4Rl0zkr2dyI-CPzqtFRHEBBcjlvFX5gb11FPROGxsozyxGhWdipvZFTEEsCMHhdOafF2AftbRWtrF_1cK-7nKMDOpGqTMZ3gnY0ZS7yQaYce-ov0mt7H-V4WPJGteV5bTU__-P7G2Suxnmdps4wphCcIrvnNh4g-Wmv8RhtQDWMpfE-LOoW0WTs9sgTqE3Af4F1QeLNu3BKz0qbSzxhGZttW0V7fvsc5G4DoNDJaqEApecpq2Jg5WX50M6WiXfagagllb4qwk4uCu-WSaq7rxYcvXnqhOIiP8_Xodvg1HApERK_27-VfQyvuadd2vOS7_M7pAbNKpNtDGeC3vm_b7nhXbWR3CPlpC7grnQWB5MkbYkn29rrw4gmN9RXdwGPipq7r0hYSVc7LE1VZ5D3bdX5fr_gJP1QSvCQSY843d73FMvcVKnwu_Wdk26ANwEmnkXXSL56UZFB1A96ZDYNM8ad1kR7HdZ_-bDw3YPtlTX_gmHAk9_EHF5eV60g==", "id": "rs_0a37d53cc383a422016a033ce70a188191a8b300e92074d190", "summary": [{"type": "summary_text", "text": "**Searching for API docs**\n\nI think I need to find the API documentation, but it seems like it might be hidden in JavaScript. So I'm considering fetching the HTML instead to see if I can locate the information I need. There’s definitely a method for accessing what’s obscured, but I want to make sure I’m approaching it correctly. Let’s see if I can uncover those docs efficiently!"}]}], "tool_calls": [{"id": "call_yZhNm3DYfVQ6nkstj1svFTmy", "call_id": "call_yZhNm3DYfVQ6nkstj1svFTmy", "response_item_id": "fc_0a37d53cc383a422016a033ceaf6188191bed93813490fcf49", "type": "function", "function": {"name": "terminal", "arguments": "{\"command\":\"python3 - <<'PY'\\nimport requests,re\\nurl='https://www.presupuestoabierto.gob.ar/api/'\\nr=requests.get(url,headers={'User-Agent':'Mozilla/5.0'},timeout=20)\\nprint(r.status_code,r.url,len(r.text))\\nprint(r.text[:1000])\\nprint(re.findall(r'https?://[^\\\\\\\"\\\\']+', r.text)[:20])\\nprint(re.findall(r'api/[A-Za-z0-9_./?=&-]+', r.text)[:50])\\nPY\",\"timeout\":60}"}}], "timestamp": "2026-05-12T14:48:12.833047"} {"role": "tool", "content": "{\"output\": \"200 https://www.presupuestoabierto.gob.ar/api/ 13520\\n\\n\\n\\n\\n\\nPresupuesto Abierto | API\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\t
\\n\\t\\t