Skip to content

geronimo-iia/agentctl

Repository files navigation

agentctl

CLI for agent hub validation, index generation, and skill management. Implements the hub formats defined in agent-foundation.

See docs/roadmap.md for current development plans and upcoming features.

Install

Homebrew (macOS/Linux):

brew tap geronimo-iia/agent
brew install agentctl

Chocolatey (Windows):

choco install agentctl

asdf (version manager):

asdf plugin add agentctl https://github.com/geronimo-iia/asdf-agentctl.git
asdf install agentctl latest
asdf global agentctl latest

cargo-binstall (installs pre-built binary):

cargo binstall agent-ctl

cargo (builds from source):

cargo install agent-ctl

Binary download: grab the latest release from GitHub Releases.

Quickstart

Validate a hub directory:

agentctl hub validate --type docs --path ./my-hub
agentctl hub validate --type skills --path ./my-skills

Generate index.json:

agentctl hub generate --type docs --path ./my-hub --output index.json
agentctl hub generate --type skills --path ./my-skills --hub-id my-hub --output index.json

Usage

agentctl --help
agentctl hub --help

Validation output

On success:

✓ Validation passed

On failure (exit code 1):

  ✗ skills/my-skill/SKILL.md:1: missing required field: name
  ✗ skills/my-skill/SKILL.md:1: missing required field: description
✗ Validation failed (2 error(s))

Generated index.json (skills)

{
  "hub_id": "my-hub",
  "generated_at": "2026-07-14T10:00:00Z",
  "skills": [
    {
      "name": "python-scaffold",
      "description": "Scaffold a Python project",
      "path": "python-scaffold",
      "commit_hash": "abc1234"
    }
  ]
}

Config Management

Inspect and modify ~/.agentctl/config.json without editing JSON by hand.

# create a default config file (errors if already exists)
agentctl config init
agentctl config init --force   # overwrite existing

# print the config file path
agentctl config path

# print the full config as pretty JSON
agentctl config show

# get / set scalar values
agentctl config get skills_root
agentctl config set skills_root ~/.agent/skills

Supported keys: skills_root — overrides the default skill install root. Hub entries are managed via hub add/remove/enable/disable.

Hub Registry

Register and manage hub sources in ~/.agentctl/config.json:

agentctl hub add --type skills agent-foundation https://raw.githubusercontent.com/geronimo-iia/agent-foundation/main/skills/index.json
agentctl hub add --type docs agent-foundation https://raw.githubusercontent.com/geronimo-iia/agent-foundation/main/docs/index.json
agentctl hub list
agentctl hub disable agent-foundation
agentctl hub enable agent-foundation
agentctl hub remove agent-foundation
agentctl hub refresh agent-foundation   # force-refresh one hub
agentctl hub refresh --force agent-foundation  # bypass cache entirely
agentctl hub refresh                    # refresh all enabled hubs
agentctl hub refresh --force            # force refresh all hubs

Skill Management

Install, list, remove, and update skills from registered hubs.

# install from the first enabled skill hub
agentctl skill install python-scaffold

# install from a specific hub
agentctl skill install python-scaffold --hub agent-foundation

# install into a named mode (path: ~/.agent/skills-dev/)
agentctl skill install python-scaffold --mode dev

# list installed skills
agentctl skill list

# remove a skill
agentctl skill remove python-scaffold --hub agent-foundation

# update a skill (errors if no update lifecycle — use --force to reinstall)
agentctl skill update python-scaffold
agentctl skill update python-scaffold --force

# update all installed skills
agentctl skill update

# export current skill installations for backup/sharing
agentctl skill export > skills.lock.json

Global flags:

  • -q / --quiet — suppress all step output; implies --yes
  • -y / --yes — auto-approve all requires_approval lifecycle steps

Skills are installed to ~/.agent/skills/<name>/ and tracked in ~/.agentctl/skills.lock.json. Each skill may include a lifecycle.yaml with install, update, and uninstall sections.

agentctl.toml

Optional file at the hub root. When present, values are used as defaults; CLI flags always take precedence.

[hub]
id = "agent-foundation"  # overrides --hub-id on generate

[generate]
# Replaces the default exclusion list when present.
# Supports filename patterns, directory patterns, and path wildcards.
ignore = [
  "README.md",              # exact filename match
  "CHANGELOG.md",
  "CONTRIBUTING.md",
  "ARCHIVED.md",
  "draft-*.md",             # filename wildcard
  "rules/templates/",       # directory pattern (excludes all files in directory)
  "docs/internal/*.md",     # path wildcard (specific pattern in directory)
]

Pattern types:

  • Filename patterns: "README.md" (exact), "draft-*.md" (wildcard) — matched case-insensitively at any path level
  • Directory patterns: "templates/", "rules/templates/" — excludes all files in the specified directory
  • Path wildcards: "rules/*.md", "docs/internal/*.md" — excludes files matching the pattern in the specific directory path

When agentctl.toml is absent or has no [generate] ignore key, the default exclusions apply: README.md, CHANGELOG.md, CONTRIBUTING.md, LICENSE*, ARCHIVED.md.

See docs/hub-config.md for full details including cache layout and TTL behaviour.

CI Integration

Example GitHub Actions workflow for a docs or skills hub:

name: Publish Index

on:
  push:
    branches: [main]

jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v4

      - name: Install agentctl
        run: |
          curl -sSL https://github.com/geronimo-iia/agentctl/releases/latest/download/x86_64-unknown-linux-gnu.tar.gz | tar xz -C /usr/local/bin

      - name: Validate
        run: agentctl hub validate --type docs --path .

      - name: Generate index.json
        run: agentctl hub generate --type docs --path . --output index.json

      - name: Commit index.json
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git add index.json
          git diff --staged --quiet || git commit -m "chore: regenerate index.json [skip ci]"
          git push

Replace --type docs with --type skills for a skills hub.

License

MIT OR Apache-2.0

About

CLI for agent hub validation, index generation, skill management, and local config

Topics

Resources

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE-APACHE
MIT
LICENSE-MIT

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages