ai-builder-kit
CLAUDE.md1 starsChanged 2 months agoApache-2.0View on GitHub
Claude Code reads it as CLAUDE.md; AGENTS.md is a symlink to it for Codex and others. A collection of skills, plugins, and hooks for AI coding agents, distributed three ways from the same skills/ folder: npx skills add jackzhaojin/ai-builder-kit (any agent), the Claude Code plugin marketplace (.claude-plugin/marketplace.json), and the Codex plugin marketplace (.agents/plugins/marketplace.json plus the portable plugin.json). SKILL.md frontmatter fields: name (slug), description (trigger phrases + when-to-use), optionally context: fork and disable-model-invocation: true. Claude Code dereferences a symlink that points…
- Reads credentials
- Installs packages
In this repository11 other files it gives its agents.
- ai-knowledge-harvesterSkill
- branded-pptxSkill
- chat-conversation-loggerSkill
- competing-pr-triageSkill
- conversation-loggerSkill
- drawioSkill
- excalidrawSkill
- hlx-admin-api-executorSkill
- jack-git-commitSkill
- playwright-demo-videoSkill
- podcast-slides-videoSkill
The file
We split this CLAUDE.md into the rules it gives an agent
5 rules. About 0 are common, 1 is distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 101
Commit in Conventional Commits format with provenance footers (the jack-git-commit skill), then push.
- Very specific: line 107
Keep SKILL.md body under 500 lines.
- Very specific: line 112
Do not add version to skill entries in .claude-plugin/marketplace.json: with no version, Claude Code keys updates on the commit SHA, so …
- Very specific: line 116
Keep skills Codex-compatible: only name and description in frontmatter are portable, Codex ignores Claude-only keys such as allowed-tools …
- Distinctive: line 119
Commit and push finished work without asking.
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
CLAUDE.md
This file provides guidance to AI coding agents working in this repository. Claude Code reads it as CLAUDE.md; AGENTS.md is a symlink to it for Codex and others.
What This Repo Is
A collection of skills, plugins, and hooks for AI coding agents, distributed three ways from the same skills/ folder: npx skills add jackzhaojin/ai-builder-kit (any agent), the Claude Code plugin marketplace (.claude-plugin/marketplace.json), and the Codex plugin marketplace (.agents/plugins/marketplace.json plus the portable plugin.json).
Architecture
Skills vs Plugins
- Skills (
skills/): Standalone SKILL.md + optional scripts/references/assets. Self-contained, single-purpose. Installed individually. - Plugins (
plugins/): Bundle a skill + hooks (e.g., PreToolUse guardrails). Have.claude-plugin/plugin.jsonmetadata. Installed as a unit.
Key Directories
| Path | Purpose |
skills/ | Standalone skills (each has SKILL.md) |
plugins/ | Bundled skill + hook packages |
.claude-plugin/marketplace.json | Claude Code marketplace: one entry per skill (source: ./skills/<name>, strict: false), the ai-builder-kit bundle (source: ./), and the hook plugins |
.agents/plugins/marketplace.json | Codex marketplace: the ai-builder-kit bundle pointing at the repo root |
plugin.json | The bundle's manifest in the portable Agent Plugins format, with Codex's display fields under extensions.com.openai. Codex reads this one first (per the Codex plugin docs, checked 2026-10-25); Claude Code ignores it |
.codex-plugin/plugin.json | Codex's older manifest location, still read as a fallback. Keep name, version and description in sync with plugin.json (the check script enforces it) |
scripts/check-repo.mjs | Convention checks claude plugin validate does not cover (README rows, marketplace entries, frontmatter, symlinks, version bumps, manifest sync) |
.github/workflows/validate.yml | CI: check-repo, the Claude Code validator and ShellCheck on every push to main and every PR |
local-only/ | Local testing/scratch (gitignored) |
local-ai-docs/ | Private AI prompt logs (gitignored) |
Skill Structure
skill-name/
├── SKILL.md # Required. YAML frontmatter (name, description) + markdown body
├── scripts/ # Executable code (Python/Bash)
├── references/ # Deep-dive docs loaded on-demand
└── assets/ # Templates, files used in outputSKILL.md frontmatter fields: name (slug), description (trigger phrases + when-to-use), optionally context: fork and disable-model-invocation: true.
Plugin Structure
plugin-name/
├── .claude-plugin/plugin.json # Metadata (name, version, author). Version is required
├── hooks/hooks.json # Hook registration, exec form: "command": "bash", "args": ["${CLAUDE_PLUGIN_ROOT}/hooks/x.sh"]
├── hooks/*.sh # Hook implementations (executable)
└── skills/<name> -> ../../../skills/<name> # Symlink to the canonical skill, never a copyClaude Code dereferences a symlink that points elsewhere in the marketplace when it installs from GitHub, so the cached plugin is self-contained (verified 2026-10-25 against a git-hosted install). A local-path marketplace skips such links, so test hook plugins with claude --plugin-dir plugins/<name>, which follows them in place.
The symlink means a change to the skill does not touch the plugin folder, so the folder's commit SHA does not move. That is why hook plugins pin version in their plugin.json (and only there, not in the marketplace entry): bump it whenever the hook or a linked skill changes. node scripts/check-repo.mjs --base <ref> fails when you forget, and CI runs it against the previous commit.
Development
Testing a skill locally
Claude Code does not load skills/ from a repo root, only .claude/skills/. To try a skill while editing it, symlink it into the target project: .claude/skills/<name> for Claude Code, .agents/skills/<name> for Codex and OpenCode. Do not npx skills add a local path over an existing GitHub install of the same skill; the lock file would then point at the clone instead of GitHub.
Testing a plugin locally
Enable in .claude/settings.local.json:
{
"enabledPlugins": {
"plugin-name@ai-builder-kit": true
}
}Installing skills from this repo
npx skills add jackzhaojin/ai-builder-kit --list # List available
npx skills add jackzhaojin/ai-builder-kit --skill <name> # Install oneTesting branded-pptx
Requires uv (the script's inline metadata pulls Python 3.12+ and defusedxml) and the anthropic pptx skill installed globally. Test templates go in local-only/ (gitignored):
uv run skills/branded-pptx/scripts/analyze_template.py \
local-only/test/template.pptx --output-dir local-only/test/runs --run-idEach run creates a timestamped folder with manifests, template copy, and output/ for generated .pptx/.pdf.
Testing playwright-demo-video
Requires ffmpeg/ffprobe (brew install ffmpeg), Node.js 18+, and a target web project with Playwright installed. Voiceover needs ELEVENLABS_API_KEY. Pipeline scripts are zero-dependency Node (node --check skills/playwright-demo-video/scripts/*.mjs to syntax-check). Demo output goes in the target project, not this repo.
Release checklist
- Edit the skill. Keep
SKILL.mdunder 500 lines; move detail toreferences/. - Validate:
node scripts/check-repo.mjs,claude plugin validate skills --strictandclaude plugin validate .claude-plugin/marketplace.json --strict. Codex has no validator CLI; check-repo confirms the Codex and portable manifests agree. CI runs all of this plus ShellCheck. - New skill: add a README.md row (alphabetical, with the Last Modified date) and a
.claude-plugin/marketplace.jsonentry (copy an existing skill entry, noversion). Changed skill: bump its Last Modified date, and if a hook plugin symlinks it, bump that plugin'sversion. - Commit in Conventional Commits format with provenance footers (the
jack-git-commitskill), then push. This repo is public, so read the diff first. - Consumers get it on their next update (see "Keeping it up to date" in README.md). Jack's laptop: run the
update-skillsskill or../jack-dev-server-configs/local/update-skills.sh.
Conventions
- SKILL.md descriptions must include trigger phrases ("Use when the user says...")
- Keep SKILL.md body under 500 lines; split detail into
references/files - Edge cases go in situation → action tables, not prose
- Safety rules in bold with "Never..." prefix
- Skills that depend on other skills declare it in SKILL.md description and body (no formal dependency mechanism exists yet)
- Adding a skill: create
skills/<name>/SKILL.md, add a README.md table row (with Last Modified date), and add a marketplace entry to.claude-plugin/marketplace.json(copy an existing skill entry). The Codex bundle picks it up automatically. - Do not add
versionto skill entries in.claude-plugin/marketplace.json: with no version, Claude Code keys updates on the commit SHA, so every push to main reaches users on/plugin update - Validate before committing:
node scripts/check-repo.mjs,claude plugin validate .claude-plugin/marketplace.json --strictandclaude plugin validate skills --strict - Share files with symlinks, never copies, and keep the Claude-side path canonical:
skills/<name>is the real folder, hook plugins link to it, andAGENTS.mdis a symlink toCLAUDE.md - Hook commands use exec form (
"command": "bash", "args": [...]) so a path with spaces cannot split; the validator warns on unquoted${CLAUDE_PLUGIN_ROOT} - Keep skills Codex-compatible: only
nameanddescriptionin frontmatter are portable, Codex ignores Claude-only keys such asallowed-toolsandcontext, and the SKILL.md body should not depend on Claude-only tools without a plain-shell fallback - Python scripts in skills carry PEP 723 inline metadata (
# /// scriptblock) and run withuv run <script>; never create or commit a.venv,node_modulesorpyproject.tomlinside a skill folder. OpenCode scans every nestedSKILL.md, and a Playwright venv once leaked three skills - Pin CDN imports in render templates (see
skills/excalidraw/scripts/render_template.html); an unpinned "latest" broke rendering on 2026-09-13 - Commit and push finished work without asking. This repo is public, so read the diff for secrets and personal data first. Never force-push
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

