curl --request PATCH \
--url https://api.egp.scale.com/v5/agent_configs/{agent_config_id} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"description": "<string>",
"system_prompt": "<string>",
"allowed_tools": [],
"model": "<string>",
"persistent_workspace": true,
"repos": [
{
"url": "<string>",
"path": "<string>",
"depth": 2
}
]
}
'import requests
url = "https://api.egp.scale.com/v5/agent_configs/{agent_config_id}"
payload = {
"name": "<string>",
"description": "<string>",
"system_prompt": "<string>",
"allowed_tools": [],
"model": "<string>",
"persistent_workspace": True,
"repos": [
{
"url": "<string>",
"path": "<string>",
"depth": 2
}
]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
system_prompt: '<string>',
allowed_tools: [],
model: '<string>',
persistent_workspace: true,
repos: [{url: '<string>', path: '<string>', depth: 2}]
})
};
fetch('https://api.egp.scale.com/v5/agent_configs/{agent_config_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.egp.scale.com/v5/agent_configs/{agent_config_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'system_prompt' => '<string>',
'allowed_tools' => [
],
'model' => '<string>',
'persistent_workspace' => true,
'repos' => [
[
'url' => '<string>',
'path' => '<string>',
'depth' => 2
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.egp.scale.com/v5/agent_configs/{agent_config_id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"system_prompt\": \"<string>\",\n \"allowed_tools\": [],\n \"model\": \"<string>\",\n \"persistent_workspace\": true,\n \"repos\": [\n {\n \"url\": \"<string>\",\n \"path\": \"<string>\",\n \"depth\": 2\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.egp.scale.com/v5/agent_configs/{agent_config_id}")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"system_prompt\": \"<string>\",\n \"allowed_tools\": [],\n \"model\": \"<string>\",\n \"persistent_workspace\": true,\n \"repos\": [\n {\n \"url\": \"<string>\",\n \"path\": \"<string>\",\n \"depth\": 2\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.egp.scale.com/v5/agent_configs/{agent_config_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"system_prompt\": \"<string>\",\n \"allowed_tools\": [],\n \"model\": \"<string>\",\n \"persistent_workspace\": true,\n \"repos\": [\n {\n \"url\": \"<string>\",\n \"path\": \"<string>\",\n \"depth\": 2\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"system_prompt": "<string>",
"harness": "<string>",
"allowed_tools": [
"<string>"
],
"model": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"object": "agent_config",
"description": "<string>",
"persistent_workspace": false,
"repos": [
{
"url": "<string>",
"path": "<string>",
"depth": 2
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Update Agent Config
Partially update a stored agent config; only fields present in the request body are changed.
persistent_workspace and repos are both patchable — an explicit null on
repos clears the override back to the deployment default, while the
always-present fields (name, system_prompt, harness, allowed_tools, model, and
persistent_workspace) reject an explicit null. Because persistent_workspace
and repos are read when a task is created and are fixed for a task’s life,
changing them affects only tasks created afterward, not one already running. The
optional task_id query parameter opts into a live-config side effect: after
the row is persisted, the changed pass-through fields (system_prompt, model,
harness, and allowed_tools split into harness tools versus MCP servers) are
shallow-merged into that running task’s params on Agentex in a background task so
the worker picks them up on its next turn; persistent_workspace and repos
are intentionally not forwarded to a running task. That side effect runs after
the response is sent, is best-effort, and no-ops if the task does not exist or the
caller does not own it. A user caller can only update a config they created unless
fine-grained access control grants access.
curl --request PATCH \
--url https://api.egp.scale.com/v5/agent_configs/{agent_config_id} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"description": "<string>",
"system_prompt": "<string>",
"allowed_tools": [],
"model": "<string>",
"persistent_workspace": true,
"repos": [
{
"url": "<string>",
"path": "<string>",
"depth": 2
}
]
}
'import requests
url = "https://api.egp.scale.com/v5/agent_configs/{agent_config_id}"
payload = {
"name": "<string>",
"description": "<string>",
"system_prompt": "<string>",
"allowed_tools": [],
"model": "<string>",
"persistent_workspace": True,
"repos": [
{
"url": "<string>",
"path": "<string>",
"depth": 2
}
]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
system_prompt: '<string>',
allowed_tools: [],
model: '<string>',
persistent_workspace: true,
repos: [{url: '<string>', path: '<string>', depth: 2}]
})
};
fetch('https://api.egp.scale.com/v5/agent_configs/{agent_config_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.egp.scale.com/v5/agent_configs/{agent_config_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'system_prompt' => '<string>',
'allowed_tools' => [
],
'model' => '<string>',
'persistent_workspace' => true,
'repos' => [
[
'url' => '<string>',
'path' => '<string>',
'depth' => 2
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.egp.scale.com/v5/agent_configs/{agent_config_id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"system_prompt\": \"<string>\",\n \"allowed_tools\": [],\n \"model\": \"<string>\",\n \"persistent_workspace\": true,\n \"repos\": [\n {\n \"url\": \"<string>\",\n \"path\": \"<string>\",\n \"depth\": 2\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.egp.scale.com/v5/agent_configs/{agent_config_id}")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"system_prompt\": \"<string>\",\n \"allowed_tools\": [],\n \"model\": \"<string>\",\n \"persistent_workspace\": true,\n \"repos\": [\n {\n \"url\": \"<string>\",\n \"path\": \"<string>\",\n \"depth\": 2\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.egp.scale.com/v5/agent_configs/{agent_config_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"system_prompt\": \"<string>\",\n \"allowed_tools\": [],\n \"model\": \"<string>\",\n \"persistent_workspace\": true,\n \"repos\": [\n {\n \"url\": \"<string>\",\n \"path\": \"<string>\",\n \"depth\": 2\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"system_prompt": "<string>",
"harness": "<string>",
"allowed_tools": [
"<string>"
],
"model": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"object": "agent_config",
"description": "<string>",
"persistent_workspace": false,
"repos": [
{
"url": "<string>",
"path": "<string>",
"depth": 2
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Headers
Path Parameters
Query Parameters
If set, after persisting the patch we shallow-merge the changed fields into this task's params column on Agentex so the worker picks up the new values on its next turn. Caller-provided context — Agentex enforces task ownership via its own auth, so the side-effect no-ops if the caller doesn't own the task.
Body
1 - 25520001 - 100000Supported agent harness strategies.
Mirrors PROVIDERS in golden-agent's project/harness/activity.py.
claude-code, codex, litellm Tools an agent config may be granted.
Granting an MCP server name (Slack, Linear, etc.) authorizes every tool exposed by that server, scoped via the agent's credentials.
Read, Write, Edit, Bash, Glob, Grep, List, WebFetch, WebSearch, Task, TodoWrite, NotebookEdit, ExitPlanMode, Slack, Linear, GitHub, Confluence, Notion, Datadog, PagerDuty, Salesforce, Figma, Granola, Jira, Gmail, GoogleCalendar, GoogleDrive, GoogleDocs, GoogleSheets, GoogleSlides, Snowflake, Redash, Tableau, Metabase, Gong, ZoomInfo, Clay 1 - 255Show child attributes
Show child attributes
Response
Successful Response
"agent_config"Show child attributes
Show child attributes

