-
Notifications
You must be signed in to change notification settings - Fork 191
Fix missing frontmatter (3 skills, 11 commands) + add CLAUDE.md, CI, and validation #5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| # Copy to .env and adjust as needed. All variables are optional; sensible | ||
| # defaults are used when unset. | ||
|
|
||
| # Preferred package manager for scripts/lib/package-manager.js detection | ||
| # (npm | pnpm | yarn | bun). See README.md#package-manager-detection. | ||
| CLAUDE_PACKAGE_MANAGER= | ||
|
|
||
| # Set by Claude Code itself; used by scripts/hooks/session-end.js and | ||
| # scripts/hooks/pre-compact.js to locate the session transcript. | ||
| CLAUDE_TRANSCRIPT_PATH= | ||
|
|
||
| # Set by Claude Code itself; used by scripts/hooks/*.js to key | ||
| # per-session state. Falls back to the parent process id if unset. | ||
| CLAUDE_SESSION_ID= | ||
|
|
||
| # Number of turns before scripts/hooks/suggest-compact.js suggests a | ||
| # strategic /compact. Defaults to 50. | ||
| COMPACT_THRESHOLD=50 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| name: CI | ||
|
|
||
| on: | ||
| push: | ||
| branches: [main] | ||
| pull_request: | ||
| branches: [main] | ||
|
|
||
| jobs: | ||
| test: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
|
|
||
| - uses: actions/setup-node@v4 | ||
| with: | ||
| node-version-file: .nvmrc | ||
|
|
||
| - name: Validate agent/command/skill frontmatter | ||
| run: node scripts/validate-frontmatter.js | ||
|
|
||
| - name: Run test suite | ||
| run: node tests/run-all.js | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| 20 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major | 💤 Low value 🧩 Analysis chain🌐 Web query:
💡 Result: Node.js 20 (codename "Iron") reached its official end-of-life (EOL) on April 30, 2026 [1][2]. As of today, August 6, 2026, Node.js 20 is no longer maintained and does not receive updates, including security patches [3][2]. Users still running applications on this version are encouraged to migrate to a currently supported release to avoid potential security vulnerabilities [3][2]. Citations:
Move CI off Node.js 20. Node.js 20 reached end of life on April 30, 2026 and no longer receives maintenance or security updates. Update 🤖 Prompt for AI AgentsSource: MCP tools |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,43 @@ | ||
| # CLAUDE.md | ||
|
|
||
| This file is the always-on entry point Claude Code loads when working in | ||
| this repository. It gives Claude project context automatically instead of | ||
| starting every session with none. | ||
|
|
||
| ## What this repo is | ||
|
|
||
| **Everything Claude Code** is a Claude Code **plugin** distributing | ||
| production configs: `agents/`, `skills/`, `commands/`, `rules/`, `hooks/`, | ||
| `contexts/`, `mcp-configs/`, and cross-platform Node.js `scripts/`. See | ||
| [README.md](README.md) for the full directory map and installation options. | ||
|
|
||
| ## Conventions when contributing | ||
|
|
||
| - **Agents** (`agents/*.md`) require YAML frontmatter with `name`, | ||
| `description`, `tools`, and `model`. See any file in `agents/` for the | ||
| pattern. | ||
| - **Commands** (`commands/*.md`) require a `description` field in | ||
| frontmatter. | ||
| - **Skills** (`skills/**/SKILL.md`) require `name` and `description` in | ||
| frontmatter — this is what Claude Code uses to discover and route to a | ||
| skill. A skill without it is silently invisible. | ||
| - Run `node scripts/validate-frontmatter.js` before committing to catch | ||
| missing/malformed frontmatter in agents, commands, and skills. | ||
| - See [CONTRIBUTING.md](CONTRIBUTING.md) for where to place new | ||
| contributions and the PR process. | ||
|
|
||
| ## Test command | ||
|
|
||
| ```bash | ||
| node tests/run-all.js | ||
| ``` | ||
|
|
||
| Runs the full suite (`tests/lib/*.test.js`, `tests/hooks/*.test.js`). CI runs | ||
| this automatically on every push and pull request — see | ||
| `.github/workflows/ci.yml`. | ||
|
|
||
| ## Scripts | ||
|
|
||
| Cross-platform Node.js utilities live in `scripts/`. See | ||
| [scripts/AGENTS.md](scripts/AGENTS.md) for conventions specific to that | ||
| directory (package-manager detection, hook implementations). |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,7 @@ | ||
| --- | ||
| description: Create, verify, or list workflow checkpoints. Usage: /checkpoint [create|verify|list] [name]. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "== files =="
git ls-files | rg '(^commands/(checkpoint|eval|orchestrate)\.md$|^CLAUDE\.md$|^scripts/validate-frontmatter\.js$)' || true
echo
echo "== command frontmatter excerpts =="
for f in commands/checkpoint.md commands/eval.md commands/orchestrate.md; do
echo "--- $f ---"
sed -n '1,8p' "$f"
done
echo
echo "== CLAUDE excerpt =="
sed -n '20,28p' CLAUDE.md
echo
echo "== validator outline/search =="
if [ -f scripts/validate-frontmatter.js ]; then
wc -l scripts/validate-frontmatter.js
rg -n "frontmatter|description|Usage|yaml|parse|readFile|front-matter|js-yaml|yaml-safe|try" scripts/validate-frontmatter.js
fi
echo
echo "== validator file relevant sections =="
if [ -f scripts/validate-frontmatter.js ]; then
sed -n '1,220p' scripts/validate-frontmatter.js
fi
echo
echo "== deterministic frontmatter YAML parse probe =="
python3 - <<'PY'
from pathlib import Path
try:
import yaml
except Exception as e:
print("pyyaml_unavailable:", repr(e))
yaml = None
for path in ["commands/checkpoint.md", "commands/eval.md", "commands/orchestrate.md"]:
text = Path(path).read_text()
print(f"-- {path} --")
print(text.splitlines()[0:3])
try:
# Emulate simple YAML frontmatter extraction then parse as plain YAML scalar.
if text.startswith("---\n") and "---\n" in text[4:]:
body = text.split("---\n", 1)[1]
end = body.index("---")
fm = body[:end]
else:
fm = ""
parsed = yaml.safe_load(fm) if yaml else None
print("yaml_safe_load_description:", repr(parsed.get("description")) if parsed else "no yaml")
except Exception as e:
print("yaml_parse_error:", repr(e))
PYRepository: WorldFlowAI/everything-claude-code Length of output: 1957 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "== files =="
git ls-files | rg '(^commands/(checkpoint|eval|orchestrate)\.md$|^CLAUDE\.md$|^scripts/validate-frontmatter\.js$)' || true
echo
echo "== command frontmatter excerpts =="
for f in commands/checkpoint.md commands/eval.md commands/orchestrate.md; do
echo "--- $f ---"
sed -n '1,8p' "$f"
done
echo
echo "== CLAUDE excerpt =="
sed -n '20,28p' CLAUDE.md
echo
echo "== validator outline/search =="
if [ -f scripts/validate-frontmatter.js ]; then
wc -l scripts/validate-frontmatter.js
rg -n "frontmatter|description|Usage|yaml|parse|readFile|front-matter|js-yaml|yaml-safe|try" scripts/validate-frontmatter.js
fi
echo
echo "== validator file relevant sections =="
if [ -f scripts/validate-frontmatter.js ]; then
sed -n '1,220p' scripts/validate-frontmatter.js
fi
echo
echo "== deterministic frontmatter YAML parse probe =="
python3 - <<'PY'
from pathlib import Path
try:
import yaml
except Exception as e:
print("pyyaml_unavailable:", repr(e))
yaml = None
for path in ["commands/checkpoint.md", "commands/eval.md", "commands/orchestrate.md"]:
text = Path(path).read_text()
print(f"-- {path} --")
print(text.splitlines()[0:3])
try:
if text.startswith("---\n") and "---\n" in text[4:]:
body = text.split("---\n", 1)[1]
end = body.index("---")
fm = body[:end]
else:
fm = ""
parsed = yaml.safe_load(fm) if yaml else None
print("yaml_safe_load_description:", repr(parsed.get("description")) if parsed else "no yaml")
except Exception as e:
print("yaml_parse_error:", repr(e))
PYRepository: WorldFlowAI/everything-claude-code Length of output: 1957 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "== repo files present? =="
git rev-parse --show-toplevel 2>/dev/null || true
git ls-files | rg '(^commands/(checkpoint|eval|orchestrate)\.md$|^CLAUDE\.md$|^scripts/validate-frontmatter\.js$)' || true
echo
echo "== command frontmatter excerpts =="
for f in commands/checkpoint.md commands/eval.md commands/orchestrate.md; do
echo "--- $f ---"
sed -n '1,8p' "$f" 2>/dev/null || echo "missing: $f"
done
echo
echo "== CLAUDE excerpt =="
sed -n '20,28p' CLAUDE.md 2>/dev/null || true
echo
echo "== parser probe =="
python3 - <<'PY'
try:
import yaml
except Exception as e:
print("py_yaml_unavailable:", str(e))
yaml = None
for path in ["commands/checkpoint.md", "commands/eval.md", "commands/orchestrate.md"]:
try:
text = path.read_text() if hasattr(path, "read_text") else open(path, encoding="utf-8").read()
except Exception as e:
print(f"-- {path} missing/unreadable: {e}")
continue
body = text.split("---\n", 1)[1] if text.startswith("---\n") else ""
end = body.index("---") if "---\n" in body else len(body)
fm = body[:end].rstrip()
desc = None
err = None
if yaml:
try:
doc = yaml.safe_load(fm)
desc = doc.get("description") if isinstance(doc, dict) else None
except Exception as e:
err = str(e)
print(f"-- {path} --")
print(f"frontmatter:{repr(fm[:200])}")
print(f"yaml_safe_load_desc:{repr(desc)}")
print(f"yaml_safe_load_err:{err}")
PY
echo
echo "== validator relevant inspection =="
if [ -f scripts/validate-frontmatter.js ]; then
wc -l scripts/validate-frontmatter.js
rg -n "frontmatter|description|Usage|yaml|parse|findFiles|readFile|require|import|front-matter|js-yaml|yaml" scripts/validate-frontmatter.js
sed -n '1,260p' scripts/validate-frontmatter.js
else
echo "scripts/validate-frontmatter.js missing"
fiRepository: WorldFlowAI/everything-claude-code Length of output: 1957 Use one parser-safe frontmatter contract. The command descriptions include
📍 Affects 4 files
🤖 Prompt for AI AgentsSource: Coding guidelines |
||
| --- | ||
|
|
||
| # Checkpoint Command | ||
|
|
||
| Create or verify a checkpoint in your workflow. | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| # scripts/ | ||
|
|
||
| Cross-platform Node.js utilities used by hooks and slash commands. Rewritten | ||
| from shell scripts so they work identically on Windows, macOS, and Linux. | ||
|
|
||
| ## Structure | ||
|
|
||
| - `lib/` — shared utilities (`utils.js` for file/path/system helpers, | ||
| `package-manager.js` for package-manager detection). | ||
| - `hooks/` — hook implementations invoked from `hooks/hooks.json` | ||
| (`session-start.js`, `session-end.js`, `pre-compact.js`, | ||
| `suggest-compact.js`, `evaluate-session.js`). | ||
| - `setup-package-manager.js` — interactive/CLI package-manager setup, also | ||
| exposed as the `/setup-pm` command. | ||
| - `validate-frontmatter.js` — checks that `agents/*.md`, `commands/*.md`, | ||
| and `skills/**/SKILL.md` have the required frontmatter fields. Run before | ||
| committing new agents/commands/skills, and enforced in CI. | ||
|
|
||
| ## Conventions | ||
|
|
||
| - Node.js only, no OS-specific shell calls — that's the entire reason these | ||
| were rewritten from shell scripts. If you need a system operation, add it | ||
| to `lib/utils.js` rather than shelling out to a platform-specific command. | ||
| - Every new script under `lib/` or `hooks/` should have a matching | ||
| `*.test.js` under `tests/` and be added to the list in | ||
| `tests/run-all.js`. | ||
| - Package-manager selection always goes through | ||
| `lib/package-manager.js` — see the priority order documented in the root | ||
| [README.md](../README.md#package-manager-detection). Don't hardcode | ||
| `npm`/`pnpm`/`yarn`/`bun` elsewhere. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,96 @@ | ||
| #!/usr/bin/env node | ||
| /** | ||
| * Validate required YAML frontmatter across agents, commands, and skills. | ||
| * | ||
| * - agents/*.md -> requires: name, description, tools, model | ||
| * - commands/*.md -> requires: description | ||
| * - skills/**\/SKILL.md -> requires: name, description | ||
| * | ||
| * Usage: node scripts/validate-frontmatter.js | ||
| * Exits with code 1 if any file is missing a required field. | ||
| */ | ||
|
|
||
| const fs = require('fs'); | ||
| const path = require('path'); | ||
|
|
||
| const repoRoot = path.join(__dirname, '..'); | ||
|
|
||
| function listMarkdownFiles(dir) { | ||
| const results = []; | ||
| if (!fs.existsSync(dir)) return results; | ||
| for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { | ||
| const full = path.join(dir, entry.name); | ||
| if (entry.isDirectory()) { | ||
| results.push(...listMarkdownFiles(full)); | ||
| } else if (entry.isFile() && entry.name.endsWith('.md')) { | ||
| results.push(full); | ||
| } | ||
| } | ||
| return results; | ||
| } | ||
|
|
||
| function parseFrontmatter(filePath) { | ||
| const content = fs.readFileSync(filePath, 'utf8'); | ||
| const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/); | ||
| if (!match) return null; | ||
|
|
||
| const fields = {}; | ||
| for (const line of match[1].split(/\r?\n/)) { | ||
| const fieldMatch = line.match(/^([A-Za-z_-]+):/); | ||
| if (fieldMatch) fields[fieldMatch[1]] = true; | ||
|
Comment on lines
+37
to
+40
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win Reject empty or null required values. Lines 39-40 mark Suggested validation change- const fieldMatch = line.match(/^([A-Za-z_-]+):/);
- if (fieldMatch) fields[fieldMatch[1]] = true;
+ const fieldMatch = line.match(/^([A-Za-z_-]+):\s*(.*)$/);
+ const value = fieldMatch?.[2].trim();
+ if (fieldMatch && value && value !== 'null' && value !== '~') {
+ fields[fieldMatch[1]] = value;
+ }🤖 Prompt for AI Agents |
||
| } | ||
| return fields; | ||
| } | ||
|
|
||
| function checkFiles(files, requiredFields, label) { | ||
| const errors = []; | ||
| for (const file of files) { | ||
| const rel = path.relative(repoRoot, file); | ||
| const fields = parseFrontmatter(file); | ||
| if (!fields) { | ||
| errors.push(`${rel}: missing frontmatter block (---\\n...\\n---)`); | ||
| continue; | ||
| } | ||
| for (const field of requiredFields) { | ||
| if (!fields[field]) { | ||
| errors.push(`${rel}: missing required '${field}' in frontmatter`); | ||
| } | ||
| } | ||
| } | ||
| if (errors.length > 0) { | ||
| console.error(`\n${label}:`); | ||
| for (const e of errors) console.error(` ✗ ${e}`); | ||
| } else { | ||
| console.log(`✓ ${label}: all files OK (${files.length} checked)`); | ||
| } | ||
| return errors.length; | ||
| } | ||
|
|
||
| let totalErrors = 0; | ||
|
|
||
| totalErrors += checkFiles( | ||
| listMarkdownFiles(path.join(repoRoot, 'agents')), | ||
| ['name', 'description', 'tools', 'model'], | ||
| 'agents/*.md' | ||
| ); | ||
|
|
||
| totalErrors += checkFiles( | ||
| listMarkdownFiles(path.join(repoRoot, 'commands')), | ||
| ['description'], | ||
| 'commands/*.md' | ||
| ); | ||
|
|
||
| totalErrors += checkFiles( | ||
| listMarkdownFiles(path.join(repoRoot, 'skills')).filter( | ||
| (f) => path.basename(f) === 'SKILL.md' | ||
| ), | ||
| ['name', 'description'], | ||
| 'skills/**/SKILL.md' | ||
| ); | ||
|
|
||
| if (totalErrors > 0) { | ||
| console.error(`\n${totalErrors} frontmatter error(s) found.`); | ||
| process.exit(1); | ||
| } | ||
|
|
||
| console.log('\nAll frontmatter checks passed.'); | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
Repository: WorldFlowAI/everything-claude-code
Length of output: 1957
🌐 Web query:
WorldFlowAI/everything-claude-code .github/workflows/ci.yml actions/checkout pull_request💡 Result:
Everything Claude Code (often abbreviated as ECC) is a toolkit for Claude Code that provides agents, commands, skills, rules, and hooks designed to enhance AI-assisted development [1][2]. The project is primarily maintained at the GitHub repository affaan-m/everything-claude-code, which also operates under the short name ECC [2][3]. Regarding your query about.github/workflows/ci.yml, actions/checkout, and pull_request in this context: While the core project documentation focuses on installation via Claude Code plugins and manual configuration of agents, rules, and commands [1][4], repositories like these often include CI/CD pipelines to ensure the stability of the toolkit components [5]. If you are examining or setting up a CI/CD pipeline for this project (or a similar project), a standard.github/workflows/ci.yml file typically includes the actions/checkout action to pull the repository code and uses the pull_request trigger to run automated tests whenever changes are proposed [5][6]. For example, the project's documentation includes examples of E2E (End-to-End) CI/CD integration, which may be defined in files like.github/workflows/e2e.yml, utilizing standard GitHub Actions to install dependencies and execute tests [5][6]. To get started with the toolkit: 1. Installation: The recommended method is to install it as a Claude Code plugin [1][4]. - Add the marketplace: /plugin marketplace add affaan-m/everything-claude-code - Install the plugin: /plugin install everything-claude-code@everything-claude-code 2. Manual Installation: You can clone the repository and manually copy agents, rules, commands, and skills into your ~/.claude/ configuration directory if you require more granular control [1][4]. 3. Updates and Support: The project supports multiple languages (JavaScript, TypeScript, Python, etc.) [3] and provides updates via /plugin update [3]. Note: Be aware that there have been various repositories using the name "WorldFlowAI/everything-claude-code," but the primary, actively maintained development is found at affaan-m/everything-claude-code [1][2]. Ensure you are using the verified repository to avoid unofficial or unmaintained versions [2].
Citations:
🌐 Web query:
https://raw.githubusercontent.com/WorldFlowAI/everything-claude-code/main/.github/workflows/ci.yml💡 Result:
The URL provided points to a GitHub workflow configuration file (ci.yml) within the WorldFlowAI/everything-claude-code repository [1][2]. The WorldFlowAI/everything-claude-code repository is a toolkit for Claude Code, designed to enhance AI-assisted development through a collection of agents, commands, skills, rules, and hooks [1][3]. It is billed as a "complete collection of Claude Code configs" and includes production-ready configurations that have been evolved through extensive use in real-world product development [1][4]. Key details about the repository and its usage include: - Purpose: Provides structured components (agents, skills, commands, rules, hooks) to streamline development workflows, such as code generation, test-driven development, and automated reviews [5][3]. - Installation: Users can install it as a Claude Code plugin via the command line (e.g., /plugin marketplace add) or by manually copying the components into their local Claude configuration directories [1][3]. - Cross-Platform Compatibility: Scripts are implemented in Node.js to support Windows, macOS, and Linux, and the toolkit automatically detects and configures package managers like npm, pnpm, yarn, and bun [3]. The specific file you linked is part of the repository's continuous integration (CI) infrastructure, which automates testing and verification processes for these configurations [1][2].
Citations:
🏁 Script executed:
Repository: WorldFlowAI/everything-claude-code
Length of output: 1957
Disable checkout credential persistence for pull-request code.
Set
persist-credentials: falseonactions/checkout@v4. Declare only the permissions required by the job, such ascontents: read, before running repository-controlled code.🧰 Tools
🪛 zizmor (1.29.0)
[warning] 13-13: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false
(artipacked)
🤖 Prompt for AI Agents
Sources: MCP tools, Linters/SAST tools