{"ref":"capability:agent-tooling","page":"/capabilities/agent-tooling","json":"/capabilities/agent-tooling.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"agent-tooling","name":"Agent tooling","domain":"ai-and-agents","ecosystems":["cap","btp"],"universal":false,"description":"Building an agent into your own application — the tools it may call, the state it keeps between turns, and the framework it runs in. Distinct from MCP servers, which expose an application to somebody else's agent, and from agent guidance, which is knowledge handed to a coding agent.","short":"Building an agent into your own application","core_coverage":{"state":"core-and-community","assessed_at":"2026-10-15","what_core_does":"[@cap-js/agents](artifact:cap-js-agents) turns a service annotated @agent into an agent served over A2A, with MCP tools generated from the service's entities and actions and a ReAct loop; an AGENTS.md next to the service definition replaces that generic agent with one built from the directory, and SKILL.md files under it carry single workflows. An @agent-ified service imported from another CAP project is reached as a subagent over A2A. The harness underneath is LangChain or Pi, used internally. On Node.js the plugin adds @agent.hitl on an action that needs a person's approval, short-term memory in the connected primary database, quotas per tenant and user, audit events through [@cap-js/audit-logging](artifact:cap-js-audit-logging) and OpenTelemetry metrics with optional MLflow attributes through [@cap-js/telemetry](artifact:cap-js-telemetry). [com.sap.cds:cds-adapter-agent](artifact:cap-java-cds-adapter-agent) is the Java module of the same plugin: a generic CDS QL query tool plus a tool for each unbound action or function, with the model picked by @agent.llm.","where_it_stops":"At the plugin's own harness and at what capire lists as still to come: evals-based agent testing, RAG and knowledge graphs, alternative agent harnesses, custom-coded agents, advanced streaming, sandboxed scripts, push notifications, agent memory across sessions, file I/O, data parts and data privacy. The chat preview in the generic index.html page is marked experimental and for local development, so the screen a user of the application opens is not part of what is served. On Java it stops earlier: bound actions and bound functions are not tools yet, @agent.hitl is not supported, and conversation history sits in volatile memory, so every follow-up has to reach the same server instance. It also stops at the application's own services by SAP's own statement — capire's guide says CAP-level agents are intended only for exposing custom CAP application services and are not an SAP-endorsed pathway for agentic access to SAP Application APIs.","community_adds":"An agent built on LangGraph keeps its own loop and state: [@mi8y/cds-langgraph-persistence](artifact:mi8y-cds-langgraph-persistence) stores one thread's checkpoints in CDS, and its README now points new applications at the checkpointer the core plugin has since added, while [@mi8y/cap-agents-memory](artifact:mi8y-cap-agents-memory) holds what has to outlive a thread, which the core lists among the features it is still working on. [@mi8y/cap-agents-sdm-backend](artifact:mi8y-cap-agents-sdm-backend) gives a Deep Agents agent file operations over a document repository, which is file I/O, another item on the core's list. [cds-agents](artifact:nagarjundas1994-aiagents-cds-agents) runs the other way round, as a client library pointed at a service that is already running, so the framework is the host and the CAP service is what gets wrapped as tools. [cap-agent-ui5-webui](artifact:lemaiwo-cap-agent-ui5-webui) serves the chat screen the core's preview is not meant to be. Beyond the CAP plugin, SAP's own [Joule Studio](artifact:sap-joule-studio) builds agents in a managed environment and registers them with [SAP Joule](artifact:sap-joule), outside the CAP service.","sources":[{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents — capire","checked":"2026-10-15","quote":"the plugin auto-generates MCP tools from the service's entities and actions, creates a ReAct loop, and serves it via A2A protocol"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents, abstract — capire","checked":"2026-10-15","quote":"The plugin uses state-of-the-art agent harness frameworks like LangChain or Pi internally."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#optional-agentsmd","title":"CAP-level Agents, Optional: AGENTS.md — capire","checked":"2026-10-15","quote":"When present, it replaces the generic default agentification: instead of the auto-generated ReAct agent, the plugin auto-builds the agent from the directory at startup — no custom handlers required."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#subagents-via-a2a","title":"CAP-level Agents, Subagents via A2A — capire","checked":"2026-10-15","quote":"The main agent coordinates these subagents, and communicates with them via A2A endpoints."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#persistence","title":"CAP-level Agents, Persistence — capire","checked":"2026-10-15","quote":"The CAP-based agent harness provides short-term memory out-of-the-box via the connected primary database"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#using-agent-hitl","title":"CAP-level Agents, Using @agent.hitl — capire","checked":"2026-10-15","quote":"`@agent.hitl` is not yet supported by CAP Java"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#served-out-of-the-box","title":"CAP-level Agents, Served out of the box — capire","checked":"2026-10-15","quote":"Persistent chat history, telemetry, quotas, content filtering, audit logging and data privacy features are not yet supported by CAP Java."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#more-to-come","title":"CAP-level Agents, More to come — capire","checked":"2026-10-15","quote":"Following are features and areas we are currently working on, and plan to release in the near future"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#using-chat-preview","title":"CAP-level Agents, Using Chat Preview — capire","checked":"2026-10-15","quote":"A rudimentary experimental chat preview is provided in the generic index.html page"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#sap-api-policy","title":"CAP-level Agents, SAP API Policy — capire","checked":"2026-10-15","quote":"CAP-level agents are intended only for exposing custom CAP application services."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java","checked":"2026-10-15","quote":"CAP Java doesn't yet have a persistent chat history. Instead, it stores conversation history in volatile memory."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, tools","checked":"2026-10-15","quote":"Bound actions and bound functions aren't supported yet."},{"url":"https://cap.cloud.sap/docs/guides/ai/xtravels-sample","title":"The XTravels Sample for AI — capire","checked":"2026-10-15","quote":"The XTravels sample demonstrates how to integrate and use multiple MCP services and CAP-level agents in a cohesive travel booking scenario."},{"url":"https://cap.cloud.sap/docs/guides/ai/","title":"Native AI — capire","checked":"2026-09-27","quote":"CAP provides intrinsic support for integrating native AI capabilities, including the use of MCP services, CAP-level Agents, and Vector Embeddings."}],"relationship":"unassessed","note":"Relationship unassessed: capire states what the plugin ships and what it plans, and no source read here gives the history between the plugin and the independent entries."},"coverage_by_flavor":{"node":{"state":"core-and-community","assessed_at":"2026-10-15","relationship":"unassessed","what_core_does":"[@cap-js/agents](artifact:cap-js-agents) is the whole answer here: @agent on a service definition serves the agent over A2A with the service's own entities and actions as MCP tools, @agent.hitl pauses an action until a person approves it, short-term memory sits in the connected primary database, quotas are enforced per tenant and per user, and audit events and OpenTelemetry metrics are emitted when [@cap-js/audit-logging](artifact:cap-js-audit-logging) and [@cap-js/telemetry](artifact:cap-js-telemetry) are installed. In the development profile the plugin reads model credentials from a local Claude Code or OpenCode installation, so a first run needs no configuration.","where_it_stops":"At the generic index.html chat preview, which capire marks experimental and for local development, and at the plugin's own harness: the features capire lists as still to come include agent memory across sessions, alternative harnesses, custom-coded agents, evals-based testing and file I/O.","community_adds":"[@mi8y/cds-langgraph-persistence](artifact:mi8y-cds-langgraph-persistence) and [@mi8y/cap-agents-memory](artifact:mi8y-cap-agents-memory) carry LangGraph's own state inside CDS, one thread at a time and across threads, [cds-agents](artifact:nagarjundas1994-aiagents-cds-agents) hands a running service to LangChain or LangGraph as tools from outside it, and [cap-agent-ui5-webui](artifact:lemaiwo-cap-agent-ui5-webui) serves a UI5 chat client against the A2A endpoints.","sources":[{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents — capire","checked":"2026-10-15","quote":"the plugin auto-generates MCP tools from the service's entities and actions, creates a ReAct loop, and serves it via A2A protocol"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#using-agent-hitl","title":"CAP-level Agents, Using @agent.hitl — capire","checked":"2026-10-15","quote":"Annotate a CDS action with `@agent.hitl` to require human approval before the agent may execute it."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#persistence","title":"CAP-level Agents, Persistence — capire","checked":"2026-10-15","quote":"The CAP-based agent harness provides short-term memory out-of-the-box via the connected primary database"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#automatic-config","title":"CAP-level Agents, Automatic Config — capire","checked":"2026-10-15","quote":"the plugin uses the pre-configured `cds.requires.llm: auto` config option, which automatically fetches required/missing credentials from given local installations of Claude Code or OpenCode, if any"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#using-chat-preview","title":"CAP-level Agents, Using Chat Preview — capire","checked":"2026-10-15","quote":"A rudimentary experimental chat preview is provided in the generic index.html page"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#more-to-come","title":"CAP-level Agents, More to come — capire","checked":"2026-10-15","quote":"Agent Memory – enabling agents to maintain and utilize memory across sessions."}]},"java":{"state":"core-only","assessed_at":"2026-10-15","what_core_does":"[com.sap.cds:cds-adapter-agent](artifact:cap-java-cds-adapter-agent) turns an @agent-annotated Application Service into an A2A endpoint under /a2a/<service-path> with an agent card beside it. Its tools are a generic query tool that reads across the service's entities with CDS QL plus a tool for each unbound action or function, and the model comes from a named cds.ai.chat.models configuration the agent picks with @agent.llm, with aicore, ollama and mocked as the kinds.","where_it_stops":"Bound actions and bound functions are not tools yet, so an operation defined on an entity is out of the agent's reach. Conversation history is held in volatile memory, which capire states means every follow-up prompt has to be sent to the same server instance. @agent.hitl, persistent chat history, telemetry, quotas, content filtering, audit logging and data privacy are listed as not yet supported here.","note":"Core-only because a flavor is counted from the options that state it, and an artifact that does not say is never counted into a flavor.","sources":[{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java","checked":"2026-10-15","quote":"A CAP agent turns a CDS service into a conversational endpoint."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, A2A","checked":"2026-10-15","quote":"Agents speak the A2A protocol, so any A2A-compatible client can talk to them."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, endpoint","checked":"2026-10-15","quote":"By default the agent is served under `/a2a/<service-path>`, with its agent card available at the corresponding `.../.well-known/agent-card.json` endpoint."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, query tool","checked":"2026-10-15","quote":"A generic query tool allows the LLM to read data via CDS QL across all entities defined in the service."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, action tools","checked":"2026-10-15","quote":"Unbound actions and functions become individually callable tools, invoked by name."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, bound operations","checked":"2026-10-15","quote":"Bound actions and bound functions aren't supported yet."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, chat history","checked":"2026-10-15","quote":"CAP Java doesn't yet have a persistent chat history. Instead, it stores conversation history in volatile memory. Hence, you need to send all follow-up prompts to the same server instance."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, model configuration","checked":"2026-10-15","quote":"An agent picks its model configuration via the `@agent.llm` annotation, which defaults to the configuration named `llm`."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, model kinds","checked":"2026-10-15","quote":"The model provider: `aicore`, `ollama`, or `mocked`."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#served-out-of-the-box","title":"CAP-level Agents, Served out of the box — capire","checked":"2026-10-15","quote":"Persistent chat history, telemetry, quotas, content filtering, audit logging and data privacy features are not yet supported by CAP Java."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#using-agent-hitl","title":"CAP-level Agents, Using @agent.hitl — capire","checked":"2026-10-15","quote":"`@agent.hitl` is not yet supported by CAP Java"}]}},"framing_by_flavor":{"node":{"description":"On CAP Node.js the agent is a service. @agent on a service definition serves it over A2A, the service's own entities and actions are its tools, and the files beside the service definition — AGENTS.md and skills/*/SKILL.md — are where its identity and its workflows are written, instead of handlers."},"java":{"description":"On CAP Java the agent is a protocol adapter. @agent on an Application Service serves an A2A endpoint whose tools are a generic CDS QL query plus the service's unbound actions and functions, and the model is chosen by @agent.llm from a named cds.ai.chat.models configuration."}},"history":[{"date":"2026-08-31","field":"core_coverage.state","from":"left-open-on-purpose","to":"core-and-community","reason":"States renamed to describe who is present rather than to interpret intent. left-open-on-purpose asserted a motive; core-and-community states a fact, with relationship carrying the intent separately."},{"date":"2026-09-14","field":"ecosystems","from":"cap","to":"cap, btp","reason":"SAP-samples' btp-a2a-dispute-resolution, btp-agentic-ai-use-cases, btp-sourcing-decision-board, codejam-code-based-agents, smartrecruiters-ai-recruiting-custom-agent and the TechEd 2025 AI160, AI163 and AI165 workshops build agents on BTP with the generative AI hub, SAP Cloud SDK for AI, LangChain, LangGraph, CrewAI or Joule Studio's agent builder, none of them through CAP."},{"date":"2026-09-20","field":"core_coverage.where_it_stops","from":"The corpus holds an official [@cap-js/agents](artifact:cap-js-agents) alongside independent answers built on LangChain and LangGraph, and the relationship between them is not yet assessed. Naming it unassessed is the honest state — the alternative is guessing whether the core intends to own this ground or leave it.","to":"At the plugin's own harness and at what capire lists as still to come, evals-based agent testing, RAG and knowledge graphs, agent memory across sessions, file I/O, alternative harnesses and custom-coded agents among them. An agent built on LangChain or LangGraph keeps its own loop and state, which [@mi8y/cds-langgraph-persistence](artifact:mi8y-cds-langgraph-persistence) stores in CDS.","reason":"capire's CAP-level Agents guide and the CAP Java AI page now state what the core ships and what it plans, so the reading no longer has to say only that the ground is unassessed. The relationship stays unassessed: no retrieved document gives the history between the plugin and the independent entries."},{"date":"2026-09-21","field":"core_coverage.where_it_stops","from":"At the plugin's own harness and at what capire lists as still to come, evals-based agent testing, RAG and knowledge graphs, agent memory across sessions, file I/O, alternative harnesses and custom-coded agents among them. An agent built on LangChain or LangGraph keeps its own loop and state, which [@mi8y/cds-langgraph-persistence](artifact:mi8y-cds-langgraph-persistence) stores in CDS.","to":"At the plugin's own harness and at what capire lists as still to come, evals-based agent testing, RAG and knowledge graphs, agent memory across sessions, file I/O, alternative harnesses and custom-coded agents among them. An agent built on LangChain or LangGraph keeps its own loop and state, which [@mi8y/cds-langgraph-persistence](artifact:mi8y-cds-langgraph-persistence) stores in CDS for one thread and [@mi8y/cap-agents-memory](artifact:mi8y-cap-agents-memory) keeps across threads.","reason":"The boundary names agent memory across sessions among what capire lists as still to come, then named only the thread-scoped checkpointer as what an independent agent stores in CDS. [@mi8y/cap-agents-memory](artifact:mi8y-cap-agents-memory), proposed in the same batch, implements LangGraph's Store across threads, so the sentence now says which of the two holds which state. Nothing was re-read on the core's side: the capire sources, the state, the relationship and assessed_at are unchanged."},{"date":"2026-09-27","field":"core_coverage","from":"without the page","to":"cites the page","reason":"capire audit 2026-09-27, judgement pages read once more: the XTravels sample page shows CAP-level agents and MCP services together; the sample now demonstrates both capabilities."},{"date":"2026-09-27","field":"core_coverage.sources","from":"without the Native AI page","to":"cites it","reason":"capire audit 2026-09-27, link-only pages read a fourth time: CAP-level agents are one of the three things SAP frames as CAP's native AI support, in the one sentence the section's index says of its own."},{"date":"2026-09-27","field":"facets","from":"no protocols facet","to":"a protocols facet, many, from the shared protocol vocabulary","reason":"A role in a design is filled from evidence that an option speaks what the fixed part exposes, and that join runs over one protocol vocabulary (docs/concepts/design-roles-and-interfaces.md, P2). Declared here so options can state it; absent stays \"does not say\"."},{"date":"2026-10-15","field":"core_coverage.what_core_does, where_it_stops, community_adds, sources, assessed_at","from":"the plugin, @agent.hitl, chat history, quotas, audit events and MLflow, with the independent LangGraph packages named in where_it_stops","to":"AGENTS.md and SKILL.md, subagents over A2A, the LangChain or Pi harness, the experimental chat preview, the Java module's own boundary and SAP's API Policy statement, with the independent options moved into community_adds","reason":"capire's CAP-level Agents guide re-read on 2026-10-15 states several things the reading did not carry: that an AGENTS.md next to the service definition replaces the auto-generated ReAct agent and SKILL.md files hold single workflows, that an imported @agent-ified service is reached as a subagent over A2A, that the harness underneath is LangChain or Pi, that the chat preview in index.html is experimental and for local development, and — in a caution at the head of the page — that CAP-level agents are intended only for exposing custom CAP application services and are not an SAP-endorsed pathway for agentic access to SAP Application APIs. The CAP Java page adds that bound actions and bound functions are not tools yet. The independent packages moved out of where_it_stops into community_adds: the SAP-ships fields describe the official implementation and its limits and must not name what fills a gap."},{"date":"2026-10-15","field":"coverage_by_flavor, framing_by_flavor","from":null,"to":"node and java, each with its own coverage and framing","reason":"Every capability of a door exists in each of its flavors, and here the two answers differ in what they carry rather than in wording: Node.js has the approval gate, the database-backed short-term memory, quotas, audit logging, telemetry and the local credential pickup, and Java has none of them, holds conversation history in volatile memory and cannot make a bound action a tool. Java is core-only because no community option in the graph states that flavor."},{"date":"2026-10-15","field":"facets","from":"protocols","to":"protocols, brings, harness, state_store, human_approval","reason":"The options behind this door answer different halves of the concern — one serves an agent, one hands a running service to a framework as tools, two hold state, one serves a screen — and the list read as eight alternatives. Four properties, scoped to CAP, make the documented differences comparable: what the option brings, which agent framework it is written for, where the state between turns is kept, and whether an action can be held for a person's approval. Each rests on a sentence in the option's own documentation, and the last two carry the stated negatives on the Java side."},{"date":"2026-10-15","field":"normative_relevance","from":null,"to":"instrument:sap-api-policy-v4-2026a, prominent, section 2.2.2","reason":"capire's own guide opens with a caution naming section 2.2.2 of the SAP API Policy and stating that CAP-level agents are not an SAP-endorsed architecture or pathway for exposing, proxying or providing agentic access to SAP Application APIs. That is the core's statement about where this capability may be pointed, so it belongs beside the framing rather than only in the boundary sentence. Recorded as context to inspect, not as a coverage assessment."},{"date":"2026-10-26","field":"core_coverage.what_core_does, coverage_by_flavor.java.what_core_does","from":"one tool per unbound action or function","to":"a tool for each unbound action or function","reason":"Reassessed against the graph (check:capabilities): the phrase read as a count; the same fact is worded as a rule."},{"date":"2026-10-26","field":"core_coverage.community_adds","from":"LangGraph persistence packages, cds-agents and the UI5 chat client","to":"adds the Deep Agents filesystem backend over a document repository, and SAP's Joule Studio and SAP Joule as the SAP-managed route beyond the CAP plugin","reason":"Reassessed against the graph (check:capabilities): @mi8y/cap-agents-sdm-backend (file operations for a Deep Agents agent, which capire lists as file I/O still to come) and the Joule Studio and SAP Joule entries that serve CAP arrived after the block was last looked at and the text never named them."},{"date":"2026-10-26","field":"core_coverage.note","from":"Relationship unassessed: capire states what the plugin ships and what it plans, and nothing retrieved says how the independent entries here came to stand beside it.","to":"Relationship unassessed: capire states what the plugin ships and what it plans, and no source read here gives the history between the plugin and the independent entries.","reason":"Reassessed against the graph (check:capabilities): the old wording read as an absence claim about retrieval; the relationship stays unassessed and no value was picked."},{"date":"2026-10-26","field":"coverage_by_flavor.java.note","from":"Core-only because no option in the graph states this flavor: every community entry behind the CAP door declares Node.js, and an artifact that does not say is never counted into a flavor.","to":"Core-only because a flavor is counted from the options that state it, and an artifact that does not say is never counted into a flavor.","reason":"Reassessed against the graph (check:capabilities): the old note claimed an absence in the corpus that moves with it; the state is unchanged."},{"date":"2026-10-26","field":"coverage_by_ecosystem.btp.what_core_does, coverage_by_ecosystem.btp.note","from":"Joule Studio defines an agent's instructions and tools in the browser; note: Every entry behind this door is an SAP sample or workshop, which demonstrate and do not provide","to":"[Joule Studio](artifact:sap-joule-studio) linked and [SAP Joule](artifact:sap-joule) named; the note says SAP's Joule Studio and Joule are the SAP entries and samples and workshops demonstrate","reason":"Reassessed against the graph (check:capabilities): sap-joule-studio and sap-joule, both sap-official, now provide this capability behind the BTP door, so the note's claim about every entry no longer held. The state stays core-only: no provider of another origin counts for the door."}],"changed_in":[{"version":"@cap-js/agents 0.9.1","date":"2026-08-14","what_changed":"The core gained a first-party plugin for building an agent into a CAP service. Before it, an agent-callable interface into an application meant reaching for an independent framework such as LangChain or LangGraph, wired up by hand; after it, `@agent` on a service auto-generates a tool-calling loop from the service's own entities and actions, or a sibling AGENTS.md plus skill files can define the agent's behaviour explicitly, with audit logging and OpenTelemetry export wired in as peer dependencies rather than left to the author.","invalidates":"Guidance that CAP has no SAP-official building block for an in-app agent and that LangChain or LangGraph wiring is the only route. Since August 2026 there is a sap-official plugin for it, though how it relates to those independent frameworks is not yet assessed here.","source":{"url":"https://github.com/cap-js/agents","title":"cap-js/agents — README","checked":"2026-09-08","quote":"CDS plugin for building agents based on the A2A protocol."},"applies_to":{"ecosystems":["cap"]}}],"normative_relevance":[{"instrument":"instrument:sap-api-policy-v4-2026a","kind":"policy","prominence":"prominent","sections":["2.2.2"],"applies_when":"An agent built into an application reaches SAP Application APIs, whether directly or through tools generated from a service that proxies them.","note":"capire's own guide states that CAP-level agents are intended only for exposing custom CAP application services, and names section 2.2.2 for the agentic-access provisions. Check which endpoints the agent's tools end up calling, and consult SAP's reference architectures for the endorsed routes.","sources":[{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#sap-api-policy","title":"CAP-level Agents, SAP API Policy — capire","checked":"2026-10-15","quote":"They are NOT an SAP-endorsed architecture or pathway for exposing, proxying, or providing agentic access to SAP Application APIs"},{"url":"https://help.sap.com/doc/sap-api-policy/latest/en-US/API_Policy_latest.pdf","title":"SAP API Policy v.4.2026a","checked":"2026-09-16","quote":"SAP prohibits API use for: (a) interaction or integration with (semi-) autonomous or generative AI systems"}]}],"coverage_by_ecosystem":{"btp":{"state":"core-only","assessed_at":"2026-09-14","what_core_does":"Two paths. [Joule Studio](artifact:sap-joule-studio) defines an agent's instructions and tools in the browser; a pro-code agent uses the SAP Cloud SDK for AI with a framework such as LangGraph or CrewAI, reaches models through the generative AI hub, and exposes an A2A endpoint that [SAP Joule](artifact:sap-joule) can call.","where_it_stops":"At the framework. The SDK reaches the models and A2A makes the agent callable, while the agent loop, its state between turns and the wiring of its tools belong to whichever framework the project picks, and none of those frameworks is an SAP component.","note":"The SAP entries here are Joule Studio and Joule; the SAP samples and workshops demonstrate and do not provide. Core-only rests on the SAP Architecture Center's pages. The Joule Studio labs read here ran on a pre-release agent builder.","sources":[{"url":"https://architecture.learning.sap.com/docs/ref-arch/7b6426","title":"Bring Your Own Agent — SAP Architecture Center","checked":"2026-09-14","quote":"Pro-code agents on SAP BTP are built using the SAP Cloud SDK for AI, which provides seamless integration with SAP's Generative AI Hub, foundation models and enterprise services."},{"url":"https://architecture.learning.sap.com/docs/ref-arch/219c07","title":"Building AI Agents with Joule Studio — SAP Architecture Center","checked":"2026-09-14","quote":"Visual development environment for defining agent instructions, configuring tools, orchestrating workflows, and specifying human-in-the-loop interactions."}]}},"framing_by_ecosystem":{"btp":{"description":"On BTP an agent is its own application, built in Joule Studio or in code against the generative AI hub, deployed to Cloud Foundry or Kyma, and reached from Joule over A2A. [@cap-js/agents](artifact:cap-js-agents) answers the same concern inside a CAP service."}},"drafted_with_ai":true,"facets":[{"key":"brings","label":"What it brings","kind":"many","ecosystems":["cap"],"values":["Agent served from the service","Loop in application code","Tools for another framework","State between turns","Chat user interface"],"group":"Shape"},{"key":"harness","label":"Agent framework","kind":"many","ecosystems":["cap"],"values":["LangChain","LangGraph","Pi"],"group":"Harness"},{"key":"protocols","label":"Protocols","kind":"many","vocabulary":"protocol","group":"Reach"},{"key":"state_store","label":"Where state is kept","kind":"one","ecosystems":["cap"],"values":["In the application database","In volatile memory"],"group":"Between turns"},{"key":"human_approval","label":"Approval before an action","kind":"flag","ecosystems":["cap"],"group":"Between turns"}]},"sap_delivery":{"door":"cap","all":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:cap-js-agents","name":"@cap-js/agents","json":"/artifacts/cap-js-agents.json"},{"ref":"artifact:cap-java-cds-adapter-agent","name":"com.sap.cds:cds-adapter-agent","json":"/artifacts/cap-java-cds-adapter-agent.json"}]},"by_flavor":{"node":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:cap-js-agents","name":"@cap-js/agents","json":"/artifacts/cap-js-agents.json"}]},"java":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:cap-java-cds-adapter-agent","name":"com.sap.cds:cds-adapter-agent","json":"/artifacts/cap-java-cds-adapter-agent.json"}]}}},"edges":{"use_cases":[{"id":"answer-a-users-question-inside-a-cap-application","name":"Answer a user's question inside the application","capability":"capability:agent-tooling","ecosystem":"cap","flavors":["node","java"],"outcome":"Someone using the application asks in plain words and the application answers from its own services, with the agent running inside the deployed application rather than in the asker's own AI client.","boundary":"Covers the agent that runs in the application, the tools it gets from the service and the endpoint it is reached at. Reaching a model is [LLM integration](capability:llm-integration), exposing the same service to somebody else's agent is [MCP servers](capability:mcp-servers), who may read a row is [authorization](capability:authorization), and the screen the conversation happens on is assessed on its own. Which entitlements a subaccount holds is a project question and is not assessed here.","origin":"Editorial hypothesis while re-assessing this capability's CAP coverage on 2026-10-15. capire's CAP-level Agents guide walks exactly this outcome on the bookshop sample, asking it to list books and to order one.","requirement_dimensions":["Whether the application runs on Node.js or Java","Whether an operation defined on an entity has to be callable, rather than only an unbound action or function","Whether the agent's instructions have to be written out rather than generated from the model","Whether an SAP AI Core binding exists, or a local model configuration is enough","Whether the service's tools end up reaching SAP Application APIs"],"needs":[{"any":[{"key":"brings","value":"Agent served from the service"},{"key":"brings","value":"Loop in application code"}]}],"contributions":[{"ref":"artifact:cap-js-agents","role":"agent harness in the service","state":"documented","flavors":["node"],"description":"@agent on the service definition is the whole setup: the plugin generates MCP tools from that service's entities and actions, runs a ReAct loop over them and serves the result over A2A. capire's own walk shows the two halves of this outcome — asked to list books the agent calls the generated describe and query tools, and asked to order one it calls the service's action through the call tool. An AGENTS.md next to the service definition replaces the generated agent with one built from the directory, which is the route to take when the answer has to follow written instructions rather than whatever the model infers from the model.","remaining_work":"Decide which service the agent is put on and what its projection exposes, since the tools come from that model. Configure a model: the development profile reads credentials from a local Claude Code or OpenCode installation, and production and hybrid use the aicore kind against SAP AI Core. Where the answer has to be deterministic, the AGENTS.md and the skill files are the project's to write.","sources":[{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents — capire","checked":"2026-10-15","quote":"the plugin auto-generates MCP tools from the service's entities and actions, creates a ReAct loop, and serves it via A2A protocol"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#autowired-tools-via-mcp","title":"CAP-level Agents, Autowired Tools via MCP — capire","checked":"2026-10-15","quote":"when asked to \"list books\", the agent queried the service's `Books` entity via the `query` tool"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#autowired-tools-via-mcp","title":"CAP-level Agents, Autowired Tools via MCP — capire","checked":"2026-10-15","quote":"when asked to \"order wuthering heights\", the agent eventually invoked the appropriate service action via the `call` tool"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#optional-agentsmd","title":"CAP-level Agents, Optional: AGENTS.md — capire","checked":"2026-10-15","quote":"When present, it replaces the generic default agentification: instead of the auto-generated ReAct agent, the plugin auto-builds the agent from the directory at startup — no custom handlers required."}]},{"ref":"artifact:cap-java-cds-adapter-agent","role":"agent adapter in the service","state":"documented","flavors":["java"],"description":"The same annotation on an Application Service, with the tools derived differently: one generic query tool that reads across the service's entities with CDS QL, plus one callable tool per unbound action or function. The model comes from a named cds.ai.chat.models configuration the agent picks with @agent.llm, and the endpoint is A2A at /a2a/<service-path> with an agent card beside it.","remaining_work":"Add the module to srv/pom.xml and configure a chat model. An operation defined on an entity has to be reachable some other way, since capire states bound actions and bound functions are not tools yet; and because conversation history is held in volatile memory, a question and its follow-up have to land on the same server instance.","sources":[{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java","checked":"2026-10-15","quote":"A CAP agent turns a CDS service into a conversational endpoint."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, query tool","checked":"2026-10-15","quote":"A generic query tool allows the LLM to read data via CDS QL across all entities defined in the service."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, action tools","checked":"2026-10-15","quote":"Unbound actions and functions become individually callable tools, invoked by name."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, bound operations","checked":"2026-10-15","quote":"Bound actions and bound functions aren't supported yet."}]},{"ref":"artifact:nagarjundas1994-aiagents-cds-agents","role":"tool layer for a framework, and a ready-made agent","state":"conditional","flavors":["node"],"description":"Comes at the outcome from outside the application. CAPToolkit generates the tools a LangChain or LangGraph agent calls from a CAP service's model, and CAPAgent is a ready-made ReAct agent over them. Because it is a client library pointed at a service that is already running, the service answering the question need not be one the project owns — the README draws that line against @cap-js/mcp, which requires owning the application and redeploying it.","conditions":["A Node.js host installs the library with zod, @langchain/core and a model package, as its install line names.","It is pointed at a running OData V4 service: ODataExecutor is the client underneath.","The agent loop is the project's own, unless CAPAgent is used, which the README scopes to demos and small apps."],"remaining_work":"Choose a tool strategy of minimal, crud, actions or full, which is where the README's four-hundred-tool argument bites, and build the loop, the prompt and the conversation's state, none of which this library carries.","sources":[{"url":"https://github.com/Nagarjundas1994-AiAgents/cds-agents","title":"cds-agents — README, opening line","checked":"2026-10-15","quote":"Turn any SAP CAP service into governed AI capabilities for LangChain, LangGraph, MCP, and enterprise agents."},{"url":"https://github.com/Nagarjundas1994-AiAgents/cds-agents","title":"cds-agents — README, producer against consumer","checked":"2026-10-15","quote":"The difference is producer vs consumer. `@cap-js/mcp` is a plugin — you must own the CAP app, add it, and redeploy. cds-agents is a client library pointed at something already running."},{"url":"https://github.com/Nagarjundas1994-AiAgents/cds-agents","title":"cds-agents — README, CAPAgent","checked":"2026-10-15","quote":"Ready-made ReAct agent for demos and small apps."},{"url":"https://github.com/Nagarjundas1994-AiAgents/cds-agents","title":"cds-agents — README, tool strategy","checked":"2026-10-15","quote":"toolStrategy: 'minimal' | 'crud' | 'actions' | 'full'"},{"url":"https://github.com/Nagarjundas1994-AiAgents/cds-agents","title":"cds-agents — README, install","checked":"2026-10-15","quote":"npm install cds-agents zod @langchain/core @langchain/openai"}]},{"ref":"artifact:a2a-plugin","role":"A2A exposure for an annotated service","state":"unknown","flavors":["node"],"description":"The entry records that @a2a opts a service in and an agent handler answers, which would place it on this outcome, but nothing was retrieved on 2026-10-15 to say what the handler is given or what runs the loop.","remaining_work":"Read the package's own documentation. npm answered 403 to the one address the entry carries and the package declares no public repository, so the README could not be reached in this pass."}],"readings":[{"ref":"content:building-an-llm-agent-using-cap","relevance":"The Node.js route before the plugin existed — AI Core through the SAP AI SDK, then LangChain for the agent and its tools — which is the shape an application still owns if it does not take the plugin's harness.","flavors":["node"]},{"ref":"content:building-an-llm-agent-in-cap-java-with-spring-ai","relevance":"The same walk on Java with Spring AI, written by the same author as its counterpart; it opens on which framework does what and what is left to the project.","flavors":["java"]},{"ref":"content:sap-s-api-policy-on-ai-agents-what-it-prohibits-allows-and-leaves-open","relevance":"Reads the policy section capire's own caution names against the endorsed routes, which is the boundary this outcome meets as soon as a generated tool reaches an SAP Application API."}],"unknowns":["Whether AGENTS.md and SKILL.md files work on CAP Java. capire's CAP-level Agents guide documents them with no Java warning, while the warnings on that page name other features explicitly and the CAP Java page does not mention the files at all, so nothing read here settles it.","a2a-plugin could not be read: npm answered 403 on 2026-10-15 and the package declares no public repository, so its answer to this outcome is unknown rather than absent.","Source-read assessment. Nothing here was run, and no page retrieved shows an option answering this outcome in a deployed application; capire's bookshop walk and the XTravels sample are local runs.","Options behind this door that are not named here are unassessed for this outcome; missing evidence is not unsupported behaviour."],"assessed_at":"2026-10-15","drafted_with_ai":true,"omitted_contributions":0,"assessment_kind":"documented-contributions"},{"id":"give-a-cap-agent-a-chat-screen-in-the-application","name":"Give the agent a chat screen in the application","ecosystem":"cap","outcome":"A user of the application opens a screen in it and talks to the agent there, instead of reaching it from a separate AI client or over HTTP by hand.","boundary":"Covers the screen and how it finds and talks to the agent. The agent itself, its tools and its endpoint are the outcome assessed separately; who may open the screen is [authorization](capability:authorization), and serving the files from an HTML5 repository or an approuter is [deployment](capability:deployment).","capability":"capability:agent-tooling","origin":"curated","assessed_at":"2026-10-24","drafted_with_ai":true,"contributions":[{"ref":"artifact:cap-js-agents","role":"the preview the plugin itself serves","state":"conditional","flavors":["node"],"description":"The plugin puts a chat preview in the generic index.html page, next to each A2A endpoint, and capire's walk uses it to ask the bookshop agent to list books and to order one. capire marks it Alpha in the heading and calls it rudimentary and experimental in the sentence under it.","conditions":["Local development: capire states the preview can be used in local development, and marks it experimental."],"remaining_work":"A screen for anyone other than the developer running cds watch is the project's own, or another option's. Nothing retrieved says the preview is served outside the development profile.","sources":[{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#using-chat-preview","title":"CAP-level Agents, Using Chat Preview — capire","checked":"2026-10-15","quote":"A rudimentary experimental chat preview is provided in the generic index.html page → see the Preview links next to the A2A endpoints – which can be used in local development."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#using-chat-preview","title":"CAP-level Agents, Using Chat Preview — capire","checked":"2026-10-15","quote":"open the chat preview in your browser at http://localhost:4004/a2a/browse/preview/ to interact with the agent"}]},{"ref":"artifact:lemaiwo-cap-agent-ui5-webui","role":"the screen, installed as a plugin","state":"conditional","flavors":["node"],"description":"Installing the plugin is the whole setup: it serves a freestyle SAPUI5 TypeScript chat client same-origin from the CDS server and discovers the services carrying @agent, with no wiring, no copied files and no approuter change. With one agent the client connects to it directly; with several it renders a picker, and switching there starts a new conversation because each agent owns its own contextId and task history. The README also covers the deployed case, the HTML5 Application Repository wiring and what the plugin does not remove from an MTA, and ships a scripted model for testing an approval gate, because the mock bundled with the core plugin always calls the read tool and can never call an action.","conditions":["[@cap-js/agents](artifact:cap-js-agents) serves the agents: the README pins it to exactly 0.9.1, says that package is pre-1.0, and says this plugin inherits that instability and to expect breakage on upgrade.","The agent is reached over A2A: the README states the plugin does not speak anything other than A2A as @cap-js/agents serves it."],"remaining_work":"Decide how the screen is served and reached in a deployment, which the README's own BTP and MTA sections cover rather than automate, and who may open it. A conversation cannot be carried from one agent to another, by the README's own statement, so a project that wants one thread across several agents has that to solve.","sources":[{"url":"https://github.com/lemaiwo/cap-agent-ui5-webui","title":"lemaiwo/cap-agent-ui5-webui — README, opening line","checked":"2026-10-15","quote":"A SAP CAP plugin that gives any CAP project a working A2A protocol chat UI by installing it — no wiring, no copying files, no approuter changes."},{"url":"https://github.com/lemaiwo/cap-agent-ui5-webui","title":"lemaiwo/cap-agent-ui5-webui — README, what it serves","checked":"2026-10-15","quote":"it serves a freestyle SAPUI5 TypeScript chat client, same-origin from your CDS server, that talks to whichever of your services carry the `@agent` annotation"},{"url":"https://github.com/lemaiwo/cap-agent-ui5-webui","title":"lemaiwo/cap-agent-ui5-webui — README, Multi-agent behaviour","checked":"2026-10-15","quote":"More than one — the UI renders a picker. Switching agents starts a new conversation. Each agent owns its own `contextId` and task history, so there is no meaningful way to carry a conversation across agents."},{"url":"https://github.com/lemaiwo/cap-agent-ui5-webui","title":"lemaiwo/cap-agent-ui5-webui — README, the pin","checked":"2026-10-15","quote":"`@cap-js/agents` is pinned to exactly `0.9.1` — it is pre-1.0, days old at the time of writing, and its own README marks areas such as connectivity and content filtering as experimental."},{"url":"https://github.com/lemaiwo/cap-agent-ui5-webui","title":"lemaiwo/cap-agent-ui5-webui — README, What this is / is not","checked":"2026-10-15","quote":"This plugin serves the chat UI and discovers your agents; it is not a general chat framework and does not speak anything other than A2A as `@cap-js/agents` serves it."},{"url":"https://github.com/lemaiwo/cap-agent-ui5-webui","title":"lemaiwo/cap-agent-ui5-webui — README, testing the approval gate","checked":"2026-10-15","quote":"That means any human-in-the-loop approval flow you've built — an action annotated `@agent.hitl`, gated behind Approve/Reject — is unreachable under the bundled mock."}]},{"ref":"artifact:lemaiwo-btp-agent","role":"the screen written into the project it talks to","state":"documented","flavors":["node"],"description":"The screen is a freestyle UI5 TypeScript app in `app/chat/` of the same monorepo as the agent, so there is no discovery step: it calls the CDS action the CAP service wraps the agent in, and the tokens of the answer come back over a WebSocket while the model writes them. At dev time [cds-plugin-ui5](artifact:ui5-community-cds-plugin-ui5) serves it from the CDS server, so one `cds watch` puts the service and the screen on localhost:4004 together; deployed, it is its own MTA module built into the [HTML5 Application Repository](artifact:btp-html5-application-repository) and served through the [approuter](artifact:sap-approuter). Who may use it is the MCPViewer, MCPEditor and MCPAdmin roles from `xs-security.json`, assigned after the deploy.","remaining_work":"The screen is part of this repository and is published as nothing else, so taking it means cloning the monorepo and keeping the CDS action and the WebSocket stream its controller is written against. It is the chat surface for this project's own agent, so a project with an agent behind a different endpoint rewires the controller.","remaining_kinds":["application-code"],"sources":[{"url":"https://raw.githubusercontent.com/lemaiwo/btp-agent/main/CLAUDE.md","title":"lemaiwo/btp-agent — CLAUDE.md, Key Design Decisions","checked":"2026-10-24","quote":"Freestyle UI5 TypeScript app in `app/chat/`, integrated via `cds-plugin-ui5` for dev-time"},{"url":"https://raw.githubusercontent.com/lemaiwo/btp-agent/main/CLAUDE.md","title":"lemaiwo/btp-agent — CLAUDE.md, Key Design Decisions","checked":"2026-10-24","quote":"WebSocket support for real-time token output to the chat UI"},{"url":"https://community.sap.com/t5/technology-blog-posts-by-members/agentic-ai-on-btp-a-single-agent-with-langgraph/ba-p/14388025","title":"Agentic AI on BTP: a Single Agent with LangGraph — SAP Community, the shell","checked":"2026-10-24","quote":"A CAP service wraps the agent behind a CDS action and streams tokens over WebSocket, so the UI feels responsive."},{"url":"https://community.sap.com/t5/technology-blog-posts-by-members/agentic-ai-on-btp-a-single-agent-with-langgraph/ba-p/14388025","title":"Agentic AI on BTP: a Single Agent with LangGraph — SAP Community, local development","checked":"2026-10-24","quote":"git clone https://github.com/lemaiwo/btp-agent.git cd btp-agent npm install cds watch # serves the CAP app + chat UI on http://localhost:4004"},{"url":"https://community.sap.com/t5/technology-blog-posts-by-members/agentic-ai-on-btp-a-single-agent-with-langgraph/ba-p/14388025","title":"Agentic AI on BTP: a Single Agent with LangGraph — SAP Community, build and deploy","checked":"2026-10-24","quote":"After deploy, assign the MCPViewer / MCPEditor / MCPAdmin role collections from xs-security.json to the users who should use the chat."},{"url":"https://community.sap.com/t5/technology-blog-posts-by-members/agentic-ai-on-btp-a-single-agent-with-langgraph/ba-p/14388025","title":"Agentic AI on BTP: a Single Agent with LangGraph — SAP Community, build and deploy","checked":"2026-10-24","quote":"The MTA ships nine modules (approuter, CAP srv, UI5 chat, HANA deployer, and four MCP-server apps) and binds xsuaa, HANA HDI, destination, connectivity, html5-repo (host+runtime) and AI Core (extended plan)."}]}],"readings":[],"omitted_contributions":0,"assessment_kind":"documented-contributions"},{"id":"keep-an-agent-conversation-after-a-cap-server-restarts","name":"Keep a conversation after the server restarts","capability":"capability:agent-tooling","ecosystem":"cap","flavors":["node","java"],"outcome":"A conversation with the agent survives a restart, and a follow-up that lands on another instance carries on where the last one left off instead of starting again.","boundary":"Covers the state of one conversation between turns. What the agent remembers from an earlier conversation is a separate outcome; which database holds the rows is [database connectors](capability:database-connectors), keeping one tenant's rows apart is [multitenancy](capability:multitenancy), and how long a conversation may be kept is a data-protection question this record does not assess.","origin":"Editorial hypothesis while re-assessing this capability's CAP coverage on 2026-10-15. capire states the answer for one flavor and states its absence for the other in the same guide, and an independent package exists for the framework case.","requirement_dimensions":["Whether the application runs on Node.js or Java","Whether more than one instance serves the agent","Whether the agent's loop is the core plugin's or the project's own on LangGraph","Which database the application runs on"],"needs":[{"key":"state_store","value":"In the application database"}],"contributions":[{"ref":"artifact:cap-js-agents","role":"short-term memory in the primary database","state":"documented","flavors":["node"],"description":"The harness keeps the conversation's short-term memory in the database the application is already connected to — SQLite in local development, SAP HANA in production — so conversational context and workflow checkpoints are written where the application's own data is. capire states this is what lets an agent resume a session after a server restart, and names clustered environments in the same sentence.","remaining_work":"Nothing is installed for it; what remains is the deployment the claim depends on, a database the instances share rather than a local file, and a decision about how long a stored conversation is kept.","sources":[{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#persistence","title":"CAP-level Agents, Persistence — capire","checked":"2026-10-15","quote":"The CAP-based agent harness provides short-term memory out-of-the-box via the connected primary database – that is in SQLite in local dev, SAP HANA in production."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#persistence","title":"CAP-level Agents, Persistence — capire","checked":"2026-10-15","quote":"This allows agents to persist conversational context and workflow checkpoints, so that they can resume sessions seamlessly even after server restarts, as well as boosting scalability in clustered environments."}]},{"ref":"artifact:cap-java-cds-adapter-agent","role":"agent adapter in the service","state":"explicitly-unsupported","flavors":["java"],"description":"capire states that CAP Java has no persistent chat history yet and holds the conversation in volatile memory, and draws the consequence itself: every follow-up prompt has to be sent to the same server instance. The guide for the plugin lists persistent chat history among the features not yet supported there.","remaining_work":"A conversation that has to survive anything is the application's own problem here, and nothing retrieved describes a supported place to put it or a way to hand it back to the adapter.","sources":[{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, chat history","checked":"2026-10-15","quote":"CAP Java doesn't yet have a persistent chat history. Instead, it stores conversation history in volatile memory. Hence, you need to send all follow-up prompts to the same server instance."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#served-out-of-the-box","title":"CAP-level Agents, Served out of the box — capire","checked":"2026-10-15","quote":"Persistent chat history, telemetry, quotas, content filtering, audit logging and data privacy features are not yet supported by CAP Java."}]},{"ref":"artifact:mi8y-cds-langgraph-persistence","role":"checkpointer for a LangGraph agent","state":"conditional","flavors":["node"],"description":"Answers the same outcome for an agent whose loop is LangGraph's rather than the plugin's: checkpoints are thread-scoped state written through CDS, used to resume a workflow, keep the conversation's history and travel back through it.","conditions":["The agent runs on LangGraph, whose checkpointer interface this implements.","@sap/cds 10 or higher, which its README states as a requirement.","The README now says SAP's own @cap-js/agents includes checkpointer support and to prefer it for new applications, keeping this package available for its existing implementation."],"remaining_work":"The loop, the graph and the model stay the project's: this is the one piece of a LangGraph agent that the package supplies.","sources":[{"url":"https://github.com/mi8y/cap-agents-addons/tree/main/packages/cds-langgraph-persistence","title":"@mi8y/cds-langgraph-persistence — README, opening line","checked":"2026-10-15","quote":"CDS-backed LangGraph checkpoint persistence for SAP CAP applications. Checkpoints are short-term, thread-scoped state used to resume workflows, retain conversation history, and support time travel."},{"url":"https://github.com/mi8y/cap-agents-addons/tree/main/packages/cds-langgraph-persistence","title":"@mi8y/cds-langgraph-persistence — README, prerequisite","checked":"2026-10-15","quote":"Requires `@sap/cds >= 10`."},{"url":"https://github.com/mi8y/cap-agents-addons/tree/main/packages/cds-langgraph-persistence","title":"@mi8y/cds-langgraph-persistence — README, what to prefer now","checked":"2026-10-15","quote":"SAP's official `@cap-js/agents` package now includes checkpointer support. Prefer it for new CAP agent applications. This package remains available for its existing CDS checkpointer implementation."}]}],"readings":[{"ref":"content:building-durable-ai-agents-cds-langgraph-persistence","relevance":"The argument behind the independent answer: treating an agent as an application makes a list of production requirements, and durability is the one this package was written for. Written before the core plugin had a checkpointer of its own.","flavors":["node"]}],"unknowns":["Which entities the core plugin's short-term memory writes, and whether a project can read or prune them. capire names the primary database and the two databases it means, and describes no model.","What the core plugin keeps for how long. capire's persistence section names short-term memory and calls it a foundation for long-term memory without stating a retention rule.","Whether the independent checkpointer and the core plugin's own can be used in one application. The README states which to prefer for a new application and nothing about running both.","Source-read assessment. No restart was performed and no clustered deployment was observed."],"assessed_at":"2026-10-15","drafted_with_ai":true,"omitted_contributions":0,"assessment_kind":"documented-contributions"},{"id":"recall-a-users-preference-in-a-later-agent-conversation","name":"Recall a user's preference in a later conversation","ecosystem":"cap","outcome":"Something the agent was told or worked out in one conversation is available in the next one, so a returning user does not state their preferences again.","boundary":"Covers what outlives one conversation and how the agent reads it back. Keeping one conversation's state between turns is the outcome assessed separately; finding records by meaning is [retrieval-augmented generation](capability:retrieval-augmented-generation), keeping one tenant's rows apart is [multitenancy](capability:multitenancy), and what may be kept about a person is a data-protection question this record does not assess.","capability":"capability:agent-tooling","origin":"curated","assessed_at":"2026-10-22","drafted_with_ai":true,"contributions":[{"ref":"artifact:cap-js-agents","role":"agent harness in the service","state":"explicitly-unsupported","flavors":["node"],"description":"capire lists agent memory across sessions among the features it says it is working on and plans to release in the near future, and its persistence section covers short-term memory only: conversational state and checkpoints in the connected primary database, for context across interactions within a session.","remaining_work":"What an agent recalls from an earlier conversation is the application's own to model, write and hand back to the agent, or another option's.","sources":[{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#more-to-come","title":"CAP-level Agents, More to come — capire","checked":"2026-10-15","quote":"Agent Memory – enabling agents to maintain and utilize memory across sessions."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#more-to-come","title":"CAP-level Agents, More to come — capire","checked":"2026-10-15","quote":"Following are features and areas we are currently working on, and plan to release in the near future"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#persistence","title":"CAP-level Agents, Persistence — capire","checked":"2026-10-15","quote":"The CAP-based harness provides short-term memory for agents by storing conversational and checkpoints in the connected primary database."}]},{"ref":"artifact:mi8y-cap-agents-memory","role":"cross-thread store","state":"conditional","flavors":["node"],"description":"CdsMemoryStore implements LangGraph's Store API against CDS, so the facts and preferences the agent keeps are rows in the application's own database and are shared across threads. Called inside a CAP request handler it inherits the active database and the tenant, and the CDS queries behind it run on CAP's SQLite, SAP HANA and PostgreSQL adapters. Its author describes it as an add-on to the core plugin, which keeps the model, the generated tools, the A2A endpoint and the checkpointing while this contributes the cross-session store and the tools that read it.","conditions":["The agent runs on LangGraph, whose Store interface this implements.","@sap/cds 10 or higher and @langchain/core 1 or higher, which its README states as requirements.","The store is called inside a CAP request handler, which is how it inherits the active database and tenant context.","Finding a memory by meaning rather than by stored value needs a LangChain Embeddings implementation passed in, and the generated Vector(1536) field resized to the chosen model."],"remaining_work":"Decide what is worth remembering and under which namespace, and write the prompt or the tool call that reads it back; the package supplies the store and its operations, not a policy for what an agent should keep.","sources":[{"url":"https://github.com/mi8y/cap-agents-addons/tree/main/packages/cap-agents-memory","title":"@mi8y/cap-agents-memory — README, opening line","checked":"2026-10-15","quote":"CDS-backed long-term memory for LangGraph. `CdsMemoryStore` implements LangGraph's Store API, so facts and preferences can be shared across threads while remaining within CAP's database and tenant context."},{"url":"https://github.com/mi8y/cap-agents-addons/tree/main/packages/cap-agents-memory","title":"@mi8y/cap-agents-memory — README, CAP notes","checked":"2026-10-15","quote":"Use the Store inside CAP request handlers to inherit the active database and tenant context."},{"url":"https://github.com/mi8y/cap-agents-addons/tree/main/packages/cap-agents-memory","title":"@mi8y/cap-agents-memory — README, CAP notes","checked":"2026-10-15","quote":"CAP-supported SQLite, SAP HANA, and PostgreSQL adapters are supported by the CDS query implementation."},{"url":"https://github.com/mi8y/cap-agents-addons/tree/main/packages/cap-agents-memory","title":"@mi8y/cap-agents-memory — README, prerequisites","checked":"2026-10-15","quote":"Requires @sap/cds >= 10 and @langchain/core >= 1"},{"url":"https://community.sap.com/t5/artificial-intelligence-blogs-posts/building-cap-agents-that-remember-announcing-cap-agents-memory-plugin/ba-p/14489784","title":"Building CAP Agents That Remember - Announcing `cap-agents-memory` Plugin — SAP Community","checked":"2026-10-15","quote":"The CAP Agent runtime still provides the model, generated tools, system prompt, middleware, A2A endpoint, and checkpointing. The memory add-on contributes only the cross-session Store and the tools that use it."}]},{"ref":"artifact:mi8y-cap-agents-sdm-backend","role":"file workspace in a document repository","state":"conditional","flavors":["node"],"description":"What the agent worked out in one conversation survives as a file rather than as a memory row. SdmBackend implements the Deep Agents filesystem protocol over an SAP Document Management repository, so the agent writes a document under a configured root folder and a later conversation finds it again with ls, glob or literal grep; its announcement states that a person can review and revise that file in between, and that instructions and skills kept in the repository are loaded when a new chat starts after the team updates them. The unit it keeps is a file under that root, so anything to be read back later has to be written into one and found there.","conditions":["An existing SDM CMIS repository, with the folder exposed as the virtual root already created; the backend neither validates nor provisions them.","@sap/cds 10 or higher and deepagents 1 or higher, which its README states as requirements, on CAP Node.js 10 or later.","Either a Cloud SDK destination pointing at the SDM API base URL or the Cloud Foundry service binding labelled sdm; the binding route exchanges the current CAP request's bearer JWT and fails without one, so background work needs an explicit trusted destination.","Text-based content: the author states that access to a file does not automatically provide native editing of Word documents, spreadsheets or PDFs."],"remaining_work":"Decide the workspace layout and write the instruction that has the agent save its work there and look for it next time; the package supplies the file operations, not a policy for what is worth keeping.","sources":[{"url":"https://community.sap.com/t5/artificial-intelligence-blogs-posts/cap-agents-that-collaborates-with-humans-announcing-cap-agents-sdm-backend/ba-p/14509181","title":"CAP Agents that collaborates with humans - Announcing `cap-agents-sdm-backend` plugin — SAP Community","checked":"2026-10-22","quote":"An agent can prepare a report, a team member (human) can review and revise it, and a later conversation can use the saved report as its starting point."},{"url":"https://community.sap.com/t5/artificial-intelligence-blogs-posts/cap-agents-that-collaborates-with-humans-announcing-cap-agents-sdm-backend/ba-p/14509181","title":"CAP Agents that collaborates with humans - Announcing `cap-agents-sdm-backend` plugin — SAP Community","checked":"2026-10-22","quote":"Teams can update that content in the repository and start a new chat to load the revised instructions."},{"url":"https://community.sap.com/t5/artificial-intelligence-blogs-posts/cap-agents-that-collaborates-with-humans-announcing-cap-agents-sdm-backend/ba-p/14509181","title":"CAP Agents that collaborates with humans - Announcing `cap-agents-sdm-backend` plugin — SAP Community","checked":"2026-10-22","quote":"@mi8y/cap-agents-sdm-backend implements the Deep Agents filesystem backend interface for SAP Document Management via CMIS Browser Binding"},{"url":"https://community.sap.com/t5/artificial-intelligence-blogs-posts/cap-agents-that-collaborates-with-humans-announcing-cap-agents-sdm-backend/ba-p/14509181","title":"CAP Agents that collaborates with humans - Announcing `cap-agents-sdm-backend` plugin — SAP Community","checked":"2026-10-22","quote":"It is designed to be used with CAP Node.js 10 or later."},{"url":"https://community.sap.com/t5/artificial-intelligence-blogs-posts/cap-agents-that-collaborates-with-humans-announcing-cap-agents-sdm-backend/ba-p/14509181","title":"CAP Agents that collaborates with humans - Announcing `cap-agents-sdm-backend` plugin — SAP Community","checked":"2026-10-22","quote":"Access to a file does not automatically provide native editing of Word documents, spreadsheets, or PDFs."},{"url":"https://www.npmjs.com/package/@mi8y/cap-agents-sdm-backend","title":"@mi8y/cap-agents-sdm-backend — README, Installation","checked":"2026-10-22","quote":"An existing SDM CMIS repository and either a Cloud SDK destination pointing to the **SDM API base URL** (not the UAA URL or `/browser`) or an SDM service binding in Cloud Foundry"},{"url":"https://www.npmjs.com/package/@mi8y/cap-agents-sdm-backend","title":"@mi8y/cap-agents-sdm-backend — README, Configuration","checked":"2026-10-22","quote":"This is JWT-bearer-only: requests without a bearer JWT fail; there is no client-credentials or background-job fallback."},{"url":"https://www.npmjs.com/package/@mi8y/cap-agents-sdm-backend","title":"@mi8y/cap-agents-sdm-backend — README, API","checked":"2026-10-22","quote":"The backend implements `ls`, `read`, `readRaw`, `write`, `edit`, `glob`, and literal `grep`."}]}],"readings":[],"omitted_contributions":0,"assessment_kind":"documented-contributions"},{"id":"require-a-persons-approval-before-a-cap-agent-acts","name":"Require a person's approval before the agent acts","capability":"capability:agent-tooling","ecosystem":"cap","flavors":["node","java"],"outcome":"Before the agent runs an action that changes something, the task stops and waits for a person to approve or reject it, and carries on from there.","boundary":"Covers holding the action and resuming the task. Who is allowed to approve is [authorization](capability:authorization), recording that they did is [audit logging](capability:audit-logging), and the screen the approval is given on is assessed on its own. An approval step modelled as a business workflow outside the agent is not this outcome.","origin":"Editorial hypothesis while re-assessing this capability's CAP coverage on 2026-10-15. capire documents the annotation for it and, in the same section, states which flavor does not have it, which is the kind of split a use case is for.","requirement_dimensions":["Whether the application runs on Node.js or Java","Whether the action to be held is unbound or defined on an entity","Whether the approving client can handle A2A's input-required state","Whether the approval has to be recorded as an audit event"],"needs":[{"key":"human_approval"}],"contributions":[{"ref":"artifact:cap-js-agents","role":"the gate itself","state":"documented","flavors":["node"],"description":"@agent.hitl on a CDS action is the whole declaration. When the agent decides to call that action the task pauses and moves to A2A's input-required state instead of running it, and the plugin emits an AgentInputRequired audit event when the agent asks and an AgentTaskResumed one when the approval or rejection comes back. The same mechanism carries the execution-time quota: on a timeout the graph interrupts rather than failing and asks through the gate whether to continue, with a summary of the progress so far.","remaining_work":"Annotate the actions that need it, and handle the input-required state in whatever talks to the agent — the pause is served over A2A, so the approving client is the project's. Nothing here decides who may approve.","sources":[{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#using-agent-hitl","title":"CAP-level Agents, Using @agent.hitl — capire","checked":"2026-10-15","quote":"Annotate a CDS action with `@agent.hitl` to require human approval before the agent may execute it."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#using-agent-hitl","title":"CAP-level Agents, Using @agent.hitl — capire","checked":"2026-10-15","quote":"When the agent decides to call the action, the task pauses and transitions to the A2A `input-required` state instead of running the action immediately."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#audit-logging","title":"CAP-level Agents, Audit Logging — capire","checked":"2026-10-15","quote":"`AgentInputRequired` | Agent requests human approval"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#per-task-limits","title":"CAP-level Agents, Per-Task Limits — capire","checked":"2026-10-15","quote":"On execution timeouts the graph does not fail but instead interrupts and sends a HITL message asking the user whether to continue, including the summary about the progress."}]},{"ref":"artifact:cap-java-cds-adapter-agent","role":"agent adapter in the service","state":"explicitly-unsupported","flavors":["java"],"description":"capire states in the section that documents the annotation that CAP Java does not support it yet, and lists content filtering, quotas, telemetry, persistent chat history, audit logging and data privacy in the same position. So an action the Java adapter exposes as a tool runs when the agent calls it.","remaining_work":"An approval step has to sit outside the agent — in the action's own implementation, or in a workflow the action starts — and nothing retrieved describes how to resume an A2A task from there.","sources":[{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#using-agent-hitl","title":"CAP-level Agents, Using @agent.hitl — capire","checked":"2026-10-15","quote":"`@agent.hitl` is not yet supported by CAP Java"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents#served-out-of-the-box","title":"CAP-level Agents, Served out of the box — capire","checked":"2026-10-15","quote":"Persistent chat history, telemetry, quotas, content filtering, audit logging and data privacy features are not yet supported by CAP Java."}]}],"readings":[{"ref":"content:sap-s-api-policy-on-ai-agents-what-it-prohibits-allows-and-leaves-open","relevance":"Why the gate is the question it is: the piece reads what SAP's policy restricts about an agent planning and chaining calls, which is the part of an agent's behaviour an approval step interrupts."}],"unknowns":["Whether a bound action can be held at all. capire states bound actions and bound functions are not tools on CAP Java, and the Node.js guide annotates an unbound action in its example without saying whether a bound one may carry @agent.hitl.","What a client has to do to approve. capire names A2A's input-required state and links its specification, and nothing retrieved here describes the message that resumes the task.","No reading in the corpus shows the gate working. The one source that describes it in a running project is the README of the UI5 chat client, which states the mock model bundled with the plugin can never call an action, so the gate is unreachable under it.","Source-read assessment. Nothing here was run."],"assessed_at":"2026-10-15","drafted_with_ai":true,"omitted_contributions":0,"assessment_kind":"documented-contributions"}],"shared_tasks":[],"related_tasks":[],"options":[{"ref":"artifact:cap-js-agents","name":"@cap-js/agents","json":"/artifacts/cap-js-agents.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:mi8y-cap-agents-memory","name":"@mi8y/cap-agents-memory","json":"/artifacts/mi8y-cap-agents-memory.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:mi8y-cap-agents-sdm-backend","name":"@mi8y/cap-agents-sdm-backend","json":"/artifacts/mi8y-cap-agents-sdm-backend.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:mi8y-cds-langgraph-persistence","name":"@mi8y/cds-langgraph-persistence","json":"/artifacts/mi8y-cds-langgraph-persistence.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:sap-joule-studio-cli","name":"@sap/joule-studio-cli","json":"/artifacts/sap-joule-studio-cli.json","ecosystem":"btp","origin_ring":"sap-official"},{"ref":"artifact:sap-joule-work-dev-cli","name":"@sap/joule-work-dev-cli-early-adopters","json":"/artifacts/sap-joule-work-dev-cli.json","ecosystem":"btp","origin_ring":"sap-official"},{"ref":"artifact:saptarishi-cds-plugin-llm","name":"@saptarishi/cds-plugin-llm","json":"/artifacts/saptarishi-cds-plugin-llm.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:a2a-plugin","name":"a2a-plugin","json":"/artifacts/a2a-plugin.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:lemaiwo-cap-agent-ui5-webui","name":"cap-agent-ui5-webui","json":"/artifacts/lemaiwo-cap-agent-ui5-webui.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:nagarjundas1994-aiagents-cds-agents","name":"cds-agents","json":"/artifacts/nagarjundas1994-aiagents-cds-agents.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:cap-java-cds-adapter-agent","name":"com.sap.cds:cds-adapter-agent","json":"/artifacts/cap-java-cds-adapter-agent.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sap-joule-studio","name":"Joule Studio","json":"/artifacts/sap-joule-studio.json","ecosystem":"umbrella","origin_ring":"sap-official"},{"ref":"artifact:sap-joule-studio-classic","name":"Joule Studio, classic edition","json":"/artifacts/sap-joule-studio-classic.json","ecosystem":"btp","origin_ring":"sap-official"},{"ref":"artifact:sap-joule","name":"SAP Joule","json":"/artifacts/sap-joule.json","ecosystem":"btp","origin_ring":"sap-official"}],"samples":[{"ref":"artifact:lemaiwo-cap-agent-ui5-webui-sample","name":"cap-agent-ui5-webui-sample","json":"/artifacts/lemaiwo-cap-agent-ui5-webui-sample.json"},{"ref":"artifact:marianfoo-custom-llm-client","name":"custom-llm-client","json":"/artifacts/marianfoo-custom-llm-client.json"},{"ref":"artifact:sap-samples-btp-a2a-dispute-resolution","name":"SAP-samples/btp-a2a-dispute-resolution","json":"/artifacts/sap-samples-btp-a2a-dispute-resolution.json"},{"ref":"artifact:sap-samples-btp-agentic-ai-use-cases","name":"SAP-samples/btp-agentic-ai-use-cases","json":"/artifacts/sap-samples-btp-agentic-ai-use-cases.json"},{"ref":"artifact:sap-samples-btp-joule-a2a-pro-code-agent","name":"SAP-samples/btp-joule-a2a-pro-code-agent","json":"/artifacts/sap-samples-btp-joule-a2a-pro-code-agent.json"},{"ref":"artifact:sap-samples-btp-sourcing-decision-board","name":"SAP-samples/btp-sourcing-decision-board","json":"/artifacts/sap-samples-btp-sourcing-decision-board.json"},{"ref":"artifact:sap-samples-codejam-code-based-agents","name":"SAP-samples/codejam-code-based-agents","json":"/artifacts/sap-samples-codejam-code-based-agents.json"},{"ref":"artifact:sap-samples-smartrecruiters-ai-recruiting-custom-agent","name":"SAP-samples/smartrecruiters-ai-recruiting-custom-agent","json":"/artifacts/sap-samples-smartrecruiters-ai-recruiting-custom-agent.json"},{"ref":"artifact:sap-samples-teched2025-ai160","name":"SAP-samples/teched2025-AI160","json":"/artifacts/sap-samples-teched2025-ai160.json"},{"ref":"artifact:sap-samples-teched2025-ai163","name":"teched2025-AI163","json":"/artifacts/sap-samples-teched2025-ai163.json"},{"ref":"artifact:sap-samples-teched2025-ai165","name":"teched2025-AI165","json":"/artifacts/sap-samples-teched2025-ai165.json"},{"ref":"artifact:capire-xtravels","name":"xtravels","json":"/artifacts/capire-xtravels.json"}],"explained_by":[{"ref":"content:devtoberfest-2026-code-based-ai-agents-baip","name":"Building Code-Based AI Agents on the BAIP","json":"/content/devtoberfest-2026-code-based-ai-agents-baip.json"},{"ref":"content:cap-in-the-age-of-ai-5-agents-wrap-up","name":"CAP in the age of AI #5 - agents wrap-up","json":"/content/cap-in-the-age-of-ai-5-agents-wrap-up.json"},{"ref":"content:devtoberfest-2026-daniel-hutzel-brain","name":"What's in Daniel Hutzel's brain?","json":"/content/devtoberfest-2026-daniel-hutzel-brain.json"},{"ref":"content:devtoberfest-2026-real-pro-code-joule-studio","name":"Real Pro-Code Development with Joule Studio","json":"/content/devtoberfest-2026-real-pro-code-joule-studio.json"},{"ref":"content:devtoberfest-2026-cap-the-road-ahead","name":"CAP: The Road Ahead - Simplicity in an AI Era","json":"/content/devtoberfest-2026-cap-the-road-ahead.json"},{"ref":"content:devtoberfest-2026-meet-joule-studio-first-ai-agent","name":"Meet Joule Studio and Build your First AI Agent","json":"/content/devtoberfest-2026-meet-joule-studio-first-ai-agent.json"},{"ref":"content:what-s-new-in-sap-cloud-application-programming-model-september-2026","name":"What's new in SAP Cloud Application Programming Model – September 2026","json":"/content/what-s-new-in-sap-cloud-application-programming-model-september-2026.json"},{"ref":"content:devtoberfest-2026-dat-12-ai-agents-hana-embedded-ml","name":"Combining AI Agents with the power of SAP HANA embedded ML (part 1)","json":"/content/devtoberfest-2026-dat-12-ai-agents-hana-embedded-ml.json"},{"ref":"content:governance-at-scale-why-a-clean-core-is-what-makes-agent-governance-enforceable","name":"Governance at Scale: Why a Clean Core Is What Makes Agent Governance Enforceable","json":"/content/governance-at-scale-why-a-clean-core-is-what-makes-agent-governance-enforceable.json"},{"ref":"content:september-15th-what-s-new-on-developers-sap-com","name":"September 15th: What's New on developers.sap.com","json":"/content/september-15th-what-s-new-on-developers-sap-com.json"},{"ref":"content:cap-in-the-age-of-ai-4-more-on-agents","name":"CAP in the age of AI #4 - more on agents","json":"/content/cap-in-the-age-of-ai-4-more-on-agents.json"},{"ref":"content:sap-s-api-policy-on-ai-agents-what-it-prohibits-allows-and-leaves-open","name":"SAP's API Policy on AI Agents: What It Prohibits, Allows, and Leaves Open","json":"/content/sap-s-api-policy-on-ai-agents-what-it-prohibits-allows-and-leaves-open.json"},{"ref":"content:build-your-ai-agent-prototype-for-free-using-sap-cap-langchain-and-ollama-cloud","name":"Build Your AI Agent prototype for free using SAP CAP, LangChain and Ollama cloud","json":"/content/build-your-ai-agent-prototype-for-free-using-sap-cap-langchain-and-ollama-cloud.json"},{"ref":"content:ac-agentic-ai-and-ai-agents","name":"Agentic AI & AI Agents","json":"/content/ac-agentic-ai-and-ai-agents.json"},{"ref":"content:cap-in-the-age-of-ai-3-from-mcp-to-a2a","name":"CAP in the age of AI #3 - from MCP to A2A","json":"/content/cap-in-the-age-of-ai-3-from-mcp-to-a2a.json"},{"ref":"content:building-a-pro-code-agent-on-sap-btp-part-2-the-agent-langgraph-genai-hub","name":"Building a Pro-Code Agent on SAP BTP — Part 2: The Agent (LangGraph + GenAI Hub)","json":"/content/building-a-pro-code-agent-on-sap-btp-part-2-the-agent-langgraph-genai-hub.json"},{"ref":"content:building-a-pro-code-agent-on-sap-btp-part-3-joule-integration-via-a2a","name":"Building a Pro-Code Agent on SAP BTP — Part 3: Joule Integration via A2A","json":"/content/building-a-pro-code-agent-on-sap-btp-part-3-joule-integration-via-a2a.json"},{"ref":"content:adapting-sap-joule-for-purchase-order-creation-from-an-existing-purchase-requisi","name":"Adapting SAP Joule for Purchase Order Creation from an Existing Purchase Requisition","json":"/content/adapting-sap-joule-for-purchase-order-creation-from-an-existing-purchase-requisi.json"},{"ref":"content:sap-joule-invoice-agent-for-faster-supplier-invoice-release-in-sap-s-4hana-accou","name":"SAP Joule: Invoice Agent for Faster Supplier Invoice Release in SAP S/4HANA Accounts Payable","json":"/content/sap-joule-invoice-agent-for-faster-supplier-invoice-release-in-sap-s-4hana-accou.json"},{"ref":"content:cap-in-the-age-of-ai","name":"CAP in the age of AI","json":"/content/cap-in-the-age-of-ai.json"},{"ref":"content:building-durable-ai-agents-cds-langgraph-persistence","name":"Building Durable AI Agents - Announcing the cds-langgraph-persistence Plugin","json":"/content/building-durable-ai-agents-cds-langgraph-persistence.json"},{"ref":"content:banking-sentinel-a-multi-agent-credit-risk-copilot","name":"Banking Sentinel: A Multi-Agent Credit-Risk Copilot on SAP BTP, Built on a Mixed AI Stack","json":"/content/banking-sentinel-a-multi-agent-credit-risk-copilot.json"},{"ref":"content:building-an-llm-agent-in-cap-java-with-spring-ai","name":"Building an LLM Agent in CAP Java with Spring AI","json":"/content/building-an-llm-agent-in-cap-java-with-spring-ai.json"},{"ref":"content:building-an-llm-agent-using-cap","name":"Building an LLM Agent using CAP","json":"/content/building-an-llm-agent-using-cap.json"},{"ref":"content:ac-ai-native-north-star-architecture","name":"AI-native North Star architecture — Platform Layer","json":"/content/ac-ai-native-north-star-architecture.json"},{"ref":"content:agentic-ai-on-btp-a-multi-agent-app-with-pydantic-ai","name":"Agentic AI on BTP: a Multi‑Agent App with Pydantic AI","json":"/content/agentic-ai-on-btp-a-multi-agent-app-with-pydantic-ai.json"},{"ref":"content:agentic-ai-on-btp-a-single-agent-with-langgraph","name":"Agentic AI on BTP: a Single Agent with LangGraph","json":"/content/agentic-ai-on-btp-a-single-agent-with-langgraph.json"},{"ref":"content:custom-joule-agent-for-sap-ariba-slp-building-an-ai-agent-for-supplier-registrat","name":"Custom Joule Agent for SAP Ariba SLP - Building an AI Agent for Supplier Registration Approval","json":"/content/custom-joule-agent-for-sap-ariba-slp-building-an-ai-agent-for-supplier-registrat.json"},{"ref":"content:sap-agentic-ai-in-practice-building-the-sap-exception-log-triage-agent-part-3-of","name":"SAP Agentic AI in Practice: Building the SAP Exception Log Triage Agent (Part 3 of 6)","json":"/content/sap-agentic-ai-in-practice-building-the-sap-exception-log-triage-agent-part-3-of.json"},{"ref":"content:ac-integrating-and-extending-joule","name":"Integrating and Extending Joule","json":"/content/ac-integrating-and-extending-joule.json"},{"ref":"content:sap-joule-me-my-first-joule-skill-in-sap-ehsm-incident-management-without-coding","name":"SAP JOULE & ME : My First JOULE Skill in SAP EHSM-Incident Management Without Coding","json":"/content/sap-joule-me-my-first-joule-skill-in-sap-ehsm-incident-management-without-coding.json"},{"ref":"content:event-driven-cap-on-kyma-with-agentic-ai-and-ui-auto-refresh","name":"Event Driven SAP CAP on Kyma with Agentic AI and UI Auto Refresh","json":"/content/event-driven-cap-on-kyma-with-agentic-ai-and-ui-auto-refresh.json"},{"ref":"content:how-redwood-software-and-sap-are-shaping-the-next-era-of-automation-with-joule-s","name":"How Redwood Software and SAP are shaping the next era of automation with Joule Studio","json":"/content/how-redwood-software-and-sap-are-shaping-the-next-era-of-automation-with-joule-s.json"},{"ref":"content:btp-ai-bp-joule-agent-builder","name":"Content-based Agents with SAP Joule Studio Agent Builder","json":"/content/btp-ai-bp-joule-agent-builder.json"},{"ref":"content:btp-ai-bp-pro-code-ai-agents","name":"Pro-Code AI Agents","json":"/content/btp-ai-bp-pro-code-ai-agents.json"},{"ref":"content:teched-2026-ad164","name":"Generate agentic workflows using SAP-managed n8n in Joule Studio","json":"/content/teched-2026-ad164.json"},{"ref":"content:teched-2026-ct1091","name":"Connecting AI agents to the ABAP RESTful application programming model","json":"/content/teched-2026-ct1091.json"},{"ref":"content:teched-2026-da164","name":"Building agentic applications with SAP HANA Cloud","json":"/content/teched-2026-da164.json"},{"ref":"content:teched-2026-da205","name":"Agentic memory: Knowledge graph engine and recall in SAP HANA Cloud","json":"/content/teched-2026-da205.json"},{"ref":"content:teched-2026-da263","name":"Knowledge graph and agent memory: Build an agent that remembers","json":"/content/teched-2026-da263.json"}],"normative_context":[{"ref":"instrument:sap-api-policy-v4-2026a","name":"SAP API Policy","json":"/instruments/sap-api-policy-v4-2026a.json","prominence":"prominent","sections":["2.2.2"]}]}}