v0.2.0
a vendor-neutral registry for AI agents, skills, and MCP servers
agents skills mcp-servers
$ agentctl server start
Each artifact kind uses an open standard as its native identity format.
| Kind | Standard | Steward | What it carries |
|---|---|---|---|
| Agent | A2A AgentCard | Google / AAIF | Name, skills, capabilities, security, signatures |
| MCP Server | MCP server.json | Anthropic / AAIF | Name, packages, transport, runtime |
| Skill | Agent Skills (SKILL.md) | Anthropic | Name, description, instructions |
All three share:
promotion lifecycle, eval records, BOM, provenance
You build an agent agentctl does the rest Others find it
────────────────── ──────────────────── ──────────────
docker push image ──> agentctl push agents card.json agentctl search "k8s"
--namespace acme agentctl get ... --format a2a
--oci ghcr.io/acme/x:1.0 ↓
(draft — private, mutable) serve at /.well-known/
agent-card.json
──> agentctl eval attach ...
(external tools submit results) # or import from a running agent
agentctl import --from-a2a
──> agentctl promote --to evaluated https://agent/.well-known/
──> agentctl promote --to approved agent-card.json
──> agentctl promote --to published
Push an A2A AgentCard directly. The registry extracts identity from the standard doc.
# Push an A2A AgentCard
agentctl push agents agent-card.json \
--namespace acme \
--oci ghcr.io/acme/cluster-doctor:1.0.0
# Or generate one from source code (LLM-powered)
agentctl init --path ./my-agent \
--image ghcr.io/acme/cluster-doctor:1.0.0 \
-o manifest.yaml
Also works with MCP server.json and SKILL.md directories
# Register the artifact (lands in draft)
agentctl push agents manifest.yaml
# External tools submit eval records (optional)
agentctl eval attach agents acme/cluster-doctor 1.0.0 \
--category safety --provider garak \
--benchmark toxicity --score 0.96
agentctl eval attach agents acme/cluster-doctor 1.0.0 \
--category functional --provider eval-hub \
--benchmark accuracy --score 0.88
The registry stores eval records. It does not run evaluations or compute trust scores.
agentctl promote agents acme/cluster-doctor 1.0.0 --to evaluated
agentctl promote agents acme/cluster-doctor 1.0.0 --to approved
agentctl promote agents acme/cluster-doctor 1.0.0 --to published
Content becomes immutable after evaluated. What was evaluated is what gets shipped.
$ agentctl inspect agents acme/cluster-doctor 1.0.0
agent acme/cluster-doctor@1.0.0
Status: published
Title: Cluster Doctor
Published: 2026-02-20T09:24:16Z
Eval Records: 3
functional 1 record(s)
safety 1 record(s)
red-team 1 record(s)
Average score: 0.92
Promotion History:
draft → evaluated — 3 evals pass
evaluated → approved — Reviewed by platform team lead
approved → published — Ready for production
$ agentctl deps agents acme/cluster-doctor 1.0.0
agent acme/cluster-doctor@1.0.0
|- mcp-server acme/kubernetes-mcp@2.0.0 [resolved]
|- mcp-server acme/prometheus-mcp@>=1.0.0 [UNRESOLVED]
|- skill acme/k8s-troubleshooting@1.0.0 [resolved]
|- model claude-sonnet-4@anthropic [resolved]
The BOM captures the full dependency graph:
Agents declare models, tools (MCP servers), skills, prompts, orchestration
Skills declare tool requirements (abstract, not tied to specific MCP servers)
MCP Servers declare runtime dependencies, external services
Standard doc = identity. Registry = governance. No field duplication.
./scripts/demo.sh
UI → http://localhost:8080
API → http://localhost:8080/api/v1