Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .env.example
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
23 changes: 23 additions & 0 deletions .github/workflows/ci.yml
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

Copy link
Copy Markdown

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:

#!/bin/bash
set -eu

printf '%s\n' '--- workflow files ---'
git ls-files '.github/workflows/*'

printf '%s\n' '--- ci.yml ---'
cat -n .github/workflows/ci.yml

printf '%s\n' '--- checkout, permissions, and event references ---'
rg -n -C 3 'actions/checkout|persist-credentials|permissions:|pull_request|pull_request_target|GITHUB_TOKEN|github\.token' .github/workflows .github 2>/dev/null || true

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:

#!/bin/bash
set -eu

url='https://api.github.com/repos/WorldFlowAI/everything-claude-code/contents/.github/workflows/ci.yml'
curl -fsSL "$url" |
  python3 -c 'import json,sys,base64; d=json.load(sys.stdin); print(base64.b64decode(d["content"]).decode())'

Repository: WorldFlowAI/everything-claude-code

Length of output: 1957


Disable checkout credential persistence for pull-request code.

Set persist-credentials: false on actions/checkout@v4. Declare only the permissions required by the job, such as contents: 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
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml at line 13, Update the actions/checkout@v4 step to
set persist-credentials: false, and declare the job or workflow permissions
explicitly with only the required contents: read access before executing
repository-controlled code.

Sources: MCP tools, Linters/SAST tools


- 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
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
20

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | 💤 Low value

🧩 Analysis chain

🌐 Web query:

Node.js release schedule support Node 20 end of life April 2026

💡 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 .nvmrc to a supported even-numbered LTS line, such as Node.js 22, before running CI.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.nvmrc at line 1, Update the Node.js version specified in .nvmrc from 20 to
a supported even-numbered LTS release, preferably 22, so CI uses a maintained
runtime.

Source: MCP tools

43 changes: 43 additions & 0 deletions CLAUDE.md
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).
4 changes: 4 additions & 0 deletions commands/build-fix.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
description: Incrementally fix TypeScript and build errors by parsing build output, grouping by file, and applying fixes one at a time with context.
---

# Build and Fix

Incrementally fix TypeScript and build errors:
Expand Down
4 changes: 4 additions & 0 deletions commands/checkpoint.md
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].

Copy link
Copy Markdown

Choose a reason for hiding this comment

The 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))
PY

Repository: 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))
PY

Repository: 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"
fi

Repository: WorldFlowAI/everything-claude-code

Length of output: 1957


Use one parser-safe frontmatter contract.

The command descriptions include Usage: in unquoted YAML scalars, which YAML parsers can read as a nested object instead of a description string. Quote the full description value in each command file and make the frontmatter validator parse YAML before checking values, not only field names.

  • Quote description in commands/checkpoint.md, commands/eval.md, and commands/orchestrate.md.
  • Update scripts/validate-frontmatter.js and the CLAUDE.md reference so bad YAML is caught before commit.
📍 Affects 4 files
  • commands/checkpoint.md#L2-L2 (this comment)
  • commands/eval.md#L2-L2
  • commands/orchestrate.md#L2-L2
  • CLAUDE.md#L24-L25
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@commands/checkpoint.md` at line 2, Use a parser-safe frontmatter contract:
quote the full description value in commands/checkpoint.md:2,
commands/eval.md:2, and commands/orchestrate.md:2. Update
scripts/validate-frontmatter.js to parse YAML before validating field values so
malformed YAML is rejected, and update the CLAUDE.md reference at lines 24-25 to
document or invoke this validation before commits.

Source: Coding guidelines

---

# Checkpoint Command

Create or verify a checkpoint in your workflow.
Expand Down
4 changes: 4 additions & 0 deletions commands/code-review.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
description: Comprehensive security and quality review of uncommitted changes, covering credentials, injection, XSS, input validation, and insecure dependencies.
---

# Code Review

Comprehensive security and quality review of uncommitted changes:
Expand Down
4 changes: 4 additions & 0 deletions commands/eval.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
description: Manage eval-driven development workflow - define, check, and report on capability/regression evals. Usage: /eval [define|check|report|list] [feature-name].
---

# Eval Command

Manage eval-driven development workflow.
Expand Down
4 changes: 4 additions & 0 deletions commands/learn.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
description: Analyze the current session and extract reusable patterns worth saving as a new skill. Run after solving a non-trivial problem.
---

# /learn - Extract Reusable Patterns

Analyze the current session and extract any patterns worth saving as skills.
Expand Down
4 changes: 4 additions & 0 deletions commands/orchestrate.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
description: Run a sequential multi-agent workflow (e.g. planner -> tdd-guide -> code-reviewer -> security-reviewer) for complex tasks. Usage: /orchestrate [workflow-type] [task-description].
---

# Orchestrate Command

Sequential agent workflow for complex tasks.
Expand Down
4 changes: 4 additions & 0 deletions commands/refactor-clean.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
description: Safely identify and remove dead code using knip, depcheck, and ts-prune, with a categorized report and test verification before deletion.
---

# Refactor Clean

Safely identify and remove dead code with test verification:
Expand Down
4 changes: 4 additions & 0 deletions commands/test-coverage.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
description: Analyze test coverage, identify files below the 80% threshold, and generate missing unit, integration, and E2E tests.
---

# Test Coverage

Analyze test coverage and generate missing tests:
Expand Down
4 changes: 4 additions & 0 deletions commands/update-codemaps.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
description: Scan the codebase and regenerate token-lean architecture codemaps (architecture, backend, frontend, data), gated on diff percentage and user approval.
---

# Update Codemaps

Analyze the codebase structure and update architecture documentation:
Expand Down
4 changes: 4 additions & 0 deletions commands/update-docs.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
description: Sync generated documentation (script reference, env vars, CONTRIB.md) from source-of-truth files like package.json and .env.example.
---

# Update Documentation

Sync documentation from source-of-truth:
Expand Down
4 changes: 4 additions & 0 deletions commands/verify.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
description: Run comprehensive verification (build, type check, lint, tests) on the current codebase state before continuing or opening a PR.
---

# Verification Command

Run comprehensive verification on current codebase state.
Expand Down
30 changes: 30 additions & 0 deletions scripts/AGENTS.md
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.
96 changes: 96 additions & 0 deletions scripts/validate-frontmatter.js
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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The 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 description:, name:, tools:, or model: null as present. The validator can then report success while Claude Code cannot discover or use the metadata. Parse the YAML values and require non-empty values for required fields. Add regression cases for blank, null, and empty-string values.

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
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/validate-frontmatter.js` around lines 37 - 40, Update the frontmatter
field parsing in the validation logic around the fields object so required
metadata fields are considered present only when their YAML values are
non-empty, rejecting blank values, null, and empty strings for description,
name, tools, and model. Add regression cases covering each of these invalid
value forms while preserving valid metadata handling.

}
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.');
5 changes: 5 additions & 0 deletions skills/eval-harness/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
---
name: eval-harness
description: Use this skill when defining success criteria before implementation, tracking regressions across changes, or measuring reliability with pass@k metrics. Implements eval-driven development (EDD) with capability and regression evals.
---

# Eval Harness Skill

A formal evaluation framework for Claude Code sessions, implementing eval-driven development (EDD) principles.
Expand Down
5 changes: 5 additions & 0 deletions skills/project-guidelines-example/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
---
name: project-guidelines-example
description: Example project-specific skill template covering architecture overview, file structure, code patterns, testing requirements, and deployment workflow. Copy and adapt this as a starting point for your own project's guidelines skill.
---

# Project Guidelines Skill (Example)

This is an example of a project-specific skill. Use this as a template for your own projects.
Expand Down
5 changes: 5 additions & 0 deletions skills/verification-loop/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
---
name: verification-loop
description: Use this skill after completing a feature or significant code change, before creating a PR, or after refactoring. Runs build, type-check, lint, and test verification phases to ensure quality gates pass.
---

# Verification Loop Skill

A comprehensive verification system for Claude Code sessions.
Expand Down