Skip to content

Pack Manifest Reference

Complete specification for the manifest.json file included in every Knowledge Pack.

File Location

data/packs/<pack-name>/manifest.json

Format

JSON object with the following structure:

{
  "name": "go-expert",
  "version": "1.0.0",
  "description": "Expert Go programming knowledge covering Go 1.22+ features including generics, range-over-func iterators, structured logging with slog, error handling patterns, concurrency with goroutines and channels, modules, and testing",
  "graph_stats": {
    "articles": 16,
    "entities": 106,
    "relationships": 69,
    "size_mb": 2.08
  },
  "eval_scores": {
    "accuracy": 0.0,
    "hallucination_rate": 0.0,
    "citation_quality": 0.0
  },
  "source_urls": [
    "https://go.dev/doc/",
    "https://gobyexample.com/",
    "https://go.dev/blog/"
  ],
  "created": "2026-03-01T16:40:06.813001Z",
  "license": "MIT"
}

Fields

Required Fields

Field Type Description
name string Pack identifier. Must match the directory name. Alphanumeric (upper or lower case), hyphens, and underscores; must start with an alphanumeric character; max 64 characters. Regex: ^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$ (e.g., go-expert, React_Expert)
version string Semantic version (e.g., 1.0.0). Follows SemVer
description string Human-readable description of the pack's domain coverage
graph_stats object Statistics about the knowledge graph (see below)
created string ISO 8601 timestamp of when the pack was built
license string License identifier (e.g., MIT, Apache-2.0)

Optional Fields

Field Type Description
author string Pack author name or organization
topics list[string] List of topic areas covered by the pack
eval_scores object Evaluation results (see below)
source_urls list[string] Representative source URLs used to build the pack. Every entry must use the https:// scheme.
created_at string Alternative name for created (backwards compatibility)

graph_stats Object

Field Type Description
articles integer Number of articles (documents) in the knowledge graph
entities integer Number of named entities extracted by LLM
relationships integer Number of relationships between entities
size_mb float Database size on disk in megabytes

eval_scores Object

Field Type Description
accuracy float Proportion of questions scored >= 7/10 (0.0 to 1.0)
hallucination_rate float Proportion of answers with fabricated information (0.0 to 1.0)
citation_quality float Proportion of answers with correct source citations (0.0 to 1.0)

Initial values

A freshly built pack has eval_scores set to all zeros. Run evaluation to populate these values.

Validation Rules

The wikigr pack validate command checks:

Rule Description
name is non-empty Pack must have a name
name matches PACK_NAME_RE Only alphanumeric, hyphens, and underscores; starts with alphanumeric; max 64 chars
version is valid SemVer Must match X.Y.Z pattern
description is non-empty Pack must have a description
graph_stats.articles >= 0 Must be a non-negative integer
graph_stats.entities >= 0 Must be a non-negative integer
graph_stats.relationships >= 0 Must be a non-negative integer
graph_stats.size_mb >= 0 Must be a non-negative number
eval_scores.* in [0.0, 1.0] Each score must be between 0 and 1 (when eval_scores is present)
source_urls not empty list Must be null/omitted or a non-empty list
source_urls[*] uses HTTPS Every entry must start with https://; HTTP or other schemes are rejected
created / created_at is valid ISO 8601 Must be a parseable timestamp (the validator reads created_at, which is populated from created when only the older field is present)
license is non-empty Pack must specify a license

source_urls HTTPS requirement

The source_urls field records the provenance of the content used to build the pack. All entries must use https:// to ensure that recorded provenance is auditable and was retrieved over an encrypted channel. Plain http:// URLs are rejected at validation time.

Example Manifests

Minimal Manifest

{
  "name": "my-pack",
  "version": "1.0.0",
  "description": "My domain knowledge pack",
  "graph_stats": {
    "articles": 25,
    "entities": 150,
    "relationships": 80,
    "size_mb": 3.5
  },
  "created": "2026-03-01T00:00:00Z",
  "license": "MIT"
}

Full Manifest

{
  "name": "langchain-expert",
  "version": "2.0.0",
  "description": "LangChain framework expertise covering agents, chains, retrievers, prompts, embeddings, vector stores, and LCEL expression language",
  "author": "agent-kgpacks",
  "topics": [
    "LangChain",
    "LCEL",
    "Agents",
    "Retrieval",
    "Vector Stores"
  ],
  "graph_stats": {
    "articles": 71,
    "entities": 485,
    "relationships": 312,
    "size_mb": 15.2
  },
  "eval_scores": {
    "accuracy": 0.90,
    "hallucination_rate": 0.05,
    "citation_quality": 0.85
  },
  "source_urls": [
    "https://python.langchain.com/docs/concepts/",
    "https://python.langchain.com/docs/how_to/",
    "https://python.langchain.com/docs/tutorials/"
  ],
  "created": "2026-03-01T12:00:00Z",
  "license": "MIT"
}

Pack Directory Structure

The manifest sits alongside these files in the pack directory:

data/packs/<pack-name>/
├── manifest.json         # This file
├── pack.db/              # LadybugDB graph database directory
├── urls.txt              # Source URLs used to build the pack
├── skill.md              # Claude Code skill description
├── kg_config.json        # KG Agent configuration overrides
└── eval/
    ├── questions.jsonl    # Evaluation questions (also used for few-shot examples)
    └── results/           # Evaluation output files

Updating the Manifest

After rebuilding a pack or running evaluation, update the manifest:

# After rebuild: update graph_stats
python -c "
import json, os
manifest_path = 'data/packs/my-pack/manifest.json'
manifest = json.load(open(manifest_path))
# Update stats from the new database
manifest['graph_stats']['articles'] = 45  # new count
manifest['created'] = '2026-03-01T12:00:00Z'
json.dump(manifest, open(manifest_path, 'w'), indent=2)
"

# Validate the updated manifest
wikigr pack validate data/packs/my-pack

Version History

Version Changes
Current eval_scores and source_urls are optional; author and topics fields added
Original All fields required; no author or topics

The manifest reader supports both created and created_at field names for backwards compatibility.