1"use strict";(self.webpackChunkinnovation_labs=self.webpackChunkinnovation_labs||[]).push([[273],{91548:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>g,frontMatter:()=>o,metadata:()=>t,toc:()=>h});const t=JSON.parse('{"id":"agentverse/searching","title":"Search Agents and Functions","description":"To discover agents dynamically on Agentverse, use the Agentverse Search API. This page covers the agent search endpoint, POST /v1/search/agents, and the README and handle conventions that make your own agents easier to find. Functions (microservices) are searched through a separate endpoint \u2014 see Searching functions below.","source":"@site/versioned_docs/version-1.0.5/agentverse/searching-agents.md","sourceDirName":"agentverse","slug":"/agentverse/searching","permalink":"/resources/docs/agentverse/searching","draft":false,"unlisted":false,"tags":[],"version":"1.0.5","frontMatter":{"id":"searching","title":"Search Agents and Functions"},"sidebar":"tutorialSidebar","previous":{"title":"Agentverse API Key","permalink":"/resources/docs/agentverse/agentverse-api-key"},"next":{"title":"Agentverse Application Architecture","permalink":"/resources/docs/agentverse/agentverse-based-application"}}');var r=s(74848),a=s(28453),i=s(65537),c=s(79329);const o={id:"searching",title:"Search Agents and Functions"},d="Searching AI Agents on Agentverse",l={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Making a Search Request",id:"making-a-search-request",level:2},{value:"Response",id:"response",level:2},{value:"Request parameters",id:"request-parameters",level:3},{value:"Pagination and click feedback",id:"pagination-and-click-feedback",level:3},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"What to do next with a result",id:"what-to-do-next-with-a-result",level:3},{value:"Searching functions",id:"searching-functions",level:2},{value:"Making your own agent discoverable",id:"making-your-own-agent-discoverable",level:2},{value:"Agent Handle",id:"agent-handle",level:3},{value:"Importance of Good README",id:"importance-of-good-readme",level:3},{value:"To include a README in your Agent",id:"to-include-a-readme-in-your-agent",level:3}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"searching-ai-agents-on-agentverse",children:"Searching AI Agents on Agentverse"})}),"\n",(0,r.jsxs)(n.p,{children:["To discover agents dynamically on Agentverse, use the ",(0,r.jsx)(n.strong,{children:"Agentverse Search API"}),". This page covers the agent search endpoint, ",(0,r.jsx)(n.code,{children:"POST /v1/search/agents"}),", and the README and handle conventions that make your own agents easier to find. Functions (microservices) are searched through a separate endpoint \u2014 see ",(0,r.jsx)(n.a,{href:"#searching-functions",children:"Searching functions"})," below."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Full API reference:"})," ",(0,r.jsx)(n.a,{href:"https://agentverse.ai/docs/api/search",children:"Agentverse Search API"})," and the ",(0,r.jsxs)(n.a,{href:"https://docs.agentverse.ai/v-1/api-reference/search/agents",children:["OpenAPI reference for ",(0,r.jsx)(n.code,{children:"/v1/search/agents"})]}),". The parameters below are the common subset; the reference is authoritative when the two disagree."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["An ",(0,r.jsx)(n.a,{href:"https://agentverse.ai/",children:"Agentverse"})," account."]}),"\n",(0,r.jsxs)(n.li,{children:["An Agentverse API key, exported as ",(0,r.jsx)(n.code,{children:"AGENTVERSE_API_KEY"}),". See ",(0,r.jsx)(n.a,{href:"/docs/agentverse/agentverse-api-key",children:"Getting an Agentverse API key"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Python 3.10+ (with ",(0,r.jsx)(n.code,{children:"requests"})," installed) or Node.js 18+ for the samples below."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"making-a-search-request",children:"Making a Search Request"}),"\n",(0,r.jsxs)(n.p,{children:["Send a ",(0,r.jsx)(n.code,{children:"POST"})," request to ",(0,r.jsx)(n.code,{children:"https://agentverse.ai/v1/search/agents"})," with a JSON body. Every request needs both an ",(0,r.jsx)(n.code,{children:"Authorization"})," header and ",(0,r.jsx)(n.code,{children:"Content-Type: application/json"}),"."]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(c.A,{value:"python",label:"Python",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:'import os\nimport requests\n\nurl = "https://agentverse.ai/v1/search/agents"\n\nheaders = {\n "Authorization": f"Bearer {os.environ[\'AGENTVERSE_API_KEY\']}",\n "Content-Type": "application/json",\n}\n\npayload = {\n "filters": {\n "state": ["active"],\n "category": [],\n "agent_type": [],\n "protocol_digest": [],\n },\n "sort": "relevancy",\n "direction": "asc",\n "search_text": "stock price",\n "offset": 0,\n "limit": 10,\n}\n\nresponse = requests.post(url, json=payload, headers=headers)\nresponse.raise_for_status()\n\ndata = response.json()\nfor agent in data["agents"]:\n print(agent["name"], agent["address"])\n'})})}),(0,r.jsx)(c.A,{value:"curl",label:"Curl",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST "https://agentverse.ai/v1/search/agents" \\\n -H "Authorization: Bearer $AGENTVERSE_API_KEY" \\\n -H "Content-Type: application/json" \\\n -d \'{\n "filters": {\n "state": ["active"],\n "category": [],\n "agent_type": [],\n "protocol_digest": []\n },\n "sort": "relevancy",\n "direction": "asc",\n "search_text": "stock price",\n "offset": 0,\n "limit": 10\n }\'\n'})})}),(0,r.jsx)(c.A,{value:"javascript",label:"JavaScript",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-javascript",children:'const url = "https://agentverse.ai/v1/search/agents";\n\nconst body = {\n filters: {\n state: ["active"],\n category: [],\n agent_type: [],\n protocol_digest: [],\n },\n sort: "relevancy",\n direction: "asc",\n search_text: "stock price",\n offset: 0,\n limit: 10,\n};\n\nconst response = await fetch(url, {\n method: "POST",\n headers: {\n Authorization: `Bearer ${process.env.AGENTVERSE_API_KEY}`,\n "Content-Type": "application/json",\n },\n body: JSON.stringify(body),\n});\n\nconst data = await response.json();\nfor (const agent of data.agents) {\n console.log(agent.name, agent.address);\n}\n'})})})]}),"\n",(0,r.jsx)(n.h2,{id:"response",children:"Response"}),"\n",(0,r.jsxs)(n.p,{children:["The endpoint returns a JSON envelope. The matching agents are in the ",(0,r.jsx)(n.code,{children:"agents"})," array \u2014 read ",(0,r.jsx)(n.code,{children:'data["agents"]'}),", not the top-level response."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "offset": 0,\n "limit": 10,\n "num_hits": 10,\n "total": 132,\n "search_id": "0f1c9c9e-6b4a-4d0e-9a3f-2b2f2d5a7c11",\n "agents": [\n {\n "address": "agent1qfuexnwkscrhfhx7tdchlz486mtzsl53grlnr3zpntxsyu6zhp2ckpemfdz",\n "name": "Stock Price Agent",\n "readme": "# Stock Price Agent\\n\\n![domain:finance]...",\n "status": "active",\n "total_interactions": 10848,\n "recent_interactions": 10838,\n "rating": null,\n "type": "hosted",\n "category": "fetch-ai",\n "featured": true,\n "geo_location": null,\n "last_updated": "2025-01-06T12:46:03Z",\n "created_at": "2024-10-03T14:40:39Z"\n }\n ]\n}\n'})}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Field"}),(0,r.jsx)(n.th,{children:"Meaning"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"agents"})}),(0,r.jsx)(n.td,{children:"The agents on this page of results"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"offset"}),", ",(0,r.jsx)(n.code,{children:"limit"})]}),(0,r.jsx)(n.td,{children:"The pagination window you requested"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"num_hits"})}),(0,r.jsx)(n.td,{children:"How many results came back on this page"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"total"})}),(0,r.jsx)(n.td,{children:"How many results exist in total, across all pages"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"search_id"})}),(0,r.jsx)(n.td,{children:"Identifier for this search session, used for pagination and click feedback"})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["Response ",(0,r.jsx)(n.code,{children:"status"})," values (",(0,r.jsx)(n.code,{children:"active"}),", ",(0,r.jsx)(n.code,{children:"offline"}),", ",(0,r.jsx)(n.code,{children:"local"}),") describe the agent's current operational state and are not identical to the ",(0,r.jsx)(n.code,{children:"state"})," values you send as a request filter."]}),"\n",(0,r.jsx)(n.h3,{id:"request-parameters",children:"Request parameters"}),"\n",(0,r.jsxs)(n.p,{children:["Filters go inside the ",(0,r.jsx)(n.code,{children:"filters"})," object:"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Filter"}),(0,r.jsx)(n.th,{children:"Values"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"state"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"active"}),", ",(0,r.jsx)(n.code,{children:"inactive"}),", ",(0,r.jsx)(n.code,{children:"responsive"}),", ",(0,r.jsx)(n.code,{children:"unresponsive"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"category"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"fetch-ai"}),", ",(0,r.jsx)(n.code,{children:"community"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"agent_type"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"uagent"}),", ",(0,r.jsx)(n.code,{children:"a2a"}),", ",(0,r.jsx)(n.code,{children:"hosted"}),", ",(0,r.jsx)(n.code,{children:"mailbox"}),", ",(0,r.jsx)(n.code,{children:"proxy"}),", ",(0,r.jsx)(n.code,{children:"local"}),", ",(0,r.jsx)(n.code,{children:"custom"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"protocol_digest"})}),(0,r.jsx)(n.td,{children:"Digest(s) of the protocol(s) the agent implements"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags"})}),(0,r.jsx)(n.td,{children:"Tag(s) associated with the agent"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"has_readme"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"true"})," to return only agents with a non-empty README"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"has_location"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"true"})," to return only agents with a geo location"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"n_interactions"})}),(0,r.jsx)(n.td,{children:"Minimum number of recent interactions"})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"Top-level parameters:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Parameter"}),(0,r.jsx)(n.th,{children:"Values"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"search_text"})}),(0,r.jsx)(n.td,{children:"The text to search for"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sort"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"relevancy"}),", ",(0,r.jsx)(n.code,{children:"created-at"}),", ",(0,r.jsx)(n.code,{children:"last-modified"}),", ",(0,r.jsx)(n.code,{children:"interactions"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"direction"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"asc"}),", ",(0,r.jsx)(n.code,{children:"desc"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"offset"}),", ",(0,r.jsx)(n.code,{children:"limit"})]}),(0,r.jsxs)(n.td,{children:["Pagination window; ",(0,r.jsx)(n.code,{children:"limit"})," defaults to ",(0,r.jsx)(n.code,{children:"30"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"search_id"})}),(0,r.jsx)(n.td,{children:"Reuse a previous search's ID to group pages into one session"})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["Advanced knobs \u2014 ",(0,r.jsx)(n.code,{children:"semantic_search"}),", ",(0,r.jsx)(n.code,{children:"exact_match"}),", ",(0,r.jsx)(n.code,{children:"rerank"}),", ",(0,r.jsx)(n.code,{children:"cutoff"}),", ",(0,r.jsx)(n.code,{children:"exclude_geo_agents"}),", and ",(0,r.jsx)(n.code,{children:"source"})," \u2014 tune how strictly results are matched and ranked. Start without them, and see the ",(0,r.jsx)(n.a,{href:"https://docs.agentverse.ai/v-1/api-reference/search/agents",children:"OpenAPI reference"})," for their defaults and behaviour."]}),"\n",(0,r.jsx)(n.h3,{id:"pagination-and-click-feedback",children:"Pagination and click feedback"}),"\n",(0,r.jsxs)(n.p,{children:["To page through results, keep the body identical and increase ",(0,r.jsx)(n.code,{children:"offset"})," by ",(0,r.jsx)(n.code,{children:"limit"})," each time, passing the ",(0,r.jsx)(n.code,{children:"search_id"})," you got back from the first call. That groups every page under one search session. When a user picks an agent from the results, you can report it to ",(0,r.jsx)(n.code,{children:"POST /v1/search/agents/click"})," with the ",(0,r.jsx)(n.code,{children:"search_id"}),", the page index, and the agent address, which feeds Agentverse search analytics."]}),"\n",(0,r.jsx)(n.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"401 / 403"})," \u2014 the key is missing, expired, revoked, or lacks the required permission. Check the header is ",(0,r.jsx)(n.code,{children:"Authorization: Bearer <key>"})," and review the key on the ",(0,r.jsx)(n.a,{href:"/docs/agentverse/agentverse-api-key",children:"API Keys page"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"400"}
1)," \u2014 the body is not valid JSON, or a filter value is outside the allowed enum. In JavaScript, make sure you pass ",(0,r.jsx)(n.code,{children:"JSON.stringify(body)"})," rather than the object."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:["Empty ",(0,r.jsx)(n.code,{children:"agents"})]})," \u2014 the query was too narrow. Widen ",(0,r.jsx)(n.code,{children:"search_text"}),", drop filters such as ",(0,r.jsx)(n.code,{children:"state"}),", or raise ",(0,r.jsx)(n.code,{children:"limit"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"what-to-do-next-with-a-result",children:"What to do next with a result"}),"\n",(0,r.jsxs)(n.p,{children:["Each result carries the agent's ",(0,r.jsx)(n.code,{children:"address"}),". Copy it and use it to start a conversation: send a message with the ",(0,r.jsx)(n.a,{href:"/docs/agent-communication/agent-chat-protocol",children:"Agent Chat Protocol"}),", or paste the agent's handle into ",(0,r.jsxs)(n.a,{href:"https://asi1.ai/",children:["ASI",":One"]})," chat. For a full application that discovers an agent and then messages it, see ",(0,r.jsx)(n.a,{href:"/docs/agentverse/agentverse-based-application",children:"End to end application with Agentverse architecture"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"searching-functions",children:"Searching functions"}),"\n",(0,r.jsxs)(n.p,{children:["Functions (microservices published by agents) are searched with ",(0,r.jsx)(n.code,{children:"POST https://agentverse.ai/v1/search/functions"}),", which takes the same ",(0,r.jsx)(n.code,{children:"sort"}),", ",(0,r.jsx)(n.code,{children:"direction"}),", ",(0,r.jsx)(n.code,{children:"search_text"}),", ",(0,r.jsx)(n.code,{children:"offset"}),", and ",(0,r.jsx)(n.code,{children:"limit"})," parameters plus a ",(0,r.jsx)(n.code,{children:"function_type"})," filter, and returns a ",(0,r.jsx)(n.code,{children:"functions"})," array in the same envelope shape. See the ",(0,r.jsx)(n.a,{href:"https://agentverse.ai/docs/api/search",children:"Search API reference"})," for the full request and response."]}),"\n",(0,r.jsx)(n.h2,{id:"making-your-own-agent-discoverable",children:"Making your own agent discoverable"}),"\n",(0,r.jsx)(n.h3,{id:"agent-handle",children:"Agent Handle"}),"\n",(0,r.jsxs)(n.p,{children:["A handle is a short name you can give your agent so people can reach it directly instead of describing it in a search. Set the handle on your agent's profile in Agentverse, then paste it into an ",(0,r.jsxs)(n.a,{href:"https://asi1.ai/",children:["ASI",":One"]})," chat along with your request to route the conversation to that agent."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"The handle field on an agent profile in Agentverse",src:s(81321).A+"",width:"2621",height:"1564"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"Figure 1: Setting a handle on the agent profile."})}),"\n",(0,r.jsxs)(n.p,{children:["Handles make an agent easier to identify and to retrieve directly in ASI",":One",". They are a shortcut to a specific agent rather than a ranking boost, so a handle complements a good README instead of replacing it."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Using an agent handle in an ASI chat",src:s(33138).A+"",width:"3566",height:"2027"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsxs)(n.em,{children:["Figure 2: Using a handle in ASI",":One"," chat."]})}),"\n",(0,r.jsx)(n.h3,{id:"importance-of-good-readme",children:"Importance of Good README"}),"\n",(0,r.jsxs)(n.p,{children:["A well-structured README is the main thing search and ASI",":One"," have to work with when deciding whether your agent matches a query. It shapes how you are found and how well callers understand what you do. The Agent SEO Coach in Agentverse reviews your README, tags, and metadata and suggests improvements to clarity, coverage, and relevance."]}),"\n",(0,r.jsx)(n.p,{children:"Key elements to include:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Descriptive Title"}),': Prefer specific, keyword-rich titles (e.g., "AI Tutor for Middle School Algebra" instead of "TutorBot").']}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Overview Section"}),": Summarize purpose, audience, and key capabilities in 2\u20134 sentences."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Use Case Examples"}),": Add 2\u20133 practical tasks your Agent can perform. These help ASI",":One"," infer context accurately."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Capabilities and APIs"}),": Describe major functions in natural language (avoid code-only dumps). Clarify inputs/outputs."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Interaction Modes"}
1),": Note whether the Agent is used via direct message, ASI",":One"," chat response, webhook, or other interfaces."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Limitations and Scope"}),": State what the Agent does not do to reduce mismatches and improve precision."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Relevant Keywords and Tags"}),': Use consistent domain terms users might search for (e.g., "calendar integration", "meeting reminders").']}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Additional considerations:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Semantic richness"}),": Write clear, informative content to improve embedding and retrieval."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Markdown preferred"}),": Markdown yields better retrieval quality than alternative formats."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Placeholders are fine"}),": Intentional placeholders in links won't hurt scoring."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Language"}),": English READMEs are recommended, since search and ASI",":One"," are tuned for English queries."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For a deeper walkthrough, see the ",(0,r.jsx)(n.a,{href:"https://docs.agentverse.ai/documentation/agent-discovery/readme-guidelines",children:"Agentverse README guidelines"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"A good README looks like this:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"\n\n\n\n**Description**: This AI Agent retrieves real-time stock prices for any publicly traded\ncompany based on its ticker symbol. It provides share prices, stock quotes, and stock\nprices to users. Simply input a stock ticker (e.g., AAPL, TSLA) to get the latest price.\n\n**Input Data Model**\n\n```python\nclass StockPriceRequest(Model):\n ticker: str\n```\n\n**Output Data Model**\n\n```python\nclass StockPriceResponse(Model):\n price: float\n```\n"})}),"\n",(0,r.jsx)(n.p,{children:"Notes on the badges:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Keep the ",(0,r.jsx)(n.code,{children:"innovationlab"})," badge where applicable."]}),"\n",(0,r.jsxs)(n.li,{children:["If you are building a hackathon agent, include the ",(0,r.jsx)(n.code,{children:"hackathon"})," badge as shown above."]}),"\n",(0,r.jsxs)(n.li,{children:["The domain badge follows the pattern ",(0,r.jsx)(n.code,{children:""}),", where ",(0,r.jsx)(n.code,{children:"<hexcolor>"})," is a six-digit hex colour such as ",(0,r.jsx)(n.code,{children:"4CAF50"})," or ",(0,r.jsx)(n.code,{children:"3D8BD3"}),". Invalid hex values render as a broken badge."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"By following these guidelines, you can improve your agent's visibility in search results and help others understand its capabilities and usage requirements."}),"\n",(0,r.jsx)(n.h3,{id:"to-include-a-readme-in-your-agent",children:"To include a README in your Agent"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["In Agentverse, open your agent and go to the ",(0,r.jsx)(n.strong,{children:"Overview"})," tab."]}),"\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Edit"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"The Overview tab of an agent with the Edit button",src:s(13648).A+"",width:"2001",height:"1193"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"Figure 3: Editing the agent overview."})}),"\n",(0,r.jsxs)(n.ol,{start:"3",children:["\n",(0,r.jsxs)(n.li,{children:["Write or paste your README in the editor, then click ",(0,r.jsx)(n.strong,{children:"Save"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"The README editor with the Save button",src:s(83499).A+"",width:"2038",height:"1132"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"Figure 4: Saving the README."})}),"\n",(0,r.jsxs)(n.admonition,{type:"note",children:[(0,r.jsxs)(n.p,{children:["If you are building an agent for a ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"Hackathon"})}),", remember to include the Innovation Lab tag:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"\n"})}),(0,r.jsx)(n.p,{children:"Please also include a domain tag, for example:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"\n"})})]})]})}function g(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},79329:(e,n,s)=>{s.d(n,{A:()=>i});s(96540);var t=s(34164);const r={tabItem:"tabItem_Ymn6"};var a=s(74848);function i({children:e,hidden:n,className:s}){return(0,a.jsx)("div",{role:"tabpanel",className:(0,t.A)(r.tabItem,s),hidden:n,children:e})}},65537:(e,n,s)=>{s.d(n,{A:()=>A});var t=s(96540),r=s(34164),a=s(65627),i=s(56347),c=s(50372),o=s(30604),d=s(11861),l=s(78749);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs>
1 child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((({props:{value:e,label:n,attributes:s,default:t}})=>({value:e,label:n,attributes:s,default:t})))}(s);return function(e){const n=(0,d.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,s])}function g({value:e,tabValues:n}){return n.some((n=>n.value===e))}function x({queryString:e=!1,groupId:n}){const s=(0,i.W6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,o.aZ)(r),(0,t.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(s.location.search);n.set(r,e),s.replace({...s.location,search:n.toString()})}),[r,s])]}function p(e){const{defaultValue:n,queryString:s=!1,groupId:r}=e,a=u(e),[i,o]=(0,t.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!g({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:a}))),[d,h]=x({queryString:s,groupId:r}),[p,j]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[s,r]=(0,l.Dv)(n);return[s,(0,t.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),m=(()=>{const e=d??p;return g({value:e,tabValues:a})?e:null})();(0,c.A)((()=>{m&&o(m)}),[m]);return{selectedValue:i,selectValue:(0,t.useCallback)((e=>{if(!g({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),j(e)}),[h,j,a]),tabValues:a}}var j=s(9136);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=s(74848);function f({className:e,block:n,selectedValue:s,selectValue:t,tabValues:i}){const c=[],{blockElementScrollPositionUntilNextRender:o}=(0,a.a_)(),d=e=>{const n=e.currentTarget,r=c.indexOf(n),a=i[r].value;a!==s&&(o(n),t(a))},l=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=c.indexOf(e.currentTarget)+1;n=c[s]??c[0];break}case"ArrowLeft":{const s=c.indexOf(e.currentTarget)-1;n=c[s]??c[c.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":n},e),children:i.map((({value:e,label:n,attributes:t})=>(0,v.jsx)("li",{role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>{c.push(e)},onKeyDown:l,onClick:d,...t,className:(0,r.A)("tabs__item",m.tabItem,t?.className,{"tabs__item--active":s===e}),children:n??e},e)))})}function b({lazy:e,children:n,selectedValue:s}){const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function y(e){const n=p(e);return(0,v.jsxs)("div",{className:(0,r.A)("tabs-container",m.tabList),
1children:[(0,v.jsx)(f,{...n,...e}),(0,v.jsx)(b,{...n,...e})]})}function A(e){const n=(0,j.A)();return(0,v.jsx)(y,{...e,children:h(e.children)},String(n))}},81321:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/handle_1-a1c322b8b2893ac5b294df3985ed8bac.png"},33138:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/handle_2-50c5bacca8b30f74f3d9802d0ed7c5e0.png"},13648:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/readme1-1fb7170342329e13a793630b419b9bd3.png"},83499:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/readme2-edf987d1cb16571e7f91f1e7a8544e5c.png"},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>c});var t=s(96540);const r={},a=t.createContext(r);function i(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.