diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 3e441974..0e4dca59 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -11,7 +11,7 @@ { "name": "ecc", "source": "./", - "description": "The most comprehensive Claude Code plugin — 60 agents, 231 skills, 75 legacy command shims, selective install profiles, and production-ready hooks for TDD, security scanning, code review, and continuous learning", + "description": "The most comprehensive Claude Code plugin — 60 agents, 232 skills, 75 legacy command shims, selective install profiles, and production-ready hooks for TDD, security scanning, code review, and continuous learning", "version": "2.0.0-rc.1", "author": { "name": "Affaan Mustafa", diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 0794ca05..c1927a02 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "ecc", "version": "2.0.0-rc.1", - "description": "Battle-tested Claude Code plugin for engineering teams — 60 agents, 231 skills, 75 legacy command shims, production-ready hooks, and selective install workflows evolved through continuous real-world use", + "description": "Battle-tested Claude Code plugin for engineering teams — 60 agents, 232 skills, 75 legacy command shims, production-ready hooks, and selective install workflows evolved through continuous real-world use", "author": { "name": "Affaan Mustafa", "url": "https://x.com/affaanmustafa" diff --git a/AGENTS.md b/AGENTS.md index e6211c80..65d314d6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,6 @@ # Everything Claude Code (ECC) — Agent Instructions -This is a **production-ready AI coding plugin** providing 60 specialized agents, 231 skills, 75 commands, and automated hook workflows for software development. +This is a **production-ready AI coding plugin** providing 60 specialized agents, 232 skills, 75 commands, and automated hook workflows for software development. **Version:** 2.0.0-rc.1 @@ -150,7 +150,7 @@ Troubleshoot failures: check test isolation → verify mocks → fix implementat ``` agents/ — 60 specialized subagents -skills/ — 231 workflow skills and domain knowledge +skills/ — 232 workflow skills and domain knowledge commands/ — 75 slash commands hooks/ — Trigger-based automations rules/ — Always-follow guidelines (common + per-language) diff --git a/README.md b/README.md index c1e9f90b..e7595bc5 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ This repo is the raw code only. The guides explain everything. ### v2.0.0-rc.1 — Surface Refresh, Operator Workflows, and ECC 2.0 Alpha (Apr 2026) - **Dashboard GUI** — New Tkinter-based desktop application (`ecc_dashboard.py` or `npm run dashboard`) with dark/light theme toggle, font customization, and project logo in header and taskbar. -- **Public surface synced to the live repo** — metadata, catalog counts, plugin manifests, and install-facing docs now match the actual OSS surface: 60 agents, 231 skills, and 75 legacy command shims. +- **Public surface synced to the live repo** — metadata, catalog counts, plugin manifests, and install-facing docs now match the actual OSS surface: 60 agents, 232 skills, and 75 legacy command shims. - **Operator and outbound workflow expansion** — `brand-voice`, `social-graph-ranker`, `connections-optimizer`, `customer-billing-ops`, `ecc-tools-cost-audit`, `google-workspace-ops`, `project-flow-ops`, and `workspace-surface-audit` round out the operator lane. - **Media and launch tooling** — `manim-video`, `remotion-video-creation`, and upgraded social publishing surfaces make technical explainers and launch content part of the same system. - **Framework and product surface growth** — `nestjs-patterns`, richer Codex/OpenCode install surfaces, and expanded cross-harness packaging keep the repo usable beyond Claude Code alone. @@ -392,7 +392,7 @@ If you stacked methods, clean up in this order: /plugin list ecc@ecc ``` -**That's it!** You now have access to 60 agents, 231 skills, and 75 legacy command shims. +**That's it!** You now have access to 60 agents, 232 skills, and 75 legacy command shims. ### Dashboard GUI @@ -1423,7 +1423,7 @@ The configuration is automatically detected from `.opencode/opencode.json`. |---------|-------------|----------|--------| | Agents | PASS: 60 agents | PASS: 12 agents | **Claude Code leads** | | Commands | PASS: 75 commands | PASS: 35 commands | **Claude Code leads** | -| Skills | PASS: 231 skills | PASS: 37 skills | **Claude Code leads** | +| Skills | PASS: 232 skills | PASS: 37 skills | **Claude Code leads** | | Hooks | PASS: 8 event types | PASS: 11 events | **OpenCode has more!** | | Rules | PASS: 29 rules | PASS: 13 instructions | **Claude Code leads** | | MCP Servers | PASS: 14 servers | PASS: Full | **Full parity** | @@ -1585,7 +1585,7 @@ ECC is the **first plugin to maximize every major AI coding tool**. Here's how e |---------|------------|------------|-----------|----------|----------------| | **Agents** | 60 | Shared (AGENTS.md) | Shared (AGENTS.md) | 12 | N/A | | **Commands** | 75 | Shared | Instruction-based | 35 | 6 prompts | -| **Skills** | 231 | Shared | 10 (native format) | 37 | Via instructions | +| **Skills** | 232 | Shared | 10 (native format) | 37 | Via instructions | | **Hook Events** | 8 types | 15 types | None yet | 11 types | None | | **Hook Scripts** | 20+ scripts | 16 scripts (DRY adapter) | N/A | Plugin hooks | N/A | | **Rules** | 34 (common + lang) | 34 (YAML frontmatter) | Instruction-based | 13 instructions | 1 always-on file | diff --git a/README.zh-CN.md b/README.zh-CN.md index d37fd735..e95bb588 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -160,7 +160,7 @@ Copy-Item -Recurse rules/typescript "$HOME/.claude/rules/" /plugin list ecc@ecc ``` -**完成!** 你现在可以使用 60 个代理、231 个技能和 75 个命令。 +**完成!** 你现在可以使用 60 个代理、232 个技能和 75 个命令。 ### multi-* 命令需要额外配置 diff --git a/docs/zh-CN/AGENTS.md b/docs/zh-CN/AGENTS.md index 251e0bf9..14c22579 100644 --- a/docs/zh-CN/AGENTS.md +++ b/docs/zh-CN/AGENTS.md @@ -1,6 +1,6 @@ # Everything Claude Code (ECC) — 智能体指令 -这是一个**生产就绪的 AI 编码插件**,提供 60 个专业代理、231 项技能、75 条命令以及自动化钩子工作流,用于软件开发。 +这是一个**生产就绪的 AI 编码插件**,提供 60 个专业代理、232 项技能、75 条命令以及自动化钩子工作流,用于软件开发。 **版本:** 2.0.0-rc.1 @@ -147,7 +147,7 @@ ``` agents/ — 60 个专业子代理 -skills/ — 231 个工作流技能和领域知识 +skills/ — 232 个工作流技能和领域知识 commands/ — 75 个斜杠命令 hooks/ — 基于触发的自动化 rules/ — 始终遵循的指导方针(通用 + 每种语言) diff --git a/docs/zh-CN/README.md b/docs/zh-CN/README.md index 32ba7f1a..0d70424e 100644 --- a/docs/zh-CN/README.md +++ b/docs/zh-CN/README.md @@ -224,7 +224,7 @@ Copy-Item -Recurse rules/typescript "$HOME/.claude/rules/" /plugin list ecc@ecc ``` -**搞定!** 你现在可以使用 60 个智能体、231 项技能和 75 个命令了。 +**搞定!** 你现在可以使用 60 个智能体、232 项技能和 75 个命令了。 *** @@ -1138,7 +1138,7 @@ opencode |---------|-------------|----------|--------| | 智能体 | PASS: 60 个 | PASS: 12 个 | **Claude Code 领先** | | 命令 | PASS: 75 个 | PASS: 35 个 | **Claude Code 领先** | -| 技能 | PASS: 231 项 | PASS: 37 项 | **Claude Code 领先** | +| 技能 | PASS: 232 项 | PASS: 37 项 | **Claude Code 领先** | | 钩子 | PASS: 8 种事件类型 | PASS: 11 种事件 | **OpenCode 更多!** | | 规则 | PASS: 29 条 | PASS: 13 条指令 | **Claude Code 领先** | | MCP 服务器 | PASS: 14 个 | PASS: 完整 | **完全对等** | @@ -1246,7 +1246,7 @@ ECC 是**第一个最大化利用每个主要 AI 编码工具的插件**。以 |---------|------------|------------|-----------|----------| | **智能体** | 60 | 共享 (AGENTS.md) | 共享 (AGENTS.md) | 12 | | **命令** | 75 | 共享 | 基于指令 | 35 | -| **技能** | 231 | 共享 | 10 (原生格式) | 37 | +| **技能** | 232 | 共享 | 10 (原生格式) | 37 | | **钩子事件** | 8 种类型 | 15 种类型 | 暂无 | 11 种类型 | | **钩子脚本** | 20+ 个脚本 | 16 个脚本 (DRY 适配器) | N/A | 插件钩子 | | **规则** | 34 (通用 + 语言) | 34 (YAML 前页) | 基于指令 | 13 条指令 | diff --git a/package.json b/package.json index af498b8f..9add2751 100644 --- a/package.json +++ b/package.json @@ -122,6 +122,7 @@ "skills/automation-audit-ops/", "skills/autonomous-loops/", "skills/backend-patterns/", + "skills/blender-motion-state-inspection/", "skills/blueprint/", "skills/brand-voice/", "skills/carrier-relationship-management/", diff --git a/skills/blender-motion-state-inspection/SKILL.md b/skills/blender-motion-state-inspection/SKILL.md new file mode 100644 index 00000000..14f974d2 --- /dev/null +++ b/skills/blender-motion-state-inspection/SKILL.md @@ -0,0 +1,164 @@ +--- +name: blender-motion-state-inspection +description: Use this skill when inspecting Blender characters, rigs, poses, animation retargeting, ground contact, facing direction, or model-vs-motion alignment where screenshots alone are not enough. +origin: ECC +tools: Read, Write, Edit, Bash, Grep, Glob +--- + +# Blender Motion State Inspection + +## When to Use + +- A Blender character looks twisted, mirrored, flattened, offset, or foot-sliding in an animation. +- A user asks whether an imported avatar, armature, or retargeted motion matches an expected pose. +- You need to compare rendered evidence with structured facts such as bones, bounding boxes, contacts, and facing vectors. +- A workflow depends on deciding whether a model is a character, prop, proxy mesh, control rig, or broken import. + +## Core Principle + +Do not judge animated 3D assets only from screenshots. Screenshots are review evidence, but they hide axis conventions, bone names, object scale, local transforms, parented meshes, material slots, and frame-by-frame contact state. + +First extract structured Blender state, then use viewport screenshots or renders to confirm what the facts imply. + +## How It Works + +1. Establish the clean scene and asset baseline before judging motion. +2. Extract structured facts from Blender using an exporter or Blender Python run inside Blender's own interpreter. +3. Sample the frames most likely to expose contact, orientation, scale, and retargeting errors. +4. Compare the measured facts against the user's expected pose, direction, ground plane, and render goal. +5. Return a concise report that separates confirmed facts, likely causes, and required fixes. + +## Inspection Workflow + +1. Inventory the scene. + - List meshes, armatures, empties, cameras, lights, modifiers, parent relationships, and hidden objects. + - Separate character meshes from helper/proxy geometry before judging the avatar. + - Record object-space and world-space bounding boxes. + +2. Identify the skeleton. + - Capture armature names, pose bones, bone heads/tails, roll, parent chains, constraints, and rest-pose axes. + - Map semantic bones such as hips, spine, neck, head, shoulders, elbows, hands, thighs, knees, ankles, and feet. + - Flag missing left/right pairs and unusual naming schemes. + +3. Determine forward, up, and side axes. + - Use the pelvis, spine, shoulders, hips, head, and feet together; do not rely on a single mesh normal. + - Compare local armature axes with world axes and imported file conventions such as glTF Y-up vs Blender Z-up. + - Mark likely mirrored or backwards imports when face/head/feet direction conflicts with root motion. + +4. Sample animation frames. + - Inspect first, middle, contact, airborne, and extreme frames. + - Record root location, root heading, pelvis height, torso lean, limb directions, foot clearance, and mesh bounds. + - For long or fast motion, sample more densely around flips, landings, turns, collisions, and floor contacts. + +5. Check model integrity before retargeting blame. + - Confirm the clean baseline shape before applying animation. + - Preserve original mesh, materials, armature, and skinning unless the user explicitly asks for repair. + - Treat unexplained sphere-like blobs, giant proxy meshes, or crushed bodies as import/selection issues until proven otherwise. + +6. Diagnose contact and motion issues. + - Ground penetration: compare lowest foot or shoe vertices with floor height per frame. + - Foot sliding: compare foot world positions across planted frames. + - Leg crossover: compare left/right thigh, knee, ankle, and foot side ordering. + - Twist damage: compare bone swing direction separately from roll/twist around the limb axis. + - Scale drift: compare animated mesh bounds against the clean baseline bounds. + +7. Report facts before opinions. + - Include frame numbers, object names, bone names, world coordinates, and thresholds. + - Separate confirmed failures from visual suspicions. + - Attach screenshots only after the structured state explains what to look for. + +## Recommended Report Shape + +```markdown +## Blender Motion Inspection + +### Scene Inventory +- Character candidates: +- Armatures: +- Helper/proxy objects: +- Cameras/lights: + +### Orientation +- World up: +- Character forward: +- Root heading: +- Mirrored/backwards risk: + +### Baseline Integrity +- Clean mesh bounds: +- Animated mesh bounds: +- Materials/skin preserved: +- Suspicious non-character meshes: + +### Frame Findings +| Frame | Finding | Evidence | +| --- | --- | --- | +| 1 | Clean baseline pose | hips/spine/feet aligned | +| 96 | Foot penetrates floor | left_foot min_z = -0.04 | + +### Verdict +- Pass/fail: +- Required fix: +- Render readiness: +``` + +## Examples + +### Walk Cycle With Foot Sliding + +Scenario: a retargeted character appears to skate during a walk cycle, but the front camera angle makes the foot contact hard to judge. + +Apply the workflow: +- Inventory the scene: character mesh `HeroBody`, armature `HeroRig`, ground plane `Floor`, no hidden proxy meshes. +- Identify the skeleton: semantic feet are `foot.L` and `foot.R`; hips are `pelvis`; root bone is `root`. +- Sample animation frames: inspect frames 1, 18, 24, 30, 42, and 48 around planted-foot moments. +- Diagnose contact and motion issues: compare world-space foot locations during planted frames. + +Extracted facts: + +| Frame | Fact | Evidence | +| --- | --- | --- | +| 18 | Left foot is planted | `foot.L min_z = 0.004`, toe and heel both near floor | +| 24 | Left foot slides while planted | `foot.L x = 0.21 -> 0.28` over six frames | +| 30 | Pelvis keeps moving forward | `pelvis y = 1.14 -> 1.31` | + +Verdict: fail for render readiness. The motion needs foot-lock cleanup or retargeting constraint review; the body mesh does not need proportion changes. + +### Backwards Imported Character + +Scenario: a character looks correct in a still frame, but the animation moves opposite the expected travel direction. + +Apply the workflow: +- Determine forward, up, and side axes: compare head, chest, feet, and root motion. +- Sample animation frames: inspect frame 1 and the midpoint of the travel path. +- Report facts before opinions: include the root heading and model-facing direction separately. + +Extracted facts: + +| Frame | Fact | Evidence | +| --- | --- | --- | +| 1 | Character face points toward world `-Y` | head/chest vector from `neck` to `head` resolves to `-Y` | +| 72 | Root motion travels toward world `+Y` | `root y = 0.0 -> 2.8` | +| 72 | Feet remain visually forward-facing opposite travel | toe bones point `-Y` while displacement is `+Y` | + +Verdict: likely backwards import or retargeting forward-axis mismatch. Fix the import/retarget axis mapping before editing animation curves. + +## Practical Thresholds + +- Assume Blender's default meter-scale units unless the scene unit scale says otherwise. +- Treat ground penetration above 1-2 cm as visible unless the floor is soft or intentionally stylized. +- Treat a sudden scale change above 5% as a likely rig, constraint, or transform inheritance problem. +- Treat left/right ankle side-order flips during airborne inverted motion as leg crossover risk even if it recovers later. +- Treat root heading jumps above 30 degrees per frame as suspicious unless the source motion includes a snap turn. + +## Anti-Patterns + +- Do not modify body proportions to force pose matching unless the task is explicitly mesh repair. +- Do not bake away the clean baseline before recording it. +- Do not use one rendered camera angle as proof that a pose is correct. +- Do not delete helper objects until you have recorded why they are not part of the character. +- Do not assume an avatar faces +Y, -Y, +X, or -X without checking head, feet, torso, and root motion together. + +## Tooling Notes + +If a Blender state exporter is available, prefer JSON that includes meshes, armatures, pose bones, materials, contacts, bounding boxes, and sampled animation frames. If no exporter exists, run a small Blender Python script through Blender itself, for example `blender --background scene.blend --python collect_motion_state.py`, because `bpy` is not available in a normal system Python interpreter.