Architecture

Overview

This repository is a Claude Code plugin marketplace — a git-hosted catalog that users add with /plugin marketplace add rgoshen/my_plugins and install individual plugins from.

Repository layout

my_plugins/
├── .claude-plugin/
│   └── marketplace.json     # The marketplace registry
├── plugins/
│   └── <plugin-name>/       # One directory per plugin
│       ├── .claude-plugin/
│       │   └── plugin.json  # Plugin manifest
│       ├── agents/          # Agent personas (.md with YAML frontmatter)
│       ├── skills/          # Workflow skills (<name>/SKILL.md)
│       ├── commands/        # User-facing slash commands (.md)
│       └── README.md
└── .github/
    └── workflows/
        └── validate.yml     # CI validation

Plugin component model

Each plugin follows a layered model:

User
  └── invokes Command (/cs-tutor:arch-teach)
        └── invokes Agent (arch-tutor)
              └── uses Skill (arch-teach) for session workflow

Agent — defines WHO: persona, tools, model, memory, and which skills it carries (skills: frontmatter). Agents are the primary entry point.

Skill — defines WHAT: the workflow, session state, and instructions Claude follows. Skills must be self-contained; they must not reference agent files by path.

Command — a thin .md file that describes the entry point for users. Invokes the appropriate agent.

This separation means:

  • Personas can be updated without touching workflow logic
  • Workflows can be tested independently of personas
  • Users get a consistent slash command interface regardless of internal structure

Versioning

Plugin versions are resolved from plugin.jsonmarketplace.json entry → git commit SHA (in that order). This repo omits explicit versions in marketplace.json entries; plugin.json is the single source of truth per plugin.

Distribution

Claude Code clones this repo when users run /plugin marketplace add rgoshen/my_plugins. Plugins with source: "./plugins/<name>" are resolved relative to the marketplace root and sparse-cloned into the user’s plugin cache at ~/.claude/plugins/cache/.