A collection of Claude Code plugins for enhanced productivity and workflow automation.
Add this marketplace to your Claude Code installation:
/plugin marketplace add bromanko/llm-agents/plugin marketplace add /path/to/this/repoTools and commands for working with Jujutsu (jj) version control.
Context tip: Always use
--color=never(or--gitfor diffs) when running jj commands via Bash. ANSI escape codes waste 2-3x the tokens.
Commands:
/jj:commit- Analyze jj status and create logical commits with descriptive messages/jj:workspace-cleanup- Clean up empty jujutsu workspaces
Configuration:
- Global:
~/.pi/agent/jj-commit.json - Project:
.pi/jj-commit.json - Project config overrides global config
Example:
{
"model": "dbx-bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0"
}The configured provider/id must match the exact model shown by pi's model selector.
Hooks:
- Blocks mutating git commands in jujutsu repositories, guiding you to jj equivalents
Installation:
/plugin install jj@bromanko-llm-agentsAI-assisted Git commit workflow with optional hunk-level split commits.
Commands:
/git-commit- Analyze Git changes, propose commit messages, and split mixed changes by file or hunk
Configuration:
- Global:
~/.pi/agent/git-commit.json - Project:
.pi/git-commit.json - Project config overrides global config
Example:
{
"model": "anthropic/claude-opus-4-1"
}The configured provider/id must match the exact model shown by pi's model selector.
Installation:
/plugin install git@bromanko-llm-agentsComprehensive word exploration with dictionary definitions, etymology, and literary examples.
Skills:
word-explorer- Provides word profiles combining Webster's 1913 definitions, literary quotations, and usage guidance
Installation:
/plugin install word-explorer@bromanko-llm-agentsMaster typed functional programming in TypeScript with fp-ts library guidance.
Skills:
fp-ts- Expert guidance for Option, Either, Task, TaskEither, and functional composition patterns
Installation:
/plugin install fp-ts@bromanko-llm-agentsGleam-specific code review skills for quality, security, performance, and testing.
Skills:
code-review- Quality and idiom analysis for Gleam codesecurity-review- Security audit focusing on FFI safety, input validation, and dependenciesperformance-review- BEAM runtime optimization analysistest-review- Test coverage and quality assessment
Installation:
/plugin install gleam-review@bromanko-llm-agentsF#-specific code review skills for quality, security, performance, and testing.
Skills:
code-review- Quality and idiom analysis for F# codesecurity-review- Security audit focusing on .NET interop, serialization, input validation, and dependenciesperformance-review- .NET runtime optimization analysis (allocations, async, collections)test-review- Test coverage and quality assessment (Expecto, xUnit, FsCheck)
Installation:
/plugin install fsharp-review@bromanko-llm-agentsElm-specific code review skills for quality, security, performance, and testing.
Skills:
code-review- Quality and idiom analysis for Elm code (TEA, type design, decoders)security-review- Security audit focusing on port safety, JSON validation, and XSS preventionperformance-review- Virtual DOM rendering and data structure optimization analysistest-review- Test coverage and quality assessment (elm-test, fuzz testing, Test.Html)
Installation:
/plugin install elm-review@bromanko-llm-agentsThe repository includes an interactive code review command in pi/code-review/extensions/index.ts.
/review <language> [types...] [-r|--revisions <range>] [--fix <high|medium|low|all>] [--report <high|medium|low|all>]languageselects the review skill family (gleam,fsharp,elm, etc.).typesoptionally narrows tocode,security,performance, and/ortest.-r/--revisionsselects what changes to review. Default is@.--fixauto-queues follow-up fix requests at or above the given severity threshold.--reportrenders a deterministic markdown report for findings at or above the given severity threshold. Use it withpi -p.
/review gleam
/review gleam -r main..@
/review gleam code security -r abc123
/review gleam -r @ --fix high
/review fsharp test -r main..@ --fix medium
pi -p "/review gleam --report all"
pi -p "/review fsharp security --report medium"/review gathers code changes by trying:
jj diff -r <range> --gitgitfallback (git difffor ranges,git show --patchfor single revisions)
If both fail, the command reports a deterministic error including the range and failing commands.
After installing a plugin:
- Browse commands: Use
/to see available commands - Get help: Most commands support
/command --help - Configure: Check plugin documentation for configuration options
- Create a new directory under
plugins/ - Add a
plugin.jsonmanifest file - Add your plugin components (commands, agents, hooks, etc.)
- Update
.claude-plugin/marketplace.jsonto register the plugin - Submit a pull request
plugins/your-plugin/
├── plugin.json # Plugin manifest
├── commands/ # Custom commands (optional)
├── agents/ # Custom agents (optional)
└── README.md # Plugin documentation (optional)
- Clone this repository
- Add the local marketplace:
/plugin marketplace add ./path/to/clone
- Install plugins for testing:
/plugin install plugin-name@bromanko-llm-agents
Validate the marketplace configuration:
claude plugin validate .Run the full test suite from the repository root:
npm testRun a single test file:
node --experimental-strip-types --test path/to/file.test.tsTest files are co-located with the module under test and named <module>.test.ts (or .test.js for existing JavaScript modules).
Exception: extension directories. Never place test files or non-extension support modules inside directories registered as pi.extensions in package.json (e.g. pi/jj/extensions/, pi/web/extensions/). Pi auto-discovers every *.ts file in those directories and loads them as extensions — test files will execute their test() calls on import, and library modules without a default export will fail to load. Place extension tests in test/extensions/ and shared library code in a package-local lib/ directory (for example pi/web/lib/).
For extension tests, use the shared mock helper in test/helpers.ts:
import test from "node:test";
import assert from "node:assert/strict";
import { createMockExtensionAPI } from "../../test/helpers.ts";
import extension from "./my-extension.ts";
test("registers and handles tool_call", async () => {
const pi = createMockExtensionAPI();
extension(pi as any);
const [handler] = pi.getHandlers("tool_call");
const result = await handler(
{ toolName: "bash", input: { command: "git push" } },
{ cwd: process.cwd(), sessionManager: { getBranch: () => [] } },
);
assert.equal(result?.block, true);
});No external testing dependencies are required. Tests use Node.js built-ins (node:test, node:assert/strict) and TypeScript support from --experimental-strip-types.
This repository now includes a first-party read override at pi/files/extensions/read.ts.
- Purpose: keep the familiar
readtool while adding direct line targeting for common paging workflows. - Supported parameters:
path,offset,limit,endLine,tail,aroundLine, andcontext. - Examples:
read package.json endLine=5read package.json tail=5read README.md aroundLine=280 context=2
- Image behavior: known image extensions (
.png,.jpg,.jpeg,.gif,.webp) still delegate to pi's built-in image read pipeline. - Prompt guidance: prefer
endLine,tail, andaroundLineoverhead,tail, orsedwhen you need a targeted read.
Run pi with this extension directly:
pi -e ./pi/files/extensions/read.tsThis repository now includes a first-party fetch extension at pi/web/extensions/fetch.ts.
- Purpose: fetch HTTP(S) URLs and return model-readable output with metadata (
URL, optionalFinal URL,Status,Content-Type,Method) plus a readable body. - MVP content handling:
application/json→ pretty-printed JSONtext/html→ conservative HTML-to-text conversiontext/*and markdown-like text → passthrough text- other content types → best-effort text fallback
- Truncation behavior: output is bounded by line/byte limits (defaults: 2000 lines, 50KB). When truncated, full output is saved to a temp file and the response includes a truncation notice with the saved path.
- Safety: non-HTTP(S) schemes are rejected (for example
file://). - Known non-goals (deferred): binary/PDF conversion and site-specific advanced scraping pipelines.
Run pi with this extension directly:
pi -e ./pi/web/extensions/fetch.tsThis repository now includes a first-party web_search extension at pi/web/extensions/web-search/index.ts.
- Purpose: discover current web sources via Brave Search and return bounded, citation-friendly output.
- Provider scope (v1):
braveonly.provider: "auto"resolves to Brave whenBRAVE_API_KEYis set.- Anthropic/Codex provider-native adapters are intentionally deferred to v2.
- Required env var:
BRAVE_API_KEY - Parameters:
query(required)provider(auto | brave)recency(day | week | month | year)limit(clamped to1..10, default5)enrich(boolean, defaultfalse)fetchTop(clamped to0..5, default0)
- Optional enrichment: when
enrich=true, top results are fetched through the local fetch pipeline (pi/web/lib/fetch-core.ts) and appended as bounded excerpts.
Run pi with this extension directly:
pi -e ./pi/web/extensions/web-search/index.tsThis repository includes a universal LSP extension at pi/lsp/extensions/lsp.ts that provides automatic diagnostics and code intelligence for any language with a configured LSP server.
- Auto diagnostics on write/edit: after every
writeoredittool call, the extension sends the file to the appropriate LSP server and appends any diagnostics directly to the tool result. No explicit tool call needed. - Format on write: optionally reformats the file after write/edit using the LSP server's formatting capability. Enabled by default.
lsptool for code intelligence: a single tool with anactionparameter for on-demand queries:languages— list detected servers and their statusdiagnostics— get current diagnostics for a filedefinition— go to definitionreferences— find all referenceshover— get hover/type informationsymbols— document or workspace symbols (passqueryfor workspace)rename— rename a symbolcode_actions— list available code actionsincoming_calls/outgoing_calls— call hierarchy
The extension merges configuration from three layers (lowest to highest precedence):
- Built-in defaults (
pi/lsp/lib/defaults.json) - User config (
~/.pi/agent/lsp.json) - Project config (
.pi/lsp.json)
Example .pi/lsp.json:
{
"formatOnWrite": true,
"diagnosticsOnWrite": true,
"autoCodeActions": false,
"idleTimeoutMinutes": 10,
"servers": {
"typescript-language-server": {
"args": ["--stdio", "--log-level=1"]
},
"custom-server": {
"command": "my-lsp",
"args": ["--stdio"],
"fileTypes": [".custom"],
"rootMarkers": ["custom.config"]
}
}
}- TypeScript/JavaScript via
typescript-language-server(.ts,.tsx,.js,.jsx)
Additional servers can be added via config files.
The extension is auto-loaded when using this repository as a pi package. To run directly:
pi -e ./pi/lsp/extensions/lsp.tsIntegration tests require typescript-language-server and typescript in PATH:
nix develop .#lsp-test -c node --experimental-strip-types --test pi/lsp/test/integration/typescript.e2e.test.tsCross-session token usage and cost reporting.
/session-stats [range] [by day|project|model]
/session-stats
/session-stats today
/session-stats last 7 days
/session-stats this month by project
/session-stats 2026-04-01..2026-04-06 by day
/session-stats all time by model
- Scans all saved sessions across all projects on this machine.
- Only saved sessions are counted. Ephemeral
--no-sessionruns are invisible. - Ranges are interpreted in local time.
- Does not invoke a model. Deterministic and read-only.
MIT