Git Skill Repository¶
agentscope-extensions-skill-git-repository treats a remote Git repo as a skill repository. It runs a lightweight remote-ref check on each read and only pulls when the remote HEAD changes — near-zero overhead at idle.
When to use¶
You want Git to manage versioning and review of skill content.
You want to share a single skill set across multiple projects.
You don’t want to embed a database or config center in production.
Add the dependency¶
<dependency>
<groupId>io.agentscope</groupId>
<artifactId>agentscope-extensions-skill-git-repository</artifactId>
<version>${agentscope.version}</version>
</dependency>
It uses JGit under the hood and supports both HTTPS and SSH.
Quickstart¶
import io.agentscope.core.skill.repository.GitSkillRepository;
import io.agentscope.core.skill.AgentSkill;
// Public repo + default branch, temporary local directory
GitSkillRepository repo = new GitSkillRepository(
"https://github.com/agentscope/skills.git"
);
// Register all skills into a Toolkit
Toolkit toolkit = new Toolkit();
repo.getAllSkills().forEach(toolkit::registerSkill);
// Clean up the temp directory on shutdown
Runtime.getRuntime().addShutdownHook(new Thread(repo::close));
Pin branch / use a fixed local path¶
GitSkillRepository repo = new GitSkillRepository(
"https://github.com/agentscope/skills.git",
"develop", // branch
Path.of("/var/skills/repo"), // local path (null = temp dir)
"agentscope-public", // source label (visible in Toolkit)
true // autoSync
);
Auth for private repos¶
GitSkillRepository reuses system-level Git config; it doesn’t manage credentials in Java:
HTTPS: uses the credential helper from
~/.gitconfig(osxkeychain, libsecret, …).SSH: uses keys under
~/.ssh/andssh-agent.
// Private SSH repository
GitSkillRepository repo = new GitSkillRepository(
"git@github.com:my-org/private-skills.git"
);
In CI, make sure the runner user has the credentials or has the SSH agent configured.
Auto-sync vs. manual sync¶
autoSync=true(default): every read first runsls-remote; pull happens only if the remote moved.autoSync=false: never pulls automatically; callrepo.sync()to refresh.
GitSkillRepository repo = new GitSkillRepository(remoteUrl, false);
repo.sync(); // sync once at startup
schedule(() -> repo.sync(), 5, TimeUnit.MINUTES);
Operational notes¶
Hold the repo as a singleton Spring Bean; close it once during shutdown.
The temp directory has a JVM shutdown hook, but force-killed processes may leave residue — clean up externally if needed.
Multi-instance deployments each maintain their own clone; no lock contention.