{"id":32844675,"url":"https://github.com/agent0lab/agent0-py","last_synced_at":"2026-05-16T15:42:52.465Z","repository":{"id":321508017,"uuid":"1085970388","full_name":"agent0lab/agent0-py","owner":"agent0lab","description":"Agent0 is the SDK for agentic economies: open discovery and trust for agents","archived":false,"fork":false,"pushed_at":"2026-03-11T22:24:02.000Z","size":287,"stargazers_count":41,"open_issues_count":2,"forks_count":12,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-12T03:28:45.805Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/agent0lab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-29T19:02:16.000Z","updated_at":"2026-03-11T22:24:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"04e4a189-9d73-4eb9-82a5-300d80278391","html_url":"https://github.com/agent0lab/agent0-py","commit_stats":null,"previous_names":["agent0lab/agent0-py"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/agent0lab/agent0-py","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agent0lab%2Fagent0-py","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agent0lab%2Fagent0-py/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agent0lab%2Fagent0-py/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agent0lab%2Fagent0-py/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/agent0lab","download_url":"https://codeload.github.com/agent0lab/agent0-py/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agent0lab%2Fagent0-py/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33108343,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-11-08T06:01:47.591Z","updated_at":"2026-05-16T15:42:52.453Z","avatar_url":"https://github.com/agent0lab.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Agent0 SDK\n\nPython SDK for agent portability, discovery and trust based on ERC-8004.\n\nAgent0 is the SDK for agentic economies. It enables agents to register, advertise their capabilities and how to communicate with them, and give each other feedback and reputation signals. All this using blockchain infrastructure (ERC-8004) and decentralized storage, enabling permissionless discovery without relying on proprietary catalogues or intermediaries.\n\n## What Does Agent0 SDK Do?\n\nAgent0 SDK enables you to:\n\n- **Create and manage agent identities** - Register your AI agent on-chain with a unique identity, configure presentation fields (name, description, image), set wallet addresses, and manage trust models with x402 support\n- **Advertise agent capabilities** - Publish MCP and A2A endpoints, with automated extraction of MCP tools and A2A skills from endpoints\n- **OASF taxonomies** - Advertise standardized skills and domains using the Open Agentic Schema Framework (OASF) taxonomies for better discovery and interoperability\n- **Enable permissionless discovery** - Make your agent discoverable by other agents and platforms using rich search by attributes, capabilities, skills, tools, tasks, and x402 support\n- **Build reputation** - Give and receive feedback, retrieve feedback history, and search agents by reputation with cryptographic authentication\n- **Cross-chain registration** - One-line registration with IPFS nodes, Pinata, Filecoin, or HTTP URIs\n- **Public indexing** - Subgraph indexing both on-chain and IPFS data for fast search and retrieval\n\n## Release (1.7.0)\n\nThis release adds two major new capabilities to the Python SDK, aligned with the TypeScript SDK: **x402 payment-required HTTP** and **A2A (Agent-to-Agent)** messaging/task support.\n\n- **x402 request flows**: `sdk.request()` now returns `X402RequiredResponse` on HTTP 402 instead of throwing, so callers can inspect payment requirements and continue with `x402Payment.pay()` or `x402Payment.pay_first()`.\n- **A2A client flows**: `Agent.messageA2A()`, `Agent.listTasks()`, `Agent.loadTask()`, and `sdk.createA2AClient(...)` let you talk to A2A endpoints from either a loaded `Agent` or an `AgentSummary`.\n- **Cross-chain/RPC improvements**: built-in default RPCs plus `overrideRpcUrls` support x402 payments and agent loading across multiple chains from one SDK instance.\n- **Examples, tests, and docs**: the release ships with a full `examples/x402_a2a_demo.py`, expanded unit/live coverage, and updated public docs.\n\nFor detailed changes, migration notes, and testing guidance, see `release_notes/RELEASE_NOTES_1.7.0.md` (and prior notes in `release_notes/`).\n\n**Bug reports \u0026 feedback:** GitHub: [Report issues](https://github.com/agent0lab/agent0-py/issues) | Telegram: [Agent0 channel](https://t.me/agent0kitchen) | Email: team@ag0.xyz\n\n## Installation\n\n### Prerequisites\n\n- Python 3.8 or higher\n- pip package manager\n- Private key for signing transactions (or run in read-only mode)\n- Access to an Ethereum RPC endpoint (e.g., Alchemy, Infura)\n- (Optional) IPFS provider account (Pinata, Filecoin, or local IPFS node)\n\n### Install from PyPI\n\n```bash\npip install agent0-sdk\n```\n\nTo install a specific version explicitly:\n\n```bash\npip install agent0-sdk==1.7.0\n```\n\n### Install from Source\n\n```bash\ngit clone https://github.com/agent0lab/agent0-py.git\ncd agent0-py\npip install -e .\n```\n\n## Quick Start\n\n### 1. Initialize SDK\n\n```python\nfrom agent0_sdk import SDK\nimport os\n\n# Initialize SDK with IPFS and subgraph\nsdk = SDK(\n    chainId=11155111,  # Ethereum Sepolia testnet (use 1 for Ethereum Mainnet)\n    rpcUrl=os.getenv(\"RPC_URL\"),\n    signer=os.getenv(\"PRIVATE_KEY\"),\n    ipfs=\"pinata\",  # Options: \"pinata\", \"filecoinPin\", \"node\" (Kubo daemon)\n    pinataJwt=os.getenv(\"PINATA_JWT\")  # For Pinata\n    # Subgraph URL auto-defaults from DEFAULT_SUBGRAPH_URLS\n)\n```\n\n### 2. Create and Register Agent\n\n```python\n# Create agent\nagent = sdk.createAgent(\n    name=\"My AI Agent\",\n    description=\"An intelligent assistant for various tasks. Skills: data analysis, code generation.\",\n    image=\"https://example.com/agent-image.png\"\n)\n\n# Configure endpoints (automatically extracts capabilities)\nagent.setMCP(\"https://mcp.example.com/\")  # Extracts tools, prompts, resources\nagent.setA2A(\"https://a2a.example.com/agent-card.json\")  # Extracts skills\nagent.setENS(\"myagent.eth\")\n\n# Add OASF skills and domains (standardized taxonomies)\nagent.addSkill(\"data_engineering/data_transformation_pipeline\", validate_oasf=True)\nagent.addSkill(\"natural_language_processing/natural_language_generation/summarization\", validate_oasf=True)\nagent.addDomain(\"finance_and_business/investment_services\", validate_oasf=True)\nagent.addDomain(\"technology/data_science/data_science\", validate_oasf=True)\n\nagent.setTrust(reputation=True, cryptoEconomic=True)\n\n# Add metadata and set status\nagent.setMetadata({\"version\": \"1.0.0\", \"category\": \"ai-assistant\"})\nagent.setActive(True)\n\n# Register on-chain with IPFS (submitted-by-default)\nreg_tx = agent.registerIPFS()\nreg = reg_tx.wait_confirmed(timeout=180).result\nprint(f\"Agent registered: {reg.agentId}\")  # e.g., \"11155111:123\"\nprint(f\"Agent URI: {reg.agentURI}\")  # e.g., \"ipfs://Qm...\"\n\n# (Optional) Change the agent wallet after registration\n# - On mint/registration, `agentWallet` defaults to the current owner address.\n# - Call this only if you want a DIFFERENT wallet (or after a transfer, since the wallet resets to zero).\n# - Transaction is sent by the SDK signer (agent owner), but the signature must be produced by the NEW wallet.\nwallet_tx = agent.setWallet(\n    \"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb\",\n    chainId=11155111,\n    new_wallet_signer=os.getenv(\"NEW_WALLET_PRIVATE_KEY\"),\n)\nif wallet_tx:\n    wallet_tx.wait_confirmed(timeout=180)\n```\n\n### 2b. Fully on-chain registration (EIP-8004 `data:` URI)\n\nERC-8004 allows storing the entire registration JSON **directly on-chain** by setting `agentURI`/`tokenURI` to a base64 JSON data URI (e.g. `data:application/json;base64,...`).\n\n```python\n# Register (or update) with a fully on-chain registration file (data URI)\ntx = agent.registerOnChain()\nreg = tx.wait_confirmed(timeout=180).result\nprint(f\"Agent URI (on-chain data): {reg.agentURI}\")\n```\n\nNotes:\n\n- **Gas**: data URIs can be expensive; keep registration files compact.\n- **Size limit**: `SDK.loadAgent()` enforces a default max decoded size of **256 KiB** for data URIs. Override with:\n\n```python\nsdk = SDK(\n    chainId=11155111,\n    rpcUrl=os.getenv(\\\"RPC_URL\\\"),\n    signer=os.getenv(\\\"PRIVATE_KEY\\\"),\n    registrationDataUriMaxBytes=512 * 1024,\n)\n```\n\n### 3. Load and Edit Agent\n\n```python\n# Load existing agent for editing\nagent = sdk.loadAgent(\"11155111:123\")  # Format: \"chainId:agentId\"\n\n# Edit agent properties\nagent.updateInfo(description=\"Updated description with new capabilities\")\nagent.setMCP(\"https://new-mcp.example.com/\")\n\n# Re-register to update on-chain\nupdate_tx = agent.registerIPFS()\nupdate = update_tx.wait_confirmed(timeout=180).result\nprint(f\"Updated: {update.agentURI}\")\n```\n\n### 4. Search Agents\n\n```python\n# Search by name, capabilities, or attributes\nresults = sdk.searchAgents(\n    filters={\n        \"name\": \"AI\",  # substring\n        \"mcpTools\": [\"code_generation\"],\n        \"a2aSkills\": [\"python\"],\n        \"active\": True,\n        \"x402support\": True,\n        \"feedback\": {\"minValue\": 80, \"tag\": \"enterprise\", \"includeRevoked\": False},\n    },\n    options={\"sort\": [\"updatedAt:desc\"]},\n)\n\nfor agent in results:\n    print(f\"{agent.name}: {agent.description}\")\n    print(f\"  Tools: {agent.mcpTools}\")\n    print(f\"  Skills: {agent.a2aSkills}\")\n\n# Get single agent (read-only, faster)\nagent_summary = sdk.getAgent(\"11155111:123\")\n```\n\n### 5. Give and Retrieve Feedback\n\n```python\n# On-chain-only feedback (no off-chain upload, even if IPFS is configured)\ntx = sdk.giveFeedback(\n    agentId=\"11155111:123\",\n    value=85,  # number|string\n    tag1=\"data_analyst\",  # Optional: tags are strings\n    tag2=\"finance\",\n    endpoint=\"https://example.com/endpoint\",  # Optional: saved on-chain\n)\nfeedback = tx.wait_confirmed(timeout=180).result\n\n# Rich feedback (optional off-chain file + on-chain fields)\nfeedback_file = sdk.prepareFeedbackFile({\n    \"mcpTool\": \"code_generation\",       # Spec-aligned MCP tool identifier\n    \"a2aSkills\": [\"python\"],            # Spec-aligned A2A skills\n    \"a2aContextId\": \"session:abc\",      # Optional\n    \"text\": \"Great agent!\",      # Optional\n})\n\ntx = sdk.giveFeedback(\n    agentId=\"11155111:123\",\n    value=85,\n    tag1=\"data_analyst\",\n    tag2=\"finance\",\n    endpoint=\"https://example.com/endpoint\",\n    feedbackFile=feedback_file,  # If provided, requires IPFS configured\n)\nfeedback = tx.wait_confirmed(timeout=180).result\n\n# Search feedback\nresults = sdk.searchFeedback(\n    agentId=\"11155111:123\",\n    capabilities=[\"code_generation\"],  # capabilities filters by feedbackFile.mcpTool\n    minValue=80,\n    maxValue=100\n)\n\n# NEW: Search feedback given by a reviewer wallet (across all agents; subgraph required)\ngiven = sdk.searchFeedback(\n    reviewers=[\"0x742d35cc6634c0532925a3b844bc9e7595f0beb7\"]\n)\n\n# NEW: Search feedback across multiple agents at once\nmulti = sdk.searchFeedback(\n    agents=[\"11155111:123\", \"11155111:456\", \"11155111:789\"]\n)\n\n# Get reputation summary\nsummary = sdk.getReputationSummary(\"11155111:123\")\nprint(f\"Average value: {summary['averageValue']}\")\n```\n\n## IPFS Configuration Options\n\n```python\n# Option 1: Filecoin Pin (free for ERC-8004 agents)\nsdk = SDK(\n    chainId=11155111,\n    rpcUrl=\"...\",\n    signer=private_key,\n    ipfs=\"filecoinPin\",\n    filecoinPrivateKey=\"your-filecoin-private-key\"\n)\n\n# Option 2: IPFS Node\nsdk = SDK(\n    chainId=11155111,\n    rpcUrl=\"...\",\n    signer=private_key,\n    ipfs=\"node\",\n    ipfsNodeUrl=\"https://ipfs.infura.io:5001\"\n)\n\n# Option 3: Pinata (free for ERC-8004 agents)\nsdk = SDK(\n    chainId=11155111,\n    rpcUrl=\"...\",\n    signer=private_key,\n    ipfs=\"pinata\",\n    pinataJwt=\"your-pinata-jwt-token\"\n)\n\n# Option 4: HTTP registration (no IPFS)\nsdk = SDK(chainId=11155111, rpcUrl=\"...\", signer=private_key)\nagent.register(\"https://example.com/agent-registration.json\")\n```\n\n## OASF Taxonomies\n\nThe SDK includes support for the **Open Agentic Schema Framework (OASF)** taxonomies, enabling agents to advertise standardized skills and domains. This improves discoverability and interoperability across agent platforms.\n\n### Adding Skills and Domains\n\n```python\n# Add OASF skills (with optional validation)\nagent.addSkill(\"advanced_reasoning_planning/strategic_planning\", validate_oasf=True)\nagent.addSkill(\"data_engineering/data_transformation_pipeline\", validate_oasf=True)\n\n# Add OASF domains (with optional validation)\nagent.addDomain(\"finance_and_business/investment_services\", validate_oasf=True)\nagent.addDomain(\"technology/data_science/data_visualization\", validate_oasf=True)\n\n# Remove skills/domains\nagent.removeSkill(\"old_skill\")\nagent.removeDomain(\"old_domain\")\n```\n\n### OASF in Registration Files\n\nOASF skills and domains appear in your agent's registration file:\n\n```json\n{\n  \"endpoints\": [\n    {\n      \"name\": \"OASF\",\n      \"endpoint\": \"https://github.com/agntcy/oasf/\",\n      \"version\": \"0.8\",\n      \"skills\": [\n        \"advanced_reasoning_planning/strategic_planning\",\n        \"data_engineering/data_transformation_pipeline\"\n      ],\n      \"domains\": [\n        \"finance_and_business/investment_services\",\n        \"technology/data_science/data_science\"\n      ]\n    }\n  ]\n}\n```\n\n### Taxonomy Files\n\nThe SDK includes complete OASF v0.8.0 taxonomy files:\n- **Skills**: `agent0_sdk/taxonomies/all_skills.json` (136 skills)\n- **Domains**: `agent0_sdk/taxonomies/all_domains.json` (204 domains)\n\nBrowse these files to find appropriate skill and domain slugs. For more information, see the [OASF specification](https://github.com/agntcy/oasf) and [Release Notes v0.31](RELEASE_NOTES_0.31.md).\n\n## Unified Search Reference (Exhaustive)\n\nThe unified search API is:\n\n```python\nresults = sdk.searchAgents(filters: dict | SearchFilters | None = None, options: dict | SearchOptions | None = None)\n# results: list[AgentSummary]\n```\n\n### `FeedbackFilters` (used as `filters[\"feedback\"]`)\n\n```python\n@dataclass\nclass FeedbackFilters:\n    hasFeedback: Optional[bool] = None\n    hasNoFeedback: Optional[bool] = None\n    includeRevoked: Optional[bool] = None\n    minValue: Optional[float] = None\n    maxValue: Optional[float] = None\n    minCount: Optional[int] = None\n    maxCount: Optional[int] = None\n    fromReviewers: Optional[List[Address]] = None\n    endpoint: Optional[str] = None          # substring match\n    hasResponse: Optional[bool] = None\n    tag1: Optional[str] = None\n    tag2: Optional[str] = None\n    tag: Optional[str] = None               # matches tag1 OR tag2\n```\n\n| Field | Semantics |\n| --- | --- |\n| `hasFeedback` / `hasNoFeedback` | Filter by whether the agent has any feedback |\n| `includeRevoked` | Include revoked feedback entries in the pool used for filtering |\n| `minValue` / `maxValue` | Threshold on **average value** over feedback matching the other feedback constraints (inclusive) |\n| `minCount` / `maxCount` | Threshold on **count** over feedback matching the other feedback constraints (inclusive) |\n| `fromReviewers` | Only consider feedback from these reviewer wallets |\n| `endpoint` | Only consider feedback whose `endpoint` contains this substring |\n| `hasResponse` | Only consider feedback that has at least one response (if supported) |\n| `tag1` / `tag2` | Only consider feedback matching tag1/tag2 |\n| `tag` | Shorthand: match either tag1 OR tag2 |\n\n### `SearchFilters`\n\n```python\nDateLike = Union[datetime, str, int]\n\n@dataclass\nclass SearchFilters:\n    chains: Optional[Union[List[ChainId], Literal[\"all\"]]] = None\n    agentIds: Optional[List[AgentId]] = None\n\n    name: Optional[str] = None\n    description: Optional[str] = None\n\n    owners: Optional[List[Address]] = None\n    operators: Optional[List[Address]] = None\n\n    hasRegistrationFile: Optional[bool] = None\n    hasWeb: Optional[bool] = None\n    hasMCP: Optional[bool] = None\n    hasA2A: Optional[bool] = None\n    hasOASF: Optional[bool] = None\n    hasEndpoints: Optional[bool] = None\n\n    webContains: Optional[str] = None\n    mcpContains: Optional[str] = None\n    a2aContains: Optional[str] = None\n    ensContains: Optional[str] = None\n    didContains: Optional[str] = None\n\n    walletAddress: Optional[Address] = None\n\n    supportedTrust: Optional[List[str]] = None\n    a2aSkills: Optional[List[str]] = None\n    mcpTools: Optional[List[str]] = None\n    mcpPrompts: Optional[List[str]] = None\n    mcpResources: Optional[List[str]] = None\n    oasfSkills: Optional[List[str]] = None\n    oasfDomains: Optional[List[str]] = None\n\n    active: Optional[bool] = None\n    x402support: Optional[bool] = None\n\n    registeredAtFrom: Optional[DateLike] = None\n    registeredAtTo: Optional[DateLike] = None\n    updatedAtFrom: Optional[DateLike] = None\n    updatedAtTo: Optional[DateLike] = None\n\n    hasMetadataKey: Optional[str] = None\n    metadataValue: Optional[Dict[str, str]] = None  # { key, value }\n\n    keyword: Optional[str] = None\n    feedback: Optional[FeedbackFilters] = None\n```\n\n### `SearchOptions`\n\n```python\n@dataclass\nclass SearchOptions:\n    sort: Optional[List[str]] = None\n    semanticMinScore: Optional[float] = None\n    semanticTopK: Optional[int] = None\n```\n\n### `AgentSummary` (returned items)\n\n```python\n@dataclass\nclass AgentSummary:\n    chainId: ChainId\n    agentId: AgentId\n    name: str\n    image: Optional[URI]\n    description: str\n    owners: List[Address]\n    operators: List[Address]\n    # Endpoint strings (present when advertised; not booleans)\n    mcp: Optional[str] = None\n    a2a: Optional[str] = None\n    web: Optional[str] = None\n    email: Optional[str] = None\n    ens: Optional[str] = None\n    did: Optional[str] = None\n    walletAddress: Optional[Address] = None\n    supportedTrusts: List[str] = field(default_factory=list)\n    a2aSkills: List[str] = field(default_factory=list)\n    mcpTools: List[str] = field(default_factory=list)\n    mcpPrompts: List[str] = field(default_factory=list)\n    mcpResources: List[str] = field(default_factory=list)\n    oasfSkills: List[str] = field(default_factory=list)\n    oasfDomains: List[str] = field(default_factory=list)\n    active: bool = False\n    x402support: bool = False\n    createdAt: Optional[int] = None\n    updatedAt: Optional[int] = None\n    lastActivity: Optional[int] = None\n    agentURI: Optional[str] = None\n    agentURIType: Optional[str] = None\n    feedbackCount: Optional[int] = None\n    averageValue: Optional[float] = None\n    semanticScore: Optional[float] = None\n    extras: Dict[str, Any] = field(default_factory=dict)\n```\n\n## Use Cases\n\n- **Building agent marketplaces** - Create platforms where developers can discover, evaluate, and integrate agents based on their capabilities and reputation\n- **Agent interoperability** - Discover agents by specific capabilities (skills, tools, tasks), evaluate them through reputation signals, and integrate them via standard protocols (MCP/A2A)\n- **Managing agent reputation** - Track agent performance, collect feedback from users and other agents, and build trust signals for your agent ecosystem\n- **Cross-chain agent operations** - Deploy and manage agents across multiple blockchain networks with consistent identity and reputation\n\n## 🚀 Coming Soon\n\n- More chains (currently Ethereum Mainnet + Base Mainnet + Ethereum Sepolia + Base Sepolia + Polygon Mainnet)\n- Support for validations\n- Enhanced x402 payments\n- Advanced reputation aggregation\n- Import/Export to centralized catalogues\n\n## Tests\n\nComplete working examples are available in the `tests/` directory:\n\n- `test_registration.py` - Agent registration with HTTP URI\n- `test_registrationIpfs.py` - Agent registration with IPFS\n- `test_feedback.py` - Complete feedback flow with IPFS storage\n- `test_search.py` - Agent search and discovery\n- `test_transfer.py` - Agent ownership transfer\n- `test_oasf_management.py` - OASF skills/domains management (unit tests)\n- `test_real_public_servers.py` - Endpoint crawler against real public MCP/A2A servers\n- `test_multi_chain.py` - Multi-chain read-only operations (subgraph-based)\n\n## Documentation\n\nFull documentation is available at [sdk.ag0.xyz](https://sdk.ag0.xyz), including:\n\n- [Installation Guide](https://sdk.ag0.xyz/2-usage/2-1-install/)\n- [Agent Configuration](https://sdk.ag0.xyz/2-usage/2-2-configure-agents/)\n- [Registration](https://sdk.ag0.xyz/2-usage/2-3-registration-ipfs/)\n- [Search](https://sdk.ag0.xyz/2-usage/2-5-search/)\n- [Feedback](https://sdk.ag0.xyz/2-usage/2-6-use-feedback/)\n- [Key Concepts](https://sdk.ag0.xyz/1-welcome/1-2-key-concepts/)\n- [API Reference](https://sdk.ag0.xyz/5-reference/5-1-sdk/)\n\n## License\n\nAgent0 SDK is MIT-licensed public good brought to you by Marco De Rossi in collaboration with Consensys, 🦊 MetaMask and Agent0, Inc. We are looking for co-maintainers. Please reach out if you want to help.\n\nThanks also to Edge \u0026 Node (The Graph), Protocol Labs and Pinata for their support.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagent0lab%2Fagent0-py","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fagent0lab%2Fagent0-py","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagent0lab%2Fagent0-py/lists"}