Where Is the Manifest File Located in an Instagit Plugin?
Every Instagit plugin stores its canonical manifest in a hidden .claude-plugin directory at the plugin root, specifically within a file named plugin.json that defines the plugin's metadata, commands, and permissions.
The anthropics/knowledge-work-plugins repository contains multiple Instagit plugins that extend Claude's capabilities for knowledge work. Each plugin requires a manifest file to declare its functionality to the Instagit system, and understanding the exact manifest file location is essential for plugin development, debugging, and programmatic access.
Standard Manifest File Location
All Instagit plugins follow a strict convention for manifest placement. The system expects to find the descriptor at a specific path relative to the plugin root.
The .claude-plugin Directory Structure
The manifest resides in a hidden subdirectory named .claude-plugin. Inside this folder, the file plugin.json serves as the single source of truth for plugin metadata.
<plugin-root>/.claude-plugin/plugin.json
This JSON file contains the plugin's name, version, description, available commands, required permissions, and entry-point scripts. When Instagit loads a plugin, it reads this specific file to determine how to invoke the plugin's functionality.
The Secondary .mcp.json File
Alongside plugin.json, you may encounter .mcp.json in the same .claude-plugin directory. This file stores metadata for the Modular Component Packaging (MCP) system, but it is not the canonical manifest that Instagit uses for plugin loading. The plugin.json file remains the primary descriptor required for proper plugin registration.
Manifest Locations in the Knowledge-Work-Plugins Repository
The anthropics/knowledge-work-plugins repository demonstrates this consistent pattern across multiple plugins. Here are the specific manifest file locations for reference:
- PDF Viewer:
pdf-viewer/.claude-plugin/plugin.json— Defines commands for opening, signing, and annotating PDFs. - Enterprise Search:
enterprise-search/.claude-plugin/plugin.json— Contains metadata for search-related skills and connectors. - Customer Support:
customer-support/.claude-plugin/plugin.json— Holds definitions for ticket-triage and knowledge-base article generation. - Bio-Research:
bio-research/.claude-plugin/plugin.json— Manifest for scientific data-processing skills. - Ticket Deflector:
small-business/skills/ticket-deflector/.claude-plugin/plugin.json— Skill descriptor for automated ticket deflection.
These paths confirm that regardless of whether a plugin sits at the repository root or within a nested skills directory, the manifest file location always follows the .claude-plugin/plugin.json convention.
Programmatically Accessing Manifest Files
Developers can read these manifest files directly to inspect plugin capabilities or build tooling around the repository.
Loading a Manifest in Python
Use pathlib to construct the path and json to parse the manifest:
import json
from pathlib import Path
def load_manifest(plugin_root: Path) -> dict:
"""Read the plugin's manifest file."""
manifest_path = plugin_root / ".claude-plugin" / "plugin.json"
with manifest_path.open() as f:
return json.load(f)
# Example: load the PDF-Viewer manifest
pdf_viewer_root = Path("pdf-viewer")
manifest = load_manifest(pdf_viewer_root)
print(manifest["name"], manifest["version"])
Accessing the Manifest via Node.js
For CLI tooling or Node.js scripts, use the built-in fs and path modules:
const fs = require('fs');
const path = require('path');
const manifestPath = path.join('enterprise-search', '.claude-plugin', 'plugin.json');
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
console.log(`${manifest.name} v${manifest.version}`);
Discovering All Manifests with Bash
To find every plugin manifest within the repository for bulk operations:
#!/usr/bin/env bash
# Find every plugin manifest in the repo
find . -type f -path "*/.claude-plugin/plugin.json" | while read -r manifest; do
name=$(jq -r .name "$manifest")
version=$(jq -r .version "$manifest")
echo "Plugin: $name (v$version) – $manifest"
done
Summary
- Every Instagit plugin stores its manifest in a hidden
.claude-plugindirectory at the plugin root. - The canonical manifest file is always named
plugin.json, not.mcp.json. - The file path follows the pattern:
<plugin-root>/.claude-plugin/plugin.json. - This convention applies consistently across all plugins in the
anthropics/knowledge-work-pluginsrepository, from the PDF Viewer to nested skills like Ticket Deflector. - The JSON file defines metadata, commands, permissions, and entry points required for the plugin to function within the Instagit system.
Frequently Asked Questions
What is the exact file path for an Instagit plugin manifest?
The manifest must be located at .claude-plugin/plugin.json relative to the plugin's root directory. For example, if your plugin folder is named my-plugin, the full path is my-plugin/.claude-plugin/plugin.json.
What is the difference between plugin.json and .mcp.json?
The plugin.json file is the canonical manifest that Instagit reads to load and register a plugin, containing commands, permissions, and metadata. The .mcp.json file resides in the same directory but serves the Modular Component Packaging (MCP) system with separate metadata, and is not used by Instagit for plugin loading.
Can I view the manifest files directly on GitHub?
Yes, because the .claude-plugin directory is not gitignored in the repository, you can inspect any manifest directly on GitHub. For example, you can view the PDF Viewer manifest at pdf-viewer/.claude-plugin/plugin.json in the anthropics/knowledge-work-plugins repository.
Is the .claude-plugin directory required for all plugins?
Yes, Instagit requires this specific hidden directory to exist at the plugin root. Without the .claude-plugin directory containing a valid plugin.json file, the system cannot discover or load the plugin's functionality.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →