{
 "harness": "opencode",
 "capturedAtMs": 1788816092608,
 "headers": {
  "content-type": "application/json",
  "user-agent": "opencode/1.18.16 ai-sdk/provider-utils/4.0.23 runtime/bun/1.3.14",
  "x-omp-harness": "opencode"
 },
 "body": {
  "model": "auto",
  "max_tokens": 32000,
  "messages": [
   {
    "role": "system",
    "content": "You are opencode, an interactive CLI tool that helps users with software engineering tasks. Use the instructions below and the tools available to you to assist the user.\n\nIMPORTANT: You must NEVER generate or guess URLs for the user unless you are confident that the URLs are for helping the user with programming. You may use URLs provided by the user in their messages or local files.\n\nIf the user \u00e2\u20ac\u00a6[10797 chars]"
   },
   {
    "role": "user",
    "content": "\"Reply with the single word ok\""
   }
  ],
  "tools": [
   {
    "type": "function",
    "function": {
     "name": "bash",
     "description": "Executes a given bash command in a persistent shell session with optional timeout, ensuring proper handling and security measures.\n\nBe aware: OS: win32, Shell: bash\n\nAll commands run in the current working directory by default. Use the `workdir` parameter if you need to run a command in a different directory. AVOID using `cd <directory> && <command>` patterns - use `workdir` instead.\n\nUse `C:\\User\u00e2\u20ac\u00a6[4657 chars]",
     "parameters": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
       "command": {
        "type": "string",
        "description": "The command to execute"
       },
       "timeout": {
        "minimum": -9007199254740991,
        "exclusiveMinimum": 0,
        "type": "integer",
        "maximum": 9007199254740991,
        "description": "Optional timeout in milliseconds"
       },
       "workdir": {
        "type": "string",
        "description": "The working directory to run the command in. Defaults to the current directory. Use this instead of 'cd' commands."
       }
      },
      "required": [
       "command"
      ]
     }
    }
   },
   {
    "type": "function",
    "function": {
     "name": "edit",
     "description": "Performs exact string replacements in files. \n\nUsage:\n- You must use your `Read` tool at least once in the conversation before editing. This tool will error if you attempt an edit without reading the file. \n- When editing text from Read tool output, ensure you preserve the exact indentation (tabs/spaces) as it appears AFTER the line number prefix. The line number prefix format is: line number + co\u00e2\u20ac\u00a6[1369 chars]",
     "parameters": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
       "filePath": {
        "type": "string",
        "description": "The absolute path to the file to modify"
       },
       "oldString": {
        "type": "string",
        "description": "The text to replace"
       },
       "newString": {
        "type": "string",
        "description": "The text to replace it with (must be different from oldString)"
       },
       "replaceAll": {
        "type": "boolean",
        "description": "Replace all occurrences of oldString (default false)"
       }
      },
      "required": [
       "filePath",
       "oldString",
       "newString"
      ]
     }
    }
   },
   {
    "type": "function",
    "function": {
     "name": "glob",
     "description": "- Fast file pattern matching tool that works with any codebase size\n- Supports glob patterns like \"**/*.js\" or \"src/**/*.ts\"\n- Returns matching file paths\n- Use this tool when you need to find files by name patterns\n- When you are doing an open-ended search that may require multiple rounds of globbing and grepping, use the Task tool instead\n- You have the capability to call multiple tools in a sin\u00e2\u20ac\u00a6[517 chars]",
     "parameters": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
       "pattern": {
        "type": "string",
        "description": "The glob pattern to match files against"
       },
       "path": {
        "type": "string",
        "description": "The directory to search in. If not specified, the current working directory will be used. IMPORTANT: Omit this field to use the default directory. DO NOT enter \"undefined\" or \"null\" - simply omit it for the default behavior. Must be a valid directory path if provided."
       }
      },
      "required": [
       "pattern"
      ]
     }
    }
   },
   {
    "type": "function",
    "function": {
     "name": "grep",
     "description": "- Fast content search tool that works with any codebase size\n- Searches file contents using regular expressions\n- Supports full regex syntax (eg. \"log.*Error\", \"function\\s+\\w+\", etc.)\n- Filter files by pattern with the include parameter (eg. \"*.js\", \"*.{ts,tsx}\")\n- Returns file paths and line numbers with matching lines\n- Use this tool when you need to find files containing specific patterns\n- If \u00e2\u20ac\u00a6[657 chars]",
     "parameters": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
       "pattern": {
        "type": "string",
        "description": "The regex pattern to search for in file contents"
       },
       "path": {
        "type": "string",
        "description": "The directory to search in. Defaults to the current working directory."
       },
       "include": {
        "type": "string",
        "description": "File pattern to include in the search (e.g. \"*.js\", \"*.{ts,tsx}\")"
       }
      },
      "required": [
       "pattern"
      ]
     }
    }
   },
   {
    "type": "function",
    "function": {
     "name": "read",
     "description": "Read a file or directory from the local filesystem. If the path does not exist, an error is returned.\n\nUsage:\n- The filePath parameter should be an absolute path.\n- By default, this tool returns up to 2000 lines from the start of the file.\n- The offset parameter is the line number to start from (1-indexed).\n- To read later sections, call this tool again with a larger offset.\n- Use the grep tool to\u00e2\u20ac\u00a6[1158 chars]",
     "parameters": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
       "filePath": {
        "type": "string",
        "description": "The absolute path to the file or directory to read"
       },
       "offset": {
        "minimum": 0,
        "type": "integer",
        "maximum": 9007199254740991,
        "description": "The line number to start reading from (1-indexed)"
       },
       "limit": {
        "minimum": 0,
        "type": "integer",
        "maximum": 9007199254740991,
        "description": "The maximum number of lines to read (defaults to 2000)"
       }
      },
      "required": [
       "filePath"
      ]
     }
    }
   },
   {
    "type": "function",
    "function": {
     "name": "skill",
     "description": "Load a specialized skill when the task at hand matches one of the skills listed in the system prompt.\n\nUse this tool to inject the skill's instructions and resources into current conversation. The output may contain detailed workflow guidance as well as references to scripts, files, etc in the same directory as the skill.\n\nThe skill name must match one of the skills listed in your system prompt.\n",
     "parameters": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
       "name": {
        "type": "string",
        "description": "The name of the skill from available_skills"
       }
      },
      "required": [
       "name"
      ]
     }
    }
   },
   {
    "type": "function",
    "function": {
     "name": "task",
     "description": "Launch a new agent to handle complex, multistep tasks autonomously.\n\nWhen using the Task tool, you must specify a subagent_type parameter to select which agent type to use.\n\nWhen NOT to use the Task tool:\n- If you want to read a specific file path, use the Read or Glob tool instead of the Task tool, to find the match more quickly\n- If you are searching for a specific class definition like \"class F\u00e2\u20ac\u00a6[3019 chars]",
     "parameters": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
       "description": {
        "type": "string",
        "description": "A short (3-5 words) description of the task"
       },
       "prompt": {
        "type": "string",
        "description": "The task for the agent to perform"
       },
       "subagent_type": {
        "type": "string",
        "description": "The type of specialized agent to use for this task"
       },
       "task_id": {
        "type": "string",
        "description": "This should only be set if you mean to resume a previous task (you can pass a prior task_id and the task will continue the same subagent session as before instead of creating a fresh one)"
       },
       "command": {
        "type": "string",
        "description": "The command that triggered this task"
       }
      },
      "required": [
       "description",
       "prompt",
       "subagent_type"
      ]
     }
    }
   },
   {
    "type": "function",
    "function": {
     "name": "todowrite",
     "description": "Create and maintain a structured task list for the current coding session. Tracks progress, organizes multi-step work, and surfaces status to the user.\n\n## When to use\nUse proactively when:\n- The task requires 3+ distinct steps or actions (not just 3 tool calls for a single conceptual step)\n- The work is non-trivial and benefits from planning\n- The user provides multiple tasks (numbered or comma-s\u00e2\u20ac\u00a6[2012 chars]",
     "parameters": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
       "todos": {
        "type": "array",
        "items": {
         "type": "object",
         "properties": {
          "content": {
           "type": "string",
           "description": "Brief description of the task"
          },
          "status": {
           "type": "string",
           "description": "Current status of the task: pending, in_progress, completed, cancelled"
          },
          "priority": {
           "type": "string",
           "description": "Priority level of the task: high, medium, low"
          }
         },
         "required": [
          "content",
          "status",
          "priority"
         ]
        },
        "description": "The updated todo list"
       }
      },
      "required": [
       "todos"
      ]
     }
    }
   },
   {
    "type": "function",
    "function": {
     "name": "webfetch",
     "description": "- Fetches content from a specified URL\n- Takes a URL and optional format as input\n- Fetches the URL content, converts to requested format (markdown by default)\n- Returns the content in the specified format\n- Use this tool when you need to retrieve and analyze web content\n\nUsage notes:\n  - IMPORTANT: if another tool is present that offers better web fetching capabilities, is more targeted to the ta\u00e2\u20ac\u00a6[750 chars]",
     "parameters": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
       "url": {
        "type": "string",
        "description": "The URL to fetch content from"
       },
       "format": {
        "type": "string",
        "enum": [
         "text",
         "markdown",
         "html"
        ],
        "description": "The format to return the content in (text, markdown, or html). Defaults to markdown.",
        "default": "markdown"
       },
       "timeout": {
        "type": "number",
        "description": "Optional timeout in seconds (max 120)"
       }
      },
      "required": [
       "url"
      ]
     }
    }
   },
   {
    "type": "function",
    "function": {
     "name": "write",
     "description": "Writes a file to the local filesystem.\n\nUsage:\n- This tool will overwrite the existing file if there is one at the provided path.\n- If this is an existing file, you MUST use the Read tool first to read the file's contents. This tool will fail if you did not read the file first.\n- ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.\n- NEVER proacti\u00e2\u20ac\u00a6[623 chars]",
     "parameters": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
       "content": {
        "type": "string",
        "description": "The content to write to the file"
       },
       "filePath": {
        "type": "string",
        "description": "The absolute path to the file to write (must be absolute, not relative)"
       }
      },
      "required": [
       "content",
       "filePath"
      ]
     }
    }
   }
  ],
  "tool_choice": "auto",
  "stream": true,
  "stream_options": {
   "include_usage": true
  }
 }
}