Major fixes for Claude Code plugin installation: 1. Moved marketplace.json to repo root (.claude-plugin/) - Fixes known bug #11243, #11278 with local marketplace path resolution - Claude Code uses marketplace.json file path as base, not directory 2. Simplified plugin.json manifests - Removed commands/agents/skills directory declarations - Claude Code auto-discovers these from standard directories - Specifying directories caused "must end with .md" validation errors 3. Cleaned command frontmatter - Removed non-standard fields (name, agent, arguments) - Only description field is valid in command frontmatter 4. Removed deprecated claude-plugin-developer skill - Skill was never properly integrated - Removed from repo and all documentation references All three plugins now validate successfully: - projman: Sprint planning with Gitea/Wiki.js - cmdb-assistant: NetBox CMDB integration - project-hygiene: Post-task cleanup hooks 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
495 lines
18 KiB
Markdown
495 lines
18 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Project Overview
|
|
|
|
This repository contains development of two Claude Code plugins for project management:
|
|
|
|
1. **`projman`** - Single-repository project management plugin (build first)
|
|
2. **`projman-pmo`** - Multi-project PMO coordination plugin (build second)
|
|
|
|
These plugins transform a proven 15-sprint workflow into reusable, distributable tools for managing software development with Claude Code, Gitea, Wiki.js, and agile methodologies.
|
|
|
|
**Status:** Planning phase complete, ready for implementation (Phase 1)
|
|
|
|
## File Creation Governance
|
|
|
|
### Allowed Root Files
|
|
|
|
Only these files may exist at the repository root:
|
|
|
|
- `CLAUDE.md` - This file
|
|
- `README.md` - Repository overview
|
|
- `LICENSE` - License file
|
|
- `CHANGELOG.md` - Version history
|
|
- `.gitignore` - Git ignore rules
|
|
- `.env.example` - Environment template (if needed)
|
|
|
|
### Allowed Root Directories
|
|
|
|
Only these directories may exist at the repository root:
|
|
|
|
| Directory | Purpose |
|
|
|-----------|---------|
|
|
| `.claude/` | Claude Code local settings |
|
|
| `.claude-plugin/` | Marketplace manifest |
|
|
| `.claude-plugins/` | Local marketplace definitions |
|
|
| `.scratch/` | Transient work (auto-cleaned) |
|
|
| `docs/` | Documentation |
|
|
| `hooks/` | Shared hooks (if any) |
|
|
| `mcp-servers/` | Shared MCP servers |
|
|
| `plugins/` | All plugins (projman, projman-pmo, project-hygiene, cmdb-assistant) |
|
|
| `scripts/` | Setup and maintenance scripts |
|
|
|
|
### File Creation Rules
|
|
|
|
1. **No new root files** - Do not create files directly in the repository root unless listed above
|
|
2. **No new root directories** - Do not create top-level directories without explicit approval
|
|
3. **Transient work goes in `.scratch/`** - Any temporary files, test outputs, or exploratory work must be created in `.scratch/`
|
|
4. **Clean up after tasks** - Delete files in `.scratch/` when the task is complete
|
|
5. **Documentation location** - All documentation goes in `docs/` with appropriate subdirectory:
|
|
- `docs/references/` - Reference specifications and summaries
|
|
- `docs/architecture/` - Architecture diagrams (Draw.io files)
|
|
- `docs/workflows/` - Workflow documentation
|
|
6. **No output files** - Do not leave generated output, logs, or test results outside designated directories
|
|
|
|
### Enforcement
|
|
|
|
Before creating any file, verify:
|
|
|
|
1. Is this file type allowed in the target location?
|
|
2. If temporary, am I using `.scratch/`?
|
|
3. If documentation, am I using the correct `docs/` subdirectory?
|
|
4. Will this file be cleaned up after the task?
|
|
|
|
**Violation of these rules creates technical debt and project chaos.**
|
|
|
|
## Path Verification (MANDATORY)
|
|
|
|
### Before Generating Any Prompt or Creating Any File
|
|
|
|
**This is non-negotiable. Failure to follow causes structural damage.**
|
|
|
|
1. **READ `docs/CANONICAL-PATHS.md` FIRST**
|
|
- This file is the single source of truth
|
|
- Never infer paths from memory or context
|
|
- Never assume paths based on conversation history
|
|
|
|
2. **List All Paths**
|
|
- Before generating a prompt, list every file path it will create/modify
|
|
- Show the list to the user
|
|
|
|
3. **Verify Each Path**
|
|
- Check each path against `docs/CANONICAL-PATHS.md`
|
|
- If a path is not in that file, STOP and ask
|
|
|
|
4. **Show Verification**
|
|
- Present a verification table to user:
|
|
```
|
|
| Path | Matches CANONICAL-PATHS.md? |
|
|
|------|----------------------------|
|
|
| plugins/projman/... | ✅ Yes |
|
|
```
|
|
|
|
5. **Get Confirmation**
|
|
- User must confirm paths are correct before proceeding
|
|
|
|
### Relative Path Rules
|
|
|
|
- Plugin to MCP server: `${CLAUDE_PLUGIN_ROOT}/../../mcp-servers/{server}`
|
|
- Marketplace to plugin: `./../../../plugins/{plugin-name}`
|
|
- **ALWAYS calculate from CANONICAL-PATHS.md, never from memory**
|
|
|
|
### Recovery Protocol
|
|
|
|
If you suspect paths are wrong:
|
|
1. Read `docs/CANONICAL-PATHS.md`
|
|
2. Compare actual structure against documented structure
|
|
3. Report discrepancies
|
|
4. Generate corrective prompt if needed
|
|
|
|
## Core Architecture
|
|
|
|
### Three-Agent Model
|
|
|
|
The plugins implement a three-agent architecture that mirrors the proven workflow:
|
|
|
|
**Planner Agent** (`agents/planner.md`)
|
|
- Performs architecture analysis and sprint planning
|
|
- Creates detailed planning documents
|
|
- Makes architectural decisions
|
|
- Creates Gitea issues with appropriate labels
|
|
- Personality: Asks clarifying questions, thinks through edge cases, never rushes
|
|
|
|
**Orchestrator Agent** (`agents/orchestrator.md`)
|
|
- Coordinates sprint execution
|
|
- Generates lean execution prompts (not full docs)
|
|
- Tracks progress and updates documentation
|
|
- Handles Git operations (commit, merge, cleanup)
|
|
- Manages task dependencies
|
|
- Personality: Concise, action-oriented, tracks details meticulously
|
|
|
|
**Executor Agent** (`agents/executor.md`)
|
|
- Implements features according to execution prompts
|
|
- Writes clean, tested code
|
|
- Follows architectural decisions from planning
|
|
- Generates completion reports
|
|
- Personality: Implementation-focused, follows specs precisely
|
|
|
|
### MCP Server Integration
|
|
|
|
Both plugins use **two shared MCP servers** at repository root level (`mcp-servers/`):
|
|
|
|
**1. Gitea MCP Server** (Python)
|
|
- `list_issues` - Query issues with filters
|
|
- `get_issue` - Fetch single issue details
|
|
- `create_issue` - Create new issue with labels
|
|
- `update_issue` - Modify existing issue
|
|
- `add_comment` - Add comments to issues
|
|
- `get_labels` - Fetch org + repo label taxonomy
|
|
- `suggest_labels` - Analyze context and suggest appropriate labels
|
|
|
|
**2. Wiki.js MCP Server** (Python, GraphQL)
|
|
- `search_pages` - Search Wiki.js pages by keywords/tags
|
|
- `get_page` - Fetch specific page content
|
|
- `create_page` - Create new Wiki page
|
|
- `update_page` - Modify existing page
|
|
- `list_pages` - List pages in a path
|
|
- `create_lesson` - Create lessons learned document
|
|
- `search_lessons` - Search past lessons by tags
|
|
- `tag_lesson` - Add tags to lessons learned
|
|
|
|
**Key Architecture Points:**
|
|
- MCP servers are **shared** by both plugins at `mcp-servers/gitea` and `mcp-servers/wikijs`
|
|
- Each MCP server detects its mode (project-scoped vs company-wide) based on environment variables
|
|
- Configuration uses hybrid approach (system-level + project-level)
|
|
- All plugins reference `../../mcp-servers/` in their `.mcp.json` files (from `plugins/*/`)
|
|
|
|
## Branch-Aware Security Model
|
|
|
|
Plugin behavior adapts to the current Git branch to prevent accidental changes:
|
|
|
|
**Development Mode** (`development`, `feat/*`)
|
|
- Full access to all operations
|
|
- Can create Gitea issues
|
|
- Can modify all files
|
|
|
|
**Staging Mode** (`staging`)
|
|
- Read-only for application code
|
|
- Can modify `.env` files
|
|
- Can create issues to document needed fixes
|
|
- Warns on attempted code changes
|
|
|
|
**Production Mode** (`main`)
|
|
- Read-only for application code
|
|
- Emergency-only `.env` modifications
|
|
- Can create incident issues
|
|
- Blocks code changes
|
|
|
|
This behavior is implemented in both CLAUDE.md (file-level) and plugin agents (tool-level).
|
|
|
|
## Label Taxonomy System
|
|
|
|
The project uses a sophisticated 43-label taxonomy at organization level:
|
|
|
|
**Organization Labels (27):**
|
|
- Agent/2, Complexity/3, Efforts/5, Priority/4, Risk/3, Source/4, Type/6
|
|
|
|
**Repository Labels (16):**
|
|
- Component/9, Tech/7
|
|
|
|
**Important Labels:**
|
|
- `Type/Refactor` - For architectural changes and code restructuring (exclusive Type label)
|
|
- Used for service extraction, architecture modifications, technical debt
|
|
|
|
The label system includes:
|
|
- `skills/label-taxonomy/labels-reference.md` - Local reference synced from Gitea
|
|
- Label suggestion logic that detects appropriate labels from context
|
|
- `/labels-sync` command to review and sync changes from Gitea
|
|
|
|
## Lessons Learned System
|
|
|
|
**Critical Feature:** After 15 sprints without lesson capture, repeated mistakes occurred (e.g., Claude Code infinite loops on similar issues 2-3 times).
|
|
|
|
**Wiki.js Structure (Example):**
|
|
```
|
|
Wiki.js: https://wiki.your-company.com
|
|
└── /your-org/
|
|
├── projects/ # Project-specific documentation
|
|
│ ├── project-a/
|
|
│ │ ├── lessons-learned/
|
|
│ │ │ ├── sprints/
|
|
│ │ │ ├── patterns/
|
|
│ │ │ └── INDEX.md
|
|
│ │ └── documentation/
|
|
│ ├── project-b/
|
|
│ └── project-c/
|
|
├── company/ # Company-wide documentation
|
|
│ ├── processes/
|
|
│ ├── standards/
|
|
│ └── tools/
|
|
└── shared/ # Cross-project resources
|
|
├── architecture-patterns/
|
|
├── best-practices/
|
|
└── tech-stack/
|
|
```
|
|
|
|
**Workflow:**
|
|
- Orchestrator captures lessons at sprint close via Wiki.js MCP
|
|
- Planner searches relevant lessons at sprint start using GraphQL search
|
|
- INDEX.md maintained automatically via Wiki.js API
|
|
- Tags enable cross-project lesson discovery
|
|
- Focus on preventable repetitions, not every detail
|
|
- Web interface for team review and editing
|
|
|
|
## Development Workflow
|
|
|
|
### Build Order
|
|
|
|
1. **Phase 1-8:** Build `projman` plugin first (single-repo)
|
|
2. **Phase 9-11:** Build `pmo` plugin second (multi-project)
|
|
3. **Phase 12:** Production deployment
|
|
|
|
See [docs/reference-material/projman-implementation-plan.md](docs/reference-material/projman-implementation-plan.md) for the complete 12-phase implementation plan.
|
|
|
|
### Repository Structure (DEFINITIVE)
|
|
|
|
⚠️ **See `docs/CANONICAL-PATHS.md` for the authoritative path reference - THIS IS THE SINGLE SOURCE OF TRUTH**
|
|
|
|
```
|
|
bandit/support-claude-mktplace/
|
|
├── .claude-plugin/
|
|
│ └── marketplace.json
|
|
├── mcp-servers/ # ← SHARED BY ALL PLUGINS
|
|
│ ├── gitea/
|
|
│ │ ├── .venv/
|
|
│ │ ├── requirements.txt # Python dependencies
|
|
│ │ ├── mcp_server/
|
|
│ │ │ ├── __init__.py
|
|
│ │ │ ├── server.py
|
|
│ │ │ ├── config.py # Mode detection (project/company)
|
|
│ │ │ ├── gitea_client.py
|
|
│ │ │ └── tools/
|
|
│ │ │ ├── issues.py
|
|
│ │ │ └── labels.py
|
|
│ │ └── tests/
|
|
│ └── wikijs/
|
|
│ ├── .venv/
|
|
│ ├── requirements.txt # Python + GraphQL dependencies
|
|
│ ├── mcp_server/
|
|
│ │ ├── __init__.py
|
|
│ │ ├── server.py
|
|
│ │ ├── config.py # Mode detection (project/company)
|
|
│ │ ├── wikijs_client.py # GraphQL client
|
|
│ │ └── tools/
|
|
│ │ ├── pages.py
|
|
│ │ ├── lessons_learned.py
|
|
│ │ └── documentation.py
|
|
│ └── tests/
|
|
└── plugins/ # ← ALL PLUGINS
|
|
├── projman/ # ← PROJECT PLUGIN
|
|
│ ├── .claude-plugin/
|
|
│ │ └── plugin.json
|
|
│ ├── .mcp.json # Points to ../../mcp-servers/
|
|
│ ├── commands/
|
|
│ │ ├── sprint-plan.md
|
|
│ │ ├── sprint-start.md
|
|
│ │ ├── sprint-status.md
|
|
│ │ ├── sprint-close.md
|
|
│ │ └── labels-sync.md
|
|
│ ├── agents/
|
|
│ │ ├── planner.md
|
|
│ │ ├── orchestrator.md
|
|
│ │ └── executor.md
|
|
│ ├── skills/
|
|
│ │ └── label-taxonomy/
|
|
│ │ └── labels-reference.md
|
|
│ ├── README.md
|
|
│ └── CONFIGURATION.md
|
|
├── projman-pmo/ # ← PMO PLUGIN
|
|
│ ├── .claude-plugin/
|
|
│ │ └── plugin.json
|
|
│ ├── .mcp.json # Points to ../../mcp-servers/
|
|
│ ├── commands/
|
|
│ │ ├── pmo-status.md
|
|
│ │ ├── pmo-priorities.md
|
|
│ │ ├── pmo-dependencies.md
|
|
│ │ └── pmo-schedule.md
|
|
│ ├── agents/
|
|
│ │ └── pmo-coordinator.md
|
|
│ └── README.md
|
|
└── project-hygiene/ # ← CLEANUP PLUGIN
|
|
└── ...
|
|
```
|
|
|
|
### Key Design Decisions
|
|
|
|
**Two MCP Servers (Shared Architecture):**
|
|
- **Gitea MCP**: Issues, labels, repository management
|
|
- **Wiki.js MCP**: Documentation, lessons learned, knowledge base
|
|
- Servers are **shared** between both plugins at repository root
|
|
- Mode detection based on environment variables (project vs company-wide)
|
|
- Benefits: Single source of truth, fix bugs once, professional architecture
|
|
|
|
**Python Implementation:**
|
|
- Python chosen over Node.js for MCP servers
|
|
- Better suited for configuration management and modular code
|
|
- Easier to maintain and extend
|
|
- Virtual environment (.venv) per MCP server
|
|
|
|
**Hybrid Configuration:**
|
|
- **System-level**: `~/.config/claude/gitea.env` and `wikijs.env` (credentials)
|
|
- **Project-level**: `project-root/.env` (repository and path specification)
|
|
- Merge strategy: project overrides system
|
|
- Benefits: Single token per service, easy multi-project setup
|
|
|
|
**Skills as Knowledge, Not Orchestrators:**
|
|
- Skills provide supporting knowledge loaded when relevant
|
|
- Agents are the primary interface
|
|
- Reduces token usage
|
|
- Makes knowledge reusable across agents
|
|
|
|
**Branch Detection:**
|
|
- Two layers: CLAUDE.md (file access) + Plugin agents (tool usage)
|
|
- Defense in depth approach
|
|
- Plugin works with or without CLAUDE.md
|
|
|
|
## Multi-Project Context (PMO Plugin)
|
|
|
|
The `projman-pmo` plugin coordinates interdependent projects across an organization. Example use cases:
|
|
- Main product repository
|
|
- Marketing/documentation sites
|
|
- Extracted services
|
|
- Supporting tools
|
|
|
|
PMO plugin adds:
|
|
- Cross-project issue aggregation (all repos in organization)
|
|
- Dependency tracking and visualization
|
|
- Resource allocation across projects
|
|
- Deployment coordination
|
|
- Multi-project prioritization
|
|
- Company-wide lessons learned search
|
|
|
|
**Configuration Difference:**
|
|
- PMO operates at company level (no `GITEA_REPO` or `WIKIJS_PROJECT`)
|
|
- Accesses entire organization Wiki.js namespace
|
|
- Queries all repositories in organization
|
|
|
|
Build PMO plugin AFTER projman is working and validated.
|
|
|
|
## Testing Approach
|
|
|
|
**Local Marketplace:**
|
|
Create local marketplace for plugin development:
|
|
```
|
|
~/projman-dev-marketplace/
|
|
├── .claude-plugin/
|
|
│ └── marketplace.json
|
|
└── projman/ # Symlink to plugin directory
|
|
```
|
|
|
|
**Integration Testing:**
|
|
Test in a real repository with actual Gitea instance before distribution.
|
|
|
|
**Success Metrics:**
|
|
- Sprint planning time reduced 40%
|
|
- Manual steps eliminated: 10+ per sprint
|
|
- Lessons learned capture rate: 100% (vs 0% before)
|
|
- Label accuracy on issues: 90%+
|
|
- User satisfaction: Better than current manual workflow
|
|
|
|
## Important Notes
|
|
|
|
- **Never modify docker-compose files with 'version' attribute** - It's obsolete
|
|
- **Focus on implementation, not over-engineering** - This system has been validated over 15 sprints
|
|
- **Lessons learned is critical** - Prevents repeated mistakes (e.g., Claude infinite loops)
|
|
- **Type/Refactor label** - Newly implemented at org level for architectural work
|
|
- **Branch detection must be 100% reliable** - Prevents production accidents
|
|
- **Python for MCP servers** - Use Python 3.8+ with virtual environments
|
|
- **Wiki.js structure** - Organization content under configured base namespace
|
|
|
|
## CRITICAL: Rules You MUST Follow
|
|
|
|
### DO NOT MODIFY .gitignore Without Explicit Permission
|
|
- This is a **private repository** - credentials in `.env` files are intentional
|
|
- **NEVER** add `.env` or `.env.*` to .gitignore
|
|
- **NEVER** add venv patterns unless explicitly asked
|
|
- If you think something should be ignored, ASK FIRST
|
|
|
|
### Plugin Structure Requirements
|
|
- **plugin.json MUST be in `.claude-plugin/` directory** - NOT in plugin root
|
|
- Every plugin in the repo MUST be listed in the marketplace.json
|
|
- After creating/modifying a plugin, VERIFY it's in the marketplace
|
|
|
|
### Hooks Syntax (Claude Code Official)
|
|
- **Valid events**: `PreToolUse`, `PostToolUse`, `UserPromptSubmit`, `SessionStart`, `SessionEnd`, `Notification`, `Stop`, `SubagentStop`, `PreCompact`
|
|
- **INVALID events**: `task-completed`, `file-changed`, `git-commit-msg-needed` (these DO NOT exist)
|
|
- Hooks schema:
|
|
```json
|
|
{
|
|
"hooks": {
|
|
"EventName": [
|
|
{
|
|
"matcher": "optional-pattern",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "${CLAUDE_PLUGIN_ROOT}/path/to/script.sh"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
### MCP Server Configuration
|
|
- MCP servers MUST use venv python: `${CLAUDE_PLUGIN_ROOT}/../../mcp-servers/NAME/.venv/bin/python`
|
|
- NEVER use bare `python` command - always use venv path
|
|
- Test MCP servers after any config change
|
|
|
|
### Before Completing Any Plugin Work
|
|
1. Verify plugin.json is in `.claude-plugin/` directory
|
|
2. Verify plugin is listed in marketplace.json
|
|
3. Test MCP server configs load correctly
|
|
4. Verify hooks use valid event types
|
|
5. Check .gitignore wasn't modified inappropriately
|
|
|
|
## Documentation Index
|
|
|
|
This repository contains comprehensive planning documentation:
|
|
|
|
- **`docs/CANONICAL-PATHS.md`** - ⚠️ SINGLE SOURCE OF TRUTH for all paths (MANDATORY reading before any file operations)
|
|
- **`docs/DOCUMENT-INDEX.md`** - Complete guide to all planning documents
|
|
- **`docs/projman-implementation-plan-updated.md`** - Full 12-phase implementation plan
|
|
- **`docs/projman-python-quickstart.md`** - Python-specific implementation guide
|
|
- **`docs/two-mcp-architecture-guide.md`** - Deep dive into two-MCP architecture
|
|
|
|
**Start with:** `docs/DOCUMENT-INDEX.md` for navigation guidance
|
|
|
|
## Recent Updates (Updated: 2025-06-11)
|
|
|
|
### Planning Phase Complete
|
|
- Comprehensive 12-phase implementation plan finalized
|
|
- Architecture decisions documented and validated
|
|
- Two-MCP-server approach confirmed (Gitea + Wiki.js)
|
|
- Python selected for MCP server implementation
|
|
- Hybrid configuration strategy defined (system + project level)
|
|
- Wiki.js structure planned with configurable base path
|
|
- Repository structure designed with shared MCP servers
|
|
|
|
### Key Architectural Decisions Made
|
|
1. **Shared MCP Servers**: Both plugins use the same MCP codebase at `mcp-servers/`
|
|
2. **Mode Detection**: MCP servers detect project vs company-wide mode via environment variables
|
|
3. **Python Implementation**: MCP servers written in Python (not Node.js) for better configuration handling
|
|
4. **Wiki.js Integration**: Lessons learned and documentation moved to Wiki.js for better collaboration
|
|
5. **Hybrid Config**: System-level credentials + project-level paths for flexibility
|
|
|
|
### Next Steps
|
|
- Begin Phase 1.1a: Gitea MCP Server implementation
|
|
- Set up Python virtual environments
|
|
- Create configuration loaders
|
|
- Implement core Gitea tools (issues, labels)
|
|
- Write integration tests
|