Project Metadata Builder
Build comprehensive project metadata and maintain a global registry at ${CLAUDE_PROJECTS_YML_PATH}.
Activation Triggers
- After
project-analysis agent completes analysis
- User says: "update project metadata", "refresh projects", "register project"
- Session start with
auto_update_on_session: true in config
Execution
Run the builder script for a project:
cd ${CLAUDE_SKILLS_PATH}/project-metadata-builder && \
uv run python -m scripts.builder <project_path> [--session-id <id>]
Arguments
| Argument |
Required |
Description |
project_path |
Yes |
Path to the project directory |
--session-id |
No |
Current session ID for history tracking |
--debug |
No |
Enable debug logging |
Output
Updates ${CLAUDE_PROJECTS_YML_PATH} with:
- Identity: Name, slug, description
- Git: Remote URL, branch, last commit (hash, message, author, date), total commits
- Languages: Primary language, all languages with percentages
- Frameworks: Detected frameworks (react, docker, playwright, etc.)
- Dependencies: Python (from pyproject.toml) and Node (from package.json)
- Structure: Project type, key directories, entry points
- Runtime: Docker services, MCP servers
- Activity: Status (active/stale/archived), timestamps
- Sessions: Last N sessions with commits and files changed
Configuration
Settings in ${CLAUDE_PATH}/config.yml (project root):
project_metadata:
session_history_limit: 10 # Keep last N sessions
auto_update_on_session: true # Auto-update on session start
periodic_refresh_hours: 24 # Periodic refresh (0 = disabled)
stale_project_days: 30 # Mark stale after N days inactive
activity_threshold_commits: 5 # Min commits for "active" status
projects_file: ${CLAUDE_PROJECTS_YML_PATH}
log_level: INFO
Example Output (projects.yml)
projects:
/workspace/projects/personal/claude-sandbox:
name: claude-sandbox
slug: claude-sandbox
description: "Docker-ized development environment for Claude Code CLI"
git:
remote_url: git@github.com:brianclaridge/claude-sandbox.git
branch: main
last_commit:
hash: abc123def456
message: "feat: add project-metadata-builder skill"
author: Brian Claridge
date: "2025-12-11T15:00:00"
total_commits: 42
languages:
primary: Python
all:
- "Python: 45%"
- "Shell: 30%"
- "Markdown: 15%"
frameworks:
- docker
- playwright
- structlog
dependencies:
python:
- "playwright>=1.40.0"
- "loguru>=0.7.0"
structure:
type: monorepo
key_directories:
- ".claude/agents/"
- ".claude/skills/"
- ".claude/hooks/"
entry_points:
- "docker-compose.yml"
- "Taskfile.yml"
runtime:
docker:
compose_file: ".claude/docker-compose.yml"
services:
- claude
mcp_servers:
- context7
- playwright
activity:
status: active
first_seen: "2025-12-01T10:00:00"
last_updated: "2025-12-11T15:30:00"
sessions:
- id: session_abc123
started: "2025-12-11T14:00:00"
ended: "2025-12-11T15:30:00"
commits: 3
files_changed: 12
Integration with project-analysis Agent
After completing project analysis, invoke this skill:
## Post-Analysis
1. Run project-metadata-builder skill
2. Pass current project path
3. Include session_id if available from environment
Logs
Logs written to: ~/.claude/.data/logs/project-metadata-builder/builder.log
Collectors
| Collector |
Source Files |
Data Extracted |
git_collector |
.git/ |
Remote, branch, commits |
lang_collector |
*.* |
Language percentages |
deps_collector |
pyproject.toml, package.json |
Dependencies |
docker_collector |
docker-compose.yml |
Services, compose config |
mcp_collector |
.mcp.json, settings.json |
MCP servers |
1---2name: project-metadata-builder3description: Build and update project metadata registry in ${CLAUDE_PROJECTS_YML_PATH}. Use when starting a session, after project analysis, when user says "update project metadata", "refresh projects", "register project", or when project-analysis agent completes analysis.4---5
6# Project Metadata Builder
7
8Build comprehensive project metadata and maintain a global registry at `${CLAUDE_PROJECTS_YML_PATH}`.
9
10## Activation Triggers
11
12- After `project-analysis` agent completes analysis
13- User says: "update project metadata", "refresh projects", "register project"
14- Session start with `auto_update_on_session: true` in config
15
16## Execution
17
18Run the builder script for a project:
19
20```bash
21cd ${CLAUDE_SKILLS_PATH}/project-metadata-builder && \
22uv run python -m scripts.builder <project_path> [--session-id <id>]
23```
24
25### Arguments
26
27| Argument | Required | Description |
28|----------|----------|-------------|
29| `project_path` | Yes | Path to the project directory |
30| `--session-id` | No | Current session ID for history tracking |
31| `--debug` | No | Enable debug logging |
32
33## Output
34
35Updates `${CLAUDE_PROJECTS_YML_PATH}` with:
36
37- **Identity**: Name, slug, description
38- **Git**: Remote URL, branch, last commit (hash, message, author, date), total commits
39- **Languages**: Primary language, all languages with percentages
40- **Frameworks**: Detected frameworks (react, docker, playwright, etc.)
41- **Dependencies**: Python (from pyproject.toml) and Node (from package.json)
42- **Structure**: Project type, key directories, entry points
43- **Runtime**: Docker services, MCP servers
44- **Activity**: Status (active/stale/archived), timestamps
45- **Sessions**: Last N sessions with commits and files changed
46
47## Configuration
48
49Settings in `${CLAUDE_PATH}/config.yml` (project root):
50
51```yaml
52project_metadata:
53 session_history_limit: 10 # Keep last N sessions
54 auto_update_on_session: true # Auto-update on session start
55 periodic_refresh_hours: 24 # Periodic refresh (0 = disabled)
56 stale_project_days: 30 # Mark stale after N days inactive
57 activity_threshold_commits: 5 # Min commits for "active" status
58 projects_file: ${CLAUDE_PROJECTS_YML_PATH}
59 log_level: INFO
60```
61
62## Example Output (projects.yml)
63
64```yaml
65projects:
66 /workspace/projects/personal/claude-sandbox:
67 name: claude-sandbox
68 slug: claude-sandbox
69 description: "Docker-ized development environment for Claude Code CLI"
70 git:
71 remote_url: git@github.com:brianclaridge/claude-sandbox.git
72 branch: main
73 last_commit:
74 hash: abc123def456
75 message: "feat: add project-metadata-builder skill"
76 author: Brian Claridge
77 date: "2025-12-11T15:00:00"
78 total_commits: 42
79 languages:
80 primary: Python
81 all:
82 - "Python: 45%"
83 - "Shell: 30%"
84 - "Markdown: 15%"
85 frameworks:
86 - docker
87 - playwright
88 - structlog
89 dependencies:
90 python:
91 - "playwright>=1.40.0"
92 - "loguru>=0.7.0"
93 structure:
94 type: monorepo
95 key_directories:
96 - ".claude/agents/"
97 - ".claude/skills/"
98 - ".claude/hooks/"
99 entry_points:
100 - "docker-compose.yml"
101 - "Taskfile.yml"
102 runtime:
103 docker:
104 compose_file: ".claude/docker-compose.yml"
105 services:
106 - claude
107 mcp_servers:
108 - context7
109 - playwright
110 activity:
111 status: active
112 first_seen: "2025-12-01T10:00:00"
113 last_updated: "2025-12-11T15:30:00"
114 sessions:
115 - id: session_abc123
116 started: "2025-12-11T14:00:00"
117 ended: "2025-12-11T15:30:00"
118 commits: 3
119 files_changed: 12
120```
121
122## Integration with project-analysis Agent
123
124After completing project analysis, invoke this skill:
125
126```markdown
127## Post-Analysis
128
1291. Run project-metadata-builder skill
1302. Pass current project path
1313. Include session_id if available from environment
132```
133
134## Logs
135
136Logs written to: `~/.claude/.data/logs/project-metadata-builder/builder.log`
137
138## Collectors
139
140| Collector | Source Files | Data Extracted |
141|-----------|--------------|----------------|
142| `git_collector` | `.git/` | Remote, branch, commits |
143| `lang_collector` | `*.*` | Language percentages |
144| `deps_collector` | `pyproject.toml`, `package.json` | Dependencies |
145| `docker_collector` | `docker-compose.yml` | Services, compose config |
146| `mcp_collector` | `.mcp.json`, `settings.json` | MCP servers |