Repository navigation
feat: a Claude Code plugin, and the /ai-agents page - #207
Merged
Merged
Conversation
agent/claude-code, listed by .claude-plugin/marketplace.json, starts the project's own oxlint --lsp as a language server, and checks the files Claude edited before it finishes: PostToolUse records each edit, Stop lints them with the project's oxlint and sends Claude back once with the tailwindcss(...) errors. It bundles the agent skill. The /ai-agents page (EN/ES) documents it with the skill.
sergioazoc
force-pushed
the
feat/claude-code-plugin
branch
from
September 26, 2026 16:46
e79d070 to
ca74455
Compare
Expected paths are resolve()d, as the code resolves them onto the current drive, and the LSP test shuts the server down as a client does (shutdown, then exit), so oxlint doesn't outlive the killed wrapper and hold the project directory.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of the 1.14.0 roadmap (7.3 and 7.4). Stacked on #206, because the plugin bundles the agent skill.
The plugin (
agent/claude-code, listed by.claude-plugin/marketplace.json).lsp.jsonstarts the project's ownoxlint --lspthroughscripts/oxlint-lsp.mjs, which findsnode_modules/.bin/oxlintfrom the project root upward. I checked empirically that oxlint 1.85's server runs JS plugins. It pushespublishDiagnostics(it has no pull endpoint), design-system rules included, and needs no settings.hooks/hooks.json:Edit|Write|MultiEdit) records each lintable file.tailwindcss(...)reports errors, the hook exits 2 with the list on stderr, which Claude Code feeds back to Claude.stop_hook_active), and does nothing when the project has no oxlint.generatewrites.claude plugin validate . --strictandclaude plugin validate ./agent/claude-code --strictboth pass.Docs
/ai-agents(EN/ES), covering the skill, the plugin and anything else agents can use. It is not/agents:packages/docs/AGENTS.mdis a symlink, and on a case-insensitive file systemagents.mdis that file. The manifest test pins this.plugin.jsonwith the package, and regenerate the bench results.Tests
tests/agent/stop-lint-lib.test.tscovers:tests/agent/claude-plugin-manifest.test.tscovers the marketplace entry, and that the hook and LSP scripts exist. It also checks that the LSP covers every file oxlint lints, thatversionequals the package's, and that the bundled skill is identical to the published one.tests/e2e/agent-stop-hook.test.tsruns the real hooks through their stdin/exit-code contract against a temporary project with its own oxlint shim.tests/e2e/oxlint-lsp.test.tsuses real JSON-RPC through the wrapper and checks that theno-unknown-classesdiagnostic is published.es-paritynow treats absolute links to the site's/es/pages as twins of the English ones.bench/lib(from docs: /benchmark and /comparison, generated from a scored bench #205) are fixed.🤖 Generated with Claude Code
https://claude.ai/code/session_01RUT7rPMjxs3XUap9hf51ay