devtune_save_agent_picks_job
Save a custom Agent Picks job as confirmed, with the setup that tests it. A project can have several custom jobs. Without setup, this updates the custom job with the same job line (ignoring case and surrounding spaces), or adds a setup for a new job; a job without a source category never matches a copy by its line. With setup, it updates that setup. A job with a source_category_id is the project's copy of that category: without setup the save updates that copy whatever the job line, or adds one, so a project holds one copy per category; with setup, a source another setup's copy holds is refused as category_in_use, and changing or clearing the source of the setup's own job as category_fixed. A copy may hold its copied tools plus seven and keep the name it was copied with; a job without a source holds seven tools and a line of at least 8 characters. The body: job (the line), source_category_id (the public category it started from, or null), requests {add, recommend, hosted or null}, building_blocks and tools (tool_key, display_name, brand_domain, signals and draft_id from devtune_draft_agent_picks_tool), own_tool_key, competitor_tool_keys (among tools), environment_ids and agent_models. devtune_get_agent_picks_catalogue lists the valid source_category_id, environment_ids and agent_models. building_blocks and signals use the shapes devtune_draft_agent_picks_job, devtune_draft_agent_picks_tool and the summary's job return. A tool's signals.yieldsTo lists the job's other tools that run inside it, or stand in for part of it: when a run uses both, it counts as the listed tool (GitHub Actions yieldsTo Depot, so a workflow on a Depot runner counts as Depot). Without it such a run is ambiguous. A yieldsTo loop of any length is refused. signals.dismissedYieldsTo lists suggestions of this tool yielding that were dismissed or removed, kept so they aren't suggested again until either tool is redrafted; it never affects classification. Starts no test. Refusals carry a reason: invalid_job, agent_not_in_plan and forbidden. Requires actions.write and Agent Picks. The OAuth member, or the member who created the API key, needs project management rights.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"job": "<job>",
"requests": "<requests>",
"building_blocks": "<building_blocks>",
"tools": "<tools>",
"own_tool_key": "<own_tool_key>",
"environment_ids": "<environment_ids>",
"agent_models": "<agent_models>"
},
"name": "devtune_save_agent_picks_job"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| job | Yes | ||
| setup | No | The Agent Picks setup to use: its id or its category slug. Optional while the project has one setup. With several, omitting it is refused as agent_picks_setup_required, and a setup the project does not have as agent_picks_setup_not_found; both list the project setups in details.setups (id, category_slug, category_name). The response echoes the setup used as setup {id, category_slug}. | |
| tools | Yes | ||
| requests | Yes | ||
| agent_models | Yes | ||
| own_tool_key | Yes | ||
| building_blocks | Yes | ||
| environment_ids | Yes | ||
| source_category_id | No | ||
| competitor_tool_keys | No |