refactor: slim down SKILL.md, move implementation to references

- Remove specific project/folder names (sber-experiments, snow,
  agent-visuals, bloom-metal, vladmdgolam fork) and replace with
  generic examples across all skills
- Remove symlink warning from CLAUDE.md, add reference to
  building-skills-guide.md
This commit is contained in:
Vlad
2026-02-25 01:28:40 +08:00
parent aa1ab9563e
commit 868057029b
6 changed files with 85 additions and 36 deletions
+2 -11
View File
@@ -28,19 +28,10 @@ Collection of Claude Code / multi-agent skills published to [skills.sh](https://
~/.nvm/versions/node/v22.21.1/bin/npx skills list
```
## ⚠️ Broken symlink issue
This repo itself IS the skills source directory. When `npx skills add` runs in project mode (default), it creates symlinks inside `skills/` pointing to `../.agents/skills/<name>` — a path that doesn't exist — causing broken symlinks and confusing git diffs.
**Always install globally** (`-g`) from this repo, never project-level.
If broken symlinks appear in `skills/`:
```bash
rm skills/<name> && git checkout -- skills/<name>
```
## Adding a new skill
See `references/building-skills-guide.md` for the complete guide to building skills (frontmatter, progressive disclosure, composability, testing, distribution).
1. Create `skills/<name>/SKILL.md` with `name` and `description` frontmatter
2. Add scripts/references/assets as needed
3. Update `README.md` with the new skill entry
+1 -1
View File
@@ -538,7 +538,7 @@ print(result)
**Notes:**
- The socket server may not be running if you started C4D without the MCP plugin loaded.
- Port `5555` is the default for the vladmdgolam fork. Other forks may use different ports.
- Port `5555` is the default. Some forks or configurations may use different ports.
- Responses are newline-delimited JSON. Large responses (e.g., full scene data) will be chunked — loop on `recv` until you have a complete JSON object.
## Data Output
+2 -2
View File
@@ -17,9 +17,9 @@
| Error | Cause | Fix |
|-------|-------|-----|
| `list_objects` validation error (expected string, got dict) | MCP schema mismatch (fixed in vladmdgolam fork) | Update server, or use `execute_python_script` to traverse hierarchy |
| `list_objects` validation error (expected string, got dict) | MCP schema mismatch (fixed in some forks) | Update server, or use `execute_python_script` to traverse hierarchy |
| `load_scene` error (`takes 1 positional argument but N were given`) | Plugin bug: path unpacked as args | Load scene manually or via `execute_python_script` + `LoadDocument` |
| `render_preview` validation error (expected string, got dict) | Same schema mismatch (fixed in vladmdgolam fork) | Update server, or skip preview |
| `render_preview` validation error (expected string, got dict) | Same schema mismatch (fixed in some forks) | Update server, or skip preview |
| Frame sampling returns static values | Missing pass evaluation | Call `ExecutePasses` after `SetTime` |
| Jumping to frame X gives wrong positions | Stateful MoGraph evaluation | Step sequentially from start frame |
+57 -15
View File
@@ -33,24 +33,66 @@ Ask for or infer:
- Date range (first commit → last commit, or user-specified)
- Output location for HTML + markdown files
### 2. Extract data
Run all four scripts. For multi-repo projects, run `git_sessions.py` on each repo separately then merge results.
**Auto-discover sub-repos:** By default, scan the project directory for `.git` folders in subdirectories (not just the root). Each parent of a `.git` directory is a sub-repo to analyze.
```bash
# Git sessions (run per repo)
python3 git_sessions.py /path/to/repo --since 2026-01-15 --until 2026-02-02
# WakaTime — always pass --project to get per-project hours (not all-account)
python3 wakatime_fetch.py --start 2026-01-15 --end 2026-02-02 --project my-project
# Claude Code — prefer --project-path for exact match
python3 claude_messages.py --project-path /abs/path/to/repo
# Codex CLI — same interface as claude_messages.py
python3 codex_messages.py --project-path /abs/path/to/repo
# Find all git repos under the project directory
find /path/to/project -name ".git" -type d 2>/dev/null | sort
```
This produces a list like:
```
/path/to/project/frontend/.git
/path/to/project/backend/.git
/path/to/project/libs/shared/.git
```
Each of these (minus the `/.git` suffix) is a repo to run `git_sessions.py`, `claude_messages.py`, and `codex_messages.py` on. Also run these scripts on the root project directory itself (for Claude/Codex messages sent from the root, which is common when using monorepo-style workflows).
### 2. Extract data
Run all four scripts on every discovered repo. For git and Claude/Codex, run per sub-repo. For WakaTime, use the multi-project discovery approach described below.
```bash
# Git sessions — run per sub-repo
python3 git_sessions.py /path/to/project/frontend --since 2026-01-15 --until 2026-02-02
python3 git_sessions.py /path/to/project/backend --since 2026-01-15 --until 2026-02-02
# Claude Code — run per sub-repo AND the root directory
python3 claude_messages.py --project-path /path/to/project
python3 claude_messages.py --project-path /path/to/project/frontend
python3 claude_messages.py --project-path /path/to/project/backend
# Codex CLI — same as Claude
python3 codex_messages.py --project-path /path/to/project
python3 codex_messages.py --project-path /path/to/project/frontend
python3 codex_messages.py --project-path /path/to/project/backend
```
**WakaTime multi-project discovery:** WakaTime often tracks sub-directories as separate projects (e.g., a monorepo at `my-project/` may have WakaTime projects named `my-project`, `frontend`, `backend`, `shared`). A single `--project` query will miss the others.
1. First, run `wakatime_fetch.py` **without** `--project` to get the full project list for the date range:
```bash
python3 wakatime_fetch.py --start 2026-01-15 --end 2026-02-02
# Returns: { "projects": [{"project": "my-project", "hours": 9.2}, {"project": "frontend", "hours": 5.1}, ...] }
```
2. Filter the returned `projects` list for names matching any of:
- The root project directory basename (e.g., `my-project`)
- Any sub-repo directory basename (e.g., `frontend`, `backend`)
- Any intermediate directory basename that contains a sub-repo (e.g., `libs`)
3. Fetch intervals for each matching project:
```bash
python3 wakatime_fetch.py --start 2026-01-15 --end 2026-02-02 --project my-project
python3 wakatime_fetch.py --start 2026-01-15 --end 2026-02-02 --project frontend
python3 wakatime_fetch.py --start 2026-01-15 --end 2026-02-02 --project backend
```
4. Combine all intervals from all matching WakaTime projects into a single list for reconciliation.
**Why this matters:** In a project with 4 sub-repos, a single `--project` query captured only 9h of the actual 26.5h of WakaTime data. The other 17.5h was tracked under sub-directory project names.
**Folder move detection:** If `claude_messages.py` or `codex_messages.py` return 0 results, check the output for `alternate_paths`. If present, ask the user:
> "No Claude/Codex history found at `/current/path`, but found sessions for `project-name` at `/old/path`. Was this project moved? Should I include that history too?"
@@ -327,4 +369,4 @@ python3 claude_messages.py --filter marketplace
**Folder move detection:** Both `claude_messages.py` and `codex_messages.py` scan all known history for matching project names when 0 results are found at the provided path. Returns `alternate_paths` list. If non-empty, ask user to confirm, re-run with old path, merge timestamps. See [references/folder-move-detection.md](references/folder-move-detection.md) for detection logic and edge cases.
**Multi-repo projects:** Merge session arrays from multiple `git_sessions.py` runs, re-sort by date, recompute daily totals and grand total.
**Multi-repo projects:** By default, scan for `.git` subdirectories to auto-discover all sub-repos. Run `git_sessions.py`, `claude_messages.py`, and `codex_messages.py` on each sub-repo plus the root directory. Use WakaTime multi-project discovery to find all matching WakaTime project names. Merge all session arrays, re-sort by date, recompute daily totals and grand total.
+22 -6
View File
@@ -17,14 +17,30 @@ To set the key manually: visit [wakatime.com/settings/api-key](https://wakatime.
api_key = waka_xxxx...
```
### Always Pass `--project`
### Multi-Project Discovery (Default Workflow)
Without `--project`, the script returns all-account daily totals, which mix multiple projects worked on the same days. Always pass `--project <wakatime-project-name>` to get per-project data.
WakaTime often tracks sub-directories as separate projects. A monorepo at `my-monorepo/` may have WakaTime projects named `my-monorepo`, `frontend`, `api-service`, `shared-utils`, etc. Querying only the root project name misses significant hours.
Example:
```bash
python3 wakatime_fetch.py --start 2026-01-15 --end 2026-02-02 --project my-project
```
**Default approach — always do this:**
1. Run `wakatime_fetch.py` **without** `--project` first to get the full project list:
```bash
python3 wakatime_fetch.py --start 2026-01-15 --end 2026-02-02
# Returns: { "projects": [{"project": "my-monorepo", "hours": 9.2}, {"project": "frontend", "hours": 5.0}, ...] }
```
2. Filter the `projects` list for names matching the root directory basename OR any sub-repo/sub-directory basename.
3. Fetch intervals for **each** matching project name:
```bash
python3 wakatime_fetch.py --start 2026-01-15 --end 2026-02-02 --project my-monorepo
python3 wakatime_fetch.py --start 2026-01-15 --end 2026-02-02 --project frontend
python3 wakatime_fetch.py --start 2026-01-15 --end 2026-02-02 --project api-service
```
4. Combine all intervals into a single list for reconciliation. The merge algorithm handles overlaps.
**Why this matters:** In practice, querying only the root project name captured 9h out of 26.5h total — missing 66% of actual WakaTime data that was tracked under sub-directory names.
### Behavior & Limitations
+1 -1
View File
@@ -6,7 +6,7 @@ Reads API key from ~/.wakatime.cfg [settings] api_key.
Usage:
python3 wakatime_fetch.py --start 2026-01-15 --end 2026-02-02
python3 wakatime_fetch.py --start 2026-01-15 --end 2026-02-02 --project snow
python3 wakatime_fetch.py --start 2026-01-15 --end 2026-02-02 --project my-project
Output: JSON with daily summaries and per-project breakdown.
"""