> ## Documentation Index
> Fetch the complete documentation index at: https://docs.murmur.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Queue a follow-up

> QueueAdd sends a follow-up message to a running agent. Returns NotFound if the agent is not running.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/agent/queue
openapi: 3.0.0
info:
  title: Murmur REST API
  description: >-
    PRE-ALPHA: INTERFACE SUBJECT TO CHANGE WITHOUT NOTICE.


    The murmur REST API lets you spawn agents, track their progress, manage
    their task lists, and read and write catalog resources from any HTTP client.
  version: v1
servers:
  - url: https://api.murmur.dev
security:
  - ApiKey: []
tags:
  - name: MurmurService
paths:
  /v1/agent/queue:
    post:
      tags:
        - MurmurService
      summary: Queue a follow-up
      description: >-
        QueueAdd sends a follow-up message to a running agent. Returns NotFound
        if the agent is not running.
      operationId: MurmurService_QueueAdd
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/v1QueueAddRequest'
        required: true
      responses:
        '200':
          description: A successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1QueueAddResponse'
        default:
          description: An unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/googleRpcStatus'
components:
  schemas:
    v1QueueAddRequest:
      type: object
      properties:
        agentId:
          $ref: '#/components/schemas/v1AgentId'
        description:
          type: string
          title: follow-up message
        tasks:
          type: array
          items:
            $ref: '#/components/schemas/v1Task'
          title: checklist items to add
        agent:
          type: string
          title: agent persona override
        followUpId:
          type: string
          description: >-
            Optional client-generated ID for this follow-up. Use it to correlate
            the follow-up in status and timeline responses.
        outputSchema:
          type: string
          description: >-
            Optional JSON Schema for this follow-up's structured output. When
            set,

            it replaces the agent's active output schema for this turn and
            remains

            active for subsequent turns until changed (sticky, like the
            persona).

            Empty leaves the current schema unchanged. Validated like

            SpawnRequest.output_schema.
        model:
          type: string
          description: >-
            Optional model override for this and subsequent turns (e.g.

            "claude-opus-4-8"). When set, it replaces the agent's active model
            and

            remains active until changed (sticky, like the persona and

            output_schema). Empty leaves the current model unchanged.
            Reconciliation

            with the agent persona is identical to spawn: the explicit model

            (SpawnRequest.model there, this field here) overrides the persona's

            AgentConfig.model at the VM. The model must stay on the agent's
            backend

            (claude vs codex, inferred exactly as at spawn) — the backend fixes
            turn

            dispatch and which provider credentials were sealed onto the VM, so
            a

            cross-backend model is rejected with InvalidArgument.
        reasoningEffort:
          type: string
          description: >-
            Optional reasoning-effort override for this and subsequent turns —

            sticky, exactly like model. Empty leaves the active effort
            unchanged.

            Validated against the agent's backend with spawn's per-backend sets

            (config.ValidateReasoningEffort): claude accepts low, medium, high,

            xhigh, max; codex accepts none, low, medium, high, xhigh. An invalid

            or cross-backend value is rejected with InvalidArgument.
        serviceTier:
          type: string
          description: >-
            Optional service-tier override for this and subsequent turns —
            sticky,

            exactly like model. Empty leaves the active tier unchanged. Codex
            only

            (standard, fast, flex — config.ValidateServiceTier, spawn's set); a

            non-empty tier on a claude agent is rejected with InvalidArgument,

            mirroring SpawnRequest.service_tier.
        fastMode:
          type: boolean
          description: >-
            Optional fast-mode override for this and subsequent turns — sticky,

            exactly like model. Absent leaves the active fast mode unchanged;

            present sets it (true or false), so fast mode can be switched off

            mid-session too. Claude's settings.json fastMode, as at spawn

            (SpawnRequest.fast_mode); not validated per backend, mirroring
            spawn.
        preempt:
          type: boolean
          description: >-
            When true, discards any pending queued follow-ups and interrupts the
            agent's in-flight turn before enqueuing this one — atomically, so
            the preempting follow-up runs next. The interrupt is best-effort: an
            idle agent or a turn still starting up is not cut short, but the
            queue is still cleared and this follow-up still runs as the next
            turn.
        deliverAt:
          type: string
          format: date-time
          description: >-
            When set, defers the message until this time, then it joins the
            ordinary queue — waking a sleeping agent exactly like a fresh
            follow-up. Cancel by removing the message with QueueRemove using the
            returned follow_up_id. Must be strictly in the future and at most 30
            days out. Mutually exclusive with preempt. Multiple deferred
            messages may coexist; re-arm with QueueRemove + QueueAdd. Rejected
            with FAILED_PRECONDITION when the target agent is on a build without
            deferral support.
    v1QueueAddResponse:
      type: object
      properties:
        followUpId:
          type: string
          description: >-
            The message's effective follow-up ID: the request's follow_up_id
            when

            supplied (dashboard reconciliation), else a server-minted UUID. Keys

            QueueRemove and the timeline's QUEUED → DELIVERED/CLEARED
            transitions.
    googleRpcStatus:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: >-
            Numeric status code for the failure, matching the HTTP status of the
            response via the standard mapping (e.g. 3 INVALID_ARGUMENT → 400, 5
            NOT_FOUND → 404, 7 PERMISSION_DENIED → 403, 16 UNAUTHENTICATED →
            401).
        message:
          type: string
          description: Human-readable description of what caused the failure.
        details:
          type: array
          items:
            $ref: '#/components/schemas/protobufAny'
          description: >-
            Machine-readable error details, when the failure carries them.
            Usually empty.
      description: The error envelope returned on every non-2xx response.
    v1AgentId:
      type: object
      properties:
        tenant:
          $ref: '#/components/schemas/v1Tenant'
        ownerProvider:
          $ref: '#/components/schemas/v1Provider'
        account:
          type: string
          description: >-
            Owner account: username for identity-provider owners,
            service-profile name for PROVIDER_SERVICE_PROFILE.
        agent:
          type: array
          items:
            type: string
          title: |-
            Agent path — the hierarchy from root to leaf.
            Root agent:  ["fix-bug"]
            Child:       ["fix-bug", "api"]
            Grandchild:  ["fix-bug", "api", "tests"]
        workspace:
          type: string
          description: >-
            Workspace this agent belongs to; scopes its repos, environment, and
            base branches. Optional at spawn: when empty, the server selects
            one, so a returned AgentId always carries a concrete workspace.
      description: >-
        Identifies an agent. The identity is (tenant, workspace, owner, agent
        path); the workspace scopes the agent's repos, environment, and base
        branches.
    v1Task:
      type: object
      properties:
        id:
          type: string
        subject:
          type: string
        description:
          type: string
        status:
          $ref: '#/components/schemas/v1TaskStatus'
        blocks:
          type: array
          items:
            type: string
          title: IDs of tasks this task blocks
        blockedBy:
          type: array
          items:
            type: string
          title: IDs of tasks that block this task
        activation:
          $ref: '#/components/schemas/v1TaskActivation'
        persona:
          type: string
          description: >-
            Name of the persona that contributed this task (e.g. "programmer").

            Empty for tasks from the spawn request, follow-ups, or task_create.

            A persona switch removes exactly the persona-tagged tasks and adds
            the

            new persona's, leaving all untagged tasks in place.
        dedupKey:
          type: string
          description: >-
            Stable identity of the external object this task tracks (e.g. a PR
            review thread). Tasks with the same key are de-duplicated within one
            delivery batch. Empty for caller-created tasks, which are never
            de-duplicated.
        ephemeral:
          type: boolean
          description: >-
            Ephemeral tasks live for exactly one run: created with the follow-up
            that delivers them and removed when that run completes. Set by the
            platform on per-thread PR comment and review tasks.
      description: A checklist item on the agent's task list.
    protobufAny:
      type: object
      properties:
        '@type':
          type: string
          description: >-
            Identifies the payload type of this detail value; the remaining
            properties are that type's fields.
      additionalProperties: {}
      description: >-
        A structured detail value. `@type` identifies the payload type; the
        remaining properties are that type's fields.
    v1Tenant:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/v1Provider'
        org:
          type: string
          title: username or org name
      description: |-
        Tenant identifies an organization within a provider. It is the unit of
        multi-tenant scoping — all resources (agents, pools, VMs) belong to
        exactly one tenant.
    v1Provider:
      type: string
      enum:
        - PROVIDER_UNSPECIFIED
        - PROVIDER_GITHUB_OAUTH
        - PROVIDER_GITHUB_APP
        - PROVIDER_GOOGLE_OIDC
        - PROVIDER_SERVICE_PROFILE
      default: PROVIDER_UNSPECIFIED
      description: |-
        Provider identifies the identity provider type for a tenant namespace.
        Each provider is a distinct namespace — no cross-provider mixing.

         - PROVIDER_GITHUB_OAUTH: the namespace of an individual GitHub user — a single login (human or bot, e.g. "alice"), addressed as github_oauth/{login}
         - PROVIDER_GITHUB_APP: the org/tenant namespace — its account is the org name (github_app/{org}), never a person
         - PROVIDER_GOOGLE_OIDC: Google Workspace domain
         - PROVIDER_SERVICE_PROFILE: owner is a CatalogServiceProfile; account is the profile name
    v1TaskStatus:
      type: string
      enum:
        - TASK_STATUS_UNSPECIFIED
        - TASK_STATUS_PENDING
        - TASK_STATUS_IN_PROGRESS
        - TASK_STATUS_COMPLETED
        - TASK_STATUS_DELETED
      default: TASK_STATUS_UNSPECIFIED
      description: TaskStatus is the lifecycle state of a checklist task.
    v1TaskActivation:
      type: object
      properties:
        filesModified:
          $ref: '#/components/schemas/v1FilesModified'
      description: >-
        Defines when a task becomes active. At most one condition may be set;
        unset means always active.
    v1FilesModified:
      type: object
      properties:
        pattern:
          type: string
          title: glob pattern for file paths; empty = any file
      description: |-
        FilesModified activates a task when the agent pushes changes.
        Run-scoped: evaluated against pushes in the current run only.
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      description: 'murmur API key: mur_<key_id>.<secret>'

````