- skill-security-audit.yml: fix AUDITOR path (engineering/skills/skill-security-auditor/...)
- skill-quality-review.yml: fix skill_validator.py and skill_security_auditor.py paths
- engineering-team/unified-ui-dashboard/SKILL.md: rewrite with ToC, workflows, examples,
anti-patterns, and full tool capability table to score above Tessl 70/100 threshold
Paths broke in PR #593 restructure (engineering/ → engineering/skills/) but the two
skill CI workflows were not updated. This fixes the ERROR verdict on security audit
and unblocks the Tessl quality review.
https://claude.ai/code/session_01384T8qjQWjr5TA75QUT2by
- New skill: unified-ui-dashboard showing all 11 connected MCP tool
categories (Gmail, Drive, Calendar, Zoom, GitHub, Shopify, Adobe,
Canva, DocuSign, HuggingFace, Ideabrowser) in a single interactive panel
- Self-contained dashboard.html with Google Antigravity physics engine:
cards float upward with real gravity simulation, mouse repulsion,
draggable elements, particle effects, and vertical wrapping
- Tool cards show live status, quick-action pills, and a detail modal
listing every available capability per tool
- /unified-ui slash command for quick access from any Claude session
- Keyboard shortcuts: Ctrl+G for antigravity, / to focus search, Esc to exit"
PR #593 moved every skill from <plugin>/<name>/ to <plugin>/skills/<name>/
to satisfy Claude Code's runtime loader. That broke two CI jobs that
hardcoded the old paths:
1. **9 test files** had `sys.path.insert(0, ".../<domain>/<skill>/scripts")`
pointing at the pre-restructure location. Inserted `"skills"` between
the domain and skill segments so imports resolve again.
2. **scripts/sync-codex-skills.py** scanned `<domain>/<skill>/SKILL.md`
and emitted "No skills found in repository". Updated `find_skills` to
prefer `<domain>/skills/<name>/` and fall back to `<domain>/<name>/`
so it works with both layouts (in case any domain hasn't been
restructured yet).
Verified locally:
- `python3 scripts/sync-codex-skills.py --dry-run` finds 178 skills
- `pytest tests/` collects all modules; 3216 tests pass
- 4 pre-existing failures remain (3 argparse duplicates in an
`integrations/` script, 1 strict "must have .py" check on a JS-only
skill) — out of scope for this fix.
Same root cause as #587/#591 — Claude Code's runtime loader rejects
array-form skills paths like ["./content-production", "./ai-seo", ...]
even when each entry is a valid subdirectory containing SKILL.md.
`claude plugin validate` accepts them but the loader does not.
The proven canonical layout (used by self-improving-agent in #536):
<plugin>/
├── .claude-plugin/plugin.json skills: "./skills"
└── skills/
├── <skill-1>/SKILL.md
├── <skill-2>/SKILL.md
└── ...
Restructured 9 multi-skill domain plugins:
- business-growth (4 skills moved)
- c-level-advisor (28)
- engineering (36)
- engineering-team (32)
- finance (2)
- marketing-skill (43)
- product-team (12)
- project-management (8)
- ra-qm-team (13)
Also fixed standalone plugins that had root SKILL.md + ./skills/ subdir
(agenthub, autoresearch-agent, executive-mentor, playwright-pro). The
loader rejected them despite skills="./skills" because of the conflicting
root SKILL.md (compare self-improving-agent which works because PR #536
moved its root SKILL.md). Moved each root SKILL.md into ./skills/<name>/.
Restored standalone plugin folders to their original paths after the
multi-skill restructure swept them into parent skills/ directories
(marketplace.json source paths require original locations).
Removed 7 orphaned marketplace entries that pointed to skill folders
without their own plugin.json (content-creator, demand-gen,
fullstack-engineer, aws-architect, product-manager, scrum-master,
skill-security-auditor) — these were already non-functional.
Bumped patch versions on every changed plugin and synced
marketplace.json. Marketplace now lists 29 working plugins (down
from 36).
After merge: users run `/plugin marketplace update claude-code-skills`
followed by `/plugin update --all` to pick up the working layout.
Claude Code v2.1.126 rejects "skills": ["./"] (array form) at runtime
with the same "Path escapes plugin directory: ./" error as the bare
string form, despite the official plugins reference docs explicitly
showing ["./"] as a valid example. `claude plugin validate` accepts it,
so the bug is in the runtime loader, not the manifest validator.
The proven workaround (already used for self-improving-agent in #536)
is to follow the canonical layout:
<plugin>/
├── .claude-plugin/plugin.json skills: "./skills"
└── skills/<plugin-name>/
├── SKILL.md
├── scripts/
├── references/
└── ...
Applied to 21 single-skill plugins:
- engineering-team/a11y-audit, google-workspace-cli, snowflake-development
- engineering/behuman, code-tour, data-quality-auditor, demo-video,
docker-development, helm-chart-builder, karpathy-coder, llm-cost-optimizer,
llm-wiki, prompt-governance, statistical-analyst, terraform-patterns
- finance/business-investment-advisor
- marketing-skill/video-content-strategist
- product-team/agile-product-owner, apple-hig-expert, code-to-prd,
research-summarizer
Moved with each SKILL.md: scripts/, references/, assets/, templates/,
expected_outputs/. Kept at plugin root (per Claude Code requirements):
agents/, commands/, hooks/, settings.json, README.md.
Bumped patch version on each restructured plugin so /plugin update
picks up the new layout.
Refs #539
PR #587 fixed `"skills": "./"` in 35 plugin.json files but did not bump
versions. Claude Code uses version as the cache key — same version string
means /plugin update is a no-op and users keep loading the cached
plugin.json with the broken path. The /plugin UI shows "1 error" on
every plugin from this marketplace because the installed cache is stale.
Per the official version-management docs:
> If you set `version` in `plugin.json`, you must bump it every time
> you want users to receive changes. Pushing new commits alone is not
> enough.
Bump every plugin.json by one patch using max(plugin_version,
marketplace_version) as the base so no version moves backward. Sync the
new versions back into .claude-plugin/marketplace.json.
After this lands, users run `/plugin marketplace update claude-code-skills`
followed by `/plugin update --all` to pull the fixed manifests.
Claude Code v2.1.107+ rejects bare "skills": "./" with "Path escapes
plugin directory: ./". This blocks every plugin in the marketplace from
loading. Replace with the layout-appropriate form per the official
plugins reference:
- Single-skill plugin (SKILL.md at root):
"skills": ["./"] array form (per docs example)
- Plugin with skills/ subdir:
"skills": "./skills" standard subdir layout
- Multi-skill domain plugin (skills are subfolders at root):
"skills": ["./sub1", "./sub2"] explicit list of skill dirs
The multi-skill case omits "./" from the array so the index SKILL.md
at the plugin root does not register as a skill — that would create
a redundant `marketing-skills:marketing-skills` namespace.
Verified by running `claude plugin validate` against all 35 manifests.
Closes#539
Zero-dependency Node.js skill that captures full-page screenshots of web
pages via Chrome DevTools Protocol. Supports SPA scroll container
expansion, lazy-load triggering, DOM stability detection, and tiled
capture for very tall pages. Requires only Node.js 22+ and Chrome with
remote debugging enabled.
- Convert Augment integration from flat .augment/rules/*.md to directory-based .augment/skills/<name>/SKILL.md structure
- Align Augment format with Windsurf and OpenCode skill bundle pattern
- Copy supporting folders (scripts/, references/, templates/) to each Augment skill directory
- Update frontmatter from 'type: auto' to standard 'name' + 'description' fields
- Update README documentation for new directory-based installation path
This change is possible because Augment Code now supports skills in beta, allowing us to move from the flat rules format to full skill bundles. This gives Augment users access to the complete skill ecosystem including Python automation tools and reference documentation, not just the markdown content.
Updated the skill description to emphasize proactive usage and clarified triggers for cost optimization. Enhanced the context and steps for cost auditing, optimization, and architecture design.
The plugin.json configured 'skills': './' which scans the plugin root for SKILL.md files. This found the root SKILL.md (name: 'self-improving-agent') and stopped, preventing Claude Code from discovering the subskills (review, promote, extract, status, remember) in the skills/ subdirectories.
Fix: Move root SKILL.md to skills/self-improving-agent/SKILL.md and update plugin.json to 'skills': './skills/' so Claude Code recursively scans the skills/ directory and discovers all 5 subskills.
This enables the intended /si:review, /si:promote, /si:extract, /si:status, /si:remember slash command routing.
Phases 2+3 of the marketing skills improvement plan. Inspired by patterns
from claude-blog (466 stars) — dual-optimization for Google + AI citation
platforms, quality gates as hard stops, and AI content detection.
content-production additions:
- scripts/content_quality_gates.py — 8 non-negotiable publishing gates:
heading hierarchy, paragraph length (≤150 words), image alt text,
source citations for statistics, title length (50-60 chars), meta
description length (150-160), self-promotion limit (≤1 mention),
freshness signals. Verdicts: PUBLISH / TARGET / BLOCK. Demo included.
- references/ai-citation-readiness.md — how to optimize for AI citation
platforms (Perplexity, ChatGPT, AI Overviews): answer-first paragraphs,
passage-level citability (120-180 word chunks), entity clarity, Q&A
formatting, freshness signals
- references/content-templates.md — 12 content templates (how-to, listicle,
case study, comparison, pillar page, product review, thought leadership,
roundup, tutorial, news analysis, data research, FAQ) with auto-selection
logic based on user intent and target word counts
copy-editing additions:
- scripts/ai_content_detector.py — 3-method AI detection: burstiness
analysis (sentence length CV — human=0.5+, AI=0.2-0.35), vocabulary
diversity (sliding-window TTR — human=0.6+, AI=0.35-0.45), 30 known
AI phrases with density scoring. Composite 0-100: ≤20 LIKELY_HUMAN,
21-50 MIXED, 51+ LIKELY_AI. Includes humanization recommendations.
- references/ai-detection-patterns.md — full explanation of all 3 methods,
threshold tables, the 10 most common AI phrases with replacements,
scoring formula, caveats for technical writing
All scripts stdlib-only, --json + --help + --demo verified.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The agile-product-owner skill was available as part of the product-team
domain bundle but lacked its own .claude-plugin/plugin.json for standalone
installation via `/plugin install agile-product-owner@claude-code-skills`.
Adds:
- product-team/agile-product-owner/.claude-plugin/plugin.json (v2.3.0)
- .claude-plugin/marketplace.json entry (36th plugin, category: product)
Cross-tool availability verified:
- Codex CLI: present in skills-index.json (product category, 16 skills)
- Gemini CLI: present in skills-index.json
- Hermes Agent: discoverable via sync-hermes-skills.py
- Top-level agent: agents/product/cs-agile-product-owner.md exists
Security audit: PASS (0 critical, 0 high)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hermes Agent (github.com/NousResearch/hermes-agent) uses the agentskills.io
standard — the same SKILL.md format with YAML frontmatter that our repo uses.
Both tools expect: name, description, version, license in frontmatter, with
references/, templates/, assets/ subdirectories. No format conversion needed.
Adds scripts/sync-hermes-skills.py which symlinks (or copies) our 198 skills
into ~/.hermes/skills/claude-skills/<domain>/<skill-name>/ where Hermes
discovers them automatically via its skill_view/skills_list tools.
Usage:
python scripts/sync-hermes-skills.py --verbose # full sync
python scripts/sync-hermes-skills.py --domain engineering # one domain
python scripts/sync-hermes-skills.py --copy # copy instead of symlink
python scripts/sync-hermes-skills.py --dry-run # preview
After sync, Hermes users can invoke any of our skills via:
/skills (browse)
/<skill-name> (invoke directly)
Compatibility matrix after this change:
Claude Code — native plugin install
Codex CLI — sync-codex-skills.py
Gemini CLI — sync-gemini-skills.py
OpenClaw — openclaw-install.sh
Hermes Agent — sync-hermes-skills.py (NEW)
Cursor/Aider/etc — scripts/convert.sh
Ref #520
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>