charmbracelet/crush · error

failed to clear session agent queued prompts: status code

Error message

failed to clear session agent queued prompts: status code %d

What it means

ClearAgentSessionQueuedPrompts expects HTTP 200; any other status becomes this error with the code embedded. The server received the clear request but did not succeed.

Solutions

  1. Treat 404 as 'session gone' and skip clearing
  2. Re-authenticate on 401/403
  3. Check server logs for the 5xx cause
  4. Retry transient failures with backoff
Defensive patterns

Strategy: try-catch

Validate before calling

if sessionID == "" { return errors.New("session ID required to clear queue") }

Type guard

func clearStatusCode(err error) int {
	var code int
	pattern := "failed to clear session agent queued prompts: status code %d"
	if _, e := fmt.Sscanf(err.Error(), pattern, &code); e == nil { return code }
	return 0
}

Try / catch

err := client.ClearAgentSessionQueuedPrompts(ctx, wsID, sid)
if err != nil {
	switch clearStatusCode(err) {
	case http.StatusNotFound: // session gone, ignore
	case http.StatusUnauthorized: reauthAndRetry()
	default: return err
	}
}

Prevention

When it happens

Trigger: POST returns 404 for an unknown/finished session, 401/403 on auth failure, or 500 if the server cannot reset the agent queue.

Common situations: Clearing the queue of a session that already completed; expired credentials; server-side agent in a broken state.

Related errors


AI-assisted analysis of charmbracelet/crush@7944b8e522 (2026-08-29). Data as JSON: /api/errors/5d95bd3439180cf8. Report an issue: GitHub.

Appendix: source

Thrown at internal/client/proto.go:451

	if rsp.StatusCode != http.StatusOK {
		return 0, fmt.Errorf("failed to get session agent queued prompts: status code %d", rsp.StatusCode)
	}
	var count int
	if err := json.NewDecoder(rsp.Body).Decode(&count); err != nil {
		return 0, fmt.Errorf("failed to decode session agent queued prompts: %w", err)
	}
	return count, nil
}

// ClearAgentSessionQueuedPrompts clears the queued prompts for a session.
func (c *Client) ClearAgentSessionQueuedPrompts(ctx context.Context, id string, sessionID string) error {
	rsp, err := c.post(ctx, fmt.Sprintf("/workspaces/%s/agent/sessions/%s/prompts/clear", id, sessionID), nil, nil, nil)
	if err != nil {
		return fmt.Errorf("failed to clear session agent queued prompts: %w", err)
	}
	defer rsp.Body.Close()
	if rsp.StatusCode != http.StatusOK {
		return fmt.Errorf("failed to clear session agent queued prompts: status code %d", rsp.StatusCode)
	}
	return nil
}

// GetAgentInfo retrieves the agent status for a workspace.
func (c *Client) GetAgentInfo(ctx context.Context, id string) (*proto.AgentInfo, error) {
	rsp, err := c.get(ctx, fmt.Sprintf("/workspaces/%s/agent", id), nil, nil)
	if err != nil {
		return nil, fmt.Errorf("failed to get agent status: %w", err)
	}
	defer rsp.Body.Close()
	if err := checkStatus(rsp); err != nil {
		return nil, fmt.Errorf("failed to get agent status: %w", err)
	}
	var info proto.AgentInfo
	if err := json.NewDecoder(rsp.Body).Decode(&info); err != nil {
		return nil, fmt.Errorf("failed to decode agent status: %w", err)
	}

View on GitHub (pinned to 7944b8e522)