---
title: "What is AI Agents?"
canonical: https://wavect.io/glossary/ai-agents/
language: en
description: "Software that uses an LLM to decide what to do next, calls tools to act on those decisions, and loops until a goal is reached."
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

TECHNOLOGIES

# AI Agents

Software that uses an LLM to decide what to do next, calls tools to act on those decisions, and loops until a goal is reached.

Last reviewed: 2026-05-24 by [Kevin Riedl](/team/kevin-riedl/) [wiki ↗](https://www.wikidata.org/wiki/Q139796365)

An AI agent is the loop, not the model. The model (Claude, GPT, Gemini, an open-weights LLM) is the decision-maker. The agent is the runtime: it gives the model a goal, lets it call tools (a database, an API, a code interpreter, another agent) often via [MCP](/glossary/mcp/), observes the result, and feeds the loop until done.

The distinction matters because agentic systems fail differently from straight LLM applications. A chatbot can be wrong and the user moves on. An agent that is wrong sends an email, makes a transaction, or deletes a file. Production agents need authorisation gates, observability, and circuit breakers that most prototypes skip.

Worked example of the most common production failure: a support agent is given a “resolve ticket” goal and a set of tools. A malformed ticket sends it into a loop where it calls the same lookup tool dozens of times, burns through the model budget in an afternoon, and never reaches a resolution. The fix is not a smarter prompt, it is engineering: a hard step limit, a cost ceiling, and a circuit breaker that halts the loop and escalates to a human. Anything that writes (sends a message, makes a payment, deletes a record) gets a human-in-the-loop gate; read-only loops can usually run unattended.

The honest trade-off and the founder mistake to avoid: agents add non-determinism, latency, and a much larger blast radius than a fixed pipeline, in exchange for handling tasks whose steps cannot be enumerated in advance. Most workflows pitched as “agentic” are well-understood and are better served by a deterministic pipeline with one or two LLM calls in the middle, often backed by [RAG](/glossary/rag/) for grounding. Wavect’s posture: start by asking if AI is the right tool here, then whether an agent is the right shape of AI for it. If you can write the steps down, do not let the model improvise them.

// FAQ

## FAQs

### When is an agent the wrong shape?

Whenever a deterministic pipeline with one or two LLM calls in the middle would do the job. Agents add non-determinism, latency, and a much bigger blast radius when they misfire. If your workflow is well-understood, do not let the model improvise the steps.

### What is the most common production agent failure?

Unbounded tool use. The agent loops, calls the same tool ten times, burns the budget, and never reaches the goal. Production agents need step limits, cost ceilings, and circuit breakers. Without those, a single bad prompt becomes a billing incident.

### Do agents need human-in-the-loop?

For anything destructive or irreversible: yes. Sending an email, making a payment, deleting a record, posting publicly, hitting an external API with side effects. Read-only loops can usually run unattended; write-side actions should have a gate.

Related terms

- [MCP](/glossary/mcp/)
- [RAG](/glossary/rag/)

Related services

- [Artificial Intelligence](/services/artificial-intelligence/)

Related case studies

- [PromptID](/case-studies/promptid/)
- [Twinsoft AI](/case-studies/twinsoft-ai/)
- [Quivr](/case-studies/quivr/)
- [Hyperstate AI](/case-studies/hyperstate-ai/)

Related guides

- [How to choose a tech stack for an MVP](/software-development-guide/how-to-choose-a-tech-stack-for-mvp/)

Discussed in articles

- [Why AI agent projects get cancelled](/blog/why-ai-agent-projects-get-cancelled/)
- [Focus is the bottleneck when orchestrating AI agents](/blog/focus-bottleneck-orchestrating-ai-agents/)

Talk to us

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/glossary/ai-agents/#term",
      "@type": "DefinedTerm",
      "alternateName": [
        "AI Agent",
        "Agentic AI"
      ],
      "description": "Software that uses an LLM to decide what to do next, calls tools to act on those decisions, and loops until a goal is reached.",
      "inDefinedTermSet": "https://wavect.io/glossary/#termset",
      "name": "AI Agents",
      "termCode": "ai-agents",
      "url": "https://wavect.io/glossary/ai-agents/"
    },
    {
      "@id": "https://wavect.io/glossary/ai-agents/#webpage",
      "@type": "WebPage",
      "about": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "author": {
        "@id": "https://wavect.io/team/kevin-riedl/#person",
        "@type": "Person",
        "name": "Kevin Riedl",
        "url": "https://wavect.io/team/kevin-riedl/"
      },
      "dateModified": "2026-05-24",
      "description": "Software that uses an LLM to decide what to do next, calls tools to act on those decisions, and loops until a goal is reached.",
      "headline": "AI Agents",
      "inLanguage": "en",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-05-24",
      "mainEntity": {
        "@id": "https://wavect.io/glossary/ai-agents/#term"
      },
      "mentions": [
        {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        {
          "@type": "Service",
          "name": "Artificial Intelligence",
          "url": "https://wavect.io/services/artificial-intelligence/"
        }
      ],
      "name": "AI Agents",
      "reviewedBy": {
        "@id": "https://wavect.io/team/christof-jori/#person",
        "@type": "Person",
        "name": "Christof Jori",
        "url": "https://wavect.io/team/christof-jori/"
      },
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          ".gls-single__h1",
          ".gls-single__tldr"
        ]
      },
      "url": "https://wavect.io/glossary/ai-agents/"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "item": "https://wavect.io/",
          "name": "Home",
          "position": 1
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/glossary/",
          "name": "Tech, product & engagement glossary",
          "position": 2
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/glossary/ai-agents/",
          "name": "AI Agents",
          "position": 3
        }
      ]
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Whenever a deterministic pipeline with one or two LLM calls in the middle would do the job. Agents add non-determinism, latency, and a much bigger blast radius when they misfire. If your workflow is well-understood, do not let the model improvise the steps."
      },
      "name": "When is an agent the wrong shape?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Unbounded tool use. The agent loops, calls the same tool ten times, burns the budget, and never reaches the goal. Production agents need step limits, cost ceilings, and circuit breakers. Without those, a single bad prompt becomes a billing incident."
      },
      "name": "What is the most common production agent failure?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "For anything destructive or irreversible: yes. Sending an email, making a payment, deleting a record, posting publicly, hitting an external API with side effects. Read-only loops can usually run unattended; write-side actions should have a gate."
      },
      "name": "Do agents need human-in-the-loop?"
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".faq-question",
      ".faq-answer"
    ]
  }
}
```
