sap-joule-capability
Skill9 starsChanged 22 days agoApache-2.0View on GitHub
Use this skill when authoring `.sapdas.yaml` capability bundles to register a code-based agent into Joule. Covers the four bundle files (capability, _da, scenarios, functions), the `joule.ext` namespace rules, daar packaging, and the three integration paths (direct A2A, BPA-async, multi-agent front-door).
In this repository8 other files it gives its agents.
- sap-ai-coreSkill
- sap-hana-data-prepSkill
- sap-hana-tripleSkill
- sap-hana-vectorSkill
- sap-kyma-cliSkill
- sap-repair-joule-accessSkill
- sap-setup-btp-agentSkill
- sap-sovereign-regionsSkill
The file
Files
Joule Capability Bundles — wire a code agent into Joule
To make a code-based A2A agent callable from Joule, ship a joule-capability/ directory containing four kinds of .sapdas.yaml files. Joule consumes them via the Joule CLI (joule deploy).
Bundle layout
joule-capability/
├── capability.sapdas.yaml # who is this agent, where is its Agent Card
├── _da.sapdas.yaml # which conversational surfaces it can appear in
├── scenarios/
│ └── default.sapdas.yaml # intents → functions
└── functions/
└── <name>.sapdas.yaml # each function maps to an A2A skill idcapability.sapdas.yaml
apiVersion: joule.ext/v1
kind: Capability
metadata:
name: my-first-agent
spec:
agentCardUrl: https://my-first-agent.<your-cf-domain>/.well-known/agent.json
authMode: oauth2-client-credentials # OR `ias` for prod
scenarios: [default]_da.sapdas.yaml (Digital Assistant binding)
apiVersion: joule.ext/v1
kind: DigitalAssistant
metadata: { name: my-first-agent-da }
spec:
surfaces: [joule-code-editor, joule-sidebar-erp]
capabilityRef: my-first-agentscenarios/<name>.sapdas.yaml
apiVersion: joule.ext/v1
kind: Scenario
metadata: { name: default }
spec:
intents: ["@my-first-agent *"]
fallback: true
functions: [echo]functions/<name>.sapdas.yaml
apiVersion: joule.ext/v1
kind: Function
metadata: { name: echo }
spec:
description: "Echo what the user said"
examples: ["say PONG"]
a2aSkillId: echo # matches AgentSkill(id="echo") in agent_executor.pyDeploying
joule login
joule deploy ./joule-capability
joule list capabilities | grep my-first-agentThree integration paths
| Path | When | How |
| 1: Direct A2A | one agent, sync, < 60s | authMode: oauth2-client-credentials, agent on CF/Kyma — quickstart Step 06 |
| 2: BPA-async | long-running | Capability targets a BPA process; agent does work, callback to BPA |
| 3: Multi-agent front-door (proxy) | many agents, central IAS | Capability targets the proxy URL; proxy fans out — planned, no vendored template yet. Not the same as SwissKnife (single full A2A agent, not a proxy); see references/btp-joule-a2a-pro-code-agent/. |
Region availability
Joule itself is not GA in every region — run recipes/00-develop/00-region-preflight/ before promising a customer.
Pitfalls
agentCardUrlblocked by auth → Joule can't discover. Always make/.well-known/agent.jsonpublic.a2aSkillIdmismatch → Joule registers the function but invocation returns 404. Compare to your agent'sAgentSkill(id=...).- Missing
scenariosor empty intents → Joule registers the capability but won't route.
Verify
joule list capabilities | grep -E "<name>.+ACTIVE"
joule invoke --capability <name> --text "say PONG"
# expect: response containing PONGCross-references
- Joule capability bundles live inside the agent template. The
references/a2a-agent-cap/slot (TODO — seereferences/README.md) will ship the canonical CAP bundle; until then, use the public reference atreferences/btp-joule-a2a-pro-code-agent/. - Walkthrough:
recipes/01-deploy/01-wire-into-joule/
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

