By BoundaryML
Teaches Claude Code to write idiomatic BAML. Ships five skills: `core` (install, syntax, stdlib, agent loop, JSON + match + errors — always load first), `llm-functions` (clients, prompts, structured output, `client:` colon syntax), `pipelines` (composing typed LLM stages, match routing, error propagation), `testing` (testset blocks, cached JSON fixtures via `baml.json.from_string`), `bridges` (the `baml_sdk` Python client, `generator` blocks, shell bridges). All content aligned to the canonical BAML agent guide.
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
Use when calling BAML from host code, or when BAML needs a host capability it lacks (DBs, sockets, crypto). Today's supported host is Python via `baml generate` -> the `baml_sdk` package (NOT the older `baml_client` name). Covers the `generator target { ... }` block (in a `.baml` file, NOT TOML), the generated `b.<function>` API, and the host-bridge pattern (BAML shells out to a thin Python entrypoint via `baml.sys.shell`). Other host languages exist upstream but should not be assumed in this repo. Prerequisite: baml:core.
Foundation knowledge for writing BAML. ALWAYS load this first when working in .baml files, when the user asks how to install / use BAML, or when answering any BAML question. Covers install, project layout with `ns_*` namespaces, the `baml run / describe / fmt / generate` agent loop, syntax essentials (classes with `: Type,` fields, snake_case functions, type aliases ending in `;`), stdlib (Collections/Strings, JSON via `baml.json.*`, files/HTTP/shell/env via `baml.fs/http/sys/env`), `match` + typed `throws / catch`, and common pitfalls. BAML is a general-purpose typed language with LLM-function support — not just a prompt DSL. Load the other baml:* skills only as the task demands.
Use when defining or editing a BAML LLM function — any `function X(...) -> T { client: ... prompt #"..."# }` declaration. Covers the `client<llm>` block (UpperCamelCase) with `provider` + `options`, the inline `client:` (colon) binding in the function body, the `client: "provider/model"` shorthand, Jinja prompts with `{{ ctx.output_format }}`, and structured output via the return type. Prerequisite: baml:core.
Use when composing multiple BAML functions into a typed pipeline — `let stage1 = ...; let stage2 = ...; Result { ... }`. Covers function-to-function composition with typed values flowing between stages, dispatch via `match` on enums / literal unions / `let <name>: <Type> =>` bindings, error propagation with `throws T` / `catch (e) { T => ... }` type-only arms, and fan-out patterns (sequential in BAML, parallel via host). Prerequisite: baml:core. Often paired with baml:llm-functions.
Use when writing or running BAML tests. Covers `testset` / `test` blocks with `let` bindings + `assert.equal` / `assert.*`, running tests with `baml test --list / -i / -e`, decoding cached LLM replies and fixtures via `baml.json.from_string<T>(raw)` (NOT a `$parse` companion — that pattern is deprecated), and nested testsets for grouping. Prerequisite: baml:core. Pair with baml:llm-functions or baml:pipelines if the function under test calls an LLM.
Five Claude Code skills that teach the agent to write idiomatic BAML. They auto-trigger when Claude opens a .baml file or is asked "how do I install / use BAML?".
BAML is a typed language for reliable LLM functions, structured output, and small orchestration programs. Without these skills, agents tend to invent stdlib methods (baml.json.decode_str, s.contains()), forget {{ ctx.output_format }} on prompts, and waste turns probing for things that don't exist. With them, they reach for baml.json.from_string<T>, snake_case function names, and client: "openai/gpt-4o-mini" on the first try.
/plugin marketplace add BoundaryML/baml-skill
/plugin install baml@boundaryml-baml
All five skills land together. They auto-load in any Claude Code session.
| Skill | When it loads |
|---|---|
baml:core | Always — any .baml file or BAML question. Install, project layout with ns_* namespaces, the baml run / describe / fmt / generate agent loop, syntax essentials (class fields name: Type,, snake_case functions, type aliases ending in ;), stdlib (Collections/Strings, JSON via baml.json.*, files/HTTP/shell/env), match + typed throws / catch, common pitfalls. |
baml:llm-functions | When defining function ... -> T { client: ... prompt #"..."# }. client<llm> declarations (UpperCamelCase, provider + options), the client: "provider/model" shorthand, Jinja prompts with {{ ctx.output_format }}, structured output. |
baml:pipelines | When composing multiple BAML functions. Function-to-function composition, routing via match (with let s: T => narrowing), error propagation through throws T, host-side fan-out. |
baml:testing | When writing or running testset / test blocks. Deterministic LLM tests via cached JSON fixtures + baml.json.from_string<T>(raw). (NOT a $parse companion — that pattern is deprecated.) |
baml:bridges | When integrating with host code or reaching for a host capability. Today's supported host is Python via baml generate -> the baml_sdk package. Covers the generator target { ... } block (in a .baml file, not TOML), the b.<function> API, and the BAML -> shell bridge pattern. |
core is the entry point. Claude is told to load it first when it sees a BAML task, then optionally pull in any of the other four based on what the task actually requires.
baml-skill/
├── .claude-plugin/
│ └── marketplace.json # marketplace catalog (one plugin: baml at ./plugins/baml)
├── README.md # this file
└── plugins/baml/
├── .claude-plugin/plugin.json # plugin manifest
└── skills/
├── core/SKILL.md # foundation; always-load
├── llm-functions/SKILL.md # function ... { client: ... prompt #"..."# }
├── pipelines/SKILL.md # composing typed LLM stages
├── testing/SKILL.md # testset blocks + cached JSON fixtures
└── bridges/SKILL.md # baml_sdk Python client + shell bridges
# Symlink the work-in-progress copy into your global skills dir for fast iteration.
for s in core llm-functions pipelines testing bridges; do
ln -sf "$PWD/plugins/baml/skills/$s" ~/.claude/skills/baml-$s-dev
done
# Edit any plugins/baml/skills/<name>/SKILL.md
# Restart your Claude Code session; skills auto-reload.
When happy, bump version in plugins/baml/.claude-plugin/plugin.json and commit.
The skill content tracks the BAML team's canonical agent guide: https://gist.github.com/hellovai/4abc7de0ca4a3f4a07b5b3e6b4e0f77e
If the gist updates, sync the affected skill files and bump version in .claude-plugin/plugin.json.
Apache-2.0.
npx claudepluginhub boundaryml/baml-skill --plugin bamlComprehensive skill pack with 66 specialized skills for full-stack developers: 12 language experts (Python, TypeScript, Go, Rust, C++, Swift, Kotlin, C#, PHP, Java, SQL, JavaScript), 10 backend frameworks, 6 frontend/mobile, plus infrastructure, DevOps, security, and testing. Features progressive disclosure architecture for 50% faster loading.
Complete collection of battle-tested Claude Code configs from an Anthropic hackathon winner - agents, skills, hooks, and rules evolved over 10+ months of intensive daily use
Tools to maintain and improve CLAUDE.md files - audit quality, capture session learnings, and keep project memory current.
Develop, test, build, and deploy Godot 4.x games with Claude Code. Includes GdUnit4 testing, web/desktop exports, CI/CD pipelines, and deployment to Vercel/GitHub Pages/itch.io.
A growing collection of Claude-compatible academic workflow bundles. Covers scientific figures, manuscript writing and polishing, reviewer assessment, citation retrieval, data availability, paper reading, literature search, response letters, paper-to-PPTX conversion, and evidence-grounded Chinese invention patent drafting. Rules are organized as reusable skill folders with explicit workflows and quality checks.
Create new skills, improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, update or optimize an existing skill, run evals to test a skill, or benchmark skill performance with variance analysis.