Skip to content

herdctl.json

The herdctl.json file contains metadata about a distributable agent. It documents the agent’s requirements, authorship, and version information, and is validated during installation.

  • Recommended for any shared agent — it documents requirements clearly
  • Optional for agents distributed via GitHub URL or local path
{
"$schema": "https://herdctl.dev/schemas/agent-metadata.json",
"name": "competitive-analysis",
"version": "1.0.0",
"description": "Daily competitive intelligence agent that monitors competitor websites",
"author": "edspencer",
"repository": "github:edspencer/competitive-analysis-agent",
"license": "MIT",
"keywords": ["marketing", "competitive-analysis", "monitoring"],
"category": "marketing"
}
FieldTypeRequiredDescription
namestringYesAgent name (kebab-case)
versionstringYesSemantic version (e.g., 1.0.0)
descriptionstringYesShort description (max 200 characters)
authorstringYesAuthor username or name
repositorystringYesGitHub repository (github:user/repo)
FieldTypeDescription
$schemastringJSON schema URL for validation
homepagestringProject homepage URL
licensestringLicense identifier (MIT, Apache-2.0, etc.)
keywordsstring[]Descriptive keywords
categorystringPrimary category
tagsstring[]Additional categorization tags
requiresobjectRuntime requirements
screenshotsstring[]Screenshot URLs
examplesobjectExample configurations

The requires field documents what the agent needs to function:

FieldTypeDescription
herdctlstringMinimum herdctl version (semver range, e.g., >=0.1.0)
runtimestringRequired runtime: sdk, cli, or both
envstring[]Required environment variables (without defaults)
workspacebooleanWhether the agent needs a workspace directory
dockerbooleanWhether the agent requires Docker

The unique identifier for your agent. Must be:

  • Lowercase letters, numbers, and hyphens only
  • Start with a letter
{
"name": "competitive-analysis"
}

Semantic version following semver:

{
"version": "1.0.0"
}

Use:

  • Patch (1.0.1) for bug fixes
  • Minor (1.1.0) for new features (backward compatible)
  • Major (2.0.0) for breaking changes

A short, clear description of what the agent does. Keep it under 200 characters.

{
"description": "Daily competitive intelligence agent that monitors competitor websites and generates reports"
}

Your username or name.

{
"author": "edspencer"
}

The GitHub repository in github:owner/repo format:

{
"repository": "github:edspencer/competitive-analysis-agent"
}

This is used to resolve the agent source during installation.

Optional URL for documentation or project homepage:

{
"homepage": "https://github.com/edspencer/competitive-analysis-agent"
}

The license under which the agent is distributed. Use standard SPDX identifiers:

{
"license": "MIT"
}

Common licenses:

  • MIT — Permissive, minimal restrictions
  • Apache-2.0 — Permissive with patent grant
  • GPL-3.0 — Copyleft, requires derivative works to be GPL
  • UNLICENSED — Proprietary, not open source

Keywords that describe your agent:

{
"keywords": ["marketing", "competitive-analysis", "research", "monitoring"]
}

Keep keywords relevant and specific.

The primary category for your agent:

{
"category": "marketing"
}

Standard categories:

  • marketing — Marketing automation and analytics
  • development — Developer productivity and code tools
  • content — Content creation and management
  • operations — DevOps, infrastructure, monitoring
  • support — Customer support and engagement
  • research — Research and data gathering
  • finance — Financial analysis and reporting

Additional categorization beyond the primary category:

{
"tags": ["monitoring", "automation", "reporting"]
}

Document what your agent needs to function:

{
"requires": {
"herdctl": ">=0.1.0",
"runtime": "cli",
"env": ["COMPETITOR_WEBSITES", "DISCORD_WEBHOOK_URL"],
"workspace": true,
"docker": false
}
}

Minimum herdctl version as a semver range:

{
"requires": {
"herdctl": ">=0.1.0"
}
}

Common patterns:

  • >=0.1.0 — Any version 0.1.0 or higher
  • ^1.0.0 — Any 1.x version
  • >=1.2.0 <2.0.0 — Specific range

The runtime your agent requires:

ValueDescription
sdkClaude Agent SDK (default herdctl runtime)
cliClaude CLI (requires CLI installed, Max plan pricing)
bothWorks with either runtime
{
"requires": {
"runtime": "cli"
}
}

Environment variables that the user must set (variables without defaults in agent.yaml):

{
"requires": {
"env": ["COMPETITOR_WEBSITES", "DISCORD_WEBHOOK_URL"]
}
}

Only list required variables — variables with defaults (${VAR:-default}) should not be listed here.

Whether the agent needs a workspace directory for storing data:

{
"requires": {
"workspace": true
}
}

Most agents need a workspace. Set to false only for stateless agents.

Whether the agent requires Docker for execution:

{
"requires": {
"docker": false
}
}

Set to true if your agent requires Docker isolation or uses Docker-specific features.

URLs to screenshots:

{
"screenshots": [
"https://github.com/user/repo/raw/main/screenshots/dashboard.png",
"https://github.com/user/repo/raw/main/screenshots/report.png"
]
}

Use absolute URLs to images in your repository.

Named example configurations:

{
"examples": {
"basic": "Simple daily monitoring of two competitors",
"advanced": "Multi-competitor analysis with custom metrics and Slack integration"
}
}

A minimal example with only the required fields:

{
"name": "uptime-monitor",
"version": "1.0.0",
"description": "Website uptime monitoring with Discord alerts",
"author": "yourname",
"repository": "github:yourname/uptime-monitor"
}

A complete example with all fields:

{
"$schema": "https://herdctl.dev/schemas/agent-metadata.json",
"name": "competitive-analysis",
"version": "1.2.0",
"description": "Daily competitive intelligence agent that monitors competitor websites and generates comprehensive reports",
"author": "edspencer",
"repository": "github:edspencer/competitive-analysis-agent",
"homepage": "https://github.com/edspencer/competitive-analysis-agent",
"license": "MIT",
"keywords": [
"marketing",
"competitive-analysis",
"research",
"monitoring",
"intelligence"
],
"category": "marketing",
"tags": ["monitoring", "automation", "reporting", "discord"],
"requires": {
"herdctl": ">=0.1.0",
"runtime": "cli",
"env": [
"COMPETITOR_WEBSITES",
"DISCORD_WEBHOOK_URL"
],
"workspace": true,
"docker": false
},
"screenshots": [
"https://github.com/edspencer/competitive-analysis-agent/raw/main/screenshots/report.png"
],
"examples": {
"basic": "Monitor 2-3 competitor websites daily",
"advanced": "Track 10+ competitors with custom analysis dimensions"
}
}

The herdctl.json and agent.yaml files serve different purposes:

FilePurpose
agent.yamlRuntime configuration — how the agent runs
herdctl.jsonMetadata — how the agent is discovered and documented

Some information overlaps (name, description) but serves different uses:

  • agent.yaml fields are used at runtime
  • herdctl.json fields are used for documentation and validation

Keep both files in sync — the name field should match in both.

Validate your herdctl.json before publishing:

Terminal window
# Install from local path to trigger validation
herdctl agent add ./my-agent --dry-run

The installation process validates both agent.yaml and herdctl.json schemas.