Metabase Development Guide
Skills
For detailed guidance on writing and reviewing code and documentation, see the skills in .claude/skills/:
Clojure
clojure-mcp tools
- clojure-eval - Always use this to evaluate Clojure code, run tests, and verify edits/compile. Prefer this over shell commands.
- clojure-write - Clojure/ClojureScript development with REPL-driven workflow and coding conventions
- clojure-review - Clojure/ClojureScript code review guidelines and style enforcement
clojure-mcp-lite tools
- clj-nrepl-eval - This is another good mechanism for running Clojure code on an nrepl server.
TypeScript
- typescript-write - TypeScript/JavaScript development and best practices
- typescript-review - TypeScript/JavaScript code review guidelines
Documentation
- docs-write - Documentation writing with Metabase style guide
- docs-review - Documentation review checklist
Serialization
- serdes-workflow - Export, validate, and import Metabase content via serdes
- serdes-yaml-edit - Edit exported YAML files with correct portable references
Frontend
- analytics-events - Add product analytics events to track user interactions
Important: When working with frontend code, read frontend/CLAUDE.md for project-specific guidelines on component preferences, styling, TypeScript migration, testing requirements, and available scripts.
Running Backend Tests
If you do not have clojure-eval available to you or clj-nrepl-eval, do not fall back to clj -X:dev:test directly. Instead, use ./bin/test-agent. It produces clean, plain-text output with no progress bars or ANSI codes.
./bin/test-agent :only '[metabase.foo-test]' # run a namespace
./bin/test-agent :only '[metabase.foo-test/some-test]' # run a single test
./bin/test-agent :only '[metabase.foo-test metabase.bar-test]' # multiple namespaces
Once again, do not use clj -X:dev:test directly — its progress-bar output is hard to parse.
Tool Preferences
If clojure-mcp tools are available, prefer them over shell-based alternatives for Clojure development.
