agentleFS
OpenLinkSoftwareOpenLinkSoftware/ai-agent-skills/a2a-client/SKILL.md

a2a-client

Skill42 starsChanged 50 days agoMITView on GitHub

Use OPAL Agent2Agent (A2A) clients against OpenLink OPAL A2A endpoints. Trigger when Codex needs to discover an OPAL Agent Card, authenticate with OAuth2 bearer/API key or client-credentials flow, send A2A JSON-RPC tasks, subscribe to streamed task events, fetch task status, attach files, or test OPAL agents/skills exposed through /.well-known/agent.json and /chat/api/a2a. Present recommended endpoints when helpful, but always elicit the target CNAME/base URL/endpoint and credentials before requests.

  • Reads credentials

The file

We split this skill into the rules it gives an agent

12 rules. About 0 are common, 3 are distinctive, and 9 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use this skill to interact with an OPAL backend that implements the Agent2Agent protocol.

    line 8
  2. Distinctive:

    Before making any request, obtain these runtime values from the user, environment, or an already verified project config:

    line 12
  3. Very specific:

    Do not silently substitute a default CNAME.

    line 20
  4. Very specific:

    If the user gives a base URL, fetch the Agent Card from /.well-known/agent.json and derive the A2A endpoint from the card's url field.

    line 35
  5. Very specific:

    If the user gives a full /chat/api/a2a URL, derive the Agent Card URL from the same origin unless the user supplies a separate card URL.

    line 36
  6. Very specific:

    Prefer bearer tokens via --token-env, OPAL_A2A_TOKEN_ENV, or OPAL_A2A_TOKEN rather than raw --token.

    line 40
  7. Distinctive:

    Never log tokens, client secrets, or complete Authorization headers.

    line 44
  8. Very specific:

    Use tasks/send for a single request/response task.

    line 46
  9. Very specific:

    Use tasks/sendSubscribe when the user asks for streaming or the card advertises streaming support and the user chooses it.

    line 47
  10. Very specific:

    Use tasks/get to check an existing task ID.

    line 48
  11. Very specific:

    Read references/opal-a2a.md when you need protocol details, JSON-RPC payload examples, Agent Card field interpretation, or OPAL-specific …

    line 55
  12. Very specific:

    Use scripts/a2a_client.py for repeatable command-line testing.

    line 56

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

OPAL A2A Client

Use this skill to interact with an OPAL backend that implements the Agent2Agent protocol.

Required Elicitations

Before making any request, obtain these runtime values from the user, environment, or an already verified project config:

  • Target endpoint: either an HTTPS base URL such as https://{CNAME} or a full A2A URL such as https://{CNAME}/chat/api/a2a; CLI args win over OPAL_A2A_BASE_URL, OPAL_A2A_CNAME, OPAL_A2A_URL, and OPAL_A2A_CARD_URL.
  • Authentication mode: bearer/API key, dynamic OAuth Authorization Code, OAuth2 client credentials, or no request until credentials are supplied.
  • Credential source: environment variable name, secret manager reference, dynamic OAuth flow, or user-provided value. The script recognizes OPAL_A2A_TOKEN_ENV and OPAL_A2A_TOKEN; do not echo secrets.
  • Interaction mode: tasks/send, tasks/sendSubscribe, or tasks/get.
  • Session behavior: new context/session or continue with a supplied contextId or sessionId.

Do not silently substitute a default CNAME. Present the recommended endpoints below as choices, accept a custom endpoint, or use a verified override such as OPAL_A2A_BASE_URL or OPAL_A2A_CNAME.

Recommended Endpoints

Offer these as non-exclusive choices when the user has not supplied a target:

  1. https://netid-qa.openlinksw.com:8443
  2. https://linkeddata.uriburner.com
  3. https://demo.openlinksw.com

Also offer a custom base URL or full /chat/api/a2a endpoint. Do not assume the first endpoint is the default; wait for the user's selection or a verified config/env override.

Workflow

  1. Normalize the target:
    • If the user gives a base URL, fetch the Agent Card from /.well-known/agent.json and derive the A2A endpoint from the card's url field.
    • If the user gives a full /chat/api/a2a URL, derive the Agent Card URL from the same origin unless the user supplies a separate card URL.
  2. Fetch and inspect the Agent Card before sending tasks. Confirm name, provider, auth schemes, capabilities, input modes, output modes, and listed skills.
  3. Authenticate:
    • For bearer/API key, send Authorization: Bearer {token}.
    • Prefer bearer tokens via --token-env, OPAL_A2A_TOKEN_ENV, or OPAL_A2A_TOKEN rather than raw --token.
    • For interactive OAuth, use dynamic client registration plus Authorization Code flow with --oauth-auth-code; register against the selected endpoint's own issuer, not a different host.
    • To reuse an OAuth-acquired bearer token, use --save-token-env OPAL_A2A_TOKEN --save-token-env-file .opal-a2a.env, then source the file in a shell you control.
    • For OAuth2 client credentials, use the card's token URL when present, or elicit an explicit token URL.
    • Never log tokens, client secrets, or complete Authorization headers.
  4. Choose the task method:
    • Use tasks/send for a single request/response task.
    • Use tasks/sendSubscribe when the user asks for streaming or the card advertises streaming support and the user chooses it.
    • Use tasks/get to check an existing task ID.
  5. Build JSON-RPC 2.0 payloads with text parts by default. Include attachments only from user-approved file paths.
  6. Preserve returned task id, contextId, and sessionId values. Ask whether to continue the same context when the next request depends on prior task state.
  7. Summarize results from status.message.parts, artifacts.parts, and final task state. Include IDs needed for follow-up, but keep secrets redacted.

Bundled Resources

  • Read references/opal-a2a.md when you need protocol details, JSON-RPC payload examples, Agent Card field interpretation, or OPAL-specific behavior.
  • Use scripts/a2a_client.py for repeatable command-line testing. Run python3 scripts/a2a_client.py --help before first use.

Validation

For skill changes, run:

python3 scripts/a2a_client.py --help

For live endpoint validation, use a user-approved target and credentials, then perform this minimum sequence:

python3 scripts/a2a_client.py card --agent-base https://{CNAME}
python3 scripts/a2a_client.py send --agent-base https://{CNAME} --token-env OPAL_A2A_TOKEN --message "What is Virtuoso?"
python3 scripts/a2a_client.py send --agent-base https://{CNAME} --oauth-auth-code --message "What is Virtuoso?"
python3 scripts/a2a_client.py send --agent-base https://{CNAME} --oauth-auth-code --save-token-env OPAL_A2A_TOKEN --save-token-env-file .opal-a2a.env --message "What is Virtuoso?"

Replace {CNAME} and token sources only with elicited values.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.