Preface¶
The core design philosophy of DeepSeek Harness (DSH) is “everything is a plugin”. When a DSH instance needs to communicate with other agents that follow the Agent2Agent (A2A) v1.0 protocol, a standardized bidirectional connection capability is required. The @ryubyte/dsh-a2a plugin solves this problem. It provides DSH instances with a complete A2A v1.0 implementation: it can act as an outbound client, discovering and invoking remote agent skills via AgentCard; it can also act as an inbound server, exposing JSON-RPC and SSE endpoints for other agents to access.
Core Features¶
This plugin mainly includes the following capabilities:
- Bidirectional A2A v1.0 support: Implements both client mode (discovery and invocation) and server mode (service exposure).
- Client mode: Discovers skills from a remote agent’s AgentCard and maps them as local DSH tools (naming format:
a2a__<name>__<skill>). - Server mode: Provides the
/.well-known/agent-card.jsonendpoint as well as JSON-RPC/SSE interfaces such asSendMessage,GetTask,ListTasks, andCancelTask. - Visual configuration panel: No manual configuration file editing is required. Remote agent connections can be managed or external services configured via “Settings → A2A Connections” in the Web UI.
- Authentication support: Supports Bearer Token authentication (configured per agent for outbound requests, and protecting inbound endpoints).
- Task lifecycle management: Fully supports task state transitions from SUBMITTED → WORKING → COMPLETED/FAILED/CANCELED.
Installation and Enablement¶
Installing the plugin requires a single command. After adding it to the specified profile, restart DSH for it to take effect.
dsh plugin --profile web add @ryubyte/dsh-a2a
dsh --profile web
Typical Usage¶
1. Configure a Remote Agent (Outbound)¶
Declare the agent to connect to in a2a.json under the profile directory.
{
"agents": [
{
"name": "research",
"agentCardUrl": "https://research.example.com/.well-known/agent-card.json",
"bearerToken": "...",
"timeoutMs": 8000
}
]
}
After a successful connection, the remote agent’s skills are registered as model tools. Multiple tool calls to the same remote agent within the same local session reuse the same A2A contextId, enabling cross-turn memory.
2. Expose an A2A Service (Inbound)¶
Enable server mode via configuration.
{
"mode": "server",
"server": {
"enabled": true,
"agentName": "My DSH Agent",
"skills": [
{ "id": "coding", "name": "Coding", "description": "Execute coding tasks." }
]
}
}
Alternatively, create and publish a service directly through the visual form in “Settings → A2A Connections → ‘External Service’” in the Web UI. The system will automatically generate the corresponding configuration.
Notes¶
- Security: Inbound services are unauthenticated by default. In production environments, configure
authTokenor use a TLS reverse proxy for protection. - Panel API:
/a2a/apionly listens on loopback/same-origin and does not expose confidential information. - Permissions: The plugin runs with the permissions of the current DSH process. Please review the source code and license before installation.
- License: MIT License.
Conclusion¶
This plugin provides DSH with standardized Agent2Agent protocol connectivity, making it suitable for developers building multi-agent collaboration systems. For more details, see the plugin directory page or the GitHub repository.