mirror of
https://github.com/vladmdgolam/agent-skills.git
synced 2026-09-14 20:17:25 +08:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user