Plugins & marketplaces
Overview
Plugins are collections of reusable skills, custom commands, and agents that can be shared and distributed through marketplaces. They allow you to extend Friday's capabilities by installing pre-packaged functionality from the community or your organization. Plugins can contain skills (automatic context), custom commands (invokable actions), and agents (specialized task handlers), making it easy to standardize workflows and share best practices across teams. Friday uses the same .claude-plugin/ manifest format as Claude Code's plugin ecosystem, so a marketplace repo published for Claude Code works in Friday without changes. See the compatibility section below for what is and isn't shared between the two.
Quick Start
Add a marketplace and enable a plugin
- Add a marketplace containing plugins you want to use:
friday> /plugin-marketplace
> Add marketplace
# Then enter one of:
# username/friday-plugins (GitHub shorthand)
# https://github.com/username/friday-plugins.git (git URL)
# ~/my-plugins (local directory)
- Enable a plugin from the marketplace:
friday> /plugin-marketplace
> Select the marketplace you just added
> Toggle the plugin you want to enable
Changes take effect immediately. Friday hot-reloads skills, agents, and the command palette without a restart.
Usage
Managing marketplaces
Git-based marketplaces are cloned into ~/.agents/plugins/marketplaces/; local-directory marketplaces are kept as live pointers. The registry of installed marketplaces lives in ~/.agents/plugins/known_marketplaces.json. Manage them through the /plugin-marketplace command.
The menu has two levels:
- Top level: lists installed marketplaces, plus an "Add marketplace" entry.
- Selecting a marketplace opens a detail view with the marketplace's plugins (toggleable), plus actions to update the marketplace, remove it, and toggle auto-sync.
Add a marketplace
From the top-level menu, choose "Add marketplace". You can add from three sources:
- GitHub shorthand:
username/repo(automatically expands tohttps://github.com/username/repo.git) - Git URL: Any valid git URL (HTTPS or SSH)
- Local directory: A path to a local directory (e.g.,
~/my-plugins,./plugins,/absolute/path)
Local directories are treated as live pointers: changes to the directory are immediately reflected without needing to update.
For private marketplaces that require authentication, embed a Personal Access Token (PAT) directly in the URL:
https://<TOKEN>@github.com/yourorg/plugin-marketplace.git
Update a marketplace
Git-based marketplaces can be updated to pull the latest changes:
friday> /plugin-marketplace
> Select marketplace
> Update
Local directory marketplaces do not need updates: they are live pointers.
Remove a marketplace
Removing a marketplace also disables all plugins from that marketplace:
friday> /plugin-marketplace
> Select marketplace
> Remove
Auto-sync on boot
Git-based marketplaces can be configured to auto-sync when Friday starts. When enabled, Friday pulls the latest changes from the marketplace at startup and shows a toast notification listing which marketplaces were updated.
To enable auto-sync for a marketplace:
friday> /plugin-marketplace
> Select marketplace
> Toggle auto-sync
Managing plugins
Plugins can be enabled or disabled individually. When a plugin is enabled, its skills, commands, and agents become available in Friday.
Enable/disable a plugin
friday> /plugin-marketplace
> Select the marketplace the plugin belongs to
> Toggle the plugin
Changes take effect immediately. Friday hot-reloads skills, agents, and the command palette without a restart.
Plugins are identified by their ID in the format plugin-name@marketplace-name.
Claude Code compatibility
Friday and Claude Code share a manifest format, not a registry. A marketplace repo published for Claude Code (with .claude-plugin/marketplace.json and per-plugin .claude-plugin/plugin.json files) works in Friday without changes. The plugins, skills, commands, and agents inside are read by Friday's loaders.
What is not shared:
- Friday tracks installed marketplaces in
~/.agents/plugins/known_marketplaces.json. Claude Code uses its own registry. A marketplace added in one tool does not appear in the other. - Adding, updating, or removing a marketplace in Friday only affects Friday. Do the same operation in Claude Code if you want it there too.
Plugin skills
Skills from enabled plugins are automatically loaded into Friday's context. They are not namespaced, so skill names must be unique across all enabled plugins and user/project skills.
Plugin commands
Commands from enabled plugins are namespaced with the plugin name to avoid conflicts:
# Plugin command format
/plugin-name:command-name [arguments]
# Example
/code-review:check-tests
User and project commands take precedence over plugin commands. If you have a user command named /test, it will be used instead of a plugin command with the same name.
Plugin agents
Agents from enabled plugins are automatically loaded into Friday's available agents.
Plugin agents are loaded after user and project agents but before internal agents, giving you the ability to extend Friday's capabilities with custom agent behaviors.
Manifest-based Configuration
Plugins support manifest-based configuration through plugin.json and marketplace.json files. These manifests allow you to customize plugin paths and control how configuration is resolved.
Plugin Manifests
marketplace.json (in .claude-plugin/marketplace.json)
Defines marketplace-level configuration including plugin entries:
{
"name": "my-marketplace",
"owner": {
"name": "Your Name",
"email": "you@example.com"
},
"plugins": [
{
"name": "my-plugin",
"source": "./plugins/my-plugin",
"skills": "custom-skills",
"commands": ["cmd1.md", "cmd2.md"],
"agents": "custom-agents"
}
]
}
plugin.json (in plugins/my-plugin/.claude-plugin/plugin.json)
Defines plugin-specific configuration:
{
"name": "my-plugin",
"description": "My custom plugin",
"version": "1.0.0",
"author": {
"name": "Your Name"
},
"skills": "skills",
"commands": "commands",
"agents": "agents"
}
Strict Mode
The strict field in marketplace.json controls how manifests are resolved (default: true):
strict: true (default)
plugin.jsonis required and takes precedence- If
plugin.jsonis missing, the plugin is skipped - Falls back to marketplace.json only for fields not present in plugin.json
strict: false
plugin.jsonis optional- marketplace.json values take precedence
- Allows marketplace to override plugin configuration
Example with strict mode disabled:
{
"name": "my-marketplace",
"plugins": [
{
"name": "my-plugin",
"source": "./plugins/my-plugin",
"strict": false,
"skills": "marketplace-skills"
}
]
}
Custom Paths
The skills, commands, and agents fields support both string and array values for custom paths:
{
"skills": "custom-skills",
"commands": ["commands/cmd1.md", "commands/cmd2.md"],
"agents": ["agents/agent1", "agents/agent2"]
}
Paths are resolved relative to the plugin directory. If these fields are not specified, Friday falls back to the default directories (skills/, commands/, agents/).
Examples
Example 1: Using a team standards plugin
Your team maintains a plugin with coding standards and review guidelines:
# Add your team's marketplace
friday> /plugin-marketplace
> Add marketplace
> mycompany/friday-team-standards
# Enable the standards plugin
friday> /plugin-marketplace
> mycompany/friday-team-standards
> ✓ team-standards
# Changes take effect immediately. Now you have access to:
# - Skills: coding-standards, review-checklist
# - Commands: /team-standards:review, /team-standards:format
# - Agents: team-standards agent
Example 2: Creating a shareable plugin
Create a plugin to share your workflow with others:
# Create marketplace structure
mkdir -p my-marketplace/.claude-plugin
mkdir -p my-marketplace/plugins/my-plugin/.claude-plugin
mkdir -p my-marketplace/plugins/my-plugin/skills/api-design
mkdir -p my-marketplace/plugins/my-plugin/commands
mkdir -p my-marketplace/plugins/my-plugin/agents
# Create marketplace manifest
cat > my-marketplace/.claude-plugin/marketplace.json << 'EOF'
{
"name": "my-marketplace",
"owner": {
"name": "Your Name",
"email": "you@example.com"
}
}
EOF
# Create plugin manifest
cat > my-marketplace/plugins/my-plugin/.claude-plugin/plugin.json << 'EOF'
{
"name": "my-plugin",
"description": "My custom workflow plugin",
"version": "1.0.0",
"author": {
"name": "Your Name"
}
}
EOF
# Create a skill
cat > my-marketplace/plugins/my-plugin/skills/api-design/SKILL.md << 'EOF'
---
name: api-design
description: API design guidelines
---
When designing APIs, follow these principles:
- Use RESTful conventions
- Version your APIs
- Provide clear error messages
EOF
# Create a command
cat > my-marketplace/plugins/my-plugin/commands/scaffold-api.md << 'EOF'
---
description: Scaffold a new API endpoint
argument-hint: "[endpoint-name]"
---
Create a new API endpoint with the following structure:
- Route handler in routes/
- Service layer in services/
- Tests in tests/
- Documentation in docs/
Endpoint name: $1
EOF
# Create an agent
cat > my-marketplace/plugins/my-plugin/agents/api-reviewer.md << 'EOF'
---
name: api-reviewer
description: Review API implementations for best practices
---
You are an API review specialist. When reviewing API code, check for:
- RESTful design principles
- Proper HTTP status codes
- Input validation and error handling
- Security considerations (authentication, authorization)
- Documentation completeness
- Performance implications
Provide specific, actionable feedback with code examples where appropriate.
EOF
# Push to GitHub or use locally
git init
git add .
git commit -m "Initial plugin"
git remote add origin https://github.com/username/my-marketplace.git
git push -u origin main
Example 3: Using local development plugins
Test plugins locally before publishing:
# Add local marketplace
friday> /plugin-marketplace
> Add marketplace
> ~/dev/my-marketplace
# Enable plugin
friday> /plugin-marketplace
> my-marketplace
> ✓ my-plugin
# Make changes to your local plugin files
# Changes are immediately available (no update or restart needed)