Skip to main content
An AgentSkill is AgentScope’s Markdown + resource-file format for describing a reusable “skill” (see Harness · Skill). The AgentSkillRepository interface loads skills from external storage and hands them to the Toolkit / ReActAgent. The agentscope-extensions-* repository ships the following ready-to-use implementations:
Nacos also provides an AgentSkillRepository implementation: see Nacos.

Wiring

Choosing one

  • Want Git PR flow, reviewable text → Git
  • Want admin console / live config edits → MySQL, PostgreSQL, or Nacos
  • Mix multiple sources → implement AgentSkillRepository, or register multiple repos to the same toolkit

Scope isolation

Skill names are human-chosen (code-review, git-helper), so the same name from different teams or scopes is normal. The AgentSkillRepository contract requires one scope per repository instance: the same name coexists across scopes, and reads, overwrites (including force), and deletes stay inside the instance’s bound scope; a scope the instance cannot address is rejected explicitly, never silently redirected. Each source expresses the scope with its backend’s native dimension, bound at construction: An application needing several scopes registers one repository per scope and composes them — HarnessAgent.builder().skillRepository(a).skillRepository(b), later registrations winning — rather than querying one repository across scopes. Custom implementations follow the same rules: pick your backend’s native dimension, bind it at construction, keep every operation inside the bound scope, and reject unreachable scopes explicitly.

Instance reuse

When several agents point at the same skill source (the same baseDir, Nacos namespaceId, Git repository, …), construct one repository instance and share it instead of building one per agent. A repository addresses its scope through its constructor arguments and is safe to share; the cost of needless instances varies by source — every Nacos repository instance opens its own client connection to the server, and a Git repository without a local path clones its own copy. In Spring, declare the repository as a singleton bean and inject it. Different scopes, correspondingly, get one instance each (see above).