Devkit-AI
CLAUDE.md2 starsChanged 5 months agoMITView on GitHub
This file is the developer-handoff for AI assistants working in this repository. It is not specific to any single runtime — the marketplace ships plugins for Claude Code, Cursor, and OpenCode from a single source tree, and the installer (npx devkit-ai) translates per-target. A multi-runtime plugin marketplace containing three plugins: typescript-rules, jsdoc-standards, and commit-commands. The marketplace ships an npx devkit-ai installer that copies the plugins into Claude Code, Cursor, or OpenCode at any of three scopes (project, project-local, user). The…
In this repositoryOne other file it gives its agents.
- AGENTS.mdAGENTS.md
The file
We split this CLAUDE.md into the rules it gives an agent
4 rules. About 0 are common, 3 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 76
Regenerate the landing page: after changing plugin metadata or components:
- Very specific: line 145
After editing marketplace.json or any plugin component, run scripts/build-marketplace.sh to refresh marketplace.html.
- Distinctive: line 191
Earn every pixel: If an element doesn't carry information or guide interaction, remove it.
- Distinctive: line 197
Warm, not sterile: Prefer warm neutrals over cool grays.
≈ “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
Project Notes
This file is the developer-handoff for AI assistants working in this repository.
It is not specific to any single runtime — the marketplace ships plugins for
Claude Code, Cursor, and OpenCode from a single source tree, and the
installer (npx devkit-ai) translates per-target.
Project Overview
A multi-runtime plugin marketplace containing three plugins:
typescript-rules, jsdoc-standards, and commit-commands. The marketplace
ships an npx devkit-ai installer that copies the plugins into Claude Code,
Cursor, or OpenCode at any of three scopes (project, project-local, user).
The marketplace is being extended so all three runtimes get the same
skill / command / hook surface.
The repo is mostly markdown, JSON configs, shell scripts, and a static HTML
landing page — but there is also a Node-based installer
(bin/install.mjs + src/installer/*.mjs, ESM, one runtime dep:
@clack/prompts). The build step for the landing page is a single bash script.
Repository Structure
.claude-plugin/marketplace.json— Marketplace manifest declaring all three plugins. The.claude-plugin/directory is Claude Code's conventional manifest path; the installer's source-of-truth is the JSON inside it, not the directory name.plugins/typescript-rules/— TypeScript conventions plugin (agent, command, skill, hooks)plugins/jsdoc-standards/— JSDoc documentation plugin (agent, command, skill, hooks)plugins/commit-commands/— Git workflow plugin (commands, agents, skill; no hooks).cursor/skills/— Cursor-readable symlinks to each plugin's skills (generated by the build script)package.json+bin/install.mjs+src/installer/*.mjs—devkit-ainpm package, an@clack/prompts-based installer that copies the plugins into Claude Code, Cursor, or OpenCode at any of three scopesmarketplace.html— Static landing page rendered to GitHub Pages, embeds plugin metadata viaconst PLUGINS = [...]scripts/build-marketplace.sh— Discovers components in each plugin, generates.cursor/skills/symlinks, and injects fresh JSON intomarketplace.html.github/workflows/deploy-pages.yml— Runs the build script and deploysmarketplace.htmlto Pages on every push.github/workflows/release-please.yml— Release-please +npm publishto the public npm registry
Each plugin follows the standard layout:
plugins/<plugin>/
.claude-plugin/plugin.json
agents/*.md (optional)
commands/*.md (optional)
hooks/hooks.json (optional, with hooks/scripts/*.sh)
skills/<name>/SKILL.md (optional, with skills/<name>/references/*.md)How to Test Locally
The marketplace is a collection of plugins, not a single plugin — there is
no Devkit-AI plugin to load directly. Two options:
Test the marketplace via Claude Code:
/plugin marketplace add /absolute/path/to/this/repo
/plugin install typescript-rules@pau-vega-Devkit-AIThen run /reload-plugins to load without restarting.
Test the installer locally:
node bin/install.mjs --dry-run # print what would be written
node bin/install.mjs --version # print the package version
node bin/install.mjs --help # print usageTo exercise the OpenCode target specifically, run the installer with
opencode selected and inspect .opencode/agents/<name>.md — the model: sonnet
line should be absent and mode: subagent should be present.
Regenerate the landing page after changing plugin metadata or components:
bash scripts/build-marketplace.shThere are no lint or test commands. Validation is done by loading the plugin in Claude Code and exercising the hooks, command, and agent, or by running the installer against a scratch directory.
Architecture
The convention plugins (typescript-rules, jsdoc-standards) enforce their
rules through three layers (commit-commands is workflow-only: commands +
agents + a skill, no hooks):
- Hooks (real-time) —
<plugin>/hooks/hooks.jsonregisters PreToolUse hooks that fire on Bash, Write, and Edit tool calls. Shell scripts do pattern matching (e.g., grep forany,enum). Prompt-based hooks validate proposed code via the assistant. Available for Claude Code (and Cursor, with a different schema); OpenCode does not consumehooks.json. - Command + Agent (on-demand) —
<plugin>/commands/*.mddispatches an agent that loads the conventions skill, discovers target files, and produces a structured report with Error/Warning/Suggestion severity levels. Available for Claude Code and OpenCode; Cursor has no portable agent format. - Skill (reference) — Passive skills that the assistant consults when writing or reviewing code in any project that has the plugin installed.
The installer (bin/install.mjs) layers a fourth axis on top: per-runtime
target-root resolution in src/installer/targets.mjs (Claude Code, Cursor,
OpenCode × project, project-local, user), @clack/prompts-driven flow in
src/installer/prompts.mjs, per-file conflict handling in
src/installer/conflicts.mjs, per-target content translation in
src/installer/translator.mjs, and src/installer/gitignore.mjs for the
project-local delimited block in .gitignore. Cursor agents and OpenCode
hooks are documented skip rules — see the README's "Known limitations" section.
Key Conventions When Editing This Plugin
- Hook scripts read tool input from stdin as JSON (
INPUT=$(cat)) and usejqto extract fields. - Hook scripts block by printing a reason to stderr and exiting with code 2, or exit 0 silently to allow.
- Prompt-based hooks (inline
"type": "prompt"inhooks.json) validate file content against rules and respond withapproveordeny. ${CLAUDE_PLUGIN_ROOT}is the variable Claude Code injects inhooks.jsonand agent files to reference the plugin's root directory. OpenCode has no equivalent —src/installer/translator.mjsrewrites body references to relative..paths at install time.- Agent
model: sonnetis Claude Code's default. OpenCode'smodelfield requires a provider-qualified ID, so the translator drops the line for OpenCode targets; the agent then inherits the user'sopencode.jsonmodel (any provider). - Agents use
model: sonnet(Claude Code format) and have access toRead,Glob,Grep, andBashtools only. - Slash commands dispatching subagents use
allowed-tools: [Agent](the canonical Claude Code subagent tool name). - Command hooks honor a per-project settings file
(
.claude/<plugin>.local.md, YAML frontmatter) read at invocation time byhooks/scripts/settings-lib.sh(one copy per hook-bearing plugin, kept identical).enabled: falsedisables all of a plugin's command hooks;<rule_key>: falsedisables one rule. Missing file or key means enabled. The prompt-based hook in typescript-rules cannot read project files and ignores the settings file. - Installer source files are ESM
.mjsand import with explicit.mjsextensions; the package has"type": "module". The sole runtime dep is@clack/prompts— do not add others without a reason. - After editing
marketplace.jsonor any plugin component, runscripts/build-marketplace.shto refreshmarketplace.html. - The top-level
versionfield and every plugin'sversionfield in.claude-plugin/marketplace.json, plus each plugin's.claude-plugin/plugin.jsonversion, are bumped automatically by release-please on every release, in lockstep withpackage.json. See theextra-filesconfig in.github/release-please-config.json.
Design Context
Users
Developers curious about or adopting AI coding assistants — Claude Code, Cursor, or OpenCode — who stumble on this marketplace via GitHub, a blog post, or a referral. They arrive already technical: they understand what agents, hooks, and skills are. The job to be done is quick evaluation: "Is this plugin worth installing?" The interface should answer that question with minimal friction, then get out of the way.
Brand Personality
Calm and trustworthy. This is a personal portfolio that signals craft and reliability — not a flashy product page. Voice is direct and precise. The work earns trust through consistency, not persuasion.
Three words: reliable, precise, unassuming
Aesthetic Direction
- Warm dark neutrals as the foundation —
#0f0e0cbackground, not cool steel gray. The warmth signals care, not just efficiency. - Violet accent (
#7c6aef) for interactive elements — distinct without being aggressive. - Space Grotesk for headings (technical yet slightly geometric), system UI for body, monospace for code.
- Minimal cards — no border at rest, border reveals on hover/focus. Visual noise only earns its place on interaction.
- Light mode is a first-class alternative (not an afterthought), using
[data-theme="light"]CSS variables. - Anti-references: no heavy glows, no gradients on cards, no external decorative imagery, no overstyled hero sections.
Design Principles
- Let the content lead. The plugins are the point. The UI frames and clarifies — it never competes.
- Earn every pixel. If an element doesn't carry information or guide interaction, remove it. Restraint is a feature.
- Consistent over clever. Predictable spacing, transition timing, and color usage build the sense of a well-maintained tool.
- Accessible by default. Target WCAG 2.1 AA. Focus rings, ARIA roles, reduced motion, and sufficient contrast are not optional.
- Warm, not sterile. Prefer warm neutrals over cool grays. The palette should feel hand-picked, not auto-generated.
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.

