Let users install skills published by others and equip their agents with them.
A skill hub is a catalog of skills your users browse and install from inside the app. A skill is a folder, a SKILL.md telling the agent how to do something plus any scripts it needs, so a hub is how users get one without cloning a repository or knowing where the files belong.Installing does not equip an agent. It adds the skill to the user’s own pool of installed skills, and equipping an agent is a separate step:
1
Install into the pool
The user reads a skill’s SKILL.md on its card and installs it, with nothing to fill in. Every hub feeds the same pool, so what came from which registry stops mattering once it is installed.
2
Equip an agent's workspace
In a chat, the user picks from the pool to unpack the skill into that agent’s workspace. The agent can follow it from that point on.
The pool belongs to the user rather than to any chat, so one install is equipped in as many workspaces as they like. A local folder can also be uploaded straight into a workspace, whether or not it came from a hub.
A public registry of community-published skills. Works anonymously; a token raises the rate limit.
Coming soon
—
More registries are being built.
ClawSkillHub works with no arguments, and every field below has a default:
Configure ClawSkillHub
from agentscope.app.hub import ClawSkillHubhub = ClawSkillHub( # Addresses this hub in the API and the frontend URL. Keep it stable. hub_id="clawhub", # Shown in the frontend's hub switcher. display_name="ClawHub", # Optional token. Anonymous requests work, but are rate-limited. api_token=None,)
Parameter
Default
Description
hub_id
"clawhub"
The identifier addressing this hub in routes and URLs
display_name
"ClawHub"
The name shown in the hub switcher
description
ClawHub’s blurb
The one-line description under the name
icon_url
ClawHub’s favicon
The icon shown beside the name
base_url
"https://clawhub.ai"
The registry endpoint
api_token
None
A ClawHub token, affecting rate limits only
timeout
30.0
Per-request timeout in seconds
max_retries
3
Retries before giving up on a rate-limited request
Register several to give users a choice of catalogs, each with its own hub_id.
Registering two skill hubs under the same hub_id fails at startup rather than silently shadowing one.
3
Browse and install
Restart the service and open the Skill page. The sidebar lists your registered hubs plus Mine, the user’s own collection. Pick a hub, search, and open a card to read its SKILL.md before deciding.
Browsing a skill registry from the Skill page.
Install adds it to the user’s collection right away, with nothing to fill in. Everything installed shows up under Installed skills:
The skills a user has installed.
4
Equip an agent
Open a chat, expand the Skill panel, and choose Add. Two tabs cover both sources:
Tab
Description
From installed
Pick from the collection. The files are fetched and unpacked into the agent’s workspace
Upload a folder
Pick a folder from disk, containing a SKILL.md at its root. A progress bar tracks the upload
Equipping an agent with a skill, from the collection or a local folder.
Uploads are bounded so one user cannot fill a workspace: at most 100 files, 50 MB per file, and 500 MB in total. A folder whose name is taken installs under a numbered suffix instead of overwriting.
Equipping an installed skill fetches its files from the hub at that moment, because an install keeps the skill’s description rather than a copy of its files. If the hub is unreachable, that skill is reported as failed with the reason, and the others in the same request are still equipped.
Any catalog of skill folders becomes a hub by subclassing SkillHubBase. Three methods are required, one to browse, one to fetch a single listing, and one to serve its archive:
A hub over an internal catalog
from agentscope.app.hub import ( SkillArchive, SkillCard, SkillHubBase, SkillHubPage,)class InternalSkillHub(SkillHubBase): """The skills our platform team publishes internally.""" def __init__(self) -> None: super().__init__( hub_id="internal", display_name="Internal Skills", description="Skills published by the platform team.", ) async def list_skills( self, user_id: str, # The keyword the user typed, or `None` to browse everything. q: str | None = None, # The opaque cursor from the previous page, or `None` to start. cursor: str | None = None, limit: int = 20, ) -> SkillHubPage: """Return one page of listings, without their `SKILL.md` bodies.""" page = await fetch_our_catalog(query=q, after=cursor, limit=limit) return SkillHubPage( cards=[self._to_card(c) for c in page.items], # `None` tells the frontend there is nothing more to load. next_cursor=page.next_cursor, ) async def get_skill(self, user_id: str, card_id: str) -> SkillCard: """Return one listing, this time with its `SKILL.md` body.""" detail = await fetch_one(card_id) return self._to_card(detail, markdown=detail.readme) async def download( self, user_id: str, card_id: str, version: str | None = None, ) -> SkillArchive: """Open the skill's archive for streaming.""" response = await self._client.get(f"/skills/{card_id}/archive") # One of "zip", "tar", or "tar.gz". return SkillArchive(format="tar.gz", stream=response.aiter_bytes())
Three more things shape how a hub behaves:
Point
Description
Cheap listing
Leave SKILL.md out of list_skills. Fetching a body per card multiplies one request by the page size and exhausts most registries on the first screen. Load it in get_skill
Cursor pagination
Return whatever opaque string lets you resume, and None when the catalog is exhausted
Missing cards
Raise KeyError from get_skill for an unknown id, and the service answers 404
The archive should hold the skill’s folder with a SKILL.md at its root, either as a single top-level directory or as the files directly. Both layouts work, and the folder is renamed to the installed skill’s name.
All three methods receive user_id as their first argument, so a catalog does not have to look the same to everybody. Filter on it to run a per-team allowlist, gate paid listings on entitlements from your billing system, or keep a draft skill visible only to its authors:
A catalog that differs per user
class InternalSkillHub(SkillHubBase): async def list_skills( self, user_id: str, q: str | None = None, cursor: str | None = None, limit: int = 20, ) -> SkillHubPage: """Return only the listings this user is allowed to see.""" # Whatever your own system says this user may install. allowed = await our_entitlements(user_id) page = await fetch_our_catalog(query=q, after=cursor, limit=limit) return SkillHubPage( cards=[ self._to_card(c) for c in page.items if c.id in allowed ], next_cursor=page.next_cursor, ) async def get_skill(self, user_id: str, card_id: str) -> SkillCard: """Refuse a hidden card, so guessing an id gains nothing.""" if card_id not in await our_entitlements(user_id): raise KeyError(card_id) detail = await fetch_one(card_id) return self._to_card(detail, markdown=detail.readme) async def download( self, user_id: str, card_id: str, version: str | None = None, ) -> SkillArchive: """Refuse the archive of a hidden card as well.""" if card_id not in await our_entitlements(user_id): raise KeyError(card_id) response = await self._client.get(f"/skills/{card_id}/archive") return SkillArchive(format="tar.gz", stream=response.aiter_bytes())
download takes user_id for exactly this reason, so apply the same filter there too. Hiding a card from the listing alone is not access control: both get_skill and download are reachable with any id the caller cares to guess.
A hub lives for the whole lifetime of the service, so it can hold a connection pool instead of opening one per request. Implement the async context manager methods and the service enters every hub on startup, closing them on shutdown:
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"AgentScope","colors":{"primary":"#0064FD","light":"#3B87FF","dark":"#0050CC"},"logo":{"light":"https://mintcdn.com/agentscope-ai-786677c7/ypv6xWD33tVApmTg/logo/agentscope.svg?fit=max\u0026auto=format\u0026n=ypv6xWD33tVApmTg\u0026q=85\u0026s=1c9a848ffa88ffa648f07542fe23e3e7","dark":"https://mintcdn.com/agentscope-ai-786677c7/ypv6xWD33tVApmTg/logo/agentscope.svg?fit=max\u0026auto=format\u0026n=ypv6xWD33tVApmTg\u0026q=85\u0026s=1c9a848ffa88ffa648f07542fe23e3e7"},"favicon":"https://mintcdn.com/agentscope-ai-786677c7/ypv6xWD33tVApmTg/logo/agentscope.svg?fit=max\u0026auto=format\u0026n=ypv6xWD33tVApmTg\u0026q=85\u0026s=1c9a848ffa88ffa648f07542fe23e3e7","navbar":{},"footer":{"socials":{"x":"https://x.com/agentscope","github":"https://github.com/agentscope-ai","discord":"https://discord.gg/eYMpfnkG8h"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"markdown":{"instructions":["For AgentScope Python, use https://docs.agentscope.io/stable/en/index for new projects. For existing projects, check the installed agentscope version and use matching versioned documentation.","The /latest/ alias points to the newest documentation and may move ahead of /stable/ when a development version exists. Do not mix AgentScope 1.x and 2.x APIs.","State the AgentScope version when providing installation commands or code examples. ReMe uses its own continuously updated /reme/latest/ documentation."]},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Home Page","icon":"book-open-cover","href":"https://agentscope.io/"},{"anchor":"Blog","icon":"newspaper","href":"https://agentscope.io/blog/"}]},"languages":[{"language":"en","default":true,"href":"en/versions/2.0.12dev"},{"language":"zh","href":"zh/versions/2.0.12dev"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"agentscope-ai-786677c7","hasAudioNarration":false,"actualSubdomain":"agentscope-ai-786677c7","customDomains":["docs.agentscope.io"],"gitSource":{"type":"github","owner":"agentscope-ai","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6acf927233db61125561fb77","collectionId":"7ac31d24-f1ab-45c3-85f4-86092cf1e1b6","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6acf927233db61125561fb77"},"entitlements":{},"buildId":"6ae020fa971f41769d3546e9","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"en","tag":"AgentScope","count":519},{"language":"zh","tag":"AgentScope","count":487},{"language":"en","tag":"Building Blocks","count":326},{"language":"zh","tag":"核心模块","count":319},{"language":"en","tag":"Agent as Service","count":112},{"language":"zh","tag":"智能体即服务","count":112},{"language":"default","tag":"AgentScope","count":101},{"language":"default","tag":"API","count":101},{"language":"default","tag":"Agent as Service","count":72},{"language":"en","tag":"Channel","count":41},{"language":"zh","tag":"消息渠道","count":41},{"language":"en","tag":"Agent","count":40},{"language":"en","tag":"Tool","count":40},{"language":"zh","tag":"智能体","count":40},{"language":"zh","tag":"工具","count":40},{"language":"en","tag":"Get Started","count":38},{"language":"zh","tag":"快速开始","count":36},{"language":"en","tag":"Model","count":34},{"language":"zh","tag":"模型","count":34},{"language":"en","tag":"Context","count":32},{"language":"en","tag":"Permission System","count":32},{"language":"zh","tag":"上下文管理","count":32},{"language":"zh","tag":"权限系统","count":32},{"language":"default","tag":"Deploy \u0026 Serve","count":29},{"language":"default","tag":"knowledge_bases","count":16},{"language":"default","tag":"channels","count":14},{"language":"default","tag":"workspace","count":13},{"language":"default","tag":"sop","count":11},{"language":"default","tag":"hub","count":8},{"language":"default","tag":"sessions","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"en/versions/2.0.11/deploy/hub/skill-hub","slug":"/en/versions/2.0.11/deploy/hub/skill-hub","pageMetadata":{"title":"Skill Hub","description":"Let users install skills published by others and equip their agents with them.","href":"/en/versions/2.0.11/deploy/hub/skill-hub"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Let users install skills published by others and equip their agents with them.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Frame,Heading,Note,OptimizedImage,Step,Steps,Table,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A skill hub is a catalog of `,_jsx(_components.a,{href:`/en/versions/2.0.11/building-blocks/tool/skill`,children:`skills`}),` your users browse and install from inside the app. A skill is a folder, a `,_jsx(_components.code,{children:`SKILL.md`}),` telling the agent how to do something plus any scripts it needs, so a hub is how users get one without cloning a repository or knowing where the files belong.`]}),`\n`,_jsx(_components.p,{children:`Installing does not equip an agent. It adds the skill to the user’s own pool of installed skills, and equipping an agent is a separate step:`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Install into the pool`,children:_jsxs(_components.p,{children:[`The user reads a skill’s `,_jsx(_components.code,{children:`SKILL.md`}),` on its card and installs it, with nothing to fill in. Every hub feeds the same pool, so what came from which registry stops mattering once it is installed.`]})}),_jsx(Step,{title:`Equip an agent's workspace`,children:_jsxs(_components.p,{children:[`In a chat, the user picks from the pool to unpack the skill into that agent’s `,_jsx(_components.a,{href:`/en/versions/2.0.11/deploy/workspace-manager`,children:`workspace`}),`. The agent can follow it from that point on.`]})})]}),`\n`,_jsx(_components.p,{children:`The pool belongs to the user rather than to any chat, so one install is equipped in as many workspaces as they like. A local folder can also be uploaded straight into a workspace, whether or not it came from a hub.`}),`\n`,_jsx(Heading,{level:`2`,id:`available-skill-hubs`,children:`Available Skill Hubs`}),`\n`,_jsxs(_components.p,{children:[`AgentScope ships one skill hub today, and any other catalog can be wrapped with a `,_jsx(_components.a,{href:`#custom-skill-hub`,children:`custom hub`}),`:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Class`}),_jsx(_components.th,{children:`Registry`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ClawSkillHub`})}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://clawhub.ai`,children:`ClawHub`})}),_jsx(_components.td,{children:`A public registry of community-published skills. Works anonymously; a token raises the rate limit.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.em,{children:`Coming soon`})}),_jsx(_components.td,{children:`—`}),_jsx(_components.td,{children:`More registries are being built.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ClawSkillHub`}),` works with no arguments, and every field below has a default:`]}),`\n`,_jsx(CodeBlock,{filename:`Configure ClawSkillHub`,numberOfLines:`10`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` agentscope.app.hub `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ClawSkillHub`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`hub `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ClawSkillHub(`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Addresses this hub in the API and the frontend URL. Keep it stable.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` hub_id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"clawhub\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Shown in the frontend's hub switcher.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` display_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ClawHub\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Optional token. Anonymous requests work, but are rate-limited.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` api_token`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`hub_id`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`\"clawhub\"`})}),_jsx(_components.td,{children:`The identifier addressing this hub in routes and URLs`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`display_name`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`\"ClawHub\"`})}),_jsx(_components.td,{children:`The name shown in the hub switcher`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`description`})}),_jsx(_components.td,{children:`ClawHub’s blurb`}),_jsx(_components.td,{children:`The one-line description under the name`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`icon_url`})}),_jsx(_components.td,{children:`ClawHub’s favicon`}),_jsx(_components.td,{children:`The icon shown beside the name`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`base_url`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`\"https://clawhub.ai\"`})}),_jsx(_components.td,{children:`The registry endpoint`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`api_token`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`None`})}),_jsx(_components.td,{children:`A ClawHub token, affecting rate limits only`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`timeout`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`30.0`})}),_jsx(_components.td,{children:`Per-request timeout in seconds`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`max_retries`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`3`})}),_jsx(_components.td,{children:`Retries before giving up on a rate-limited request`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`quickstart`,children:`Quickstart`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Start the Agent Service`,children:_jsxs(_components.p,{children:[`Skill hubs are a feature of `,_jsx(_components.a,{href:`/en/versions/2.0.11/deploy/agent-service`,children:`Agent Service`}),`, so you need a running service and a frontend to browse from. Follow the `,_jsx(_components.a,{href:`/en/versions/2.0.11/deploy/agent-service#try-the-bundled-example`,children:`Agent Service quickstart`}),` to boot the bundled `,_jsx(_components.a,{href:`https://github.com/agentscope-ai/agentscope/tree/main/examples/agent_service`,children:_jsx(_components.code,{children:`examples/agent_service`})}),` backend together with the `,_jsx(_components.a,{href:`https://github.com/agentscope-ai/agentscope/tree/main/examples/web_ui`,children:_jsx(_components.code,{children:`examples/web_ui`})}),` frontend.`]})}),_jsxs(Step,{title:`Register the hub`,children:[_jsxs(_components.p,{children:[`Pass your hubs to `,_jsx(_components.code,{children:`create_app`}),` through `,_jsx(_components.code,{children:`skill_hubs`}),`. That one argument brings the routes, the store page, and the install flow with it:`]}),_jsx(CodeBlock,{filename:`Register a skill hub`,numberOfLines:`7`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` agentscope.app `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` create_app`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` agentscope.app.hub `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ClawSkillHub`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`app `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` create_app(`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # ...existing code...`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` skill_hubs`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[ClawSkillHub()],`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),_jsxs(_components.p,{children:[`Register several to give users a choice of catalogs, each with its own `,_jsx(_components.code,{children:`hub_id`}),`.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`Registering two skill hubs under the same `,_jsx(_components.code,{children:`hub_id`}),` fails at startup rather than silently shadowing one.`]})})]}),_jsxs(Step,{title:`Browse and install`,children:[_jsxs(_components.p,{children:[`Restart the service and open the `,_jsx(_components.strong,{children:`Skill`}),` page. The sidebar lists your registered hubs plus `,_jsx(_components.strong,{children:`Mine`}),`, the user’s own collection. Pick a hub, search, and open a card to read its `,_jsx(_components.code,{children:`SKILL.md`}),` before deciding.`]}),_jsx(Frame,{caption:`Browsing a skill registry from the Skill page.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/skill_hub.png?fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=2f1354a4bbb07ca6d90bbb3d608aff38`,alt:`Browsing a skill registry`,\"data-og-width\":`2932`,width:`2932`,\"data-og-height\":`1730`,height:`1730`,\"data-path\":`images/agentscope/skill_hub.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/skill_hub.png?w=280\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=c532faaef1c11180ddce055269f887d7 280w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/skill_hub.png?w=560\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=994dd9ae24f79c408e641e2a88fe163e 560w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/skill_hub.png?w=840\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=43f8e980f5506e0c0e8a3ed2d6808b01 840w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/skill_hub.png?w=1100\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=170d9a0ec8a3bff99613765517ad5546 1100w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/skill_hub.png?w=1650\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=a15c55df52696d63f30916c1f292f1f6 1650w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/skill_hub.png?w=2500\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=7d78dd1bd685844c0e308a821dc2a5ce 2500w`})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Install`}),` adds it to the user’s collection right away, with nothing to fill in. Everything installed shows up under `,_jsx(_components.strong,{children:`Installed skills`}),`:`]}),_jsx(Frame,{caption:`The skills a user has installed.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/installed_skill.png?fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=3db70d5191990745f45bc6f149148ead`,alt:`Installed skills`,\"data-og-width\":`2932`,width:`2932`,\"data-og-height\":`1730`,height:`1730`,\"data-path\":`images/agentscope/installed_skill.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/installed_skill.png?w=280\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=df10ae04668ec3b3061d45a0a343dafe 280w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/installed_skill.png?w=560\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=d1397aa30505ada17ce456b8dcde01ae 560w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/installed_skill.png?w=840\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=96903a14a8e96beabfb04710ac558f2c 840w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/installed_skill.png?w=1100\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=2872fc5139085f900fe668fbcbe7b11f 1100w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/installed_skill.png?w=1650\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=32a31b6d572fe31422809bef4c4ea66e 1650w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/installed_skill.png?w=2500\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=3850aa2c9743d81b61144af94e5c3f5f 2500w`})})]}),_jsxs(Step,{title:`Equip an agent`,children:[_jsxs(_components.p,{children:[`Open a chat, expand the `,_jsx(_components.strong,{children:`Skill`}),` panel, and choose `,_jsx(_components.strong,{children:`Add`}),`. Two tabs cover both sources:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Tab`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`From installed`}),_jsx(_components.td,{children:`Pick from the collection. The files are fetched and unpacked into the agent’s workspace`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Upload a folder`}),_jsxs(_components.td,{children:[`Pick a folder from disk, containing a `,_jsx(_components.code,{children:`SKILL.md`}),` at its root. A progress bar tracks the upload`]})]})]})]}),_jsx(Frame,{caption:`Equipping an agent with a skill, from the collection or a local folder.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/assign_skill.png?fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=2775254301ae104c8abcfdd5c5c64f9a`,alt:`Equipping an agent with a skill`,\"data-og-width\":`2932`,width:`2932`,\"data-og-height\":`1730`,height:`1730`,\"data-path\":`images/agentscope/assign_skill.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/assign_skill.png?w=280\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=a2ba3a00af8f63278a5bff1fb5452651 280w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/assign_skill.png?w=560\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=bd826f27c5118c12d0867a07d2417f73 560w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/assign_skill.png?w=840\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=3cff9894d492f0e2ba2ba1583da124fa 840w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/assign_skill.png?w=1100\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=957d5b2320ba93a6826a5e1798ae2edc 1100w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/assign_skill.png?w=1650\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=01f91064b1ff6bcb7dd113898fc42375 1650w, https://mintcdn.com/agentscope-ai-786677c7/TlC5p3qpf2MkjDvZ/images/agentscope/assign_skill.png?w=2500\u0026fit=max\u0026auto=format\u0026n=TlC5p3qpf2MkjDvZ\u0026q=85\u0026s=5cd703053be3107ce2db2ef49a0848aa 2500w`})}),_jsx(_components.p,{children:`Uploads are bounded so one user cannot fill a workspace: at most 100 files, 50 MB per file, and 500 MB in total. A folder whose name is taken installs under a numbered suffix instead of overwriting.`}),_jsx(Note,{children:_jsx(_components.p,{children:`Equipping an installed skill fetches its files from the hub at that moment, because an install keeps the skill’s description rather than a copy of its files. If the hub is unreachable, that skill is reported as failed with the reason, and the others in the same request are still equipped.`})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`custom-skill-hub`,children:`Custom Skill Hub`}),`\n`,_jsxs(_components.p,{children:[`Any catalog of skill folders becomes a hub by subclassing `,_jsx(_components.code,{children:`SkillHubBase`}),`. Three methods are required, one to browse, one to fetch a single listing, and one to serve its archive:`]}),`\n`,_jsx(CodeBlock,{filename:`A hub over an internal catalog`,numberOfLines:`50`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`50`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` agentscope.app.hub `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` SkillArchive,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` SkillCard,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` SkillHubBase,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` SkillHubPage,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` InternalSkillHub`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`SkillHubBase`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"\"\"The skills our platform team publishes internally.\"\"\"`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` __init__`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) -> `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` super`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`().`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`__init__`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` hub_id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"internal\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` display_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Internal Skills\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` description`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Skills published by the platform team.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` )`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` list_skills`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` user_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:\" # The keyword the user typed, or `None` to browse everything.\"})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` q`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:\" # The opaque cursor from the previous page, or `None` to start.\"})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` cursor`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` limit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`int`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 20`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ) -> SkillHubPage:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:' \"\"\"Return one page of listings, without their `SKILL.md` bodies.\"\"\"'})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` page `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` fetch_our_catalog(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`query`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`q, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`cursor, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`limit`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`limit)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` SkillHubPage(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` cards`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`._to_card(c) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` c `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`in`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` page.items],`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:\" # `None` tells the frontend there is nothing more to load.\"})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` next_cursor`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`page.next_cursor,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` )`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` get_skill`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`user_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`card_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) -> SkillCard:`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:' \"\"\"Return one listing, this time with its `SKILL.md` body.\"\"\"'})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` detail `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` fetch_one(card_id)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`._to_card(detail, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`markdown`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`detail.readme)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` download`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` user_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` card_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` version`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ) -> SkillArchive:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"\"\"Open the skill's archive for streaming.\"\"\"`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` response `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`._client.get(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/skills/`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`card_id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/archive\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # One of \"zip\", \"tar\", or \"tar.gz\".`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` SkillArchive(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`format`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"tar.gz\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`stream`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`response.aiter_bytes())`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Three more things shape how a hub behaves:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Point`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cheap listing`}),_jsxs(_components.td,{children:[`Leave `,_jsx(_components.code,{children:`SKILL.md`}),` out of `,_jsx(_components.code,{children:`list_skills`}),`. Fetching a body per card multiplies one request by the page size and exhausts most registries on the first screen. Load it in `,_jsx(_components.code,{children:`get_skill`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cursor pagination`}),_jsxs(_components.td,{children:[`Return whatever opaque string lets you resume, and `,_jsx(_components.code,{children:`None`}),` when the catalog is exhausted`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Missing cards`}),_jsxs(_components.td,{children:[`Raise `,_jsx(_components.code,{children:`KeyError`}),` from `,_jsx(_components.code,{children:`get_skill`}),` for an unknown id, and the service answers 404`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`The archive should hold the skill’s folder with a `,_jsx(_components.code,{children:`SKILL.md`}),` at its root, either as a single top-level directory or as the files directly. Both layouts work, and the folder is renamed to the installed skill’s name.`]}),`\n`,_jsx(Heading,{level:`3`,id:`control-visibility-per-user`,children:`Control Visibility Per User`}),`\n`,_jsxs(_components.p,{children:[`All three methods receive `,_jsx(_components.code,{children:`user_id`}),` as their first argument, so a catalog does not have to look the same to everybody. Filter on it to run a per-team allowlist, gate paid listings on entitlements from your billing system, or keep a draft skill visible only to its authors:`]}),`\n`,_jsx(CodeBlock,{filename:`A catalog that differs per user`,numberOfLines:`37`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`37`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` InternalSkillHub`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`SkillHubBase`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` list_skills`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` user_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` q`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` cursor`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` limit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`int`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 20`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ) -> SkillHubPage:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"\"\"Return only the listings this user is allowed to see.\"\"\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Whatever your own system says this user may install.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` allowed `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` our_entitlements(user_id)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` page `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` fetch_our_catalog(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`query`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`q, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`cursor, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`limit`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`limit)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` SkillHubPage(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` cards`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`._to_card(c) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` c `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`in`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` page.items `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` c.id `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`in`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` allowed`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` next_cursor`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`page.next_cursor,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` )`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` get_skill`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`user_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`card_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) -> SkillCard:`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"\"\"Refuse a hidden card, so guessing an id gains nothing.\"\"\"`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` card_id `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`not`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` in`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` our_entitlements(user_id):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` raise`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` KeyError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(card_id)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` detail `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` fetch_one(card_id)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`._to_card(detail, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`markdown`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`detail.readme)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` download`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` user_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` card_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` version`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ) -> SkillArchive:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"\"\"Refuse the archive of a hidden card as well.\"\"\"`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` card_id `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`not`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` in`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` our_entitlements(user_id):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` raise`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` KeyError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(card_id)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` response `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`._client.get(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/skills/`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`card_id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/archive\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` SkillArchive(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`format`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"tar.gz\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`stream`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`response.aiter_bytes())`})]}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`download`}),` takes `,_jsx(_components.code,{children:`user_id`}),` for exactly this reason, so apply the same filter there too. Hiding a card from the listing alone is not access control: both `,_jsx(_components.code,{children:`get_skill`}),` and `,_jsx(_components.code,{children:`download`}),` are reachable with any id the caller cares to guess.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`reuse-one-http-client`,children:`Reuse One HTTP Client`}),`\n`,_jsx(_components.p,{children:`A hub lives for the whole lifetime of the service, so it can hold a connection pool instead of opening one per request. Implement the async context manager methods and the service enters every hub on startup, closing them on shutdown:`}),`\n`,_jsx(CodeBlock,{filename:`Open and close a shared client`,numberOfLines:`7`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` InternalSkillHub`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`SkillHubBase`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` __aenter__`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) -> `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"InternalSkillHub\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`._client `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` httpx.AsyncClient(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`timeout`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`30.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` self`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` __aexit__`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`exc`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`object`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) -> `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`._client.aclose()`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`further-reading`,children:`Further Reading`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`MCP Hub`,icon:`plug`,href:`/en/versions/2.0.11/deploy/hub/mcp-hub`,cta:`Read more`,arrow:true,children:_jsx(_components.p,{children:`The same idea for MCP servers.`})}),_jsx(Card,{title:`Skill`,icon:`book-open`,href:`/en/versions/2.0.11/building-blocks/tool/skill`,cta:`Read more`,arrow:true,children:_jsx(_components.p,{children:`How the agent discovers and follows a skill.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Skill Hub","description":"Let users install skills published by others and equip their agents with them.","href":"/en/versions/2.0.11/deploy/hub/skill-hub"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Available Skill Hubs","slug":"available-skill-hubs","depth":2,"children":[]},{"title":"Quickstart","slug":"quickstart","depth":2,"children":[]},{"title":"Custom Skill Hub","slug":"custom-skill-hub","depth":2,"children":[{"title":"Control Visibility Per User","slug":"control-visibility-per-user","depth":3,"children":[]},{"title":"Reuse One HTTP Client","slug":"reuse-one-http-client","depth":3,"children":[]}]},{"title":"Further Reading","slug":"further-reading","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"agentscope-ai-786677c7","siteName":"AgentScope","title":"Skill Hub - AgentScope","navMaps":{"firstHrefInVersion":{"2.0.12dev":{"href":"/en/versions/2.0.12dev/deploy/hub/skill-hub","matchLevel":1},"2.0.11":{"href":"/en/versions/2.0.11/deploy/hub/skill-hub","matchLevel":0},"2.0.10":{"href":"/en/versions/2.0.10/deploy/hub/skill-hub","matchLevel":1},"2.0.9":{"href":"/en/versions/2.0.9/deploy/hub/skill-hub","matchLevel":1},"2.0.8":{"href":"/en/versions/2.0.8/deploy/hub/skill-hub","matchLevel":1},"2.0.7":{"href":"/en/versions/2.0.7/deploy/hub/skill-hub","matchLevel":1},"2.0.6":{"href":"/en/versions/2.0.6/deploy/hub/skill-hub","matchLevel":1},"2.0.5":{"href":"/en/versions/2.0.5/deploy/agent-service","matchLevel":2},"2.0.4":{"href":"/en/versions/2.0.4/deploy/agent-service","matchLevel":2},"2.0.3":{"href":"/en/versions/2.0.3/deploy/agent-service","matchLevel":2},"2.0.2":{"href":"/en/versions/2.0.2","matchLevel":3},"1.0.21":{"href":"/en/versions/1.0.21","matchLevel":3},"latest":{"href":"/en/reme/latest/overview","matchLevel":4}},"firstHrefInLanguage":{"en":{"href":"/en/versions/2.0.11/deploy/hub/skill-hub","matchLevel":0},"zh":{"href":"/zh/versions/2.0.11/deploy/hub/skill-hub","matchLevel":1}}},"lastModified":"2026-10-27T03:57:37.467Z","originalFileLocation":"en/versions/2.0.11/deploy/hub/skill-hub.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Let users install skills published by others and equip their agents with them.\">\u003cmeta data-mint-head name=\"application-name\" content=\"AgentScope\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/agentscope-ai-786677c7/1CzZcOuOvJAMkPRv/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/agentscope-ai-786677c7/1CzZcOuOvJAMkPRv/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/agentscope-ai-786677c7/1CzZcOuOvJAMkPRv/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/agentscope-ai-786677c7/1CzZcOuOvJAMkPRv/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/agentscope-ai-786677c7/1CzZcOuOvJAMkPRv/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/agentscope-ai-786677c7/1CzZcOuOvJAMkPRv/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/agentscope-ai-786677c7/1CzZcOuOvJAMkPRv/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/agentscope-ai-786677c7/1CzZcOuOvJAMkPRv/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/agentscope-ai-786677c7/1CzZcOuOvJAMkPRv/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Skill Hub - AgentScope\">\u003cmeta data-mint-head property=\"og:description\" content=\"Let users install skills published by others and equip their agents with them.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"AgentScope\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.agentscope.io/en/versions/2.0.11/deploy/hub/skill-hub\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://agentscope-ai-786677c7.mintlify.app/_mintlify/api/og/v2?division=MCP+%26+Skill+Hub\u0026amp;title=Skill+Hub\u0026amp;description=Let+users+install+skills+published+by+others+and+equip+their+agents+with+them.\u0026amp;theme=010675907e6e5009270e69a1\u0026amp;signature=c52d7f5c4ff10d84301a65ee0d62fea6f8740774e5f719563618b921a96aed3b\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Skill Hub - AgentScope\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Let users install skills published by others and equip their agents with them.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://agentscope-ai-786677c7.mintlify.app/_mintlify/api/og/v2?division=MCP+%26+Skill+Hub\u0026amp;title=Skill+Hub\u0026amp;description=Let+users+install+skills+published+by+others+and+equip+their+agents+with+them.\u0026amp;theme=010675907e6e5009270e69a1\u0026amp;signature=c52d7f5c4ff10d84301a65ee0d62fea6f8740774e5f719563618b921a96aed3b\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/agentscope-ai-786677c7/1CzZcOuOvJAMkPRv/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"AgentScope\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0064FD\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.agentscope.io/en/versions/2.0.11/deploy/hub/skill-hub\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/en/versions/2.0.11/deploy/hub/skill-hub.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.agentscope.io/en/versions/2.0.11/deploy/hub/skill-hub\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://docs.agentscope.io/zh/versions/2.0.11/deploy/hub/skill-hub\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.agentscope.io/en/versions/2.0.11/deploy/hub/skill-hub\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.agentscope.io/#organization\",\"name\":\"AgentScope\",\"url\":\"https://docs.agentscope.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/agentscope-ai-786677c7/ypv6xWD33tVApmTg/logo/agentscope.svg?fit=max\u0026auto=format\u0026n=ypv6xWD33tVApmTg\u0026q=85\u0026s=1c9a848ffa88ffa648f07542fe23e3e7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.agentscope.io#website\",\"name\":\"AgentScope\",\"url\":\"https://docs.agentscope.io\",\"publisher\":{\"@id\":\"https://docs.agentscope.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.agentscope.io/en/versions/2.0.11/deploy/hub/skill-hub#webpage\",\"url\":\"https://docs.agentscope.io/en/versions/2.0.11/deploy/hub/skill-hub\",\"name\":\"Skill Hub\",\"description\":\"Let users install skills published by others and equip their agents with them.\",\"dateModified\":\"2026-10-27T03:57:37.467Z\",\"isPartOf\":{\"@id\":\"https://docs.agentscope.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.agentscope.io/en/versions/2.0.11/deploy/hub/skill-hub#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.agentscope.io/en/versions/2.0.11/deploy/hub/skill-hub#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Agent as Service\",\"item\":\"https://docs.agentscope.io/en/versions/2.0.11/deploy/agent-service\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MCP \u0026 Skill Hub\",\"item\":\"https://docs.agentscope.io/en/versions/2.0.11/deploy/hub/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Skill Hub\",\"item\":\"https://docs.agentscope.io/en/versions/2.0.11/deploy/hub/skill-hub\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.agentscope.io/en/versions/2.0.11/deploy/hub/skill-hub#article\",\"headline\":\"Skill Hub\",\"name\":\"Skill Hub\",\"description\":\"Let users install skills published by others and equip their agents with them.\",\"url\":\"https://docs.agentscope.io/en/versions/2.0.11/deploy/hub/skill-hub\",\"mainEntityOfPage\":{\"@id\":\"https://docs.agentscope.io/en/versions/2.0.11/deploy/hub/skill-hub#webpage\"},\"dateModified\":\"2026-10-27T03:57:37.467Z\",\"publisher\":{\"@id\":\"https://docs.agentscope.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.agentscope.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"AgentScope\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"AgentScope","nav":{"global":{"anchors":[{"anchor":"Home Page","icon":"book-open-cover","href":"https://agentscope.io/"},{"anchor":"Blog","icon":"newspaper","href":"https://agentscope.io/blog/"}]},"languages":[{"language":"en","default":true,"tabs":[{"tab":"AgentScope","versions":[{"version":"2.0.12dev","tag":"Development","pages":[{"title":"2.0.12dev","href":"/en/versions/2.0.12dev/deploy/hub/skill-hub"}]},{"version":"2.0.11","default":true,"groups":[{"group":"Get Started","pages":[{"title":"What's AgentScope 2.0?","href":"/en/versions/2.0.11"},{"title":"Quickstart","href":"/en/versions/2.0.11/quickstart"},{"title":"Release Notes","href":"/en/versions/2.0.11/release-notes"}]},{"group":"Building Blocks","pages":[{"title":"Message \u0026 Event","href":"/en/versions/2.0.11/building-blocks/message-and-event"},{"group":"Agent","pages":[{"title":"Overview","href":"/en/versions/2.0.11/building-blocks/agent/overview"},{"title":"Configure Agent","href":"/en/versions/2.0.11/building-blocks/agent/configure-agent"},{"title":"Run Agent","href":"/en/versions/2.0.11/building-blocks/agent/run-agent"},{"title":"Interrupt Agent","href":"/en/versions/2.0.11/building-blocks/agent/interrupt-agent"},{"title":"Human-in-the-Loop","href":"/en/versions/2.0.11/building-blocks/agent/human-in-the-loop"}]},{"group":"Model","pages":[{"title":"Overview","href":"/en/versions/2.0.11/building-blocks/model/overview"},{"title":"LLM","href":"/en/versions/2.0.11/building-blocks/model/llm"},{"title":"TTS","href":"/en/versions/2.0.11/building-blocks/model/tts"},{"title":"ASR","href":"/en/versions/2.0.11/building-blocks/model/asr"},{"title":"Embedding","href":"/en/versions/2.0.11/building-blocks/model/embedding"}]},{"group":"Context","pages":[{"title":"Overview","href":"/en/versions/2.0.11/building-blocks/context/overview"},{"title":"Environment Awareness","href":"/en/versions/2.0.11/building-blocks/context/environment-awareness"},{"title":"Compress Context","href":"/en/versions/2.0.11/building-blocks/context/compress-context"},{"title":"Offload Context","href":"/en/versions/2.0.11/building-blocks/context/offload-context"}]},{"group":"Tool","pages":[{"title":"Overview","href":"/en/versions/2.0.11/building-blocks/tool/overview"},{"title":"Python Tool","href":"/en/versions/2.0.11/building-blocks/tool/python-tool"},{"title":"MCP","href":"/en/versions/2.0.11/building-blocks/tool/mcp"},{"title":"Skill","href":"/en/versions/2.0.11/building-blocks/tool/skill"},{"title":"Meta Tool","href":"/en/versions/2.0.11/building-blocks/tool/manage-tools"}]},{"title":"Plan","href":"/en/versions/2.0.11/building-blocks/plan"},{"group":"Pipeline","tag":"EXP","pages":[{"title":"Overview","href":"/en/versions/2.0.11/building-blocks/pipeline/overview"},{"title":"Goal Pipeline","href":"/en/versions/2.0.11/building-blocks/pipeline/goal"},{"title":"Team Pipeline","href":"/en/versions/2.0.11/building-blocks/pipeline/team"}]},{"title":"Standard Operating Procedure","tag":"EXP","href":"/en/versions/2.0.11/building-blocks/sop"},{"group":"Permission System","pages":[{"title":"Overview","href":"/en/versions/2.0.11/building-blocks/permission-system/overview"},{"title":"Permission Mode","href":"/en/versions/2.0.11/building-blocks/permission-system/permission-mode"},{"title":"Permission Rule","href":"/en/versions/2.0.11/building-blocks/permission-system/permission-rule"},{"title":"Tool-Level Checks","href":"/en/versions/2.0.11/building-blocks/permission-system/tool-check"}]},{"title":"Middleware","href":"/en/versions/2.0.11/building-blocks/middleware"},{"title":"RAG","href":"/en/versions/2.0.11/building-blocks/rag"},{"title":"Long-Term Memory","href":"/en/versions/2.0.11/building-blocks/long-term-memory"},{"group":"Workspace","pages":[{"title":"Overview","href":"/en/versions/2.0.11/building-blocks/workspace/overview"},{"title":"Run Workspace","href":"/en/versions/2.0.11/building-blocks/workspace/run-workspace"},{"title":"Manage Resources","href":"/en/versions/2.0.11/building-blocks/workspace/manage-resources"},{"title":"MCP Gateway","href":"/en/versions/2.0.11/building-blocks/workspace/mcp-gateway"}]},{"group":"Realtime Agent","tag":"EXP","pages":[{"title":"Overview","href":"/en/versions/2.0.11/building-blocks/realtime/overview"},{"title":"Speech-to-Speech","href":"/en/versions/2.0.11/building-blocks/realtime/speech-to-speech"}]},{"title":"Console","href":"/en/versions/2.0.11/building-blocks/console"},{"title":"A2A Protocol","href":"/en/versions/2.0.11/building-blocks/a2a"}]},{"group":"Agent as Service","pages":[{"title":"Architecture","href":"/en/versions/2.0.11/deploy/agent-service"},{"title":"Agent Team","href":"/en/versions/2.0.11/deploy/agent-team"},{"title":"SOP Service","tag":"EXP","href":"/en/versions/2.0.11/deploy/sop"},{"title":"Resource Sharing","tag":"NEW","href":"/en/versions/2.0.11/deploy/sharing"},{"title":"RAG Service","href":"/en/versions/2.0.11/deploy/rag"},{"title":"Workspace Manager","href":"/en/versions/2.0.11/deploy/workspace-manager"},{"group":"MCP \u0026 Skill Hub","pages":[{"title":"Overview","href":"/en/versions/2.0.11/deploy/hub/overview"},{"title":"MCP Hub","description":"Let users install MCP servers from a registry with their own credentials.","href":"/en/versions/2.0.11/deploy/hub/mcp-hub"},{"title":"Skill Hub","href":"/en/versions/2.0.11/deploy/hub/skill-hub"}]},{"group":"Channel","pages":[{"title":"Overview","description":"Bring the agents in your AgentScope service onto IM platforms.","href":"/en/versions/2.0.11/deploy/channel/overview"},{"title":"Message Routing","href":"/en/versions/2.0.11/deploy/channel/routing"},{"title":"Feishu","href":"/en/versions/2.0.11/deploy/channel/feishu"},{"title":"DingTalk","href":"/en/versions/2.0.11/deploy/channel/dingtalk"},{"title":"Discord","href":"/en/versions/2.0.11/deploy/channel/discord"},{"title":"Custom Channel","href":"/en/versions/2.0.11/deploy/channel/custom"}]},{"group":"API","pages":[{"group":"agent","pages":[{"title":"[Deprecated] Legacy sectioned schema — use /schema/v2","deprecated":true,"version":null,"openapi":"/en/versions/2.0.4/deploy/openapi.json get /agent/schema","href":"/api-reference/agent/[deprecated]-legacy-sectioned-schema-—-use-schemav2"},{"title":"Full AgentData JSON Schema for the agent form","deprecated":null,"version":null,"openapi":"/en/versions/2.0.4/deploy/openapi.json get /agent/schema/v2","href":"/api-reference/agent/full-agentdata-json-schema-for-the-agent-form"},{"title":"List all agents","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json get /agent/","href":"/api-reference/agent/list-all-agents"},{"title":"Create a new agent","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json post /agent/","href":"/api-reference/agent/create-a-new-agent"},{"title":"Delete an agent","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json delete /agent/{agent_id}","href":"/api-reference/agent/delete-an-agent"},{"title":"Update an agent","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json patch /agent/{agent_id}","href":"/api-reference/agent/update-an-agent"}]},{"group":"chat","pages":[{"title":"Trigger a chat run (fire-and-forget)","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json post /chat/","href":"/api-reference/chat/trigger-a-chat-run-fire-and-forget"}]},{"group":"credential","pages":[{"title":"List JSON schemas for all credential types","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json get /credential/schemas","href":"/api-reference/credential/list-json-schemas-for-all-credential-types"},{"title":"List all credentials","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json get /credential/","href":"/api-reference/credential/list-all-credentials"},{"title":"Create a new credential","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json post /credential/","href":"/api-reference/credential/create-a-new-credential"},{"title":"Delete a credential","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json delete /credential/{credential_id}","href":"/api-reference/credential/delete-a-credential"},{"title":"Update a credential","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json patch /credential/{credential_id}","href":"/api-reference/credential/update-a-credential"}]},{"group":"health","pages":[{"title":"Report service liveness and per-component readiness","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /health","href":"/api-reference/health/report-service-liveness-and-per-component-readiness"}]},{"group":"hub","pages":[{"title":"List Mcp Hubs","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /hub/mcp","href":"/api-reference/hub/list-mcp-hubs"},{"title":"List Mcp Cards","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /hub/mcp/{hub_id}/cards","href":"/api-reference/hub/list-mcp-cards"},{"title":"Get Mcp Card","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /hub/mcp/{hub_id}/cards/{card_id}","href":"/api-reference/hub/get-mcp-card"},{"title":"Install Mcp","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json post /hub/mcp/{hub_id}/cards/{card_id}/install","href":"/api-reference/hub/install-mcp"},{"title":"List Skill Hubs","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /hub/skill","href":"/api-reference/hub/list-skill-hubs"},{"title":"List Skill Cards","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /hub/skill/{hub_id}/cards","href":"/api-reference/hub/list-skill-cards"},{"title":"Install Skill","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json post /hub/skill/{hub_id}/cards/{card_id}/install","href":"/api-reference/hub/install-skill"},{"title":"Get Skill Card","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /hub/skill/{hub_id}/cards/{card_id}","href":"/api-reference/hub/get-skill-card"}]},{"group":"knowledge_bases","pages":[{"title":"List embedding models compatible with the KB dimension policy","deprecated":null,"version":null,"openapi":"/en/versions/2.0.3/deploy/openapi.json get /knowledge_bases/embedding_models","href":"/api-reference/knowledge_bases/list-embedding-models-compatible-with-the-kb-dimension-policy"},{"title":"List available chunker types and their parameter schemas","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json get /knowledge_bases/chunkers","href":"/api-reference/knowledge_bases/list-available-chunker-types-and-their-parameter-schemas"},{"title":"JSON Schema for the KB middleware's tunable parameters","deprecated":null,"version":null,"openapi":"/en/versions/2.0.3/deploy/openapi.json get /knowledge_bases/middleware/parameters_schema","href":"/api-reference/knowledge_bases/json-schema-for-the-kb-middlewares-tunable-parameters"},{"title":"List file types the configured parsers can ingest","deprecated":null,"version":null,"openapi":"/en/versions/2.0.3/deploy/openapi.json get /knowledge_bases/supported_content_types","href":"/api-reference/knowledge_bases/list-file-types-the-configured-parsers-can-ingest"},{"title":"List the caller's knowledge bases","deprecated":null,"version":null,"openapi":"/en/versions/2.0.3/deploy/openapi.json get /knowledge_bases/","href":"/api-reference/knowledge_bases/list-the-callers-knowledge-bases"},{"title":"Create a new knowledge base","deprecated":null,"version":null,"openapi":"/en/versions/2.0.3/deploy/openapi.json post /knowledge_bases/","href":"/api-reference/knowledge_bases/create-a-new-knowledge-base"},{"title":"Delete a knowledge base","deprecated":null,"version":null,"openapi":"/en/versions/2.0.3/deploy/openapi.json delete /knowledge_bases/{knowledge_base_id}","href":"/api-reference/knowledge_bases/delete-a-knowledge-base"},{"title":"Update mutable fields on a knowledge base","deprecated":null,"version":null,"openapi":"/en/versions/2.0.3/deploy/openapi.json patch /knowledge_bases/{knowledge_base_id}","href":"/api-reference/knowledge_bases/update-mutable-fields-on-a-knowledge-base"},{"title":"List documents registered in a knowledge base","deprecated":null,"version":null,"openapi":"/en/versions/2.0.3/deploy/openapi.json get /knowledge_bases/{knowledge_base_id}/documents","href":"/api-reference/knowledge_bases/list-documents-registered-in-a-knowledge-base"},{"title":"Upload a document into a knowledge base","deprecated":null,"version":null,"openapi":"/en/versions/2.0.3/deploy/openapi.json post /knowledge_bases/{knowledge_base_id}/documents","href":"/api-reference/knowledge_bases/upload-a-document-into-a-knowledge-base"},{"title":"Batch-query indexing status of one or more documents","deprecated":null,"version":null,"openapi":"/en/versions/2.0.3/deploy/openapi.json get /knowledge_bases/{knowledge_base_id}/documents/status","href":"/api-reference/knowledge_bases/batch-query-indexing-status-of-one-or-more-documents"},{"title":"Fetch the original uploaded file of a document","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json get /knowledge_bases/{knowledge_base_id}/documents/{document_id}","href":"/api-reference/knowledge_bases/fetch-the-original-uploaded-file-of-a-document"},{"title":"Delete a document from a knowledge base","deprecated":null,"version":null,"openapi":"/en/versions/2.0.3/deploy/openapi.json delete /knowledge_bases/{knowledge_base_id}/documents/{document_id}","href":"/api-reference/knowledge_bases/delete-a-document-from-a-knowledge-base"},{"title":"Search a knowledge base by natural-language query","deprecated":null,"version":null,"openapi":"/en/versions/2.0.3/deploy/openapi.json post /knowledge_bases/{knowledge_base_id}/search","href":"/api-reference/knowledge_bases/search-a-knowledge-base-by-natural-language-query"},{"title":"Browse one document's chunks in order","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json get /knowledge_bases/{knowledge_base_id}/documents/{document_id}/chunks","href":"/api-reference/knowledge_bases/browse-one-documents-chunks-in-order"},{"title":"Mint a short-lived token for a browser-native fetch","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json post /knowledge_bases/{knowledge_base_id}/documents/{document_id}/download_token","href":"/api-reference/knowledge_bases/mint-a-short-lived-token-for-a-browser-native-fetch"}]},{"group":"mcp","pages":[{"title":"List Mcps","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /mcp","href":"/api-reference/mcp/list-mcps"},{"title":"Delete Mcp","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json delete /mcp/{mcp_id}","href":"/api-reference/mcp/delete-mcp"},{"title":"Update Mcp","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json patch /mcp/{mcp_id}","href":"/api-reference/mcp/update-mcp"}]},{"group":"schedule","pages":[{"title":"List all schedules","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json get /schedule/","href":"/api-reference/schedule/list-all-schedules"},{"title":"Create a new schedule","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json post /schedule/","href":"/api-reference/schedule/create-a-new-schedule"},{"title":"Delete a schedule","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json delete /schedule/{schedule_id}","href":"/api-reference/schedule/delete-a-schedule"},{"title":"Update a schedule","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json patch /schedule/{schedule_id}","href":"/api-reference/schedule/update-a-schedule"},{"title":"List execution sessions for a schedule","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json get /schedule/{schedule_id}/sessions","href":"/api-reference/schedule/list-execution-sessions-for-a-schedule"}]},{"group":"sessions","pages":[{"title":"List sessions for an agent","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json get /sessions/","href":"/api-reference/sessions/list-sessions-for-an-agent"},{"title":"Create a new session","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json post /sessions/","href":"/api-reference/sessions/create-a-new-session"},{"title":"Delete a session","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json delete /sessions/{session_id}","href":"/api-reference/sessions/delete-a-session"},{"title":"Update a session","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json patch /sessions/{session_id}","href":"/api-reference/sessions/update-a-session"},{"title":"Interrupt a running or HITL-parked chat run for a session","deprecated":null,"version":null,"openapi":"/en/versions/2.0.4/deploy/openapi.json post /sessions/{session_id}/interrupt","href":"/api-reference/sessions/interrupt-a-running-or-hitl-parked-chat-run-for-a-session"},{"title":"List messages for a session","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json get /sessions/{session_id}/messages","href":"/api-reference/sessions/list-messages-for-a-session"},{"title":"Probe the session's high-level status","deprecated":null,"version":null,"openapi":"/en/versions/2.0.4/deploy/openapi.json get /sessions/{session_id}/status","href":"/api-reference/sessions/probe-the-sessions-high-level-status"},{"title":"Subscribe to a session's event stream (SSE)","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json get /sessions/{session_id}/stream","href":"/api-reference/sessions/subscribe-to-a-sessions-event-stream-sse"}]},{"group":"skill","pages":[{"title":"List Skills","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /skill","href":"/api-reference/skill/list-skills"},{"title":"Get Skill","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /skill/{skill_id}","href":"/api-reference/skill/get-skill"},{"title":"Delete Skill","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json delete /skill/{skill_id}","href":"/api-reference/skill/delete-skill"}]},{"group":"sop","pages":[{"title":"The schema a procedure's editor is built from","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json get /sop/schema","href":"/api-reference/sop/the-schema-a-procedures-editor-is-built-from"},{"title":"List procedures","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json get /sop/","href":"/api-reference/sop/list-procedures"},{"title":"Create a procedure","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json post /sop/","href":"/api-reference/sop/create-a-procedure"},{"title":"List runs","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json get /sop/runs","href":"/api-reference/sop/list-runs"},{"title":"Read one run","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json get /sop/runs/{sop_run_id}","href":"/api-reference/sop/read-one-run"},{"title":"Delete a run","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json delete /sop/runs/{sop_run_id}","href":"/api-reference/sop/delete-a-run"},{"title":"File a person's verdict on a step","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json post /sop/runs/{sop_run_id}/verdict","href":"/api-reference/sop/file-a-persons-verdict-on-a-step"},{"title":"Read one procedure","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json get /sop/{sop_id}","href":"/api-reference/sop/read-one-procedure"},{"title":"Delete a procedure and its runs","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json delete /sop/{sop_id}","href":"/api-reference/sop/delete-a-procedure-and-its-runs"},{"title":"Replace a procedure's contents","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json patch /sop/{sop_id}","href":"/api-reference/sop/replace-a-procedures-contents"},{"title":"Start a run","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json post /sop/{sop_id}/runs","href":"/api-reference/sop/start-a-run"}]},{"group":"workspace","pages":[{"title":"List Mcps","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json get /workspace/mcp","href":"/api-reference/workspace/list-mcps"},{"title":"Add Mcp","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json post /workspace/mcp","href":"/api-reference/workspace/add-mcp"},{"title":"Add Mcps From Library","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json post /workspace/mcp/from-library","href":"/api-reference/workspace/add-mcps-from-library"},{"title":"Remove Mcp","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json delete /workspace/mcp/{mcp_name}","href":"/api-reference/workspace/remove-mcp"},{"title":"List Skills","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json get /workspace/skill","href":"/api-reference/workspace/list-skills"},{"title":"Add Skill","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json post /workspace/skill","href":"/api-reference/workspace/add-skill"},{"title":"Upload Skill","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json post /workspace/skill/upload","href":"/api-reference/workspace/upload-skill"},{"title":"Add Skills From Library","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json post /workspace/skill/from-library","href":"/api-reference/workspace/add-skills-from-library"},{"title":"Remove Skill","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json delete /workspace/skill/{skill_name}","href":"/api-reference/workspace/remove-skill"},{"title":"List Workspace Directory","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /workspace/directories","href":"/api-reference/workspace/list-workspace-directory"},{"title":"Get Workspace Status","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json get /workspace/status","href":"/api-reference/workspace/get-workspace-status"},{"title":"Create Download Token","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json post /workspace/files/download-token","href":"/api-reference/workspace/create-download-token"},{"title":"Read Workspace File","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /workspace/files","href":"/api-reference/workspace/read-workspace-file"}]},{"group":"model","pages":[{"title":"List all candidate models under the given credential type","deprecated":null,"version":null,"openapi":"/en/versions/2.0.2/deploy/openapi.json get /model/","href":"/api-reference/model/list-all-candidate-models-under-the-given-credential-type"}]},{"group":"realtime","pages":[{"title":"List realtime models for a credential provider","deprecated":null,"version":null,"openapi":"/en/versions/2.0.10/deploy/openapi.json get /realtime/models","href":"/api-reference/realtime/list-realtime-models-for-a-credential-provider"},{"title":"Get browser WebRTC configuration","deprecated":null,"version":null,"openapi":"/en/versions/2.0.10/deploy/openapi.json get /realtime/config","href":"/api-reference/realtime/get-browser-webrtc-configuration"},{"title":"Start a realtime session from a WebRTC offer","deprecated":null,"version":null,"openapi":"/en/versions/2.0.10/deploy/openapi.json post /realtime/sessions/{session_id}/offer","href":"/api-reference/realtime/start-a-realtime-session-from-a-webrtc-offer"}]},{"group":"tts-model","pages":[{"title":"List all candidate TTS models under the given credential type","deprecated":null,"version":null,"openapi":"/en/versions/2.0.3/deploy/openapi.json get /tts-model/","href":"/api-reference/tts-model/list-all-candidate-tts-models-under-the-given-credential-type"}]},{"group":"embedding-model","pages":[{"title":"List all candidate embedding models under the given credential type","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /embedding-model/","href":"/api-reference/embedding-model/list-all-candidate-embedding-models-under-the-given-credential-type"}]},{"group":"channels","pages":[{"title":"List Channel Types","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /channels/types","href":"/api-reference/channels/list-channel-types"},{"title":"List Channels","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /channels/","href":"/api-reference/channels/list-channels"},{"title":"Create Channel","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json post /channels/","href":"/api-reference/channels/create-channel"},{"title":"Start Credential Binding","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json post /channels/bindings","href":"/api-reference/channels/start-credential-binding"},{"title":"Poll Credential Binding","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json get /channels/bindings/{binding_id}","href":"/api-reference/channels/poll-credential-binding"},{"title":"Cancel Credential Binding","deprecated":null,"version":null,"openapi":"/en/versions/2.0.9/deploy/openapi.json post /channels/bindings/{binding_id}/cancel","href":"/api-reference/channels/cancel-credential-binding"},{"title":"Get Channel","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /channels/{channel_id}","href":"/api-reference/channels/get-channel"},{"title":"Delete Channel","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json delete /channels/{channel_id}","href":"/api-reference/channels/delete-channel"},{"title":"Update Channel","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json patch /channels/{channel_id}","href":"/api-reference/channels/update-channel"},{"title":"Enable Channel","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json post /channels/{channel_id}/enable","href":"/api-reference/channels/enable-channel"},{"title":"Disable Channel","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json post /channels/{channel_id}/disable","href":"/api-reference/channels/disable-channel"},{"title":"Channel Status","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /channels/{channel_id}/status","href":"/api-reference/channels/channel-status"},{"title":"List Channel Sessions","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /channels/{channel_id}/sessions","href":"/api-reference/channels/list-channel-sessions"},{"title":"List Chat Ids","deprecated":null,"version":null,"openapi":"/en/versions/2.0.6/deploy/openapi.json get /channels/{channel_id}/chat_ids","href":"/api-reference/channels/list-chat-ids"}]}]}]},{"group":"Others","pages":[{"title":"FAQ","href":"/en/versions/2.0.11/others/faq"},{"title":"Changelog","href":"/en/versions/2.0.11/others/change-log"}]}]},{"version":"2.0.10","pages":[{"title":"2.0.10","href":"/en/versions/2.0.10/deploy/hub/skill-hub"}]},{"version":"2.0.9","pages":[{"title":"2.0.9","href":"/en/versions/2.0.9/deploy/hub/skill-hub"}]},{"version":"2.0.8","pages":[{"title":"2.0.8","href":"/en/versions/2.0.8/deploy/hub/skill-hub"}]},{"version":"2.0.7","pages":[{"title":"2.0.7","href":"/en/versions/2.0.7/deploy/hub/skill-hub"}]},{"version":"2.0.6","pages":[{"title":"2.0.6","href":"/en/versions/2.0.6/deploy/hub/skill-hub"}]},{"version":"2.0.5","pages":[{"title":"2.0.5","href":"/en/versions/2.0.5/deploy/agent-service"}]},{"version":"2.0.4","pages":[{"title":"2.0.4","href":"/en/versions/2.0.4/deploy/agent-service"}]},{"version":"2.0.3","pages":[{"title":"2.0.3","href":"/en/versions/2.0.3/deploy/agent-service"}]},{"version":"2.0.2","pages":[{"title":"2.0.2","href":"/en/versions/2.0.2"}]},{"version":"1.0.21","pages":[{"title":"1.0.21","href":"/en/versions/1.0.21"}]}]},{"tab":"ReMe","versions":[{"version":"latest","groups":[{"group":"Get Started","pages":[{"title":"What's ReMe?","href":"/en/reme/latest/overview"},{"title":"Quick Start","href":"/en/reme/latest/quickstart"},{"title":"Concepts","href":"/en/reme/latest/concepts"}]},{"group":"Integration","pages":[{"title":"Overview","href":"/en/reme/latest/integration/overview"},{"title":"Deployment","href":"/en/reme/latest/integration/deployment"},{"title":"Python SDK","href":"/en/reme/latest/integration/python-sdk"},{"title":"Agent Integrations","href":"/en/reme/latest/integration/plugins"}]},{"group":"Resources","pages":[{"title":"Reference","href":"/en/reme/latest/reference"},{"title":"FAQ","href":"/en/reme/latest/faq"},{"title":"Contribution","href":"/en/reme/latest/contribution"}]}]}]}]},{"language":"zh","pages":[{"title":"zh","href":"/zh/versions/2.0.11/deploy/hub/skill-hub"}]}]},"title":"Skill Hub - AgentScope","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-COGkNuA6.js","DynamicMarkdown-85clUA0i.js","zoom-image-lightbox-BZxD9MAj.js","lightbox-handle-r17bVUz3.js"]}