Aroha Protocol — Build and register agents, MCPs, and skills on the Aroha Hub. Supports FastAPI, LangChain, CrewAI, Google ADK, OpenAI SDK.
Project description
aroha — Aroha Protocol Python SDK
Build agents that register on the Aroha Hub and are callable by any client through the standard /v1/run protocol.
pip install aroha
Quick start
from aroha.agent import serve
@serve(
name="My Agent",
system_prompt="You are a helpful assistant.",
provider="anthropic",
model="claude-sonnet-4-6",
memory="session",
)
async def my_agent(message: str, session_id: str, history: list, context: dict) -> str:
import anthropic
client = anthropic.Anthropic()
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system="You are a helpful assistant.",
messages=[{"role": "user", "content": message}],
)
return resp.content[0].text
if __name__ == "__main__":
my_agent.start(port=8000)
This starts a FastAPI server with:
POST /v1/run— the Aroha Protocol invocation endpointGET /.well-known/aroha-agent.json— agent manifestGET /health— liveness checkGET /docs— Swagger UI
Register on the Aroha Hub
import os
result = my_agent.register(
endpoint_url="https://my-agent.fly.dev",
api_key=os.environ["AROHA_API_KEY"],
)
print(result["didHash"]) # chat URL: https://aroha-labs.com/chat/<didHash>
Framework bridges
LangChain / LangGraph
pip install aroha[langchain]
from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate
from aroha.bridges.langchain_v1 import from_chain
llm = ChatAnthropic(model="claude-sonnet-4-6")
prompt = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("human", "{message}"),
])
chain = prompt | llm
agent = from_chain(chain, name="LangChain Agent")
agent.start(port=8000)
CrewAI
pip install aroha[crewai]
from crewai import Agent, Task, Crew
from aroha.bridges.crewai_v1 import from_crew
researcher = Agent(
role="Researcher",
goal="Research the given topic thoroughly",
backstory="Expert researcher",
llm="anthropic/claude-sonnet-4-6",
)
def make_crew(message: str) -> Crew:
task = Task(description=message, agent=researcher, expected_output="Research findings")
return Crew(agents=[researcher], tasks=[task])
agent = from_crew(make_crew, name="Research Agent")
agent.start(port=8000)
Google ADK
pip install aroha[google-adk]
from google.adk.agents import LlmAgent
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from aroha.bridges.google_adk import from_runner
adk_agent = LlmAgent(
name="assistant",
model="gemini-2.0-flash",
instruction="You are a helpful assistant.",
)
session_service = InMemorySessionService()
runner = Runner(agent=adk_agent, app_name="my-app", session_service=session_service)
agent = from_runner(runner, name="Gemini Agent", memory="session")
agent.start(port=8000)
OpenAI SDK
pip install aroha[openai]
from openai import OpenAI
from aroha.bridges.openai_v1 import from_openai_client
client = OpenAI()
agent = from_openai_client(
client,
model="gpt-4o",
system_prompt="You are a helpful assistant.",
name="GPT Agent",
memory="session",
)
agent.start(port=8000)
Hub client
from aroha.hub import register_agent, resolve_agent, call_agent, list_agents
# Resolve by didHash
agent = resolve_agent("abc123def")
# Call an agent by didHash (resolves endpoint automatically)
reply = call_agent("abc123def", "What is the weather in London?")
print(reply["message"])
# List all agents
agents = list_agents(limit=20)
Advanced: A2A envelope transport
The SDK also includes the full Aroha cryptographic envelope protocol for zero-trust agent-to-agent messaging:
from aroha import generate_did, ArohaServer, ArohaClient, build_envelope
/v1/run protocol
Any compliant agent must implement:
POST /v1/run
Content-Type: application/json
{
"message": "user message",
"sessionId": "uuid (optional, echoed back)",
"history": [{"role": "user"|"assistant", "content": "..."}],
"context": {}
}
Response:
{
"message": "agent reply",
"sessionId": "uuid",
"artifacts": [],
"usage": {}
}
The @serve decorator handles all of this automatically.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aroha-1.1.0.tar.gz.
File metadata
- Download URL: aroha-1.1.0.tar.gz
- Upload date:
- Size: 38.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c68ede3652c5a2a6616fd2bce6ed349567b2ddd13e6d1bb6b9ec3ac81b2c67e9
|
|
| MD5 |
115cee3c9c7345c0703006fa45eaf196
|
|
| BLAKE2b-256 |
899be23acdb96a099bd09a4003f31444783914e70402b9267f1c8f5af5e5a29e
|
Provenance
The following attestation bundles were made for aroha-1.1.0.tar.gz:
Publisher:
publish-pypi.yml on projectmed99/aroha
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aroha-1.1.0.tar.gz -
Subject digest:
c68ede3652c5a2a6616fd2bce6ed349567b2ddd13e6d1bb6b9ec3ac81b2c67e9 - Sigstore transparency entry: 1999550587
- Sigstore integration time:
-
Permalink:
projectmed99/aroha@a0c70ea83942e2e5e487895eae6bb8178285f48f -
Branch / Tag:
refs/heads/feat/agentic-hub - Owner: https://github.com/projectmed99
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@a0c70ea83942e2e5e487895eae6bb8178285f48f -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file aroha-1.1.0-py3-none-any.whl.
File metadata
- Download URL: aroha-1.1.0-py3-none-any.whl
- Upload date:
- Size: 50.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
028a485ba69b58f840eb69fa89d1f90d2d9e0b2750965fece5dd0de70f4053d1
|
|
| MD5 |
2bbfabc12675b759fb29dc7a43f39b43
|
|
| BLAKE2b-256 |
74d1c7e23fa06fb2330fcbcbd4e14091d58a9ec9160dd832bd3e5bee47290a0c
|
Provenance
The following attestation bundles were made for aroha-1.1.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on projectmed99/aroha
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aroha-1.1.0-py3-none-any.whl -
Subject digest:
028a485ba69b58f840eb69fa89d1f90d2d9e0b2750965fece5dd0de70f4053d1 - Sigstore transparency entry: 1999550658
- Sigstore integration time:
-
Permalink:
projectmed99/aroha@a0c70ea83942e2e5e487895eae6bb8178285f48f -
Branch / Tag:
refs/heads/feat/agentic-hub - Owner: https://github.com/projectmed99
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@a0c70ea83942e2e5e487895eae6bb8178285f48f -
Trigger Event:
workflow_dispatch
-
Statement type: