Agents

Agents are the basic building block of any agentic workflow. The AI Agent Manager simplifies the creation of agents by providing a UI that lets you quickly define an agent with a system prompt that then, on its own, calls tools. This quick starts agentic workflows in a couple of minutes, not hours.

Agent list

To see all agents of your tenant, navigate to AI Agent Manager > Agents in the Administration application. The list shows your custom agents and the subscribed agents provided by applications.

The agent list shows custom and subscribed agents

Each agent is shown in a list with the following information:

  • Name: The name of the agent. The icon shows the provider the agent uses.
  • Output: The agent type, Text or Object. See Text and object agents.
  • Description: An optional short summary of what the agent does.
  • Source: custom for agents created in your tenant, subscribed for agents provided by an application. Hover over the subscribed tag to see the source application.
  • Provider/model: The provider and model the agent uses. This is the local provider of the agent, if defined, otherwise the global provider. A warning tag indicates that no model is set, so calls to the agent fail until a model is configured.

Custom agents that override a subscribed agent of the same name show an overrides tag, and the overridden subscribed agent shows an overridden tag with a dimmed icon. See Overruling subscribed agents.

Use the action bar to find and organize agents:

  • Filter: Search by name, description, or source application.
  • All, Custom, Subscribed: Show all agents, only custom agents, or only subscribed agents.
  • Hide overridden: Hide subscribed agents that are overridden by a custom agent.
  • Display as: Show the agents as Grid or List. Auto shows a grid for fewer than 12 agents and a list for 12 or more agents.
  • Add agent: Create a new custom agent.
  • Reload: Reload the list.

Click a card to open the agent. The actions menu of each card provides the following actions:

  • Open: Open the agent details.
  • Clone: Create a custom copy of the agent and open it. Cloning a subscribed agent that is not overridden yet keeps its name, so the copy overrides the subscribed agent. All other copies get the suffix -clone.
  • Delete: Delete the agent after confirmation. This action cannot be undone. If the agent overrides a subscribed agent, the subscribed agent is used again. Subscribed agents cannot be deleted.

Custom agents

To create a custom agent:

  1. Navigate to AI Agent Manager > Agents and click Add agent in the action bar.
  2. Enter an agent name, or keep the generated one. The name must be unique and can only include letters, numbers, spaces, underscores, or hyphens.
  3. Optionally, enter a description of what the agent does. The description is shown in the agent list.
  4. Select the agent type. This introduction only describes text agents. For details about object agents, refer to Text and object agents.
  5. Click Add agent. Adding a new agent

The agent is saved with a placeholder system prompt and its details open.

When selecting a name, remember that naming conflicts can occur with subscribed agents provided from applications or plugins. It is good practice to use a prefix other than c8y-, as this is the default prefix used by the platform.

Agent details

Each agent has its own page, which you can bookmark or share. The URL contains the agent name, for example, #/ai-agents/list/my-agent. Links to subscribed agents also contain the ID of the source application, for example, #/ai-agents/list/my-agent?source=12345, to distinguish them from a custom agent with the same name. Use the breadcrumb Agents to return to the list.

The header of the page shows the agent type and the following information:

  • Name and Description: For custom agents, click the name or the description to edit it. If you rename an agent, the URL changes to the new name.
  • Status: overrides or overridden, if the agent overrides or is overridden by another agent.
  • Source: custom or subscribed. For subscribed agents, Application shows the source application.
  • Provider/model: The provider and model the agent uses.

You align a custom agent to your needs using the following tabs:

  • Test: Test your agent directly in the AI Agent Manager.
  • Settings: Set options like the maximum output tokens, the temperature, or the maximum number of steps.
  • Test variables: Set variable values for your test.
  • System prompt: The system prompt of the agent. You align it and then test the changes. The system prompt persists only when you save it.
  • Tools: Assign tools to your agent. Only available for text agents.
  • Schema: Define the JSON schema of the response. Only available for object agents.
  • Local provider: Set a different LLM provider or model for this agent (see Local providers).
  • Advanced: Edit advanced settings in JSON format.

Subscribed agents are read-only and only show the Test, Settings, Test variables, and System prompt tabs.

Changes are only persisted when you save them. Click Save to save and stay on the page. To save and return to the list instead, use the arrow next to the button to switch it to Save and close. The System prompt, Schema, Local provider, and Advanced tabs provide a Revert button to undo unsaved changes of that tab. If you leave the page with unsaved changes, for example with Cancel, the navigator, or the breadcrumb, you are asked to confirm that the changes are discarded.

System prompts

The system prompt defines your agent’s behavior, expertise, and personality. It is the foundational instruction that shapes how the agent interprets user questions and formulates responses. Unlike user messages that change with each conversation, the system prompt remains constant and guides the agent throughout all interactions.

The system prompt defines the custom behavior of the agent

What to include in a system prompt:

  • Write clear and specific instructions about the agent’s role and purpose. For example, “You are a device troubleshooting assistant for industrial IoT equipment” is more effective than “You are helpful.”

  • Define the agent’s tone and communication style. Specify whether responses are formal, conversational, technical, or simplified for non-technical users.

  • Set boundaries and limitations. Explicitly state what the agent does not do or what topics it avoids. For example, “You do not provide financial advice or make purchasing decisions.”

  • Include domain knowledge and context. Add relevant background information about your IoT environment, device types, or specific terminology the agent needs to understand.

  • Specify output format preferences. Indicate whether responses are concise bullet points, detailed explanations, or follow a specific structure.

Do’s:

  • Be specific and concrete rather than vague or general.
  • Test different prompt variations to find what works best for your use case.
  • Include examples of desired behavior directly in the prompt.
  • Update the system prompt based on observed agent behavior.
  • Keep the prompt focused on a single, clear purpose.
  • Use the agent’s perspective (write as “You are…” not “The agent is…”).

Don’ts:

  • Avoid contradictory instructions that confuse the agent.
  • Do not make the prompt excessively long (generally stay under 2000 words).
  • Avoid assumptions about what the agent “knows” - be explicit.
  • Do not include user-specific information that changes per interaction (use variables instead).
  • Avoid overly complex or nested conditional logic.
  • Do not use ambiguous language that has multiple interpretations.

Variables

Variables allow you to inject dynamic data into your system prompt or user prompts at runtime. Instead of hardcoding specific values, you define placeholders that get replaced with actual values when the agent is called.

Defining variables in prompts

Use double curly brackets to define variables: {{variableName}}. You place variables anywhere in the system prompt or in API calls.

Example system prompt with variables:

You are a monitoring assistant for factory {{factoryId}}. When users ask about equipment, focus on devices in the {{location}} area. Current shift manager is {{shiftManager}}.

Providing variable values

When testing in the AI Agent Manager, use the Test variables tab to set values for your variables before testing the agent. You simply provide the variable as JSON where the key is the variable name and the value is the value you want the variable to be. Test variables are only used for testing and are not stored with the agent. For the above example you would need to add to the Test variables tab the following JSON:

{
  "factoryId": "FAC-001",
  "location": "Building A",
  "shiftManager": "John Smith"
}

When calling the agent via REST API, provide variables in the request body:

{
  "variables": {
    "factoryId": "FAC-001",
    "location": "Building A",
    "shiftManager": "John Smith"
  },
  "prompt": "What is the status of equipment in {{location}}?"
}

Use cases for variables

  • Personalizing responses with user-specific information (names, roles, preferences).
  • Contextualizing agents for different locations, facilities, or departments.
  • Injecting current state information that changes frequently.
  • Reusing the same agent configuration across multiple contexts.

Variables make agents flexible and reusable without requiring multiple agent configurations for similar use cases.

Important
System prompts and variables are vulnerable to prompt injection attacks. Always sanitize and validate any input used in prompts or variables, as the AI Agent Manager does not provide automatic protection. Learn more about prompt injection risks and mitigation strategies on the OWASP website.

Settings and advanced settings

The settings allow you to fine-tune the agent’s behavior using parameters from the Vercel AI SDK. These settings control aspects like response randomness, length limits, and provider-specific features.

Common settings

The Settings tab groups the common settings into the sections Output, Sampling, Repetition, and Requests. If you leave a field empty, the default value applies.

Section UI field (parameter) Range Description
Output Maximum output tokens (maxOutputTokens) Number (min: 1) Sets the maximum length of the response in tokens. Use this to enforce concise responses or prevent excessively long outputs.
Output Stop sequences (stopSequences) Array of strings Sequences that, when generated, will stop the response. For example, “END” or “\n\n”. Only available for text agents.
Sampling Temperature (temperature) 0.0 to 1.0 Controls response randomness. Higher values make output more random, lower values more deterministic.
Sampling Top P (topP) 0.0 to 1.0 Nucleus sampling parameter. Only tokens with top probability mass are considered (e.g., 0.1 = top 10%).
Sampling Top K (topK) Number (min: 1) Limits sampling to the top K options. For example, 40 means only the top 40 token options are considered.
Sampling Seed (seed) Number (min: 0) Sets a seed for reproducible results. Using the same seed with the same inputs produces consistent outputs.
Repetition Presence penalty (presencePenalty) -1.0 to 1.0 Encourages the model to introduce new topics. Positive values make the agent less likely to repeat topics already mentioned.
Repetition Frequency penalty (frequencyPenalty) -1.0 to 1.0 Reduces repetition of tokens based on their frequency in the response. Positive values discourage repeated words.
Requests Maximum retries (maxRetries) Number (min: 0) Number of times to retry the request on failure. For example, 2 means the system will retry up to 2 times.
Requests Timeout (timeout) Number (min: 1) Timeout of the call in milliseconds, for example, 30000.
Requests Maximum steps (maxSteps) Number (min: 1) Maximum number of steps (tool-calling iterations) per agent run. If empty, the default of 40 steps applies. Select Unlimited to remove the limit. Only available for text agents.

Temperature and Top P cannot be used at the same time. Use Randomness control to select None, Temperature, or Top P (nucleus sampling).

Advanced settings

In the Advanced tab, you can specify more options in JSON format that don’t have a UI form yet. The options are based on the used Vercel AI SDK. For a complete list of available parameters and provider-specific options, refer to the Vercel AI SDK documentation.

Provider-specific options

Some AI providers support additional features configured through the providerOptions field. For example, Anthropic’s extended thinking mode:

{
  "anthropic": {
    "thinking": {
      "type": "enabled",
      "budgetTokens": 12000
    }
  }
}

To set provider options on the system prompt itself, such as the prompt caching of Anthropic, store system as a system message, or an array of system messages, instead of a string. Edit it in the Advanced tab:

{
  "system": {
    "role": "system",
    "content": "You are a device troubleshooting assistant.",
    "providerOptions": {
      "anthropic": { "cacheControl": { "type": "ephemeral" } }
    }
  }
}

A system prompt stored this way is shown read-only in the System prompt tab.

When to use settings

  • Adjust temperature when responses are too random or too rigid.
  • Set the maximum output tokens to control costs or enforce response brevity.
  • Limit the maximum steps to prevent long-running tool-calling loops.
  • Use penalties to reduce repetitive language in longer conversations.
  • Enable provider-specific features for specialized capabilities.

Test different settings to find the optimal configuration for your use case.

Tools

Tools extend your agent’s capabilities by allowing it to access data and perform actions beyond generating text. In the Tools tab, you assign tools from configured MCP servers to your agent.

To assign tools to an agent:

  1. Navigate to the Tools tab in the agent details.
  2. Browse or search the list of available tools from configured MCP servers. A tag shows the MCP server of each tool.
  3. Select the tools your agent needs to answer user questions.
  4. Click Save to update the agent configuration.

If a tool assigned to the agent is no longer available, for example because it was removed or renamed on the MCP server or the server is unavailable, the tool is marked as unavailable and a warning is shown. Remove such tools from the agent or ask your administrator to verify the tool availability.

The agent automatically determines when to call assigned tools based on user questions and tool descriptions. For example, if you assign a “get device measurements” tool, the agent calls it when users ask about current temperature or sensor readings.

For detailed information about tools, configuring MCP servers, and how agents use tools, refer to Tools and MCP servers.

Info
Object agents cannot use custom tools. They use tools internally to structure responses according to their defined schema.

Test

The Test tab provides an interactive interface to test your agent directly in the AI Agent Manager. This allows you to validate the agent’s behavior, system prompt, and tool usage before deploying it in production.

To test an agent:

  1. Navigate to AI Agent Manager > Agents and open the agent. The Test tab is selected by default.
  2. If your agent uses variables, set them in the Test variables tab first.
  3. Enter a prompt in the chat interface.
  4. Review the agent’s response.

The test uses the current configuration of the agent, including unsaved changes. The test interface maintains conversation context, allowing you to have multi-turn conversations and verify the agent remembers previous messages. Each response shows the tools the agent called and the tokens used. Click Clear messages to start a new conversation.

Depending on the agent configuration, tool calls can require your approval before they run. Below the message field, select how such tool calls are handled:

  • Manual: You are asked to approve the tool call before the tool runs.
  • Auto: Tools run without asking.

Your selection is saved as a user preference.

Important
Tests run with your user permissions and the tools of the agent can add, change, or delete data. Test agents in a testing environment.

Subscribed agents

Subscribed agents are AI agents that are provided by installed applications in your Cumulocity tenant. These agents are automatically available in the AI Agent Manager once the providing application or plugin is deployed.

What are subscribed agents?

When developers build applications or plugins that include AI functionality, they define agents to be exported. These agents are then “subscribed” to your tenant and appear in the AI Agent Manager list.

Subscribed agents come with predefined:

  • System prompts that define their behavior and expertise.
  • Tool configurations that allow them to interact with specific Cumulocity data or services.

Subscribed agents properties:

  • Pre-configured: Subscribed agents are fully configured by the application provider. You do not need to define system prompts or tools.

  • Application-specific: Each subscribed agent is designed for a specific use case within an application (for example, a device troubleshooting agent for a specific device management app).

  • Require global provider: Subscribed agents use your configured global provider unless they specify a local provider. Without a global provider configured, subscribed agents remain inactive.

  • Read-only configuration: You cannot modify the system prompt or tools of subscribed agents. However, you view their configuration to understand their capabilities. You also overwrite the subscribed agent with a custom agent. Custom agents with the same name as the subscribed one are preferred.

  • Automatic updates: When the providing application updates the agent definition, changes appear automatically in your AI Agent Manager as long as you haven’t overwritten it.

Viewing subscribed agents

To view subscribed agents:

  1. Navigate to AI Agent Manager > Agents.
  2. In the action bar, click Subscribed to only show subscribed agents. Subscribed agents show a subscribed tag. Hover over the tag to see the source application.
  3. Click a subscribed agent to view its details. The header shows the source Application, and the System prompt tab shows the system prompt of the agent.

You can investigate the system prompt of a subscribed agent

Testing subscribed agents

You test subscribed agents the same way as custom agents:

  1. Open the subscribed agent in the AI Agent Manager.
  2. Navigate to the Test tab.
  3. Enter a prompt and observe the agent’s response.

Overruling subscribed agents

While you cannot change the core configuration of subscribed agents, you align them by overruling the agent with a custom agent of the same name. To do so, use one of the following options:

  • In the agent list, click the actions menu of the subscribed agent and select Clone.
  • In the details of the subscribed agent, click Clone agent in the information banner.

The clone keeps the name of the subscribed agent and opens, so you can align it to your needs. From now on, all calls to this agent name, from any application, use the new custom agent.

In the agent list, the custom agent shows an overrides tag, and the subscribed agent shows an overridden tag and a dimmed icon. The details of an overridden agent show a warning that it is not used while the custom agent exists. To hide overridden agents from the list, turn on Hide overridden in the action bar.

To use the subscribed agent again, delete the custom agent that overrides it.

Subscribed agent versioning

While agents in general are not versioned, subscribed agents are versioned. They are provided by a custom or subscribed plugin that gets versioned, so the agents also exist in different versions. The AI Agent Manager shows the “latest” version of the plugin-agent. However, a custom application might use a different version. If the agent is overruled, always the custom user-defined agent is used.

Removing subscribed agents

Subscribed agents are removed automatically when you uninstall or remove the providing application. You cannot manually delete subscribed agents while their source application remains installed, so the Delete action is disabled for them. If the source application is subscribed, you need to unsubscribe this application to uninstall the agent.

Text and object agents

The AI Agent Manager supports two base types of agents: text agents and object agents. Understanding the difference helps you choose the right type for your use case.

Text agents

Text agents return natural language responses as plain text. They are designed for conversational interactions where the agent provides explanations, answers, or guidance in a human-readable format.

Use cases:

  • Conversational interfaces where users ask questions in natural language.
  • Explanations and guidance for device troubleshooting.
  • General-purpose AI assistants that interact through chat.
  • Generating reports or summaries in text format.

Response format:

By default, text agents return plain text:

The current temperature is 23.5°C and the humidity level is at 45%.

Add the ?fullResponse=true query parameter to receive a JSON response with additional metadata, including tool calls, reasoning steps, and usage statistics.

API endpoint:

POST /service/ai/agent/text/{agent-name}

Object agents

Object agents return structured data in JSON format according to a predefined schema. They are designed for programmatic integrations where the response must follow a specific structure.

Use cases:

  • APIs that require structured responses.
  • Data extraction where specific fields must be populated.
  • Integration with other systems that expect JSON.
  • Form filling or data validation workflows.

Response format:

Object agents always return JSON that matches the defined schema:

{
  "temperature": 23.5,
  "humidity": 45,
  "status": "normal"
}

Schema definition:

When creating an object agent, define the expected response structure using JSON schema:

{
  "type": "object",
  "properties": {
    "temperature": {
      "type": "number",
      "description": "Current temperature in Celsius"
    },
    "humidity": {
      "type": "number",
      "description": "Current humidity percentage"
    },
    "status": {
      "type": "string",
      "enum": ["normal", "warning", "critical"]
    }
  },
  "required": ["temperature", "humidity", "status"],
  "additionalProperties": false
}

Every object in the schema, including nested objects, must declare "additionalProperties": false. Otherwise, the agent cannot be saved.

The agent uses this schema to structure its response, ensuring consistent output format. The response is validated against the schema, including string formats such as date-time or email. If the generated object doesn’t match the schema, the call fails with the HTTP status 400.

API endpoint:

POST /service/ai/agent/object/{agent-name}

UI support:

When creating an object agent a new Schema tab is shown. In this view you can define the correct schema and a validation will check, if you are following the right JSON Schema standard.

Key differences

Aspect Text agents Object agents
Response format Plain text (or JSON with ?fullResponse=true) Always JSON
Schema Not required Requires JSON schema
Tools Supports custom tools Cannot use additional tools (uses tools internally for structuring)
Use case Conversational AI Programmatic integration
Flexibility High - can adapt response format Low - follows strict schema

Choosing the right type

Choose text agents when:

  • Building conversational interfaces or chatbots.
  • Users need natural language explanations.
  • Response format varies based on context.
  • You want to use custom tools for data access.

Choose object agents when:

  • Integrating with APIs or other systems.
  • Response must follow a strict structure.
  • Extracting specific data fields from user input.
  • Building forms or structured data collection.

Testing agent types

You test both agent types in the AI Agent Manager:

  1. Navigate to AI Agent Manager > Agents.
  2. Create or open an agent. The Output column of the agent list and the header of the agent details show the agent type, Text or Object. The agent type is selected during creation and cannot be changed later.
  3. For object agents, define the JSON schema in the Schema tab.
  4. Use the Test tab to verify responses match your expectations.

Converting between types

You cannot convert an existing agent from one type to another. To change the agent type, create a new agent with the desired type and copy the relevant configuration.

Local providers

Local providers allow you to configure agent-specific AI provider and model settings that override the global provider configuration. This enables you to use different AI models or providers for different agents based on their specific requirements.

What are local providers?

A local provider is an agent-specific configuration that defines:

  • Which AI provider to use (for example, OpenAI, Anthropic, Google).
  • Which model to use (for example, gpt-4, claude-3-7-sonnet).
  • Provider-specific settings like API keys, base URLs, or custom parameters.

When an agent has a local provider configured, it uses those settings instead of the global provider settings.

When to use local providers

Consider the following:

  • Different model requirements: Some use cases benefit from specific models. For example, use a faster, cheaper model for simple queries and a more powerful model for complex reasoning tasks.

  • Cost optimization: Route less critical agents to more cost-effective models while keeping important agents on premium models.

  • Provider-specific features: Access features only available from certain providers, such as extended thinking modes or specialized capabilities.

  • Testing and comparison: Test different models side-by-side by creating multiple agents with different local providers.

  • Separate billing: Use different API keys for different agents to track usage or allocate costs to different departments.

Global provider versus local provider

Aspect Global provider Local provider
Scope All agents without local providers Single agent only
Configuration location Control panel > Model configuration Local provider tab of the agent
Fallback Used when no local provider is defined Overrides global provider
Use case Default for most agents Special requirements

Configuring a local provider

To configure a local provider for an agent:

  1. Navigate to AI Agent Manager > Agents.
  2. Open the custom agent you want to configure or create a new agent. Subscribed agents don’t provide a Local provider tab, clone them first.
  3. Open the Local provider tab.
  4. Define the local provider in JSON format. The editor validates the configuration against the settings of the selected provider.
  5. Click Save.

Depending on the provider to use, you can define the provider name, the model, the apiKey, and further provider-specific settings. The name is one of openai, anthropic, google, azure, xai, groq, deepinfra, mistral, togetherai, cohere, fireworks, deepseek, cerebras, perplexity, ollama, or echo. How the local provider is combined with the global provider depends on the provider name:

  • If the local provider uses the same provider name as the global provider, or doesn’t define a name, its settings are merged with the global provider. The local settings take precedence. This allows you to, for example, only overwrite the model to be used:
    {
      "model": "claude-haiku-4-5"
    }
    
  • If the local provider uses a different provider name, only the local settings are used. The agent doesn’t inherit the model, API key, or other settings of the global provider, so define all required settings, including the apiKey.

For example, to use an OpenAI-compatible LLM hosted on your own infrastructure, the following configuration could be used:

{
  "name": "openai",
  "model": "my-custom-gpt",
  "baseURL": "https://your-custom-endpoint.com/v1"
}

If the global provider is also openai, this configuration is merged with it, so the global API key would be sent to your endpoint. In this case, add the apiKey your endpoint expects.

Testing local providers

After configuring a local provider:

  1. Check the Provider/model field in the header of the agent. It shows the provider and model the agent uses.
  2. Navigate to the Test tab of the agent.
  3. Enter a test prompt.
  4. Verify the response uses the local provider.

Managing multiple local providers

You configure local providers independently for each agent. This allows you to:

  • Use OpenAI for agent A, Anthropic for agent B, and Google for agent C.
  • Test the same agent configuration with different models by creating duplicate agents with different local providers.
  • Maintain separate API keys for different use cases or cost centers.

Security considerations

  • API keys: Local provider API keys are stored securely in Cumulocity and cannot be read after configuration. Only users with appropriate permissions access local provider settings.

  • Access control: Ensure only authorized users have permission to configure agents and local providers, as this grants access to external AI services.

Removing a local provider

To remove a local provider and revert to the global provider simply empty the JSON object.

Troubleshooting local providers

  • Agent not responding: Verify the API key is valid and the provider account has sufficient credits.

  • Different results than expected: Check the model selection and advanced settings in the local provider configuration.

  • Provider not available: Ensure the provider is supported by the AI Agent Manager. For the list of supported providers, see Model configuration.