---
title: "Update an agent"
method: PUT
path: "/v1/agents/{id}"
tags: ["Agents"]
---

# Update an agent

`PUT /v1/agents/{id}`

## Request

- Base URL: `https://docs.grepr.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://docs.grepr.ai/v1/agents/{id}`
- Auth: one of:
  - API key in header `GREPR-API-KEY`
  - OpenID Connect (`https://grepr-prod.us.auth0.com/.well-known/openid-configuration`)

Updates an agent. The version must match the version the client most recently observed, else a 409 Conflict is returned.

## Path parameters

- `id` string, required

## Request body

- AgentConfigUpdate
  - `agentMaxTokens` integer
  - `automaticSignalMaxQueueAgeMinutes` integer
  - `changeApprovalMode` 'REQUIRE_APPROVAL' | 'AUTO_APPLY', required
  - `concurrencyLimitPolicy` 'QUEUE' | 'DISCARD'
  - `description` string, required: What the agent handles, shown to other agents; required, like worksOnIssues, and empty for none.
  - `enabledMcpIntegrations` AgentMcpIntegrations[], required
    - `allowedTools` string[]
    - `integrationId` string, required
  - `enabledSkills` string[], required
  - `enabledTools` string[], required
  - `issueHandoffMode` 'REQUIRE_TRIAGE' | 'ALLOW_READY', required: Whether the agent may put issues in Ready; required, like worksOnIssues.
  - `issuePickup` AgentIssuePickup, required: Whether an agent picks up Ready issues on its own, and which: the board's own filters, applied to Ready issues nobody is working on. The server checks the filters' limits and teams when the agent is saved.
    - `enabled` boolean: Whether the dispatcher starts the agent on Ready issues; it also needs Works on issues.
    - `entities` object: Issues with every one of these entity keys, each with any of its values, as the issue search's entity filter; null or empty for any.
    - `labels` string[]: Issues carrying every one of these labels; null or empty for any.
    - `maxRuns` integer: Pickup starts no run while the agent has this many runs on issues, queued or running, handed or picked up; people's handoffs aren't held to it, and pickups use the agent's run slots. Null for 1. At most the agent's concurrency limit, and below it when the agent discards work at its limit, so a slot stays free for alerts and handoffs.
    - `priority` string: `P0` to `P3`: issues of this priority or more urgent; null for any.
    - `teamIds` string[]: Issues on any of these teams; null or empty for any the agent can reach.
  - `maxConcurrentInvestigations` integer
  - `maxTokens` integer
  - `maxTurns` integer
  - `memoryConfiguration` AgentMemoryConfiguration
    - `digest` AgentMemoryHistoryDigest
      - `enabled` boolean
      - `maxItems` integer
      - `windowDays` integer
    - `embeddingIntegrationId` string
    - `embeddingModel` string
    - `enabled` boolean
    - `policy` AgentMemoryPolicy
      - `guidance` string
      - `maxSearchesPerInvestigation` integer
      - `recordPolicy` 'ALWAYS' | 'NON_BENIGN_ONLY' | 'REUSABLE_ONLY'
    - `searchTool` boolean: Ignored: every agent can search memories.
    - `signalTagMappings` object
    - `vectorIndexIntegrationId` string
  - `modelConfiguration` ModelConfiguration, required
    - `integrationId` string
    - `maxOutputTokens` integer
    - `modelName` string
    - `provider` 'ANTHROPIC' | 'GEMINI' | 'LITELLM' | 'OPENAI'
  - `name` string, required
  - `serviceAccountId` string, required
  - `systemPrompt` string, required
  - `version` integer
  - `worksOnIssues` boolean, required: Whether the agent files and works on issues; required, since an update replaces the agent and an omitted switch would turn issue work off unnoticed.

## Response `200`

Agent updated successfully

- AgentConfig
  - `createdAt` string, date-time, required
  - `id` string, required
  - `name` string, required
  - `organizationId` string, required
  - `payload` AgentConfigPayload, required
    - `agentMaxTokens` integer
    - `automaticSignalMaxQueueAgeMinutes` integer
    - `changeApprovalMode` 'REQUIRE_APPROVAL' | 'AUTO_APPLY', required
    - `concurrencyLimitPolicy` 'QUEUE' | 'DISCARD'
    - `description` string: What the agent handles, shown to other agents when they list the agents; null for none.
    - `enabledMcpIntegrations` AgentMcpIntegrations[], required
      - `allowedTools` string[]
      - `integrationId` string, required
    - `enabledSkills` string[], required
    - `enabledTools` string[], required
    - `issueHandoffMode` 'REQUIRE_TRIAGE' | 'ALLOW_READY': Whether the agent may put issues in Ready; null falls back to REQUIRE_TRIAGE.
    - `issuePickup` AgentIssuePickup: Whether an agent picks up Ready issues on its own, and which: the board's own filters, applied to Ready issues nobody is working on. The server checks the filters' limits and teams when the agent is saved.
      - `enabled` boolean: Whether the dispatcher starts the agent on Ready issues; it also needs Works on issues.
      - `entities` object: Issues with every one of these entity keys, each with any of its values, as the issue search's entity filter; null or empty for any.
      - `labels` string[]: Issues carrying every one of these labels; null or empty for any.
      - `maxRuns` integer: Pickup starts no run while the agent has this many runs on issues, queued or running, handed or picked up; people's handoffs aren't held to it, and pickups use the agent's run slots. Null for 1. At most the agent's concurrency limit, and below it when the agent discards work at its limit, so a slot stays free for alerts and handoffs.
      - `priority` string: `P0` to `P3`: issues of this priority or more urgent; null for any.
      - `teamIds` string[]: Issues on any of these teams; null or empty for any the agent can reach.
    - `maxConcurrentInvestigations` integer
    - `maxTokens` integer
    - `maxTurns` integer
    - `memoryConfiguration` AgentMemoryConfiguration
      - `digest` AgentMemoryHistoryDigest
        - `enabled` boolean
        - `maxItems` integer
        - `windowDays` integer
      - `embeddingIntegrationId` string
      - `embeddingModel` string
      - `enabled` boolean
      - `policy` AgentMemoryPolicy
        - `guidance` string
        - `maxSearchesPerInvestigation` integer
        - `recordPolicy` 'ALWAYS' | 'NON_BENIGN_ONLY' | 'REUSABLE_ONLY'
      - `searchTool` boolean: Ignored: every agent can search memories.
      - `signalTagMappings` object
      - `vectorIndexIntegrationId` string
    - `modelConfiguration` ModelConfiguration, required
      - `integrationId` string
      - `maxOutputTokens` integer
      - `modelName` string
      - `provider` 'ANTHROPIC' | 'GEMINI' | 'LITELLM' | 'OPENAI'
    - `serviceAccountId` string, required
    - `systemPrompt` string, required
    - `worksOnIssues` boolean: Whether the agent files and works on issues; every agent reads them.
  - `state` 'ACTIVE' | 'PAUSED' | 'DELETED'
  - `updatedAt` string, date-time, required
  - `version` integer

## Other responses

- `400`: A referenced model or MCP integration does not exist
- `401`: Unauthorized
- `404`: Agent not found
- `409`: Agent was modified concurrently

---

[API](https://skmtc.dev/grepr/apis/grepr-api.md) - [All operations](https://skmtc.dev/grepr/apis/grepr-api/llms.txt) - [OpenAPI document](https://skmtc.dev/grepr/apis/grepr-api/revisions/2a5ce03a0bf0?raw)
