---
name: workspace-commands
description: The shell commands, task tools, and python3 interpreter available in this workspace.
---
# Available commands
Standard Unix commands, among them:
cat head tail ls find grep wc sort uniq cut tr sed awk
diff tee xargs jq unzip curl
with pipes, `>` redirection, `$(...)` substitution and `$'...'`.
The task CLIs below are registered with this shell rather than installed
as files; do not inspect them with `which`, `file` or `/usr/bin`.
## Google Drive and spreadsheet reads
Use `ls` and `find` under `/gd` to list folders and locate spreadsheets.
Read `.gsheet.json` files with `cat`, `jq`, or Python to inspect spreadsheet
IDs, tab names, cell values, formulas, and metadata. Filter or
slice the JSON for ranges, summaries, and matching cells; read multiple
files for queries across spreadsheets. See VFS.md for the JSON structure.
## google-sheet
Use `google-sheet <command> '<JSON arguments>'`. Run
`google-sheet <command> --help` to get more information.
| Command | Arguments | Description |
|---|---|---|
| `google-sheet get-sheet-data` | `{spreadsheet_id: str, sheet: str, range?: str = null, include_grid_data?: bool = false}` | Get data from a specific sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Optional cell range in A1 notation (e.g., 'A1:C10'). If not provided, gets all data. include_grid_data: If True, includes cell formatting and other metadata in the response. Note: Setting this to True will significantly increase the response size and token usage when parsing the response, as it includes detailed cell formatting information. Default is False (returns values only, more efficient). Returns: Grid data structure with either full metadata or just values from Google Sheets API, depending on include_grid_data parameter |
| `google-sheet get-sheet-formulas` | `{spreadsheet_id: str, sheet: str, range?: str = null}` | Get formulas from a specific sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Optional cell range in A1 notation (e.g., 'A1:C10'). If not provided, gets all formulas from the sheet. Returns: A 2D array of the sheet formulas. |
| `google-sheet update-cells` | `{spreadsheet_id: str, sheet: str, range: str, data: list[list]}` | Update cells in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Cell range in A1 notation (e.g., 'A1:C10') data: 2D array of values to update Returns: Result of the update operation |
| `google-sheet batch-update-cells` | `{spreadsheet_id: str, sheet: str, ranges: dict}` | Batch update multiple ranges in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet ranges: Dictionary mapping range strings to 2D arrays of values e.g., {'A1:B2': [[1, 2], [3, 4]], 'D1:E2': [['a', 'b'], ['c', 'd']]} Returns: Result of the batch update operation |
| `google-sheet add-rows` | `{spreadsheet_id: str, sheet: str, count: int, start_row?: int = null}` | Add rows to a sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet count: Number of rows to add start_row: 0-based row index to start adding. If not provided, adds at the beginning. Returns: Result of the operation |
| `google-sheet add-columns` | `{spreadsheet_id: str, sheet: str, count: int, start_column?: int = null}` | Add columns to a sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet count: Number of columns to add start_column: 0-based column index to start adding. If not provided, adds at the beginning. Returns: Result of the operation |
| `google-sheet list-sheets` | `{spreadsheet_id: str}` | List all sheets in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) Returns: List of sheet names |
| `google-sheet copy-sheet` | `{src_spreadsheet: str, src_sheet: str, dst_spreadsheet: str, dst_sheet: str}` | Copy a sheet from one spreadsheet to another. Args: src_spreadsheet: Source spreadsheet ID src_sheet: Source sheet name dst_spreadsheet: Destination spreadsheet ID dst_sheet: Destination sheet name Returns: Result of the operation |
| `google-sheet rename-sheet` | `{spreadsheet: str, sheet: str, new_name: str}` | Rename a sheet in a Google Spreadsheet. Args: spreadsheet: Spreadsheet ID sheet: Current sheet name new_name: New sheet name Returns: Result of the operation |
| `google-sheet get-multiple-sheet-data` | `{queries: list[dict]}` | Get data from multiple specific ranges in Google Spreadsheets. Args: queries: A list of dictionaries, each specifying a query. Each dictionary should have 'spreadsheet_id', 'sheet', and 'range' keys. Example: [{'spreadsheet_id': 'abc', 'sheet': 'Sheet1', 'range': 'A1:B5'}, {'spreadsheet_id': 'xyz', 'sheet': 'Data', 'range': 'C1:C10'}] Returns: A list of dictionaries, each containing the original query parameters and the fetched 'data' or an 'error'. |
| `google-sheet get-multiple-spreadsheet-summary` | `{spreadsheet_ids: list[str], rows_to_fetch?: int = 5}` | Get a summary of multiple Google Spreadsheets, including sheet names, headers, and the first few rows of data for each sheet. Args: spreadsheet_ids: A list of spreadsheet IDs to summarize. rows_to_fetch: The number of rows (including header) to fetch for the summary (default: 5). Returns: A list of dictionaries, each representing a spreadsheet summary. Includes spreadsheet title, sheet summaries (title, headers, first rows), or an error. |
| `google-sheet create-spreadsheet` | `{title: str, folder_id?: str = null}` | Create a new Google Spreadsheet. Args: title: The title of the new spreadsheet folder_id: Optional Google Drive folder ID where the spreadsheet should be created. If not provided, uses the configured default folder or creates in root. Returns: Information about the newly created spreadsheet including its ID |
| `google-sheet create-sheet` | `{spreadsheet_id: str, title: str}` | Create a new sheet tab in an existing Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet title: The title for the new sheet Returns: Information about the newly created sheet |
| `google-sheet list-spreadsheets` | `{folder_id?: str = null}` | List all spreadsheets in the specified Google Drive folder. If no folder is specified, uses the configured default folder or lists from 'My Drive'. Args: folder_id: Optional Google Drive folder ID to search in. If not provided, uses the configured default folder or searches 'My Drive'. Returns: List of spreadsheets with their ID and title |
| `google-sheet share-spreadsheet` | `{spreadsheet_id: str, recipients: list[dict], send_notification?: bool = true}` | Share a Google Spreadsheet with multiple users via email, assigning specific roles. Args: spreadsheet_id: The ID of the spreadsheet to share. recipients: A list of dictionaries, each containing 'email_address' and 'role'. The role should be one of: 'reader', 'commenter', 'writer'. Example: [ {'email_address': 'user1@example.com', 'role': 'writer'}, {'email_address': 'user2@example.com', 'role': 'reader'} ] send_notification: Whether to send a notification email to the users. Defaults to True. Returns: A dictionary containing lists of 'successes' and 'failures'. Each item in the lists includes the email address and the outcome. |
| `google-sheet list-folders` | `{parent_folder_id?: str = null}` | List all folders in the specified Google Drive folder. If no parent folder is specified, lists folders from 'My Drive' root. Args: parent_folder_id: Optional Google Drive folder ID to search within. If not provided, searches the root of 'My Drive'. Returns: List of folders with their ID, name, and parent information |
| `google-sheet search-spreadsheets` | `{query: str, max_results?: int = 20}` | Search for spreadsheets in Google Drive by name or content. Args: query: Search query string. Searches in file name and content. Examples: "budget 2024", "sales report", "project tracker" max_results: Maximum number of results to return (default 20, max 100) Returns: List of matching spreadsheets with their ID, name, and metadata |
| `google-sheet find-in-spreadsheet` | `{spreadsheet_id: str, query: str, sheet?: str = null, case_sensitive?: bool = false, max_results?: int = 50}` | Find cells containing a specific value in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) query: The text to search for in cell values sheet: Optional sheet name to search in. If not provided, searches all sheets. case_sensitive: Whether the search should be case-sensitive (default False) max_results: Maximum number of results to return (default 50) Returns: List of found cells with their location (sheet, cell in A1 notation) and value |
| `google-sheet batch-update` | `{spreadsheet_id: str, requests: list[dict]}` | Execute a batch update on a Google Spreadsheet using the full batchUpdate endpoint. This provides access to all batchUpdate operations including adding sheets, updating properties, inserting/deleting dimensions, formatting, and more. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) requests: A list of request objects. Each request object can contain any valid batchUpdate operation. Common operations include: - addSheet: Add a new sheet - updateSheetProperties: Update sheet properties (title, grid properties, etc.) - insertDimension: Insert rows or columns - deleteDimension: Delete rows or columns - updateCells: Update cell values and formatting - updateBorders: Update cell borders - addConditionalFormatRule: Add conditional formatting - deleteConditionalFormatRule: Remove conditional formatting - updateDimensionProperties: Update row/column properties - and many more... Example requests: [ { "addSheet": { "properties": { "title": "New Sheet" } } }, { "updateSheetProperties": { "properties": { "sheetId": 0, "title": "Renamed Sheet" }, "fields": "title" } }, { "insertDimension": { "range": { "sheetId": 0, "dimension": "ROWS", "startIndex": 1, "endIndex": 3 } } } ] Returns: Result of the batch update operation, including replies for each request |
| `google-sheet add-chart` | `{spreadsheet_id: str, sheet: str, chart_type: str, data_range: str, title?: str = null, x_axis_label?: str = null, y_axis_label?: str = null, position_x?: int = 0, position_y?: int = 0, width?: int = 600, height?: int = 400}` | Add a chart to a Google Spreadsheet. Creates a chart from the specified data range with customizable type, title, and positioning. The chart is added as a floating element on the sheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet containing the data chart_type: Type of chart to create. Supported types: - COLUMN: Vertical bar chart - BAR: Horizontal bar chart - LINE: Line chart - AREA: Area chart - PIE: Pie chart - SCATTER: Scatter plot - COMBO: Combination chart - HISTOGRAM: Histogram data_range: A1 notation range for chart data (e.g., 'A1:C10'). The first row is typically treated as headers. title: Optional title for the chart x_axis_label: Optional label for the X axis (bottom axis) y_axis_label: Optional label for the Y axis (left axis) position_x: Horizontal position offset in pixels from the top-left corner (default: 0) position_y: Vertical position offset in pixels from the top-left corner (default: 0) width: Width of the chart in pixels (default: 600) height: Height of the chart in pixels (default: 400) Returns: Result of the chart creation operation Examples: Create a column chart showing sales data: add_chart( spreadsheet_id="abc123", sheet="Sales", chart_type="COLUMN", data_range="A1:B13", title="Monthly Sales", x_axis_label="Month", y_axis_label="Revenue ($)" ) Create a pie chart for market share: add_chart( spreadsheet_id="abc123", sheet="Market", chart_type="PIE", data_range="A1:B5", title="Market Share by Product" ) |
## woocommerce
Use `woocommerce <command> '<JSON arguments>'`. Run
`woocommerce <command> --help` to get more information.
| Command | Arguments | Description |
|---|---|---|
| `woocommerce products-list` | `{perPage?: int, page?: int, search?: str, status?: "publish" \| "draft" \| "private" \| "pending", category?: str, tag?: str, sku?: str, featured?: bool, onSale?: bool, minPrice?: str, maxPrice?: str, stockStatus?: "instock" \| "outofstock" \| "onbackorder", orderby?: "date" \| "id" \| "include" \| "title" \| "slug" \| "price" \| "popularity" \| "rating", order?: "asc" \| "desc"}` | List products with optional filters. IMPORTANT: Use perPage parameter to control how many results to return (default is 10, max is 100). Use page parameter for pagination. — `perPage`: Number of items to return per page (default: 10, max: 100). Always specify this to control result size.; `page`: Page number for pagination (default: 1). Use with perPage to navigate through results.; `search`: Search term; `status`: Product status; `category`: Category ID; `tag`: Tag ID; `sku`: Product SKU; `featured`: Featured products only; `onSale`: On sale products only; `minPrice`: Minimum price; `maxPrice`: Maximum price; `stockStatus`: Stock status; `orderby`: Order by field; `order`: Order direction |
| `woocommerce products-get` | `{productId: int}` | Get a specific product by ID — `productId`: Product ID |
| `woocommerce products-create` | `{productData: {name?: str, type?: "simple" \| "grouped" \| "external" \| "variable", status?: "publish" \| "draft" \| "private" \| "pending", featured?: bool, catalog_visibility?: "visible" \| "catalog" \| "search" \| "hidden", description?: str, short_description?: str, sku?: str, regular_price?: str, sale_price?: str, manage_stock?: bool, stock_quantity?: int, categories?: list[{id?: int}], images?: list[{src?: str, alt?: str}]}}` | Create a new product — `productData`: Product data; `productData.name`: Product name; `productData.type`: Product type; `productData.status`: Product status; `productData.featured`: Featured product; `productData.catalog_visibility`: Catalog visibility; `productData.description`: Product description; `productData.short_description`: Product short description; `productData.sku`: Product SKU; `productData.regular_price`: Regular price; `productData.sale_price`: Sale price; `productData.manage_stock`: Manage stock; `productData.stock_quantity`: Stock quantity; `productData.categories`: Product categories; `productData.categories.id`: Category ID; `productData.images`: Product images; `productData.images.src`: Image URL; `productData.images.alt`: Image alt text |
| `woocommerce products-update` | `{productId: int, productData: dict}` | Update a product — `productId`: Product ID; `productData`: Product data to update |
| `woocommerce products-delete` | `{productId: int, force?: bool = false}` | Delete a product — `productId`: Product ID; `force`: Force delete |
| `woocommerce products-batch-update` | `{create?: list[dict], update?: list[{id?: int}], delete?: list[int]}` | Batch update products — `create`: Products to create; `update`: Products to update; `update.id`: Product ID; `delete`: Product IDs to delete |
| `woocommerce products-variations-list` | `{productId: int, perPage?: int, page?: int}` | List product variations. Use perPage and page parameters for pagination (default: 10 items per page). — `productId`: Product ID; `perPage`: Number of items per page (default: 10, max: 100); `page`: Page number (default: 1) |
| `woocommerce products-categories-list` | `{perPage?: int, page?: int, search?: str, parent?: int, hideEmpty?: bool}` | List product categories. Use perPage and page parameters for pagination (default: 10 items per page). — `perPage`: Number of items per page (default: 10, max: 100); `page`: Page number (default: 1); `search`: Search term; `parent`: Parent category ID; `hideEmpty`: Hide empty categories |
| `woocommerce products-categories-create` | `{categoryData: {name: str, slug?: str, parent?: int, description?: str, display?: "default" \| "products" \| "subcategories" \| "both", image?: {src?: str, alt?: str}, menuOrder?: int}}` | Create a new product category — `categoryData.name`: Category name; `categoryData.slug`: Category slug; `categoryData.parent`: Parent category ID; `categoryData.description`: Category description; `categoryData.display`: Display type; `categoryData.image.src`: Image URL; `categoryData.image.alt`: Image alt text; `categoryData.menuOrder`: Menu order |
| `woocommerce products-tags-list` | `{perPage?: int, page?: int, search?: str, hideEmpty?: bool}` | List product tags. Use perPage and page parameters for pagination (default: 10 items per page). — `perPage`: Number of items per page (default: 10, max: 100); `page`: Page number (default: 1); `search`: Search term; `hideEmpty`: Hide empty tags |
| `woocommerce products-reviews-list` | `{productId?: int, perPage?: int, page?: int, status?: "all" \| "hold" \| "approved" \| "spam" \| "trash"}` | List product reviews. Use perPage and page parameters for pagination (default: 10 items per page). — `productId`: Product ID (optional); `perPage`: Number of items per page (default: 10, max: 100); `page`: Page number (default: 1); `status`: Review status |
| `woocommerce orders-list` | `{perPage?: int, page?: int, status?: list["pending" \| "processing" \| "on-hold" \| "completed" \| "cancelled" \| "refunded" \| "failed"], customer?: int, product?: int, dateAfter?: str, dateBefore?: str, orderby?: "date" \| "id" \| "include" \| "title" \| "slug", order?: "asc" \| "desc"}` | List orders with optional filters. IMPORTANT: Use perPage parameter to control how many results to return (default is 10, max is 100). Use page parameter for pagination. — `perPage`: Number of items to return per page (default: 10, max: 100). Always specify this to control result size.; `page`: Page number for pagination (default: 1). Use with perPage to navigate through results.; `status`: Order statuses; `customer`: Customer ID; `product`: Product ID; `dateAfter`: Orders after this date (ISO 8601); `dateBefore`: Orders before this date (ISO 8601); `orderby`: Order by field; `order`: Order direction |
| `woocommerce orders-get` | `{orderId: int}` | Get a specific order by ID — `orderId`: Order ID |
| `woocommerce orders-create` | `{orderData: {payment_method?: str, payment_method_title?: str, set_paid?: bool, billing?: dict, shipping?: dict, line_items?: list[{product_id?: int, quantity?: int}], shipping_lines?: list[dict]}}` | Create a new order — `orderData`: Order data; `orderData.payment_method`: Payment method ID; `orderData.payment_method_title`: Payment method title; `orderData.set_paid`: Define if the order is paid; `orderData.billing`: Billing address; `orderData.shipping`: Shipping address; `orderData.line_items`: Line items data; `orderData.line_items.product_id`: Product ID; `orderData.line_items.quantity`: Quantity; `orderData.shipping_lines`: Shipping lines data |
| `woocommerce orders-update` | `{orderId: int, orderData: dict}` | Update an order — `orderId`: Order ID; `orderData`: Order data to update |
| `woocommerce orders-delete` | `{orderId: int, force?: bool = false}` | Delete an order — `orderId`: Order ID; `force`: Force delete |
| `woocommerce orders-batch-update` | `{create?: list[dict], update?: list[{id?: int}], delete?: list[int]}` | Batch update orders — `create`: Orders to create; `update`: Orders to update; `update.id`: Order ID; `delete`: Order IDs to delete |
| `woocommerce orders-notes-create` | `{orderId: int, note: str, customerNote?: bool = false}` | Add a note to an order — `orderId`: Order ID; `note`: Note content; `customerNote`: Is customer note |
| `woocommerce orders-refunds-create` | `{orderId: int, amount?: str, reason?: str, refundPayment?: bool = false, lineItems?: list[{id?: int, refund_total?: number, refund_tax?: list[dict]}]}` | Create a refund for an order — `orderId`: Order ID; `amount`: Refund amount; `reason`: Refund reason; `refundPayment`: Refund payment; `lineItems`: Line items to refund; `lineItems.id`: Line item ID; `lineItems.refund_total`: Amount to refund; `lineItems.refund_tax`: Tax to refund |
| `woocommerce customers-list` | `{perPage?: int, page?: int, search?: str, email?: str, role?: "all" \| "customer" \| "administrator" \| "shop_manager", orderby?: "id" \| "include" \| "name" \| "registered_date", order?: "asc" \| "desc"}` | List customers with optional filters. IMPORTANT: Use perPage parameter to control how many results to return (default is 10, max is 100). Use page parameter for pagination. — `perPage`: Number of items to return per page (default: 10, max: 100). Always specify this to control result size.; `page`: Page number for pagination (default: 1). Use with perPage to navigate through results.; `search`: Search term; `email`: Customer email; `role`: Customer role; `orderby`: Order by field; `order`: Order direction |
| `woocommerce customers-get` | `{customerId: int}` | Get a specific customer by ID — `customerId`: Customer ID |
| `woocommerce customers-create` | `{customerData: {email?: str, first_name?: str, last_name?: str, username?: str, password?: str, billing?: dict, shipping?: dict, meta_data?: list[{key?: str, value?: str}]}}` | Create a new customer — `customerData`: Customer data; `customerData.email`: Customer email; `customerData.first_name`: First name; `customerData.last_name`: Last name; `customerData.username`: Username; `customerData.password`: Password; `customerData.billing`: Billing address; `customerData.shipping`: Shipping address; `customerData.meta_data`: Meta data |
| `woocommerce customers-update` | `{customerId: int, customerData: dict}` | Update a customer — `customerId`: Customer ID; `customerData`: Customer data to update |
| `woocommerce coupons-list` | `{perPage?: int, page?: int, search?: str, code?: str}` | List coupons with optional filters. IMPORTANT: Use perPage parameter to control how many results to return (default is 10, max is 100). Use page parameter for pagination. — `perPage`: Number of items to return per page (default: 10, max: 100). Always specify this to control result size.; `page`: Page number for pagination (default: 1). Use with perPage to navigate through results.; `search`: Search term; `code`: Coupon code |
| `woocommerce coupons-get` | `{couponId: int}` | Get a specific coupon by ID — `couponId`: Coupon ID |
| `woocommerce coupons-create` | `{couponData: {code: str, discount_type: "percent" \| "fixed_cart" \| "fixed_product", amount: str, date_expires?: str, individual_use?: bool, product_ids?: list[int], excluded_product_ids?: list[int], usage_limit?: int, usage_limit_per_user?: int, limit_usage_to_x_items?: int, free_shipping?: bool, exclude_sale_items?: bool, minimum_amount?: str, maximum_amount?: str}}` | Create a new coupon — `couponData`: Coupon data; `couponData.code`: Coupon code; `couponData.discount_type`: Discount type; `couponData.amount`: Discount amount; `couponData.date_expires`: Expiry date (ISO 8601); `couponData.individual_use`: Individual use only; `couponData.product_ids`: Product IDs; `couponData.excluded_product_ids`: Excluded product IDs; `couponData.usage_limit`: Usage limit per coupon; `couponData.usage_limit_per_user`: Usage limit per user; `couponData.limit_usage_to_x_items`: Limit usage to X items; `couponData.free_shipping`: Allow free shipping; `couponData.exclude_sale_items`: Exclude sale items; `couponData.minimum_amount`: Minimum spend; `couponData.maximum_amount`: Maximum spend |
| `woocommerce coupons-update` | `{couponId: int, couponData: dict}` | Update a coupon — `couponId`: Coupon ID; `couponData`: Coupon data to update |
| `woocommerce coupons-delete` | `{couponId: int, force?: bool = true}` | Delete a coupon — `couponId`: Coupon ID; `force`: Force delete |
| `woocommerce reports-sales` | `{period?: "week" \| "month" \| "last_month" \| "year", dateMin?: str, dateMax?: str}` | Get sales report — `period`: Report period; `dateMin`: Start date (YYYY-MM-DD); `dateMax`: End date (YYYY-MM-DD) |
| `woocommerce reports-top-sellers` | `{period?: "week" \| "month" \| "last_month" \| "year", dateMin?: str, dateMax?: str, perPage?: int, page?: int}` | Get top sellers report. Use perPage and page parameters to control pagination. — `period`: Report period; `dateMin`: Start date (YYYY-MM-DD); `dateMax`: End date (YYYY-MM-DD); `perPage`: Number of items per page (default: 10, max: 100); `page`: Page number (default: 1) |
| `woocommerce reports-customers` | `{period?: "week" \| "month" \| "last_month" \| "year", dateMin?: str, dateMax?: str}` | Get customers report — `period`: Report period; `dateMin`: Start date (YYYY-MM-DD); `dateMax`: End date (YYYY-MM-DD) |
| `woocommerce reports-orders` | `{period?: "week" \| "month" \| "last_month" \| "year", dateMin?: str, dateMax?: str}` | Get orders report — `period`: Report period; `dateMin`: Start date (YYYY-MM-DD); `dateMax`: End date (YYYY-MM-DD) |
| `woocommerce reports-products` | `{period?: "week" \| "month" \| "last_month" \| "year", dateMin?: str, dateMax?: str, perPage?: int, page?: int}` | Get products report. Use perPage and page parameters to control pagination. — `period`: Report period; `dateMin`: Start date (YYYY-MM-DD); `dateMax`: End date (YYYY-MM-DD); `perPage`: Number of items per page (default: 10, max: 100); `page`: Page number (default: 1) |
| `woocommerce reports-stock` | `{perPage?: int, page?: int}` | Get stock report. Use perPage and page parameters to control pagination. — `perPage`: Number of items per page (default: 10, max: 100); `page`: Page number (default: 1) |
| `woocommerce reports-low-stock` | `{perPage?: int, page?: int}` | Get low stock report. Use perPage and page parameters to control pagination. — `perPage`: Number of items per page (default: 10, max: 100); `page`: Page number (default: 1) |
| `woocommerce shipping-zones-list` | `{}` | List shipping zones |
| `woocommerce shipping-zones-get` | `{zoneId: int}` | Get a shipping zone — `zoneId`: Zone ID |
| `woocommerce shipping-zones-create` | `{name: str, order?: int}` | Create a shipping zone — `name`: Zone name; `order`: Zone order |
| `woocommerce shipping-zones-update` | `{zoneId: int, name?: str, order?: int}` | Update a shipping zone — `zoneId`: Zone ID; `name`: Zone name; `order`: Zone order |
| `woocommerce shipping-zone-methods-list` | `{zoneId: int}` | List methods for a shipping zone — `zoneId`: Zone ID |
| `woocommerce shipping-zone-methods-create` | `{zoneId: int, methodId: str, enabled?: bool = true, settings?: dict}` | Add a method to a shipping zone — `zoneId`: Zone ID; `methodId`: Method ID; `enabled`: Is enabled; `settings`: Method settings |
| `woocommerce tax-rates-list` | `{taxClass?: str, perPage?: int, page?: int}` | List tax rates. Use perPage and page parameters to control pagination. — `taxClass`: Tax class; `perPage`: Number of items per page (default: 10, max: 100); `page`: Page number (default: 1) |
| `woocommerce tax-rates-get` | `{rateId: int}` | Get a tax rate — `rateId`: Tax rate ID |
| `woocommerce tax-rates-create` | `{country: str, state?: str, rate: str, name?: str, priority?: int = 1, compound?: bool = false, shipping?: bool = true, class?: str = "standard"}` | Create a tax rate — `country`: Country code; `state`: State code; `rate`: Tax rate; `name`: Tax name; `priority`: Priority; `compound`: Is compound; `shipping`: Apply to shipping; `class`: Tax class |
| `woocommerce tax-classes-list` | `{}` | List tax classes |
| `woocommerce system-status` | `{}` | Get system status information |
| `woocommerce system-tools-list` | `{}` | List system tools |
| `woocommerce system-tools-run` | `{toolId: "clear_transients" \| "clear_expired_transients" \| "clear_orphaned_variations" \| "add_order_indexes" \| "recount_terms" \| "reset_roles" \| "clear_sessions" \| "clear_template_cache" \| "clear_system_status_theme_info_cache"}` | Run a system tool — `toolId`: Tool ID |
| `woocommerce settings-list` | `{}` | List settings groups |
| `woocommerce settings-get` | `{groupId: "general" \| "products" \| "tax" \| "shipping" \| "checkout" \| "account" \| "email" \| "integration" \| "advanced" \| "rest-api"}` | Get settings for a group — `groupId`: Settings group ID |
| `woocommerce payment-gateways-list` | `{}` | List payment gateways |
| `woocommerce payment-gateways-get` | `{gatewayId: str}` | Get a payment gateway — `gatewayId`: Gateway ID |
| `woocommerce payment-gateways-update` | `{gatewayId: str, enabled?: bool, title?: str, description?: str, settings?: dict}` | Update a payment gateway — `gatewayId`: Gateway ID; `enabled`: Is enabled; `title`: Gateway title; `description`: Gateway description; `settings`: Gateway settings |
| `woocommerce webhooks-list` | `{perPage?: int, page?: int, status?: "active" \| "paused" \| "disabled"}` | List webhooks. Use perPage and page parameters to control pagination. — `perPage`: Number of items per page (default: 10, max: 100); `page`: Page number (default: 1); `status`: Webhook status |
| `woocommerce webhooks-create` | `{name: str, topic: "coupon.created" \| "coupon.updated" \| "coupon.deleted" \| "customer.created" \| "customer.updated" \| "customer.deleted" \| "order.created" \| "order.updated" \| "order.deleted" \| "product.created" \| "product.updated" \| "product.deleted", delivery_url: str, status?: "active" \| "paused" \| "disabled" = "active", secret?: str}` | Create a webhook — `name`: Webhook name; `topic`: Webhook topic; `delivery_url`: Delivery URL; `status`: Webhook status; `secret`: Secret key |
## python3
Execute Python code directly under the agent workspace and return stdout
and stderr. Code can be pasted into a `.py` file and run with `python3`.
Python cannot launch subprocesses or make direct network requests. Run the
documented service commands directly in the shell. Use Python for local
file processing and generating JSON arguments.
| name | workspace-commands |
|---|
| description | The shell commands, task tools, and python3 interpreter available in this workspace. |
|---|
Available commands
Standard Unix commands, among them:
cat head tail ls find grep wc sort uniq cut tr sed awk
diff tee xargs jq unzip curl
with pipes, > redirection, $(...) substitution and $'...'.
The task CLIs below are registered with this shell rather than installed as files; do not inspect them with which, file or /usr/bin.
Google Drive and spreadsheet reads
Use ls and find under /gd to list folders and locate spreadsheets. Read .gsheet.json files with cat, jq, or Python to inspect spreadsheet IDs, tab names, cell values, formulas, and metadata. Filter or slice the JSON for ranges, summaries, and matching cells; read multiple files for queries across spreadsheets. See VFS.md for the JSON structure.
google-sheet
Use google-sheet <command> '<JSON arguments>'. Run google-sheet <command> --help to get more information.
| Command | Arguments | Description |
|---|
google-sheet get-sheet-data | {spreadsheet_id: str, sheet: str, range?: str = null, include_grid_data?: bool = false} | Get data from a specific sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Optional cell range in A1 notation (e.g., 'A1:C10'). If not provided, gets all data. include_grid_data: If True, includes cell formatting and other metadata in the response. Note: Setting this to True will significantly increase the response size and token usage when parsing the response, as it includes detailed cell formatting information. Default is False (returns values only, more efficient). Returns: Grid data structure with either full metadata or just values from Google Sheets API, depending on include_grid_data parameter |
google-sheet get-sheet-formulas | {spreadsheet_id: str, sheet: str, range?: str = null} | Get formulas from a specific sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Optional cell range in A1 notation (e.g., 'A1:C10'). If not provided, gets all formulas from the sheet. Returns: A 2D array of the sheet formulas. |
google-sheet update-cells | {spreadsheet_id: str, sheet: str, range: str, data: list[list]} | Update cells in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Cell range in A1 notation (e.g., 'A1:C10') data: 2D array of values to update Returns: Result of the update operation |
google-sheet batch-update-cells | {spreadsheet_id: str, sheet: str, ranges: dict} | Batch update multiple ranges in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet ranges: Dictionary mapping range strings to 2D arrays of values e.g., {'A1:B2': [[1, 2], [3, 4]], 'D1:E2': [['a', 'b'], ['c', 'd']]} Returns: Result of the batch update operation |
google-sheet add-rows | {spreadsheet_id: str, sheet: str, count: int, start_row?: int = null} | Add rows to a sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet count: Number of rows to add start_row: 0-based row index to start adding. If not provided, adds at the beginning. Returns: Result of the operation |
google-sheet add-columns | {spreadsheet_id: str, sheet: str, count: int, start_column?: int = null} | Add columns to a sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet count: Number of columns to add start_column: 0-based column index to start adding. If not provided, adds at the beginning. Returns: Result of the operation |
google-sheet list-sheets | {spreadsheet_id: str} | List all sheets in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) Returns: List of sheet names |
google-sheet copy-sheet | {src_spreadsheet: str, src_sheet: str, dst_spreadsheet: str, dst_sheet: str} | Copy a sheet from one spreadsheet to another. Args: src_spreadsheet: Source spreadsheet ID src_sheet: Source sheet name dst_spreadsheet: Destination spreadsheet ID dst_sheet: Destination sheet name Returns: Result of the operation |
google-sheet rename-sheet | {spreadsheet: str, sheet: str, new_name: str} | Rename a sheet in a Google Spreadsheet. Args: spreadsheet: Spreadsheet ID sheet: Current sheet name new_name: New sheet name Returns: Result of the operation |
google-sheet get-multiple-sheet-data | {queries: list[dict]} | Get data from multiple specific ranges in Google Spreadsheets. Args: queries: A list of dictionaries, each specifying a query. Each dictionary should have 'spreadsheet_id', 'sheet', and 'range' keys. Example: [{'spreadsheet_id': 'abc', 'sheet': 'Sheet1', 'range': 'A1:B5'}, {'spreadsheet_id': 'xyz', 'sheet': 'Data', 'range': 'C1:C10'}] Returns: A list of dictionaries, each containing the original query parameters and the fetched 'data' or an 'error'. |
google-sheet get-multiple-spreadsheet-summary | {spreadsheet_ids: list[str], rows_to_fetch?: int = 5} | Get a summary of multiple Google Spreadsheets, including sheet names, headers, and the first few rows of data for each sheet. Args: spreadsheet_ids: A list of spreadsheet IDs to summarize. rows_to_fetch: The number of rows (including header) to fetch for the summary (default: 5). Returns: A list of dictionaries, each representing a spreadsheet summary. Includes spreadsheet title, sheet summaries (title, headers, first rows), or an error. |
google-sheet create-spreadsheet | {title: str, folder_id?: str = null} | Create a new Google Spreadsheet. Args: title: The title of the new spreadsheet folder_id: Optional Google Drive folder ID where the spreadsheet should be created. If not provided, uses the configured default folder or creates in root. Returns: Information about the newly created spreadsheet including its ID |
google-sheet create-sheet | {spreadsheet_id: str, title: str} | Create a new sheet tab in an existing Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet title: The title for the new sheet Returns: Information about the newly created sheet |
google-sheet list-spreadsheets | {folder_id?: str = null} | List all spreadsheets in the specified Google Drive folder. If no folder is specified, uses the configured default folder or lists from 'My Drive'. Args: folder_id: Optional Google Drive folder ID to search in. If not provided, uses the configured default folder or searches 'My Drive'. Returns: List of spreadsheets with their ID and title |
google-sheet share-spreadsheet | {spreadsheet_id: str, recipients: list[dict], send_notification?: bool = true} | Share a Google Spreadsheet with multiple users via email, assigning specific roles. Args: spreadsheet_id: The ID of the spreadsheet to share. recipients: A list of dictionaries, each containing 'email_address' and 'role'. The role should be one of: 'reader', 'commenter', 'writer'. Example: [ {'email_address': 'user1@example.com', 'role': 'writer'}, {'email_address': 'user2@example.com', 'role': 'reader'} ] send_notification: Whether to send a notification email to the users. Defaults to True. Returns: A dictionary containing lists of 'successes' and 'failures'. Each item in the lists includes the email address and the outcome. |
google-sheet list-folders | {parent_folder_id?: str = null} | List all folders in the specified Google Drive folder. If no parent folder is specified, lists folders from 'My Drive' root. Args: parent_folder_id: Optional Google Drive folder ID to search within. If not provided, searches the root of 'My Drive'. Returns: List of folders with their ID, name, and parent information |
google-sheet search-spreadsheets | {query: str, max_results?: int = 20} | Search for spreadsheets in Google Drive by name or content. Args: query: Search query string. Searches in file name and content. Examples: "budget 2024", "sales report", "project tracker" max_results: Maximum number of results to return (default 20, max 100) Returns: List of matching spreadsheets with their ID, name, and metadata |
google-sheet find-in-spreadsheet | {spreadsheet_id: str, query: str, sheet?: str = null, case_sensitive?: bool = false, max_results?: int = 50} | Find cells containing a specific value in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) query: The text to search for in cell values sheet: Optional sheet name to search in. If not provided, searches all sheets. case_sensitive: Whether the search should be case-sensitive (default False) max_results: Maximum number of results to return (default 50) Returns: List of found cells with their location (sheet, cell in A1 notation) and value |
google-sheet batch-update | {spreadsheet_id: str, requests: list[dict]} | Execute a batch update on a Google Spreadsheet using the full batchUpdate endpoint. This provides access to all batchUpdate operations including adding sheets, updating properties, inserting/deleting dimensions, formatting, and more. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) requests: A list of request objects. Each request object can contain any valid batchUpdate operation. Common operations include: - addSheet: Add a new sheet - updateSheetProperties: Update sheet properties (title, grid properties, etc.) - insertDimension: Insert rows or columns - deleteDimension: Delete rows or columns - updateCells: Update cell values and formatting - updateBorders: Update cell borders - addConditionalFormatRule: Add conditional formatting - deleteConditionalFormatRule: Remove conditional formatting - updateDimensionProperties: Update row/column properties - and many more... Example requests: [ { "addSheet": { "properties": { "title": "New Sheet" } } }, { "updateSheetProperties": { "properties": { "sheetId": 0, "title": "Renamed Sheet" }, "fields": "title" } }, { "insertDimension": { "range": { "sheetId": 0, "dimension": "ROWS", "startIndex": 1, "endIndex": 3 } } } ] Returns: Result of the batch update operation, including replies for each request |
google-sheet add-chart | {spreadsheet_id: str, sheet: str, chart_type: str, data_range: str, title?: str = null, x_axis_label?: str = null, y_axis_label?: str = null, position_x?: int = 0, position_y?: int = 0, width?: int = 600, height?: int = 400} | Add a chart to a Google Spreadsheet. Creates a chart from the specified data range with customizable type, title, and positioning. The chart is added as a floating element on the sheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet containing the data chart_type: Type of chart to create. Supported types: - COLUMN: Vertical bar chart - BAR: Horizontal bar chart - LINE: Line chart - AREA: Area chart - PIE: Pie chart - SCATTER: Scatter plot - COMBO: Combination chart - HISTOGRAM: Histogram data_range: A1 notation range for chart data (e.g., 'A1:C10'). The first row is typically treated as headers. title: Optional title for the chart x_axis_label: Optional label for the X axis (bottom axis) y_axis_label: Optional label for the Y axis (left axis) position_x: Horizontal position offset in pixels from the top-left corner (default: 0) position_y: Vertical position offset in pixels from the top-left corner (default: 0) width: Width of the chart in pixels (default: 600) height: Height of the chart in pixels (default: 400) Returns: Result of the chart creation operation Examples: Create a column chart showing sales data: add_chart( spreadsheet_id="abc123", sheet="Sales", chart_type="COLUMN", data_range="A1:B13", title="Monthly Sales", x_axis_label="Month", y_axis_label="Revenue ($)" ) Create a pie chart for market share: add_chart( spreadsheet_id="abc123", sheet="Market", chart_type="PIE", data_range="A1:B5", title="Market Share by Product" ) |
woocommerce
Use woocommerce <command> '<JSON arguments>'. Run woocommerce <command> --help to get more information.
| Command | Arguments | Description |
|---|
woocommerce products-list | `{perPage?: int, page?: int, search?: str, status?: "publish" \ | "draft" \ | "private" \ | "pending", category?: str, tag?: str, sku?: str, featured?: bool, onSale?: bool, minPrice?: str, maxPrice?: str, stockStatus?: "instock" \ | "outofstock" \ | "onbackorder", orderby?: "date" \ | "id" \ | "include" \ | "title" \ | "slug" \ | "price" \ | "popularity" \ | "rating", order?: "asc" \ | "desc"}` | List products with optional filters. IMPORTANT: Use perPage parameter to control how many results to return (default is 10, max is 100). Use page parameter for pagination. — perPage: Number of items to return per page (default: 10, max: 100). Always specify this to control result size.; page: Page number for pagination (default: 1). Use with perPage to navigate through results.; search: Search term; status: Product status; category: Category ID; tag: Tag ID; sku: Product SKU; featured: Featured products only; onSale: On sale products only; minPrice: Minimum price; maxPrice: Maximum price; stockStatus: Stock status; orderby: Order by field; order: Order direction |
woocommerce products-get | {productId: int} | Get a specific product by ID — productId: Product ID |
woocommerce products-create | `{productData: {name?: str, type?: "simple" \ | "grouped" \ | "external" \ | "variable", status?: "publish" \ | "draft" \ | "private" \ | "pending", featured?: bool, catalog_visibility?: "visible" \ | "catalog" \ | "search" \ | "hidden", description?: str, short_description?: str, sku?: str, regular_price?: str, sale_price?: str, manage_stock?: bool, stock_quantity?: int, categories?: list[{id?: int}], images?: list[{src?: str, alt?: str}]}}` | Create a new product — productData: Product data; productData.name: Product name; productData.type: Product type; productData.status: Product status; productData.featured: Featured product; productData.catalog_visibility: Catalog visibility; productData.description: Product description; productData.short_description: Product short description; productData.sku: Product SKU; productData.regular_price: Regular price; productData.sale_price: Sale price; productData.manage_stock: Manage stock; productData.stock_quantity: Stock quantity; productData.categories: Product categories; productData.categories.id: Category ID; productData.images: Product images; productData.images.src: Image URL; productData.images.alt: Image alt text |
woocommerce products-update | {productId: int, productData: dict} | Update a product — productId: Product ID; productData: Product data to update |
woocommerce products-delete | {productId: int, force?: bool = false} | Delete a product — productId: Product ID; force: Force delete |
woocommerce products-batch-update | {create?: list[dict], update?: list[{id?: int}], delete?: list[int]} | Batch update products — create: Products to create; update: Products to update; update.id: Product ID; delete: Product IDs to delete |
woocommerce products-variations-list | {productId: int, perPage?: int, page?: int} | List product variations. Use perPage and page parameters for pagination (default: 10 items per page). — productId: Product ID; perPage: Number of items per page (default: 10, max: 100); page: Page number (default: 1) |
woocommerce products-categories-list | {perPage?: int, page?: int, search?: str, parent?: int, hideEmpty?: bool} | List product categories. Use perPage and page parameters for pagination (default: 10 items per page). — perPage: Number of items per page (default: 10, max: 100); page: Page number (default: 1); search: Search term; parent: Parent category ID; hideEmpty: Hide empty categories |
woocommerce products-categories-create | `{categoryData: {name: str, slug?: str, parent?: int, description?: str, display?: "default" \ | "products" \ | "subcategories" \ | "both", image?: {src?: str, alt?: str}, menuOrder?: int}}` | Create a new product category — categoryData.name: Category name; categoryData.slug: Category slug; categoryData.parent: Parent category ID; categoryData.description: Category description; categoryData.display: Display type; categoryData.image.src: Image URL; categoryData.image.alt: Image alt text; categoryData.menuOrder: Menu order |
woocommerce products-tags-list | {perPage?: int, page?: int, search?: str, hideEmpty?: bool} | List product tags. Use perPage and page parameters for pagination (default: 10 items per page). — perPage: Number of items per page (default: 10, max: 100); page: Page number (default: 1); search: Search term; hideEmpty: Hide empty tags |
woocommerce products-reviews-list | `{productId?: int, perPage?: int, page?: int, status?: "all" \ | "hold" \ | "approved" \ | "spam" \ | "trash"}` | List product reviews. Use perPage and page parameters for pagination (default: 10 items per page). — productId: Product ID (optional); perPage: Number of items per page (default: 10, max: 100); page: Page number (default: 1); status: Review status |
woocommerce orders-list | `{perPage?: int, page?: int, status?: list["pending" \ | "processing" \ | "on-hold" \ | "completed" \ | "cancelled" \ | "refunded" \ | "failed"], customer?: int, product?: int, dateAfter?: str, dateBefore?: str, orderby?: "date" \ | "id" \ | "include" \ | "title" \ | "slug", order?: "asc" \ | "desc"}` | List orders with optional filters. IMPORTANT: Use perPage parameter to control how many results to return (default is 10, max is 100). Use page parameter for pagination. — perPage: Number of items to return per page (default: 10, max: 100). Always specify this to control result size.; page: Page number for pagination (default: 1). Use with perPage to navigate through results.; status: Order statuses; customer: Customer ID; product: Product ID; dateAfter: Orders after this date (ISO 8601); dateBefore: Orders before this date (ISO 8601); orderby: Order by field; order: Order direction |
woocommerce orders-get | {orderId: int} | Get a specific order by ID — orderId: Order ID |
woocommerce orders-create | {orderData: {payment_method?: str, payment_method_title?: str, set_paid?: bool, billing?: dict, shipping?: dict, line_items?: list[{product_id?: int, quantity?: int}], shipping_lines?: list[dict]}} | Create a new order — orderData: Order data; orderData.payment_method: Payment method ID; orderData.payment_method_title: Payment method title; orderData.set_paid: Define if the order is paid; orderData.billing: Billing address; orderData.shipping: Shipping address; orderData.line_items: Line items data; orderData.line_items.product_id: Product ID; orderData.line_items.quantity: Quantity; orderData.shipping_lines: Shipping lines data |
woocommerce orders-update | {orderId: int, orderData: dict} | Update an order — orderId: Order ID; orderData: Order data to update |
woocommerce orders-delete | {orderId: int, force?: bool = false} | Delete an order — orderId: Order ID; force: Force delete |
woocommerce orders-batch-update | {create?: list[dict], update?: list[{id?: int}], delete?: list[int]} | Batch update orders — create: Orders to create; update: Orders to update; update.id: Order ID; delete: Order IDs to delete |
woocommerce orders-notes-create | {orderId: int, note: str, customerNote?: bool = false} | Add a note to an order — orderId: Order ID; note: Note content; customerNote: Is customer note |
woocommerce orders-refunds-create | {orderId: int, amount?: str, reason?: str, refundPayment?: bool = false, lineItems?: list[{id?: int, refund_total?: number, refund_tax?: list[dict]}]} | Create a refund for an order — orderId: Order ID; amount: Refund amount; reason: Refund reason; refundPayment: Refund payment; lineItems: Line items to refund; lineItems.id: Line item ID; lineItems.refund_total: Amount to refund; lineItems.refund_tax: Tax to refund |
woocommerce customers-list | `{perPage?: int, page?: int, search?: str, email?: str, role?: "all" \ | "customer" \ | "administrator" \ | "shop_manager", orderby?: "id" \ | "include" \ | "name" \ | "registered_date", order?: "asc" \ | "desc"}` | List customers with optional filters. IMPORTANT: Use perPage parameter to control how many results to return (default is 10, max is 100). Use page parameter for pagination. — perPage: Number of items to return per page (default: 10, max: 100). Always specify this to control result size.; page: Page number for pagination (default: 1). Use with perPage to navigate through results.; search: Search term; email: Customer email; role: Customer role; orderby: Order by field; order: Order direction |
woocommerce customers-get | {customerId: int} | Get a specific customer by ID — customerId: Customer ID |
woocommerce customers-create | {customerData: {email?: str, first_name?: str, last_name?: str, username?: str, password?: str, billing?: dict, shipping?: dict, meta_data?: list[{key?: str, value?: str}]}} | Create a new customer — customerData: Customer data; customerData.email: Customer email; customerData.first_name: First name; customerData.last_name: Last name; customerData.username: Username; customerData.password: Password; customerData.billing: Billing address; customerData.shipping: Shipping address; customerData.meta_data: Meta data |
woocommerce customers-update | {customerId: int, customerData: dict} | Update a customer — customerId: Customer ID; customerData: Customer data to update |
woocommerce coupons-list | {perPage?: int, page?: int, search?: str, code?: str} | List coupons with optional filters. IMPORTANT: Use perPage parameter to control how many results to return (default is 10, max is 100). Use page parameter for pagination. — perPage: Number of items to return per page (default: 10, max: 100). Always specify this to control result size.; page: Page number for pagination (default: 1). Use with perPage to navigate through results.; search: Search term; code: Coupon code |
woocommerce coupons-get | {couponId: int} | Get a specific coupon by ID — couponId: Coupon ID |
woocommerce coupons-create | `{couponData: {code: str, discount_type: "percent" \ | "fixed_cart" \ | "fixed_product", amount: str, date_expires?: str, individual_use?: bool, product_ids?: list[int], excluded_product_ids?: list[int], usage_limit?: int, usage_limit_per_user?: int, limit_usage_to_x_items?: int, free_shipping?: bool, exclude_sale_items?: bool, minimum_amount?: str, maximum_amount?: str}}` | Create a new coupon — couponData: Coupon data; couponData.code: Coupon code; couponData.discount_type: Discount type; couponData.amount: Discount amount; couponData.date_expires: Expiry date (ISO 8601); couponData.individual_use: Individual use only; couponData.product_ids: Product IDs; couponData.excluded_product_ids: Excluded product IDs; couponData.usage_limit: Usage limit per coupon; couponData.usage_limit_per_user: Usage limit per user; couponData.limit_usage_to_x_items: Limit usage to X items; couponData.free_shipping: Allow free shipping; couponData.exclude_sale_items: Exclude sale items; couponData.minimum_amount: Minimum spend; couponData.maximum_amount: Maximum spend |
woocommerce coupons-update | {couponId: int, couponData: dict} | Update a coupon — couponId: Coupon ID; couponData: Coupon data to update |
woocommerce coupons-delete | {couponId: int, force?: bool = true} | Delete a coupon — couponId: Coupon ID; force: Force delete |
woocommerce reports-sales | `{period?: "week" \ | "month" \ | "last_month" \ | "year", dateMin?: str, dateMax?: str}` | Get sales report — period: Report period; dateMin: Start date (YYYY-MM-DD); dateMax: End date (YYYY-MM-DD) |
woocommerce reports-top-sellers | `{period?: "week" \ | "month" \ | "last_month" \ | "year", dateMin?: str, dateMax?: str, perPage?: int, page?: int}` | Get top sellers report. Use perPage and page parameters to control pagination. — period: Report period; dateMin: Start date (YYYY-MM-DD); dateMax: End date (YYYY-MM-DD); perPage: Number of items per page (default: 10, max: 100); page: Page number (default: 1) |
woocommerce reports-customers | `{period?: "week" \ | "month" \ | "last_month" \ | "year", dateMin?: str, dateMax?: str}` | Get customers report — period: Report period; dateMin: Start date (YYYY-MM-DD); dateMax: End date (YYYY-MM-DD) |
woocommerce reports-orders | `{period?: "week" \ | "month" \ | "last_month" \ | "year", dateMin?: str, dateMax?: str}` | Get orders report — period: Report period; dateMin: Start date (YYYY-MM-DD); dateMax: End date (YYYY-MM-DD) |
woocommerce reports-products | `{period?: "week" \ | "month" \ | "last_month" \ | "year", dateMin?: str, dateMax?: str, perPage?: int, page?: int}` | Get products report. Use perPage and page parameters to control pagination. — period: Report period; dateMin: Start date (YYYY-MM-DD); dateMax: End date (YYYY-MM-DD); perPage: Number of items per page (default: 10, max: 100); page: Page number (default: 1) |
woocommerce reports-stock | {perPage?: int, page?: int} | Get stock report. Use perPage and page parameters to control pagination. — perPage: Number of items per page (default: 10, max: 100); page: Page number (default: 1) |
woocommerce reports-low-stock | {perPage?: int, page?: int} | Get low stock report. Use perPage and page parameters to control pagination. — perPage: Number of items per page (default: 10, max: 100); page: Page number (default: 1) |
woocommerce shipping-zones-list | {} | List shipping zones |
woocommerce shipping-zones-get | {zoneId: int} | Get a shipping zone — zoneId: Zone ID |
woocommerce shipping-zones-create | {name: str, order?: int} | Create a shipping zone — name: Zone name; order: Zone order |
woocommerce shipping-zones-update | {zoneId: int, name?: str, order?: int} | Update a shipping zone — zoneId: Zone ID; name: Zone name; order: Zone order |
woocommerce shipping-zone-methods-list | {zoneId: int} | List methods for a shipping zone — zoneId: Zone ID |
woocommerce shipping-zone-methods-create | {zoneId: int, methodId: str, enabled?: bool = true, settings?: dict} | Add a method to a shipping zone — zoneId: Zone ID; methodId: Method ID; enabled: Is enabled; settings: Method settings |
woocommerce tax-rates-list | {taxClass?: str, perPage?: int, page?: int} | List tax rates. Use perPage and page parameters to control pagination. — taxClass: Tax class; perPage: Number of items per page (default: 10, max: 100); page: Page number (default: 1) |
woocommerce tax-rates-get | {rateId: int} | Get a tax rate — rateId: Tax rate ID |
woocommerce tax-rates-create | {country: str, state?: str, rate: str, name?: str, priority?: int = 1, compound?: bool = false, shipping?: bool = true, class?: str = "standard"} | Create a tax rate — country: Country code; state: State code; rate: Tax rate; name: Tax name; priority: Priority; compound: Is compound; shipping: Apply to shipping; class: Tax class |
woocommerce tax-classes-list | {} | List tax classes |
woocommerce system-status | {} | Get system status information |
woocommerce system-tools-list | {} | List system tools |
woocommerce system-tools-run | `{toolId: "clear_transients" \ | "clear_expired_transients" \ | "clear_orphaned_variations" \ | "add_order_indexes" \ | "recount_terms" \ | "reset_roles" \ | "clear_sessions" \ | "clear_template_cache" \ | "clear_system_status_theme_info_cache"}` | Run a system tool — toolId: Tool ID |
woocommerce settings-list | {} | List settings groups |
woocommerce settings-get | `{groupId: "general" \ | "products" \ | "tax" \ | "shipping" \ | "checkout" \ | "account" \ | "email" \ | "integration" \ | "advanced" \ | "rest-api"}` | Get settings for a group — groupId: Settings group ID |
woocommerce payment-gateways-list | {} | List payment gateways |
woocommerce payment-gateways-get | {gatewayId: str} | Get a payment gateway — gatewayId: Gateway ID |
woocommerce payment-gateways-update | {gatewayId: str, enabled?: bool, title?: str, description?: str, settings?: dict} | Update a payment gateway — gatewayId: Gateway ID; enabled: Is enabled; title: Gateway title; description: Gateway description; settings: Gateway settings |
woocommerce webhooks-list | `{perPage?: int, page?: int, status?: "active" \ | "paused" \ | "disabled"}` | List webhooks. Use perPage and page parameters to control pagination. — perPage: Number of items per page (default: 10, max: 100); page: Page number (default: 1); status: Webhook status |
woocommerce webhooks-create | `{name: str, topic: "coupon.created" \ | "coupon.updated" \ | "coupon.deleted" \ | "customer.created" \ | "customer.updated" \ | "customer.deleted" \ | "order.created" \ | "order.updated" \ | "order.deleted" \ | "product.created" \ | "product.updated" \ | "product.deleted", delivery_url: str, status?: "active" \ | "paused" \ | "disabled" = "active", secret?: str}` | Create a webhook — name: Webhook name; topic: Webhook topic; delivery_url: Delivery URL; status: Webhook status; secret: Secret key |
python3
Execute Python code directly under the agent workspace and return stdout and stderr. Code can be pasted into a .py file and run with python3.
Python cannot launch subprocesses or make direct network requests. Run the documented service commands directly in the shell. Use Python for local file processing and generating JSON arguments.